Skip to main content
Hooks sind eine Möglichkeit, das Verhalten des Inventarsystems zu verändern. Sie werden auf dem Server registriert und können z.B. genutzt werden, um Spieler daran zu hindern, Items in ein bestimmtes Inventar zu verschieben. Einige Beispiele für Hooks findest du im Ordner jaksam_inventory/_hooks.

Best Practices

Filter nutzen

Verwende immer passende Filter, um unnötige Hook-Ausführungen zu vermeiden

Frühe Rückgaben

Nutze frühe returns, um Hooks zu verlassen, wenn Bedingungen nicht erfüllt sind

Performance

Halte die Hook-Logik schlank, um die Inventar-Performance nicht zu beeinträchtigen

Anwendungsbeispiele

  • Verhindern, dass Spieler Items mit dem Metadaten-Feld sole_owner stehlen (z.B. VIP-Items)
  • Verhindern, dass Spieler Polizeiwaffen in ihr persönliches Inventar verschieben
  • Nur einen Rucksack pro Spieler-Inventar erlauben
  • Items craften, indem ein bestimmtes Item auf ein anderes gezogen wird (z.B. Brot auf Fleisch ziehen ergibt ein Sandwich)
  • Item-Nutzung blockieren, wenn der Spieler gefesselt ist oder sich in bestimmten Zonen befindet
  • Item-Nutzungsstatistiken und Erfolge erfassen
  • Die Nutzung bestimmter Items in Fahrzeugen verhindern
  • Neuen Spieler-Inventaren bei der Erstellung Starter-Items hinzufügen
  • Mülltonnen oder Stashes bei der Erstellung mit zufälligen Items vorbefüllen

API-Funktionen

Einen Hook registrieren

Parameter

Rückgabewert

Einen Hook deregistrieren

Parameter

Alle Hooks einer Resource deregistrieren

Parameter

Options-Parameter

Der Options-Parameter akzeptiert eine Table mit Filtern zur Performance-Optimierung.

Verfügbare Hook-Events

Hook-Verhalten

Priorität

Höhere Zahlen werden zuerst ausgeführt (Standard: 0)

Rückgabewerte

return nil oder return true: die Aktion wird fortgesetzt.return false, "message", "notifyType": verhindert die Aktion und stoppt die weitere Hook-Ausführung. Die Parameter message und notifyType sind optional (notifyType kann "error", "success", "info" sein)
Ausnahme - onPreOpenInventory: die Nachricht wird dem Spieler nicht angezeigt, weil das Vorladen sie wiederholen würde. Rufe notifyPlayer innerhalb des Hooks auf, wenn du dem Spieler den Grund mitteilen möchtest.

ox_inventory-Kompatibilität

Wenn die ox_inventory-Kompatibilitätsressource installiert ist, wird exports.ox_inventory:registerHook(...) in die obigen nativen Hooks übersetzt, sodass ox_inventory-Scripts ohne Änderungen funktionieren. Payloads werden in das ox-Format umgewandelt, und auch die ox-Optionsnamen (itemFilter, typeFilter, inventoryFilter, print) werden übersetzt. Das Registrieren eines nicht unterstützten Hooks gibt eine Warnung aus und liefert nil zurück, statt einen Fehler zu werfen. Drei Unterschiede, die bei der Migration zu beachten sind:
  • Ein ox-Hook kann nur erlauben oder blockieren; er kann keine eigene Nachricht oder Benachrichtigungsart liefern. Nutze dafür die nativen Hooks
  • openInventory erbt die Anforderung der Zustandslosigkeit, die unter onPreOpenInventory beschrieben ist
  • Spieler-Inventare werden unterschiedlich identifiziert. ox-Hooks erhalten die Server-ID des Spielers als number (inventoryId = 4), passend zu ox_inventory. Native Hooks erhalten den Charakter-Identifier von jaksam als string (inventoryId = "char1:35030084..."). Jeder andere Inventartyp verwendet in beiden Fällen dieselbe string-ID