MRI Qbox BrasilMRI Qbox

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

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: table or string or number
    • toInventory: table or string or number
    • fromType: string
    • toType: string
    • fromSlot: table
    • toSlot?: table or number
    • count: number
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: number or string
    • inventoryType: string

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?: number or false

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?: number or string
    • metadata: table
    • item: table
    • count: number

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

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
    • toInventory: number
    • toSlot: number
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
    • consume: number
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)

On this page

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