Armas e munição ox_inventory: data/weapons.lua e armas desaparecendo
Armas desaparecem após reconectar com ox_inventory? Como as armas funcionam como itens: data/weapons.lua, itens de munição, durabilidade, AddItem para WEAPON_PISTOL e acessórios.
Você dá a um jogador uma pistola com um menu admin ou um script de trabalho. Ele desconecta, volta e a pistola desapareceu. Com ox_inventory, armas não são uma escala de equipamento separada: são itens, e qualquer coisa que não seja um item é removida. Este artigo explica como armas e munição funcionam, como dá-las corretamente e onde afinar durabilidade e acessórios.
Armas são itens
Em ox_inventory, o nome do item de uma arma é seu nome de hash, por exemplo WEAPON_PISTOL. Elas são definidas em ox_inventory/data/weapons.lua, não em items.lua. O arquivo retorna três grupos:
return {
Weapons = {
['WEAPON_PISTOL'] = {
label = 'Pistol',
weight = 1130,
durability = 0.1,
},
-- ...
},
Components = {
-- attachments
},
Ammo = {
-- ammo definitions
},
}Abra o arquivo em sua instalação: cada arma padrão tem uma entrada pronta, e essa é a referência para os campos exatos de sua versão. Uma arma faltando de Weapons é simplesmente não um item válido.
Por que armas desaparecem ao reconectar
Scripts antigos do ESX e QBCore dão armas com nativos como GiveWeaponToPed, ou com o xPlayer.addWeapon do ESX. Isso coloca a arma nas mãos do ped para essa sessão, mas não é um item e nada o salva. ox_inventory também remove armas que não estão no inventário, então desaparecem ao reconectar ou até antes.
A correção é dar armas como itens, do servidor:
local success = exports.ox_inventory:AddItem(source, 'WEAPON_PISTOL', 1)
if not success then
print('Could not give the weapon: inventory full or unknown weapon')
endSubstitua cada chamada de script que concede uma arma por um nativo, addWeapon ou Player.Functions.AddItem('weapon_pistol', ...) por uma chamada AddItem com o nome da arma em maiúsculas. Um script que só funciona através de um nativo, como uma loja que aparece uma arma na mão, precisa essa mudança antes de funcionar em um servidor usando ox_inventory.
Dica: nomes de armas são sensíveis a maiúsculas em listas de itens, e
WEAPON_PISTOLé a forma que ox_inventory usa. Um script antigo que enviaweapon_pistolpode falhar por essa razão.
Itens de munição
Munição também é um item. O tipo de munição é nomeado pelo ammoname de uma arma em sua entrada, por exemplo ammo-9 para 9 mm:
exports.ox_inventory:AddItem(source, 'ammo-9', 60)Quando um jogador usa um item de munição com uma arma equipada que a aceita, ox_inventory a carrega na arma, e a arma mantém sua própria contagem de munição em seus metadados. Munição aparece como um item no inventário quando não está carregada.
Verifique os nomes de itens em sua versão em data/items.lua e data/weapons.lua. O padrão é ammo-<type>, por exemplo ammo-9, ammo-rifle, ammo-shotgun, e um item que não existe não pode ser adicionado.
Durabilidade e desgaste
Armas se desgastam quando são disparadas. O valor durability na entrada da arma define com que velocidade: um número maior significa que se degrada mais rápido. Uma arma com zero de durabilidade não funciona até ser consertada.
['WEAPON_PISTOL'] = {
label = 'Pistol',
weight = 1130,
durability = 0.05,
},Abaixe o número para fazer uma arma durar mais. Reparação é uma escolha gameplay: muitos servidores usam um item de reparação, uma receita de artesanato ou um mecânico, e você pode definir durabilidade de volta com SetMetadata (veja metadados de item em ox_inventory).
Acessórios (componentes)
Acessórios como uma lanterna, um supressor ou um carregador são itens listados no grupo Components, e eles têm suas próprias entradas em items.lua. Um jogador coloca um usando-o enquanto a arma está equipada. O componente é armazenado no item da arma, então sobrevive a uma reconexão.
Se um acessório não faz nada, verifique estas três coisas:
- o item de componente existe em
data/items.lua - está listado para essa arma em
data/weapons.lua - a arma está equipada quando o componente é usado
Você também pode adicionar um componente do servidor através de metadados de arma, por exemplo quando você vende uma arma pré-montada, mas teste-a com uma pistola normal primeiro, já que o formato de metadados depende de sua versão.
Vendendo armas em lojas
Armas aparecem em uma loja como qualquer item, com o mesmo nome:
{ name = 'WEAPON_PISTOL', price = 2500, license = 'weapon' },Veja lojas ox_inventory para o resto do formato da loja. Se um script de loja ainda dá armas por nativo, precisa da mudança mostrada acima.
Outros scripts que tocam armas
Menus admin, scripts de polícia, scripts de escala e sistemas de gang frequentemente usam nativos. Procure em seus recursos por essas chamadas e substitua-as:
GiveWeaponToPed(...)
GiveDelayedWeaponToPed(...)
xPlayer.addWeapon(...)Procure a pasta de recursos por addWeapon e GiveWeaponToPed, depois mude cada resultado para exports.ox_inventory:AddItem. Se você fizer para todos de uma vez, as armas param de desaparecer.
Lista de verificação
| Sintoma | Solução |
|---|---|
| Arma desaparece ao reconectar | Não era um item; dê-a com exports.ox_inventory:AddItem |
AddItem retorna false |
Nome desconhecido, inventário cheio ou muito pesado |
| Arma não funcionando | Nome deve ser maiúsculo, por exemplo WEAPON_PISTOL, e existir em data/weapons.lua |
| Sem munição após o uso | Verifique o ammoname da arma e o nome do item de munição |
| Arma quebra rápido demais | Abaixe durability em data/weapons.lua |
| Acessório não faz nada | Item de componente e entrada de arma devem corresponder, arma equipada |
Respostas rápidas
Por que minhas armas desaparecem quando reconecto com ox_inventory?
A arma foi dada ao ped com um nativo, não como um item. ox_inventory apenas mantém armas que são itens em seu inventário, então qualquer coisa dada de outra forma é perdida.
Como dou uma arma a um jogador com ox_inventory?
Use exports.ox_inventory:AddItem(source, 'WEAPON_PISTOL', 1) no servidor. O nome da arma é o nome do item, em letras maiúsculas.
Onde mudo o peso ou durabilidade de uma arma?
Em ox_inventory/data/weapons.lua. Cada arma tem uma entrada com seu rótulo, peso e durabilidade, e munição e componentes são definidos no mesmo arquivo.

