diff --git a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java index 4c50b6c8b34..e473497f6d1 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java +++ b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java @@ -560,7 +560,7 @@ public class TablesPanel extends javax.swing.JPanel { formatFilterList.add(RowFilter.regexFilter("^Constructed - Vintage", TableTableModel.COLUMN_DECK_TYPE)); } if (btnFormatCommander.isSelected()) { - formatFilterList.add(RowFilter.regexFilter("^Commander|^Duel Commander|^Penny Dreadful Commander", TableTableModel.COLUMN_DECK_TYPE)); + formatFilterList.add(RowFilter.regexFilter("^Commander|^Duel Commander|^Penny Dreadful Commander|^Freeform Commander", TableTableModel.COLUMN_DECK_TYPE)); } if (btnFormatTinyLeader.isSelected()) { formatFilterList.add(RowFilter.regexFilter("^Tiny", TableTableModel.COLUMN_DECK_TYPE)); diff --git a/Mage.Client/src/main/java/org/mage/card/arcane/CardRendererUtils.java b/Mage.Client/src/main/java/org/mage/card/arcane/CardRendererUtils.java index e7a421def3a..eca040234fb 100644 --- a/Mage.Client/src/main/java/org/mage/card/arcane/CardRendererUtils.java +++ b/Mage.Client/src/main/java/org/mage/card/arcane/CardRendererUtils.java @@ -74,9 +74,9 @@ public final class CardRendererUtils { int b = c.getBlue(); int alpha = c.getAlpha(); - int plus_r = (int) ((255 - r) / 2); - int plus_g = (int) ((255 - g) / 2); - int plus_b = (int) ((255 - b) / 2); + int plus_r = (int) (Math.min (255 - r, r) / 2); + int plus_g = (int) (Math.min (255 - g, g) / 2); + int plus_b = (int) (Math.min (255 - b, b) / 2); return new Color(r - plus_r, g - plus_g, diff --git a/Mage.Client/src/main/java/org/mage/card/arcane/ModernCardRenderer.java b/Mage.Client/src/main/java/org/mage/card/arcane/ModernCardRenderer.java index e603ac6d1e2..312d232683c 100644 --- a/Mage.Client/src/main/java/org/mage/card/arcane/ModernCardRenderer.java +++ b/Mage.Client/src/main/java/org/mage/card/arcane/ModernCardRenderer.java @@ -106,7 +106,7 @@ public class ModernCardRenderer extends CardRenderer { public static final Color BORDER_RED = new Color(201, 71, 58); public static final Color BORDER_GREEN = new Color(4, 136, 69); public static final Color BORDER_GOLD = new Color(255, 228, 124); - public static final Color BORDER_COLORLESS = new Color(238, 242, 242); + public static final Color BORDER_COLORLESS = new Color(208, 212, 212); public static final Color BORDER_LAND = new Color(190, 173, 115); public static final Color BOX_WHITE = new Color(244, 245, 239); @@ -115,7 +115,7 @@ public class ModernCardRenderer extends CardRenderer { public static final Color BOX_RED = new Color(246, 208, 185); public static final Color BOX_GREEN = new Color(205, 221, 213); public static final Color BOX_GOLD = new Color(223, 195, 136); - public static final Color BOX_COLORLESS = new Color(220, 228, 232); + public static final Color BOX_COLORLESS = new Color(200, 208, 212); public static final Color BOX_LAND = new Color(220, 215, 213); public static final Color BOX_INVENTION = new Color(209, 97, 33); public static final Color BOX_VEHICLE = new Color(155, 105, 60); @@ -128,21 +128,21 @@ public class ModernCardRenderer extends CardRenderer { public static final Color BOX_GOLD_NIGHT = new Color(171, 134, 70); public static final Color BOX_COLORLESS_NIGHT = new Color(118, 147, 158); - public static final Color LAND_TEXTBOX_WHITE = new Color(248, 232, 188, 244); - public static final Color LAND_TEXTBOX_BLUE = new Color(189, 212, 236, 244); - public static final Color LAND_TEXTBOX_BLACK = new Color(174, 164, 162, 244); - public static final Color LAND_TEXTBOX_RED = new Color(242, 168, 133, 244); - public static final Color LAND_TEXTBOX_GREEN = new Color(198, 220, 198, 244); - public static final Color LAND_TEXTBOX_GOLD = new Color(236, 229, 207, 244); + public static final Color LAND_TEXTBOX_WHITE = new Color(248, 232, 188, 234); + public static final Color LAND_TEXTBOX_BLUE = new Color(189, 212, 236, 234); + public static final Color LAND_TEXTBOX_BLACK = new Color(174, 164, 162, 234); + public static final Color LAND_TEXTBOX_RED = new Color(242, 168, 133, 234); + public static final Color LAND_TEXTBOX_GREEN = new Color(198, 220, 198, 234); + public static final Color LAND_TEXTBOX_GOLD = new Color(236, 229, 207, 234); - public static final Color TEXTBOX_WHITE = new Color(252, 249, 244, 244); - public static final Color TEXTBOX_BLUE = new Color(229, 238, 247, 244); - public static final Color TEXTBOX_BLACK = new Color(241, 241, 240, 244); - public static final Color TEXTBOX_RED = new Color(243, 224, 217, 244); - public static final Color TEXTBOX_GREEN = new Color(217, 232, 223, 244); - public static final Color TEXTBOX_GOLD = new Color(240, 234, 209, 244); - public static final Color TEXTBOX_COLORLESS = new Color(219, 229, 233, 244); - public static final Color TEXTBOX_LAND = new Color(218, 214, 212, 244); + public static final Color TEXTBOX_WHITE = new Color(252, 249, 244, 234); + public static final Color TEXTBOX_BLUE = new Color(229, 238, 247, 234); + public static final Color TEXTBOX_BLACK = new Color(241, 241, 240, 234); + public static final Color TEXTBOX_RED = new Color(243, 224, 217, 234); + public static final Color TEXTBOX_GREEN = new Color(217, 232, 223, 234); + public static final Color TEXTBOX_GOLD = new Color(240, 234, 209, 234); + public static final Color TEXTBOX_COLORLESS = new Color(199, 209, 213, 234); + public static final Color TEXTBOX_LAND = new Color(218, 214, 212, 234); public static final Color ERROR_COLOR = new Color(255, 0, 255); diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/FreeformCommander.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/FreeformCommander.java new file mode 100644 index 00000000000..570be2a80e4 --- /dev/null +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/FreeformCommander.java @@ -0,0 +1,152 @@ +/* + * Copyright 2011 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.deck; + +import java.util.*; +import java.util.Map.Entry; +import mage.abilities.common.CanBeYourCommanderAbility; +import mage.abilities.keyword.PartnerAbility; +import mage.cards.Card; +import mage.cards.ExpansionSet; +import mage.cards.Sets; +import mage.cards.decks.Constructed; +import mage.cards.decks.Deck; +import mage.constants.SetType; +import mage.filter.FilterMana; + +/** + * + * @author spjspj + */ +public class FreeformCommander extends Constructed { + + protected List bannedCommander = new ArrayList<>(); + private static final Map pdAllowed = new HashMap<>(); + private static boolean setupAllowed = false; + + public FreeformCommander() { + this("Freeform Commander"); + for (ExpansionSet set : Sets.getInstance().values()) { + setCodes.add(set.getCode()); + } + } + + public FreeformCommander(String name) { + super(name); + } + + @Override + public boolean validate(Deck deck) { + boolean valid = true; + FilterMana colorIdentity = new FilterMana(); + + if (deck.getCards().size() + deck.getSideboard().size() != 100) { + invalid.put("Deck", "Must contain 100 cards: has " + (deck.getCards().size() + deck.getSideboard().size()) + " cards"); + valid = false; + } + + List basicLandNames = new ArrayList<>(Arrays.asList("Forest", "Island", "Mountain", "Swamp", "Plains", "Wastes")); + Map counts = new HashMap<>(); + countCards(counts, deck.getCards()); + countCards(counts, deck.getSideboard()); + + for (Map.Entry entry : counts.entrySet()) { + if (entry.getValue() > 1) { + if (!basicLandNames.contains(entry.getKey())) { + invalid.put(entry.getKey(), "Too many: " + entry.getValue()); + valid = false; + } + } + } + + generateFreeformHash(); + + if (deck.getSideboard().size() < 1 || deck.getSideboard().size() > 2) { + invalid.put("Commander", "Sideboard must contain only the commander(s)"); + valid = false; + } else { + for (Card commander : deck.getSideboard()) { + if (!(commander.isCreature() || + commander.isLegendary())) { + invalid.put("Commander", "For Freeform Commander, the commander must be a creature or be legendary. Yours was: " + commander.getName()); + valid = false; + } + if (deck.getSideboard().size() == 2 && !commander.getAbilities().contains(PartnerAbility.getInstance())) { + invalid.put("Commander", "Commander without Partner (" + commander.getName() + ')'); + valid = false; + } + FilterMana commanderColor = commander.getColorIdentity(); + if (commanderColor.isWhite()) { + colorIdentity.setWhite(true); + } + if (commanderColor.isBlue()) { + colorIdentity.setBlue(true); + } + if (commanderColor.isBlack()) { + colorIdentity.setBlack(true); + } + if (commanderColor.isRed()) { + colorIdentity.setRed(true); + } + if (commanderColor.isGreen()) { + colorIdentity.setGreen(true); + } + } + } + + for (Card card : deck.getCards()) { + if (!cardHasValidColor(colorIdentity, card)) { + invalid.put(card.getName(), "Invalid color (" + colorIdentity.toString() + ')'); + valid = false; + } + } + + for (Card card : deck.getSideboard()) { + if (!isSetAllowed(card.getExpansionSetCode())) { + if (!legalSets(card)) { + invalid.put(card.getName(), "Not allowed Set: " + card.getExpansionSetCode()); + valid = false; + } + } + } + return valid; + } + + public boolean cardHasValidColor(FilterMana commander, Card card) { + FilterMana cardColor = card.getColorIdentity(); + return !(cardColor.isBlack() && !commander.isBlack() + || cardColor.isBlue() && !commander.isBlue() + || cardColor.isGreen() && !commander.isGreen() + || cardColor.isRed() && !commander.isRed() + || cardColor.isWhite() && !commander.isWhite()); + } + + public void generateFreeformHash() { + return; + } +} diff --git a/Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/pom.xml b/Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/pom.xml new file mode 100644 index 00000000000..8dc87f89fbf --- /dev/null +++ b/Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/pom.xml @@ -0,0 +1,49 @@ + + + 4.0.0 + + + org.mage + mage-server-plugins + 1.4.26 + + + mage-game-freeformcommanderfreeforall + jar + Mage Game Freeform Commander Free For All + + + + ${project.groupId} + mage + ${project.version} + + + + + src + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.7 + 1.7 + + + + maven-resources-plugin + + UTF-8 + + + + + + mage-game-freeforall + + + + + diff --git a/Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/src/mage/game/FreeformCommanderFreeForAll.java b/Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/src/mage/game/FreeformCommanderFreeForAll.java new file mode 100644 index 00000000000..e6e1aa0607a --- /dev/null +++ b/Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/src/mage/game/FreeformCommanderFreeForAll.java @@ -0,0 +1,77 @@ +/* + * 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.game; + +import java.util.UUID; +import mage.constants.MultiplayerAttackOption; +import mage.constants.RangeOfInfluence; +import mage.game.match.MatchType; + +/** + * + * @author spjspj + */ +public class FreeformCommanderFreeForAll extends GameCommanderImpl { + + private int numPlayers; + + public FreeformCommanderFreeForAll(MultiplayerAttackOption attackOption, RangeOfInfluence range, int freeMulligans, int startLife) { + super(attackOption, range, freeMulligans, startLife); + } + + public FreeformCommanderFreeForAll(final FreeformCommanderFreeForAll game) { + super(game); + this.numPlayers = game.numPlayers; + } + + @Override + protected void init(UUID choosingPlayerId) { + startingPlayerSkipsDraw = false; + super.init(choosingPlayerId); + } + + @Override + public MatchType getGameType() { + return new FreeformCommanderFreeForAllType(); + } + + @Override + public int getNumPlayers() { + return numPlayers; + } + + public void setNumPlayers(int numPlayers) { + this.numPlayers = numPlayers; + } + + @Override + public FreeformCommanderFreeForAll copy() { + return new FreeformCommanderFreeForAll(this); + } +} diff --git a/Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/src/mage/game/FreeformCommanderFreeForAllMatch.java b/Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/src/mage/game/FreeformCommanderFreeForAllMatch.java new file mode 100644 index 00000000000..71f2e242432 --- /dev/null +++ b/Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/src/mage/game/FreeformCommanderFreeForAllMatch.java @@ -0,0 +1,55 @@ +/* + * 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.game; + +import mage.game.match.MatchImpl; +import mage.game.match.MatchOptions; + +/** + * + * @author spjspj + */ +public class FreeformCommanderFreeForAllMatch extends MatchImpl { + + public FreeformCommanderFreeForAllMatch(MatchOptions options) { + super(options); + } + + @Override + public void startGame() throws GameException { + int startLife = 40; + boolean alsoHand = true; + FreeformCommanderFreeForAll game = new FreeformCommanderFreeForAll(options.getAttackOption(), options.getRange(), options.getFreeMulligans(), startLife); + game.setStartMessage(this.createGameStartMessage()); + game.setAlsoHand(alsoHand); + game.setAlsoLibrary(true); + initGame(game); + games.add(game); + } + +} diff --git a/Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/src/mage/game/FreeformCommanderFreeForAllType.java b/Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/src/mage/game/FreeformCommanderFreeForAllType.java new file mode 100644 index 00000000000..27967352def --- /dev/null +++ b/Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/src/mage/game/FreeformCommanderFreeForAllType.java @@ -0,0 +1,58 @@ +/* + * 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.game; + +import mage.game.match.MatchType; + + +/** + * + * @author spjspj + */ +public class FreeformCommanderFreeForAllType extends MatchType { + + public FreeformCommanderFreeForAllType() { + this.name = "Freeform Commander Free For All"; + this.maxPlayers = 10; + this.minPlayers = 3; + this.numTeams = 0; + this.useAttackOption = true; + this.useRange = true; + this.sideboardingAllowed = false; + } + + protected FreeformCommanderFreeForAllType(final FreeformCommanderFreeForAllType matchType) { + super(matchType); + } + + @Override + public FreeformCommanderFreeForAllType copy() { + return new FreeformCommanderFreeForAllType(this); + } +} diff --git a/Mage.Server.Plugins/pom.xml b/Mage.Server.Plugins/pom.xml index 6088bbe80d3..b244b900b5c 100644 --- a/Mage.Server.Plugins/pom.xml +++ b/Mage.Server.Plugins/pom.xml @@ -25,6 +25,7 @@ Mage.Game.TinyLeadersDuel Mage.Game.CanadianHighlanderDuel Mage.Game.PennyDreadfulCommanderFreeForAll + Mage.Game.FreeformCommanderFreeForAll Mage.Game.TwoPlayerDuel Mage.Player.AI Mage.Player.AIMinimax diff --git a/Mage.Server/config/config.xml b/Mage.Server/config/config.xml index ba16d20cc35..bfb4e4436c1 100644 --- a/Mage.Server/config/config.xml +++ b/Mage.Server/config/config.xml @@ -76,6 +76,7 @@ + @@ -151,6 +152,7 @@ + diff --git a/Mage.Server/pom.xml b/Mage.Server/pom.xml index 364875c0818..9a04035ad2c 100644 --- a/Mage.Server/pom.xml +++ b/Mage.Server/pom.xml @@ -154,6 +154,13 @@ ${project.version} runtime + + ${project.groupId} + mage-game-freeformcommanderfreeforall + ${project.version} + runtime + + ${project.groupId} mage-game-momirduel diff --git a/Mage.Server/release/config/config.xml b/Mage.Server/release/config/config.xml index 45b1ed1e2f0..b416ca297a9 100644 --- a/Mage.Server/release/config/config.xml +++ b/Mage.Server/release/config/config.xml @@ -73,6 +73,7 @@ + @@ -147,6 +148,7 @@ +