diff --git a/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml b/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml new file mode 100644 index 00000000000..78d2eb0267c --- /dev/null +++ b/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml @@ -0,0 +1,56 @@ + + + + 4.0.0 + + + org.mage + mage-server-plugins + 0.8.6 + + + mage-player-ai-draft-bot + jar + Mage Player AI.DraftBot + + + + ${project.groupId} + mage + ${project.version} + + + ${project.groupId} + mage-player-ai + ${project.version} + + + + + src + + + org.apache.maven.plugins + maven-compiler-plugin + 2.0.2 + + 1.6 + 1.6 + + + + maven-resources-plugin + + UTF-8 + + + + + + mage-player-ai-draft-bot + + + + + diff --git a/Mage.Server.Plugins/Mage.Player.AI.DraftBot/src/mage/player/ai/ComputerDraftPlayer.java b/Mage.Server.Plugins/Mage.Player.AI.DraftBot/src/mage/player/ai/ComputerDraftPlayer.java new file mode 100644 index 00000000000..31e514b2387 --- /dev/null +++ b/Mage.Server.Plugins/Mage.Player.AI.DraftBot/src/mage/player/ai/ComputerDraftPlayer.java @@ -0,0 +1,68 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ + +package mage.player.ai; + +import mage.Constants.RangeOfInfluence; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author nantuko + */ +public class ComputerDraftPlayer extends ComputerPlayer implements Player { + + public ComputerDraftPlayer(String name, RangeOfInfluence range) { + super(name, range); + } + + public ComputerDraftPlayer(String name, RangeOfInfluence range, int skill) { + super(name, range); + } + + public ComputerDraftPlayer(final ComputerDraftPlayer player) { + super(player); + } + + @Override + public ComputerDraftPlayer copy() { + return new ComputerDraftPlayer(this); + } + + @Override + public boolean autoLoseGame() { + return true; + } + + @Override + public boolean priority(Game game) { + game.concede(playerId); + return true; + } +} diff --git a/Mage.Server.Plugins/pom.xml b/Mage.Server.Plugins/pom.xml index 55cb409cfc4..21e48d2e945 100644 --- a/Mage.Server.Plugins/pom.xml +++ b/Mage.Server.Plugins/pom.xml @@ -23,6 +23,7 @@ Mage.Player.AIMinimax Mage.Player.AI.MA Mage.Player.AIMCTS + Mage.Player.AI.DraftBot Mage.Player.Human Mage.Tournament.BoosterDraft Mage.Tournament.Sealed diff --git a/Mage.Server/config/config.xml b/Mage.Server/config/config.xml index cc832e984a7..1fa37199651 100644 --- a/Mage.Server/config/config.xml +++ b/Mage.Server/config/config.xml @@ -7,6 +7,7 @@ + diff --git a/Mage.Server/plugins/mage-player-ai-draft-bot.jar b/Mage.Server/plugins/mage-player-ai-draft-bot.jar new file mode 100644 index 00000000000..add4c0bafd0 Binary files /dev/null and b/Mage.Server/plugins/mage-player-ai-draft-bot.jar differ diff --git a/Mage.Server/plugins/mage-player-ai-ma.jar b/Mage.Server/plugins/mage-player-ai-ma.jar index cac60a4d375..7880ac081c4 100644 Binary files a/Mage.Server/plugins/mage-player-ai-ma.jar and b/Mage.Server/plugins/mage-player-ai-ma.jar differ diff --git a/Mage.Server/plugins/mage-player-ai.jar b/Mage.Server/plugins/mage-player-ai.jar index 6954c948f06..45a6a304693 100644 Binary files a/Mage.Server/plugins/mage-player-ai.jar and b/Mage.Server/plugins/mage-player-ai.jar differ diff --git a/Mage.Server/plugins/mage-player-aimcts.jar b/Mage.Server/plugins/mage-player-aimcts.jar index c586e569bfd..1d820de797d 100644 Binary files a/Mage.Server/plugins/mage-player-aimcts.jar and b/Mage.Server/plugins/mage-player-aimcts.jar differ diff --git a/Mage.Server/plugins/mage-player-aiminimax.jar b/Mage.Server/plugins/mage-player-aiminimax.jar index ab1d34404ca..eac2decfb2e 100644 Binary files a/Mage.Server/plugins/mage-player-aiminimax.jar and b/Mage.Server/plugins/mage-player-aiminimax.jar differ diff --git a/Mage.Server/plugins/mage-player-human.jar b/Mage.Server/plugins/mage-player-human.jar index ae701fbf9ca..fa972867142 100644 Binary files a/Mage.Server/plugins/mage-player-human.jar and b/Mage.Server/plugins/mage-player-human.jar differ diff --git a/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java b/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java index 17b92646d2a..b38cffdb7fd 100644 --- a/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java +++ b/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java @@ -28,9 +28,6 @@ package mage.server.tournament; -import java.util.Map.Entry; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; import mage.MageException; import mage.cards.decks.Deck; import mage.game.GameException; @@ -52,6 +49,10 @@ import mage.view.ChatMessage.MessageColor; import mage.view.TournamentView; import org.apache.log4j.Logger; +import java.util.Map.Entry; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + /** * * @author BetaSteward_at_googlemail.com diff --git a/Mage/src/mage/game/tournament/TournamentImpl.java b/Mage/src/mage/game/tournament/TournamentImpl.java index ad25b506a2c..c92b799a268 100644 --- a/Mage/src/mage/game/tournament/TournamentImpl.java +++ b/Mage/src/mage/game/tournament/TournamentImpl.java @@ -28,27 +28,18 @@ package mage.game.tournament; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.UUID; -import java.util.concurrent.CopyOnWriteArrayList; import mage.cards.Card; import mage.cards.ExpansionSet; import mage.cards.decks.Deck; -import mage.game.events.Listener; -import mage.game.events.PlayerQueryEvent; -import mage.game.events.PlayerQueryEventSource; -import mage.game.events.TableEvent; +import mage.game.events.*; import mage.game.events.TableEvent.EventType; -import mage.game.events.TableEventSource; import mage.game.match.Match; import mage.players.Player; import org.apache.log4j.Logger; +import java.util.*; +import java.util.concurrent.CopyOnWriteArrayList; + /** * * @author BetaSteward_at_googlemail.com @@ -177,6 +168,7 @@ public abstract class TournamentImpl implements Tournament { protected void updateResults() { for (TournamentPlayer player: players.values()) { player.setResults(""); + player.setPoints(0); } for (Round round: rounds) { for (TournamentPairing pair: round.getPairs()) { @@ -193,6 +185,18 @@ public abstract class TournamentImpl implements Tournament { sb2.append("-").append(match.getPlayer(player1Id).getWins()).append(") "); players.get(player1Id).setResults(sb1.toString()); players.get(player2Id).setResults(sb2.toString()); + if (match.getPlayer(player1Id).getWins() > match.getPlayer(player2Id).getWins()) { + int points = players.get(player1Id).getPoints(); + players.get(player1Id).setPoints(points + 3); + } else if (match.getPlayer(player1Id).getWins() < match.getPlayer(player2Id).getWins()) { + int points = players.get(player2Id).getPoints(); + players.get(player2Id).setPoints(points + 3); + } else { + int points = players.get(player1Id).getPoints(); + players.get(player1Id).setPoints(points + 1); + points = players.get(player2Id).getPoints(); + players.get(player2Id).setPoints(points + 1); + } } } diff --git a/Mage/src/mage/game/tournament/TournamentPairing.java b/Mage/src/mage/game/tournament/TournamentPairing.java index b1c76da2d0d..c2976dccb92 100644 --- a/Mage/src/mage/game/tournament/TournamentPairing.java +++ b/Mage/src/mage/game/tournament/TournamentPairing.java @@ -28,9 +28,10 @@ package mage.game.tournament; -import java.util.UUID; import mage.game.match.Match; +import java.util.UUID; + /** * * @author BetaSteward_at_googlemail.com @@ -75,4 +76,14 @@ public class TournamentPairing { player2.setEliminated(); } } + + public void eliminateComputer() { + if (!player1.getPlayer().isHuman()) { + player1.setEliminated(); + return; + } + if (!player2.getPlayer().isHuman()) { + player2.setEliminated(); + } + } } diff --git a/Mage/src/mage/game/tournament/TournamentSingleElimination.java b/Mage/src/mage/game/tournament/TournamentSingleElimination.java index a2b35c3b7ed..ed3437c8efb 100644 --- a/Mage/src/mage/game/tournament/TournamentSingleElimination.java +++ b/Mage/src/mage/game/tournament/TournamentSingleElimination.java @@ -28,6 +28,9 @@ package mage.game.tournament; +import java.util.Map; +import java.util.UUID; + /** * * @author BetaSteward_at_googlemail.com @@ -40,6 +43,14 @@ public abstract class TournamentSingleElimination extends TournamentImpl { @Override protected void runTournament() { + + for (Map.Entry entry: players.entrySet()) { + if (entry.getValue().getPlayer().autoLoseGame()) { + entry.getValue().setEliminated(); + entry.getValue().setResults("Auto Eliminated"); + } + } + while (this.getActivePlayers().size() > 1) { Round round = createRoundRandom(); playRound(round); diff --git a/Mage/src/mage/players/Player.java b/Mage/src/mage/players/Player.java index 4151d2f0f0f..60a79475deb 100644 --- a/Mage/src/mage/players/Player.java +++ b/Mage/src/mage/players/Player.java @@ -110,6 +110,7 @@ public interface Player extends MageItem, Copyable { public UserData getUserData(); public void setUserData(UserData userData); public boolean canLose(Game game); + public boolean autoLoseGame(); /** * Returns a set of players which turns under you control. diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index 5a39ee7a619..89a69954020 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -1440,4 +1440,9 @@ public abstract class PlayerImpl> implements Player, Ser public void setCanPaySacrificeCost(boolean canPaySacrificeCost) { this.canPaySacrificeCost = canPaySacrificeCost; } + + @Override + public boolean autoLoseGame() { + return false; + } }