Como adicionar itens a ox_inventory: items.lua, imagens e itens usáveis
Adicione um item personalizado a ox_inventory: a entrada data/items.lua, a imagem em web/images, dando-o com AddItem e tornando-o usável com uma exportação do cliente.
Você quer um novo item no seu servidor: um hambúrguer, um lockpick, uma bateria de telefone. Com ox_inventory, que os servidores ESX e QBox usam, um item é uma tabela Lua em um arquivo. Este artigo cobre a entrada, a imagem, dar o item a um jogador e torná-lo usável.
1. A entrada do item
Abra ox_inventory/data/items.lua. Dentro da tabela retornada, adicione uma entrada. A chave é o nome do item: minúsculo, sem espaços.
['burger'] = {
label = 'Burger',
weight = 220,
stack = true,
close = true,
description = 'A warm burger.',
},O que os campos fazem:
| Campo | Significado |
|---|---|
label |
Nome mostrado aos jogadores |
weight |
Peso de um item, em gramas |
stack |
true se vários podem compartilhar um slot, false se cada um leva seu próprio slot |
close |
true fecha o inventário quando o item é usado |
description |
Texto sob o rótulo |
Verifique os outros itens no mesmo arquivo pelos campos exatos que sua versão de ox_inventory suporta, e copie seu estilo. O arquivo é a melhor referência para sua instalação.
Atenção: um erro de sintaxe Lua em
items.luaimpede que ox_inventory comece. Verifique uma vírgula ausente entre entradas e uma chave de fechamento ausente.
2. A imagem
ox_inventory procura por um .png nomeado após o item:
ox_inventory/web/images/burger.pngO nome deve corresponder ao nome do item exatamente, e uma imagem ausente só mostra um ícone vazio. Uma imagem quadrada com cerca de 100 por 100 pixels ou maior, com fundo transparente, fica melhor.
3. Recarregue e dê a si mesmo
Reinicie o inventário para que leia o arquivo:
restart ox_inventoryDepois dê a si mesmo o item. Admins com permissão correta podem usar o comando /additem no jogo ou no console:
additem <player id> burger 1Se o comando for recusado, você está perdendo permissões de admin, veja Permissões ACE para admins.
4. Dê o item a partir de um script
No lado do servidor, use a exportação:
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 leva o id do jogador, o nome do item, a contagem e metadados opcionais. Remover e verificar funcionam do mesmo jeito:
exports.ox_inventory:RemoveItem(source, 'burger', 1)
local count = exports.ox_inventory:Search(source, 'count', 'burger')Se o jogador não pode carregar o item por causa do peso ou slots, AddItem retorna false. Você pode verificar primeiro:
if exports.ox_inventory:CanCarryItem(source, 'burger', 1) then
exports.ox_inventory:AddItem(source, 'burger', 1)
end5. Torne o item usável
Um item pode executar código quando um jogador o usa. ox_inventory suporta isso na própria definição do item, com um bloco client que aponta para uma exportação de um de seus recursos:
['burger'] = {
label = 'Burger',
weight = 220,
stack = true,
close = true,
description = 'A warm burger.',
client = {
export = 'my_script.burger',
},
},O valor é resourceName.exportName. Em my_script, registre a exportação no cliente:
-- 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 remove um item e executa sua função apenas se o uso foi bem-sucedido. É a forma padrão de deixar ox_inventory manipular a animação, tempo de progresso e consumo, quando o item tem esses definidos.
O mesmo bloco pode carregar efeitos integrados em vez de uma exportação. Procure nos itens de comida e bebida já em items.lua pelas opções disponíveis, por exemplo status, anim e prop, e reutilize essa forma para seu próprio item de comida.
Itens usáveis no estilo ESX e QBCore
Scripts escritos para o framework registram itens usáveis com ESX.RegisterUsableItem('burger', ...) ou QBCore.Functions.CreateUseableItem('burger', ...). ox_inventory funciona com essas chamadas quando roda com o framework, então esses scripts não precisam mudar, desde que o item exista em items.lua.
Criando itens sem editar arquivos
Se você cria itens frequentemente, editar arquivos e reiniciar fica lento. Item Creator permite que você crie itens no jogo, para que não toque items.lua para cada um.
Item Creator V2Crie itens usáveis com animações, props, efeitos e muito mais — sem escrever código.a partir de € 18,15Ver o script →
Em QBCore e QBox
ox_inventory é o inventário de QBox, então tudo acima se aplica como está. Em QBCore, o inventário padrão é qb-inventory em vez disso, com itens em qb-core/shared/items.lua, coberto em adicionando itens em QBCore.
Lista de verificação
| Sintoma | Solução |
|---|---|
| Item não existe | Adicione a data/items.lua, depois restart ox_inventory |
| ox_inventory não inicia | Erro de sintaxe em items.lua; verifique vírgulas e chaves |
| Ícone vazio | Coloque <item name>.png em web/images |
AddItem retorna false |
Nome do item desconhecido, inventário cheio ou muito pesado |
| Item não faz nada quando usado | Adicione um bloco client com uma export e registre essa exportação |
| Script de item usável ignorado | O nome do item no script deve corresponder à chave em items.lua |
Respostas rápidas
Onde adiciono itens em ox_inventory?
Em ox_inventory/data/items.lua. Cada item é uma tabela associada pelo seu nome, e o mesmo nome é o arquivo de imagem em web/images.
Por que meu novo item não mostra ícone?
A imagem está faltando ou nomeada diferentemente. Coloque <item name>.png em ox_inventory/web/images, com o nome exato do item e extensão minúscula.
Preciso reiniciar o servidor após adicionar um item?
Não. Reinicie ox_inventory e o novo item é carregado. Se um script precisar, reinicie esse script também.
