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:

lua
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 inventory deve esistere in data/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:

lua
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, e black_money è un'alternativa comune.
  • license chiede una licenza prima che il giocatore possa comprare.
  • grade limita un elemento a un voto di lavoro minimo, quando il negozio usa groups.

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:

lua
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:

lua
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:

lua
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:

lua
-- 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:

lua
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:

lua
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 }).

Script senza questo problema

Shop CreatorCrea un negozio in meno di un minuto — proprietari, dipendenti, casseforti e rapine inclusi.Vedi script →Item Creator V2Crea oggetti utilizzabili con animazioni, props, effetti e altro — senza scrivere codice.Vedi script →

Continua a leggere