Fix logic issues with item stealing

pull/2/head
Flashfyre 2023-10-24 11:07:09 -04:00
parent 10733fd98d
commit 0ab7f1b018
2 changed files with 16 additions and 12 deletions

View File

@ -1090,20 +1090,23 @@ export default class BattleScene extends Phaser.Scene {
resolve(false);
return;
}
const newStackCount = matchingModifier.stackCount + (transferStack ? itemModifier.stackCount : 1);
if (newStackCount > maxStackCount) {
itemModifier.stackCount = newStackCount - maxStackCount;
newItemModifier.stackCount = maxStackCount;
removeOld = !itemModifier.stackCount;
}
} else if (!transferStack)
const countTaken = transferStack ? Math.min(itemModifier.stackCount, maxStackCount - matchingModifier.stackCount) : 1;
itemModifier.stackCount -= countTaken;
newItemModifier.stackCount = matchingModifier.stackCount + countTaken;
removeOld = !itemModifier.stackCount;
} else if (!transferStack) {
newItemModifier.stackCount = 1;
removeOld = !(--itemModifier.stackCount);
}
if (!removeOld || this.removeModifier(itemModifier, !source.isPlayer())) {
const addModifier = () => {
if (target.isPlayer())
this.addModifier(newItemModifier, playSound).then(() => resolve(true));
else
this.addEnemyModifier(newItemModifier).then(() => resolve(true));
if (!matchingModifier || this.removeModifier(matchingModifier, !target.isPlayer())) {
if (target.isPlayer())
this.addModifier(newItemModifier, playSound).then(() => resolve(true));
else
this.addEnemyModifier(newItemModifier).then(() => resolve(true));
} else
resolve(false);
};
if (source.isPlayer() !== target.isPlayer())
this.updateModifiers(source.isPlayer()).then(() => addModifier());

View File

@ -14,6 +14,7 @@ import * as Utils from "../utils";
import { TempBattleStat } from '../data/temp-battle-stat';
import { BerryType, getBerryEffectFunc, getBerryPredicate } from '../data/berry';
import { Species } from '../data/species';
import { BattleType } from '../battle';
type ModifierType = ModifierTypes.ModifierType;
export type ModifierPredicate = (modifier: Modifier) => boolean;
@ -339,7 +340,7 @@ export abstract class PokemonHeldItemModifier extends PersistentModifier {
isIconVisible(scene: BattleScene): boolean {
const pokemon = this.getPokemon(scene);
return pokemon instanceof PlayerPokemon || this.getPokemon(scene).isOnField();
return pokemon instanceof PlayerPokemon || (scene.currentBattle.battleType === BattleType.WILD || this.getPokemon(scene).isOnField());
}
getIcon(scene: BattleScene, forSummary?: boolean): Phaser.GameObjects.Container {