Merge remote-tracking branch 'upstream/master' into deck-importer-decks-file-format

This commit is contained in:
leriomaggio
2021-09-10 16:10:13 +01:00
26 changed files with 205 additions and 71 deletions

View File

@@ -149,6 +149,19 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
return !StringUtils.isNumeric(s);
}
private static CardRequest fromPreferredArtEntry(String preferredArt, boolean isFoil){
// Preferred Art Entry are supposed to be cardName|setCode|artIndex only
String[] info = TextUtil.split(preferredArt, NameSetSeparator);
if (info.length != 3)
return null;
try {
String cardName = info[0];
String setCode = info[1];
int artIndex = Integer.parseInt(info[2]);
return new CardRequest(cardName, setCode, artIndex, isFoil, IPaperCard.NO_COLLECTOR_NUMBER);
} catch (NumberFormatException ex){ return null; }
}
public static CardRequest fromString(String reqInfo) {
if (reqInfo == null)
return null;
@@ -180,21 +193,25 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
cardName = cardName.substring(0, cardName.length() - foilSuffix.length());
isFoil = true;
}
String preferredArt = artPrefs.get(cardName);
int artIndex = artPos > 0 ? Integer.parseInt(info[artPos]) : IPaperCard.NO_ART_INDEX; // default: no art index
if (preferredArt != null) { //account for preferred art if needed
System.err.println("I AM HERE - DECIDE WHAT TO DO");
}
String collectorNumber = cNrPos > 0 ? info[cNrPos].substring(1, info[cNrPos].length() - 1) : IPaperCard.NO_COLLECTOR_NUMBER;
String setName = setPos > 0 ? info[setPos] : null;
if (setName != null && setName.equals(CardEdition.UNKNOWN.getCode())) { // ???
setName = null;
String setCode = setPos > 0 ? info[setPos] : null;
if (setCode != null && setCode.equals(CardEdition.UNKNOWN.getCode())) { // ???
setCode = null;
}
if (setCode == null) {
String preferredArt = artPrefs.get(cardName);
if (preferredArt != null) { //account for preferred art if needed
CardRequest request = fromPreferredArtEntry(preferredArt, isFoil);
if (request != null) // otherwise, simply discard it and go on.
return request;
System.err.println(String.format("[LOG]: Faulty Entry in Preferred Art for Card %s - Please check!", cardName));
}
}
// finally, check whether any between artIndex and CollectorNumber has been set
if (collectorNumber.equals(IPaperCard.NO_COLLECTOR_NUMBER) && artIndex == IPaperCard.NO_ART_INDEX)
artIndex = IPaperCard.DEFAULT_ART_INDEX;
return new CardRequest(cardName, setName, artIndex, isFoil, collectorNumber);
return new CardRequest(cardName, setCode, artIndex, isFoil, collectorNumber);
}
}
@@ -374,11 +391,11 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
return pc;
}
public boolean setPreferredArt(String cardName, String preferredArt) {
CardRequest request = CardRequest.fromString(cardName + NameSetSeparator + preferredArt);
PaperCard pc = tryGetCard(request);
public boolean setPreferredArt(String cardName, String setCode, int artIndex) {
String cardRequestForPreferredArt = CardRequest.compose(cardName, setCode, artIndex);
PaperCard pc = this.getCard(cardRequestForPreferredArt);
if (pc != null) {
artPrefs.put(cardName, preferredArt);
artPrefs.put(cardName, cardRequestForPreferredArt);
uniqueCardsByName.put(cardName, pc);
return true;
}

View File

@@ -221,23 +221,23 @@ public final class GameActionUtil {
continue;
}
final SpellAbility flashback = sa.copy(activator);
flashback.setAlternativeCost(AlternativeCost.Flashback);
flashback.getRestrictions().setZone(ZoneType.Graveyard);
SpellAbility flashback = null;
// there is a flashback cost (and not the cards cost)
if (keyword.contains(":")) {
if (keyword.contains(":")) { // K:Flashback:Cost:ExtraParams:ExtraDescription
final String[] k = keyword.split(":");
flashback.setPayCosts(new Cost(k[1], false));
flashback = sa.copyWithManaCostReplaced(activator, new Cost(k[1], false));
String extraParams = k.length > 2 ? k[2] : "";
if (!extraParams.isEmpty()) {
Map<String, String> extraParamMap =
Maps.newHashMap(AbilityFactory.getMapParams(extraParams));
for (Map.Entry<String, String> param : extraParamMap.entrySet()) {
for (Map.Entry<String, String> param : AbilityFactory.getMapParams(extraParams).entrySet()) {
flashback.putParam(param.getKey(), param.getValue());
}
}
} else { // same cost as original (e.g. Otaria plane)
flashback = sa.copy(activator);
}
flashback.setAlternativeCost(AlternativeCost.Flashback);
flashback.getRestrictions().setZone(ZoneType.Graveyard);
alternatives.add(flashback);
} else if (keyword.startsWith("Foretell")) {
// Foretell cast only from Exile

View File

@@ -2169,40 +2169,25 @@ public class CardFactoryUtil {
StringBuilder sb = new StringBuilder();
sb.append("Event$ Moved | ValidCard$ Card.Self | Origin$ Stack | ExcludeDestination$ Exile ");
sb.append("| ValidStackSa$ Spell.Flashback | Description$ Flashback");
String reminderInsert = "";
// K:Flashback:Cost:ExtraParams:ExtraDescription:cost for display:reminder text insert
if (keyword.contains(":")) {
if (keyword.contains(":")) { // K:Flashback:Cost:ExtraParams:ExtraDescription
final String[] k = keyword.split(":");
final Cost cost = new Cost(k[1], false);
sb.append(cost.isOnlyManaCost() ? " " : "");
sb.append(cost.isOnlyManaCost() ? " " : "").append(cost.toSimpleString());
sb.append(cost.isOnlyManaCost() ? "" : ".");
String prettyCost = k.length > 4 ? k[4] : "";
if (!prettyCost.isEmpty()) {
sb.append(prettyCost);
} else {
sb.append(cost.toSimpleString());
}
if (!cost.isOnlyManaCost()) {
sb.append(".");
}
String extraDesc = k.length > 3 ? k[3] : "";
if (!extraDesc.isEmpty()) {
if (!cost.isOnlyManaCost()) {
sb.append(" ").append(extraDesc);
} else {
sb.append(". ").append(extraDesc);
}
if (!extraDesc.isEmpty()) { // extra params added in GameActionUtil, desc added here
sb.append(cost.isOnlyManaCost() ? ". " : " ").append(extraDesc);
}
reminderInsert = k.length > 5 ? k[5] : "";
}
sb.append(" (");
if (!reminderInsert.isEmpty()) {
if (host.hasStartOfKeyword("AlternateAdditionalCost")
|| !host.getFirstSpellAbility().getPayCosts().isOnlyManaCost()) {
String reminder = inst.getReminderText();
sb.append(reminder, 0, 65).append(" ");
sb.append(reminderInsert).append(reminder, 65, 81);
sb.append(reminder, 0, 65).append(" and any additional costs");
sb.append(reminder, 65, 81);
} else {
sb.append(inst.getReminderText());
}

View File

@@ -2193,6 +2193,58 @@ public class CardDbTestCase extends ForgeCardMockTestCase {
assertEquals(counterSpellCard.getName(), cardNameCounterspell);
}
@Test void prepareTestCaseForSetPreferredArtTest(){
String setCode = this.editionsCounterspell[0];
int artIndex = 4; // non-existing
String cardRequest = CardDb.CardRequest.compose(this.cardNameCounterspell, setCode, artIndex);
PaperCard nonExistingCounterSpell = this.cardDb.getCard(cardRequest);
assertNull(nonExistingCounterSpell);
}
@Test void setPreferredArtForCard(){
String cardName = "Mountain";
String setCode = "3ED";
int artIndex = 5;
assertFalse(this.cardDb.setPreferredArt(cardName, setCode, artIndex));
assertTrue(this.cardDb.setPreferredArt(cardName, setCode, 1));
}
@Test void testThatWithCardPreferenceSetAndNoRequestForSpecificEditionAlwaysReturnsPreferredArt(){
String cardRequest = CardDb.CardRequest.compose("Island", "MIR", 3);
PaperCard islandCard = this.cardDb.getCard(cardRequest);
assertNotNull(islandCard);
assertEquals(islandCard.getName(), "Island");
assertEquals(islandCard.getEdition(), "MIR");
assertEquals(islandCard.getArtIndex(), 3);
// now set preferred art
assertTrue(this.cardDb.setPreferredArt("Island", "MIR", 3));
// Now requesting for a different Island
cardRequest = CardDb.CardRequest.compose("Island", "TMP", 1);
islandCard = this.cardDb.getCard(cardRequest);
assertNotNull(islandCard);
// Now card should be from the preferred art no matter the request
assertEquals(islandCard.getName(), "Island");
assertEquals(islandCard.getEdition(), "TMP");
assertEquals(islandCard.getArtIndex(), 1);
// Now just asking for an Island
islandCard = this.cardDb.getCard("Island");
assertNotNull(islandCard);
assertEquals(islandCard.getName(), "Island");
assertEquals(islandCard.getEdition(), "MIR");
assertEquals(islandCard.getArtIndex(), 3);
// Now asking for a foiled island - I will get the one from preferred art - but foiled
cardRequest = CardDb.CardRequest.compose("Island", true);
islandCard = this.cardDb.getCard(cardRequest);
assertNotNull(islandCard);
assertEquals(islandCard.getName(), "Island");
assertEquals(islandCard.getEdition(), "MIR");
assertEquals(islandCard.getArtIndex(), 3);
assertTrue(islandCard.isFoil());
}
}

View File

@@ -1281,7 +1281,7 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
if (result != card) {
cardManager.replaceAll(card, result);
}
prefs.setPreferredArt(result.getEdition() + CardDb.NameSetSeparator + result.getArtIndex());
prefs.setPreferredArt(result.getEdition(), result.getArtIndex());
CardPreferences.save();
}
}

View File

@@ -4,7 +4,7 @@ Types:Instant
K:Madness:R
K:Cycling:1 R
K:Kicker:2 R
K:Flashback 3 R
K:Flashback:3 R
K:Buyback:4 R
A:SP$ DealDamage | Cost$ 2 R | ValidTgts$ Creature,Player | TgtPrompt$ Select target creature or player | NumDmg$ 2 | SubAbility$ DBToken | SpellDescription$ CARDNAME deals 2 damage to target creature or player.
SVar:DBToken:DB$ Token | TokenAmount$ 1 | TokenScript$ r_1_1_goblin | TokenOwner$ You | Condition$ Kicked | LegacyImage$ r 1 1 goblin ugl | ConditionDescription$ If CARDNAME was kicked, create a 1/1 red Goblin creature token.

View File

@@ -1,6 +1,6 @@
Name:Gaze of Justice
ManaCost:W
Types:Sorcery
K:Flashback:5 W tapXType<3/Creature.White/white creature>
A:SP$ ChangeZone | Cost$ W tapXType<3/Creature.White> | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Exile | CostDesc$ As an additional cost to cast this spell, tap three untapped white creatures you control. | SpellDescription$ Exile target creature.
K:Flashback:5 W
A:SP$ ChangeZone | Cost$ W tapXType<3/Creature.White/white creature> | ValidTgts$ Creature | TgtPrompt$ Select target creature | Origin$ Battlefield | Destination$ Exile | CostDesc$ As an additional cost to cast this spell, tap three untapped white creatures you control. | SpellDescription$ Exile target creature.
Oracle:As an additional cost to cast this spell, tap three untapped white creatures you control.\nExile target creature.\nFlashback {5}{W} (You may cast this card from your graveyard for its flashback cost and any additional costs. Then exile it.)

View File

@@ -5,6 +5,6 @@ PT:3/2
K:Flash
K:Vigilance
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigPhaseOut | TriggerDescription$ When CARDNAME enters the battlefield, any number of other target creatures you control phase out. (Treat them and anything attached to them as though they don't exist until their controller's next turn.)
SVar:TrigPhaseOut:DB$ Phases | ValidTgts$ Creature.Other+YouCtrl | TgtPrompt$ Select target artifact, creature or land | TargetMin$ 0 | TargetMax$ MaxTgts | SelectPrompt$ Choose any number of non-Angel creatures you control | Duration$ UntilHostLeavesPlay
SVar:TrigPhaseOut:DB$ Phases | ValidTgts$ Creature.Other+YouCtrl | TgtPrompt$ Select other creature | TargetMin$ 0 | TargetMax$ MaxTgts | SelectPrompt$ Choose any number of creatures you control | Duration$ UntilHostLeavesPlay
SVar:MaxTgts:Count$Valid Creature.Other+YouCtrl
Oracle:Flash\nVigilance\nWhen Guardian of Faith enters the battlefield, any number of other target creatures you control phase out. (Treat them and anything attached to them as though they don't exist until their controller's next turn.)

View File

@@ -2,7 +2,7 @@ Name:Candlelit Cavalry
ManaCost:4 G
Types:Creature Human Knight
PT:5/5
T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | CheckSVar$ X | SVarCompare$ GE3 | Execute$ TrigPump | TriggerDescription$ Coven At the beginning of combat on your turn, if you control three or more creatures with different powers, CARDNAME gains trample until end of turn.
T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | CheckSVar$ X | SVarCompare$ GE3 | Execute$ TrigPump | TriggerDescription$ Coven At the beginning of combat on your turn, if you control three or more creatures with different powers, CARDNAME gains trample until end of turn.
SVar:TrigPump:DB$ Pump | Defined$ Self | KW$ Trample
SVar:X:Count$DifferentPower_Creature.YouCtrl
Oracle:Coven — At the beginning of combat on your turn, if you control three or more creatures with different powers, Candlelit Cavalry gains trample until end of turn.

View File

@@ -0,0 +1,10 @@
Name:Contortionist Troupe
ManaCost:X G
Types:Creature Human
PT:0/0
K:etbCounter:P1P1:X
T:Mode$ Phase | Phase$ End of Turn | ValidPlayer$ You | CheckSVar$ X | SVarCompare$ GE3 | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Coven — At the beginning of your end step, if you control three or more creatures with different powers, put a +1/+1 counter on target creature you control.
SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature.YouCtrl | TgtPrompt$ Select target creature you control | CounterType$ P1P1 | CounterNum$ 1
SVar:X:Count$DifferentPower_Creature.YouCtrl
DeckHas:Ability$Counters
Oracle:Contortionist Troupe enters the battlefield with X +1/+1 counters on it.\nCoven — At the beginning of your end step, if you control three or more creatures with different powers, put a +1/+1 counter on target creature you control.

View File

@@ -1,11 +1,9 @@
Name:Corpse Cobble
ManaCost:U B
Types:Instant
#Text:As an additional cost to cast this spell, sacrifice any number of creatures.
A:SP$ Token | Cost$ U B Sac<X/Creature/creature> | RememberCostCards$ True | TokenScript$ ub_x_x_zombie_menace | TokenPower$ Y | TokenToughness$ Y | SubAbility$ DBCleanup | SpellDescription$ Create an X/X blue and black Zombie creature token with menace, where X is the total power of the sacrificed creatures.
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
K:Flashback:3 U B Sac<X/Creature>:::{3}{U}{B}:and any additional costs
A:SP$ Token | Cost$ U B Sac<X/Creature/creature> | TokenScript$ ub_x_x_zombie_menace | TokenPower$ Y | TokenToughness$ Y | SpellDescription$ Create an X/X blue and black Zombie creature token with menace, where X is the total power of the sacrificed creatures.
K:Flashback:3 U B
SVar:X:Count$xPaid
SVar:Y:RememberedLKI$CardPower
SVar:Y:Sacrificed$CardPower
DeckHas:Ability$Sacrifice & Ability$Token
Oracle:As an additional cost to cast this spell, sacrifice any number of creatures.\nCreate an X/X blue and black Zombie creature token with menace, where X is the total power of the sacrificed creatures.\nFlashback {3}{U}{B} (You may cast this card from your graveyard for its flashback cost and any additional costs. Then exile it.)

View File

@@ -0,0 +1,12 @@
Name:Curse of Silence
ManaCost:W
Types:Enchantment Aura Curse
K:Enchant player
A:SP$ Attach | ValidTgts$ Player | AILogic$ Curse
K:ETBReplacement:Other:DBNameCard
SVar:DBNameCard:DB$ NameCard | Defined$ You | SpellDescription$ As CARDNAME enters the battlefield, choose a card name.
S:Mode$ RaiseCost | EffectZone$ Battlefield | ValidCard$ Card.NamedCard | Type$ Spell | Activator$ Player.EnchantedBy | Amount$ 2 | Description$ Spells with the chosen name enchanted player casts cost {2} more to cast.
T:Mode$ SpellCast | ValidCard$ Card.NamedCard | ValidActivatingPlayer$ Player.EnchantedBy | Execute$ TrigDraw | TriggerZones$ Battlefield | TriggerDescription$ Whenever enchanted player casts a spell with the chosen name, you may sacrifice Curse of Silence. If you do, draw a card.
SVar:TrigDraw:AB$ Draw | Cost$ Sac<1/CARDNAME> | NumCards$ 1
DeckHas:Ability$Sacrifice
Oracle:Enchant player\nAs Curse of Silence enters the battlefield, choose a card name.\nSpells with the chosen name enchanted player casts cost {2} more to cast.\nWhenever enchanted player casts a spell with the chosen name, you may sacrifice Curse of Silence. If you do, draw a card.

View File

@@ -0,0 +1,26 @@
Name:Devoted Grafkeeper
ManaCost:W U
Types:Creature Human Peasant
PT:2/1
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigMill | TriggerDescription$ When CARDNAME enters the battlefield, mill two cards.
SVar:TrigMill:DB$ Mill | NumCards$ 2 | Defined$ You
T:Mode$ SpellCast | ValidCard$ Card.wasCastFromGraveyard | ValidActivatingPlayer$ You | Execute$ TrigTap | TriggerZones$ Battlefield | TriggerDescription$ Whenever you cast a spell from your graveyard, tap target creature you don't control.
SVar:TrigTap:DB$ Tap | ValidTgts$ Creature.YouDontCtrl | TgtPrompt$ Select target creature you don't control
DeckHas:Ability$Mill
DeckHints:Ability$Graveyard
K:Disturb:1 W U
AlternateMode:DoubleFaced
Oracle:When Devoted Grafkeeper enters the battlefield, mill two cards.\nWhenever you cast a spell from your graveyard, tap target creature you don't control.\nDisturb {1}{W}{U} (You may cast this card from your graveyard transformed for its disturb cost.)
ALTERNATE
Name:Departed Soulkeeper
ManaCost:no cost
Colors:white,blue
Types:Creature Spirit
PT:3/1
K:Flying
S:Mode$ CantBlockBy | ValidAttacker$ Creature.withoutFlying | ValidBlocker$ Creature.Self | Description$ CARDNAME can block only creatures with flying.
R:Event$ Moved | ValidCard$ Card.Self | Destination$ Graveyard | ReplaceWith$ Exile | Description$ If CARDNAME would be put into a graveyard from anywhere, exile it instead.
SVar:Exile:DB$ ChangeZone | Hidden$ True | Origin$ All | Destination$ Exile | Defined$ ReplacedCard
Oracle:Flying\nDeparted Soulkeeper can block only creatures with flying.\nIf Departed Soulkeeper would be put into a graveyard from anywhere, exile it instead.

View File

@@ -0,0 +1,9 @@
Name:Hobbling Zombie
ManaCost:2 B
Types:Creature Zombie
PT:2/2
K:Deathtouch
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigToken | TriggerDescription$ When CARDNAME dies, create a 2/2 black Zombie creature with decayed. (It can't block. When it attacks, sacrifice it at end of combat.)
SVar:TrigToken:DB$ Token | TokenScript$ b_2_2_zombie_decayed
DeckHas:Ability$Token
Oracle:Deathtouch\nWhen Hobbling Zombie dies, create a 2/2 black Zombie creature with decayed. (It can't block. When it attacks, sacrifice it at end of combat.)

View File

@@ -2,9 +2,9 @@ Name:Leinore, Autumn Sovereign
ManaCost:2 G W
Types:Legendary Creature Human Sovereign
PT:0/4
T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Coven At the beginning of combat on your turn, put a +1/+1 counter on target creature you control. Then if you control three or more creatures with different powers, draw a card.
T:Mode$ Phase | Phase$ BeginCombat | ValidPlayer$ You | TriggerZones$ Battlefield | Execute$ TrigPutCounter | TriggerDescription$ Coven At the beginning of combat on your turn, put a +1/+1 counter on target creature you control. Then if you control three or more creatures with different powers, draw a card.
SVar:TrigPutCounter:DB$ PutCounter | ValidTgts$ Creature.YouCtrl | TargetMin$ 0 | TargetMax$ 1 | TgtPrompt$ Select target creature you control | CounterType$ P1P1 | CounterNum$ 1 | SubAbility$ DBDraw
SVar:DBDraw:DB$ Draw | Defined$ You | NumCards$ 1 | ConditionCheckSVar$ X | ConditionSVarCompare$ GE3
SVar:X:Count$DifferentPower_Creature.YouCtrl
DeckHas:Ability$Counters
Oracle:Coven At the beginning of combat on your turn, put a +1/+1 counter on up to one creature you control. Then if you control three or more creatures with different powers, draw a card.
Oracle:Coven At the beginning of combat on your turn, put a +1/+1 counter on up to one creature you control. Then if you control three or more creatures with different powers, draw a card.

View File

@@ -5,6 +5,6 @@ A:SP$ DealDamage | Cost$ X R | ValidTgts$ Creature,Player,Planeswalker | TgtProm
SVar:X:Count$xPaid
SVar:Y:Targeted$Valid Creature,Planeswalker
SVar:Z:SVar$X/Plus.Y
K:Flashback:XCantBe0 3 R RemoveAnyCounter<X/LOYALTY/Planeswalker.YouCtrl/among planeswalkers you control>::If you cast this spell this way, X can't be 0.:{3}{R}, Remove X loyalty counters from among planeswalkers you control
K:Flashback:XCantBe0 3 R RemoveAnyCounter<X/LOYALTY/Planeswalker.YouCtrl/among planeswalkers you control>::If you cast this spell this way, X can't be 0.
DeckHints:Type$Planeswalker
Oracle:Light Up the Night deals X damage to any target. It deals X plus 1 damage instead if that target is a creature or planeswalker.\nFlashback—{3}{R}, Remove X loyalty counters from among planeswalkers you control. If you cast this spell this way, X can't be 0. (You may cast this card from your graveyard for its flashback cost. Then exile it.)

View File

@@ -5,8 +5,8 @@ PT:4/4
K:Flying
K:Trample
S:Mode$ Continuous | Affected$ Creature.Human+YouCtrl | AddPower$ 1 | AddToughness$ 1 | Description$ Humans you control get +1/+1.
T:Mode$ Attacks | ValidCard$ Card.Self | CheckSVar$ X | SVarCompare$ GE3 | Execute$ TrigDig | TriggerDescription$ Coven - Whenever Sigarda attacks, if you control three or more creatures with different powers, look at the top five cards of your library. You may reveal a Human creature card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.
T:Mode$ Attacks | ValidCard$ Card.Self | CheckSVar$ X | SVarCompare$ GE3 | Execute$ TrigDig | TriggerDescription$ Coven Whenever Sigarda attacks, if you control three or more creatures with different powers, look at the top five cards of your library. You may reveal a Human creature card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.
SVar:TrigDig:DB$ Dig | DigNum$ 5 | ChangeNum$ 1 | Optional$ True | ChangeValid$ Creature.Human
SVar:X:Count$DifferentPower_Creature.YouCtrl
DeckNeeds:Type$Human
Oracle:Flying, trample\nHumans you control get +1/+1\nCoven - Whenever Sigarda attacks, if you control three or more creatures with different powers, look at the top five cards of your library. You may reveal a Human creature card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.
Oracle:Flying, trample\nHumans you control get +1/+1\nCoven Whenever Sigarda attacks, if you control three or more creatures with different powers, look at the top five cards of your library. You may reveal a Human creature card from among them and put it into your hand. Put the rest on the bottom of your library in a random order.

View File

@@ -3,4 +3,4 @@ Name:Commander
Type:Casual
Subtype:Commander
Order:137
Banned:Adriana's Valor; Advantageous Proclamation; Ashnod's Coupon; Assemble the Rank and Vile; Backup Plan; Brago's Favor; Double Cross; Double Deal; Double Dip; Double Play; Double Stroke; Double Take; Echoing Boon; Emissary's Ploy; Enter the Dungeon; Flash; Hired Heist; Hold the Perimeter; Hullbreacher; Hymn of the Wilds; Immediate Action; Incendiary Dissent; Iterative Analysis; Lutri, the Spellchaser; Magical Hacker; Mox Lotus; Muzzio's Preparations; Natural Unity; Once More with Feeling; Power Play; R&D's Secret Lair; Richard Garfield, Ph.D.; Secret Summoning; Secrets of Paradise; Sentinel Dispatch; Sovereign's Realm; Staying Power; Summoner's Bond; Time Machine; Unexpected Potential; Weight Advantage; Worldknit; Amulet of Quoz; Bronze Tablet; Contract from Below; Darkpact; Demonic Attorney; Jeweled Bird; Rebirth; Tempest Efreet; Timmerian Fiends; Ancestral Recall; Balance; Biorhythm; Black Lotus; Braids, Cabal Minion; Chaos Orb; Coalition Victory; Channel; Emrakul, the Aeons Torn; Erayo, Soratami Ascendant; Falling Star; Fastbond; Gifts Ungiven; Griselbrand; Iona, Shield of Emeria; Karakas; Leovold, Emissary of Trest; Library of Alexandria; Limited Resources; Mox Emerald; Mox Jet; Mox Pearl; Mox Ruby; Mox Sapphire; Panoptic Mirror; Paradox Engine; Primeval Titan; Prophet of Kruphix; Recurring Nightmare; Rofellos, Llanowar Emissary; Shahrazad; Sundering Titan; Sway of the Stars; Sylvan Primordial; Time Vault; Time Walk; Tinker; Tolarian Academy; Trace Secrets; Upheaval; Worldfire; Yawgmoth's Bargain
Banned:Adriana's Valor; Advantageous Proclamation; Ashnod's Coupon; Assemble the Rank and Vile; Backup Plan; Brago's Favor; Double Cross; Double Deal; Double Dip; Double Play; Double Stroke; Double Take; Echoing Boon; Emissary's Ploy; Enter the Dungeon; Flash; Hired Heist; Hold the Perimeter; Hullbreacher; Hymn of the Wilds; Immediate Action; Incendiary Dissent; Iterative Analysis; Lutri, the Spellchaser; Magical Hacker; Mox Lotus; Muzzio's Preparations; Natural Unity; Once More with Feeling; Power Play; R&D's Secret Lair; Richard Garfield, Ph.D.; Secret Summoning; Secrets of Paradise; Sentinel Dispatch; Sovereign's Realm; Staying Power; Summoner's Bond; Time Machine; Unexpected Potential; Weight Advantage; Worldknit; Amulet of Quoz; Bronze Tablet; Contract from Below; Darkpact; Demonic Attorney; Jeweled Bird; Rebirth; Tempest Efreet; Timmerian Fiends; Ancestral Recall; Balance; Biorhythm; Black Lotus; Braids, Cabal Minion; Chaos Orb; Coalition Victory; Channel; Emrakul, the Aeons Torn; Erayo, Soratami Ascendant; Falling Star; Fastbond; Gifts Ungiven; Griselbrand; Iona, Shield of Emeria; Karakas; Leovold, Emissary of Trest; Library of Alexandria; Limited Resources; Mox Emerald; Mox Jet; Mox Pearl; Mox Ruby; Mox Sapphire; Panoptic Mirror; Paradox Engine; Primeval Titan; Prophet of Kruphix; Recurring Nightmare; Rofellos, Llanowar Emissary; Shahrazad; Sundering Titan; Sway of the Stars; Sylvan Primordial; Time Vault; Time Walk; Tinker; Tolarian Academy; Trade Secrets; Upheaval; Worldfire; Yawgmoth's Bargain; Cleanse; Crusade; Imprison; Invoke Prejudice; Jihad; Pradesh Gypsies; Stone-Throwing Devils

View File

@@ -3,4 +3,4 @@ Name:Oathbreaker
Type:Casual
Subtype:Commander
Order:141
Banned:Adriana's Valor; Advantageous Proclamation; Assemble the Rank and Vile; Backup Plan; Brago's Favor; Double Stroke; Echoing Boon; Emissary's Ploy; Hired Heist; Hold the Perimeter; Hymn of the Wilds; Immediate Action; Incendiary Dissent; Iterative Analysis; Muzzio's Preparations; Natural Unity; Power Play; Secret Summoning; Secrets of Paradise; Sentinel Dispatch; Sovereign's Realm; Summoner's Bond; Unexpected Potential; Weight Advantage; Worldknit; Amulet of Quoz; Bronze Tablet; Contract from Below; Darkpact; Demonic Attorney; Jeweled Bird; Rebirth; Tempest Efreet; Timmerian Fiends; Chaos Orb; Falling Star; Shahrazad; Ad Nauseam; Ancestral Recall; Balance; Biorhythm; Black Lotus; Channel; Doomsday; Emrakul, the Aeons Torn; Expropriate; Fastbond; Gifts Ungiven; Griselbrand; High Tide; Library of Alexandria; Limited Resources; Lion's Eye Diamond; Mana Crypt; Mana Geyser; Mana Vault; Mox Emerald; Mox Jet; Mox Pearl; Mox Ruby; Mox Sapphire; Natural Order; Painter's Servant; Panoptic Mirror; Primal Surge; Recurring Nightmare; Saheeli, the Gifted; Sol Ring; Sundering Titan; Sway of the Stars; Sylvan Primordial; Time Vault; Time Walk; Tinker; Tolarian Academy; Tooth and Nail; Trade Secrets; Upheaval; Worldfire; Yawgmoth's Bargain
Banned:Adriana's Valor; Advantageous Proclamation; Assemble the Rank and Vile; Backup Plan; Brago's Favor; Double Stroke; Echoing Boon; Emissary's Ploy; Hired Heist; Hold the Perimeter; Hymn of the Wilds; Immediate Action; Incendiary Dissent; Iterative Analysis; Muzzio's Preparations; Natural Unity; Power Play; Secret Summoning; Secrets of Paradise; Sentinel Dispatch; Sovereign's Realm; Summoner's Bond; Unexpected Potential; Weight Advantage; Worldknit; Amulet of Quoz; Bronze Tablet; Contract from Below; Darkpact; Demonic Attorney; Jeweled Bird; Rebirth; Tempest Efreet; Timmerian Fiends; Chaos Orb; Falling Star; Shahrazad; Ad Nauseam; Ancestral Recall; Balance; Biorhythm; Black Lotus; Channel; Doomsday; Emrakul, the Aeons Torn; Expropriate; Fastbond; Gifts Ungiven; Griselbrand; High Tide; Library of Alexandria; Limited Resources; Lion's Eye Diamond; Mana Crypt; Mana Geyser; Mana Vault; Mox Emerald; Mox Jet; Mox Pearl; Mox Ruby; Mox Sapphire; Natural Order; Painter's Servant; Panoptic Mirror; Primal Surge; Saheeli, the Gifted; Sol Ring; Sundering Titan; Sylvan Primordial; Time Vault; Time Walk; Tinker; Tolarian Academy; Tooth and Nail; Trade Secrets; Upheaval; Yawgmoth's Bargain; Cleanse; Crusade; Dark Ritual; Imprison; Invoke Prejudice; Jeweled Lotus; Jihad; Pradesh Gypsies; Stone-Throwing Devils

View File

@@ -4,4 +4,4 @@ Order:108
Subtype:Custom
Type:Casual
Rarities:L, C
Banned:Arcum's Astrolabe; Cloud of Faeries; Cloudpost; Cranial Plating; Daze; Empty the Warrens; Expedition Map; Fall from Favor; Frantic Search; Gitaxian Probe; Grapeshot; Gush; Invigorate; Mystic Sanctuary; Peregrine Drake; Temporal Fissure; Treasure Cruise
Banned:Arcum's Astrolabe; Chatterstorm; Cloud of Faeries; Cloudpost; Cranial Plating; Daze; Expedition Map; Empty the Warrens; Fall from Favor; Frantic Search; Gitaxian Probe; Grapeshot; Gush; High Tide; Hymn to Tourach; Invigorate; Mystic Sanctuary; Peregrine Drake; Sinkhole; Sojourner's Companion; Temporal Fissure; Treasure Cruise

View File

@@ -5,4 +5,4 @@ Subtype:Extended
Effective:2013-07-19
Retired:2013-10-08
Sets:ZEN, WWK, ROE, M11, SOM, MBS, NPH, M12, ISD, DKA, AVR, M13, RTR, GTC, DGM, M14
Banned:Jace, the Mind Sculptor; Mental Misstep; Ponder; Preordain; Stoneforge Mystic
Banned:Mental Misstep; Ponder

View File

@@ -4,4 +4,4 @@ Order:105
Subtype:Legacy
Type:Sanctioned
Sets:7ED, 9ED, ORI, M14, M15, 6ED, 8ED, M11, 3ED, M10, M12, 10E, M13, G18, M21, M20, M19, 5ED, 2ED, 4ED, LEB, LEA, 5DN, SOM, KTK, THS, DIS, JOU, MOR, TMP, SOI, FEM, USG, ALL, ROE, EXO, TSP, LRW, TOR, ALA, RIX, DGM, DKA, MBS, AER, RNA, GTC, CSP, HML, NPH, OGW, ZNR, EMN, UDS, SHM, BNG, SOK, EVE, INV, THB, DOM, NMS, VIS, WAR, GRN, PCY, SCG, MRD, XLN, ONS, IKO, MMQ, CHK, ULG, AKH, MIR, ISD, AVR, KLD, APC, RTR, WWK, PLC, HOU, LEG, AFR, ARN, ICE, STX, LGN, ARB, KHM, CFX, TSB, ZEN, ELD, JUD, GPT, BFZ, BOK, DTK, FRF, FUT, WTH, ODY, RAV, ATQ, DRK, PLS, STH, DST, TD2, HA1, ME4, HA3, HA2, HA5, HA4, MED, ANB, ME3, KLR, PZ2, ANA, PRM, PZ1, AJMP, ME2, TD1, TD0, TPR, VMA, AKR, MBP, PZEN, PGTW, PL21, PFUT, PWAR, PAL01, PJUD, PAL00, PTKDF, PWOR, PWP12, PSTH, POGW, PFRF, PG07, PSUS, PUST, J18, PWP10, PAL02, PAL03, PWP11, J19, PGRN, PM10, PDP14, PRTR, PMPS06, PBNG, PJ21, G09, PNPH, PM15, PAL06, G08, PDST, J20, PMBS, PMPS07, PEXO, PDOM, PONS, PRW2, PMPS11, PMPS, PM19, PWWK, PCEL, PAL04, PAL05, PMPS10, PDTK, PALP, F10, F04, PMOR, PAL99, PEMN, PCNS, PPLC, PRAV, PPP1, PI14, PXLN, PF20, PTSP, F05, F11, PSCG, PBOOK, F07, F13, PODY, PM12, P08, PSS1, P2HG, P09, PTOR, PDP13, F12, F06, PALA, PXTC, F02, F16, PHOU, PSOM, PI13, PCON, PDGM, PIDW, PMRD, PRNA, P9ED, PHEL, F17, F03, PURL, F15, F01, PWOS, PPC1, PBOK, PTMP, PS19, PS18, PF19, PGPT, PCHK, FNM, F14, PISD, PAKH, PDP15, PRIX, PS15, PPCY, OLGC, OVNT, PLGN, PS14, P03, PDTP, PM14, FS, PPLS, MPR, PKTK, PS16, PRWK, PS17, PBFZ, PSS2, PINV, G03, P8ED, PARL, P04, P10, PSDC, JGP, G99, WW, P11, P05, PDIS, PROE, PDP10, F08, P10E, PELP, PMH1, P07, P5DN, PGRU, SHC, PM11, P06, PUSG, PCMP, PULG, F09, PUDS, PARB, DRC94, PMPS09, PORI, J12, G06, PMMQ, G07, J13, PMPS08, PM20, PSOI, PJSE, G05, G11, PNAT, PSOK, PEVE, PRED, G10, G04, PSHM, PPRO, PAPC, PJJT, ARENA, PKLD, G00, J14, PLGM, P15A, PCSP, PWPN, PJAS, PWP21, PWP09, PDKA, PNEM, PPTK, J15, G01, PG08, PLRW, PMEI, PM13, PHJ, PGTC, J17, PRES, PWCQ, PJOU, PDP12, PAER, PAVR, PTHS, G02, J16, PSUM, PGPX, UGF, PSS3, MM2, MM3, MB1, FMB1, A25, 2XM, MMA, PLIST, CHR, EMA, IMA, TSR, UMA, PUMA, E02, DPA, ATH, MD1, GK1, GK2, CST, BRB, BTD, DKM, FVE, V17, V13, STA, MPS_RNA, V16, SLD, V12, CC1, MPS_GRN, DRB, FVR, SS3, SS1, MPS_AKH, FVL, V15, MPS_KLD, ZNE, PDS, SS2, PD3, SLU, V14, PD2, EXP, MPS_WAR, DDQ, DDE, GS1, DDS, DDU, DD1, DDL, DDF, DDP, DD2, DDR, DDH, DDT, DDK, DDG, DDC, DDM, DDJ, DDO, GVL, JVC, DDI, DVD, DDN, EVG, DDD, C18, C19, C21, C20, C13, CMA, C14, C15, KHC, ZNC, AFC, C17, C16, COM, CM1, CM2, PO2, S99, W16, W17, S00, PTK, CP3, POR, CP1, CP2, CMR, MH2, H1R, CNS, BBD, MH1, CN2, JMP, PCA, GNT, ARC, GN2, PC2, E01, HOP, PLG20, PLG21
Banned:Adriana's Valor; Advantageous Proclamation; Arcum's Astrolabe; Assemble the Rank and Vile; Backup Plan; Brago's Favor; Deathrite Shaman; Double Stroke; Dreadhorde Arcanist; Echoing Boon; Emissary's Ploy; Gitaxian Probe; Hired Heist; Hold the Perimeter; Hymn of the Wilds; Immediate Action; Incendiary Dissent; Iterative Analysis; Lurrus of the Dream-Den; Muzzio's Preparations; Natural Unity; Oko, Thief of Crowns; Power Play; Secret Summoning; Secrets of Paradise; Sentinel Dispatch; Sovereign's Realm; Summoner's Bond; Underworld Breach; Unexpected Potential; Weight Advantage; Worldknit; Amulet of Quoz; Bronze Tablet; Contract from Below; Darkpact; Demonic Attorney; Jeweled Bird; Rebirth; Tempest Efreet; Timmerian Fiends; Ancestral Recall; Balance; Bazaar of Baghdad; Black Lotus; Channel; Chaos Orb; Demonic Consultation; Demonic Tutor; Dig Through Time; Earthcraft; Falling Star; Fastbond; Flash; Frantic Search; Goblin Recruiter; Gush; Hermit Druid; Imperial Seal; Library of Alexandria; Mana Crypt; Mana Drain; Mana Vault; Memory Jar; Mental Misstep; Mind Twist; Mind's Desire; Mishra's Workshop; Mox Emerald; Mox Jet; Mox Pearl; Mox Ruby; Mox Sapphire; Mystical Tutor; Necropotence; Oath of Druids; Sensei's Divining Top; Shahrazad; Skullclamp; Sol Ring; Strip Mine; Survival of the Fittest; Time Vault; Time Walk; Timetwister; Tinker; Tolarian Academy; Treasure Cruise; Vampiric Tutor; Wheel of Fortune; Windfall; Wrenn and Six; Yawgmoth's Bargain; Yawgmoth's Will; Zirda, the Dawnwaker
Banned:Adriana's Valor; Advantageous Proclamation; Arcum's Astrolabe; Assemble the Rank and Vile; Backup Plan; Brago's Favor; Deathrite Shaman; Double Stroke; Dreadhorde Arcanist; Echoing Boon; Emissary's Ploy; Gitaxian Probe; Hired Heist; Hold the Perimeter; Hymn of the Wilds; Immediate Action; Incendiary Dissent; Iterative Analysis; Lurrus of the Dream-Den; Muzzio's Preparations; Natural Unity; Oko, Thief of Crowns; Power Play; Secret Summoning; Secrets of Paradise; Sentinel Dispatch; Sovereign's Realm; Summoner's Bond; Underworld Breach; Unexpected Potential; Weight Advantage; Worldknit; Amulet of Quoz; Bronze Tablet; Contract from Below; Darkpact; Demonic Attorney; Jeweled Bird; Rebirth; Tempest Efreet; Timmerian Fiends; Ancestral Recall; Balance; Bazaar of Baghdad; Black Lotus; Channel; Chaos Orb; Demonic Consultation; Demonic Tutor; Dig Through Time; Earthcraft; Falling Star; Fastbond; Flash; Frantic Search; Goblin Recruiter; Gush; Hermit Druid; Imperial Seal; Library of Alexandria; Mana Crypt; Mana Drain; Mana Vault; Memory Jar; Mental Misstep; Mind Twist; Mind's Desire; Mishra's Workshop; Mox Emerald; Mox Jet; Mox Pearl; Mox Ruby; Mox Sapphire; Mystical Tutor; Necropotence; Oath of Druids; Sensei's Divining Top; Shahrazad; Skullclamp; Sol Ring; Strip Mine; Survival of the Fittest; Time Vault; Time Walk; Timetwister; Tinker; Tolarian Academy; Treasure Cruise; Vampiric Tutor; Wheel of Fortune; Windfall; Wrenn and Six; Yawgmoth's Bargain; Yawgmoth's Will; Zirda, the Dawnwaker; Cleanse; Crusade; Imprison; Invoke Prejudice; Jihad; Pradesh Gypsies; Stone-Throwing Devils

View File

@@ -4,4 +4,4 @@ Order:101
Subtype:Standard
Type:Sanctioned
Sets:ELD, THB, IKO, M21, ZNR, KHM, STX, AFR
Banned:Cauldron Familiar; Escape to the Wilds; Fires of Invention; Lucky Clover; Oko, Thief of Crowns; Omnath, Locus of Creation; Once Upon a Time; Uro, Titan of Nature's Wrath; Veil of Summer
Banned:Cauldron Familiar; Escape to the Wilds; Fires of Invention; Lucky Clover; Oko, Thief of Crowns; Omnath, Locus of Creation; Once Upon a Time; Uro, Titan of Nature's Wrath

View File

@@ -4,5 +4,5 @@ Order:104
Subtype:Vintage
Type:Sanctioned
Sets:7ED, 9ED, ORI, M14, M15, 6ED, 8ED, M11, 3ED, M10, M12, 10E, M13, G18, M21, M20, M19, 5ED, 2ED, 4ED, LEB, LEA, 5DN, SOM, KTK, THS, DIS, JOU, MOR, TMP, SOI, FEM, USG, ALL, ROE, EXO, TSP, LRW, TOR, ALA, RIX, DGM, DKA, MBS, AER, RNA, GTC, CSP, HML, NPH, OGW, ZNR, EMN, UDS, SHM, BNG, SOK, EVE, INV, THB, DOM, NMS, VIS, WAR, GRN, PCY, SCG, MRD, XLN, ONS, IKO, MMQ, CHK, ULG, AKH, MIR, ISD, AVR, KLD, APC, RTR, WWK, PLC, HOU, LEG, AFR, ARN, ICE, STX, LGN, ARB, KHM, CFX, TSB, ZEN, ELD, JUD, GPT, BFZ, BOK, DTK, FRF, FUT, WTH, ODY, RAV, ATQ, DRK, PLS, STH, DST, TD2, HA1, ME4, HA3, HA2, HA5, HA4, MED, ANB, ME3, KLR, PZ2, ANA, PRM, PZ1, AJMP, ME2, TD1, TD0, TPR, VMA, AKR, MBP, PZEN, PGTW, PL21, PFUT, PWAR, PAL01, PJUD, PAL00, PTKDF, PWOR, PWP12, PSTH, POGW, PFRF, PG07, PSUS, PUST, J18, PWP10, PAL02, PAL03, PWP11, J19, PGRN, PM10, PDP14, PRTR, PMPS06, PBNG, PJ21, G09, PNPH, PM15, PAL06, G08, PDST, J20, PMBS, PMPS07, PEXO, PDOM, PONS, PRW2, PMPS11, PMPS, PM19, PWWK, PCEL, PAL04, PAL05, PMPS10, PDTK, PALP, F10, F04, PMOR, PAL99, PEMN, PCNS, PPLC, PRAV, PPP1, PI14, PXLN, PF20, PTSP, F05, F11, PSCG, PBOOK, F07, F13, PODY, PM12, P08, PSS1, P2HG, P09, PTOR, PDP13, F12, F06, PALA, PXTC, F02, F16, PHOU, PSOM, PI13, PCON, PDGM, PIDW, PMRD, PRNA, P9ED, PHEL, F17, F03, PURL, F15, F01, PWOS, PPC1, PBOK, PTMP, PS19, PS18, PF19, PGPT, PCHK, FNM, F14, PISD, PAKH, PDP15, PRIX, PS15, PPCY, OLGC, OVNT, PLGN, PS14, P03, PDTP, PM14, FS, PPLS, MPR, PKTK, PS16, PRWK, PS17, PBFZ, PSS2, PINV, G03, P8ED, PARL, P04, P10, PSDC, JGP, G99, WW, P11, P05, PDIS, PROE, PDP10, F08, P10E, PELP, PMH1, P07, P5DN, PGRU, SHC, PM11, P06, PUSG, PCMP, PULG, F09, PUDS, PARB, DRC94, PMPS09, PORI, J12, G06, PMMQ, G07, J13, PMPS08, PM20, PSOI, PJSE, G05, G11, PNAT, PSOK, PEVE, PRED, G10, G04, PSHM, PPRO, PAPC, PJJT, ARENA, PKLD, G00, J14, PLGM, P15A, PCSP, PWPN, PJAS, PWP21, PWP09, PDKA, PNEM, PPTK, J15, G01, PG08, PLRW, PMEI, PM13, PHJ, PGTC, J17, PRES, PWCQ, PJOU, PDP12, PAER, PAVR, PTHS, G02, J16, PSUM, PGPX, UGF, PSS3, MM2, MM3, MB1, FMB1, A25, 2XM, MMA, PLIST, CHR, EMA, IMA, TSR, UMA, PUMA, E02, DPA, ATH, MD1, GK1, GK2, CST, BRB, BTD, DKM, FVE, V17, V13, STA, MPS_RNA, V16, SLD, V12, CC1, MPS_GRN, DRB, FVR, SS3, SS1, MPS_AKH, FVL, V15, MPS_KLD, ZNE, PDS, SS2, PD3, SLU, V14, PD2, EXP, MPS_WAR, DDQ, DDE, GS1, DDS, DDU, DD1, DDL, DDF, DDP, DD2, DDR, DDH, DDT, DDK, DDG, DDC, DDM, DDJ, DDO, GVL, JVC, DDI, DVD, DDN, EVG, DDD, C18, C19, C21, C20, C13, CMA, C14, C15, KHC, ZNC, AFC, C17, C16, COM, CM1, CM2, PO2, S99, W16, W17, S00, PTK, CP3, POR, CP1, CP2, CMR, MH2, H1R, CNS, BBD, MH1, CN2, JMP, PCA, GNT, ARC, GN2, PC2, E01, HOP, PLG20, PLG21
Banned:Adriana's Valor; Advantageous Proclamation; Assemble the Rank and Vile; Backup Plan; Brago's Favor; Double Stroke; Echoing Boon; Emissary's Ploy; Hired Heist; Hold the Perimeter; Hymn of the Wilds; Immediate Action; Incendiary Dissent; Iterative Analysis; Muzzio's Preparations; Natural Unity; Power Play; Secret Summoning; Secrets of Paradise; Sentinel Dispatch; Sovereign's Realm; Summoner's Bond; Unexpected Potential; Weight Advantage; Worldknit; Amulet of Quoz; Bronze Tablet; Contract from Below; Darkpact; Demonic Attorney; Jeweled Bird; Rebirth; Tempest Efreet; Timmerian Fiends; Chaos Orb; Falling Star; Shahrazad
Banned:Adriana's Valor; Advantageous Proclamation; Assemble the Rank and Vile; Backup Plan; Brago's Favor; Double Stroke; Echoing Boon; Emissary's Ploy; Hired Heist; Hold the Perimeter; Hymn of the Wilds; Immediate Action; Incendiary Dissent; Iterative Analysis; Muzzio's Preparations; Natural Unity; Power Play; Secret Summoning; Secrets of Paradise; Sentinel Dispatch; Sovereign's Realm; Summoner's Bond; Unexpected Potential; Weight Advantage; Worldknit; Amulet of Quoz; Bronze Tablet; Contract from Below; Darkpact; Demonic Attorney; Jeweled Bird; Rebirth; Tempest Efreet; Timmerian Fiends; Chaos Orb; Falling Star; Shahrazad; Cleanse; Crusade; Imprison; Invoke Prejudice; Jihad; Pradesh Gypsies; Stone-Throwing Devils
Restricted:Ancestral Recall; Balance; Black Lotus; Brainstorm; Chalice of the Void; Channel; Demonic Consultation; Demonic Tutor; Dig Through Time; Flash; Gitaxian Probe; Golgari Grave-Troll; Gush; Imperial Seal; Karn, the Great Creator; Library of Alexandria; Lion's Eye Diamond; Lodestone Golem; Lotus Petal; Mana Crypt; Mana Vault; Memory Jar; Mental Misstep; Merchant Scroll; Mind's Desire; Monastery Mentor; Mox Emerald; Mox Jet; Mox Pearl; Mox Ruby; Mox Sapphire; Mystic Forge; Mystical Tutor; Narset, Parter of Veils; Necropotence; Ponder; Sol Ring; Strip Mine; Thorn of Amethyst; Time Vault; Time Walk; Timetwister; Tinker; Tolarian Academy; Treasure Cruise; Trinisphere; Vampiric Tutor; Wheel of Fortune; Windfall; Yawgmoth's Will

View File

@@ -29,7 +29,7 @@ Image=natures_vengeance.jpg
1 Cultivate|C18
1 Deathreap Ritual|C18
1 Decimate|C18
#1 Emissary of Grudges|C18
1 Emissary of Grudges|C18
1 Evolving Wilds|C18
1 Explore|C18
1 Explosive Vegetation|C18

View File

@@ -8,6 +8,8 @@ import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import forge.card.CardDb;
import forge.util.TextUtil;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
@@ -113,8 +115,31 @@ public class CardPreferences {
}
if (preferredArt0.equals(preferredArt)) { return; }
if (FModel.getMagicDb().getCommonCards().setPreferredArt(cardName, preferredArt0)) {
preferredArt = preferredArt0;
try {
String infoCardName;
String infoSetCode;
int infoArtIndex;
String[] prefArtInfos =TextUtil.split(preferredArt0, CardDb.NameSetSeparator);
if (prefArtInfos.length == 2){
// legacy format
infoCardName = this.cardName;
infoSetCode = prefArtInfos[0];
infoArtIndex = Integer.parseInt(prefArtInfos[1]);
} else {
infoCardName = prefArtInfos[0];
infoSetCode = prefArtInfos[1];
infoArtIndex = Integer.parseInt(prefArtInfos[2]);
}
if (!this.cardName.equals(infoCardName)) // extra sanity check
return;
if (FModel.getMagicDb().getCommonCards().setPreferredArt(cardName, infoSetCode, infoArtIndex))
preferredArt = preferredArt0;
} catch (NumberFormatException ex){
System.err.println("ERROR with Existing Preferred Card Entry: " + preferredArt0);
}
}
public void setPreferredArt(String setCode, int artIndex) {
this.setPreferredArt(setCode + CardDb.NameSetSeparator + artIndex);
}
}