Armi e munizioni di ox_inventory: data/weapons.lua e armi scomparse
Le armi scompaiono dopo la riconnessione con ox_inventory? Come funzionano le armi come elementi: data/weapons.lua, elementi di munizioni, durabilità, AddItem per WEAPON_PISTOL, e accessori.
Dai a un giocatore una pistola con un menu admin o uno script di lavoro. Si disconnettono, ritornano, e la pistola è sparita. Con ox_inventory, le armi non sono un carico separato: sono elementi, e qualsiasi cosa che non sia un elemento viene rimossa. Questo articolo spiega come funzionano le armi e le munizioni, come darle correttamente, e dove sintonizzare la durabilità e gli accessori.
Le armi sono elementi
In ox_inventory il nome dell'elemento di un'arma è il suo nome hash, ad esempio WEAPON_PISTOL. Sono definiti in ox_inventory/data/weapons.lua, non in items.lua. Il file restituisce tre gruppi:
return {
Weapons = {
['WEAPON_PISTOL'] = {
label = 'Pistol',
weight = 1130,
durability = 0.1,
},
-- ...
},
Components = {
-- attachments
},
Ammo = {
-- ammo definitions
},
}Apri il file nel tuo install: ogni arma predefinita ha un'voce pronta, e questo è il riferimento per i campi esatti della tua versione. Un'arma mancante da Weapons semplicemente non è un elemento valido.
Perché le armi scompaiono al riconnettimento
Gli script ESX e QBCore vecchi danno le armi con nativi come GiveWeaponToPed, o con xPlayer.addWeapon di ESX. Questo mette l'arma nelle mani del ped per quella sessione, ma non è un elemento e nulla lo salva. ox_inventory rimuove anche le armi che non sono nell'inventario, quindi scompaiono al riconnettimento o anche prima.
La soluzione è dare le armi come elementi, dal server:
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')
endSostituisci ogni chiamata di script che concede un'arma con un nativo, addWeapon o Player.Functions.AddItem('weapon_pistol', ...) con una chiamata AddItem con il nome dell'arma maiuscolo. Uno script che funziona solo attraverso un nativo, come un negozio che genera un'arma in mano, ha bisogno di quel cambiamento prima di funzionare su un server che usa ox_inventory.
Consiglio: i nomi delle armi sono sensibili alle maiuscole negli elenchi di elementi, e
WEAPON_PISTOLè la forma che ox_inventory usa. Uno script vecchio che inviaweapon_pistolpuò fallire per questo motivo.
Elementi di munizioni
Le munizioni sono un elemento anche loro. Il tipo di munizione è denominato dall'ammoname di un'arma nella sua voce, ad esempio ammo-9 per 9 mm:
exports.ox_inventory:AddItem(source, 'ammo-9', 60)Quando un giocatore usa un elemento di munizione con un'arma equipaggiata che lo accetta, ox_inventory lo carica nell'arma, e l'arma mantiene il suo numero di munizioni nella sua metadati. Le munizioni si mostrano come un elemento nell'inventario quando non sono caricate.
Controlla i nomi degli elementi sulla tua versione in data/items.lua e data/weapons.lua. Il pattern è ammo-<type>, ad esempio ammo-9, ammo-rifle, ammo-shotgun, e un elemento che non esiste non può essere aggiunto.
Durabilità e degradazione
Le armi si usano quando vengono sparate. Il valore durability nella voce dell'arma imposta quanto velocemente: un numero più alto significa che si degrada più velocemente. Un'arma a durabilità zero non funziona finché non viene riparata.
['WEAPON_PISTOL'] = {
label = 'Pistol',
weight = 1130,
durability = 0.05,
},Abbassa il numero per fare durare più a lungo un'arma. La riparazione è una scelta di gameplay: molti server usano un elemento di riparazione, una ricetta di artigianato o un meccanico, e puoi impostare la durabilità di nuovo con SetMetadata (vedi elemento metadati in ox_inventory).
Accessori (componenti)
Gli accessori come una torcia, un silenziatore o un caricatore sono elementi elencati nel gruppo Components, e hanno le loro voce in items.lua. Un giocatore ne mette uno usando mentre l'arma è equipaggiata. Il componente è archiviato sull'elemento dell'arma, così sopravvive a un riconnettimento.
Se un accessorio non fa nulla, controlla questi tre cose:
- l'elemento del componente esiste in
data/items.lua - è elencato per quell'arma in
data/weapons.lua - l'arma è equipaggiata quando il componente viene usato
Puoi anche aggiungere un componente dal server attraverso i metadati dell'arma, ad esempio quando vendi un'arma pre-costruita, ma testala con una pistola normale prima, poiché il formato dei metadati dipende dalla tua versione.
Vendita di armi in negozi
Le armi appaiono in un negozio come qualsiasi elemento, con lo stesso nome:
{ name = 'WEAPON_PISTOL', price = 2500, license = 'weapon' },Vedi negozi ox_inventory per il resto del formato del negozio. Se uno script di negozio ancora da le armi per nativo, ha bisogno del cambiamento mostrato sopra.
Altri script che toccano le armi
Menu admin, script di polizia, script di carico e sistemi di gang spesso usano i nativi. Cerca nelle tue risorse queste chiamate e sostituiscile:
GiveWeaponToPed(...)
GiveDelayedWeaponToPed(...)
xPlayer.addWeapon(...)Cerca la cartella delle risorse per addWeapon e GiveWeaponToPed, quindi cambia ogni colpo in exports.ox_inventory:AddItem. Se lo fai per tutti loro una volta, le armi smettono di scomparire.
Checklist
| Sintomo | Soluzione |
|---|---|
| L'arma scompare al riconnettimento | Non era un elemento; dallo con exports.ox_inventory:AddItem |
AddItem restituisce false |
Nome sconosciuto, inventario pieno, o troppo pesante |
| L'arma non funziona | Il nome deve essere maiuscolo, ad esempio WEAPON_PISTOL, e esistere in data/weapons.lua |
| Nessuna munizione dopo l'uso | Controlla l'ammoname dell'arma e il nome dell'elemento di munizione |
| L'arma si rompe troppo velocemente | Abbassa durability in data/weapons.lua |
| L'accessorio non fa nulla | L'elemento del componente e la voce dell'arma devono corrispondere, arma equipaggiata |
Risposte rapide
Perché le mie armi scompaiono quando mi riconnetto con ox_inventory?
L'arma è stata data al ped con un nativo, non come elemento. ox_inventory mantiene solo le armi che sono elementi nel tuo inventario, quindi qualsiasi cosa data in un altro modo viene persa.
Come do un'arma a un giocatore con ox_inventory?
Usa exports.ox_inventory:AddItem(source, 'WEAPON_PISTOL', 1) sul server. Il nome dell'arma è il nome dell'elemento, in lettere maiuscole.
Dove cambio il peso o la durabilità di un'arma?
In ox_inventory/data/weapons.lua. Ogni arma ha un'voce con la sua etichetta, peso e durabilità, e le munizioni e i componenti sono definiti nello stesso file.

