From 7fce6c552d75bd343462005b42ddcb3e476097bd Mon Sep 17 00:00:00 2001 From: BetaSteward Date: Tue, 24 Jan 2012 22:51:31 -0500 Subject: [PATCH] fixes + optimizations + updates to monte carlo ai --- .gitignore | 2 + .../mage/player/ai/ComputerPlayerMCTS.java | 130 +++++++----- .../src/mage/player/ai/MCTSExecutor.java | 28 ++- .../src/mage/player/ai/MCTSNode.java | 15 +- .../src/mage/player/ai/MCTSPlayer.java | 9 +- .../mage/player/ai/SimulatedPlayerMCTS.java | 199 ++++++++++-------- .../src/mage/player/ai/SimulatedPlayer.java | 2 +- Mage.Server/plugins/mage-player-ai-ma.jar | Bin 50253 -> 50260 bytes Mage.Server/plugins/mage-player-ai.jar | Bin 54513 -> 54654 bytes Mage.Server/plugins/mage-player-aimcts.jar | Bin 27494 -> 28559 bytes Mage.Server/plugins/mage-player-aiminimax.jar | Bin 39797 -> 39808 bytes Mage/src/mage/abilities/AbilityImpl.java | 11 +- .../mage/abilities/ActivatedAbilityImpl.java | 2 - .../abilities/effects/ContinuousEffects.java | 127 ++++++----- Mage/src/mage/game/GameImpl.java | 10 + Mage/src/mage/players/PlayerImpl.java | 5 +- 16 files changed, 312 insertions(+), 228 deletions(-) diff --git a/.gitignore b/.gitignore index 0cb45be4dd8..e1956605db3 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,5 @@ Mage.Server.Plugins/Mage.Draft.8PlayerBooster/target \.chg\..*$ \.rej$ \.conflict\~$ +/Mage.Server.Plugins/Mage.Player.AIMCTS/target/ +/Mage.Server.Console/target/ \ No newline at end of file diff --git a/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/ComputerPlayerMCTS.java b/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/ComputerPlayerMCTS.java index edc2f617a7f..8714801e5b8 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/ComputerPlayerMCTS.java +++ b/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/ComputerPlayerMCTS.java @@ -38,6 +38,10 @@ import mage.Constants.Zone; import mage.abilities.Ability; import mage.abilities.ActivatedAbility; import mage.abilities.common.PassAbility; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.costs.mana.ManaCost; +import mage.abilities.costs.mana.ManaCosts; +import mage.abilities.costs.mana.VariableManaCost; import mage.cards.Card; import mage.game.Game; import mage.game.combat.Combat; @@ -52,8 +56,9 @@ import org.apache.log4j.Logger; */ public class ComputerPlayerMCTS extends ComputerPlayer implements Player { - private static final int THINK_MIN_RATIO = 20; + private static final int THINK_MIN_RATIO = 40; private static final int THINK_MAX_RATIO = 100; + private static final boolean USE_MULTIPLE_THREADS = false; protected transient MCTSNode root; protected int maxThinkTime; @@ -84,7 +89,7 @@ public class ComputerPlayerMCTS extends ComputerPlayer imple @Override public boolean priority(Game game) { - if (game.getStep().getType() == PhaseStep.DRAW) + if (game.getStep().getType() == PhaseStep.PRECOMBAT_MAIN) logList("computer player " + name + " hand: ", new ArrayList(hand.getCards(game))); game.firePriorityEvent(playerId); getNextAction(game, NextAction.PRIORITY); @@ -111,7 +116,7 @@ public class ComputerPlayerMCTS extends ComputerPlayer imple protected void getNextAction(Game game, NextAction nextAction) { if (root != null) { - MCTSNode newRoot = null; + MCTSNode newRoot; newRoot = root.getMatchingState(game.getState().getValue(false, game)); if (newRoot != null) { newRoot.emancipate(); @@ -161,7 +166,8 @@ public class ComputerPlayerMCTS extends ComputerPlayer imple // // @Override // public boolean chooseUse(Outcome outcome, String message, Game game) { -// throw new UnsupportedOperationException("Not supported yet."); +// getNextAction(game, NextAction.CHOOSE_USE); +// return root.get // } // // @Override @@ -174,11 +180,20 @@ public class ComputerPlayerMCTS extends ComputerPlayer imple // throw new UnsupportedOperationException("Not supported yet."); // } -// @Override -// public boolean playXMana(VariableManaCost cost, ManaCosts costs, Game game) { -// throw new UnsupportedOperationException("Not supported yet."); -// } -// + @Override + public boolean playXMana(VariableManaCost cost, ManaCosts costs, Game game) { + //MCTSPlayer.simulateVariableCosts method adds a generic mana cost for each option + for (ManaCost manaCost: costs) { + if (manaCost instanceof GenericManaCost) { + cost.setPayment(manaCost.getPayment()); + logger.debug("using X = " + cost.getPayment().count()); + break; + } + } + cost.setPaid(); + return true; + } + // @Override // public int chooseEffect(List rEffects, Game game) { // throw new UnsupportedOperationException("Not supported yet."); @@ -261,68 +276,69 @@ public class ComputerPlayerMCTS extends ComputerPlayer imple logger.info("applyMCTS - Thinking for " + (endTime - startTime)/1000000000.0 + "s"); if (thinkTime > 0) { -// List tasks = new ArrayList(); -// for (int i = 0; i < cores; i++) { -// Game sim = createMCTSGame(game); -// MCTSPlayer player = (MCTSPlayer) sim.getPlayer(playerId); -// player.setNextAction(action); -// MCTSExecutor exec = new MCTSExecutor(sim, playerId, thinkTime); -// tasks.add(exec); -// } -// -// try { -// pool.invokeAll(tasks); -// } catch (InterruptedException ex) { -// logger.warn("applyMCTS interrupted"); -// } -// -// for (MCTSExecutor task: tasks) { -// root.merge(task.getRoot()); -// task.clear(); -// } -// tasks.clear(); - - MCTSNode current; - int simCount = 0; - while (true) { - long currentTime = System.nanoTime(); - if (currentTime > endTime) - break; - current = root; - - // Selection - while (!current.isLeaf()) { - current = current.select(this.playerId); + if (USE_MULTIPLE_THREADS) { + List tasks = new ArrayList(); + for (int i = 0; i < cores; i++) { + Game sim = createMCTSGame(game); + MCTSPlayer player = (MCTSPlayer) sim.getPlayer(playerId); + player.setNextAction(action); + MCTSExecutor exec = new MCTSExecutor(sim, playerId, thinkTime); + tasks.add(exec); } - int result; - if (!current.isTerminal()) { - // Expansion - current.expand(); + try { + pool.invokeAll(tasks); + } catch (InterruptedException ex) { + logger.warn("applyMCTS interrupted"); + } - // Simulation - current = current.select(this.playerId); - result = current.simulate(this.playerId); - simCount++; + for (MCTSExecutor task: tasks) { + root.merge(task.getRoot()); + task.clear(); } - else { - result = current.isWinner(this.playerId)?1:-1; - } - // Backpropagation - current.backpropagate(result); + tasks.clear(); } + else { + MCTSNode current; + int simCount = 0; + while (true) { + long currentTime = System.nanoTime(); + if (currentTime > endTime) + break; + current = root; - logger.info("Simulated " + simCount + " games - nodes in tree: " + root.size()); + // Selection + while (!current.isLeaf()) { + current = current.select(this.playerId); + } + + int result; + if (!current.isTerminal()) { + // Expansion + current.expand(); + + // Simulation + current = current.select(this.playerId); + result = current.simulate(this.playerId); + simCount++; + } + else { + result = current.isWinner(this.playerId)?1:-1; + } + // Backpropagation + current.backpropagate(result); + } + logger.info("Simulated " + simCount + " games - nodes in tree: " + root.size()); + } displayMemory(); } // root.print(1); - return; } //try to ensure that there are at least THINK_MIN_RATIO simulations per node at all times private int calculateThinkTime(Game game, NextAction action) { - int thinkTime = 0; + int thinkTime; int nodeSizeRatio = 0; if (root.getNumChildren() > 0) nodeSizeRatio = root.getVisits() / root.getNumChildren(); diff --git a/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/MCTSExecutor.java b/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/MCTSExecutor.java index 7082daf098e..fe5247d1647 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/MCTSExecutor.java +++ b/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/MCTSExecutor.java @@ -57,16 +57,10 @@ public class MCTSExecutor implements Callable { long endTime = startTime + (thinkTime * 1000000000l); MCTSNode current; -// if (root.getNumChildren() == 1) -// //there is only one possible action - don't spend a lot of time thinking -// endTime = startTime + 1000000000l; -// logger.info("applyMCTS - Thinking for " + (endTime - startTime)/1000000000.0 + "s"); while (true) { long currentTime = System.nanoTime(); -// logger.info("Remaining time: " + (endTime - currentTime)/1000000000.0 + "s"); if (currentTime > endTime) -// if (root.getNodeCount() > 50) break; current = root; @@ -80,14 +74,17 @@ public class MCTSExecutor implements Callable { // Expansion current.expand(); -// if (current == root && current.getNumChildren() == 1) -// //there is only one possible action - don't spend a lot of time thinking -// endTime = startTime + 1000000000l; - - // Simulation - current = current.select(this.playerId); - result = current.simulate(this.playerId); - simCount++; + // only run simulations for nodes that have siblings + if (current.getNumChildren() > 1) { + // Simulation + current = current.select(this.playerId); + result = current.simulate(this.playerId); + simCount++; + } + else { + current = current.select(this.playerId); + result = 0; + } } else { result = current.isWinner(this.playerId)?1:-1; @@ -95,8 +92,7 @@ public class MCTSExecutor implements Callable { // Backpropagation current.backpropagate(result); } -// logger.info("Created " + root.getNodeCount() + " nodes"); - logger.info("Simulated " + simCount + " nodes"); + logger.info("Simulated " + simCount + " games - nodes in tree: " + root.size()); return true; } diff --git a/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/MCTSNode.java b/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/MCTSNode.java index d339e3acb80..15f8a5b4e76 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/MCTSNode.java +++ b/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/MCTSNode.java @@ -42,7 +42,6 @@ import mage.game.Game; import mage.game.combat.Combat; import mage.game.combat.CombatGroup; import mage.game.turn.Step.StepPart; -import mage.player.ai.MCTSPlayer.NextAction; import mage.players.Player; import org.apache.log4j.Logger; @@ -53,7 +52,7 @@ import org.apache.log4j.Logger; public class MCTSNode { private static final double selectionCoefficient = 1.0; - private static final double passRatioTolerance = 0.01; + private static final double passRatioTolerance = 0.0; private final static transient Logger logger = Logger.getLogger(MCTSNode.class); private int visits = 0; @@ -64,12 +63,14 @@ public class MCTSNode { private Game game; private String stateValue; private UUID playerId; + private boolean terminal = false; private static int nodeCount; public MCTSNode(Game game) { this.game = game; this.stateValue = game.getState().getValue(false, game); + this.terminal = game.isGameOver(); setPlayer(); nodeCount = 1; } @@ -77,6 +78,7 @@ public class MCTSNode { protected MCTSNode(MCTSNode parent, Game game, Ability action) { this.game = game; this.stateValue = game.getState().getValue(false, game); + this.terminal = game.isGameOver(); this.parent = parent; this.action = action; setPlayer(); @@ -86,6 +88,7 @@ public class MCTSNode { protected MCTSNode(MCTSNode parent, Game game) { this.game = game; this.stateValue = game.getState().getValue(false, game); + this.terminal = game.isGameOver(); this.parent = parent; setPlayer(); nodeCount++; @@ -144,6 +147,7 @@ public class MCTSNode { sim.resume(); children.add(new MCTSNode(this, sim, ability)); } + game = null; break; case SELECT_ATTACKERS: // logger.info("Select attackers:" + player.getName()); @@ -185,7 +189,7 @@ public class MCTSNode { Game sim = createSimulation(game, playerId); sim.resume(); // long duration = System.nanoTime() - startTime; - int retVal = 0; //anything other than a win is a loss + int retVal = -1; //anything other than a win is a loss for (Player simPlayer: sim.getPlayers().values()) { // logger.info(simPlayer.getName() + " calculated " + ((SimulatedPlayerMCTS)simPlayer).getActionCount() + " actions in " + duration/1000000000.0 + "s"); if (simPlayer.getId().equals(playerId) && simPlayer.hasWon()) { @@ -197,6 +201,8 @@ public class MCTSNode { } public void backpropagate(int result) { + if (result == 0) + return; if (result == 1) wins++; visits++; @@ -232,6 +238,7 @@ public class MCTSNode { //favour passing vs any other action if ratio is close double ratio = node.wins/(node.visits * 1.0); if (ratio > bestRatio - passRatioTolerance) { + logger.info("choosing pass over " + bestChild.getAction()); bestChild = node; bestCount = node.visits; bestRatio = ratio; @@ -329,7 +336,7 @@ public class MCTSNode { } public boolean isTerminal() { - return game.isGameOver(); + return terminal; } public boolean isWinner(UUID playerId) { diff --git a/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/MCTSPlayer.java b/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/MCTSPlayer.java index 0760ba32440..6b499c13334 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/MCTSPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AIMCTS/src/mage/player/ai/MCTSPlayer.java @@ -30,6 +30,7 @@ package mage.player.ai; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import mage.Constants.Outcome; import mage.abilities.Ability; import mage.abilities.SpellAbility; import mage.abilities.common.PassAbility; @@ -115,7 +116,7 @@ public class MCTSPlayer extends ComputerPlayer { } for (int i = start; i < numAvailable; i++) { Ability newAbility = ability.copy(); - newAbility.addManaCost(new GenericManaCost(i)); + newAbility.getManaCostsToPay().add(new GenericManaCost(i)); options.add(newAbility); } } @@ -242,7 +243,9 @@ public class MCTSPlayer extends ComputerPlayer { // // @Override // public boolean chooseUse(Outcome outcome, String message, Game game) { -// game.end(); +// game.pause(); +// nextAction = NextAction.CHOOSE_USE; +// return false; // } // // @Override @@ -267,14 +270,12 @@ public class MCTSPlayer extends ComputerPlayer { @Override public void selectAttackers(Game game) { -// logger.info("Paused for select attackers for player:" + getName()); game.pause(); nextAction = NextAction.SELECT_ATTACKERS; } @Override public void selectBlockers(Game game) { -// logger.info("Paused for select blockers for player:" + getName()); game.pause(); nextAction = NextAction.SELECT_BLOCKERS; } 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 278b1a18e01..27182d89fae 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 @@ -51,13 +51,11 @@ 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; import mage.game.permanent.Permanent; import mage.game.stack.StackAbility; -import mage.game.stack.StackObject; import mage.players.Player; import mage.target.Target; import mage.target.TargetAmount; @@ -133,7 +131,7 @@ public class SimulatedPlayerMCTS extends MCTSPlayer { if (ability.getManaCosts().getVariableCosts().size() > 0) { int amount = getAvailableManaProducers(game).size() - ability.getManaCosts().convertedManaCost(); if (amount > 0) - ability.addManaCost(new GenericManaCost(rnd.nextInt(amount))); + ability.getManaCostsToPay().add(new GenericManaCost(rnd.nextInt(amount))); } // check if ability kills player, if not then it's ok to play // if (ability.isUsesStack()) { @@ -278,67 +276,82 @@ public class SimulatedPlayerMCTS extends MCTSPlayer { @Override public boolean choose(Outcome outcome, Target target, UUID sourceId, Game game) { - return chooseRandom(target, game); + if (this.isHuman()) + return chooseRandom(target, game); + return super.choose(outcome, target, sourceId, game); } @Override public boolean choose(Outcome outcome, Target target, UUID sourceId, Game game, Map options) { - return chooseRandom(target, game); + if (this.isHuman()) + return chooseRandom(target, game); + return super.choose(outcome, target, sourceId, game, options); } @Override public boolean choose(Outcome outcome, Cards cards, TargetCard target, Game game) { - if (cards.isEmpty()) - return !target.isRequired(); - Set possibleTargets = target.possibleTargets(playerId, cards, 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(); + if (this.isHuman()) { + if (cards.isEmpty()) + return !target.isRequired(); + Set possibleTargets = target.possibleTargets(playerId, cards, 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; } - target.add(targetId, game); - return true; + return super.choose(outcome, cards, target, game); } @Override public boolean chooseTarget(Outcome outcome, Target target, Ability source, Game game) { - return chooseRandomTarget(target, source, game); + if (this.isHuman()) + return chooseRandomTarget(target, source, game); + return super.chooseTarget(outcome, target, source, game); } @Override public boolean chooseTarget(Outcome outcome, Cards cards, TargetCard target, Ability source, Game game) { - if (cards.isEmpty()) - return !target.isRequired(); - Card card = cards.getRandom(game); - target.addTarget(card.getId(), source, game); - return true; + if (this.isHuman()) { + if (cards.isEmpty()) + return !target.isRequired(); + Card card = cards.getRandom(game); + target.addTarget(card.getId(), source, game); + return true; + } + return super.chooseTarget(outcome, cards, target, source, game); } @Override public boolean chooseTargetAmount(Outcome outcome, TargetAmount target, Ability source, Game game) { - Set possibleTargets = target.possibleTargets(source==null?null:source.getSourceId(), playerId, game); - if (possibleTargets.isEmpty()) - return !target.isRequired(); - if (!target.isRequired()) { - if (rnd.nextInt(possibleTargets.size() + 1) == 0) { - return false; + if (this.isHuman()) { + Set possibleTargets = target.possibleTargets(source==null?null:source.getSourceId(), playerId, game); + if (possibleTargets.isEmpty()) + return !target.isRequired(); + if (!target.isRequired()) { + if (rnd.nextInt(possibleTargets.size() + 1) == 0) { + return false; + } } - } - if (possibleTargets.size() == 1) { - target.addTarget(possibleTargets.iterator().next(), target.getAmountRemaining(), source, game); + if (possibleTargets.size() == 1) { + target.addTarget(possibleTargets.iterator().next(), target.getAmountRemaining(), source, game); + return true; + } + 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.addTarget(targetId, rnd.nextInt(target.getAmountRemaining()) + 1, source, game); return true; } - 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.addTarget(targetId, rnd.nextInt(target.getAmountRemaining()) + 1, source, game); - return true; + return super.chooseTargetAmount(outcome, target, source, game); } @Override @@ -348,19 +361,24 @@ public class SimulatedPlayerMCTS extends MCTSPlayer { @Override public boolean chooseUse(Outcome outcome, String message, Game game) { - return rnd.nextBoolean(); + if (this.isHuman()) + return rnd.nextBoolean(); + return super.chooseUse(outcome, message, game); } @Override public boolean choose(Outcome outcome, Choice choice, Game game) { - Iterator it = choice.getChoices().iterator(); - String sChoice = it.next(); - int choiceNum = rnd.nextInt(choice.getChoices().size()); - for (int i = 0; i < choiceNum; i++) { - sChoice = it.next(); + if (this.isHuman()) { + Iterator it = choice.getChoices().iterator(); + String sChoice = it.next(); + int choiceNum = rnd.nextInt(choice.getChoices().size()); + for (int i = 0; i < choiceNum; i++) { + sChoice = it.next(); + } + choice.setChoice(sChoice); + return true; } - choice.setChoice(sChoice); - return true; + return super.choose(outcome, choice, game); } @Override @@ -383,70 +401,87 @@ public class SimulatedPlayerMCTS extends MCTSPlayer { @Override public int chooseEffect(List rEffects, Game game) { - return rnd.nextInt(rEffects.size()); + if (this.isHuman()) + return rnd.nextInt(rEffects.size()); + return super.chooseEffect(rEffects, game); } @Override public TriggeredAbility chooseTriggeredAbility(TriggeredAbilities abilities, Game game) { - return abilities.get(rnd.nextInt(abilities.size())); + if (this.isHuman()) + return abilities.get(rnd.nextInt(abilities.size())); + return super.chooseTriggeredAbility(abilities, game); } @Override public Mode chooseMode(Modes modes, Ability source, Game game) { - Iterator it = modes.values().iterator(); - Mode mode = it.next(); - if (modes.size() == 1) + if (this.isHuman()) { + Iterator it = modes.values().iterator(); + Mode mode = it.next(); + if (modes.size() == 1) + return mode; + int modeNum = rnd.nextInt(modes.values().size()); + for (int i = 0; i < modeNum; i++) { + mode = it.next(); + } return mode; - int modeNum = rnd.nextInt(modes.values().size()); - for (int i = 0; i < modeNum; i++) { - mode = it.next(); } - return mode; + return super.chooseMode(modes, source, game); } @Override public UUID chooseAttackerOrder(List attackers, Game game) { - return attackers.get(rnd.nextInt(attackers.size())).getId(); + if (this.isHuman()) + return attackers.get(rnd.nextInt(attackers.size())).getId(); + return super.chooseAttackerOrder(attackers, game); } @Override public UUID chooseBlockerOrder(List blockers, Game game) { - return blockers.get(rnd.nextInt(blockers.size())).getId(); + if (this.isHuman()) + return blockers.get(rnd.nextInt(blockers.size())).getId(); + return super.chooseBlockerOrder(blockers, game); } @Override public void assignDamage(int damage, List targets, String singleTargetName, UUID sourceId, Game game) { - int remainingDamage = damage; - UUID targetId; - int amount; - while (remainingDamage > 0) { - if (targets.size() == 1) { - targetId = targets.get(0); - amount = remainingDamage; - } - else { - targetId = targets.get(rnd.nextInt(targets.size())); - amount = rnd.nextInt(damage + 1); - } - Permanent permanent = game.getPermanent(targetId); - if (permanent != null) { - permanent.damage(amount, sourceId, game, true, false); - remainingDamage -= amount; - } - else { - Player player = game.getPlayer(targetId); - if (player != null) { - player.damage(amount, sourceId, game, false, true); + if (this.isHuman()) { + int remainingDamage = damage; + UUID targetId; + int amount; + while (remainingDamage > 0) { + if (targets.size() == 1) { + targetId = targets.get(0); + amount = remainingDamage; + } + else { + targetId = targets.get(rnd.nextInt(targets.size())); + amount = rnd.nextInt(damage + 1); + } + Permanent permanent = game.getPermanent(targetId); + if (permanent != null) { + permanent.damage(amount, sourceId, game, true, false); remainingDamage -= amount; } + else { + Player player = game.getPlayer(targetId); + if (player != null) { + player.damage(amount, sourceId, game, false, true); + remainingDamage -= amount; + } + } + targets.remove(targetId); } - targets.remove(targetId); } + else + super.assignDamage(damage, targets, singleTargetName, sourceId, game); } @Override public int getAmount(int min, int max, String message, Game game) { - return rnd.nextInt(max - min) + min; + if (this.isHuman()) + return rnd.nextInt(max - min) + min; + return super.getAmount(min, max, message, game); } } diff --git a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/SimulatedPlayer.java b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/SimulatedPlayer.java index e795d96a575..93d96168a95 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/SimulatedPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AIMinimax/src/mage/player/ai/SimulatedPlayer.java @@ -150,7 +150,7 @@ public class SimulatedPlayer extends ComputerPlayer { } for (int i = start; i < numAvailable; i++) { Ability newAbility = ability.copy(); - newAbility.addCost(new GenericManaCost(i)); + newAbility.getManaCostsToPay().add(new GenericManaCost(i)); allActions.add(newAbility); } } diff --git a/Mage.Server/plugins/mage-player-ai-ma.jar b/Mage.Server/plugins/mage-player-ai-ma.jar index b3bc0b4151fd1424d6816354bc1a6ce01ac6f44a..d8c366969b7fd1ab356a787840a5f332114f4acd 100644 GIT binary patch delta 8141 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 E7lE#ZQvd(} delta 8117 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 diff --git a/Mage.Server/plugins/mage-player-ai.jar b/Mage.Server/plugins/mage-player-ai.jar index c17e2480315547fb864b2ef76b374a87a502d7ce..5f1e107417d83d97fc6c1d4ffb113ca410895133 100644 GIT binary patch delta 13756 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 b>i?BUH1SU&(?2T@pR%@q3bQ`(Z}k5Fp_ie~ delta 13585 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 H=gxltGTJM_ delta 25527 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

pP$nd(W9ty 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 F{tw{F3>*Le diff --git a/Mage.Server/plugins/mage-player-aiminimax.jar b/Mage.Server/plugins/mage-player-aiminimax.jar index a386de171385dd871a2b1ac4f0d34236033c5b8a..9fedeec9919cece460b0e96950ea03f297a95b00 100644 GIT binary patch delta 6782 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 delta 6760 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 diff --git a/Mage/src/mage/abilities/AbilityImpl.java b/Mage/src/mage/abilities/AbilityImpl.java index 8a967bcd360..617700e6361 100644 --- a/Mage/src/mage/abilities/AbilityImpl.java +++ b/Mage/src/mage/abilities/AbilityImpl.java @@ -374,9 +374,14 @@ public abstract class AbilityImpl> implements Ability { @Override public void addCost(Cost cost) { - if (cost != null) { - this.costs.add(cost); - } + if (cost != null) { + if (cost instanceof ManaCost) { + this.addManaCost((ManaCost)cost); + } + else { + this.costs.add(cost); + } + } } @Override diff --git a/Mage/src/mage/abilities/ActivatedAbilityImpl.java b/Mage/src/mage/abilities/ActivatedAbilityImpl.java index 7565e31e6e2..e10e2497863 100644 --- a/Mage/src/mage/abilities/ActivatedAbilityImpl.java +++ b/Mage/src/mage/abilities/ActivatedAbilityImpl.java @@ -99,8 +99,6 @@ public abstract class ActivatedAbilityImpl> ex if (cost != null) { if (cost instanceof PhyrexianManaCost) { this.addManaCost((PhyrexianManaCost)cost); - } else if (cost instanceof ManaCost) { - this.addManaCost((ManaCost) cost); } else { this.addCost(cost); } diff --git a/Mage/src/mage/abilities/effects/ContinuousEffects.java b/Mage/src/mage/abilities/effects/ContinuousEffects.java index 0e75d3a2e95..03ee51914df 100644 --- a/Mage/src/mage/abilities/effects/ContinuousEffects.java +++ b/Mage/src/mage/abilities/effects/ContinuousEffects.java @@ -45,6 +45,7 @@ import mage.Constants.Layer; import mage.Constants.SubLayer; import mage.Constants.Zone; import mage.abilities.Ability; +import mage.abilities.StaticAbility; import mage.cards.Card; import mage.game.Game; import mage.game.events.GameEvent; @@ -245,17 +246,20 @@ public class ContinuousEffects implements Serializable { public List getApplicableRequirementEffects(Permanent permanent, Game game) { List effects = new ArrayList(); //get all applicable Requirement effects on the battlefield - for (Permanent perm: game.getBattlefield().getActivePermanents(permanent.getControllerId(), game)) { - for (Entry entry: perm.getAbilities().getEffects(game, Zone.BATTLEFIELD, EffectType.REQUIREMENT).entrySet()) { - if (((RequirementEffect)entry.getKey()).applies(permanent, entry.getValue(), game)) { - effects.add((RequirementEffect)entry.getKey()); - abilityMap.put(entry.getKey().getId(), entry.getValue()); - } - } - } +// for (Permanent perm: game.getBattlefield().getActivePermanents(permanent.getControllerId(), game)) { +// for (Entry entry: perm.getAbilities().getEffects(game, Zone.BATTLEFIELD, EffectType.REQUIREMENT).entrySet()) { +// if (((RequirementEffect)entry.getKey()).applies(permanent, entry.getValue(), game)) { +// effects.add((RequirementEffect)entry.getKey()); +// abilityMap.put(entry.getKey().getId(), entry.getValue()); +// } +// } +// } for (RequirementEffect effect: requirementEffects) { - if (effect.applies(permanent, abilityMap.get(effect.getId()), game)) - effects.add(effect); + Ability ability = abilityMap.get(effect.getId()); + if (!(ability instanceof StaticAbility) || ability.getZone() == game.getZone(ability.getSourceId())) { + if (effect.applies(permanent, ability, game)) + effects.add(effect); + } } return effects; } @@ -263,17 +267,20 @@ public class ContinuousEffects implements Serializable { public List getApplicableRestrictionEffects(Permanent permanent, Game game) { List effects = new ArrayList(); //get all applicable Restriction effects on the battlefield - for (Permanent perm: game.getBattlefield().getActivePermanents(permanent.getControllerId(), game)) { - for (Entry entry: perm.getAbilities().getEffects(game, Zone.BATTLEFIELD, EffectType.RESTRICTION).entrySet()) { - if (((RestrictionEffect)entry.getKey()).applies(permanent, entry.getValue(), game)) { - effects.add((RestrictionEffect)entry.getKey()); - abilityMap.put(entry.getKey().getId(), entry.getValue()); - } - } - } +// for (Permanent perm: game.getBattlefield().getActivePermanents(permanent.getControllerId(), game)) { +// for (Entry entry: perm.getAbilities().getEffects(game, Zone.BATTLEFIELD, EffectType.RESTRICTION).entrySet()) { +// if (((RestrictionEffect)entry.getKey()).applies(permanent, entry.getValue(), game)) { +// effects.add((RestrictionEffect)entry.getKey()); +// abilityMap.put(entry.getKey().getId(), entry.getValue()); +// } +// } +// } for (RestrictionEffect effect: restrictionEffects) { - if (effect.applies(permanent, abilityMap.get(effect.getId()), game)) - effects.add(effect); + Ability ability = abilityMap.get(effect.getId()); + if (!(ability instanceof StaticAbility) || ability.getZone() == game.getZone(ability.getSourceId())) { + if (effect.applies(permanent, ability, game)) + effects.add(effect); + } } return effects; } @@ -289,49 +296,55 @@ public class ContinuousEffects implements Serializable { if (planeswalkerRedirectionEffect.applies(event, null, game)) replaceEffects.add(planeswalkerRedirectionEffect); //get all applicable Replacement effects in each players hand and graveyard - for (Card card: game.getCards()) { - Zone zone = game.getState().getZone(card.getId()); - if (zone == Zone.HAND || zone == Zone.GRAVEYARD) { - for (Entry entry: card.getAbilities().getReplacementEffects(zone).entrySet()) { - if (entry.getKey().applies(event, entry.getValue(), game)) { - replaceEffects.add(entry.getKey()); - abilityMap.put(entry.getKey().getId(), entry.getValue()); - } - } - } - } +// for (Card card: game.getCards()) { +// Zone zone = game.getState().getZone(card.getId()); +// if (zone == Zone.HAND || zone == Zone.GRAVEYARD) { +// for (Entry entry: card.getAbilities().getReplacementEffects(zone).entrySet()) { +// if (entry.getKey().applies(event, entry.getValue(), game)) { +// replaceEffects.add(entry.getKey()); +// abilityMap.put(entry.getKey().getId(), entry.getValue()); +// } +// } +// } +// } //get all applicable Replacement effects on the battlefield - for (Permanent permanent: game.getBattlefield().getAllPermanents()) { - for (Entry entry: permanent.getAbilities().getReplacementEffects(Zone.BATTLEFIELD).entrySet()) { - if (entry.getKey().applies(event, entry.getValue(), game)) { - replaceEffects.add(entry.getKey()); - abilityMap.put(entry.getKey().getId(), entry.getValue()); - } - } - } +// for (Permanent permanent: game.getBattlefield().getAllPermanents()) { +// for (Entry entry: permanent.getAbilities().getReplacementEffects(Zone.BATTLEFIELD).entrySet()) { +// if (entry.getKey().applies(event, entry.getValue(), game)) { +// replaceEffects.add(entry.getKey()); +// abilityMap.put(entry.getKey().getId(), entry.getValue()); +// } +// } +// } //get all applicable Replacement effects on players - for (Player player: game.getPlayers().values()) { - for (Entry entry: player.getAbilities().getReplacementEffects(Zone.BATTLEFIELD).entrySet()) { - if (entry.getKey().applies(event, entry.getValue(), game)) { - replaceEffects.add(entry.getKey()); - abilityMap.put(entry.getKey().getId(), entry.getValue()); - } - } - } +// for (Player player: game.getPlayers().values()) { +// for (Entry entry: player.getAbilities().getReplacementEffects(Zone.BATTLEFIELD).entrySet()) { +// if (entry.getKey().applies(event, entry.getValue(), game)) { +// replaceEffects.add(entry.getKey()); +// abilityMap.put(entry.getKey().getId(), entry.getValue()); +// } +// } +// } //get all applicable transient Replacement effects for (ReplacementEffect effect: replacementEffects) { - if (effect.getDuration() != Duration.OneUse || !effect.isUsed()) { - if (effect.applies(event, abilityMap.get(effect.getId()), game)) { - replaceEffects.add(effect); - } - } + Ability ability = abilityMap.get(effect.getId()); + if (!(ability instanceof StaticAbility) || ability.getZone() == game.getZone(ability.getSourceId())) { + if (effect.getDuration() != Duration.OneUse || !effect.isUsed()) { + if (effect.applies(event, ability, game)) { + replaceEffects.add(effect); + } + } + } } for (PreventionEffect effect: preventionEffects) { - if (effect.getDuration() != Duration.OneUse || !effect.isUsed()) { - if (effect.applies(event, abilityMap.get(effect.getId()), game)) { - replaceEffects.add(effect); - } - } + Ability ability = abilityMap.get(effect.getId()); + if (!(ability instanceof StaticAbility) || ability.getZone() == game.getZone(ability.getSourceId())) { + if (effect.getDuration() != Duration.OneUse || !effect.isUsed()) { + if (effect.applies(event, ability, game)) { + replaceEffects.add(effect); + } + } + } } return replaceEffects; } diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index 930ac991c46..f683d6f5e07 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -72,6 +72,7 @@ import org.apache.log4j.Logger; import java.io.IOException; import java.io.Serializable; import java.util.*; +import mage.abilities.effects.Effect; import mage.watchers.common.PlayerDamagedBySourceWatcher; public abstract class GameImpl> implements Game, Serializable { @@ -192,6 +193,15 @@ public abstract class GameImpl> implements Game, Serializa watcher.setSourceId(card.getId()); state.getWatchers().add(watcher); } + for (StaticAbility ability: card.getAbilities().getStaticAbilities(Zone.ALL)) { + for (Mode mode: ability.getModes().values()) { + for (Effect effect: mode.getEffects()) { + if (effect instanceof ContinuousEffect) { + state.addEffect((ContinuousEffect)effect, ability); + } + } + } + } } } diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index c27edaa56e9..ebe342dcb20 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -1228,8 +1228,9 @@ public abstract class PlayerImpl> implements Player, Ser Map playableActivated = new HashMap(); for (Permanent permanent: game.getBattlefield().getAllActivePermanents(playerId)) { for (ActivatedAbility ability: permanent.getAbilities().getActivatedAbilities(Zone.BATTLEFIELD)) { - if (canPlay(ability, available, game)) - playableActivated.put(ability.toString(), ability); + if (!playableActivated.containsKey(ability.toString())) + if (canPlay(ability, available, game)) + playableActivated.put(ability.toString(), ability); } } playable.addAll(playableActivated.values());