Fixed Pickup

This commit is contained in:
Wlowscha 2025-06-10 00:25:13 +02:00
parent 3891ef5f85
commit 29af976c49
No known key found for this signature in database
GPG Key ID: 3C8F1AD330565D04
3 changed files with 15 additions and 23 deletions

View File

@ -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<number> = new Set<number>();
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 {

View File

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

View File

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