ox_inventory Verstecke: RegisterStash, openInventory und Job-Verstecke

Wie man Verstecke in ox_inventory erstellt: Registriere einen auf dem Server, öffne ihn vom Client oder ox_target, mache ihn privat pro Spieler, oder sperren ihn auf einen Job.

Du brauchst einen Ort zum Lagern von Dingen: Ein Polizei-Beweis-Fach, ein persönlicher Kleiderschrank, ein Safe in einem Haus. Mit ox_inventory ist dies ein Versteck: Ein benanntes Inventar mit seinen eigenen Slots und Gewichtslimit, gespeichert in der Datenbank. Dieser Artikel behandelt das Registrieren eines Verstecks auf dem Server, das Öffnen vom Client, das Privat-Machen, das Einschränken auf einen Job und das Anhängen an eine ox_target Zone.

Registriere das Versteck auf dem Server

Ein Versteck muss auf dem Server existieren, bevor jemand es öffnet. Registriere es einmal, wenn deine Ressource startet:

lua
-- server.lua
exports.ox_inventory:RegisterStash('police_evidence', 'Evidence locker', 100, 500000, false)

Die Argumente, in der Reihenfolge:

Argument Bedeutung
id Eindeutige String. Wird verwendet, um das Versteck zu öffnen und als Schlüssel in der Datenbank
label Name, der oben am Versteck angezeigt wird
slots Anzahl der Slots
maxWeight Gewichtslimit, in Grammen (500000 ist 500 kg)
owner false für einen gemeinsamen Versteck, true für einen pro Spieler, oder ein fester Identifizierer
groups Optionale Tabelle von Jobs, die berechtigt sind, ihn zu öffnen
coords Optionale Position, bei der der Spieler in der Nähe sein muss

Nur die ersten vier sind erforderlich. Die Inhalte werden von ox_inventory gespeichert, also überstehen sie Neustarts deines Skripts und des Servers.

Achtung: Die ID ist die Identität des Verstecks. Wenn du 'police_evidence' später in einen anderen String änderst, bleiben die alten Inhalte in der Datenbank unter der alten ID und das neue Versteck startet leer.

Öffne es vom Client

Auf dem Client öffne das Versteck mit dem Export und der gleichen ID:

lua
-- client.lua
exports.ox_inventory:openInventory('stash', 'police_evidence')

Der Server prüft groups und coords, wenn die Anfrage ankommt, also der Client kann sie nicht überspringen. Wenn die Versteck-ID nie registriert wurde, öffnet sich nichts.

Du kannst einen Versteck auch für einen Spieler vom Server öffnen, beispielsweise von einem Befehl oder Event, das du bereits validiert hast:

lua
exports.ox_inventory:forceOpenInventory(source, 'stash', 'police_evidence')

Persönliche Verstecke: owner = true

Für einen Kleiderschrank oder ein Fach, wo jeder Spieler seinen eigenen Inhalt hat, verwende owner = true:

lua
exports.ox_inventory:RegisterStash('personal_locker', 'Personal locker', 50, 100000, true)

Die Versteck-ID ist für alle gleich, aber ox_inventory hängt die Spieler-Kennung an, also bekommt jeder Spieler ein separates Inventar. Bei ESX ist das die Lizenz oder Kennung des Charakters, bei QBox und QBCore die Bürger-ID.

Du kannst auch einen festen Eigentümer weitergeben, was nützlich für ein Haus ist, wo nur der Eigentümer und Leute, die du entscheidest, ihn sehen können:

lua
local identifier = 'char1:abc123'
exports.ox_inventory:RegisterStash('house_' .. identifier, 'House storage', 80, 200000, identifier)

Wenn der owner ein String ist, wird jeder, der diesen Versteck öffnet, an diesen Eigentümer angehängt, also sollte die Zugriffs-Prüfung in deinem eigenen Server-Code stattfinden, bevor du ihn öffnest.

Job-Verstecke: groups

groups ist eine Tabelle von Job-Namen, jeweils mit dem Mindest-Rang:

lua
exports.ox_inventory:RegisterStash(
    'police_armory',
    'Police armory',
    80,
    300000,
    false,
    { police = 0, sheriff = 2 }
)

Ein Spieler mit dem police-Job bei Rang 0 oder höher kann ihn öffnen, und ein sheriff nur von Rang 2. Alle anderen werden vom Server abgelehnt. Dies funktioniert mit ESX-Jobs, QBCore-Jobs und QBox-Jobs, weil ox_inventory sie vom Framework liest.

Um auch zu verlangen, dass der Spieler am Versteck steht, übergebe coords als letztes Argument:

lua
exports.ox_inventory:RegisterStash(
    'police_armory', 'Police armory', 80, 300000, false,
    { police = 0 }, vec3(452.1, -980.2, 30.7)
)

Öffne es mit ox_target

Ein Versteck wird normalerweise von einem Ort in der Welt geöffnet. Mit ox_target, füge eine Zone hinzu, die den Export aufruft:

lua
exports.ox_target:addSphereZone({
    coords = vec3(452.1, -980.2, 30.7),
    radius = 1.0,
    options = {
        {
            name = 'open_police_armory',
            icon = 'fa-solid fa-box-archive',
            label = 'Open armory',
            groups = { police = 0 },
            onSelect = function()
                exports.ox_inventory:openInventory('stash', 'police_armory')
            end,
        },
    },
})

Der groups hier verbirgt nur die Option, was eine Bequemlichkeit ist. Die echte Prüfung ist die auf RegisterStash. Für Zonen im Allgemeinen siehe adding an ox_target zone.

Verstecke in einer Datei definiert

Wenn du keinen Code schreiben möchtest, liest ox_inventory Verstecke aus data/stashes.lua. Jeder Eintrag hat einen Namen, ein Label, Slots, Gewicht, optionale owner, groups und einen Standort. Schaue auf die Beispiel-Einträge in dieser Datei auf deiner Version, kopiere einen und starte ox_inventory neu. Verwende Code-Registrierung, wenn ein Versteck von einer anderen Ressource erstellt wird, wie ein Housing-Skript.

Tipp: Um zu prüfen, ob ein Versteck funktioniert, öffne es, lege einen Gegenstand ein, starte deine Ressource neu und öffne es erneut. Wenn der Gegenstand immer noch dort ist, passt die ID und die Inhalte sind gespeichert.

Checkliste

Symptom Behebung
Versteck öffnet sich nicht Registriere es zuerst auf dem Server mit der gleichen ID
Versteck ist leer, nachdem du es umbenannt hast Die ID änderte sich; die alten Inhalte sind unter der alten ID
Alle teilen den gleichen persönlichen Versteck Registriere mit owner = true
Ein Spieler ohne den Job öffnet ihn Füge groups = { jobname = grade } in RegisterStash hinzu
Öffnet sich von überall Übergebe coords als letztes Argument
Brauchst Gegenstände zum Hinzufügen Siehe adding items to ox_inventory

Kurze Antworten

Was ist der Unterschied zwischen einem Versteck und einem Spieler-Inventar in ox_inventory?

Ein Versteck ist ein separater Speicher mit seinen eigenen Slots und Gewichtslimit, identifiziert durch eine String-ID. Es gehört zur Welt, einem Job oder einem einzelnen Spieler, abhängig von dem owner und groups, das du ihm gibst.

Wie mache ich einen Versteck, der privat für jeden Spieler ist?

Registriere ihn mit owner auf true gesetzt. ox_inventory hält dann eine separate Kopie des Verstecks pro Spieler, also zwei Spieler, die die gleiche Versteck-ID öffnen, sehen verschiedene Inhalte.

Warum öffnet mein Versteck sich leer oder öffnet sich gar nicht?

Das Versteck wurde nicht auf dem Server registriert, die ID unterscheidet sich zwischen dem Registrierungs-Anruf und dem Öffnungs-Anruf, oder dem Spieler fehlt der erforderliche Job oder er ist zu weit weg von coords.

Scripts ohne dieses Problem

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

Weiterlesen