diff --git a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/ComputerPlayer6.java b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/ComputerPlayer6.java index 1009b78d03d..4a3936a1e6c 100644 --- a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/ComputerPlayer6.java +++ b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/ComputerPlayer6.java @@ -841,10 +841,14 @@ public class ComputerPlayer6 extends ComputerPlayer /*implements Player*/ { int attackerValue = eval.evaluate(attacker, game); for (Permanent blocker : possibleBlockers) { int blockerValue = eval.evaluate(blocker, game); + + // blocker can kill attacker if (attacker.getPower().getValue() <= blocker.getToughness().getValue() && attacker.getToughness().getValue() <= blocker.getPower().getValue()) { safeToAttack = false; } + + // kill each other if (attacker.getToughness().getValue() == blocker.getPower().getValue() && attacker.getPower().getValue() == blocker.getToughness().getValue()) { if (attackerValue > blockerValue @@ -859,19 +863,26 @@ public class ComputerPlayer6 extends ComputerPlayer /*implements Player*/ { safeToAttack = false; } } + + // attacker can kill by deathtouch if (attacker.getAbilities().containsKey(DeathtouchAbility.getInstance().getId()) || attacker.getAbilities().containsKey(IndestructibleAbility.getInstance().getId())) { safeToAttack = true; } + + // attacker can ignore blocker if (attacker.getAbilities().containsKey(FlyingAbility.getInstance().getId()) && !blocker.getAbilities().containsKey(FlyingAbility.getInstance().getId()) && !blocker.getAbilities().containsKey(ReachAbility.getInstance().getId())) { safeToAttack = true; } } + + // 0 damage if (attacker.getPower().getValue() == 0) { safeToAttack = false; } + if (safeToAttack) { // undo has to be possible e.g. if not able to pay a attack fee (e.g. Ghostly Prison) attackingPlayer.declareAttacker(attacker.getId(), defenderId, game, true); diff --git a/Mage.Tests/src/test/java/org/mage/test/AI/basic/AttackAndBlockByAITest.java b/Mage.Tests/src/test/java/org/mage/test/AI/basic/AttackAndBlockByAITest.java index 720846e5a62..e8495eb60b3 100644 --- a/Mage.Tests/src/test/java/org/mage/test/AI/basic/AttackAndBlockByAITest.java +++ b/Mage.Tests/src/test/java/org/mage/test/AI/basic/AttackAndBlockByAITest.java @@ -204,4 +204,19 @@ public class AttackAndBlockByAITest extends CardTestPlayerBaseAI { assertLife(playerA, 20); assertLife(playerB, 20); } + + @Test + public void test_Attack_1_with_counters_vs_1() { + // chainbreaker real stats is 1/1, it's can be saftly attacked + addCard(Zone.BATTLEFIELD, playerA, "Balduvian Bears", 1); // 2/2 + addCard(Zone.BATTLEFIELD, playerB, "Chainbreaker", 1); // 3/3, but with 2x -1/-1 counters + + setStopAt(1, PhaseStep.END_TURN); + setStrictChooseMode(true); + execute(); + assertAllCommandsUsed(); + + assertLife(playerA, 20); + assertLife(playerB, 20 - 2); + } }