Personalización
Cada tienda se configura en el panel y se guarda en tu base de datos; consulta 🏪 Crear una tienda. Los archivos son para lo que tienen en común todas las tiendas.
Qué archivo decide qué
Sección titulada «Qué archivo decide qué»| Archivo | Qué decide | ¿Abierto? |
|---|---|---|
config.lua | Framework, idioma, interacción, ped por defecto, comando, imágenes, categorías, reglas de atraco, identificadores | Sí |
bridge/server.lua | Dinero, cuentas, ítems, inventario, trabajos, notificaciones, callbacks y el aviso a la policía personalizado | Sí |
bridge/client.lua | Notificaciones, avisos de ayuda, datos del jugador y callbacks en el cliente | Sí |
bridge/target.lua | Cómo se añaden los tenderos y los puntos de tienda a ox_target o qb-target | Sí |
bridge/utils.lua | Lee los identificadores de un jugador (Steam, licencia, Discord, FiveM, Xbox) | Sí |
locales/*.lua | Texto dentro del juego: notificaciones, avisos, mensajes de atraco | Sí |
html/locales.js | Texto de los paneles y de la ventana de la tienda, para los doce idiomas | Legible |
html/index.html, style.css, script.js | Los paneles y la ventana de la tienda | Legible |
list/peds.lua | Los modelos de ped que se ofrecen en el panel | Cifrado |
mic_shopcreator.sql | Las nueve tablas, importadas una vez | Sí |
client.lua, server.lua | La lógica de las tiendas | Cifrado |
config.lua
Sección titulada «config.lua»General
Sección titulada «General»| Opción | Qué hace | Por defecto |
|---|---|---|
Config.Locale | El idioma, dentro del juego y en los paneles. Consulta Idiomas | 'en' |
Config.Framework | 'esx' o 'qbcore'. No se detecta solo. En QBox, usa 'qbcore': QBox ejecuta los recursos de QBCore a través de su capa de compatibilidad | 'esx' |
Config.Command | El comando que abre el panel del Shop Creator | 'shopcreator' |
Config.IdentifierType | Cómo se reconoce a los dueños y empleados: 'discord', 'license', 'esx' o 'citizenid'. Consulta Instalación | 'discord' |
Tenderos e interacción
Sección titulada «Tenderos e interacción»| Opción | Qué hace | Por defecto |
|---|---|---|
Config.Interaction | 'ox_target', 'qb-target' o 'default' (aviso de ayuda y E) | 'ox_target' |
Config.RadiusInteract | Con 'default', a cuántos metros debe estar un jugador | 2.0 |
Config.SpawnNPC | false no coloca tenderos: en su lugar, un marcador (con 'default') o una esfera de target marca el sitio. Sin tendero tampoco hay nadie a quien atracar | true |
Config.DefaultPed | Modelo usado cuando una ubicación no tiene ninguno, o tiene uno no válido | 'a_f_m_bevhills_01' |
Config.PedSpawnDistance | Los tenderos solo existen mientras haya un jugador a menos de estos metros | 20.0 |
Productos
Sección titulada «Productos»| Opción | Qué hace | Por defecto |
|---|---|---|
Config.Categories | Las categorías que se ofrecen al añadir un producto; la ventana de la tienda agrupa los productos por ellas | items, weapons, misc |
Config.InventoryImagePath | Una lista de carpetas de imágenes. Para cada producto, la ventana prueba <item name>.png en cada carpeta por orden y usa la primera que carga | nui://ox_inventory/web/images/ |
Config.AllowEmployeesAddProducts | En las tiendas con dueño, si los empleados pueden añadir productos nuevos. Los dueños siempre pueden; los empleados siempre pueden gestionar los existentes | false |
¿No usas ox_inventory? Apunta Config.InventoryImagePath a la carpeta de imágenes de tu inventario, por ejemplo nui://qb-inventory/html/images/. Añade una segunda entrada si tus imágenes están repartidas en varias carpetas.
Atracos
Sección titulada «Atracos»| Opción | Qué hace | Por defecto |
|---|---|---|
Config.BlacklistWeapons | Pensado como las armas que no pueden iniciar un atraco. Esta versión no lo lee: cualquier arma inicia uno, y solo las manos desnudas nunca lo hacen | weapon_unarmed, weapon_nightstick, weapon_stungun |
Config.RobberyNotifyJobs | Los trabajos que reciben el aviso cuando empieza un atraco | police |
Config.PoliceAlert | "default" avisa a los trabajos de arriba con una notificación y un blip durante un minuto. "custom" llama en su lugar a TriggerPoliceAlert en bridge/server.lua | "default" |
Config.RobberyCooldown | Cooldown de reserva para una tienda que no tiene ninguno guardado. El código lo cuenta en minutos, igual que el campo de cada tienda (el comentario de config.lua dice segundos) | 300 |
Config.TakeRobberyMoneyFromVault | En las tiendas con dueño, las recompensas en dinero salen de la caja fuerte de la tienda, y se detienen cuando está vacía | true |
| Opción | Qué hace | Por defecto |
|---|---|---|
Config.Screenshot | Adjunta una captura de la pantalla del jugador a los logs de Discord. Necesita screenshot-basic en marcha | true |
La URL del webhook en sí se fija por tienda en el panel, no aquí.
Comandos y permisos
Sección titulada «Comandos y permisos»| Comando | Quién puede usarlo | Qué hace |
|---|---|---|
/shopcreator | ACE mic_shop.open | Abre el panel del Shop Creator. Se renombra con Config.Command y se puede asignar a una tecla en los ajustes de teclas de FiveM, como cualquier comando |
Los dueños y empleados de las tiendas no necesitan ningún permiso: la ventana de la tienda les muestra un botón de engranaje hacia Shop Settings cuando abren una tienda de la que son dueños o en la que trabajan.
Idiomas
Sección titulada «Idiomas»Vienen doce idiomas: en, es, fr, de, it, pt, ru, ja, ko, zh-CN, ar y nl. El texto está en dos sitios, y ambos siguen Config.Locale:
locales/<code>.lua: lo que muestra el juego: notificaciones, avisos de ayuda, mensajes de atraco.html/locales.js: lo que muestran los paneles y la ventana de la tienda, un bloque por idioma.
Añadir un idioma:
- Copia
locales/en.luaalocales/<code>.luay traduce el texto de la derecha de cada línea. Mantén las claves y cualquier%s. - Añade
locales/<code>.luaashared_scriptsenfxmanifest.lua, junto a los demás, para que los jugadores lo descarguen. - En
html/locales.js, copia el bloque'en', renómbralo con tu código y tradúcelo. - Pon
Config.Localecon tu código, hazrefreshy reinicia.
Una clave que falte en tu archivo Lua aparece en el juego como Translation not found: <key>.
El bridge
Sección titulada «El bridge»Cuatro archivos abiertos en bridge/. Mantén los nombres de las funciones: el código de las tiendas las llama por su nombre.
bridge/server.lua: un bloque para ESX y otro para QBCore, elegido por Config.Framework.
| Función | Para qué sirve |
|---|---|
GetPlayer, GetPlayerJob | El objeto del jugador y su trabajo |
GetMoney, AddMoney, RemoveMoney | Efectivo |
GetAccount, AddAccountMoney, RemoveAccountMoney | Cuentas con nombre: bank, black_money |
GetInventoryItem, AddInventoryItem, RemoveInventoryItem | Ítems. Lee a través de ox_inventory cuando está en marcha |
GetPlayerInventory | El inventario del dueño, que se lista cuando abastece su tienda |
ShowNotification | Notificaciones del lado del servidor |
RegisterServerCallback | Callbacks a través de ESX o QBCore |
TriggerPoliceAlert(x, y, z, shopLabel) | Se llama en cada atraco cuando Config.PoliceAlert = "custom". Vacío por defecto: pon aquí la llamada a tu dispatch |
bridge/client.lua: ShowNotification, ShowHelpNotification, GetPlayerData y TriggerServerCallback. En QBCore, ShowHelpNotification está vacío; rellénalo con tu propia llamada de texto de ayuda o draw text si usas Config.Interaction = 'default' o quieres ver el aviso de invitación de empleado.
bridge/target.lua: añade la opción “abrir tienda” a cada tendero (o a una pequeña esfera cuando Config.SpawnNPC está desactivado) para ox_target o qb-target, y las quita de nuevo cuando cambian las tiendas.
Dispatch de policía personalizado: pon Config.PoliceAlert = "custom" y escribe el aviso de tu recurso de dispatch dentro de TriggerPoliceAlert en bridge/server.lua. Recibe las coordenadas del tendero y el nombre de la tienda.
Exports
Sección titulada «Exports»Exports de cliente para abrir tiendas desde otro recurso:
| Export | Argumentos | Qué hace |
|---|---|---|
OpenShop | ID de tienda, ID de ubicación | Abre la ventana de esa tienda, respetando su cooldown y su restricción de trabajo |
OpenShopAsEmployee | ID de tienda, ID de ubicación | Lo mismo que OpenShop; el engranaje de Shop Settings aparece si el jugador es dueño o trabaja allí |
OpenShopAsOwner | — | Abre el panel del Shop Creator, si el jugador tiene mic_shop.open |
Los recursos de target también pueden llamar al evento de cliente mic_shopcreator:client:openShop con shopId y locationId en sus datos, que es lo que hacen las opciones de target integradas. Los IDs de tienda y de ubicación son los que se muestran en el panel.