diff --git a/src/battle.ts b/src/battle.ts index 2ebfb634751..d7a58dba40b 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -12,7 +12,7 @@ import { } from "#app/utils/common"; import Trainer, { TrainerVariant } from "./field/trainer"; import type { GameMode } from "./game-mode"; -import { MoneyMultiplierModifier, PokemonHeldItemModifier } from "./modifier/modifier"; +import { MoneyMultiplierModifier } from "./modifier/modifier"; import type { PokeballType } from "#enums/pokeball"; import { trainerConfigs } from "#app/data/trainers/trainer-config"; import { SpeciesFormKey } from "#enums/species-form-key"; @@ -33,6 +33,7 @@ import { ModifierTier } from "#app/modifier/modifier-tier"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { BattleType } from "#enums/battle-type"; import { ClassicFixedBossWaves } from "#enums/fixed-boss-waves"; +import type { HeldItemId } from "#enums/held-item-id"; export enum BattlerIndex { ATTACKER = -1, @@ -77,7 +78,7 @@ export default class Battle { public turnCommands: TurnCommands; public playerParticipantIds: Set = new Set(); public battleScore = 0; - public postBattleLoot: PokemonHeldItemModifier[] = []; + public postBattleLoot: HeldItemId[] = []; public escapeAttempts = 0; public lastMove: MoveId; public battleSeed: string = randomString(16, true); @@ -176,19 +177,7 @@ export default class Battle { } addPostBattleLoot(enemyPokemon: EnemyPokemon): void { - this.postBattleLoot.push( - ...globalScene - .findModifiers( - m => m instanceof PokemonHeldItemModifier && m.pokemonId === enemyPokemon.id && m.isTransferable, - false, - ) - .map(i => { - const ret = i as PokemonHeldItemModifier; - //@ts-ignore - this is awful to fix/change - ret.pokemonId = null; - return ret; - }), - ); + this.postBattleLoot.push(...enemyPokemon.getHeldItems()); } pickUpScatteredMoney(): void { diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index cbeb66aea56..203a662767a 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -35,7 +35,6 @@ import { } from "#app/data/moves/move"; import { allMoves } from "../data-lists"; import { ArenaTagSide } from "#app/data/arena-tag"; -import { BerryModifier, type PokemonHeldItemModifier } from "#app/modifier/modifier"; import { TerrainType } from "#app/data/terrain"; import { SpeciesFormChangeAbilityTrigger, @@ -44,7 +43,6 @@ import { } from "#app/data/pokemon-forms"; import i18next from "i18next"; import { Command } from "#app/ui/command-ui-handler"; -import { BerryModifierType } from "#app/modifier/modifier-type"; import { getPokeballName } from "#app/data/pokeball"; import { BattleType } from "#enums/battle-type"; import type { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; @@ -6203,13 +6201,13 @@ export class PostBattleAbAttr extends AbAttr { } export class PostBattleLootAbAttr extends PostBattleAbAttr { - private randItem?: PokemonHeldItemModifier; + private randItem?: HeldItemId; override canApplyPostBattle(pokemon: Pokemon, _passive: boolean, simulated: boolean, args: any[]): boolean { const postBattleLoot = globalScene.currentBattle.postBattleLoot; if (!simulated && postBattleLoot.length && args[0]) { this.randItem = randSeedItem(postBattleLoot); - return globalScene.canTransferHeldItemModifier(this.randItem, pokemon, 1); + return pokemon.heldItemManager.getStack(this.randItem) < allHeldItems[this.randItem].maxStackCount; } return false; } @@ -6223,12 +6221,12 @@ export class PostBattleLootAbAttr extends PostBattleAbAttr { this.randItem = randSeedItem(postBattleLoot); } - if (globalScene.tryTransferHeldItemModifier(this.randItem, pokemon, true, 1, true, undefined, false)) { + if (pokemon.heldItemManager.add(this.randItem)) { postBattleLoot.splice(postBattleLoot.indexOf(this.randItem), 1); globalScene.phaseManager.queueMessage( i18next.t("abilityTriggers:postBattleLoot", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - itemName: this.randItem.type.name, + itemName: allHeldItems[this.randItem].name, }), ); } diff --git a/src/field/pokemon-held-item-manager.ts b/src/field/pokemon-held-item-manager.ts index 59423e83c1e..f71d3d73a90 100644 --- a/src/field/pokemon-held-item-manager.ts +++ b/src/field/pokemon-held-item-manager.ts @@ -73,16 +73,21 @@ export class PokemonItemManager { return item ? item.stack : 0; } - add(itemType: HeldItemId, addStack = 1, data?: HELD_ITEM_DATA) { + add(itemType: HeldItemId, addStack = 1, data?: HELD_ITEM_DATA): boolean { const maxStack = allHeldItems[itemType].getMaxStackCount(); const item = this.heldItems[itemType]; if (item) { // TODO: We may want an error message of some kind instead - item.stack = Math.min(item.stack + addStack, maxStack); + if (item.stack < maxStack) { + item.stack = Math.min(item.stack + addStack, maxStack); + return true; + } } else { this.heldItems[itemType] = { stack: Math.min(addStack, maxStack), disabled: false, data: data }; + return true; } + return false; } remove(itemType: HeldItemId, removeStack = 1, all = false) {