Personalizzazione
Ogni negozio viene configurato nel pannello e salvato nel tuo database — vedi 🏪 Creare un negozio. I file servono per ciò che tutti i negozi hanno in comune.
Quale file decide cosa
Sezione intitolata “Quale file decide cosa”| File | Cosa decide | Aperto? |
|---|---|---|
config.lua | Framework, lingua, interazione, ped predefinito, comando, immagini, categorie, regole delle rapine, identificatori | Sì |
bridge/server.lua | Denaro, conti, oggetti, inventario, lavori, notifiche, callback e l’allerta della polizia personalizzata | Sì |
bridge/client.lua | Notifiche, suggerimenti di aiuto, dati del giocatore e callback lato client | Sì |
bridge/target.lua | Come i negozianti e i punti negozio vengono aggiunti a ox_target o qb-target | Sì |
bridge/utils.lua | Legge gli identificatori di un giocatore (Steam, licenza, Discord, FiveM, Xbox) | Sì |
locales/*.lua | Testo in gioco: notifiche, suggerimenti, messaggi delle rapine | Sì |
html/locales.js | Testo all’interno dei pannelli e della finestra del negozio, per tutte le dodici lingue | Leggibile |
html/index.html, style.css, script.js | I pannelli e la finestra del negozio | Leggibile |
list/peds.lua | I modelli di ped proposti nel pannello | Protetto |
mic_shopcreator.sql | Le nove tabelle, importate una sola volta | Sì |
client.lua, server.lua | Logica dei negozi | Protetto |
config.lua
Sezione intitolata “config.lua”Generale
Sezione intitolata “Generale”| Opzione | Cosa fa | Predefinito |
|---|---|---|
Config.Locale | La lingua, in gioco e nei pannelli. Vedi Lingue | 'en' |
Config.Framework | 'esx' o 'qbcore'. Non rilevato automaticamente. Su QBox, usa 'qbcore' — QBox esegue le risorse QBCore tramite il suo livello di compatibilità | 'esx' |
Config.Command | Il comando che apre il pannello dello Shop Creator | 'shopcreator' |
Config.IdentifierType | Come vengono riconosciuti proprietari e dipendenti: 'discord', 'license', 'esx' o 'citizenid'. Vedi Installazione | 'discord' |
Negozianti e interazione
Sezione intitolata “Negozianti e interazione”| Opzione | Cosa fa | Predefinito |
|---|---|---|
Config.Interaction | 'ox_target', 'qb-target' o 'default' (suggerimento di aiuto e tasto E) | 'ox_target' |
Config.RadiusInteract | Con 'default', quanto vicino in metri deve trovarsi un giocatore | 2.0 |
Config.SpawnNPC | false non posiziona alcun negoziante: al suo posto un marker (con 'default') o una sfera target segna il punto. Nessun negoziante significa anche nessuno da rapinare | true |
Config.DefaultPed | Modello utilizzato quando una posizione non ne ha uno, o ne ha uno non valido | 'a_f_m_bevhills_01' |
Config.PedSpawnDistance | I negozianti esistono solo mentre un giocatore si trova entro questo numero di metri | 20.0 |
Prodotti
Sezione intitolata “Prodotti”| Opzione | Cosa fa | Predefinito |
|---|---|---|
Config.Categories | Le categorie proposte quando aggiungi un prodotto; la finestra del negozio raggruppa i prodotti in base ad esse | items, weapons, misc |
Config.InventoryImagePath | Un elenco di cartelle di immagini. Per ogni prodotto la finestra prova <item name>.png in ciascuna cartella in ordine, e usa la prima che si carica | nui://ox_inventory/web/images/ |
Config.AllowEmployeesAddProducts | Nei negozi di proprietà, stabilisce se i dipendenti possono aggiungere nuovi prodotti. I proprietari possono sempre; i dipendenti possono sempre gestire quelli esistenti | false |
Non usi ox_inventory? Fai puntare Config.InventoryImagePath alla cartella delle immagini del tuo inventario, ad esempio nui://qb-inventory/html/images/. Aggiungi una seconda voce se le tue immagini sono divise in più cartelle.
| Opzione | Cosa fa | Predefinito |
|---|---|---|
Config.BlacklistWeapons | Pensato per le armi che non possono avviare una rapina. Questa versione non lo legge: qualsiasi arma ne avvia una, e solo le mani nude non lo fanno mai | weapon_unarmed, weapon_nightstick, weapon_stungun |
Config.RobberyNotifyJobs | Lavori avvisati quando inizia una rapina | police |
Config.PoliceAlert | "default" avvisa i lavori qui sopra con una notifica e un blip per un minuto. "custom" chiama invece TriggerPoliceAlert in bridge/server.lua | "default" |
Config.RobberyCooldown | Tempo di attesa di riserva per un negozio che non ne ha uno salvato. Il codice lo calcola in minuti, come il campo per singolo negozio (il commento in config.lua dice secondi) | 300 |
Config.TakeRobberyMoneyFromVault | Nei negozi di proprietà, le ricompense in denaro vengono prelevate dalla cassaforte del negozio — e si fermano quando è vuota | true |
| Opzione | Cosa fa | Predefinito |
|---|---|---|
Config.Screenshot | Allega uno screenshot dello schermo del giocatore ai log di Discord. Richiede screenshot-basic in esecuzione | true |
L’URL del webhook vero e proprio si imposta per singolo negozio nel pannello, non qui.
Comandi e permessi
Sezione intitolata “Comandi e permessi”| Comando | Chi può usarlo | Cosa fa |
|---|---|---|
/shopcreator | ACE mic_shop.open | Apre il pannello dello Shop Creator. Rinominato con Config.Command e associabile a un tasto nelle impostazioni di FiveM come qualsiasi comando |
I proprietari e i dipendenti dei negozi non hanno bisogno di permessi ACE: la finestra del negozio mostra loro un pulsante a forma di ingranaggio per aprire Shop Settings quando aprono un negozio che possiedono o in cui lavorano.
Sono incluse dodici lingue: en, es, fr, de, it, pt, ru, ja, ko, zh-CN, ar e nl. Il testo si trova in due posizioni, ed entrambe seguono Config.Locale:
locales/<code>.lua— ciò che mostra il gioco: notifiche, suggerimenti di aiuto, messaggi delle rapine.html/locales.js— ciò che mostrano i pannelli e la finestra del negozio, un blocco per lingua.
Aggiungere una lingua:
- Copia
locales/en.luainlocales/<code>.luae traduci il testo a destra di ogni riga. Mantieni le chiavi e qualsiasi%s. - Aggiungi
locales/<code>.luaashared_scriptsinfxmanifest.lua, accanto agli altri, in modo che i giocatori lo scarichino. - In
html/locales.js, copia il blocco'en', rinominalo con il tuo codice e traducilo. - Imposta
Config.Localesul tuo codice, eseguirefreshe riavvia.
Una chiave mancante nel tuo file Lua appare in gioco come Translation not found: <key>.
Il bridge
Sezione intitolata “Il bridge”Quattro file aperti in bridge/. Mantieni invariati i nomi delle funzioni — il codice del negozio le chiama per nome.
bridge/server.lua — un blocco per ESX, uno per QBCore, scelto da Config.Framework.
| Funzione | A cosa serve |
|---|---|
GetPlayer, GetPlayerJob | L’oggetto giocatore e il suo lavoro |
GetMoney, AddMoney, RemoveMoney | Contanti |
GetAccount, AddAccountMoney, RemoveAccountMoney | Conti con nome: bank, black_money |
GetInventoryItem, AddInventoryItem, RemoveInventoryItem | Oggetti. Legge tramite ox_inventory quando è in esecuzione |
GetPlayerInventory | L’inventario del proprietario, elencato quando rifornisce il proprio negozio |
ShowNotification | Notifiche lato server |
RegisterServerCallback | Callback tramite ESX o QBCore |
TriggerPoliceAlert(x, y, z, shopLabel) | Chiamato a ogni rapina quando Config.PoliceAlert = "custom". Vuoto per impostazione predefinita — inserisci qui la chiamata al tuo dispatch |
bridge/client.lua — ShowNotification, ShowHelpNotification, GetPlayerData e TriggerServerCallback. Su QBCore, ShowHelpNotification è vuoto; riempilo con la tua chiamata help-text o draw-text se usi Config.Interaction = 'default' o se vuoi vedere il suggerimento di invito per i dipendenti.
bridge/target.lua — aggiunge l’opzione “apri negozio” a ogni negoziante (o a una piccola sfera quando Config.SpawnNPC è disattivato) per ox_target o qb-target, e li rimuove quando i negozi cambiano.
Dispatch della polizia personalizzato: imposta Config.PoliceAlert = "custom" e scrivi l’allerta della tua risorsa di dispatch all’interno di TriggerPoliceAlert in bridge/server.lua. Riceve le coordinate del negoziante e il nome del negozio.
Export lato client per aprire i negozi da un’altra risorsa:
| Export | Argomenti | Cosa fa |
|---|---|---|
OpenShop | ID negozio, ID posizione | Apre la finestra di quel negozio, rispettando il tempo di attesa e la restrizione di lavoro |
OpenShopAsEmployee | ID negozio, ID posizione | Uguale a OpenShop; l’ingranaggio di Shop Settings appare se il giocatore è proprietario o lavora lì |
OpenShopAsOwner | — | Apre il pannello dello Shop Creator, se il giocatore possiede il permesso mic_shop.open |
Le risorse target possono anche chiamare l’evento client mic_shopcreator:client:openShop passando shopId e locationId nei dati, che è esattamente ciò che fanno le opzioni target integrate. Gli ID del negozio e della posizione sono quelli mostrati nel pannello.