mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 03:08:02 +00:00
Removing getXXXXPlayer calls - they mostly refer to AI now, so that I get current AI player from sa activatingPlayer
This commit is contained in:
@@ -2436,7 +2436,7 @@ public class AbilityFactory {
|
||||
* @return a {@link java.util.ArrayList} object.
|
||||
* @since 1.0.15
|
||||
*/
|
||||
public static ArrayList<Object> predictThreatenedObjects(final AbilityFactory saviourAf) {
|
||||
public static ArrayList<Object> predictThreatenedObjects(final Player aiPlayer, final AbilityFactory saviourAf) {
|
||||
final ArrayList<Object> objects = new ArrayList<Object>();
|
||||
if (AllZone.getStack().size() == 0) {
|
||||
return objects;
|
||||
@@ -2444,7 +2444,7 @@ public class AbilityFactory {
|
||||
|
||||
// check stack for something that will kill this
|
||||
final SpellAbility topStack = AllZone.getStack().peekAbility();
|
||||
objects.addAll(AbilityFactory.predictThreatenedObjects(saviourAf, topStack));
|
||||
objects.addAll(AbilityFactory.predictThreatenedObjects(aiPlayer, saviourAf, topStack));
|
||||
|
||||
return objects;
|
||||
}
|
||||
@@ -2461,7 +2461,7 @@ public class AbilityFactory {
|
||||
* @return a {@link java.util.ArrayList} object.
|
||||
* @since 1.0.15
|
||||
*/
|
||||
public static ArrayList<Object> predictThreatenedObjects(final AbilityFactory saviourAf, final SpellAbility topStack) {
|
||||
public static ArrayList<Object> predictThreatenedObjects(final Player aiPlayer, final AbilityFactory saviourAf, final SpellAbility topStack) {
|
||||
ArrayList<Object> objects = new ArrayList<Object>();
|
||||
final ArrayList<Object> threatened = new ArrayList<Object>();
|
||||
String saviourApi = "";
|
||||
@@ -2487,7 +2487,7 @@ public class AbilityFactory {
|
||||
if (threatParams.containsKey("Defined")) {
|
||||
objects = AbilityFactory.getDefinedObjects(source, threatParams.get("Defined"), topStack);
|
||||
} else if (threatParams.containsKey("ValidCards")) {
|
||||
List<Card> battleField = AllZone.getComputerPlayer().getCardsIn(ZoneType.Battlefield);
|
||||
List<Card> battleField = aiPlayer.getCardsIn(ZoneType.Battlefield);
|
||||
List<Card> cards = CardLists.getValidCards(battleField, threatParams.get("ValidCards").split(","), source.getController(), source);
|
||||
for (Card card : cards) {
|
||||
objects.add(card);
|
||||
@@ -2620,7 +2620,7 @@ public class AbilityFactory {
|
||||
}
|
||||
}
|
||||
|
||||
threatened.addAll(AbilityFactory.predictThreatenedObjects(saviourAf, topStack.getSubAbility()));
|
||||
threatened.addAll(AbilityFactory.predictThreatenedObjects(aiPlayer, saviourAf, topStack.getSubAbility()));
|
||||
return threatened;
|
||||
}
|
||||
|
||||
@@ -2861,7 +2861,7 @@ public class AbilityFactory {
|
||||
} else {
|
||||
sa.resolve();
|
||||
if (params.containsKey("PowerSink")) {
|
||||
GameActionUtil.doPowerSink(AllZone.getComputerPlayer());
|
||||
GameActionUtil.doPowerSink(payer);
|
||||
}
|
||||
AbilityFactory.resolveSubAbilities(sa);
|
||||
if (usedStack) {
|
||||
|
||||
@@ -92,7 +92,7 @@ public class AbilityFactoryAlterLife {
|
||||
|
||||
@Override
|
||||
public boolean canPlayAI() {
|
||||
return AbilityFactoryAlterLife.gainLifeCanPlayAI(this.af, this);
|
||||
return AbilityFactoryAlterLife.gainLifeCanPlayAI(getActivatingPlayer(), this.af, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -102,7 +102,7 @@ public class AbilityFactoryAlterLife {
|
||||
|
||||
@Override
|
||||
public boolean doTrigger(final boolean mandatory) {
|
||||
return AbilityFactoryAlterLife.gainLifeDoTriggerAI(this.af, this, mandatory);
|
||||
return AbilityFactoryAlterLife.gainLifeDoTriggerAI(getActivatingPlayer(), this.af, this, mandatory);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -142,7 +142,7 @@ public class AbilityFactoryAlterLife {
|
||||
// then call xCount with that card to properly calculate the
|
||||
// amount
|
||||
// Or choosing how many to sacrifice
|
||||
return AbilityFactoryAlterLife.gainLifeCanPlayAI(this.af, this);
|
||||
return AbilityFactoryAlterLife.gainLifeCanPlayAI(getActivatingPlayer(), this.af, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -153,9 +153,9 @@ public class AbilityFactoryAlterLife {
|
||||
@Override
|
||||
public boolean canPlayFromEffectAI(final boolean mandatory, final boolean withOutManaCost) {
|
||||
if (withOutManaCost) {
|
||||
return AbilityFactoryAlterLife.gainLifeDoTriggerAINoCost(af, this, mandatory);
|
||||
return AbilityFactoryAlterLife.gainLifeDoTriggerAINoCost(this.getActivatingPlayer(), af, this, mandatory);
|
||||
}
|
||||
return AbilityFactoryAlterLife.gainLifeDoTriggerAI(af, this, mandatory);
|
||||
return AbilityFactoryAlterLife.gainLifeDoTriggerAI(this.getActivatingPlayer(), af, this, mandatory);
|
||||
}
|
||||
|
||||
};
|
||||
@@ -204,7 +204,7 @@ public class AbilityFactoryAlterLife {
|
||||
// then call xCount with that card to properly calculate the
|
||||
// amount
|
||||
// Or choosing how many to sacrifice
|
||||
return AbilityFactoryAlterLife.gainLifeCanPlayAI(this.af, this);
|
||||
return AbilityFactoryAlterLife.gainLifeCanPlayAI(getActivatingPlayer(), this.af, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -219,7 +219,7 @@ public class AbilityFactoryAlterLife {
|
||||
|
||||
@Override
|
||||
public boolean doTrigger(final boolean mandatory) {
|
||||
return AbilityFactoryAlterLife.gainLifeDoTriggerAI(this.af, this, mandatory);
|
||||
return AbilityFactoryAlterLife.gainLifeDoTriggerAI(getActivatingPlayer(), this.af, this, mandatory);
|
||||
}
|
||||
}
|
||||
final SpellAbility dbGainLife = new DrawbackGainLife(abilityFactory.getHostCard(), abilityFactory.getAbTgt());
|
||||
@@ -293,12 +293,12 @@ public class AbilityFactoryAlterLife {
|
||||
* a {@link forge.card.spellability.SpellAbility} object.
|
||||
* @return a boolean.
|
||||
*/
|
||||
public static boolean gainLifeCanPlayAI(final AbilityFactory af, final SpellAbility sa) {
|
||||
public static boolean gainLifeCanPlayAI(final Player aiPlayer, final AbilityFactory af, final SpellAbility sa) {
|
||||
final Random r = MyRandom.getRandom();
|
||||
final HashMap<String, String> params = af.getMapParams();
|
||||
final Cost abCost = sa.getPayCosts();
|
||||
final Card source = sa.getSourceCard();
|
||||
final int life = AllZone.getComputerPlayer().getLife();
|
||||
final int life = aiPlayer.getLife();
|
||||
final String amountStr = params.get("LifeAmount");
|
||||
int lifeAmount = 0;
|
||||
if (amountStr.equals("X") && source.getSVar(amountStr).equals("Count$xPaid")) {
|
||||
@@ -351,7 +351,7 @@ public class AbilityFactoryAlterLife {
|
||||
}
|
||||
}
|
||||
|
||||
if (!AllZone.getComputerPlayer().canGainLife()) {
|
||||
if (!aiPlayer.canGainLife()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -377,8 +377,8 @@ public class AbilityFactoryAlterLife {
|
||||
final Target tgt = sa.getTarget();
|
||||
if (tgt != null) {
|
||||
tgt.resetTargets();
|
||||
if (sa.canTarget(AllZone.getComputerPlayer())) {
|
||||
tgt.addTarget(AllZone.getComputerPlayer());
|
||||
if (sa.canTarget(aiPlayer)) {
|
||||
tgt.addTarget(aiPlayer);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
@@ -405,13 +405,13 @@ public class AbilityFactoryAlterLife {
|
||||
* a boolean.
|
||||
* @return a boolean.
|
||||
*/
|
||||
public static boolean gainLifeDoTriggerAI(final AbilityFactory af, final SpellAbility sa, final boolean mandatory) {
|
||||
public static boolean gainLifeDoTriggerAI(final Player aiPlayer, final AbilityFactory af, final SpellAbility sa, final boolean mandatory) {
|
||||
if (!ComputerUtil.canPayCost(sa) && !mandatory) {
|
||||
// payment it's usually
|
||||
// not mandatory
|
||||
return false;
|
||||
}
|
||||
return gainLifeDoTriggerAINoCost(af, sa, mandatory);
|
||||
return gainLifeDoTriggerAINoCost(aiPlayer, af, sa, mandatory);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -427,7 +427,7 @@ public class AbilityFactoryAlterLife {
|
||||
* a boolean.
|
||||
* @return a boolean.
|
||||
*/
|
||||
public static boolean gainLifeDoTriggerAINoCost(final AbilityFactory af, final SpellAbility sa, final boolean mandatory) {
|
||||
public static boolean gainLifeDoTriggerAINoCost(final Player aiPlayer, final AbilityFactory af, final SpellAbility sa, final boolean mandatory) {
|
||||
|
||||
final HashMap<String, String> params = af.getMapParams();
|
||||
|
||||
@@ -437,10 +437,10 @@ public class AbilityFactoryAlterLife {
|
||||
final Target tgt = sa.getTarget();
|
||||
if (tgt != null) {
|
||||
tgt.resetTargets();
|
||||
if (sa.canTarget(AllZone.getComputerPlayer())) {
|
||||
tgt.addTarget(AllZone.getComputerPlayer());
|
||||
} else if (mandatory && sa.canTarget(AllZone.getHumanPlayer())) {
|
||||
tgt.addTarget(AllZone.getHumanPlayer());
|
||||
if (sa.canTarget(aiPlayer)) {
|
||||
tgt.addTarget(aiPlayer);
|
||||
} else if (mandatory && sa.canTarget(aiPlayer.getOpponent())) {
|
||||
tgt.addTarget(aiPlayer.getOpponent());
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
@@ -538,7 +538,7 @@ public class AbilityFactoryAlterLife {
|
||||
// then call xCount with that card to properly calculate the
|
||||
// amount
|
||||
// Or choosing how many to sacrifice
|
||||
return AbilityFactoryAlterLife.loseLifeCanPlayAI(this.af, this);
|
||||
return AbilityFactoryAlterLife.loseLifeCanPlayAI(getActivatingPlayer(), this.af, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -548,7 +548,7 @@ public class AbilityFactoryAlterLife {
|
||||
|
||||
@Override
|
||||
public boolean doTrigger(final boolean mandatory) {
|
||||
return AbilityFactoryAlterLife.loseLifeDoTriggerAI(this.af, this, mandatory);
|
||||
return AbilityFactoryAlterLife.loseLifeDoTriggerAI(getActivatingPlayer(), this.af, this, mandatory);
|
||||
}
|
||||
}
|
||||
final SpellAbility abLoseLife = new AbilityLoseLife(abilityFactory.getHostCard(), abilityFactory.getAbCost(),
|
||||
@@ -587,7 +587,7 @@ public class AbilityFactoryAlterLife {
|
||||
// then call xCount with that card to properly calculate the
|
||||
// amount
|
||||
// Or choosing how many to sacrifice
|
||||
return AbilityFactoryAlterLife.loseLifeCanPlayAI(this.af, this);
|
||||
return AbilityFactoryAlterLife.loseLifeCanPlayAI(getActivatingPlayer(), this.af, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -598,9 +598,9 @@ public class AbilityFactoryAlterLife {
|
||||
@Override
|
||||
public boolean canPlayFromEffectAI(final boolean mandatory, final boolean withOutManaCost) {
|
||||
if (withOutManaCost) {
|
||||
return AbilityFactoryAlterLife.loseLifeDoTriggerAINoCost(af, this, mandatory);
|
||||
return AbilityFactoryAlterLife.loseLifeDoTriggerAINoCost(getActivatingPlayer(), af, this, mandatory);
|
||||
}
|
||||
return AbilityFactoryAlterLife.loseLifeDoTriggerAI(af, this, mandatory);
|
||||
return AbilityFactoryAlterLife.loseLifeDoTriggerAI(getActivatingPlayer(), af, this, mandatory);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -648,7 +648,7 @@ public class AbilityFactoryAlterLife {
|
||||
// then call xCount with that card to properly calculate the
|
||||
// amount
|
||||
// Or choosing how many to sacrifice
|
||||
return AbilityFactoryAlterLife.loseLifeCanPlayAI(this.af, this);
|
||||
return AbilityFactoryAlterLife.loseLifeCanPlayAI(getActivatingPlayer(), this.af, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -658,12 +658,12 @@ public class AbilityFactoryAlterLife {
|
||||
|
||||
@Override
|
||||
public boolean chkAIDrawback() {
|
||||
return loseLifeDoTriggerAINoCost(this.af, this, false);
|
||||
return loseLifeDoTriggerAINoCost(getActivatingPlayer(), this.af, this, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doTrigger(final boolean mandatory) {
|
||||
return AbilityFactoryAlterLife.loseLifeDoTriggerAI(this.af, this, mandatory);
|
||||
return AbilityFactoryAlterLife.loseLifeDoTriggerAI(getActivatingPlayer(), this.af, this, mandatory);
|
||||
}
|
||||
}
|
||||
final SpellAbility dbLoseLife = new DrawbackLoseLife(abilityFactory.getHostCard(), abilityFactory.getAbTgt());
|
||||
@@ -731,7 +731,7 @@ public class AbilityFactoryAlterLife {
|
||||
* a {@link forge.card.spellability.SpellAbility} object.
|
||||
* @return a boolean.
|
||||
*/
|
||||
public static boolean loseLifeCanPlayAI(final AbilityFactory af, final SpellAbility sa) {
|
||||
public static boolean loseLifeCanPlayAI(final Player aiPlayer, final AbilityFactory af, final SpellAbility sa) {
|
||||
final Random r = MyRandom.getRandom();
|
||||
final Cost abCost = sa.getPayCosts();
|
||||
final Card source = sa.getSourceCard();
|
||||
@@ -773,11 +773,13 @@ public class AbilityFactoryAlterLife {
|
||||
}
|
||||
}
|
||||
|
||||
if (!AllZone.getHumanPlayer().canLoseLife()) {
|
||||
Player opp = aiPlayer.getOpponent();
|
||||
|
||||
if (!opp.canLoseLife()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (amount >= AllZone.getHumanPlayer().getLife()) {
|
||||
if (amount >= opp.getLife()) {
|
||||
priority = true; // killing the human should be done asap
|
||||
}
|
||||
|
||||
@@ -799,8 +801,8 @@ public class AbilityFactoryAlterLife {
|
||||
|
||||
if (sa.getTarget() != null) {
|
||||
tgt.resetTargets();
|
||||
if (sa.canTarget(AllZone.getHumanPlayer())) {
|
||||
sa.getTarget().addTarget(AllZone.getHumanPlayer());
|
||||
if (sa.canTarget(opp)) {
|
||||
sa.getTarget().addTarget(opp);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
@@ -827,11 +829,11 @@ public class AbilityFactoryAlterLife {
|
||||
* a boolean.
|
||||
* @return a boolean.
|
||||
*/
|
||||
public static boolean loseLifeDoTriggerAI(final AbilityFactory af, final SpellAbility sa, final boolean mandatory) {
|
||||
public static boolean loseLifeDoTriggerAI(final Player aiPlayer,final AbilityFactory af, final SpellAbility sa, final boolean mandatory) {
|
||||
if (!ComputerUtil.canPayCost(sa) && !mandatory) {
|
||||
return false;
|
||||
}
|
||||
return loseLifeDoTriggerAINoCost(af, sa, mandatory);
|
||||
return loseLifeDoTriggerAINoCost(aiPlayer, af, sa, mandatory);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -847,16 +849,16 @@ public class AbilityFactoryAlterLife {
|
||||
* a boolean.
|
||||
* @return a boolean.
|
||||
*/
|
||||
public static boolean loseLifeDoTriggerAINoCost(final AbilityFactory af, final SpellAbility sa, final boolean mandatory) {
|
||||
public static boolean loseLifeDoTriggerAINoCost(final Player aiPlayer, final AbilityFactory af, final SpellAbility sa, final boolean mandatory) {
|
||||
|
||||
final HashMap<String, String> params = af.getMapParams();
|
||||
|
||||
final Target tgt = sa.getTarget();
|
||||
if (tgt != null) {
|
||||
if (sa.canTarget(AllZone.getHumanPlayer())) {
|
||||
tgt.addTarget(AllZone.getHumanPlayer());
|
||||
} else if (mandatory && sa.canTarget(AllZone.getComputerPlayer())) {
|
||||
tgt.addTarget(AllZone.getComputerPlayer());
|
||||
if (sa.canTarget(aiPlayer.getOpponent())) {
|
||||
tgt.addTarget(aiPlayer.getOpponent());
|
||||
} else if (mandatory && sa.canTarget(aiPlayer)) {
|
||||
tgt.addTarget(aiPlayer);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
@@ -881,9 +883,9 @@ public class AbilityFactoryAlterLife {
|
||||
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa);
|
||||
}
|
||||
|
||||
if (!mandatory && tgtPlayers.contains(AllZone.getComputerPlayer())) {
|
||||
if (!mandatory && tgtPlayers.contains(aiPlayer)) {
|
||||
// For cards like Foul Imp, ETB you lose life
|
||||
if ((amount + 3) > AllZone.getComputerPlayer().getLife()) {
|
||||
if ((amount + 3) > aiPlayer.getLife()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -971,7 +973,7 @@ public class AbilityFactoryAlterLife {
|
||||
|
||||
@Override
|
||||
public boolean canPlayAI() {
|
||||
return AbilityFactoryAlterLife.poisonCanPlayAI(af, this);
|
||||
return AbilityFactoryAlterLife.poisonCanPlayAI(getActivatingPlayer(), af, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -981,7 +983,7 @@ public class AbilityFactoryAlterLife {
|
||||
|
||||
@Override
|
||||
public boolean doTrigger(final boolean mandatory) {
|
||||
return AbilityFactoryAlterLife.poisonDoTriggerAI(af, this, mandatory);
|
||||
return AbilityFactoryAlterLife.poisonDoTriggerAI(getActivatingPlayer(), af, this, mandatory);
|
||||
}
|
||||
}
|
||||
final SpellAbility abPoison = new AbilityPoison(af.getHostCard(), af.getAbCost(), af.getAbTgt());
|
||||
@@ -1014,7 +1016,7 @@ public class AbilityFactoryAlterLife {
|
||||
// then call xCount with that card to properly calculate the
|
||||
// amount
|
||||
// Or choosing how many to sacrifice
|
||||
return AbilityFactoryAlterLife.poisonCanPlayAI(af, this);
|
||||
return AbilityFactoryAlterLife.poisonCanPlayAI(getActivatingPlayer(), af, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1064,7 +1066,7 @@ public class AbilityFactoryAlterLife {
|
||||
// then call xCount with that card to properly calculate the
|
||||
// amount
|
||||
// Or choosing how many to sacrifice
|
||||
return AbilityFactoryAlterLife.poisonCanPlayAI(af, this);
|
||||
return AbilityFactoryAlterLife.poisonCanPlayAI(getActivatingPlayer(), af, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1079,7 +1081,7 @@ public class AbilityFactoryAlterLife {
|
||||
|
||||
@Override
|
||||
public boolean doTrigger(final boolean mandatory) {
|
||||
return AbilityFactoryAlterLife.poisonDoTriggerAI(af, this, mandatory);
|
||||
return AbilityFactoryAlterLife.poisonDoTriggerAI(getActivatingPlayer(), af, this, mandatory);
|
||||
}
|
||||
}
|
||||
final SpellAbility dbPoison = new DrawbackPoison(af.getHostCard(), af.getAbTgt());
|
||||
@@ -1100,7 +1102,7 @@ public class AbilityFactoryAlterLife {
|
||||
* a boolean.
|
||||
* @return a boolean.
|
||||
*/
|
||||
private static boolean poisonDoTriggerAI(final AbilityFactory af, final SpellAbility sa, final boolean mandatory) {
|
||||
private static boolean poisonDoTriggerAI(final Player aiPlayer,final AbilityFactory af, final SpellAbility sa, final boolean mandatory) {
|
||||
if (!ComputerUtil.canPayCost(sa) && !mandatory) {
|
||||
// payment it's usually
|
||||
// not mandatory
|
||||
@@ -1111,7 +1113,7 @@ public class AbilityFactoryAlterLife {
|
||||
|
||||
final Target tgt = sa.getTarget();
|
||||
if (tgt != null) {
|
||||
tgt.addTarget(AllZone.getHumanPlayer());
|
||||
tgt.addTarget(aiPlayer.getOpponent());
|
||||
} else {
|
||||
final ArrayList<Player> players = AbilityFactory.getDefinedPlayers(sa.getSourceCard(),
|
||||
params.get("Defined"), sa);
|
||||
@@ -1240,7 +1242,7 @@ public class AbilityFactoryAlterLife {
|
||||
* a {@link forge.card.spellability.SpellAbility} object.
|
||||
* @return a boolean.
|
||||
*/
|
||||
private static boolean poisonCanPlayAI(final AbilityFactory af, final SpellAbility sa) {
|
||||
private static boolean poisonCanPlayAI(final Player aiPlayer, final AbilityFactory af, final SpellAbility sa) {
|
||||
final Cost abCost = sa.getPayCosts();
|
||||
final Card source = sa.getSourceCard();
|
||||
final HashMap<String, String> params = af.getMapParams();
|
||||
@@ -1278,7 +1280,7 @@ public class AbilityFactoryAlterLife {
|
||||
|
||||
if (sa.getTarget() != null) {
|
||||
tgt.resetTargets();
|
||||
sa.getTarget().addTarget(AllZone.getHumanPlayer());
|
||||
sa.getTarget().addTarget(aiPlayer.getOpponent());
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -1320,7 +1322,7 @@ public class AbilityFactoryAlterLife {
|
||||
|
||||
@Override
|
||||
public boolean canPlayAI() {
|
||||
return AbilityFactoryAlterLife.setLifeCanPlayAI(af, this);
|
||||
return AbilityFactoryAlterLife.setLifeCanPlayAI(getActivatingPlayer(), af, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1330,7 +1332,7 @@ public class AbilityFactoryAlterLife {
|
||||
|
||||
@Override
|
||||
public boolean doTrigger(final boolean mandatory) {
|
||||
return AbilityFactoryAlterLife.setLifeDoTriggerAI(af, this, mandatory);
|
||||
return AbilityFactoryAlterLife.setLifeDoTriggerAI(getActivatingPlayer(), af, this, mandatory);
|
||||
}
|
||||
}
|
||||
final SpellAbility abSetLife = new AbilitySetLife(af.getHostCard(), af.getAbCost(), af.getAbTgt());
|
||||
@@ -1363,7 +1365,7 @@ public class AbilityFactoryAlterLife {
|
||||
// then call xCount with that card to properly calculate the
|
||||
// amount
|
||||
// Or choosing how many to sacrifice
|
||||
return AbilityFactoryAlterLife.setLifeCanPlayAI(af, this);
|
||||
return AbilityFactoryAlterLife.setLifeCanPlayAI(getActivatingPlayer(), af, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1413,7 +1415,7 @@ public class AbilityFactoryAlterLife {
|
||||
// then call xCount with that card to properly calculate the
|
||||
// amount
|
||||
// Or choosing how many to sacrifice
|
||||
return AbilityFactoryAlterLife.setLifeCanPlayAI(af, this);
|
||||
return AbilityFactoryAlterLife.setLifeCanPlayAI(getActivatingPlayer(), af, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1428,7 +1430,7 @@ public class AbilityFactoryAlterLife {
|
||||
|
||||
@Override
|
||||
public boolean doTrigger(final boolean mandatory) {
|
||||
return AbilityFactoryAlterLife.setLifeDoTriggerAI(af, this, mandatory);
|
||||
return AbilityFactoryAlterLife.setLifeDoTriggerAI(getActivatingPlayer(), af, this, mandatory);
|
||||
}
|
||||
}
|
||||
final SpellAbility dbSetLife = new DrawbackSetLife(af.getHostCard(), af.getAbTgt());
|
||||
@@ -1497,16 +1499,17 @@ public class AbilityFactoryAlterLife {
|
||||
* a {@link forge.card.spellability.SpellAbility} object.
|
||||
* @return a boolean.
|
||||
*/
|
||||
private static boolean setLifeCanPlayAI(final AbilityFactory af, final SpellAbility sa) {
|
||||
private static boolean setLifeCanPlayAI(final Player aiPlayer, final AbilityFactory af, final SpellAbility sa) {
|
||||
final Random r = MyRandom.getRandom();
|
||||
// Ability_Cost abCost = sa.getPayCosts();
|
||||
final Card source = sa.getSourceCard();
|
||||
final int life = AllZone.getComputerPlayer().getLife();
|
||||
final int hlife = AllZone.getHumanPlayer().getLife();
|
||||
final int myLife = aiPlayer.getLife();
|
||||
final Player opponent = aiPlayer.getOpponent();
|
||||
final int hlife = opponent.getLife();
|
||||
final HashMap<String, String> params = af.getMapParams();
|
||||
final String amountStr = params.get("LifeAmount");
|
||||
|
||||
if (!AllZone.getComputerPlayer().canGainLife()) {
|
||||
if (!aiPlayer.canGainLife()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1535,21 +1538,21 @@ public class AbilityFactoryAlterLife {
|
||||
if (tgt != null) {
|
||||
tgt.resetTargets();
|
||||
if (tgt.canOnlyTgtOpponent()) {
|
||||
tgt.addTarget(AllZone.getHumanPlayer());
|
||||
tgt.addTarget(opponent);
|
||||
// if we can only target the human, and the Human's life would
|
||||
// go up, don't play it.
|
||||
// possibly add a combo here for Magister Sphinx and Higedetsu's
|
||||
// (sp?) Second Rite
|
||||
if ((amount > hlife) || !AllZone.getHumanPlayer().canLoseLife()) {
|
||||
if ((amount > hlife) || !opponent.canLoseLife()) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
if ((amount > life) && (life <= 10)) {
|
||||
tgt.addTarget(AllZone.getComputerPlayer());
|
||||
if ((amount > myLife) && (myLife <= 10)) {
|
||||
tgt.addTarget(aiPlayer);
|
||||
} else if (hlife > amount) {
|
||||
tgt.addTarget(AllZone.getHumanPlayer());
|
||||
} else if (amount > life) {
|
||||
tgt.addTarget(AllZone.getComputerPlayer());
|
||||
tgt.addTarget(opponent);
|
||||
} else if (amount > myLife) {
|
||||
tgt.addTarget(aiPlayer);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
@@ -1558,19 +1561,19 @@ public class AbilityFactoryAlterLife {
|
||||
if (params.containsKey("Each") && params.get("Defined").equals("Each")) {
|
||||
if (amount == 0) {
|
||||
return false;
|
||||
} else if (life > amount) { // will decrease computer's life
|
||||
if ((life < 5) || ((life - amount) > (hlife - amount))) {
|
||||
} else if (myLife > amount) { // will decrease computer's life
|
||||
if ((myLife < 5) || ((myLife - amount) > (hlife - amount))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (amount < life) {
|
||||
if (amount < myLife) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// if life is in danger, always activate
|
||||
if ((life < 3) && (amount > life)) {
|
||||
if ((myLife < 3) && (amount > myLife)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1590,9 +1593,10 @@ public class AbilityFactoryAlterLife {
|
||||
* a boolean.
|
||||
* @return a boolean.
|
||||
*/
|
||||
private static boolean setLifeDoTriggerAI(final AbilityFactory af, final SpellAbility sa, final boolean mandatory) {
|
||||
final int life = AllZone.getComputerPlayer().getLife();
|
||||
final int hlife = AllZone.getHumanPlayer().getLife();
|
||||
private static boolean setLifeDoTriggerAI(final Player aiPlayer, final AbilityFactory af, final SpellAbility sa, final boolean mandatory) {
|
||||
final int myLife = aiPlayer.getLife();
|
||||
final Player opponent = aiPlayer.getOpponent();
|
||||
final int hlife = opponent.getLife();
|
||||
final Card source = sa.getSourceCard();
|
||||
final HashMap<String, String> params = af.getMapParams();
|
||||
final String amountStr = params.get("LifeAmount");
|
||||
@@ -1613,7 +1617,7 @@ public class AbilityFactoryAlterLife {
|
||||
}
|
||||
|
||||
if (source.getName().equals("Eternity Vessel")
|
||||
&& (AllZoneUtil.isCardInPlay("Vampire Hexmage", AllZone.getHumanPlayer()) || (source
|
||||
&& (AllZoneUtil.isCardInPlay("Vampire Hexmage", opponent) || (source
|
||||
.getCounters(Counters.CHARGE) == 0))) {
|
||||
return false;
|
||||
}
|
||||
@@ -1625,14 +1629,14 @@ public class AbilityFactoryAlterLife {
|
||||
if (tgt != null) {
|
||||
tgt.resetTargets();
|
||||
if (tgt.canOnlyTgtOpponent()) {
|
||||
tgt.addTarget(AllZone.getHumanPlayer());
|
||||
tgt.addTarget(opponent);
|
||||
} else {
|
||||
if ((amount > life) && (life <= 10)) {
|
||||
tgt.addTarget(AllZone.getComputerPlayer());
|
||||
if ((amount > myLife) && (myLife <= 10)) {
|
||||
tgt.addTarget(aiPlayer);
|
||||
} else if (hlife > amount) {
|
||||
tgt.addTarget(AllZone.getHumanPlayer());
|
||||
} else if (amount > life) {
|
||||
tgt.addTarget(AllZone.getComputerPlayer());
|
||||
tgt.addTarget(opponent);
|
||||
} else if (amount > myLife) {
|
||||
tgt.addTarget(aiPlayer);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
@@ -1714,7 +1718,7 @@ public class AbilityFactoryAlterLife {
|
||||
|
||||
@Override
|
||||
public boolean canPlayAI() {
|
||||
return AbilityFactoryAlterLife.exchangeLifeCanPlayAI(af, this);
|
||||
return AbilityFactoryAlterLife.exchangeLifeCanPlayAI(getActivatingPlayer(), af, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1752,7 +1756,7 @@ public class AbilityFactoryAlterLife {
|
||||
|
||||
@Override
|
||||
public boolean canPlayAI() {
|
||||
return AbilityFactoryAlterLife.exchangeLifeCanPlayAI(af, this);
|
||||
return AbilityFactoryAlterLife.exchangeLifeCanPlayAI(getActivatingPlayer(), af, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1796,7 +1800,7 @@ public class AbilityFactoryAlterLife {
|
||||
|
||||
@Override
|
||||
public boolean canPlayAI() {
|
||||
return AbilityFactoryAlterLife.exchangeLifeCanPlayAI(af, this);
|
||||
return AbilityFactoryAlterLife.exchangeLifeCanPlayAI(getActivatingPlayer(), af, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1878,12 +1882,13 @@ public class AbilityFactoryAlterLife {
|
||||
* a {@link forge.card.spellability.SpellAbility} object.
|
||||
* @return a boolean.
|
||||
*/
|
||||
private static boolean exchangeLifeCanPlayAI(final AbilityFactory af, final SpellAbility sa) {
|
||||
private static boolean exchangeLifeCanPlayAI(final Player aiPlayer, final AbilityFactory af, final SpellAbility sa) {
|
||||
final Random r = MyRandom.getRandom();
|
||||
final int life = AllZone.getComputerPlayer().getLife();
|
||||
final int hLife = AllZone.getHumanPlayer().getLife();
|
||||
final int myLife = aiPlayer.getLife();
|
||||
Player opponent = aiPlayer.getOpponent();
|
||||
final int hLife = opponent.getLife();
|
||||
|
||||
if (!AllZone.getComputerPlayer().canGainLife()) {
|
||||
if (!aiPlayer.canGainLife()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1898,22 +1903,22 @@ public class AbilityFactoryAlterLife {
|
||||
final Target tgt = sa.getTarget();
|
||||
if (tgt != null) {
|
||||
tgt.resetTargets();
|
||||
if (AllZone.getHumanPlayer().canBeTargetedBy(sa)) {
|
||||
if (opponent.canBeTargetedBy(sa)) {
|
||||
// never target self, that would be silly for exchange
|
||||
tgt.addTarget(AllZone.getHumanPlayer());
|
||||
if (!AllZone.getHumanPlayer().canLoseLife()) {
|
||||
tgt.addTarget(opponent);
|
||||
if (!opponent.canLoseLife()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if life is in danger, always activate
|
||||
if ((life < 5) && (hLife > life)) {
|
||||
if ((myLife < 5) && (hLife > myLife)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// cost includes sacrifice probably, so make sure it's worth it
|
||||
chance &= (hLife > (life + 8));
|
||||
chance &= (hLife > (myLife + 8));
|
||||
|
||||
return ((r.nextFloat() < .6667) && chance);
|
||||
}
|
||||
|
||||
@@ -109,7 +109,7 @@ public final class AbilityFactoryChangeZone {
|
||||
|
||||
@Override
|
||||
public boolean canPlayAI() {
|
||||
return AbilityFactoryChangeZone.changeZoneCanPlayAI(af, this);
|
||||
return AbilityFactoryChangeZone.changeZoneCanPlayAI(getActivatingPlayer(), af, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -124,7 +124,7 @@ public final class AbilityFactoryChangeZone {
|
||||
|
||||
@Override
|
||||
public boolean doTrigger(final boolean mandatory) {
|
||||
return AbilityFactoryChangeZone.changeZoneTriggerAI(af, this, mandatory);
|
||||
return AbilityFactoryChangeZone.changeZoneTriggerAI(getActivatingPlayer(), af, this, mandatory);
|
||||
}
|
||||
}
|
||||
final SpellAbility abChangeZone = new AbilityChangeZone(af.getHostCard(), af.getAbCost(), af.getAbTgt());
|
||||
@@ -148,7 +148,8 @@ public final class AbilityFactoryChangeZone {
|
||||
|
||||
@Override
|
||||
public boolean canPlayAI() {
|
||||
return AbilityFactoryChangeZone.changeZoneCanPlayAI(af, this);
|
||||
|
||||
return AbilityFactoryChangeZone.changeZoneCanPlayAI(getActivatingPlayer(), af, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -164,9 +165,9 @@ public final class AbilityFactoryChangeZone {
|
||||
@Override
|
||||
public boolean canPlayFromEffectAI(final boolean mandatory, final boolean withOutManaCost) {
|
||||
if (withOutManaCost) {
|
||||
return AbilityFactoryChangeZone.changeZoneTriggerAINoCost(af, this, mandatory);
|
||||
return AbilityFactoryChangeZone.changeZoneTriggerAINoCost(getActivatingPlayer(), af, this, mandatory);
|
||||
}
|
||||
return AbilityFactoryChangeZone.changeZoneTriggerAI(af, this, mandatory);
|
||||
return AbilityFactoryChangeZone.changeZoneTriggerAI(getActivatingPlayer(), af, this, mandatory);
|
||||
}
|
||||
};
|
||||
AbilityFactoryChangeZone.setMiscellaneous(af, spChangeZone);
|
||||
@@ -205,12 +206,12 @@ public final class AbilityFactoryChangeZone {
|
||||
|
||||
@Override
|
||||
public boolean canPlayAI() {
|
||||
return AbilityFactoryChangeZone.changeZoneCanPlayAI(af, this);
|
||||
return AbilityFactoryChangeZone.changeZoneCanPlayAI(getActivatingPlayer(), af, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean chkAIDrawback() {
|
||||
return AbilityFactoryChangeZone.changeZonePlayDrawbackAI(af, this);
|
||||
return AbilityFactoryChangeZone.changeZonePlayDrawbackAI(getActivatingPlayer(), af, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -220,7 +221,7 @@ public final class AbilityFactoryChangeZone {
|
||||
|
||||
@Override
|
||||
public boolean doTrigger(final boolean mandatory) {
|
||||
return AbilityFactoryChangeZone.changeZoneTriggerAI(af, this, mandatory);
|
||||
return AbilityFactoryChangeZone.changeZoneTriggerAI(getActivatingPlayer(), af, this, mandatory);
|
||||
}
|
||||
}
|
||||
final SpellAbility dbChangeZone = new DrawbackChangeZone(af.getHostCard(), af.getAbTgt());
|
||||
@@ -305,7 +306,7 @@ public final class AbilityFactoryChangeZone {
|
||||
* a {@link forge.card.spellability.SpellAbility} object.
|
||||
* @return a boolean.
|
||||
*/
|
||||
private static boolean changeZoneCanPlayAI(final AbilityFactory af, final SpellAbility sa) {
|
||||
private static boolean changeZoneCanPlayAI(final Player aiPlayer,final AbilityFactory af, final SpellAbility sa) {
|
||||
final HashMap<String, String> params = af.getMapParams();
|
||||
String origin = "";
|
||||
if (params.containsKey("Origin")) {
|
||||
@@ -315,7 +316,7 @@ public final class AbilityFactoryChangeZone {
|
||||
if (AbilityFactoryChangeZone.isHidden(origin, params.containsKey("Hidden"))) {
|
||||
return AbilityFactoryChangeZone.changeHiddenOriginCanPlayAI(af, sa);
|
||||
} else if (AbilityFactoryChangeZone.isKnown(origin)) {
|
||||
return AbilityFactoryChangeZone.changeKnownOriginCanPlayAI(af, sa);
|
||||
return AbilityFactoryChangeZone.changeKnownOriginCanPlayAI(aiPlayer, af, sa);
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -332,7 +333,7 @@ public final class AbilityFactoryChangeZone {
|
||||
* a {@link forge.card.spellability.SpellAbility} object.
|
||||
* @return a boolean.
|
||||
*/
|
||||
private static boolean changeZonePlayDrawbackAI(final AbilityFactory af, final SpellAbility sa) {
|
||||
private static boolean changeZonePlayDrawbackAI(final Player aiPlayer, final AbilityFactory af, final SpellAbility sa) {
|
||||
final HashMap<String, String> params = af.getMapParams();
|
||||
String origin = "";
|
||||
if (params.containsKey("Origin")) {
|
||||
@@ -342,7 +343,7 @@ public final class AbilityFactoryChangeZone {
|
||||
if (AbilityFactoryChangeZone.isHidden(origin, params.containsKey("Hidden"))) {
|
||||
return AbilityFactoryChangeZone.changeHiddenOriginPlayDrawbackAI(af, sa);
|
||||
} else if (AbilityFactoryChangeZone.isKnown(origin)) {
|
||||
return AbilityFactoryChangeZone.changeKnownOriginPlayDrawbackAI(af, sa);
|
||||
return AbilityFactoryChangeZone.changeKnownOriginPlayDrawbackAI(aiPlayer, af, sa);
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -361,12 +362,12 @@ public final class AbilityFactoryChangeZone {
|
||||
* a boolean.
|
||||
* @return a boolean.
|
||||
*/
|
||||
private static boolean changeZoneTriggerAI(final AbilityFactory af, final SpellAbility sa, final boolean mandatory) {
|
||||
private static boolean changeZoneTriggerAI(final Player aiPlayer,final AbilityFactory af, final SpellAbility sa, final boolean mandatory) {
|
||||
if (!ComputerUtil.canPayCost(sa) && !mandatory) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return AbilityFactoryChangeZone.changeZoneTriggerAINoCost(af, sa, mandatory);
|
||||
return AbilityFactoryChangeZone.changeZoneTriggerAINoCost(aiPlayer, af, sa, mandatory);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -382,7 +383,7 @@ public final class AbilityFactoryChangeZone {
|
||||
* a boolean.
|
||||
* @return a boolean.
|
||||
*/
|
||||
private static boolean changeZoneTriggerAINoCost(final AbilityFactory af, final SpellAbility sa,
|
||||
private static boolean changeZoneTriggerAINoCost(final Player aiPlayer,final AbilityFactory af, final SpellAbility sa,
|
||||
final boolean mandatory) {
|
||||
final HashMap<String, String> params = af.getMapParams();
|
||||
String origin = "";
|
||||
@@ -393,7 +394,7 @@ public final class AbilityFactoryChangeZone {
|
||||
if (AbilityFactoryChangeZone.isHidden(origin, params.containsKey("Hidden"))) {
|
||||
return AbilityFactoryChangeZone.changeHiddenTriggerAI(af, sa, mandatory);
|
||||
} else if (AbilityFactoryChangeZone.isKnown(origin)) {
|
||||
return AbilityFactoryChangeZone.changeKnownOriginTriggerAI(af, sa, mandatory);
|
||||
return AbilityFactoryChangeZone.changeKnownOriginTriggerAI(aiPlayer, af, sa, mandatory);
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -1484,7 +1485,7 @@ public final class AbilityFactoryChangeZone {
|
||||
* a {@link forge.card.spellability.SpellAbility} object.
|
||||
* @return a boolean.
|
||||
*/
|
||||
private static boolean changeKnownOriginCanPlayAI(final AbilityFactory af, final SpellAbility sa) {
|
||||
private static boolean changeKnownOriginCanPlayAI(final Player aiPlayer, final AbilityFactory af, final SpellAbility sa) {
|
||||
// Retrieve either this card, or target Cards in Graveyard
|
||||
final Cost abCost = af.getAbCost();
|
||||
final Card source = sa.getSourceCard();
|
||||
@@ -1519,7 +1520,7 @@ public final class AbilityFactoryChangeZone {
|
||||
|
||||
final Target tgt = sa.getTarget();
|
||||
if (tgt != null) {
|
||||
if (!AbilityFactoryChangeZone.changeKnownPreferredTarget(af, sa, false)) {
|
||||
if (!AbilityFactoryChangeZone.changeKnownPreferredTarget(aiPlayer, af, sa, false)) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
@@ -1556,7 +1557,7 @@ public final class AbilityFactoryChangeZone {
|
||||
return false;
|
||||
}
|
||||
|
||||
final ArrayList<Object> objects = AbilityFactory.predictThreatenedObjects(af);
|
||||
final ArrayList<Object> objects = AbilityFactory.predictThreatenedObjects(aiPlayer, af);
|
||||
boolean contains = false;
|
||||
for (final Card c : retrieval) {
|
||||
if (objects.contains(c)) {
|
||||
@@ -1570,7 +1571,7 @@ public final class AbilityFactoryChangeZone {
|
||||
}
|
||||
// don't return something to your hand if your hand is full of good stuff
|
||||
if (destination.equals(ZoneType.Hand) && origin.equals(ZoneType.Graveyard)) {
|
||||
int handSize = AllZone.getComputerPlayer().getCardsIn(ZoneType.Hand).size();
|
||||
int handSize = aiPlayer.getCardsIn(ZoneType.Hand).size();
|
||||
if (Singletons.getModel().getGameState().getPhaseHandler().getPhase().isBefore(PhaseType.MAIN1)) {
|
||||
return false;
|
||||
}
|
||||
@@ -1578,8 +1579,8 @@ public final class AbilityFactoryChangeZone {
|
||||
&& handSize > 1) {
|
||||
return false;
|
||||
}
|
||||
if (Singletons.getModel().getGameState().getPhaseHandler().isPlayerTurn(AllZone.getComputerPlayer())
|
||||
&& handSize >= AllZone.getComputerPlayer().getMaxHandSize()) {
|
||||
if (Singletons.getModel().getGameState().getPhaseHandler().isPlayerTurn(aiPlayer)
|
||||
&& handSize >= aiPlayer.getMaxHandSize()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -1603,12 +1604,12 @@ public final class AbilityFactoryChangeZone {
|
||||
* a {@link forge.card.spellability.SpellAbility} object.
|
||||
* @return a boolean.
|
||||
*/
|
||||
private static boolean changeKnownOriginPlayDrawbackAI(final AbilityFactory af, final SpellAbility sa) {
|
||||
private static boolean changeKnownOriginPlayDrawbackAI(final Player aiPlayer, final AbilityFactory af, final SpellAbility sa) {
|
||||
if (sa.getTarget() == null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return AbilityFactoryChangeZone.changeKnownPreferredTarget(af, sa, false);
|
||||
return AbilityFactoryChangeZone.changeKnownPreferredTarget(aiPlayer, af, sa, false);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1624,7 +1625,7 @@ public final class AbilityFactoryChangeZone {
|
||||
* a boolean.
|
||||
* @return a boolean.
|
||||
*/
|
||||
private static boolean changeKnownPreferredTarget(final AbilityFactory af, final SpellAbility sa,
|
||||
private static boolean changeKnownPreferredTarget(Player aiPlayer, final AbilityFactory af, final SpellAbility sa,
|
||||
final boolean mandatory) {
|
||||
final HashMap<String, String> params = af.getMapParams();
|
||||
final Card source = sa.getSourceCard();
|
||||
@@ -1649,7 +1650,7 @@ public final class AbilityFactoryChangeZone {
|
||||
}
|
||||
|
||||
List<Card> list = AllZoneUtil.getCardsIn(origin);
|
||||
list = CardLists.getValidCards(list, tgt.getValidTgts(), AllZone.getComputerPlayer(), source);
|
||||
list = CardLists.getValidCards(list, tgt.getValidTgts(), aiPlayer, source);
|
||||
if (source.isInZone(ZoneType.Hand)) {
|
||||
list = CardLists.filter(list, Predicates.not(CardPredicates.nameEquals(source.getName()))); // Don't get the same card back.
|
||||
}
|
||||
@@ -1662,7 +1663,7 @@ public final class AbilityFactoryChangeZone {
|
||||
if (origin.equals(ZoneType.Battlefield)) {
|
||||
// filter out untargetables
|
||||
list = CardLists.getTargetableCards(list, sa);
|
||||
List<Card> aiPermanents = CardLists.filterControlledBy(list, AllZone.getComputerPlayer());
|
||||
List<Card> aiPermanents = CardLists.filterControlledBy(list, aiPlayer);
|
||||
|
||||
// Don't blink cards that will die.
|
||||
aiPermanents = CardLists.filter(aiPermanents, new Predicate<Card>() {
|
||||
@@ -1680,7 +1681,7 @@ public final class AbilityFactoryChangeZone {
|
||||
// check stack for something on the stack that will kill
|
||||
// anything i control
|
||||
if (AllZone.getStack().size() > 0) {
|
||||
final ArrayList<Object> objects = AbilityFactory.predictThreatenedObjects(af);
|
||||
final ArrayList<Object> objects = AbilityFactory.predictThreatenedObjects(aiPlayer, af);
|
||||
|
||||
final List<Card> threatenedTargets = new ArrayList<Card>();
|
||||
|
||||
@@ -1979,7 +1980,7 @@ public final class AbilityFactoryChangeZone {
|
||||
* a boolean.
|
||||
* @return a boolean.
|
||||
*/
|
||||
private static boolean changeKnownOriginTriggerAI(final AbilityFactory af, final SpellAbility sa,
|
||||
private static boolean changeKnownOriginTriggerAI(final Player aiPlayer, final AbilityFactory af, final SpellAbility sa,
|
||||
final boolean mandatory) {
|
||||
final HashMap<String, String> params = af.getMapParams();
|
||||
if (!ComputerUtil.canPayCost(sa)) {
|
||||
@@ -1999,7 +2000,7 @@ public final class AbilityFactoryChangeZone {
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (AbilityFactoryChangeZone.changeKnownPreferredTarget(af, sa, mandatory)) {
|
||||
} else if (AbilityFactoryChangeZone.changeKnownPreferredTarget(aiPlayer, af, sa, mandatory)) {
|
||||
// do nothing
|
||||
} else if (!AbilityFactoryChangeZone.changeKnownUnpreferredTarget(af, sa, mandatory)) {
|
||||
return false;
|
||||
|
||||
@@ -305,7 +305,7 @@ public class AbilityFactoryPreventDamage {
|
||||
|
||||
// react to threats on the stack
|
||||
if (AllZone.getStack().size() > 0) {
|
||||
final ArrayList<Object> threatenedObjects = AbilityFactory.predictThreatenedObjects(af);
|
||||
final ArrayList<Object> threatenedObjects = AbilityFactory.predictThreatenedObjects(sa.getActivatingPlayer(), af);
|
||||
for (final Object o : objects) {
|
||||
if (threatenedObjects.contains(o)) {
|
||||
chance = true;
|
||||
|
||||
@@ -580,7 +580,7 @@ public class AbilityFactoryPump {
|
||||
return false;
|
||||
}
|
||||
} else if (keyword.equals("Shroud") || keyword.equals("Hexproof")) {
|
||||
if (!AbilityFactory.predictThreatenedObjects(sa.getAbilityFactory()).contains(card)) {
|
||||
if (!AbilityFactory.predictThreatenedObjects(sa.getActivatingPlayer(), sa.getAbilityFactory()).contains(card)) {
|
||||
return false;
|
||||
}
|
||||
} else if (keyword.equals("Islandwalk")) {
|
||||
|
||||
@@ -289,7 +289,7 @@ public class AbilityFactoryRegenerate {
|
||||
final ArrayList<Card> list = AbilityFactory.getDefinedCards(hostCard, params.get("Defined"), sa);
|
||||
|
||||
if (AllZone.getStack().size() > 0) {
|
||||
final ArrayList<Object> objects = AbilityFactory.predictThreatenedObjects(af);
|
||||
final ArrayList<Object> objects = AbilityFactory.predictThreatenedObjects(sa.getActivatingPlayer(),af);
|
||||
|
||||
for (final Card c : list) {
|
||||
if (objects.contains(c)) {
|
||||
@@ -325,7 +325,7 @@ public class AbilityFactoryRegenerate {
|
||||
if (AllZone.getStack().size() > 0) {
|
||||
// check stack for something on the stack will kill anything i
|
||||
// control
|
||||
final ArrayList<Object> objects = AbilityFactory.predictThreatenedObjects(af);
|
||||
final ArrayList<Object> objects = AbilityFactory.predictThreatenedObjects(sa.getActivatingPlayer(), af);
|
||||
|
||||
final List<Card> threatenedTargets = new ArrayList<Card>();
|
||||
|
||||
@@ -737,7 +737,7 @@ public class AbilityFactoryRegenerate {
|
||||
|
||||
int numSaved = 0;
|
||||
if (AllZone.getStack().size() > 0) {
|
||||
final ArrayList<Object> objects = AbilityFactory.predictThreatenedObjects(af);
|
||||
final ArrayList<Object> objects = AbilityFactory.predictThreatenedObjects(sa.getActivatingPlayer(),af);
|
||||
|
||||
for (final Card c : list) {
|
||||
if (objects.contains(c) && c.getShield() == 0) {
|
||||
|
||||
Reference in New Issue
Block a user