registerHook unter dem Event-Namen onPreOpenInventory.
Das Öffnen des eigenen Spieler-Inventars löst diesen Hook nie aus.
Payload
Dieser Hook kann das Öffnen des Inventars durch
return false verhindern. Die Daten verlassen den Server nie, es ist also eine echte Zugriffskontrolle (Job-/Gang-/Whitelist-Prüfung), nicht nur eine UI-Prüfung.inventoryTypeFilter und inventoryFilter.
Bevorzuge zustandslose Hooks
Wenn ein Spieler die Inventar-Taste drückt, lädt der Client die Inventare in Reichweite vor (Stashes innerhalb von 3m einer konfigurierten Position, dazu nahe Kofferräume, Handschuhfächer, Shops, Mülleimer und Drops), bevor die UI öffnet, und jedes Vorladen löst diesen Hook aus. Dein Callback kann daher mehrmals für dasselbe Inventar laufen, und auch für Inventare, die der Spieler nie tatsächlich öffnet. Das betrifft nur Inventare mit konfigurierten Koordinaten - rein virtuelle, die von deinem eigenen Script programmatisch geöffnet werden, werden nie vorgeladen. Schreibe das Callback trotzdem nach Möglichkeit als reine Prüfung auf Job/Gang/Identifier. Ein One-Shot-Token-Muster (authorized[source] = inventoryId, beim ersten Treffer verbraucht) ist bei einem physisch platzierten Inventar anfällig für Race Conditions: Ein Vorladen kann das Token verbrauchen, bevor das echte Öffnen den Hook erreicht, und das Öffnen wird dann abgelehnt.
Wissenswertes
Private Stashes
Private Stashes
jaksam hängt
_<ownerCharIdentifier> an die IDs privater Stashes an, payload.inventoryId ist also die vollständig aufgelöste ID. Präfix-basierte Muster passen weiterhin, da das Suffix am Ende steht.Container
Container
Einen Container zu blockieren verhindert nur, dass er geöffnet wird. Ein Item auf einen geschlossenen Rucksack zu ziehen funktioniert weiterhin, denn das ist eine Item-Übertragung - nutze
onItemTransferred, um einzuschränken, was hineinkommt.forceOpenInventory löst diesen Hook weiterhin aus
forceOpenInventory löst diesen Hook weiterhin aus
forceOpenInventory überspringt die eigenen Berechtigungsprüfungen von jaksam, aber nicht deine Hooks - genau wie bei ox_inventory, dessen openInventory-Hook auch dann feuert, wenn forceOpenInventory ignoreSecurityChecks übergibt. Das bedeutet, dass ein Hook auch ein Admin-/openinventory, OpenInventoryById oder forceOpenInventoryOX blockieren kann, filtere also auf die Inventare, die dich wirklich interessieren, statt standardmäßig alles abzulehnen.Beispiele
Job-Stashes auf den eigenen Job beschränken
Job-Stashes auf den eigenen Job beschränken
registerHook-API, verfügbare Filter und das Rückgabewert-Verhalten.