Estojos ox_inventory: RegisterStash, openInventory e estojos de trabalho

Como criar estojos em ox_inventory: registre um no servidor, abra-o do cliente ou ox_target, torne-o pessoal por jogador ou bloqueie para um trabalho.

Você precisa de um lugar para armazenar coisas: um armário de evidência da polícia, um guarda-roupa pessoal, um cofre em uma casa. Com ox_inventory isto é um estojo: um inventário nomeado com seus próprios slots e limite de peso, armazenado no banco de dados. Este artigo cobre registrar um estojo no servidor, abri-lo do cliente, torná-lo pessoal, restringi-lo a um trabalho e anexá-lo a uma zona ox_target.

Registre o estojo no servidor

Um estojo deve existir no servidor antes de qualquer um abri-lo. Registre uma vez, quando seu recurso começar:

lua
-- server.lua
exports.ox_inventory:RegisterStash('police_evidence', 'Evidence locker', 100, 500000, false)

Os argumentos, em ordem:

Argumento Significado
id String única. Usado para abrir o estojo e como sua chave no banco de dados
label Nome mostrado no topo do estojo
slots Número de slots
maxWeight Limite de peso, em gramas (500000 é 500 kg)
owner false para um estojo compartilhado, true para um por jogador, ou um identificador fixo
groups Tabela opcional de empregos permitidos para abri-lo
coords Posição opcional que o jogador deve estar perto

Apenas os primeiros quatro são necessários. O conteúdo é salvo por ox_inventory, então ele sobrevive a reinicializações de seu script e do servidor.

Atenção: o id é a identidade do estojo. Se você alterar 'police_evidence' para outra string depois, o conteúdo antigo fica no banco de dados sob o id antigo e o novo estojo começa vazio.

Abra-o do cliente

No cliente, abra o estojo com a exportação e o mesmo id:

lua
-- client.lua
exports.ox_inventory:openInventory('stash', 'police_evidence')

O servidor verifica groups e coords quando a solicitação chega, então o cliente não pode pular. Se o id do estojo nunca foi registrado, nada abre.

Você também pode abrir um estojo para um jogador do servidor, por exemplo de um comando ou um evento que você já validou:

lua
exports.ox_inventory:forceOpenInventory(source, 'stash', 'police_evidence')

Estojos pessoais: owner = true

Para um guarda-roupa ou um armário onde cada jogador tem seu próprio conteúdo, use owner = true:

lua
exports.ox_inventory:RegisterStash('personal_locker', 'Personal locker', 50, 100000, true)

O id do estojo é o mesmo para todos, mas ox_inventory anexa o identificador do jogador a ele, para que cada jogador obtenha um inventário separado. No ESX isto é a licença ou identificador do personagem, no QBox e QBCore o citizen id.

Você também pode passar um proprietário fixo, o que é útil para uma casa onde apenas o proprietário e pessoas que você decide podem vê-lo:

lua
local identifier = 'char1:abc123'
exports.ox_inventory:RegisterStash('house_' .. identifier, 'House storage', 80, 200000, identifier)

Quando o owner é uma string, qualquer um abrindo esse estojo está anexado a esse proprietário, então a verificação de acesso deve acontecer em seu próprio código de servidor antes de você abri-lo.

Estojos de trabalho: groups

groups é uma tabela de nomes de trabalho, cada um com o grau mínimo:

lua
exports.ox_inventory:RegisterStash(
    'police_armory',
    'Police armory',
    80,
    300000,
    false,
    { police = 0, sheriff = 2 }
)

Um jogador com o trabalho police no grau 0 ou superior pode abri-lo, e um sheriff apenas a partir do grau 2. Todos os outros são recusados pelo servidor. Isto funciona com empregos ESX, empregos QBCore e empregos QBox, porque ox_inventory os lê do framework.

Para também exigir que o jogador esteja na localização do estojo, passe coords como o último argumento:

lua
exports.ox_inventory:RegisterStash(
    'police_armory', 'Police armory', 80, 300000, false,
    { police = 0 }, vec3(452.1, -980.2, 30.7)
)

Abra-o com ox_target

Um estojo geralmente é aberto a partir de um local no mundo. Com ox_target, adicione uma zona que chama a exportação:

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,
        },
    },
})

O groups aqui apenas oculta a opção, o que é uma conveniência. A verificação real é aquela em RegisterStash. Para zonas em geral, veja adicionando uma zona ox_target.

Estojos definidos em um arquivo

Se você não quer escrever código, ox_inventory lê estojos de data/stashes.lua. Cada entrada tem um nome, um rótulo, slots, peso, owner opcional, groups e uma localização. Procure as entradas de exemplo naquele arquivo em sua versão, copie uma e reinicie ox_inventory. Use registro de código quando um estojo é criado por outro recurso, como um script de habitação.

Dica: para verificar se um estojo funciona, abra-o, coloque um item, reinicie seu recurso e abra novamente. Se o item ainda está lá, o id corresponde e o conteúdo é salvo.

Lista de verificação

Sintoma Solução
Estojo não abre Registre-o no servidor primeiro, com o mesmo id
Estojo vazio após renomear O id mudou; o conteúdo antigo está sob o id antigo
Todos compartilham o mesmo estojo pessoal Registre com owner = true
Um jogador sem o trabalho abre Adicione groups = { jobname = grade } em RegisterStash
Abre de qualquer lugar Passe coords como o último argumento
Precisa de itens para adicionar Veja adicionando itens a ox_inventory

Respostas rápidas

Qual é a diferença entre um estojo e um inventário de jogador em ox_inventory?

Um estojo é um armazenamento separado com seus próprios slots e limite de peso, identificado por um id de string. Pertence ao mundo, a um trabalho ou a um único jogador dependendo do owner e groups que você dá.

Como faço um estojo que é privado para cada jogador?

Registre-o com owner definido como true. ox_inventory então mantém uma cópia separada do estojo por jogador, então dois jogadores abrindo o mesmo id de estojo veem conteúdos diferentes.

Por que meu estojo abre vazio ou não abre?

O estojo não foi registrado no servidor, o id difere entre a chamada de registro e a chamada de abertura, ou o jogador está perdendo o trabalho exigido ou está muito longe de coords.

Scripts sem esse problema

Item Creator V2Crie itens usáveis com animações, props, efeitos e muito mais — sem escrever código.Ver script →Shop CreatorMonte uma loja em menos de um minuto — donos, funcionários, cofres e assaltos inclusos.Ver script →

Continue lendo