MRI Qbox BrasilMRI Qbox

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 })

On this page

Usamos cookies para anúncios e métricas. Veja a política de privacidade.