Nascondigli ox_inventory: RegisterStash, openInventory e nascondigli di lavoro
Come creare nascondigli in ox_inventory: registrarne uno sul server, aprirlo dal client o ox_target, renderlo personale per ogni giocatore, o bloccarlo a un lavoro.
Hai bisogno di un posto dove riporre le cose: un armadietto delle prove della polizia, un guardaroba personale, una cassaforte in una casa. Con ox_inventory questo è un nascondiglio: un inventario denominato con i suoi slot e il limite di peso, archiviato nel database. Questo articolo copre la registrazione di un nascondiglio sul server, l'apertura dal client, il rendering personale, la restrizione a un lavoro, e l'allegazione a una zona ox_target.
Registra il nascondiglio sul server
Un nascondiglio deve esistere sul server prima che qualcuno lo apra. Registralo una volta, quando la tua risorsa si avvia:
-- server.lua
exports.ox_inventory:RegisterStash('police_evidence', 'Evidence locker', 100, 500000, false)Gli argomenti, in ordine:
| Argomento | Significato |
|---|---|
id |
Stringa univoca. Usata per aprire il nascondiglio e come sua chiave nel database |
label |
Nome mostrato in cima al nascondiglio |
slots |
Numero di slot |
maxWeight |
Limite di peso, in grammi (500000 è 500 kg) |
owner |
false per un nascondiglio condiviso, true per uno per giocatore, o un identificatore fisso |
groups |
Tabella opzionale dei lavori autorizzati ad aprirlo |
coords |
Posizione opzionale in cui il giocatore deve stare vicino |
Solo i primi quattro sono richiesti. I contenuti vengono salvati da ox_inventory, quindi sopravvivono ai riavvii del tuo script e del server.
Attenzione: l'id è l'identità del nascondiglio. Se cambi
'police_evidence'in un'altra stringa in seguito, i vecchi contenuti rimangono nel database sotto il vecchio id e il nuovo nascondiglio inizia vuoto.
Aprilo dal client
Sul client, apri il nascondiglio con l'export e lo stesso id:
-- client.lua
exports.ox_inventory:openInventory('stash', 'police_evidence')Il server controlla groups e coords quando la richiesta arriva, quindi il client non può saltarli. Se l'id del nascondiglio non è mai stato registrato, nulla si apre.
Puoi anche aprire un nascondiglio per un giocatore dal server, ad esempio da un comando o da un evento che hai già validato:
exports.ox_inventory:forceOpenInventory(source, 'stash', 'police_evidence')Nascondigli personali: owner = true
Per un guardaroba o un armadietto dove ogni giocatore ha il suo contenuto, usa owner = true:
exports.ox_inventory:RegisterStash('personal_locker', 'Personal locker', 50, 100000, true)L'id del nascondiglio è lo stesso per tutti, ma ox_inventory allega l'identificatore del giocatore ad esso, così ogni giocatore ottiene un inventario separato. Su ESX è la licenza o l'identificatore del personaggio, su QBox e QBCore il citizen id.
Puoi anche passare un proprietario fisso, il che è utile per una casa in cui solo il proprietario e le persone che decidi possono vederla:
local identifier = 'char1:abc123'
exports.ox_inventory:RegisterStash('house_' .. identifier, 'House storage', 80, 200000, identifier)Quando il owner è una stringa, chiunque apra quel nascondiglio è allegato a quel proprietario, quindi il controllo di accesso dovrebbe accadere nel tuo codice server prima di aprirlo.
Nascondigli di lavoro: groups
groups è una tabella di nomi di lavori, ognuno con il voto minimo:
exports.ox_inventory:RegisterStash(
'police_armory',
'Police armory',
80,
300000,
false,
{ police = 0, sheriff = 2 }
)Un giocatore con il lavoro police al voto 0 o superiore può aprirlo, e uno sheriff solo dal voto 2. Tutti gli altri vengono rifiutati dal server. Questo funziona con i lavori ESX, i lavori QBCore e i lavori QBox, perché ox_inventory li legge dal framework.
Per richiedere anche che il giocatore stia al nascondiglio, passa coords come ultimo argomento:
exports.ox_inventory:RegisterStash(
'police_armory', 'Police armory', 80, 300000, false,
{ police = 0 }, vec3(452.1, -980.2, 30.7)
)Aprilo con ox_target
Un nascondiglio viene solitamente aperto da un punto nel mondo. Con ox_target, aggiungi una zona che chiama l'export:
exports.ox_target:addSphereZone({
coords = vec3(452.1, -980.2, 30.7),
radius = 1.0,
options = {
{
name = 'open_police_armory',
icon = 'fa-solid fa-box-archive',
label = 'Open armory',
groups = { police = 0 },
onSelect = function()
exports.ox_inventory:openInventory('stash', 'police_armory')
end,
},
},
})Il groups qui nasconde solo l'opzione, che è una comodità. Il controllo reale è quello su RegisterStash. Per le zone in generale, vedi aggiungere una zona ox_target.
Nascondigli definiti in un file
Se non vuoi scrivere codice, ox_inventory legge i nascondigli da data/stashes.lua. Ogni voce ha un nome, un'etichetta, slot, peso, owner opzionale, groups, e una posizione. Guarda le voci di esempio in quel file sulla tua versione, copia una, e riavvia ox_inventory. Usa la registrazione del codice quando un nascondiglio viene creato da un'altra risorsa, come uno script di alloggio.
Consiglio: per controllare se un nascondiglio funziona, aprilo, metti un elemento dentro, riavvia la tua risorsa, e aprilo di nuovo. Se l'elemento è ancora lì, l'id corrisponde e i contenuti vengono salvati.
Checklist
| Sintomo | Soluzione |
|---|---|
| Il nascondiglio non si apre | Registralo sul server per primo, con lo stesso id esatto |
| Il nascondiglio è vuoto dopo averlo rinominato | L'id è cambiato; i vecchi contenuti sono sotto il vecchio id |
| Tutti condividono lo stesso nascondiglio personale | Registra con owner = true |
| Un giocatore senza il lavoro lo apre | Aggiungi groups = { jobname = grade } in RegisterStash |
| Si apre da qualsiasi luogo | Passa coords come ultimo argomento |
| Hai bisogno di elementi da aggiungere | Vedi aggiungere elementi a ox_inventory |
Risposte rapide
Qual è la differenza tra un nascondiglio e un inventario del giocatore in ox_inventory?
Un nascondiglio è un archiviazione separata con i suoi slot e il limite di peso, identificato da un id stringa. Appartiene al mondo, a un lavoro o a un singolo giocatore a seconda di owner e groups che gli dai.
Come faccio a creare un nascondiglio che è privato per ogni giocatore?
Registralo con owner impostato su true. ox_inventory mantiene una copia separata del nascondiglio per giocatore, quindi due giocatori che aprono lo stesso id di nascondiglio vedono contenuti diversi.
Perché il mio nascondiglio si apre vuoto o non si apre affatto?
Il nascondiglio non è stato registrato sul server, l'id differisce tra la chiamata di registrazione e la chiamata di apertura, o al giocatore manca il lavoro richiesto o è troppo lontano da coords.

