mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-04 07:22:19 +02:00
Edits to ForceSwitchOutAttr to apply contact effects before switching
Should fix issue #83
This commit is contained in:
parent
af23bfc1f9
commit
ee9ecab7b9
@ -2469,25 +2469,38 @@ export class ForceSwitchOutAttr extends MoveEffectAttr {
|
||||
|
||||
constructor(user?: boolean, batonPass?: boolean) {
|
||||
super(false, MoveEffectTrigger.HIT, true);
|
||||
|
||||
this.user = !!user;
|
||||
this.batonPass = !!batonPass;
|
||||
}
|
||||
|
||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> {
|
||||
return new Promise(resolve => {
|
||||
if (move.category !== MoveCategory.STATUS && !this.getSwitchOutCondition()(user, target, move))
|
||||
// Check if the move category is not STATUS or if the switch out condition is not met
|
||||
if (move.category !== MoveCategory.STATUS && !this.getSwitchOutCondition()(user, target, move)) {
|
||||
// Apply effects that need to be executed before switch out
|
||||
// For example, applying poison or any other status condition
|
||||
this.applyEffectsBeforeSwitchOut(user, target, move);
|
||||
// Resolve the Promise after the switch out is complete
|
||||
return resolve(false);
|
||||
}
|
||||
|
||||
// Move the switch out logic inside the conditional block
|
||||
// This ensures that the switch out only happens when the conditions are met
|
||||
const switchOutTarget = this.user ? user : target;
|
||||
if (switchOutTarget instanceof PlayerPokemon) {
|
||||
// Switch out logic for PlayerPokemon
|
||||
// This includes applying any necessary effects before switching out
|
||||
if (switchOutTarget.hp) {
|
||||
applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, switchOutTarget);
|
||||
(switchOutTarget as PlayerPokemon).switchOut(this.batonPass, true).then(() => resolve(true));
|
||||
}
|
||||
else
|
||||
else {
|
||||
resolve(false);
|
||||
}
|
||||
return;
|
||||
} else if (user.scene.currentBattle.battleType) {
|
||||
}
|
||||
else if (user.scene.currentBattle.battleType) {
|
||||
// Switch out logic for the battle type
|
||||
switchOutTarget.resetTurnData();
|
||||
switchOutTarget.resetSummonData();
|
||||
switchOutTarget.hideInfo();
|
||||
@ -2497,7 +2510,9 @@ export class ForceSwitchOutAttr extends MoveEffectAttr {
|
||||
|
||||
if (switchOutTarget.hp)
|
||||
user.scene.unshiftPhase(new SwitchSummonPhase(user.scene, switchOutTarget.getFieldIndex(), user.scene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot), false, this.batonPass, false));
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
// Switch out logic for everything else
|
||||
switchOutTarget.setVisible(false);
|
||||
|
||||
if (switchOutTarget.hp) {
|
||||
@ -2520,6 +2535,15 @@ export class ForceSwitchOutAttr extends MoveEffectAttr {
|
||||
});
|
||||
}
|
||||
|
||||
// Function to apply any effects to the user/target before switching out
|
||||
applyEffectsBeforeSwitchOut(user: Pokemon, target: Pokemon, move: Move) {
|
||||
// Create an instance of PostDefendContactApplyStatusEffectAbAttr
|
||||
const postDefendAttr = new PostDefendContactApplyStatusEffectAbAttr(chance, ...effects);
|
||||
|
||||
// Apply the effects based on the logic in PostDefendContactApplyStatusEffectAbAttr
|
||||
postDefendAttr.applyPostDefend(user, target, move, hitResult, args);
|
||||
}
|
||||
|
||||
getCondition(): MoveConditionFunc {
|
||||
return (user, target, move) => move.category !== MoveCategory.STATUS || this.getSwitchOutCondition()(user, target, move);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user