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 1210c8400ff..7d10dc4afa2 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 @@ -1094,14 +1094,18 @@ public class ComputerPlayer6 extends ComputerPlayer implements if (attacker.getToughness().getValue() == blocker.getPower().getValue() && attacker.getPower().getValue() == blocker.getToughness().getValue()) { - if (attackerValue < blockerValue + if (attackerValue > blockerValue || blocker.getAbilities().containsKey(FirstStrikeAbility.getInstance().getId()) - || blocker.getAbilities().containsKey(DoubleStrikeAbility.getInstance().getId())) { + || blocker.getAbilities().containsKey(DoubleStrikeAbility.getInstance().getId()) + || blocker.getAbilities().contains(new ExaltedAbility()) + || blocker.getAbilities().containsKey(DeathtouchAbility.getInstance().getId()) + || blocker.getAbilities().contains(new IndestructibleAbility())) { safeToAttack = false; } } } - if (attacker.getAbilities().containsKey(DeathtouchAbility.getInstance().getId())) { + if (attacker.getAbilities().containsKey(DeathtouchAbility.getInstance().getId()) + || attacker.getAbilities().contains(new IndestructibleAbility())) { safeToAttack = true; } if (safeToAttack) { diff --git a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/util/CombatUtil.java b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/util/CombatUtil.java index 67150c3ccfb..a4929a12c5a 100644 --- a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/util/CombatUtil.java +++ b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/util/CombatUtil.java @@ -222,8 +222,8 @@ public class CombatUtil { simulateStep(sim, new FirstCombatDamageStep()); simulateStep(sim, new CombatDamageStep()); simulateStep(sim, new EndOfCombatStep()); - - sim.checkStateAndTriggered(); + // The following commented out call produces random freezes. + //sim.checkStateAndTriggered(); while (!sim.getStack().isEmpty()) { sim.getStack().resolve(sim); sim.applyEffects(); @@ -255,8 +255,8 @@ public class CombatUtil { simulateStep(sim, new FirstCombatDamageStep()); simulateStep(sim, new CombatDamageStep()); simulateStep(sim, new EndOfCombatStep()); - - sim.checkStateAndTriggered(); + // The following commented out call produces random freezes. + //sim.checkStateAndTriggered(); while (!sim.getStack().isEmpty()) { triggered = true; sim.getStack().resolve(sim); @@ -270,7 +270,8 @@ public class CombatUtil { game.getPhase().setStep(step); if (!step.skipStep(game, game.getActivePlayerId())) { step.beginStep(game, game.getActivePlayerId()); - game.checkStateAndTriggered(); + // The following commented out call produces random freezes. + //game.checkStateAndTriggered(); while (!game.getStack().isEmpty()) { game.getStack().resolve(game); game.applyEffects();