Come aggiungere elementi a ox_inventory: items.lua, immagini e elementi utilizzabili

Aggiungi un elemento personalizzato a ox_inventory: l'voce data/items.lua, l'immagine in web/images, darlo con AddItem, e renderlo utilizzabile con un client export.

Vuoi un nuovo elemento nel tuo server: un hamburger, un grimaldello, una batteria del telefono. Con ox_inventory, che i server ESX e QBox usano, un elemento è una tabella Lua in un file. Questo articolo copre l'voce, l'immagine, dare l'elemento a un giocatore, e renderlo utilizzabile.

1. L'voce dell'elemento

Apri ox_inventory/data/items.lua. All'interno della tabella restituita, aggiungi un'voce. La chiave è il nome dell'elemento: minuscolo, senza spazi.

lua
['burger'] = {
    label = 'Burger',
    weight = 220,
    stack = true,
    close = true,
    description = 'A warm burger.',
},

Cosa fanno i campi:

Campo Significato
label Nome mostrato ai giocatori
weight Peso di un elemento, in grammi
stack true se più possono condividere uno slot, false se ognuno occupa il suo slot
close true chiude l'inventario quando l'elemento viene usato
description Testo sotto l'etichetta

Controlla gli altri elementi nello stesso file per i campi esatti che la tua versione di ox_inventory supporta, e copia il loro stile. Il file è il miglior riferimento per il tuo install.

Attenzione: un errore di sintassi Lua in items.lua ferma ox_inventory dall'avviarsi. Controlla una virgola mancante tra le voci, e una parentesi graffa chiusa mancante.

2. L'immagine

ox_inventory cerca un .png nominato dopo l'elemento:

text
ox_inventory/web/images/burger.png

Il nome deve corrispondere esattamente al nome dell'elemento, e un'immagine mancante mostra solo un'icona vuota. Un'immagine quadrata intorno a 100 per 100 pixel o più grande, con uno sfondo trasparente, ha il miglior aspetto.

3. Ricarica e dallo a te stesso

Riavvia l'inventario in modo che legga il file:

text
restart ox_inventory

Poi datti l'elemento. Gli admin con il permesso giusto possono usare il comando /additem da dentro il gioco o dalla console:

text
additem <player id> burger 1

Se il comando viene rifiutato, ti mancano i permessi di admin, vedi Permessi ACE per gli admin.

4. Dai l'elemento da uno script

Sul lato server, usa l'export:

lua
local success = exports.ox_inventory:AddItem(source, 'burger', 1)
if not success then
    print('Could not add the item: inventory full or unknown item')
end

AddItem prende l'id del giocatore, il nome dell'elemento, il conteggio, e metadati opzionali. La rimozione e la verifica funzionano allo stesso modo:

lua
exports.ox_inventory:RemoveItem(source, 'burger', 1)

local count = exports.ox_inventory:Search(source, 'count', 'burger')

Se il giocatore non può portare l'elemento a causa del peso o degli slot, AddItem restituisce false. Puoi controllare prima:

lua
if exports.ox_inventory:CanCarryItem(source, 'burger', 1) then
    exports.ox_inventory:AddItem(source, 'burger', 1)
end

5. Rendi l'elemento utilizzabile

Un elemento può eseguire il codice quando un giocatore lo usa. ox_inventory lo supporta nella definizione dell'elemento stesso, con un blocco client che punta a un export di una delle tue risorse:

lua
['burger'] = {
    label = 'Burger',
    weight = 220,
    stack = true,
    close = true,
    description = 'A warm burger.',
    client = {
        export = 'my_script.burger',
    },
},

Il valore è resourceName.exportName. In my_script, registra l'export sul client:

lua
-- my_script/client.lua
exports('burger', function(data, slot)
    exports.ox_inventory:useItem(data, function(used)
        if used then
            print('Burger eaten')
        end
    end)
end)

useItem rimuove un elemento ed esegue la tua funzione solo se l'uso è andato a buon fine. È il modo standard per far gestire a ox_inventory l'animazione, il tempo di progresso e il consumo, quando l'elemento li ha impostati.

Lo stesso blocco può contenere effetti built-in invece di un export. Guarda gli elementi di cibo e bevande già in items.lua per le opzioni disponibili, ad esempio status, anim e prop, e riusa quella forma per il tuo elemento di cibo.

Elementi utilizzabili nello stile ESX e QBCore

Gli script scritti per il framework registrano gli elementi utilizzabili con ESX.RegisterUsableItem('burger', ...) o QBCore.Functions.CreateUseableItem('burger', ...). ox_inventory funziona con quelle chiamate quando viene eseguito con il framework, quindi quegli script non hanno bisogno di cambiamenti, purché l'elemento esista in items.lua.

Creare elementi senza modificare i file

Se crei elementi spesso, modificare file e riavviare diventa lento. Item Creator ti permette di creare elementi nel gioco, così non tocchi items.lua per ogni elemento.

Item Creator V2Crea oggetti utilizzabili con animazioni, props, effetti e altro — senza scrivere codice.da 18,15 €Vedi lo script →

Su QBCore e QBox

ox_inventory è l'inventario di QBox, quindi tutto quanto sopra si applica così com'è. Su QBCore, l'inventario predefinito è qb-inventory, con elementi in qb-core/shared/items.lua, coperto in aggiungere elementi su QBCore.

Checklist

Sintomo Soluzione
L'elemento non esiste Aggiungilo a data/items.lua, poi restart ox_inventory
ox_inventory non si avvia Errore di sintassi in items.lua; controlla le virgole e le parentesi graffe
Icona vuota Metti <item name>.png in web/images
AddItem restituisce false Nome elemento sconosciuto, inventario pieno, o troppo pesante
L'elemento non fa nulla quando viene utilizzato Aggiungi un blocco client con un export, e registra quell'export
Lo script dell'elemento utilizzabile viene ignorato Il nome dell'elemento nello script deve corrispondere alla chiave in items.lua

Risposte rapide

Dove aggiungo gli elementi in ox_inventory?

In ox_inventory/data/items.lua. Ogni elemento è una tabella con chiave il suo nome, e lo stesso nome è il file immagine in web/images.

Perché il mio nuovo elemento non mostra l'icona?

L'immagine manca o ha un nome diverso. Metti <item name>.png in ox_inventory/web/images, con il nome esatto dell'elemento e un'estensione minuscola.

Devo riavviare il server dopo aver aggiunto un elemento?

No. Riavvia ox_inventory e il nuovo elemento viene caricato. Se uno script ne ha bisogno, riavvia anche quello script.

Script senza questo problema

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

Continua a leggere