Negozi ox_inventory: data/shops.lua, RegisterShop e blip
Come creare un negozio in ox_inventory: l'voce data/shops.lua, prezzi e valuta, posizioni e target, negozi bloccati dal lavoro, RegisterShop da un'altra risorsa, e blip.
Un negozio in ox_inventory è un elenco di articoli con prezzi, e uno o più posti dove i giocatori possono aprirlo. Puoi modificare un file, o registrare il negozio dalla tua stessa risorsa. Questo articolo copre entrambi, più prezzi, valute, restrizioni di lavoro, ox_target e blip.
L'voce del negozio in data/shops.lua
Apri ox_inventory/data/shops.lua. Ogni negozio è una tabella con chiave il tipo di negozio:
return {
General = {
name = 'Shop',
inventory = {
{ name = 'burger', price = 10 },
{ name = 'water', price = 5, count = 50 },
{ name = 'lockpick', price = 150 },
},
locations = {
vec3(25.7, -1347.3, 29.5),
},
},
}La chiave (General) è il tipo di negozio. I campi:
| Campo | Significato |
|---|---|
name |
Titolo mostrato in cima al negozio |
inventory |
Gli articoli in vendita |
locations |
Coordinate dove i giocatori possono aprire il negozio |
targets |
Stessa idea, ma con riquadri ox_target (vedi sotto) |
groups |
Lavori autorizzati a usare il negozio |
blip |
Impostazioni del blip della mappa |
Controlla le voci predefinite nella tua copia del file: mostrano i campi esatti che la tua versione supporta, e il modo migliore per iniziare è copiarne una e cambiarla.
Attenzione: ogni nome di elemento in
inventorydeve esistere indata/items.lua. Un negozio che elenca un elemento mancante può non riuscire ad aprire o stampare errori. Vedi aggiungere elementi a ox_inventory.
Articoli, prezzi e valuta
Ogni riga di inventory è una piccola tabella:
inventory = {
{ name = 'water', price = 5 },
{ name = 'sandwich', price = 12, count = 20 },
{ name = 'lockpick', price = 150, currency = 'black_money' },
{ name = 'WEAPON_PISTOL', price = 2500, license = 'weapon' },
},priceè quello che costa un'unità.countè lo stock. Senza di esso l'elemento è illimitato, e con esso lo stock diminuisce man mano che i giocatori comprano.currencyè l'elemento che lo paga. Per impostazione predefinita è soldi, eblack_moneyè un'alternativa comune.licensechiede una licenza prima che il giocatore possa comprare.gradelimita un elemento a un voto di lavoro minimo, quando il negozio usagroups.
Apertura: locations e targets
Con locations, ox_inventory mostra un'interazione a quelle coordinate. Con targets, crea riquadri ox_target, che è meglio per un banco o una finestra:
targets = {
{
loc = vec3(25.7, -1347.3, 29.5),
length = 0.7,
width = 0.5,
heading = 0.0,
minZ = 29.0,
maxZ = 31.0,
distance = 1.5,
},
},ox_target deve essere in esecuzione perché questo funzioni, poiché il negozio ne dipende. Se vuoi solo uno dei due modi, rimuovi l'altra tabella.
Negozi bloccati dal lavoro e blip
Limita un negozio a un lavoro con groups, usando nomi di lavori e voti minimi:
Police = {
name = 'Police armory',
groups = { police = 0 },
inventory = {
{ name = 'WEAPON_STUNGUN', price = 0 },
{ name = 'ammo-9', price = 0, count = 200 },
},
locations = { vec3(480.2, -996.5, 30.7) },
},Per un blip della mappa, aggiungi una tabella blip al negozio:
blip = { id = 59, colour = 69, scale = 0.8 },id è il numero dello sprite e colour il numero del colore. I numeri vengono dagli elenchi di blip di GTA, e la stessa idea è spiegata in creazione di blip in FiveM. Riavvia ox_inventory per applicare i cambiamenti del file.
Registra un negozio da un'altra risorsa
Quando un negozio è creato dal tuo script, ad esempio da una risorsa aziendale o di lavoro, non modificare data/shops.lua. Registralo sul server:
-- server.lua of your resource
exports.ox_inventory:RegisterShop('Bakery', {
name = 'Bakery',
inventory = {
{ name = 'bread', price = 4 },
{ name = 'croissant', price = 6, count = 30 },
},
locations = {
vec3(-1285.7, -1127.1, 6.8),
},
})RegisterShop(type, data) prende la stringa di tipo e la stessa tabella del file. Registrala all'avvio della risorsa. Se ox_inventory si riavvia, la tua risorsa deve registrare di nuovo il negozio, quindi registra anche su onServerResourceStart per ox_inventory:
AddEventHandler('onServerResourceStart', function(resource)
if resource == 'ox_inventory' then
registerMyShops()
end
end)Apri un negozio dal client
Se non vuoi una posizione o un target sul negozio, o vuoi aprirlo dalla tua stessa interfaccia, usa l'export del client:
exports.ox_inventory:openInventory('shop', { type = 'General', id = 1 })type è la chiave del negozio. id è la posizione della posizione nell'elenco locations (o targets), iniziando da 1. Se un negozio ha una posizione, usa id = 1. Un negozio senza posizioni che è stato registrato dal codice è aperto solo con il suo tipo, quindi testa la tua versione se id è necessario.
Consiglio: il server controlla comunque il negozio quando lo apri, quindi un client non può comprare da un negozio di lavoro per il quale non ha il lavoro.
Creare negozi senza modificare il codice
Se imposti molti negozi, modificare Lua diventa ripetitivo. Shop Creator ti permette di creare negozi nel gioco.
Shop CreatorCrea un negozio in meno di un minuto — proprietari, dipendenti, casseforti e rapine inclusi.da 24,20 €Vedi lo script →
Checklist
| Sintomo | Soluzione |
|---|---|
| Il negozio non appare | Riavvia ox_inventory dopo aver modificato data/shops.lua |
| Il negozio si apre vuoto o errori | Un elemento in inventory manca da data/items.lua |
| Non riesco a interagire con il negozio | Controlla locations o targets, e che ox_target è in esecuzione |
| Valuta sbagliata | Imposta currency sulla voce dell'elemento |
| Negozio di lavoro aperto a tutti | Aggiungi groups = { job = grade } |
| Il negozio registrato è perso dopo il riavvio | Chiama RegisterShop di nuovo quando ox_inventory si avvia |
Risposte rapide
Dove aggiungo un negozio in ox_inventory?
In ox_inventory/data/shops.lua, come una nuova voce con un nome, un elenco inventory e uno o più locations o targets. Riavvia ox_inventory dopo.
Un negozio può prendere soldi neri invece di contanti?
Sì. Imposta currency = 'black_money' sulla voce dell'elemento, e il negozio addebita quell'elemento invece dei soldi predefiniti.
Come creo un negozio dal mio script?
Chiama exports.ox_inventory:RegisterShop(type, data) sul server, poi aprilo dal client con exports.ox_inventory:openInventory('shop', { type = type }).
