From 12dc19e67c36bf03dfa10d0f63b0a8b30794680f Mon Sep 17 00:00:00 2001 From: Sloth Date: Tue, 2 Oct 2012 19:36:19 +0000 Subject: [PATCH] - Improved isUsefulCurseKeyword for better AI use of Detain. --- .../abilityfactory/AbilityFactoryPump.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java index 57ba4000fad..bfdbb20e83c 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryPump.java @@ -328,6 +328,24 @@ public class AbilityFactoryPump { || ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS)) { return false; } + } else if (keyword.endsWith("CARDNAME can't attack or block.")) { + if (ph.isPlayerTurn(human)) { + if (!CombatUtil.canAttack(card) + || (card.getNetCombatDamage() <= 0) + || ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_ATTACKERS)) { + return false; + } + } else { + if (ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_BLOCKERS) + || ph.getPhase().isBefore(PhaseType.MAIN1)) { + return false; + } + + List attackers = CardListUtil.filter(AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield), CardPredicates.possibleAttackers); + if (!CombatUtil.canBlockAtLeastOne(card, attackers)) { + return false; + } + } } else if (keyword.endsWith("CARDNAME can't block.")) { if (ph.isPlayerTurn(human) || ph.getPhase().isAfter(PhaseType.COMBAT_DECLARE_BLOCKERS) || ph.getPhase().isBefore(PhaseType.MAIN1)) { @@ -365,6 +383,8 @@ public class AbilityFactoryPump { if (card.getShield() <= 0) { return false; } + } else if (keyword.endsWith("CARDNAME's activated abilities can't be activated.")) { + return false; //too complex } return true; }