From 563d21a0948e7caeac223f09948bda3863e52759 Mon Sep 17 00:00:00 2001 From: Sloth Date: Fri, 22 Mar 2013 12:22:54 +0000 Subject: [PATCH] - Improved AI predicting some ETB triggers. --- res/cardsfolder/a/angel_of_serenity.txt | 4 ++-- src/main/java/forge/card/ability/ai/ChangeZoneAi.java | 11 +++++------ .../java/forge/card/spellability/SpellPermanent.java | 1 + 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/res/cardsfolder/a/angel_of_serenity.txt b/res/cardsfolder/a/angel_of_serenity.txt index ea6891f5668..b70052c5b90 100644 --- a/res/cardsfolder/a/angel_of_serenity.txt +++ b/res/cardsfolder/a/angel_of_serenity.txt @@ -5,8 +5,8 @@ PT:5/6 K:Flying T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigExile | TriggerDescription$ When CARDNAME enters the battlefield, you may exile up to three other target creatures from the battlefield and/or creature cards from graveyards. T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Any | ValidCard$ Card.Self | Execute$ TrigReturn | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME leaves the battlefield, return the exiled card to the battlefield under its owner's control. -SVar:TrigExile:DB$ChangeZone | TargetMin$ 0 | TargetMax$ 3 | IsCurse$ True | ValidTgts$ Creature.Other | TgtPrompt$ Choose another target creature | RememberChanged$ True | Origin$ Battlefield,Graveyard | Destination$ Exile -SVar:TrigReturn:DB$ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Hand | SubAbility$ DBCleanup +SVar:TrigExile:DB$ ChangeZone | TargetMin$ 0 | TargetMax$ 3 | IsCurse$ True | ValidTgts$ Creature.Other | TgtPrompt$ Choose another target creature | RememberChanged$ True | Origin$ Battlefield,Graveyard | Destination$ Exile +SVar:TrigReturn:DB$ ChangeZone | Defined$ Remembered | Origin$ Exile | Destination$ Hand | SubAbility$ DBCleanup SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:PlayMain1:TRUE SVar:Picture:http://www.wizards.com/global/images/magic/general/angel_of_serenity.jpg diff --git a/src/main/java/forge/card/ability/ai/ChangeZoneAi.java b/src/main/java/forge/card/ability/ai/ChangeZoneAi.java index 81f23bd9e65..5893b0f06eb 100644 --- a/src/main/java/forge/card/ability/ai/ChangeZoneAi.java +++ b/src/main/java/forge/card/ability/ai/ChangeZoneAi.java @@ -670,8 +670,7 @@ public class ChangeZoneAi extends SpellAbilityAi { * a boolean. * @return a boolean. */ - private static boolean isPreferredTarget(final AIPlayer ai, final SpellAbility sa, - final boolean mandatory) { + private static boolean isPreferredTarget(final AIPlayer ai, final SpellAbility sa, final boolean mandatory) { final Card source = sa.getSourceCard(); final ZoneType origin = ZoneType.listValueOf(sa.getParam("Origin")).get(0); final ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination")); @@ -833,7 +832,7 @@ public class ChangeZoneAi extends SpellAbilityAi { return false; } - if (!mandatory && (list.size() < tgt.getMinTargets(sa.getSourceCard(), sa))) { + if (!mandatory && list.size() < tgt.getMinTargets(sa.getSourceCard(), sa)) { return false; } @@ -843,8 +842,8 @@ public class ChangeZoneAi extends SpellAbilityAi { Card choice = null; if (!list.isEmpty()) { - final Card mostExpensive = ComputerUtilCard.getMostExpensivePermanentAI(list, sa, false); if (destination.equals(ZoneType.Battlefield) || origin.equals(ZoneType.Battlefield)) { + final Card mostExpensive = ComputerUtilCard.getMostExpensivePermanentAI(list, sa, false); if (mostExpensive.isCreature()) { // if a creature is most expensive take the best one if (destination.equals(ZoneType.Exile)) { @@ -887,13 +886,13 @@ public class ChangeZoneAi extends SpellAbilityAi { } } if (choice == null) { // can't find anything left - if ((tgt.getNumTargeted() == 0) || (tgt.getNumTargeted() < tgt.getMinTargets(sa.getSourceCard(), sa))) { + if (tgt.getNumTargeted() == 0 || tgt.getNumTargeted() < tgt.getMinTargets(sa.getSourceCard(), sa)) { if (!mandatory) { tgt.resetTargets(); } return false; } else { - if (!ComputerUtil.shouldCastLessThanMax(ai, source)) { + if (!sa.isTrigger() && !ComputerUtil.shouldCastLessThanMax(ai, source)) { return false; } break; diff --git a/src/main/java/forge/card/spellability/SpellPermanent.java b/src/main/java/forge/card/spellability/SpellPermanent.java index 744d4784c44..a4539088000 100644 --- a/src/main/java/forge/card/spellability/SpellPermanent.java +++ b/src/main/java/forge/card/spellability/SpellPermanent.java @@ -327,6 +327,7 @@ public class SpellPermanent extends Spell { else { throw new InvalidParameterException("Either ai or sa must be not null!"); } + exSA.setTrigger(true); // Run non-mandatory trigger. // These checks only work if the Executing SpellAbility is an