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.
['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.luaferma 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:
ox_inventory/web/images/burger.pngIl 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:
restart ox_inventoryPoi datti l'elemento. Gli admin con il permesso giusto possono usare il comando /additem da dentro il gioco o dalla console:
additem <player id> burger 1Se 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:
local success = exports.ox_inventory:AddItem(source, 'burger', 1)
if not success then
print('Could not add the item: inventory full or unknown item')
endAddItem prende l'id del giocatore, il nome dell'elemento, il conteggio, e metadati opzionali. La rimozione e la verifica funzionano allo stesso modo:
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:
if exports.ox_inventory:CanCarryItem(source, 'burger', 1) then
exports.ox_inventory:AddItem(source, 'burger', 1)
end5. 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:
['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:
-- 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.
