Personalização
Cada loja é configurada no painel e armazenada no seu banco de dados — veja 🏪 Criando uma loja. Os arquivos servem para o que todas as lojas têm em comum.
Qual arquivo decide o quê
Seção intitulada “Qual arquivo decide o quê”| Arquivo | O que ele decide | Aberto? |
|---|---|---|
config.lua | Framework, idioma, interação, ped padrão, comando, imagens, categorias, regras de assalto, identificadores | Sim |
bridge/server.lua | Dinheiro, contas, itens, inventário, empregos, notificações, callbacks e o alerta policial personalizado | Sim |
bridge/client.lua | Notificações, avisos de ajuda, dados do jogador e callbacks no cliente | Sim |
bridge/target.lua | Como vendedores e pontos de loja são adicionados ao ox_target ou qb-target | Sim |
bridge/utils.lua | Lê os identificadores de um jogador (Steam, licença, Discord, FiveM, Xbox) | Sim |
locales/*.lua | Textos dentro do jogo: notificações, avisos, mensagens de assalto | Sim |
html/locales.js | Textos dentro dos painéis e da janela da loja, para todos os doze idiomas | Legível |
html/index.html, style.css, script.js | Os painéis e a janela da loja | Legível |
list/peds.lua | Os modelos de ped oferecidos no painel | Protegido |
mic_shopcreator.sql | As nove tabelas, importadas uma única vez | Sim |
client.lua, server.lua | Lógica das lojas | Protegido |
config.lua
Seção intitulada “config.lua”| Opção | O que faz | Padrão |
|---|---|---|
Config.Locale | O idioma, dentro do jogo e nos painéis. Veja Idiomas | 'en' |
Config.Framework | 'esx' ou 'qbcore'. Não é detectado automaticamente. No QBox, use 'qbcore' — o QBox executa recursos QBCore através da sua camada de compatibilidade | 'esx' |
Config.Command | O comando que abre o painel do Shop Creator | 'shopcreator' |
Config.IdentifierType | Como donos e funcionários são reconhecidos: 'discord', 'license', 'esx' ou 'citizenid'. Veja Instalação | 'discord' |
Vendedores e interação
Seção intitulada “Vendedores e interação”| Opção | O que faz | Padrão |
|---|---|---|
Config.Interaction | 'ox_target', 'qb-target' ou 'default' (aviso de ajuda e tecla E) | 'ox_target' |
Config.RadiusInteract | Com 'default', quão perto em metros um jogador deve estar | 2.0 |
Config.SpawnNPC | false não coloca vendedores: um marcador (com 'default') ou uma esfera de target marca o local. Sem vendedor também significa que não há ninguém para assaltar | true |
Config.DefaultPed | Modelo usado quando um local não tem modelo definido ou tem um inválido | 'a_f_m_bevhills_01' |
Config.PedSpawnDistance | Os vendedores só existem enquanto houver um jogador dentro dessa distância em metros | 20.0 |
Produtos
Seção intitulada “Produtos”| Opção | O que faz | Padrão |
|---|---|---|
Config.Categories | As categorias oferecidas ao adicionar um produto; a janela da loja agrupa os produtos por elas | items, weapons, misc |
Config.InventoryImagePath | Uma lista de pastas de imagens. Para cada produto, a janela tenta carregar <item name>.png em cada pasta, na ordem, e usa a primeira que carregar | nui://ox_inventory/web/images/ |
Config.AllowEmployeesAddProducts | Em lojas de jogadores, define se os funcionários podem adicionar novos produtos. Os donos sempre podem; os funcionários sempre podem gerenciar os existentes | false |
Não usa ox_inventory? Aponte o Config.InventoryImagePath para a pasta de imagens do seu inventário, por exemplo nui://qb-inventory/html/images/. Adicione uma segunda entrada se as suas imagens estiverem divididas em mais de uma pasta.
Assaltos
Seção intitulada “Assaltos”| Opção | O que faz | Padrão |
|---|---|---|
Config.BlacklistWeapons | Pensado para ser a lista de armas que não podem iniciar um assalto. Esta versão não lê essa opção: qualquer arma inicia um assalto, e apenas mãos vazias nunca iniciam | weapon_unarmed, weapon_nightstick, weapon_stungun |
Config.RobberyNotifyJobs | Empregos alertados quando um assalto começa | police |
Config.PoliceAlert | "default" alerta os empregos acima com uma notificação e um blip por um minuto. "custom" chama TriggerPoliceAlert em bridge/server.lua | "default" |
Config.RobberyCooldown | Tempo de recarga padrão para uma loja que não tenha nenhum salvo. O código conta em minutos, assim como o campo por loja (o comentário no config.lua diz segundos) | 300 |
Config.TakeRobberyMoneyFromVault | Em lojas de jogadores, as recompensas em dinheiro saem do cofre da loja — e param quando ele esvazia | true |
| Opção | O que faz | Padrão |
|---|---|---|
Config.Screenshot | Anexa uma captura da tela do jogador aos logs do Discord. Precisa do screenshot-basic em execução | true |
A URL do webhook em si é definida por loja diretamente no painel, e não aqui.
Comandos e permissões
Seção intitulada “Comandos e permissões”| Comando | Quem pode usar | O que faz |
|---|---|---|
/shopcreator | ACE mic_shop.open | Abre o painel do Shop Creator. Renomeado com Config.Command e pode ser vinculado a uma tecla nas configurações do FiveM como qualquer comando |
Donos de lojas e funcionários não precisam de permissão ACE: a janela da loja mostra um botão de engrenagem para Shop Settings quando eles abrem uma loja da qual são donos ou onde trabalham.
Idiomas
Seção intitulada “Idiomas”Doze idiomas vêm incluídos: en, es, fr, de, it, pt, ru, ja, ko, zh-CN, ar e nl. Os textos ficam em dois lugares, e ambos seguem o Config.Locale:
locales/<code>.lua— o que o jogo mostra: notificações, avisos de ajuda, mensagens de assalto.html/locales.js— o que os painéis e a janela da loja mostram, um bloco por idioma.
Adicionando um idioma:
- Copie
locales/en.luaparalocales/<code>.luae traduza o texto à direita de cada linha. Mantenha as chaves e qualquer%s. - Adicione
locales/<code>.luaemshared_scriptsnofxmanifest.lua, ao lado dos outros, para que os jogadores o baixem. - Em
html/locales.js, copie o bloco'en', renomeie-o para o seu código e traduza-o. - Defina
Config.Localecom o seu código, dêrefreshe reinicie.
Uma chave que esteja faltando no seu arquivo Lua aparece no jogo como Translation not found: <key>.
A bridge
Seção intitulada “A bridge”Quatro arquivos abertos em bridge/. Mantenha os nomes das funções — o código da loja as chama pelo nome.
bridge/server.lua — um bloco para ESX e um para QBCore, escolhido por Config.Framework.
| Função | Para que serve |
|---|---|
GetPlayer, GetPlayerJob | O objeto do jogador e o seu emprego |
GetMoney, AddMoney, RemoveMoney | Dinheiro em mãos (cash) |
GetAccount, AddAccountMoney, RemoveAccountMoney | Contas nomeadas: bank, black_money |
GetInventoryItem, AddInventoryItem, RemoveInventoryItem | Itens. Lê diretamente pelo ox_inventory quando ele está em execução |
GetPlayerInventory | O inventário do dono, listado quando ele abastece sua loja |
ShowNotification | Notificações do lado do servidor |
RegisterServerCallback | Callbacks através do ESX ou QBCore |
TriggerPoliceAlert(x, y, z, shopLabel) | Chamado em todo assalto quando Config.PoliceAlert = "custom". Vazio por padrão — coloque a chamada do seu dispatch aqui |
bridge/client.lua — ShowNotification, ShowHelpNotification, GetPlayerData e TriggerServerCallback. No QBCore, ShowHelpNotification vem vazio; preencha-o com sua própria chamada de texto de ajuda ou draw-text se você usar Config.Interaction = 'default' ou se quiser ver o aviso de convite de funcionário.
bridge/target.lua — adiciona a opção de “abrir loja” a cada vendedor (ou a uma pequena esfera quando Config.SpawnNPC está desativado) para ox_target ou qb-target, e os remove novamente quando as lojas mudam.
Dispatch policial personalizado: defina Config.PoliceAlert = "custom" e escreva o alerta do seu recurso de dispatch dentro de TriggerPoliceAlert em bridge/server.lua. Ele recebe as coordenadas do vendedor e o nome da loja.
Exports
Seção intitulada “Exports”Exports de cliente para abrir lojas a partir de outro recurso:
| Export | Argumentos | O que faz |
|---|---|---|
OpenShop | ID da loja, ID do local | Abre a janela daquela loja, respeitando seu tempo de recarga e restrição de emprego |
OpenShopAsEmployee | ID da loja, ID do local | O mesmo que OpenShop; a engrenagem de Shop Settings aparece se o jogador for dono ou trabalhar lá |
OpenShopAsOwner | — | Abre o painel do Shop Creator, caso o jogador tenha a permissão mic_shop.open |
Recursos de target também podem chamar o evento de cliente mic_shopcreator:client:openShop passando shopId e locationId nos dados, que é exatamente o que as opções de target integradas fazem. Os IDs de loja e de local são aqueles exibidos no painel.