From 0722276ca4f9a07f9f4fb382f8b2df1ee83529ff Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Fri, 13 Feb 2015 08:39:44 +0100 Subject: [PATCH] * Fixed a bug in calculation of available mana that can be a source of heavy server load. --- .../org/mage/test/utils/ManaOptionsTest.java | 36 +++++++++++++++++++ Mage/src/mage/abilities/mana/ManaOptions.java | 8 ++--- Utils/release/getting_implemented_cards.txt | 3 ++ 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/Mage.Tests/src/test/java/org/mage/test/utils/ManaOptionsTest.java b/Mage.Tests/src/test/java/org/mage/test/utils/ManaOptionsTest.java index 2da335fe1ba..9b1b5e3816b 100644 --- a/Mage.Tests/src/test/java/org/mage/test/utils/ManaOptionsTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/utils/ManaOptionsTest.java @@ -128,6 +128,42 @@ public class ManaOptionsTest extends CardTestPlayerBase { Assert.assertEquals("{W}{W}{Any}{Any}", getManaOption(0, manaOptions)); } + // Crystal Quarry + // {T}: {1} Add to your mana pool. + // {5}, {T}: Add {W}{U}{B}{R}{G} to your mana pool. + @Test + public void testCrystalQuarry() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); + addCard(Zone.BATTLEFIELD, playerA, "Forest", 2); + addCard(Zone.BATTLEFIELD, playerA, "Crystal Quarry", 1); + + setStopAt(1, PhaseStep. UPKEEP); + execute(); + + ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame); + + Assert.assertEquals("mana variations don't fit",1, manaOptions.size()); + Assert.assertEquals("{1}{G}{G}{W}{W}", getManaOption(0, manaOptions)); + } + // Crystal Quarry + // {T}: {1} Add to your mana pool. + // {5}, {T}: Add {W}{U}{B}{R}{G} to your mana pool. + @Test + public void testCrystalQuarry2() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); + addCard(Zone.BATTLEFIELD, playerA, "Forest", 3); + addCard(Zone.BATTLEFIELD, playerA, "Crystal Quarry", 1); + + setStopAt(1, PhaseStep. UPKEEP); + execute(); + + ManaOptions manaOptions = playerA.getAvailableManaTest(currentGame); + + Assert.assertEquals("mana variations don't fit",2, manaOptions.size()); + Assert.assertEquals("{1}{G}{G}{G}{W}{W}", getManaOption(0, manaOptions)); + Assert.assertEquals("{R}{G}{U}{W}{B}", getManaOption(1, manaOptions)); + } + private String getManaOption(int index, ManaOptions manaOptions) { if (manaOptions.size() < index + 1) { return ""; diff --git a/Mage/src/mage/abilities/mana/ManaOptions.java b/Mage/src/mage/abilities/mana/ManaOptions.java index 8f792df8044..73b2c4ad52e 100644 --- a/Mage/src/mage/abilities/mana/ManaOptions.java +++ b/Mage/src/mage/abilities/mana/ManaOptions.java @@ -170,11 +170,11 @@ public class ManaOptions extends ArrayList { for (Mana mana: copy) { Mana newMana = new Mana(); newMana.add(mana); - if (mana.contains(ability.getManaCosts().getMana())) { + if (mana.includesMana(ability.getManaCosts().getMana())) { newMana.subtractCost(ability.getManaCosts().getMana()); newMana.add(netMana); - } - this.add(newMana); + this.add(newMana); + } } } } @@ -228,7 +228,7 @@ public class ManaOptions extends ArrayList { boolean repeatable = false; if (addMana.getAny() == 1 && addMana.count() == 1 && onlyManaCosts) { // deactivated because it does cause loops TODO: Find reason - //repeatable = true; // only replace to any with mana costs only will be repeated if able + repeatable = true; // only replace to any with mana costs only will be repeated if able } for (Mana mana: this) { while (mana.includesMana(cost)) { diff --git a/Utils/release/getting_implemented_cards.txt b/Utils/release/getting_implemented_cards.txt index d9cd8366c83..1049d937e6f 100644 --- a/Utils/release/getting_implemented_cards.txt +++ b/Utils/release/getting_implemented_cards.txt @@ -96,6 +96,9 @@ git log e0b17eacc7b3abff4f6a6e878c01ebfab577df9e..HEAD --diff-filter=A --name-st since 1.3.0-2015-02-07v3 git log ba1fb775b2efd63d4de60786ab9d7857e00c3a57..HEAD --diff-filter=A --name-status | sed -ne "s/^A[^u]Mage.Sets\/src\/mage\/sets\///p" | sort > added_cards.txt +since 1.3.0-2015-02-07v4 +git log 7d7afb60d6fbe6d3f15a8fae9af147df3d3f31c6..HEAD --diff-filter=A --name-status | sed -ne "s/^A[^u]Mage.Sets\/src\/mage\/sets\///p" | sort > added_cards.txt + 3. Copy added_cards.txt to trunk\Utils folder 4. Run script: