registerHook usando el nombre de event onPreOpenInventory.
Abrir tu propio inventario de jugador nunca activa este hook.
Payload
Este hook puede impedir que el inventario se abra devolviendo
false. Los datos nunca salen del servidor, así que es un control de acceso real (restricción por trabajo/banda/whitelist), no solo una comprobación de UI.inventoryTypeFilter e inventoryFilter.
Prefiere hooks sin estado
Cuando un jugador pulsa la tecla del inventario, el cliente precarga los inventarios cercanos (stashes a menos de 3m de una posición configurada, además de maleteros, guanteras, tiendas, contenedores de basura y drops cercanos) antes de que se abra la UI, y cada precarga activa este hook. Por tanto tu callback puede ejecutarse varias veces para el mismo inventario, e incluso para inventarios que el jugador nunca llega a abrir. Esto solo afecta a los inventarios con coordenadas configuradas - los puramente virtuales, abiertos programáticamente por tu propio script, nunca se precargan. Aun así, escribe el callback como una comprobación pura de trabajo/banda/identificador siempre que puedas. Un patrón de token de un solo uso (authorized[source] = inventoryId, consumido en la primera coincidencia) es propenso a condiciones de carrera con un inventario colocado físicamente: una precarga puede consumir el token antes de que la apertura real llegue al hook, y entonces la apertura se deniega.
Cosas a tener en cuenta
Stashes privados
Stashes privados
jaksam añade
_<ownerCharIdentifier> a los IDs de los stashes privados, así que payload.inventoryId es el ID ya resuelto. Los patrones basados en prefijo siguen coincidiendo, ya que el sufijo va al final.Contenedores
Contenedores
Bloquear un contenedor solo impide que se abra. Soltar un ítem sobre una mochila cerrada sigue funcionando, porque eso es una transferencia de ítem - usa
onItemTransferred para restringir lo que entra.forceOpenInventory sigue activando este hook
forceOpenInventory sigue activando este hook
forceOpenInventory se salta las comprobaciones de permisos propias de jaksam, pero no tus hooks - igual que ox_inventory, cuyo hook openInventory se dispara incluso cuando forceOpenInventory pasa ignoreSecurityChecks. Esto significa que un hook también puede bloquear un /openinventory de admin, OpenInventoryById o forceOpenInventoryOX, así que filtra por los inventarios que realmente te interesan en lugar de denegar por defecto.Ejemplos
Restringir los stashes de trabajo a su propio trabajo
Restringir los stashes de trabajo a su propio trabajo
registerHook, los filtros disponibles y el comportamiento de los valores de retorno.