Skip to main content
Los hooks son una forma de modificar el comportamiento del sistema de inventario. Se registran en el servidor y pueden usarse para modificar el comportamiento del sistema de inventario, por ejemplo para evitar que los jugadores muevan ítems a un inventario específico. Hay algunos ejemplos de hooks en la carpeta jaksam_inventory/_hooks.

Buenas Prácticas

Usa filtros

Usa siempre los filtros adecuados para evitar ejecuciones innecesarias de hooks

Retornos tempranos

Usa retornos tempranos para salir de los hooks cuando no se cumplan las condiciones

Rendimiento

Mantén la lógica de los hooks ligera para no afectar el rendimiento del inventario

Ejemplos de Casos de Uso

  • Evitar que los jugadores roben ítems que tienen el campo de metadato sole_owner (p. ej., ítems VIP)
  • Evitar que los jugadores muevan armas policiales a su inventario personal
  • Permitir solo una mochila por inventario de jugador
  • Craftear ítems arrastrando un ítem específico sobre otro (por ejemplo, arrastrar pan sobre carne puede crear un sándwich)
  • Bloquear el uso de ítems cuando el jugador está esposado o en zonas específicas
  • Registrar estadísticas de uso de ítems y logros
  • Evitar el uso de ciertos ítems dentro de vehículos
  • Agregar ítems iniciales a los inventarios de jugadores nuevos cuando se crean
  • Prepoblar contenedores de basura o stashes con ítems aleatorios al crearse

Funciones de la API

Registrar un Hook

Parámetros

Valor de retorno

Anular el Registro de un Hook

Parámetros

Anular el Registro de Todos los Hooks de un Resource

Parámetros

Parámetro Options

El parámetro options acepta una table con filtros para optimizar el rendimiento.

Events de Hook Disponibles

Comportamiento de los Hooks

Prioridad

Los números más altos se ejecutan primero (por defecto: 0)

Valores de retorno

return nil o return true: permite que la acción continúe.return false, "message", "notifyType": evita la acción y detiene la ejecución de los demás hooks. Los parámetros message y notifyType son opcionales (notifyType puede ser "error", "success", "info")
Excepción - onPreOpenInventory: el mensaje no se muestra al jugador, porque la precarga haría que se repitiese. Llama a notifyPlayer desde dentro del hook si quieres decirle al jugador el motivo.

Compatibilidad con ox_inventory

Cuando el resource de compatibilidad con ox_inventory está instalado, exports.ox_inventory:registerHook(...) se traduce a los hooks nativos de arriba, así que los scripts de ox_inventory funcionan sin cambios. Los payloads se transforman al formato de ox, y los nombres de opciones de ox (itemFilter, typeFilter, inventoryFilter, print) también se traducen. Registrar un hook no soportado imprime una advertencia y devuelve nil en lugar de lanzar un error. Tres diferencias a tener en cuenta al migrar:
  • Un hook de ox solo puede permitir o bloquear; no puede proporcionar un mensaje personalizado ni un tipo de notificación. Usa los hooks nativos para eso
  • openInventory hereda el requisito de no tener estado descrito en onPreOpenInventory
  • Los inventarios de jugador se identifican de forma distinta. Los hooks de ox reciben el ID de servidor del jugador como number (inventoryId = 4), igual que ox_inventory. Los hooks nativos reciben el identificador de personaje de jaksam como string (inventoryId = "char1:35030084..."). Cualquier otro tipo de inventario usa el mismo ID string en ambos