Accueil › Documentation › Hooks serveur · origen_inventory

Hooks serveur · origen_inventory

Les hooks permettent à d’autres ressources de s’abonner aux événements de l’inventaire côté serveur et, soit de consulter les données, soit de les modifier ou d’annuler l’action en renvoyant false.

Le système de hooks est exposé via deux exports, registerHook et removeHooks, et il est symétrique avec l’API de hooks côté client.

Tous les hooks de cette page s’exécutent côté serveur. Pour les hooks client (points du monde, événements d’interface), consulte Custom · Hooks client.


API

registerHook(event, callback, options?) → string (id)

Enregistre un hook serveur. Renvoie le hookId interne afin que tu puisses le supprimer plus tard.

lua
local hookId = exports.origen_inventory:registerHook('createItem', function(payload)
    return payload.metadata
end)
Paramètre Type Description
event string Nom de l’événement du hook (voir la liste ci-dessous).
callback function Appelé avec les données du hook.
options table? Filtres facultatifs (itemFilter, inventoryFilter, typeFilter, debugger).

Filtres (options)

lua
exports.origen_inventory:registerHook('swapItems', function(payload)
    -- only fires for these inventories / items / types
end, {
    itemFilter      = { tosti = true, water_bottle = true },
    inventoryFilter = { '^stash%-', '^trunk%-' },
    typeFilter      = { player = true, stash = true },
    debugger        = true, -- prints execution time and resource origin
})
Filtre Type Description
itemFilter table<string, true> Ne se déclenche que si le nom de l’objet concerné figure dans cet ensemble.
inventoryFilter string[] Motifs Lua comparés à l’id de l’inventaire source ou cible.
typeFilter table<string, true> Limite à certains types d’inventaire ou de boutique (player, stash, shop, drop, ...).
debugger boolean Journalise chaque appel du hook (ressource, événement, slot, temps d’exécution).

removeHooks(id?) → void

Supprime les hooks appartenant à la ressource appelante. Passe un id pour supprimer un seul hook, ou omets-le pour supprimer tous les hooks enregistrés par la ressource.

lua
exports.origen_inventory:removeHooks(hookId) -- single hook
exports.origen_inventory:removeHooks()        -- every hook from this resource

Les hooks sont aussi nettoyés automatiquement lors de onResourceStop ; tu n’as donc besoin d’appeler removeHooks que pour les enregistrements que tu modifies à chaud.


Contrat d’annulation

La plupart des hooks serveur respectent un contrat d’annulation :

La seule exception est createItem, qui est mutant : tu dois renvoyer la table metadata (éventuellement modifiée).


Référence des hooks

createItem

Déclenché lorsqu’un objet est ajouté à un inventaire et que ses métadonnées sont en cours d’initialisation. Mutant : doit renvoyer metadata.

Données reçues

Champ Type Description
inventoryId number|string Inventaire qui reçoit l’objet (src du joueur, id du stash, plaque, ...).
inventoryType string player, stash, trunk, glovebox, ...
item table Définition de l’objet en cours de création.
count number Quantité ajoutée.
metadata table Table de métadonnées modifiable.
lua
exports.origen_inventory:registerHook('createItem', function(payload)
    if payload.item.name == 'paperbag' and not payload.metadata.bagId then
        payload.metadata.bagId = math.random(1000, 9999)
    end
    return payload.metadata -- MUST return metadata
end)

Si tu oublies de renvoyer metadata, l’objet sera créé avec une table de métadonnées vide.


itemCreated

Déclenché après l’ajout d’un objet à un inventaire. Lecture seule / observation : la valeur renvoyée est ignorée.

Données reçues

Champ Type Description
inventoryId number|string Id de l’inventaire.
inventoryType string Type d’inventaire.
item table Le slot de l’objet qui vient d’être créé (avec slot, count, metadata).
count number Quantité ajoutée.
lua
exports.origen_inventory:registerHook('itemCreated', function(payload)
    print(('Item %s x%s added to %s'):format(payload.item.name, payload.count, payload.inventoryId))
end)

itemUsed

Déclenché après l’utilisation réussie d’un slot. Uniquement pour l’observation.

Données reçues

Champ Type Description
source number Id serveur du joueur.
inventoryId number|string Inventaire auquel appartient le slot.
inventoryType string Type d’inventaire.
item table Le slot de l’objet utilisé.
slot number Id du slot.
lua
exports.origen_inventory:registerHook('itemUsed', function(payload)
    if payload.item.name == 'lockpick' then
        -- log lockpick usage
    end
end)

useSlot

Déclenché avant l’utilisation d’un slot. Renvoie false pour annuler l’utilisation.

Données reçues

Champ Type Description
source number Id serveur du joueur.
inventoryId number|string Id de l’inventaire.
inventoryType string Type d’inventaire.
item table Le slot sur le point d’être utilisé.
slot number Id du slot.
lua
exports.origen_inventory:registerHook('useSlot', function(payload)
    if payload.item.name == 'weapon_pistol' and IsRestrictedZone(payload.source) then
        return false -- cancel use
    end
end)

swapItems

Déclenché avant tout déplacement / échange / fractionnement / don entre deux inventaires (de joueur à joueur, transferts de stash, coffre, drops, etc.). Renvoie false pour annuler le transfert.

Données reçues

Champ Type Description
source number? Id serveur du joueur (le cas échéant).
action string move, swap, split, give.
fromInventory string|number Id de l’inventaire source.
fromType string Type de l’inventaire source (player, stash, ...).
fromSlot table Données du slot déplacé.
toInventory string|number Id de l’inventaire de destination.
toType string Type de l’inventaire de destination.
toSlot table? Données du slot échangé (uniquement lors d’un échange ou d’une fusion).
count number Quantité déplacée.
lua
exports.origen_inventory:registerHook('swapItems', function(payload)
    -- block moving illegal items into a public trunk
    if payload.toType == 'trunk' and payload.fromSlot.name == 'weapon_rpg' then
        return false
    end
end)

createDrop

Déclenché avant la création d’un drop au sol. Renvoie false pour le bloquer.

Données reçues

Champ Type Description
source number Joueur qui crée le drop.
coords vector3 Coordonnées du drop.
item table Données du slot jeté.
count number Quantité jetée.
lua
exports.origen_inventory:registerHook('createDrop', function(payload)
    if Config.NoDropZones[GetZoneAtCoords(payload.coords)] then
        return false
    end
end)

buyItem

Déclenché avant la validation d’un achat en boutique. Renvoie false pour annuler l’achat.

Données reçues

Champ Type Description
source number Id serveur de l’acheteur.
shopType string Id de la boutique (p. ex. barber_supplies).
item table Objet acheté.
count number Quantité.
price number Prix unitaire.
currency string? Monnaie alternative facultative (cash, bank, personnalisée).
lua
exports.origen_inventory:registerHook('buyItem', function(payload)
    -- block restricted weapons from being bought outside police stations
    if payload.item.type == 'weapon' and not IsAtPoliceStation(payload.source) then
        return false
    end
end)

openInventory

Déclenché avant l’ouverture d’un stash ou d’une boutique. Renvoie false pour refuser l’accès.

Données reçues

Champ Type Description
source number Id serveur du joueur.
inventoryId string|number Id du stash ou de la boutique.
inventoryType string stash, shop, trunk, glovebox.
lua
exports.origen_inventory:registerHook('openInventory', function(payload)
    if payload.inventoryType == 'stash' and payload.inventoryId:match('^faction%-') then
        return PlayerHasFactionAccess(payload.source, payload.inventoryId)
    end
end)

clearInventory

Déclenché avant qu’un inventaire soit vidé. Renvoie false pour annuler le vidage.

Données reçues

Champ Type Description
inventoryId string|number Inventaire sur le point d’être vidé.
inventoryType string Type d’inventaire.
lua
exports.origen_inventory:registerHook('clearInventory', function(payload)
    if payload.inventoryType == 'stash' and IsAuditedStash(payload.inventoryId) then
        return false -- audited stashes cannot be wiped
    end
end)

itemExpired

Déclenché lorsqu’un objet avec decay arrive à expiration. Renvoie false pour conserver malgré tout l’objet dans le slot (rare : en général, on le laisse être supprimé).

Données reçues

Champ Type Description
inventoryId string|number Inventaire qui contient l’objet.
inventoryType string Type d’inventaire.
item table Le slot de l’objet expiré.
slot number Id du slot.
lua
exports.origen_inventory:registerHook('itemExpired', function(payload)
    if payload.item.name == 'sealed_evidence' then
        return false -- evidence does not decay even if config says so
    end
end)

Notes sur les performances


Voir aussi