Hooks
Ganchos de evento permitem que recursos de terceiros definam novos comportamentos sem modificar diretamente o código do inventário.
registerHook
exports.ox_inventory:registerHook(eventName, function(payload) end, options)Os callbacks de hook são destinados apenas à validação e devem evitar efeitos colaterais, como modificar dados, gravar em um banco de dados ou disparar operações adicionais.
Como as ações ainda podem estar em andamento ou podem falhar, modificar o estado do item ou do inventário antes da conclusão pode levar a race conditions ou comportamento inconsistente.
Para evitar problemas, realize alterações de estado ou a lógica de acompanhamento em eventos post-hook.
-
eventName:
string -
callback:
function(payload: table) -
options?:
table- print?:
boolean- Imprime no console ao disparar o evento.
- itemFilter?:
{ [string]: true }- O evento dispara apenas para itens definidos como chaves em um conjunto.
- inventoryFilter?:
string[]- O evento dispara apenas para inventários que correspondam a um dos patterns no array.
- typeFilter?:
{ [string]: true }- O evento dispara apenas para inventários com um dos tipos fornecidos (ex.: 'player', 'stash')
Retorno:
- hookId:
string
- print?:
swapItems
Disparado ao mover qualquer item de um slot para outro, ou ao "dar" um item.
Ao retornar false, você pode cancelar a ação e reverter o estado do inventário.
- Payload:
table- source:
number - action:
'move'or'stack'or'swap'or'give' - fromInventory:
tableorstringornumber - toInventory:
tableorstringornumber - fromType:
string - toType:
string - fromSlot:
table - toSlot?:
tableornumber - count:
number
- source:
Exemplo
Impede que "water" seja movido para dentro ou para fora de porta-luvas e porta-malas.
local hookId = exports.ox_inventory:registerHook('swapItems', function(payload)
print(json.encode(payload, { indent = true }))
return false
end, {
print = true,
itemFilter = {
water = true,
},
inventoryFilter = {
'^glove[%w]+',
'^trunk[%w]+',
}
})openInventory
- Payload:
table- source:
number - inventoryId:
numberorstring - inventoryType:
string
- source:
Disparado quando um jogador tenta abrir um inventário secundário.
Ao retornar false, você pode cancelar a ação e manter o inventário do jogador fechado.
Exemplo
Desabilita porta-luvas e porta-malas.
local hookId = exports.ox_inventory:registerHook('openInventory', function(payload)
print(json.encode(payload, { indent = true }))
return false
end, {
print = true,
inventoryFilter = {
'^glove[%w]+',
'^trunk[%w]+',
}
})openShop
- Payload:
table- source:
number - shopId:
string - shopType:
string - label:
string - slots:
integer - items:
table - groups?:
table<string, number> - coords?:
vector3 - distance?:
numberorfalse
- source:
Disparado quando um jogador tenta abrir um inventário de loja.
Ao retornar false, você pode cancelar a ação e manter o inventário da loja fechado.
Exemplo
Desabilita as lojas General.
local hookId = exports.ox_inventory:registerHook('openShop', function(payload)
print(json.encode(payload, { indent = true }))
return false
end, {
print = true,
inventoryFilter = {
'^General'
}
})createItem
- Payload:
table- inventoryId?:
numberorstring - metadata:
table - item:
table - count:
number
- inventoryId?:
Disparado quando um item é criado, seja ao comprá-lo, usando AddItem, ou ao converter dados de inventário.
Ao retornar uma tabela, você pode modificar ou substituir os metadados dados ao item.
Eventos post-hook não são necessários para este evento, mas ainda são recomendados
Exemplo
Define o label de "water" como "Mineral Water".
local hookId = exports.ox_inventory:registerHook('createItem', function(payload)
print(json.encode(payload, { indent = true }))
local metadata = payload.metadata
metadata.label = 'Mineral Water'
return metadata
end, {
print = true,
itemFilter = {
water = true
}
})buyItem
- Payload:
table- source:
number - shopType:
string - shopId:
number - toInventory:
number - toSlot:
number - itemName:
string - metadata:
table - count:
number - price:
number - totalPrice:
number - currency?:
string
- source:
Disparado quando um item está prestes a ser comprado e pode retornar false para impedir a transação.
Exemplo
Impede que jogadores comprem itens nas lojas General.
local hookId = exports.ox_inventory:registerHook('buyItem', function(payload)
print(json.encode(payload, { indent = true, sort_keys = true }))
return false
end, {
print = true,
itemFilter = {
water = true
},
})
craftItem
- Payload:
table- source:
number - benchId:
number|string - benchIndex:
number - recipe:
table- count:
number - duration:
number - ingredients:
table<string, number> - name:
string - slot:
number - weight:
number
- count:
- toInventory:
number - toSlot:
number
- source:
Exemplo
Impede que jogadores fabriquem lockpicks.
local hookId = exports.ox_inventory:registerHook('craftItem', function(payload)
print(json.encode(payload, { indent = true, sort_keys = true }))
return false
end, {
print = true,
itemFilter = {
lockpick = true
},
})
usingItem
Disparado quando um item está prestes a ser usado.
Ao retornar false, você pode impedir completamente que ele seja usado.
- Payload:
table- source:
number - inventoryId:
number - item:
table- name:
string - label:
string - weight:
number - count:
number - stack:
boolean - close:
boolean - slot:
number - metadata:
table
- name:
- consume:
number
- source:
Exemplo
Impede o jogador de usar o item "water".
local hookId = exports.ox_inventory:registerHook('usingItem', function(payload)
print(json.encode(payload, { indent = true, sort_keys = true }))
return false
end, {
print = true,
itemFilter = {
water = true
}
})removeHooks
Remove ganchos criados pelo recurso invocador com o id especificado.
Se nenhum id for informado, todos os ganchos registrados pelo recurso serão removidos.
exports.ox_inventory:removeHooks(id)- id?:
string
Eventos post-hook
Os eventos post-hook permitem registrar um manipulador de eventos que é executado após todos os hooks terminarem e a ação ter sido concluída com sucesso ou rejeitada.
Use o hookId retornado por registerHook com AddEventHandler para lidar com a lógica post-hook.
---Use filter logic so only relevant inventories trigger the post-hook event.
local hookId = exports.ox_inventory:registerHook('swapItems', nil, {
inventoryFilter = {
'^glove[%w]+',
'^trunk[%w]+',
}
})
---Print everytime an item is moved to or from a vehicle inventory.
---Success will be false if the hook rejected the action or it failed elsewhere.
AddEventHandler(hookId, function(success, payload)
print(hookId, success)
lib.print.info(payload)
end)