- Added Yavimaya Dryad and Thieve's Auction

This commit is contained in:
swordshine
2013-03-18 02:16:22 +00:00
parent f2560e5d0a
commit 10bae9c32c
5 changed files with 52 additions and 14 deletions

2
.gitattributes vendored
View File

@@ -10851,6 +10851,7 @@ res/cardsfolder/t/thespians_stage.txt -text
res/cardsfolder/t/thicket_basilisk.txt svneol=native#text/plain
res/cardsfolder/t/thicket_elemental.txt -text
res/cardsfolder/t/thief_of_hope.txt svneol=native#text/plain
res/cardsfolder/t/thieves_auction.txt -text
res/cardsfolder/t/thieves_fortune.txt -text
res/cardsfolder/t/thieving_magpie.txt svneol=native#text/plain
res/cardsfolder/t/thieving_sprite.txt -text
@@ -12317,6 +12318,7 @@ res/cardsfolder/y/yavimaya_ancients.txt svneol=native#text/plain
res/cardsfolder/y/yavimaya_ants.txt svneol=native#text/plain
res/cardsfolder/y/yavimaya_barbarian.txt svneol=native#text/plain
res/cardsfolder/y/yavimaya_coast.txt svneol=native#text/plain
res/cardsfolder/y/yavimaya_dryad.txt -text
res/cardsfolder/y/yavimaya_elder.txt svneol=native#text/plain
res/cardsfolder/y/yavimaya_enchantress.txt svneol=native#text/plain
res/cardsfolder/y/yavimaya_gnats.txt svneol=native#text/plain

View File

@@ -0,0 +1,12 @@
Name:Thieves' Auction
ManaCost:4 R R R
Types:Sorcery
A:SP$ ChangeZoneAll | Cost$ 4 R R R | ChangeType$ Permanent.nonToken | Origin$ Battlefield | Destination$ Exile | RememberChanged$ True | SubAbility$ DBRepeatChoose | StackDescription$ SpellDescription | SpellDescription$ Exile all nontoken permanents. Starting with you, each player chooses one of the exiled cards and puts it onto the battlefield tapped under his or her control. Repeat this process until all cards exiled this way have been chosen.
SVar:DBRepeatChoose:DB$ Repeat | RepeatSubAbility$ DBRepeat | RepeatDefined$ Remembered | RepeatPresent$ Card
SVar:DBRepeat:DB$ RepeatEach | RepeatPlayers$ Player | RepeatSubAbility$ DBChoose
SVar:DBChoose:DB$ ChooseCard | Defined$ Player.IsRemembered | Choices$ Card.IsRemembered | ForgetChosen$ True | ChoiceZone$ Exile | SubAbility$ DBGainControl
SVar:DBGainControl:DB$ ChangeZone | Origin$ Exile | Destination$ Battlefield | Defined$ ChosenCard | GainControl$ True | Tapped$ True | NewController$ Player.IsRemembered
SVar:Picture:http://www.wizards.com/global/images/magic/general/thieves_auction.jpg
Oracle:Exile all nontoken permanents. Starting with you, each player chooses one of the exiled cards and puts it onto the battlefield tapped under his or her control. Repeat this process until all cards exiled this way have been chosen.
SetInfo:MMQ Rare
SetInfo:8ED Rare

View File

@@ -0,0 +1,13 @@
Name:Yavimaya Dryad
ManaCost:1 G G
Types:Creature Dryad
Text:no text
PT:2/1
K:Forestwalk
T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigRamp | TriggerDescription$ When CARDNAME enters the battlefield, you may search your library for a Forest card and put it onto the battlefield tapped under target player's control. If you do, shuffle your library.
SVar:TrigRamp:AB$ Pump | Cost$ 0 | ValidTgts$ Player | TgtPrompt$ Select target player to gain control of forest | SubAbility$ DBChangeZone
SVar:DBChangeZone:DB$ ChangeZone | Origin$ Library | Destination$ Battlefield | ChangeType$ Forest | ChangeNum$ 1 | GainControl$ True | NewController$ Targeted | Tapped$ True
SVar:Picture:http://www.wizards.com/global/images/magic/general/yavimaya_dryad.jpg
Oracle:Forestwalk\nWhen Yavimaya Dryad enters the battlefield, you may search your library for a Forest card and put it onto the battlefield tapped under target player's control. If you do, shuffle your library.
SetInfo:ARC Uncommon
SetInfo:TSP Uncommon

View File

@@ -12,10 +12,10 @@ import forge.Card;
import forge.CardCharacteristicName;
import forge.CardLists;
import forge.CardPredicates;
import forge.CardPredicates.Presets;
import forge.Constant;
import forge.GameEntity;
import forge.Singletons;
import forge.CardPredicates.Presets;
import forge.card.ability.AbilityUtils;
import forge.card.ability.ApiType;
import forge.card.ability.SpellAbilityAi;
@@ -28,10 +28,10 @@ import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellPermanent;
import forge.card.spellability.Target;
import forge.game.GlobalRuleChange;
import forge.game.ai.ComputerUtil;
import forge.game.ai.ComputerUtilBlock;
import forge.game.ai.ComputerUtilCard;
import forge.game.ai.ComputerUtilCombat;
import forge.game.ai.ComputerUtil;
import forge.game.ai.ComputerUtilBlock;
import forge.game.ai.ComputerUtilCost;
import forge.game.ai.ComputerUtilMana;
import forge.game.phase.Combat;
@@ -424,7 +424,8 @@ public class ChangeZoneAi extends SpellAbilityAi {
* a {@link forge.CardList} object.
* @return a {@link forge.Card} object.
*/
private static Card basicManaFixing(final Player ai, final List<Card> list) { // Search for a Basic Land
private static Card basicManaFixing(final Player ai, final List<Card> list) { // Search for a
// Basic Land
final List<Card> combined = new ArrayList<Card>(ai.getCardsIn(ZoneType.Battlefield));
combined.addAll(ai.getCardsIn(ZoneType.Hand));
@@ -457,11 +458,6 @@ public class ChangeZoneAi extends SpellAbilityAi {
result = CardLists.getType(list, minType);
}
// pick dual lands if available
if (Iterables.any(result, Predicates.not(CardPredicates.Presets.BASIC_LANDS))) {
result = CardLists.filter(result, Predicates.not(CardPredicates.Presets.BASIC_LANDS));
}
return result.get(0);
}
@@ -1177,7 +1173,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
} else if (origin.contains(ZoneType.Library)
&& (type.contains("Basic") || areAllBasics(type))) {
c = basicManaFixing(ai, fetchList);
} else if (ZoneType.Hand.equals(destination) && CardLists.getNotType(fetchList, "Creature").isEmpty()) {
} else if (ZoneType.Hand.equals(destination) && CardLists.getNotType(fetchList, "Creature").size() == 0) {
c = chooseCreature(ai, fetchList);
} else if (ZoneType.Battlefield.equals(destination) || ZoneType.Graveyard.equals(destination)) {
if (!activator.equals(ai) && sa.hasParam("GainControl")) {
@@ -1194,7 +1190,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
// Does AI need a land?
List<Card> hand = ai.getCardsIn(ZoneType.Hand);
if (CardLists.filter(hand, Presets.LANDS).isEmpty() && CardLists.filter(ai.getCardsIn(ZoneType.Battlefield), Presets.LANDS).size() < 4) {
if (CardLists.filter(hand, Presets.LANDS).size() == 0 && CardLists.filter(ai.getCardsIn(ZoneType.Battlefield), Presets.LANDS).size() < 4) {
boolean canCastSomething = false;
for (Card cardInHand : hand) {
canCastSomething |= ComputerUtilMana.payManaCost(cardInHand.getFirstSpellAbility(), ai, true, 0, false);
@@ -1254,8 +1250,13 @@ public class ChangeZoneAi extends SpellAbilityAi {
c.setTapped(true);
}
if (sa.hasParam("GainControl")) {
if (sa.hasParam("NewController")) {
final Player p = AbilityUtils.getDefinedPlayers(sa.getSourceCard(), sa.getParam("DefinedPlayer"), sa).get(0);
c.setController(p, Singletons.getModel().getGame().getNextTimestamp());
} else {
c.setController(sa.getActivatingPlayer(), Singletons.getModel().getGame().getNextTimestamp());
}
}
if (sa.hasParam("AttachedTo")) {
List<Card> list = AbilityUtils.getDefinedCards(sa.getSourceCard(),

View File

@@ -386,8 +386,13 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
tgtC.setTapped(true);
}
if (sa.hasParam("GainControl")) {
if (sa.hasParam("NewController")) {
final Player p = AbilityUtils.getDefinedPlayers(sa.getSourceCard(), sa.getParam("NewController"), sa).get(0);
tgtC.setController(p, Singletons.getModel().getGame().getNextTimestamp());
} else {
tgtC.setController(sa.getActivatingPlayer(), Singletons.getModel().getGame().getNextTimestamp());
}
}
if (sa.hasParam("AttachedTo")) {
List<Card> list = AbilityUtils.getDefinedCards(hostCard,
sa.getParam("AttachedTo"), sa);
@@ -670,8 +675,13 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
c.setTapped(true);
}
if (sa.hasParam("GainControl")) {
if (sa.hasParam("NewController")) {
final Player p = AbilityUtils.getDefinedPlayers(sa.getSourceCard(), sa.getParam("NewController"), sa).get(0);
c.setController(p, Singletons.getModel().getGame().getNextTimestamp());
} else {
c.setController(sa.getActivatingPlayer(), Singletons.getModel().getGame().getNextTimestamp());
}
}
if (sa.hasParam("AttachedTo")) {
List<Card> list = AbilityUtils.getDefinedCards(sa.getSourceCard(),