En Find Alice, la mision avanza cuando el jugador recoge ciertos items. El lunes me reportaron que a veces recoger una pagina de diario no avanzaba la quest. Tras reproducirlo, el patron era claro: si el item estaba en una mochila o bolsa dentro del inventario, la deteccion fallaba.

El problema

La funcion que comprueba si el jugador tiene un item era esta:

local function playerHasItem(player, itemType)
    return player:getInventory():containsType(itemType)
end

containsType solo busca en el nivel raiz del inventario. Si llevas una mochila y dentro de ella tienes la pagina de diario, el inventario del jugador contiene la mochila, no la pagina directamente. La llamada devuelve false y la quest no avanza.

La solucion

La API de PZ tiene containsTypeRecurse, que hace exactamente lo mismo pero buscando de forma recursiva dentro de todos los contenedores anidados:

local function playerHasItem(player, itemType)
    return player:getInventory():containsTypeRecurse(itemType)
end

Un cambio de una palabra. El fix es minimo pero el comportamiento es completamente diferente: ahora da igual si el item esta en el inventario directo, en una mochila, en una bolsa dentro de otra bolsa o en cualquier nivel de anidamiento.

La leccion

En PZ, el inventario del jugador es un arbol de contenedores, no una lista plana. containsType es una busqueda superficial; containsTypeRecurse es la busqueda completa. Para cualquier logica de deteccion de items en mods, usa siempre la version recursiva salvo que tengas una razon especifica para no hacerlo.

Revisa cualquier llamada a containsType en tu mod. Si la logica depende de que el jugador "tenga" un item para avanzar un estado, casi seguro quieres containsTypeRecurse.