ox_inventory Waffen und Munition: data/weapons.lua und verschwindende Waffen

Waffen verschwinden nach Wiederverbindung mit ox_inventory? Wie Waffen als Gegenstände funktionieren: data/weapons.lua, Munitions-Gegenstände, Haltbarkeit, AddItem für WEAPON_PISTOL und Zubehör.

Du gibst einem Spieler eine Pistole mit einem Admin-Menü oder einem Job-Skript. Er trennt sich, kommt zurück und die Pistole ist weg. Mit ox_inventory sind Waffen keine separate Ausrüstung: Sie sind Gegenstände, und alles, was kein Gegenstand ist, wird entfernt. Dieser Artikel erklärt, wie Waffen und Munition funktionieren, wie man sie richtig gibt und wo man Haltbarkeit und Zubehör anpasst.

Waffen sind Gegenstände

In ox_inventory ist der Gegenstandsname einer Waffe ihr Hash-Name, beispielsweise WEAPON_PISTOL. Sie sind in ox_inventory/data/weapons.lua definiert, nicht in items.lua. Die Datei gibt drei Gruppen zurück:

lua
return {
    Weapons = {
        ['WEAPON_PISTOL'] = {
            label = 'Pistol',
            weight = 1130,
            durability = 0.1,
        },
        -- ...
    },
    Components = {
        -- attachments
    },
    Ammo = {
        -- ammo definitions
    },
}

Öffne die Datei in deiner Installation: Jede Standard-Waffe hat einen vorbereitet Eintrag, und das ist die Referenz für die genauen Felder deiner Version. Eine Waffe, die in Weapons fehlt, ist einfach kein gültiger Gegenstand.

Warum Waffen beim Wiederverbinden verschwinden

Alte ESX und QBCore Skripte geben Waffen mit nativen wie GiveWeaponToPed oder mit ESX's xPlayer.addWeapon. Das legt die Waffe für diese Sitzung in die Hände des Peds, aber es ist kein Gegenstand und nichts speichert es. ox_inventory entfernt auch Waffen, die nicht im Inventar sind, also verschwinden sie beim Wiederverbinden oder noch früher.

Die Behebung ist, Waffen als Gegenstände vom Server zu geben:

lua
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')
end

Ersetze jeden Skript-Aufruf, der eine Waffe mit einem nativen, addWeapon oder Player.Functions.AddItem('weapon_pistol', ...) gewährt, durch einen AddItem-Aufruf mit dem Großbuchstaben-Waffennamen. Ein Skript, das nur durch einen nativen funktioniert, wie ein Shop, der eine Waffe in die Hand spawnt, braucht diese Änderung, bevor es auf einem Server mit ox_inventory funktioniert.

Tipp: Waffennamen sind Groß-/Kleinschreibung-empfindlich in Gegenstand-Listen, und WEAPON_PISTOL ist die Form, die ox_inventory verwendet. Ein altes Skript, das weapon_pistol sendet, kann aus diesem Grund fehlschlagen.

Munitions-Gegenstände

Munition ist auch ein Gegenstand. Der Munitionstyp wird benannt durch einen Waffeneintrag ammoname, beispielsweise ammo-9 für 9 mm:

lua
exports.ox_inventory:AddItem(source, 'ammo-9', 60)

Wenn ein Spieler einen Munitions-Gegenstand mit einer ausgerüsteten Waffe verwendet, die ihn akzeptiert, lädt ox_inventory ihn in die Waffe, und die Waffe behält ihre eigene Munitions-Anzahl in ihren Metadaten. Munition zeigt sich als Gegenstand im Inventar, wenn sie nicht geladen ist.

Prüfe die Gegenstand-Namen auf deiner Version in data/items.lua und data/weapons.lua. Das Muster ist ammo-<type>, beispielsweise ammo-9, ammo-rifle, ammo-shotgun, und ein Gegenstand, der nicht existiert, kann nicht hinzugefügt werden.

Haltbarkeit und Verschleiß

Waffen nutzen ab, wenn sie abgefeuert werden. Der durability Wert im Waffeneintrag setzt, wie schnell: Eine höhere Zahl bedeutet, dass sie schneller verschleißt. Eine Waffe bei Null-Haltbarkeit funktioniert nicht, bis sie repariert wird.

lua
['WEAPON_PISTOL'] = {
    label = 'Pistol',
    weight = 1130,
    durability = 0.05,
},

Senke die Zahl, um eine Waffe länger halten zu lassen. Reparatur ist eine Gameplay-Wahl: Viele Server verwenden einen Reparatur-Gegenstand, ein Crafting-Rezept oder einen Mechaniker, und du kannst Haltbarkeit mit SetMetadata zurücksetzen (siehe item metadata in ox_inventory).

Zubehör (Komponenten)

Zubehör wie eine Taschenlampe, ein Schalldämpfer oder ein Magazin sind Gegenstände, die in der Components-Gruppe aufgelistet sind, und sie haben ihre eigenen Einträge in items.lua. Ein Spieler legt einen an, indem er ihn verwendet, während die Waffe ausgerüstet ist. Die Komponente wird auf dem Waffe-Gegenstand gespeichert, also überlebt sie eine Wiederverbindung.

Wenn Zubehör nichts tut, prüfe diese drei Dinge:

  • Der Komponenten-Gegenstand existiert in data/items.lua
  • Er ist für diese Waffe in data/weapons.lua aufgelistet
  • Die Waffe ist ausgerüstet, wenn die Komponente verwendet wird

Du kannst auch eine Komponente vom Server über Waffen-Metadaten hinzufügen, beispielsweise wenn du eine vorgefertigte Waffe verkaufst, aber teste es mit einer normalen Pistole zuerst, da das Metadaten-Format von deiner Version abhängt.

Verkaufen von Waffen in Läden

Waffen erscheinen in einem Laden wie jeder andere Gegenstand, mit dem gleichen Namen:

lua
{ name = 'WEAPON_PISTOL', price = 2500, license = 'weapon' },

Siehe ox_inventory shops für den Rest des Laden-Formats. Wenn ein Laden-Skript immer noch Waffen durch nativen gibt, braucht es die oben gezeigte Änderung.

Andere Skripte, die Waffen anfassen

Admin-Menüs, Polizei-Skripte, Ausrüstungs-Skripte und Gang-Systeme verwenden oft nativen. Durchsuche deine Ressourcen nach diesen Aufrufen und ersetze sie:

lua
GiveWeaponToPed(...)
GiveDelayedWeaponToPed(...)
xPlayer.addWeapon(...)

Durchsuche den Ressourcen-Ordner nach addWeapon und GiveWeaponToPed, dann schalte jeden Hit zu exports.ox_inventory:AddItem um. Wenn du das für alle tust, hören Waffen auf zu verschwinden.

Checkliste

Symptom Behebung
Waffe verschwindet beim Wiederverbinden Es war kein Gegenstand; Gib es mit exports.ox_inventory:AddItem
AddItem gibt falsch zurück Unbekannter Name, Inventar voll oder zu schwer
Waffe funktioniert nicht Name muss Großbuchstaben sein, beispielsweise WEAPON_PISTOL und existiert in data/weapons.lua
Keine Munition nach Verwendung Prüfe der Waffe ammoname und der Munitions-Gegenstandsname
Waffe bricht zu schnell Senke durability in data/weapons.lua
Zubehör tut nichts Komponenten-Gegenstand und Waffeneintrag müssen passen, Waffe ausgerüstet

Kurze Antworten

Warum verschwinden meine Waffen, wenn ich mich mit ox_inventory wiederverbinde?

Die Waffe wurde dem Ped mit einem nativen gegeben, nicht als Gegenstand. ox_inventory behält nur Waffen, die Gegenstände in deinem Inventar sind, also alles, was auf andere Weise gegeben wird, geht verloren.

Wie gebe ich einem Spieler eine Waffe mit ox_inventory?

Verwende exports.ox_inventory:AddItem(source, 'WEAPON_PISTOL', 1) auf dem Server. Der Waffenname ist der Gegenstandsname, in Großbuchstaben.

Wo ändere ich das Gewicht oder die Haltbarkeit einer Waffe?

In ox_inventory/data/weapons.lua. Jede Waffe hat einen Eintrag mit ihrem Label, Gewicht und Haltbarkeit, und Munition und Komponenten sind in der gleichen Datei definiert.

Scripts ohne dieses Problem

Shop CreatorBau einen Shop in unter einer Minute — Besitzer, Angestellte, Tresore und Überfälle inklusive.Script ansehen →Item Creator V2Erstelle nutzbare Items mit Animationen, Props, Effekten und mehr — ganz ohne Code.Script ansehen →

Weiterlesen