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:

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

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

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

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

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

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

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

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

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