From 4651d68f95d5bd9718f762aea17180d3c4c1f1bf Mon Sep 17 00:00:00 2001 From: BetaSteward Date: Wed, 23 Nov 2011 09:54:18 -0500 Subject: [PATCH] fixed infinite loop with certain cards --- .../mage/player/ai/SimulatedPlayerMCTS.java | 13 +++++++++++-- Mage.Server/plugins/mage-player-aimcts.jar | Bin 22515 -> 22610 bytes 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/SimulatedPlayerMCTS.java b/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/SimulatedPlayerMCTS.java index 77ba63399b5..0d565b0ced2 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/SimulatedPlayerMCTS.java +++ b/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/SimulatedPlayerMCTS.java @@ -50,6 +50,7 @@ import mage.abilities.effects.ReplacementEffect; import mage.abilities.mana.ManaAbility; import mage.cards.Card; import mage.cards.Cards; +import mage.cards.CardsImpl; import mage.choices.Choice; import mage.game.Game; import mage.game.combat.CombatGroup; @@ -264,8 +265,16 @@ public class SimulatedPlayerMCTS extends MCTSPlayer { public boolean choose(Outcome outcome, Cards cards, TargetCard target, Game game) { if (cards.isEmpty()) return !target.isRequired(); - Card card = cards.getRandom(game); - target.add(card.getId(), game); + Set possibleTargets = target.possibleTargets(playerId, game); + if (possibleTargets.isEmpty()) + return !target.isRequired(); + Iterator it = possibleTargets.iterator(); + int targetNum = rnd.nextInt(possibleTargets.size()); + UUID targetId = it.next(); + for (int i = 0; i < targetNum; i++) { + targetId = it.next(); + } + target.add(targetId, game); return true; } diff --git a/Mage.Server/plugins/mage-player-aimcts.jar b/Mage.Server/plugins/mage-player-aimcts.jar index d3e362bd834b1ba74d29821e0c944531fe35c07c..fa8ee41bedca8ce6f257f3ff5300eebbc44ac7c1 100644 GIT binary patch delta 7041 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 cQ2$0;|6|hsxeb@+XBqcwpoaWf=kM8n0q<}