From ad1c42acfc60af7f63a4c63f3d911e8dfed405c0 Mon Sep 17 00:00:00 2001 From: Agetian Date: Sun, 19 May 2019 18:35:39 +0300 Subject: [PATCH] - AI precaution against attacking into Sarkhan the Masterless --- .../java/forge/ai/AiAttackController.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/forge-ai/src/main/java/forge/ai/AiAttackController.java b/forge-ai/src/main/java/forge/ai/AiAttackController.java index e98fd7b6a7e..cbab8ef24a7 100644 --- a/forge-ai/src/main/java/forge/ai/AiAttackController.java +++ b/forge-ai/src/main/java/forge/ai/AiAttackController.java @@ -190,7 +190,28 @@ public class AiAttackController { if ((attacker.getNetToughness() + ComputerUtilCombat.predictToughnessBonusOfAttacker(attacker, null, combat, true)) <= 0) { return false; } - + + // the attacker will die to a triggered ability (e.g. Sarkhan the Masterless) + for (Card c : ai.getOpponents().getCardsIn(ZoneType.Battlefield)) { + for (Trigger t : c.getTriggers()) { + if (t.getMode() == TriggerType.Attacks) { + SpellAbility sa = t.getOverridingAbility(); + if (sa == null && t.hasParam("Execute")) { + sa = AbilityFactory.getAbility(c, t.getParam("Execute")); + } + + if (sa != null && sa.getApi() == ApiType.EachDamage && "TriggeredAttacker".equals(sa.getParam("DefinedPlayers"))) { + List valid = CardLists.getValidCards(c.getController().getCreaturesInPlay(), sa.getParam("ValidCards"), c.getController(), c, sa); + // TODO: this assumes that 1 damage is dealt per creature. Improve this to check the parameter/X to determine + // how much damage is dealt by each of the creatures in the valid list. + if (attacker.getNetToughness() <= valid.size() * this.attackers.size()) { + return false; + } + } + } + } + } + if ("TRUE".equals(attacker.getSVar("HasAttackEffect"))) { return true; }