mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 18:28:00 +00:00
Merge branch 'gildedrake' into 'master'
Fix AI refusing Gilded Drake trigger when no targets See merge request core-developers/forge!5607
This commit is contained in:
@@ -30,7 +30,7 @@ public class ControlExchangeAi extends SpellAbilityAi {
|
||||
sa.resetTargets();
|
||||
|
||||
CardCollection list =
|
||||
CardLists.getValidCards(AiAttackController.choosePreferredDefenderPlayer(ai).getCardsIn(ZoneType.Battlefield), tgt.getValidTgts(), ai, sa.getHostCard(), sa);
|
||||
CardLists.getValidCards(ai.getOpponents().getCardsIn(ZoneType.Battlefield), tgt.getValidTgts(), ai, sa.getHostCard(), sa);
|
||||
// AI won't try to grab cards that are filtered out of AI decks on purpose
|
||||
list = CardLists.filter(list, new Predicate<Card>() {
|
||||
@Override
|
||||
@@ -65,7 +65,7 @@ public class ControlExchangeAi extends SpellAbilityAi {
|
||||
}
|
||||
} else {
|
||||
if (mandatory) {
|
||||
return chkAIDrawback(sa, aiPlayer);
|
||||
return chkAIDrawback(sa, aiPlayer) || sa.isTargetNumberValid();
|
||||
} else {
|
||||
return canPlayAI(aiPlayer, sa);
|
||||
}
|
||||
@@ -97,8 +97,12 @@ public class ControlExchangeAi extends SpellAbilityAi {
|
||||
|
||||
Card best = ComputerUtilCard.getBestAI(list);
|
||||
|
||||
// add best Target:
|
||||
// do it here already even if we don't want to play this as it might be for targeting a trigger
|
||||
sa.getTargets().add(best);
|
||||
|
||||
// if Param has Defined, check if the best Target is better than the Defined
|
||||
if (sa.hasParam("Defined")) {
|
||||
if (sa.hasParam("Defined") && (!sa.isTrigger() || sa.getRootAbility().isOptionalTrigger())) {
|
||||
final Card object = AbilityUtils.getDefinedCards(sa.getHostCard(), sa.getParam("Defined"), sa).get(0);
|
||||
// TODO add evaluate Land if able
|
||||
final Card realBest = ComputerUtilCard.getBestAI(Lists.newArrayList(best, object));
|
||||
@@ -109,9 +113,6 @@ public class ControlExchangeAi extends SpellAbilityAi {
|
||||
}
|
||||
}
|
||||
|
||||
// add best Target
|
||||
sa.getTargets().add(best);
|
||||
|
||||
// second target needed (the AI's own worst)
|
||||
if ("TrigTwoTargets".equals(sa.getParam("AILogic"))) {
|
||||
return doTrigTwoTargetsLogic(aiPlayer, sa, best);
|
||||
|
||||
@@ -37,7 +37,7 @@ public class CountersPutAllAi extends SpellAbilityAi {
|
||||
final boolean curse = sa.isCurse();
|
||||
final TargetRestrictions tgt = sa.getTargetRestrictions();
|
||||
|
||||
if ("OwnCreatsAndOtherPWs".equals(sa.getParam("AILogic"))) {
|
||||
if ("OwnCreatsAndOtherPWs".equals(logic)) {
|
||||
hList = CardLists.getValidCards(ai.getWeakestOpponent().getCardsIn(ZoneType.Battlefield), "Creature.YouCtrl,Planeswalker.YouCtrl+Other", source.getController(), source, sa);
|
||||
cList = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), "Creature.YouCtrl,Planeswalker.YouCtrl+Other", source.getController(), source, sa);
|
||||
} else {
|
||||
|
||||
@@ -94,7 +94,7 @@ public class DamageAllAi extends SpellAbilityAi {
|
||||
private Player determineOppToKill(Player ai, SpellAbility sa, Card source, int x) {
|
||||
// Attempt to determine which opponent can be finished off such that the most players
|
||||
// are killed at the same time, given X damage tops
|
||||
final String validP = sa.hasParam("ValidPlayers") ? sa.getParam("ValidPlayers") : "";
|
||||
final String validP = sa.getParamOrDefault("ValidPlayers", "");
|
||||
int aiLife = ai.getLife();
|
||||
Player bestOpp = null; // default opponent, if all else fails
|
||||
|
||||
@@ -125,7 +125,7 @@ public class DamageAllAi extends SpellAbilityAi {
|
||||
computerList.clear();
|
||||
}
|
||||
|
||||
final String validP = sa.hasParam("ValidPlayers") ? sa.getParam("ValidPlayers") : "";
|
||||
final String validP = sa.getParamOrDefault("ValidPlayers", "");
|
||||
// TODO: if damage is dependant on mana paid, maybe have X be human's max life
|
||||
// Don't kill yourself
|
||||
if (validP.equals("Player") && (ai.getLife() <= ComputerUtilCombat.predictDamageTo(ai, dmg, source, false))) {
|
||||
@@ -191,7 +191,7 @@ public class DamageAllAi extends SpellAbilityAi {
|
||||
@Override
|
||||
public boolean chkAIDrawback(SpellAbility sa, Player ai) {
|
||||
final Card source = sa.getHostCard();
|
||||
String validP = "";
|
||||
final String validP = sa.getParamOrDefault("ValidPlayers", "");
|
||||
|
||||
final String damage = sa.getParam("NumDmg");
|
||||
int dmg;
|
||||
@@ -203,10 +203,6 @@ public class DamageAllAi extends SpellAbilityAi {
|
||||
dmg = AbilityUtils.calculateAmount(source, damage, sa);
|
||||
}
|
||||
|
||||
if (sa.hasParam("ValidPlayers")) {
|
||||
validP = sa.getParam("ValidPlayers");
|
||||
}
|
||||
|
||||
// Evaluate creatures getting killed
|
||||
Player enemy = ai.getWeakestOpponent();
|
||||
final CardCollection humanList = getKillableCreatures(sa, enemy, dmg);
|
||||
@@ -251,7 +247,7 @@ public class DamageAllAi extends SpellAbilityAi {
|
||||
*/
|
||||
private CardCollection getKillableCreatures(final SpellAbility sa, final Player player, final int dmg) {
|
||||
final Card source = sa.getHostCard();
|
||||
String validC = sa.hasParam("ValidCards") ? sa.getParam("ValidCards") : "";
|
||||
String validC = sa.getParamOrDefault("ValidCards", "");
|
||||
|
||||
// TODO: X may be something different than X paid
|
||||
CardCollection list =
|
||||
@@ -273,7 +269,7 @@ public class DamageAllAi extends SpellAbilityAi {
|
||||
@Override
|
||||
protected boolean doTriggerAINoCost(Player ai, SpellAbility sa, boolean mandatory) {
|
||||
final Card source = sa.getHostCard();
|
||||
String validP = "";
|
||||
final String validP = sa.getParamOrDefault("ValidPlayers", "");
|
||||
|
||||
final String damage = sa.getParam("NumDmg");
|
||||
int dmg;
|
||||
@@ -286,10 +282,6 @@ public class DamageAllAi extends SpellAbilityAi {
|
||||
dmg = AbilityUtils.calculateAmount(source, damage, sa);
|
||||
}
|
||||
|
||||
if (sa.hasParam("ValidPlayers")) {
|
||||
validP = sa.getParam("ValidPlayers");
|
||||
}
|
||||
|
||||
// Evaluate creatures getting killed
|
||||
Player enemy = ai.getWeakestOpponent();
|
||||
final CardCollection humanList = getKillableCreatures(sa, enemy, dmg);
|
||||
|
||||
@@ -81,10 +81,7 @@ public class DestroyAllAi extends SpellAbilityAi {
|
||||
return true; // e.g. Tetzimoc, Primal Death, where we want to cast the permanent even if the removal trigger does nothing
|
||||
}
|
||||
|
||||
String valid = "";
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
valid = sa.getParam("ValidCards");
|
||||
}
|
||||
String valid = sa.getParamOrDefault("ValidCards", "");
|
||||
|
||||
if (valid.contains("X") && sa.getSVar("X").equals("Count$xPaid")) {
|
||||
// Set PayX here to maximum value.
|
||||
|
||||
@@ -33,7 +33,6 @@ public class PumpAllAi extends PumpAiBase {
|
||||
*/
|
||||
@Override
|
||||
protected boolean canPlayAI(final Player ai, final SpellAbility sa) {
|
||||
String valid = "";
|
||||
final Card source = sa.getHostCard();
|
||||
final Game game = ai.getGame();
|
||||
final Combat combat = game.getCombat();
|
||||
@@ -78,9 +77,7 @@ public class PumpAllAi extends PumpAiBase {
|
||||
final List<String> keywords = sa.hasParam("KW") ? Arrays.asList(sa.getParam("KW").split(" & ")) : new ArrayList<>();
|
||||
final PhaseType phase = game.getPhaseHandler().getPhase();
|
||||
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
valid = sa.getParam("ValidCards");
|
||||
}
|
||||
final String valid = sa.getParamOrDefault("ValidCards", "");
|
||||
|
||||
CardCollection comp = CardLists.getValidCards(ai.getCardsIn(ZoneType.Battlefield), valid, source.getController(), source, sa);
|
||||
CardCollection human = CardLists.getValidCards(opp.getCardsIn(ZoneType.Battlefield), valid, source.getController(), source, sa);
|
||||
|
||||
@@ -26,11 +26,7 @@ public class RegenerateAllAi extends SpellAbilityAi {
|
||||
final Game game = ai.getGame();
|
||||
|
||||
// filter AIs battlefield by what I can target
|
||||
String valid = "";
|
||||
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
valid = sa.getParam("ValidCards");
|
||||
}
|
||||
final String valid = sa.getParamOrDefault("ValidCards", "");
|
||||
|
||||
CardCollectionView list = game.getCardsIn(ZoneType.Battlefield);
|
||||
list = CardLists.getValidCards(list, valid.split(","), hostCard.getController(), hostCard, sa);
|
||||
|
||||
@@ -34,10 +34,7 @@ public class TapAllAi extends SpellAbilityAi {
|
||||
return false;
|
||||
}
|
||||
|
||||
String valid = "";
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
valid = sa.getParam("ValidCards");
|
||||
}
|
||||
final String valid = sa.getParamOrDefault("ValidCards", "");
|
||||
|
||||
CardCollectionView validTappables = game.getCardsIn(ZoneType.Battlefield);
|
||||
|
||||
@@ -99,10 +96,7 @@ public class TapAllAi extends SpellAbilityAi {
|
||||
protected boolean doTriggerAINoCost(final Player ai, SpellAbility sa, boolean mandatory) {
|
||||
final Card source = sa.getHostCard();
|
||||
|
||||
String valid = "";
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
valid = sa.getParam("ValidCards");
|
||||
}
|
||||
final String valid = sa.getParamOrDefault("ValidCards", "");
|
||||
|
||||
CardCollectionView validTappables = getTapAllTargets(valid, source, sa);
|
||||
|
||||
|
||||
@@ -24,10 +24,7 @@ public class TwoPilesAi extends SpellAbilityAi {
|
||||
zone = ZoneType.smartValueOf(sa.getParam("Zone"));
|
||||
}
|
||||
|
||||
String valid = "";
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
valid = sa.getParam("ValidCards");
|
||||
}
|
||||
final String valid = sa.getParamOrDefault("ValidCards", "");
|
||||
|
||||
final Player opp = AiAttackController.choosePreferredDefenderPlayer(ai);
|
||||
|
||||
|
||||
@@ -24,11 +24,8 @@ public class UntapAllAi extends SpellAbilityAi {
|
||||
&& source.getGame().getPhaseHandler().getPhase().isBefore(PhaseType.COMBAT_END)) {
|
||||
return false;
|
||||
}
|
||||
String valid = "";
|
||||
CardCollectionView list = CardLists.filter(aiPlayer.getGame().getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.TAPPED);
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
valid = sa.getParam("ValidCards");
|
||||
}
|
||||
final String valid = sa.getParamOrDefault("ValidCards", "");
|
||||
list = CardLists.getValidCards(list, valid.split(","), source.getController(), source, sa);
|
||||
// don't untap if only opponent benefits
|
||||
PlayerCollection goodControllers = aiPlayer.getAllies();
|
||||
|
||||
@@ -121,11 +121,7 @@ public class AnimateAllEffect extends AnimateEffectBase {
|
||||
sVars.addAll(Arrays.asList(sa.getParam("sVars").split(",")));
|
||||
}
|
||||
|
||||
String valid = "";
|
||||
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
valid = sa.getParam("ValidCards");
|
||||
}
|
||||
final String valid = sa.getParamOrDefault("ValidCards", "");
|
||||
|
||||
CardCollectionView list;
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ public class CountersPutAllEffect extends SpellAbilityEffect {
|
||||
|
||||
final CounterType cType = CounterType.getType(sa.getParam("CounterType"));
|
||||
final int amount = AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("CounterNum"), sa);
|
||||
final String zone = sa.hasParam("ValidZone") ? sa.getParam("ValidZone") : "Battlefield";
|
||||
final String zone = sa.getParamOrDefault("ValidZone", "Battlefield");
|
||||
|
||||
sb.append("Put ").append(amount).append(" ").append(cType.getName()).append(" counter");
|
||||
if (amount != 1) {
|
||||
|
||||
@@ -22,7 +22,7 @@ public class CountersRemoveAllEffect extends SpellAbilityEffect {
|
||||
|
||||
final CounterType cType = CounterType.getType(sa.getParam("CounterType"));
|
||||
final int amount = AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("CounterNum"), sa);
|
||||
final String zone = sa.hasParam("ValidZone") ? sa.getParam("ValidZone") : "Battlefield";
|
||||
final String zone = sa.getParamOrDefault("ValidZone", "Battlefield");
|
||||
String amountString = Integer.toString(amount);
|
||||
|
||||
if (sa.hasParam("AllCounters")) {
|
||||
|
||||
@@ -22,10 +22,7 @@ public class DamageAllEffect extends DamageBaseEffect {
|
||||
protected String getStackDescription(SpellAbility sa) {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
|
||||
String desc = "";
|
||||
if (sa.hasParam("ValidDescription")) {
|
||||
desc = sa.getParam("ValidDescription");
|
||||
}
|
||||
final String desc = sa.getParamOrDefault("ValidDescription", "");
|
||||
|
||||
final String damage = sa.getParam("NumDmg");
|
||||
final int dmg = AbilityUtils.calculateAmount(sa.getHostCard(), damage, sa);
|
||||
@@ -63,11 +60,7 @@ public class DamageAllEffect extends DamageBaseEffect {
|
||||
//Remember params from this effect have been moved to dealDamage in GameAction
|
||||
Player targetPlayer = sa.getTargets().getFirstTargetedPlayer();
|
||||
|
||||
String players = "";
|
||||
|
||||
if (sa.hasParam("ValidPlayers")) {
|
||||
players = sa.getParam("ValidPlayers");
|
||||
}
|
||||
final String players = sa.getParamOrDefault("ValidPlayers", "");
|
||||
|
||||
CardCollectionView list;
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
|
||||
@@ -15,11 +15,7 @@ public class DamagePreventAllEffect extends DamagePreventEffectBase {
|
||||
final Game game = sa.getActivatingPlayer().getGame();
|
||||
final int numDam = AbilityUtils.calculateAmount(source, sa.getParam("Amount"), sa);
|
||||
|
||||
String players = "";
|
||||
|
||||
if (sa.hasParam("ValidPlayers")) {
|
||||
players = sa.getParam("ValidPlayers");
|
||||
}
|
||||
final String players = sa.getParamOrDefault("ValidPlayers", "");
|
||||
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
CardCollectionView list = game.getCardsIn(ZoneType.Battlefield);
|
||||
|
||||
@@ -24,7 +24,6 @@ public class DestroyAllEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
protected String getStackDescription(SpellAbility sa) {
|
||||
|
||||
if (sa.hasParam("SpellDescription")) {
|
||||
return sa.getParam("SpellDescription");
|
||||
}
|
||||
@@ -51,11 +50,7 @@ public class DestroyAllEffect extends SpellAbilityEffect {
|
||||
|
||||
Player targetPlayer = sa.getTargets().getFirstTargetedPlayer();
|
||||
|
||||
String valid = "";
|
||||
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
valid = sa.getParam("ValidCards");
|
||||
}
|
||||
String valid = sa.getParamOrDefault("ValidCards", "");
|
||||
|
||||
// Ugh. If calculateAmount needs to be called with DestroyAll it _needs_
|
||||
// to use the X variable
|
||||
|
||||
@@ -72,7 +72,7 @@ public class DigEffect extends SpellAbilityEffect {
|
||||
int libraryPosition = sa.hasParam("LibraryPosition") ? Integer.parseInt(sa.getParam("LibraryPosition")) : -1;
|
||||
int destZone1ChangeNum = 1;
|
||||
final boolean mitosis = sa.hasParam("Mitosis");
|
||||
String changeValid = sa.hasParam("ChangeValid") ? sa.getParam("ChangeValid") : "";
|
||||
String changeValid = sa.getParamOrDefault("ChangeValid", "");
|
||||
final boolean anyNumber = sa.hasParam("AnyNumber");
|
||||
|
||||
final int libraryPosition2 = sa.hasParam("LibraryPosition2") ? Integer.parseInt(sa.getParam("LibraryPosition2")) : -1;
|
||||
@@ -86,7 +86,7 @@ public class DigEffect extends SpellAbilityEffect {
|
||||
// These parameters are used to indicate that a dialog box must be show to the player asking if the player wants to proceed
|
||||
// with an optional ability, otherwise the optional ability is skipped.
|
||||
final boolean mayBeSkipped = sa.hasParam("PromptToSkipOptionalAbility");
|
||||
final String optionalAbilityPrompt = sa.hasParam("OptionalAbilityPrompt") ? sa.getParam("OptionalAbilityPrompt") : "";
|
||||
final String optionalAbilityPrompt = sa.getParamOrDefault("OptionalAbilityPrompt", "");
|
||||
|
||||
boolean remZone1 = false;
|
||||
boolean remZone2 = false;
|
||||
|
||||
@@ -35,7 +35,7 @@ public class DigMultipleEffect extends SpellAbilityEffect {
|
||||
int libraryPosition = sa.hasParam("LibraryPosition") ? Integer.parseInt(sa.getParam("LibraryPosition")) : -1;
|
||||
final int libraryPosition2 = sa.hasParam("LibraryPosition2") ? Integer.parseInt(sa.getParam("LibraryPosition2")) : -1;
|
||||
|
||||
String changeValid = sa.hasParam("ChangeValid") ? sa.getParam("ChangeValid") : "";
|
||||
String changeValid = sa.getParamOrDefault("ChangeValid", "");
|
||||
boolean chooseOptional = sa.hasParam("Optional");
|
||||
|
||||
CardZoneTable table = new CardZoneTable();
|
||||
|
||||
@@ -60,7 +60,7 @@ public class FlipCoinEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
final boolean noCall = sa.hasParam("NoCall");
|
||||
String varName = sa.hasParam("SaveNumFlipsToSVar") ? sa.getParam("SaveNumFlipsToSVar") : "X";
|
||||
String varName = sa.getParamOrDefault("SaveNumFlipsToSVar", "X");
|
||||
boolean victory = false;
|
||||
int amount = 1;
|
||||
if (sa.hasParam("Amount")) {
|
||||
|
||||
@@ -27,7 +27,7 @@ public class ManifestEffect extends SpellAbilityEffect {
|
||||
final int amount = sa.hasParam("Amount") ? AbilityUtils.calculateAmount(source,
|
||||
sa.getParam("Amount"), sa) : 1;
|
||||
// Most commonly "defined" is Top of Library
|
||||
final String defined = sa.hasParam("Defined") ? sa.getParam("Defined") : "TopOfLibrary";
|
||||
final String defined = sa.getParamOrDefault("Defined", "TopOfLibrary");
|
||||
|
||||
CardCollectionView lastStateBattlefield = game.copyLastStateBattlefield();
|
||||
CardCollectionView lastStateGraveyard = game.copyLastStateGraveyard();
|
||||
|
||||
@@ -31,12 +31,8 @@ public class MultiplePilesEffect extends SpellAbilityEffect {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
|
||||
final List<Player> tgtPlayers = getTargetPlayers(sa);
|
||||
|
||||
String valid = "";
|
||||
String piles = sa.getParam("Piles");
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
valid = sa.getParam("ValidCards");
|
||||
}
|
||||
final String valid = sa.getParamOrDefault("ValidCards", "");
|
||||
|
||||
sb.append("Separate all ").append(valid).append(" cards ");
|
||||
|
||||
@@ -58,10 +54,7 @@ public class MultiplePilesEffect extends SpellAbilityEffect {
|
||||
final int piles = Integer.parseInt(sa.getParam("Piles"));
|
||||
final Map<Player, List<CardCollectionView>> record = Maps.newHashMap();
|
||||
|
||||
String valid = "";
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
valid = sa.getParam("ValidCards");
|
||||
}
|
||||
final String valid = sa.getParamOrDefault("ValidCards", "");
|
||||
|
||||
final TargetRestrictions tgt = sa.getTargetRestrictions();
|
||||
final List<Player> tgtPlayers = getTargetPlayers(sa);
|
||||
|
||||
@@ -37,8 +37,8 @@ public class PeekAndRevealEffect extends SpellAbilityEffect {
|
||||
Card source = sa.getHostCard();
|
||||
final boolean rememberRevealed = sa.hasParam("RememberRevealed");
|
||||
final boolean imprintRevealed = sa.hasParam("ImprintRevealed");
|
||||
String revealValid = sa.hasParam("RevealValid") ? sa.getParam("RevealValid") : "Card";
|
||||
String peekAmount = sa.hasParam("PeekAmount") ? sa.getParam("PeekAmount") : "1";
|
||||
String revealValid = sa.getParamOrDefault("RevealValid", "Card");
|
||||
String peekAmount = sa.getParamOrDefault("PeekAmount", "1");
|
||||
int numPeek = AbilityUtils.calculateAmount(sa.getHostCard(), peekAmount, sa);
|
||||
|
||||
// Right now, this is only used on your own library.
|
||||
|
||||
@@ -82,10 +82,7 @@ public class ProtectAllEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
// Deal with permanents
|
||||
String valid = "";
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
valid = sa.getParam("ValidCards");
|
||||
}
|
||||
final String valid = sa.getParamOrDefault("ValidCards", "");
|
||||
if (!valid.equals("")) {
|
||||
CardCollectionView list = game.getCardsIn(ZoneType.Battlefield);
|
||||
list = CardLists.getValidCards(list, valid, sa.getActivatingPlayer(), host, sa);
|
||||
@@ -113,10 +110,7 @@ public class ProtectAllEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
// Deal with Players
|
||||
String players = "";
|
||||
if (sa.hasParam("ValidPlayers")) {
|
||||
players = sa.getParam("ValidPlayers");
|
||||
}
|
||||
final String players = sa.getParamOrDefault("ValidPlayers", "");
|
||||
if (!players.equals("")) {
|
||||
final List<Player> playerList = AbilityUtils.getDefinedPlayers(host, players, sa);
|
||||
for (final Player player : playerList) {
|
||||
|
||||
@@ -137,10 +137,7 @@ public class PumpAllEffect extends SpellAbilityEffect {
|
||||
list = tgtPlayers.getCardsIn(affectedZones);
|
||||
}
|
||||
|
||||
String valid = "";
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
valid = sa.getParam("ValidCards");
|
||||
}
|
||||
final String valid = sa.getParamOrDefault("ValidCards", "");
|
||||
|
||||
list = AbilityUtils.filterListByType(list, valid, sa);
|
||||
|
||||
|
||||
@@ -26,11 +26,7 @@ public class RegenerateAllEffect extends RegenerateBaseEffect {
|
||||
public void resolve(SpellAbility sa) {
|
||||
final Card hostCard = sa.getHostCard();
|
||||
final Game game = hostCard.getGame();
|
||||
String valid = "";
|
||||
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
valid = sa.getParam("ValidCards");
|
||||
}
|
||||
final String valid = sa.getParamOrDefault("ValidCards", "");
|
||||
|
||||
CardCollectionView list = game.getCardsIn(ZoneType.Battlefield);
|
||||
list = CardLists.getValidCards(list, valid.split(","), hostCard.getController(), hostCard, sa);
|
||||
|
||||
@@ -76,11 +76,7 @@ public class RepeatEffect extends SpellAbilityEffect {
|
||||
|
||||
if (sa.hasParam("RepeatPresent")) {
|
||||
final String repeatPresent = sa.getParam("RepeatPresent");
|
||||
|
||||
String repeatCompare = "GE1";
|
||||
if (sa.hasParam("RepeatCompare")) {
|
||||
repeatCompare = sa.getParam("RepeatCompare");
|
||||
}
|
||||
String repeatCompare = sa.getParamOrDefault("RepeatCompare", "GE1");
|
||||
|
||||
CardCollectionView list;
|
||||
if (sa.hasParam("RepeatDefined")) {
|
||||
|
||||
@@ -243,7 +243,6 @@ public class SacrificeEffect extends SpellAbilityEffect {
|
||||
|
||||
removeCandidates(validTargets, validTargetsList, union, index + 1, included, amount);
|
||||
|
||||
|
||||
CardCollection candidate = validTargetsList.get(index);
|
||||
if (candidate.isEmpty()) {
|
||||
return;
|
||||
|
||||
@@ -28,8 +28,7 @@ public class TapOrUntapAllEffect extends SpellAbilityEffect {
|
||||
|
||||
if (sa.hasParam("ValidMessage")) {
|
||||
sb.append(sa.getParam("ValidMessage"));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
final List<Card> tgtCards = getTargetCards(sa);
|
||||
sb.append(StringUtils.join(tgtCards, ", "));
|
||||
}
|
||||
|
||||
@@ -26,10 +26,7 @@ public class TwoPilesEffect extends SpellAbilityEffect {
|
||||
|
||||
final List<Player> tgtPlayers = getTargetPlayers(sa);
|
||||
|
||||
String valid = "";
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
valid = sa.getParam("ValidCards");
|
||||
}
|
||||
final String valid = sa.getParamOrDefault("ValidCards", "");
|
||||
|
||||
sb.append("Separate all ").append(valid).append(" cards ");
|
||||
|
||||
@@ -54,10 +51,7 @@ public class TwoPilesEffect extends SpellAbilityEffect {
|
||||
zone = ZoneType.smartValueOf(sa.getParam("Zone"));
|
||||
}
|
||||
|
||||
String valid = "Card";
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
valid = sa.getParam("ValidCards");
|
||||
}
|
||||
final String valid = sa.getParamOrDefault("ValidCards", "");
|
||||
|
||||
final TargetRestrictions tgt = sa.getTargetRestrictions();
|
||||
final List<Player> tgtPlayers = getTargetPlayers(sa);
|
||||
|
||||
@@ -24,15 +24,9 @@ public class UntapAllEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
public void resolve(SpellAbility sa) {
|
||||
final Card card = sa.getHostCard();
|
||||
|
||||
String valid = "";
|
||||
CardCollectionView list;
|
||||
|
||||
List<Player> tgtPlayers = getTargetPlayers(sa);
|
||||
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
valid = sa.getParam("ValidCards");
|
||||
}
|
||||
final String valid = sa.getParamOrDefault("ValidCards", "");
|
||||
|
||||
if (!sa.usesTargeting() && !sa.hasParam("Defined")) {
|
||||
list = sa.getActivatingPlayer().getGame().getCardsIn(ZoneType.Battlefield);
|
||||
|
||||
@@ -102,8 +102,7 @@ public abstract class AchievementCollection implements Iterable<Achievement> {
|
||||
add(new TotalMatchWins(100, 250, 500, 1000));
|
||||
if (isLimitedFormat) { //make need for speed goal more realistic for limited formats
|
||||
add(new NeedForSpeed(8, 6, 4, 2));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
add(new NeedForSpeed(5, 3, 1, 0));
|
||||
}
|
||||
add(new Overkill(-25, -50, -100, -200));
|
||||
@@ -114,8 +113,7 @@ public abstract class AchievementCollection implements Iterable<Achievement> {
|
||||
add(new ManaScrewed());
|
||||
if (isLimitedFormat) { //lower gold and mythic thresholds based on smaller decks
|
||||
add(new ManaFlooded(8, 11, 14, 17));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
add(new ManaFlooded(8, 12, 18, 24));
|
||||
}
|
||||
add(new RagsToRiches());
|
||||
|
||||
Reference in New Issue
Block a user