* Fixed a bug in calculation of available mana that can be a source of heavy server load.

This commit is contained in:
LevelX2 2015-02-13 08:39:44 +01:00
parent fcd1d89137
commit 0722276ca4
3 changed files with 43 additions and 4 deletions

View file

@ -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 "";

View file

@ -170,11 +170,11 @@ public class ManaOptions extends ArrayList<Mana> {
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<Mana> {
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)) {

View file

@ -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: