Hooks
Hooks permitem que resources adicionem lógica customizada a ações existentes sem modificar o código original. Eles funcionam executando um conjunto de callbacks (eventos de hook) através de um pipeline sempre que uma ação específica ocorre. Cada hook pode inspecionar os dados e rejeitar a ação se necessário.
Após a conclusão do pipeline, um evento post-hook pode ser executado para lidar com o resultado final, como registro ou limpeza, sem afetar o resultado.
Este recurso expande a ideia de hooks introduzida pelo ox_inventory.
Veja nossos hooks registrados internamente para exemplos.
HookPipeline
Cria um pipeline de hook para um evento específico, que gerencia uma coleção de hooks registrados e controla o fluxo de execução através de filtragem, rejeição e disparo.
lib.hook:new(event, filter)import { HookPipeline } from "@overextended/ox_lib/hooks";
new HookPipeline(event, filter)- event:
string - filter?:
function(hook, payload): boolean- Usado para filtrar hooks registrados com base em passarem ou não em uma função de predicado.
Retorna: HookPipeline
Métodos
registerHook
Um hook é um callback registrado executado durante um pipeline de hook. Ele pode inspecionar o payload, realizar validação e opcionalmente rejeitar a operação.
pipeline:registerHook(handler, options)pipeline.registerHook(handler, options)- handler:
function(payload: unknown): boolean - options?:
table- Metadados opcionais para anexar ao hook.
remove
Remove hooks do pipeline.
pipeline:remove(hookId)pipeline.remove(hookId)- hookId?:
string- Se definido, apenas o hook especificado é removido - caso contrário todos os hooks do resource que chama são removidos.
dispatch
Executa cada hook registrado por ordem de registro, verificando o payload contra um filtro fornecido usando as opções do hook e executando o callback do hook.
Um hook pode bloquear a execução retornando false a partir de um manipulador registrado.
Se algum hook rejeitar a execução, o dispatch é cancelado e result.ok é definido como false.
O objeto retornado atua como um manipulador de finalização e emite resultados para manipuladores registrados uma vez fechado.
local hook <close> = pipeline:dispatch(payload)using hook = pipeline.dispatch(payload)- payload:
unknown
EventHook
Permite que resources chamem pipeline.registerHook usando exports.
lib.registerHook(eventName, handler, options)import { registerHook } from "@overextended/ox_lib/hooks";
registerHook(eventName, handler, options)- eventName:
string - handler?:
function(payload: unknown): boolean - options?: Metadados opcionais para anexar ao hook.
Métodos
on
Anexa um manipulador de evento ao hook que é executado após todos os hooks terem sido disparados, permitindo lógica de acompanhamento para eventos bem-sucedidos ou rejeitados.
hook:on(handler)hook.on(handler)- handler:
function(ok: boolean, payload: unknown)
off
Desanexa o manipulador de evento post-hook atualmente registrado, se existir.
hook:off()hook.off()remove
Remove totalmente este hook tanto do sistema de eventos local quanto do pipeline de hook externo fornecido pelo resource de origem.
hook:remove()hook.remove()Hooks Registrados
Estes pipelines de hook são registrados e gerenciados pelo ox_lib para outros resources interagirem.
Veja EventHook para mais informações.
ox_lib:setPlayerState
Ao usar sv_stateBagStrictMode jogadores não podem modificar arbitrariamente seus próprios estados, e mudanças serão rejeitadas por padrão.
lib.registerHook('ox_lib:setPlayerState', predicate, { key: state })import { registerHook } from "@overextended/ox_lib/hooks";
registerHook('ox_lib:setPlayerState', predicate, { key: state })ox_lib:setEntityState
Ao usar sv_stateBagStrictMode jogadores não podem modificar arbitrariamente estados de entidade, e mudanças serão rejeitadas por padrão.
lib.registerHook('ox_lib:setEntityState', predicate, { key: state })import { registerHook } from "@overextended/ox_lib/hooks";
registerHook('ox_lib:setEntityState', predicate, { key: state })