From 6a43403d6c1f0167af8e2f7ea78d870e7a86b27d Mon Sep 17 00:00:00 2001 From: Agetian Date: Tue, 27 Jun 2017 03:09:29 +0000 Subject: [PATCH] - Better fix for the AI cheating with X values on replay (fixing the cause and not the effect). --- forge-ai/src/main/java/forge/ai/ComputerUtil.java | 5 ----- forge-game/src/main/java/forge/game/GameAction.java | 12 +++++++++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtil.java b/forge-ai/src/main/java/forge/ai/ComputerUtil.java index d930b75c22a..28f4fa12e6b 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtil.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtil.java @@ -2654,11 +2654,6 @@ public class ComputerUtil { AiController aic = ((PlayerControllerAi) ai.getController()).getAi(); Card targetSpellCard = null; for (Card c : options) { - if (withoutPayingManaCost && c.getManaCost() != null && c.getManaCost().getShardCount(ManaCostShard.X) > 0) { - // The AI will otherwise cheat with the mana payment, announcing X > 0 for spells like Heat Ray when replaying them - // without paying their mana cost. - continue; - } for (SpellAbility ab : c.getSpellAbilities()) { if (ab.getApi() == null) { // only API-based SAs are supported, other things may lead to a NPE (e.g. Ancestral Vision Suspend SA) diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 5f4bddc76c8..defee2068f6 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -184,9 +184,15 @@ public class GameAction { zoneChangedEarly = true; } - // Clean up the temporary Dash SVar when the Dashed card leaves the battlefield - if (fromBattlefield && c.getSVar("EndOfTurnLeavePlay").equals("Dash")) { - c.removeSVar("EndOfTurnLeavePlay"); + if (fromBattlefield) { + // Clean up the temporary Dash SVar when the Dashed card leaves the battlefield + if (c.getSVar("EndOfTurnLeavePlay").equals("Dash")) { + c.removeSVar("EndOfTurnLeavePlay"); + } + // Clean up the temporary X announcement variable used by the AI + if (!zoneTo.is(ZoneType.Stack) && c.hasSVar("PayX")) { + c.removeSVar("PayX"); + } } if (fromBattlefield && !toBattlefield) {