From 4f365848e1a0b65ef18f4f1838d6e65fc3361809 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Thu, 29 Dec 2022 10:11:48 +0800 Subject: [PATCH] update --- .../java/forge/game/ability/SpellAbilityEffect.java | 10 +++++++++- .../java/forge/game/ability/effects/EffectEffect.java | 2 +- .../src/main/java/forge/game/card/CardFactoryUtil.java | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java b/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java index e978eef4454..a935835b7da 100644 --- a/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java +++ b/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java @@ -400,13 +400,21 @@ public abstract class SpellAbilityEffect { addedTrigger.setIntrinsic(true); } - protected static void addExileOnCastTrigger(final Card card) { + protected static void addExileOnCastOrMoveTrigger(final Card card, final String zone) { String trig = "Mode$ SpellCast | ValidCard$ Card.IsRemembered | TriggerZones$ Command | Static$ True"; String effect = "DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile"; final Trigger parsedTrigger = TriggerHandler.parseTrigger(trig, card, true); parsedTrigger.setOverridingAbility(AbilityFactory.getAbility(effect, card)); final Trigger addedTrigger = card.addTrigger(parsedTrigger); addedTrigger.setIntrinsic(true); + //Any on Destination will cause the effect to remove itself when cancelling to play the card + String trig2 = "Mode$ ChangesZone | ValidCard$ Card.IsRemembered | Origin$ " + zone + " | Destination$ Hand,Library,Graveyard,Battlefield,Command,Sideboard | TriggerZones$ Command | Static$ True"; + String effect2 = "DB$ ChangeZone | Defined$ Self | Origin$ Command | Destination$ Exile"; + final Trigger parsedTrigger2 = TriggerHandler.parseTrigger(trig2, card, true); + parsedTrigger2.setOverridingAbility(AbilityFactory.getAbility(effect2, card)); + final Trigger addedTrigger2 = card.addTrigger(parsedTrigger2); + addedTrigger2.setIntrinsic(true); + } protected static void addExileOnCounteredTrigger(final Card card) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/EffectEffect.java b/forge-game/src/main/java/forge/game/ability/effects/EffectEffect.java index 444b16d26b9..90f473d08aa 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/EffectEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/EffectEffect.java @@ -228,7 +228,7 @@ public class EffectEffect extends SpellAbilityEffect { } else if (sa.hasParam("ExileOnMoved")) { addExileOnMovedTrigger(eff, sa.getParam("ExileOnMoved")); } else if (sa.hasParam("ExileOnCast")) { - addExileOnCastTrigger(eff); + addExileOnCastOrMoveTrigger(eff, sa.getParam("ExileOnCast")); } if (sa.hasParam("ForgetOnPhasedIn")) { addForgetOnPhasedInTrigger(eff); diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index 8abadb26bfd..ba826116d40 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -3855,7 +3855,7 @@ public class CardFactoryUtil { SpellAbility saExile = AbilityFactory.getAbility(abExile, card); - String abEffect = "DB$ Effect | RememberObjects$ Self | StaticAbilities$ Play | ExileOnCast$ True | Duration$ Permanent | ConditionDefined$ Self | ConditionPresent$ Card.nonCopiedSpell"; + String abEffect = "DB$ Effect | RememberObjects$ Self | StaticAbilities$ Play | ExileOnCast$ Exile | Duration$ Permanent | ConditionDefined$ Self | ConditionPresent$ Card.nonCopiedSpell"; AbilitySub saEffect = (AbilitySub)AbilityFactory.getAbility(abEffect, card); StringBuilder sbPlay = new StringBuilder();