From f55abfa576b6784119bb776667aede47d994b1ff Mon Sep 17 00:00:00 2001 From: swordshine Date: Sun, 22 Dec 2013 13:03:31 +0000 Subject: [PATCH] - Added Tariff --- .gitattributes | 1 + forge-gui/res/cardsfolder/t/tariff.txt | 9 +++++++++ .../src/main/java/forge/game/ability/AbilityUtils.java | 8 ++++++++ forge-gui/src/main/java/forge/game/card/Card.java | 9 ++++++++- 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 forge-gui/res/cardsfolder/t/tariff.txt diff --git a/.gitattributes b/.gitattributes index fd2ac2f2e9b..7351e7d26e5 100644 --- a/.gitattributes +++ b/.gitattributes @@ -11634,6 +11634,7 @@ forge-gui/res/cardsfolder/t/tar_pit_warrior.txt svneol=native#text/plain forge-gui/res/cardsfolder/t/tar_pitcher.txt svneol=native#text/plain forge-gui/res/cardsfolder/t/tarfire.txt svneol=native#text/plain forge-gui/res/cardsfolder/t/tariel_reckoner_of_souls.txt -text +forge-gui/res/cardsfolder/t/tariff.txt -text forge-gui/res/cardsfolder/t/tarmogoyf.txt svneol=native#text/plain forge-gui/res/cardsfolder/t/tarnished_citadel.txt svneol=native#text/plain forge-gui/res/cardsfolder/t/tarox_bladewing.txt svneol=native#text/plain diff --git a/forge-gui/res/cardsfolder/t/tariff.txt b/forge-gui/res/cardsfolder/t/tariff.txt new file mode 100644 index 00000000000..ee852293435 --- /dev/null +++ b/forge-gui/res/cardsfolder/t/tariff.txt @@ -0,0 +1,9 @@ +Name:Tariff +ManaCost:1 W +Types:Sorcery +A:SP$ RepeatEach | Cost$ 1 W | RepeatPlayers$ Player | RepeatSubAbility$ DBChooseCard | SpellDescription$ Each player sacrifices the creature he or she controls with the highest converted mana cost unless he or she pays that creature's mana cost. If two or more creatures a player controls are tied for highest cost, that player chooses one. +SVar:DBChooseCard:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Creature.greatestCMCControlledByRemembered | Mandatory$ True | SubAbility$ DBSac +SVar:DBSac:DB$ Sacrifice | Defined$ Player.IsRemembered | SacValid$ Card.ChosenCard | SacMessage$ the creature with the highest converted mana cost | UnlessCost$ ChosenManaCost | UnlessPayer$ Player.IsRemembered +SVar:Picture:http://www.wizards.com/global/images/magic/general/tariff.jpg +SVar:RemAIDeck:True +Oracle:Each player sacrifices the creature he or she controls with the highest converted mana cost unless he or she pays that creature's mana cost. If two or more creatures a player controls are tied for highest cost, that player chooses one. diff --git a/forge-gui/src/main/java/forge/game/ability/AbilityUtils.java b/forge-gui/src/main/java/forge/game/ability/AbilityUtils.java index cf1230b55b8..8a87f667f12 100644 --- a/forge-gui/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-gui/src/main/java/forge/game/ability/AbilityUtils.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import forge.card.MagicColor; +import forge.card.mana.ManaCost; import forge.card.mana.ManaCostShard; import org.apache.commons.lang3.StringUtils; @@ -1205,6 +1206,13 @@ public class AbilityUtils { if (unlessCost.equals("CardManaCost")) { cost = new Cost(source.getManaCost(), true); } + else if (unlessCost.equals("ChosenManaCost")) { + if (source.getChosenCard().isEmpty()) { + cost = new Cost(ManaCost.ZERO, true); + } else { + cost = new Cost(source.getChosenCard().get(0).getManaCost(), true); + } + } else if (unlessCost.equals("RememberedCostMinus2")) { if (source.getRemembered().isEmpty() || !(source.getRemembered().get(0) instanceof Card)) { sa.resolve(); diff --git a/forge-gui/src/main/java/forge/game/card/Card.java b/forge-gui/src/main/java/forge/game/card/Card.java index ddce35304c3..3ff40893426 100644 --- a/forge-gui/src/main/java/forge/game/card/Card.java +++ b/forge-gui/src/main/java/forge/game/card/Card.java @@ -6268,7 +6268,14 @@ public class Card extends GameEntity implements Comparable { } } } else if (property.startsWith("greatestCMC")) { - final List list = CardLists.filter(game.getCardsIn(ZoneType.Battlefield), Presets.CREATURES); + List list = CardLists.filter(game.getCardsIn(ZoneType.Battlefield), Presets.CREATURES); + if (property.contains("ControlledBy")) { + List p = AbilityUtils.getDefinedPlayers(source, property.split("ControlledBy")[1], null); + list = CardLists.filterControlledBy(list, p); + if (!list.contains(this)) { + return false; + } + } for (final Card crd : list) { if (crd.isSplitCard()) { if (crd.getCMC(Card.SplitCMCMode.LeftSplitCMC) > this.getCMC() || crd.getCMC(Card.SplitCMCMode.RightSplitCMC) > this.getCMC()) {