Armas y munición en ox_inventory: data/weapons.lua y armas desaparecidas
¿Las armas desaparecen después de reconectarse con ox_inventory? Cómo funcionan las armas como items: data/weapons.lua, items de munición, durabilidad, AddItem para WEAPON_PISTOL, y accesorios.
Das una pistola a un jugador con un menú de admin o un script de trabajo. Se desconecta, vuelve, y la pistola se ha ido. Con ox_inventory, las armas no son un equipamiento separado: son items, y cualquier cosa que no sea un item se elimina. Este artículo explica cómo funcionan las armas y la munición, cómo darlas correctamente, y dónde afinar la durabilidad y los accesorios.
Las armas son items
En ox_inventory el nombre del item de un arma es su nombre hash, por ejemplo WEAPON_PISTOL. Se definen en ox_inventory/data/weapons.lua, no en items.lua. El archivo devuelve tres grupos:
return {
Weapons = {
['WEAPON_PISTOL'] = {
label = 'Pistol',
weight = 1130,
durability = 0.1,
},
-- ...
},
Components = {
-- attachments
},
Ammo = {
-- ammo definitions
},
}Abre el archivo en tu instalación: cada arma predeterminada tiene una entrada lista, y esa es la referencia para los campos exactos de tu versión. Un arma faltante en Weapons simplemente no es un item válido.
Por qué las armas desaparecen en la reconexión
Los scripts antiguos de ESX y QBCore dan armas con nativos como GiveWeaponToPed, o con xPlayer.addWeapon de ESX. Eso pone el arma en las manos del ped para esa sesión, pero no es un item y nada lo guarda. ox_inventory también elimina armas que no están en el inventario, así que desaparecen en la reconexión o incluso antes.
La solución es dar armas como items, desde el 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')
endReemplaza cada llamada de script que otorga un arma con un nativo, addWeapon o Player.Functions.AddItem('weapon_pistol', ...) por una llamada a AddItem con el nombre del arma en mayúsculas. Un script que solo funciona a través de un nativo, como una tienda que genera un arma en la mano, necesita ese cambio antes de funcionar en un servidor que usa ox_inventory.
Consejo: los nombres de armas distinguen mayúsculas de minúsculas en listas de items, y
WEAPON_PISTOLes la forma que usa ox_inventory. Un script antiguo que envíaweapon_pistolpuede fallar por esa razón.
Items de munición
La munición también es un item. El tipo de munición se nombra por el ammoname de un arma en su entrada, por ejemplo ammo-9 para 9 mm:
exports.ox_inventory:AddItem(source, 'ammo-9', 60)Cuando un jugador usa un item de munición con un arma equipada que lo acepta, ox_inventory lo carga en el arma, y el arma mantiene su propio recuento de munición en sus metadatos. La munición se muestra como un item en el inventario cuando no está cargada.
Verifica los nombres de items en tu versión en data/items.lua y data/weapons.lua. El patrón es ammo-<tipo>, por ejemplo ammo-9, ammo-rifle, ammo-shotgun, y un item que no existe no puede ser añadido.
Durabilidad y degradación
Las armas se desgastan cuando se disparan. El valor de durability en la entrada del arma establece qué tan rápido: un número más alto significa que se degrada más rápidamente. Un arma con durabilidad cero no funciona hasta que se repara.
['WEAPON_PISTOL'] = {
label = 'Pistol',
weight = 1130,
durability = 0.05,
},Reduce el número para hacer que un arma dure más. La reparación es una elección de juego: muchos servidores usan un item de reparación, una receta de fabricación o un mecánico, y puedes establecer la durabilidad de nuevo con SetMetadata (véase item metadata in ox_inventory).
Accesorios (componentes)
Los accesorios como una linterna, un supresor o un cargador son items listados en el grupo Components, y tienen sus propias entradas en items.lua. Un jugador coloca uno usando mientras el arma está equipada. El componente se almacena en el item del arma, así que sobrevive una reconexión.
Si un accesorio no hace nada, verifica estas tres cosas:
- el item del componente existe en
data/items.lua - está listado para ese arma en
data/weapons.lua - el arma está equipada cuando se usa el componente
También puedes añadir un componente desde el servidor a través de metadatos de arma, por ejemplo cuando vendes un arma pre-construida, pero pruébalo con una pistola normal primero, ya que el formato de metadatos depende de tu versión.
Vender armas en tiendas
Las armas aparecen en una tienda como cualquier item, con el mismo nombre:
{ name = 'WEAPON_PISTOL', price = 2500, license = 'weapon' },Véase ox_inventory shops para el resto del formato de tienda. Si un script de tienda aún da armas por nativo, necesita el cambio mostrado arriba.
Otros scripts que tocan armas
Los menús de admin, scripts de policía, scripts de equipamiento y sistemas de pandillas a menudo usan nativos. Busca en tus recursos estas llamadas y reemplázalas:
GiveWeaponToPed(...)
GiveDelayedWeaponToPed(...)
xPlayer.addWeapon(...)Busca en la carpeta de recursos addWeapon y GiveWeaponToPed, luego cambia cada coincidencia a exports.ox_inventory:AddItem. Si lo haces para todos ellos una vez, las armas dejan de desaparecer.
Lista de verificación
| Síntoma | Solución |
|---|---|
| El arma desaparece en la reconexión | No era un item; dalo con exports.ox_inventory:AddItem |
AddItem devuelve false |
Nombre desconocido, inventario lleno, o demasiado pesado |
| El arma no funciona | El nombre debe ser mayúsculas, por ejemplo WEAPON_PISTOL, y existe en data/weapons.lua |
| Sin munición después del uso | Verifica el ammoname del arma y el nombre del item de munición |
| El arma se rompe demasiado rápido | Reduce durability en data/weapons.lua |
| El accesorio no hace nada | El item del componente y la entrada del arma deben coincidir, arma equipada |
Respuestas rápidas
¿Por qué mis armas desaparecen cuando me reconecto con ox_inventory?
El arma fue dada al ped con un nativo, no como un item. ox_inventory solo mantiene armas que son items en tu inventario, así que cualquier cosa dada de otra manera se pierde.
¿Cómo doy un arma a un jugador con ox_inventory?
Usa exports.ox_inventory:AddItem(source, 'WEAPON_PISTOL', 1) en el servidor. El nombre del arma es el nombre del item, en mayúsculas.
¿Dónde cambio el peso o durabilidad de un arma?
En ox_inventory/data/weapons.lua. Cada arma tiene una entrada con su etiqueta, peso y durabilidad, y la munición y componentes se definen en el mismo archivo.

