Ir al contenido

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.


ArchivoQué decide¿Abierto?
config.luaFramework, idioma, interacción, ped por defecto, comando, imágenes, categorías, reglas de atraco, identificadoresSí
bridge/server.luaDinero, cuentas, ítems, inventario, trabajos, notificaciones, callbacks y el aviso a la policía personalizadoSí
bridge/client.luaNotificaciones, avisos de ayuda, datos del jugador y callbacks en el clienteSí
bridge/target.luaCómo se añaden los tenderos y los puntos de tienda a ox_target o qb-targetSí
bridge/utils.luaLee los identificadores de un jugador (Steam, licencia, Discord, FiveM, Xbox)Sí
locales/*.luaTexto dentro del juego: notificaciones, avisos, mensajes de atracoSí
html/locales.jsTexto de los paneles y de la ventana de la tienda, para los doce idiomasLegible
html/index.html, style.css, script.jsLos paneles y la ventana de la tiendaLegible
list/peds.luaLos modelos de ped que se ofrecen en el panelCifrado
mic_shopcreator.sqlLas nueve tablas, importadas una vezSí
client.lua, server.luaLa lógica de las tiendasCifrado

OpciónQué hacePor defecto
Config.LocaleEl 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.CommandEl comando que abre el panel del Shop Creator'shopcreator'
Config.IdentifierTypeCómo se reconoce a los dueños y empleados: 'discord', 'license', 'esx' o 'citizenid'. Consulta Instalación'discord'
OpciónQué hacePor defecto
Config.Interaction'ox_target', 'qb-target' o 'default' (aviso de ayuda y E)'ox_target'
Config.RadiusInteractCon 'default', a cuántos metros debe estar un jugador2.0
Config.SpawnNPCfalse 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 atracartrue
Config.DefaultPedModelo usado cuando una ubicación no tiene ninguno, o tiene uno no válido'a_f_m_bevhills_01'
Config.PedSpawnDistanceLos tenderos solo existen mientras haya un jugador a menos de estos metros20.0
OpciónQué hacePor defecto
Config.CategoriesLas categorías que se ofrecen al añadir un producto; la ventana de la tienda agrupa los productos por ellasitems, weapons, misc
Config.InventoryImagePathUna 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 carganui://ox_inventory/web/images/
Config.AllowEmployeesAddProductsEn las tiendas con dueño, si los empleados pueden añadir productos nuevos. Los dueños siempre pueden; los empleados siempre pueden gestionar los existentesfalse

¿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.

OpciónQué hacePor defecto
Config.BlacklistWeaponsPensado 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 hacenweapon_unarmed, weapon_nightstick, weapon_stungun
Config.RobberyNotifyJobsLos trabajos que reciben el aviso cuando empieza un atracopolice
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.RobberyCooldownCooldown 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.TakeRobberyMoneyFromVaultEn las tiendas con dueño, las recompensas en dinero salen de la caja fuerte de la tienda, y se detienen cuando está vacíatrue
OpciónQué hacePor defecto
Config.ScreenshotAdjunta una captura de la pantalla del jugador a los logs de Discord. Necesita screenshot-basic en marchatrue

La URL del webhook en sí se fija por tienda en el panel, no aquí.


ComandoQuién puede usarloQué hace
/shopcreatorACE mic_shop.openAbre 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.


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:

  1. Copia locales/en.lua a locales/<code>.lua y traduce el texto de la derecha de cada línea. Mantén las claves y cualquier %s.
  2. Añade locales/<code>.lua a shared_scripts en fxmanifest.lua, junto a los demás, para que los jugadores lo descarguen.
  3. En html/locales.js, copia el bloque 'en', renómbralo con tu código y tradúcelo.
  4. Pon Config.Locale con tu código, haz refresh y reinicia.

Una clave que falte en tu archivo Lua aparece en el juego como Translation not found: <key>.


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ónPara qué sirve
GetPlayer, GetPlayerJobEl objeto del jugador y su trabajo
GetMoney, AddMoney, RemoveMoneyEfectivo
GetAccount, AddAccountMoney, RemoveAccountMoneyCuentas con nombre: bank, black_money
GetInventoryItem, AddInventoryItem, RemoveInventoryItemÍtems. Lee a través de ox_inventory cuando está en marcha
GetPlayerInventoryEl inventario del dueño, que se lista cuando abastece su tienda
ShowNotificationNotificaciones del lado del servidor
RegisterServerCallbackCallbacks 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 de cliente para abrir tiendas desde otro recurso:

ExportArgumentosQué hace
OpenShopID de tienda, ID de ubicaciónAbre la ventana de esa tienda, respetando su cooldown y su restricción de trabajo
OpenShopAsEmployeeID de tienda, ID de ubicaciónLo 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.