HeldItemManager's .hasItem() now also works on categories

This commit is contained in:
Wlowscha 2025-07-11 23:58:49 +02:00
parent f2e9ea0e93
commit 849550808a
No known key found for this signature in database
GPG Key ID: 3C8F1AD330565D04
3 changed files with 19 additions and 12 deletions

View File

@ -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)
);
}),
);
}

View File

@ -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 {

View File

@ -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,12 +95,11 @@ export class PokemonItemManager {
.map(k => k);
}
hasItem(itemType: HeldItemId): boolean {
return itemType in this.heldItems;
hasItem(itemType: HeldItemId | HeldItemCategoryId): boolean {
if (isCategoryId(itemType)) {
return getTypedKeys(this.heldItems).some(id => isItemInCategory(id, itemType as HeldItemCategoryId));
}
hasItemCategory(categoryId: HeldItemCategoryId): boolean {
return getTypedKeys(this.heldItems).some(id => isItemInCategory(id, categoryId));
return itemType in this.heldItems;
}
getStack(itemType: HeldItemId): number {