- Added Leonin Arbiter

This commit is contained in:
swordshine
2014-02-19 02:28:14 +00:00
parent 1b5ba15321
commit 7da1d97769
5 changed files with 103 additions and 1 deletions

1
.gitattributes vendored
View File

@@ -7123,6 +7123,7 @@ forge-gui/res/cardsfolder/l/legion_loyalist.txt -text
forge-gui/res/cardsfolder/l/legions_initiative.txt -text forge-gui/res/cardsfolder/l/legions_initiative.txt -text
forge-gui/res/cardsfolder/l/legions_of_lim_dul.txt svneol=native#text/plain forge-gui/res/cardsfolder/l/legions_of_lim_dul.txt svneol=native#text/plain
forge-gui/res/cardsfolder/l/leonin_abunas.txt svneol=native#text/plain forge-gui/res/cardsfolder/l/leonin_abunas.txt svneol=native#text/plain
forge-gui/res/cardsfolder/l/leonin_arbiter.txt -text
forge-gui/res/cardsfolder/l/leonin_armorguard.txt svneol=native#text/plain forge-gui/res/cardsfolder/l/leonin_armorguard.txt svneol=native#text/plain
forge-gui/res/cardsfolder/l/leonin_battlemage.txt svneol=native#text/plain forge-gui/res/cardsfolder/l/leonin_battlemage.txt svneol=native#text/plain
forge-gui/res/cardsfolder/l/leonin_bladetrap.txt svneol=native#text/plain forge-gui/res/cardsfolder/l/leonin_bladetrap.txt svneol=native#text/plain

View File

@@ -21,6 +21,7 @@ import forge.game.card.Card;
import forge.game.card.CardUtil; import forge.game.card.CardUtil;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.replacement.ReplacementEffect; import forge.game.replacement.ReplacementEffect;
import forge.game.spellability.AbilityStatic;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.staticability.StaticAbility; import forge.game.staticability.StaticAbility;
@@ -150,6 +151,14 @@ public class StaticEffects {
} }
} }
if (params.containsKey("IgnoreEffectCost")) {
for (final SpellAbility s : se.getSource().getSpellAbilities()) {
if (s instanceof AbilityStatic && s.isTemporary()) {
se.getSource().removeSpellAbility(s);
}
}
}
// modify players // modify players
for (final Player p : affectedPlayers) { for (final Player p : affectedPlayers) {
p.setUnlimitedHandSize(false); p.setUnlimitedHandSize(false);

View File

@@ -30,6 +30,7 @@ import forge.game.spellability.SpellAbility;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.util.Expressions; import forge.util.Expressions;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -40,6 +41,8 @@ import java.util.Map;
public class StaticAbility extends CardTraitBase { public class StaticAbility extends CardTraitBase {
private int layer = 0; private int layer = 0;
private List<Card> ignoreEffectCards = new ArrayList<Card>();
private List<Player> ignoreEffectPlayers = new ArrayList<Player>();
// ******************************************************* // *******************************************************
@@ -568,6 +571,38 @@ public class StaticAbility extends CardTraitBase {
return true; return true;
} }
/**
* @return the ignoreEffectCards
*/
public List<Card> getIgnoreEffectCards() {
return ignoreEffectCards;
}
/**
* @param c the ignoreEffectCards to set
*/
public void setIgnoreEffectCards(List<Card> cards) {
this.ignoreEffectCards = cards;
}
/**
* @return the ignoreEffectPlayers
*/
public List<Player> getIgnoreEffectPlayers() {
return ignoreEffectPlayers;
}
/**
* @param p the ignoreEffectPlayers to add
*/
public void addIgnoreEffectPlayers(Player p) {
this.ignoreEffectPlayers.add(p);
}
public void clearIgnoreEffects() {
this.ignoreEffectPlayers.clear();
this.ignoreEffectCards.clear();
}
/** /**
* @return the layer * @return the layer

View File

@@ -18,6 +18,8 @@
package forge.game.staticability; package forge.game.staticability;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import forge.GameCommand;
import forge.card.CardType; import forge.card.CardType;
import forge.card.ColorSet; import forge.card.ColorSet;
import forge.card.mana.ManaCostShard; import forge.card.mana.ManaCostShard;
@@ -28,10 +30,12 @@ import forge.game.card.Card;
import forge.game.card.CardFactoryUtil; import forge.game.card.CardFactoryUtil;
import forge.game.card.CardLists; import forge.game.card.CardLists;
import forge.game.card.CardUtil; import forge.game.card.CardUtil;
import forge.game.cost.Cost;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.replacement.ReplacementEffect; import forge.game.replacement.ReplacementEffect;
import forge.game.replacement.ReplacementHandler; import forge.game.replacement.ReplacementHandler;
import forge.game.spellability.AbilityActivated; import forge.game.spellability.AbilityActivated;
import forge.game.spellability.AbilityStatic;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.trigger.Trigger; import forge.game.trigger.Trigger;
import forge.game.trigger.TriggerHandler; import forge.game.trigger.TriggerHandler;
@@ -308,6 +312,11 @@ public class StaticAbilityContinuous {
} }
} }
if (params.containsKey("IgnoreEffectCost")) {
String cost = params.get("IgnoreEffectCost");
buildIgnorEffectAbility(stAb, cost, affectedPlayers, affectedCards);
}
// modify players // modify players
for (final Player p : affectedPlayers) { for (final Player p : affectedPlayers) {
@@ -516,6 +525,44 @@ public class StaticAbilityContinuous {
return affectedCards; return affectedCards;
} }
private static void buildIgnorEffectAbility(final StaticAbility stAb, final String costString, final List<Player> players, final List<Card> cards) {
final List<Player> validActivator = new ArrayList<Player>(players);
for (final Card c : cards) {
validActivator.add(c.getController());
}
final Card sourceCard = stAb.getHostCard();
Cost cost = new Cost(costString, true);
final AbilityStatic addIgnore = new AbilityStatic(sourceCard, cost, null) {
@Override
public void resolve() {
stAb.addIgnoreEffectPlayers(this.getActivatingPlayer());
stAb.setIgnoreEffectCards(cards);
}
@Override
public boolean canPlay() {
return validActivator.contains(this.getActivatingPlayer())
&& sourceCard.isInPlay();
}
};
addIgnore.setTemporary(true);
addIgnore.setIntrinsic(false);
addIgnore.setDescription(cost + " Ignore the effect until end of turn.");
sourceCard.addSpellAbility(addIgnore);
final GameCommand removeIgnore = new GameCommand() {
private static final long serialVersionUID = -5415775215053216360L;
@Override
public void run() {
stAb.clearIgnoreEffects();
}
};
sourceCard.getGame().getEndOfTurn().addUntil(removeIgnore);
sourceCard.addLeavesPlayCommand(removeIgnore);
}
private static ArrayList<Player> getAffectedPlayers(final StaticAbility stAb) { private static ArrayList<Player> getAffectedPlayers(final StaticAbility stAb) {
final Map<String, String> params = stAb.getMapParams(); final Map<String, String> params = stAb.getMapParams();
final Card hostCard = stAb.getHostCard(); final Card hostCard = stAb.getHostCard();
@@ -534,6 +581,7 @@ public class StaticAbilityContinuous {
players.add(p); players.add(p);
} }
} }
players.removeAll(stAb.getIgnoreEffectPlayers());
return players; return players;
} }
@@ -573,7 +621,7 @@ public class StaticAbilityContinuous {
if (params.containsKey("Affected")) { if (params.containsKey("Affected")) {
affectedCards = CardLists.getValidCards(affectedCards, params.get("Affected").split(","), controller, hostCard); affectedCards = CardLists.getValidCards(affectedCards, params.get("Affected").split(","), controller, hostCard);
} }
affectedCards.removeAll(stAb.getIgnoreEffectCards());
return affectedCards; return affectedCards;
} }

View File

@@ -0,0 +1,9 @@
Name:Leonin Arbiter
ManaCost:1 W
Types:Creature Cat Cleric
PT:2/2
S:Mode$ Continuous | Affected$ Player | AddKeyword$ CantSearchLibrary | IgnoreEffectCost$ 2 | Description$ Players can't search libraries. Any player may pay {2} for that player to ignore this effect until end of turn.
SVar:RemAIDeck:True
SVar:RemRandomDeck:True
SVar:Picture:http://www.wizards.com/global/images/magic/general/leonin_arbiter.jpg
Oracle:Players can't search libraries. Any player may pay {2} for that player to ignore this effect until end of turn.