From a381163a1258a51bb0342263ffa60589b8bb94f3 Mon Sep 17 00:00:00 2001 From: Hanmac Date: Tue, 2 Aug 2016 18:12:10 +0000 Subject: [PATCH] fixed ComputerUtil & PlayerControllerAi: return false if spell cost could not be paid that does fix Madness for AI --- forge-ai/src/main/java/forge/ai/ComputerUtil.java | 10 ++++++---- .../src/main/java/forge/ai/PlayerControllerAi.java | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtil.java b/forge-ai/src/main/java/forge/ai/ComputerUtil.java index caf1959165a..998785b3c92 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtil.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtil.java @@ -198,10 +198,10 @@ public class ComputerUtil { } // this is used for AI's counterspells - public static final void playStack(final SpellAbility sa, final Player ai, final Game game) { + public static final boolean playStack(final SpellAbility sa, final Player ai, final Game game) { sa.setActivatingPlayer(ai); if (!ComputerUtilCost.canPayCost(sa, ai)) - return; + return false; final Card source = sa.getHostCard(); if (sa.isSpell() && !source.isCopiedSpell()) { @@ -217,6 +217,7 @@ public class ComputerUtil { game.getStack().add(sa); } } + return true; } public static final void playSpellAbilityForFree(final Player ai, final SpellAbility sa) { @@ -230,12 +231,12 @@ public class ComputerUtil { ai.getGame().getStack().add(sa); } - public static final void playSpellAbilityWithoutPayingManaCost(final Player ai, final SpellAbility sa, final Game game) { + public static final boolean playSpellAbilityWithoutPayingManaCost(final Player ai, final SpellAbility sa, final Game game) { final SpellAbility newSA = sa.copyWithNoManaCost(); newSA.setActivatingPlayer(ai); if (!CostPayment.canPayAdditionalCosts(newSA.getPayCosts(), newSA)) { - return; + return false; } final Card source = newSA.getHostCard(); @@ -247,6 +248,7 @@ public class ComputerUtil { pay.payComputerCosts(new AiCostDecision(ai, sa)); game.getStack().add(newSA); + return true; } public static final void playNoStack(final Player ai, final SpellAbility sa, final Game game) { diff --git a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java index 7b0c0e145bb..35429051c5d 100644 --- a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java +++ b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java @@ -720,9 +720,9 @@ public class PlayerControllerAi extends PlayerController { Spell spell = (Spell) tgtSA; if (brains.canPlayFromEffectAI(spell, !optional, noManaCost) == AiPlayDecision.WillPlay || !optional) { if (noManaCost) { - ComputerUtil.playSpellAbilityWithoutPayingManaCost(player, tgtSA, game); + return ComputerUtil.playSpellAbilityWithoutPayingManaCost(player, tgtSA, game); } else { - ComputerUtil.playStack(tgtSA, player, game); + return ComputerUtil.playStack(tgtSA, player, game); } } else return false; // didn't play spell