Transfer held items from released Pokemon

This commit is contained in:
Jacob Knispel 2024-05-16 03:54:25 -05:00
parent 0aca9aed9c
commit 46870f1288
3 changed files with 16 additions and 6 deletions

View File

@ -465,6 +465,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
return this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).pokemonId === this.id, this.isPlayer()) as PokemonHeldItemModifier[];
}
getTransferrableHeldItems(): PokemonHeldItemModifier[] {
return this.getHeldItems().filter(m => m.getTransferrable(true));
}
updateScale(): void {
this.setScale(this.getSpriteScale());
}

View File

@ -4455,8 +4455,7 @@ export class SelectModifierPhase extends BattlePhase {
this.scene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.MODIFIER_TRANSFER, -1, (fromSlotIndex: integer, itemIndex: integer, toSlotIndex: integer) => {
if (toSlotIndex !== undefined && fromSlotIndex < 6 && toSlotIndex < 6 && fromSlotIndex !== toSlotIndex && itemIndex > -1) {
this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), typeOptions, modifierSelectCallback, this.getRerollCost(typeOptions, this.scene.lockModifierTiers)).then(() => {
const itemModifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier
&& (m as PokemonHeldItemModifier).getTransferrable(true) && (m as PokemonHeldItemModifier).pokemonId === party[fromSlotIndex].id) as PokemonHeldItemModifier[];
const itemModifiers = party[fromSlotIndex].getTransferrableHeldItems();
const itemModifier = itemModifiers[itemIndex];
this.scene.tryTransferHeldItemModifier(itemModifier, party[toSlotIndex], true, true);
});

View File

@ -246,8 +246,7 @@ export default class PartyUiHandler extends MessageUiHandler {
filterResult = this.moveSelectFilter(pokemon.moveset[this.optionsCursor]);
} else {
const transferPokemon = this.scene.getParty()[this.transferCursor];
const itemModifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier
&& (m as PokemonHeldItemModifier).getTransferrable(true) && (m as PokemonHeldItemModifier).pokemonId === transferPokemon.id) as PokemonHeldItemModifier[];
const itemModifiers = transferPokemon.getTransferrableHeldItems();
filterResult = (this.selectFilter as PokemonModifierTransferSelectFilter)(pokemon, itemModifiers[this.transferOptionCursor]);
}
if (filterResult === null) {
@ -548,8 +547,7 @@ export default class PartyUiHandler extends MessageUiHandler {
: null;
const itemModifiers = this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER
? this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier
&& (m as PokemonHeldItemModifier).getTransferrable(true) && (m as PokemonHeldItemModifier).pokemonId === pokemon.id) as PokemonHeldItemModifier[]
? pokemon.getTransferrableHeldItems()
: null;
if (this.options.length) {
@ -732,15 +730,24 @@ export default class PartyUiHandler extends MessageUiHandler {
this.clearPartySlots();
this.scene.removePartyMemberModifiers(slotIndex);
const releasedPokemon = this.scene.getParty().splice(slotIndex, 1)[0];
const releasedItems = releasedPokemon.getTransferrableHeldItems();
releasedPokemon.destroy();
this.populatePartySlots();
if (this.cursor >= this.scene.getParty().length)
this.setCursor(this.cursor - 1);
if (this.partyUiMode === PartyUiMode.RELEASE) {
const selectCallback = this.selectCallback;
this.selectCallback = null;
selectCallback(this.cursor, PartyOption.RELEASE);
if (releasedItems && releasedItems.length > 0) {
const newPokemon = this.scene.getParty()[this.scene.getParty().length - 1];
releasedItems.forEach(i => this.scene.tryTransferHeldItemModifier(i, newPokemon, true, false));
this.showText("Items were transferred beep boop");
}
}
this.showText(null, 0);
}, null, true);
}