From 849550808a3fbb68d82929a620342c60fbd5ac11 Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Fri, 11 Jul 2025 23:58:49 +0200 Subject: [PATCH] HeldItemManager's .hasItem() now also works on categories --- .../mystery-encounter-requirements.ts | 10 ++++++---- src/enums/held-item-id.ts | 4 ++-- src/field/pokemon-held-item-manager.ts | 17 +++++++++++------ 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/data/mystery-encounters/mystery-encounter-requirements.ts b/src/data/mystery-encounters/mystery-encounter-requirements.ts index ae4ae7ee02c..9ea4d55b1c6 100644 --- a/src/data/mystery-encounters/mystery-encounter-requirements.ts +++ b/src/data/mystery-encounters/mystery-encounter-requirements.ts @@ -800,13 +800,13 @@ export class CanFormChangeWithItemRequirement extends EncounterPokemonRequiremen } export class HeldItemRequirement extends EncounterPokemonRequirement { - requiredHeldItems: HeldItemId[] | HeldItemCategoryId[]; + requiredHeldItems: (HeldItemId | HeldItemCategoryId)[]; minNumberOfPokemon: number; invertQuery: boolean; requireTransferable: boolean; constructor( - heldItem: HeldItemId | HeldItemId[] | HeldItemCategoryId | HeldItemCategoryId[], + heldItem: HeldItemId | HeldItemCategoryId | (HeldItemId | HeldItemCategoryId)[], minNumberOfPokemon = 1, invertQuery = false, requireTransferable = true, @@ -830,8 +830,10 @@ export class HeldItemRequirement extends EncounterPokemonRequirement { if (!this.invertQuery) { return partyPokemon.filter(pokemon => this.requiredHeldItems.some(heldItem => { - (pokemon.heldItemManager.hasItem(heldItem) || pokemon.heldItemManager.hasItemCategory(heldItem)) && - (!this.requireTransferable || allHeldItems[heldItem].isTransferable); + return ( + pokemon.heldItemManager.hasItem(heldItem) && + (!this.requireTransferable || allHeldItems[heldItem].isTransferable) + ); }), ); } diff --git a/src/enums/held-item-id.ts b/src/enums/held-item-id.ts index c5f101dad5c..0792ffce8b5 100644 --- a/src/enums/held-item-id.ts +++ b/src/enums/held-item-id.ts @@ -128,8 +128,8 @@ export function getHeldItemCategory(itemId: HeldItemId): HeldItemCategoryId { return (itemId & ITEM_CATEGORY_MASK) as HeldItemCategoryId; } -export function isCategoryId(categoryId: HeldItemCategoryId): boolean { - return (categoryId & ITEM_CATEGORY_MASK) === categoryId; +export function isCategoryId(id: number): boolean { + return (id & ITEM_CATEGORY_MASK) === id && id in HeldItemCategoryId; } export function isItemInCategory(itemId: HeldItemId, category: HeldItemCategoryId): boolean { diff --git a/src/field/pokemon-held-item-manager.ts b/src/field/pokemon-held-item-manager.ts index 839414f8790..d5a6134c01a 100644 --- a/src/field/pokemon-held-item-manager.ts +++ b/src/field/pokemon-held-item-manager.ts @@ -1,5 +1,11 @@ import { allHeldItems } from "#app/data/data-lists"; -import { isItemInCategory, isItemInRequested, type HeldItemCategoryId, type HeldItemId } from "#app/enums/held-item-id"; +import { + isCategoryId, + isItemInCategory, + isItemInRequested, + type HeldItemCategoryId, + type HeldItemId, +} from "#app/enums/held-item-id"; import type { FormChangeItem } from "#enums/form-change-item"; import { type HeldItemConfiguration, @@ -89,14 +95,13 @@ export class PokemonItemManager { .map(k => k); } - hasItem(itemType: HeldItemId): boolean { + hasItem(itemType: HeldItemId | HeldItemCategoryId): boolean { + if (isCategoryId(itemType)) { + return getTypedKeys(this.heldItems).some(id => isItemInCategory(id, itemType as HeldItemCategoryId)); + } return itemType in this.heldItems; } - hasItemCategory(categoryId: HeldItemCategoryId): boolean { - return getTypedKeys(this.heldItems).some(id => isItemInCategory(id, categoryId)); - } - getStack(itemType: HeldItemId): number { const item = this.heldItems[itemType]; return item ? item.stack : 0;