Removing getXXXXPlayer calls - they mostly refer to AI now, so that I get current AI player from sa activatingPlayer

This commit is contained in:
Maxmtg
2012-10-07 14:30:42 +00:00
parent 5a2278104f
commit cccc15d0fd
6 changed files with 139 additions and 133 deletions

View File

@@ -2436,7 +2436,7 @@ public class AbilityFactory {
* @return a {@link java.util.ArrayList} object. * @return a {@link java.util.ArrayList} object.
* @since 1.0.15 * @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>(); final ArrayList<Object> objects = new ArrayList<Object>();
if (AllZone.getStack().size() == 0) { if (AllZone.getStack().size() == 0) {
return objects; return objects;
@@ -2444,7 +2444,7 @@ public class AbilityFactory {
// check stack for something that will kill this // check stack for something that will kill this
final SpellAbility topStack = AllZone.getStack().peekAbility(); final SpellAbility topStack = AllZone.getStack().peekAbility();
objects.addAll(AbilityFactory.predictThreatenedObjects(saviourAf, topStack)); objects.addAll(AbilityFactory.predictThreatenedObjects(aiPlayer, saviourAf, topStack));
return objects; return objects;
} }
@@ -2461,7 +2461,7 @@ public class AbilityFactory {
* @return a {@link java.util.ArrayList} object. * @return a {@link java.util.ArrayList} object.
* @since 1.0.15 * @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>(); ArrayList<Object> objects = new ArrayList<Object>();
final ArrayList<Object> threatened = new ArrayList<Object>(); final ArrayList<Object> threatened = new ArrayList<Object>();
String saviourApi = ""; String saviourApi = "";
@@ -2487,7 +2487,7 @@ public class AbilityFactory {
if (threatParams.containsKey("Defined")) { if (threatParams.containsKey("Defined")) {
objects = AbilityFactory.getDefinedObjects(source, threatParams.get("Defined"), topStack); objects = AbilityFactory.getDefinedObjects(source, threatParams.get("Defined"), topStack);
} else if (threatParams.containsKey("ValidCards")) { } 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); List<Card> cards = CardLists.getValidCards(battleField, threatParams.get("ValidCards").split(","), source.getController(), source);
for (Card card : cards) { for (Card card : cards) {
objects.add(card); 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; return threatened;
} }
@@ -2861,7 +2861,7 @@ public class AbilityFactory {
} else { } else {
sa.resolve(); sa.resolve();
if (params.containsKey("PowerSink")) { if (params.containsKey("PowerSink")) {
GameActionUtil.doPowerSink(AllZone.getComputerPlayer()); GameActionUtil.doPowerSink(payer);
} }
AbilityFactory.resolveSubAbilities(sa); AbilityFactory.resolveSubAbilities(sa);
if (usedStack) { if (usedStack) {

View File

@@ -92,7 +92,7 @@ public class AbilityFactoryAlterLife {
@Override @Override
public boolean canPlayAI() { public boolean canPlayAI() {
return AbilityFactoryAlterLife.gainLifeCanPlayAI(this.af, this); return AbilityFactoryAlterLife.gainLifeCanPlayAI(getActivatingPlayer(), this.af, this);
} }
@Override @Override
@@ -102,7 +102,7 @@ public class AbilityFactoryAlterLife {
@Override @Override
public boolean doTrigger(final boolean mandatory) { 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 // then call xCount with that card to properly calculate the
// amount // amount
// Or choosing how many to sacrifice // Or choosing how many to sacrifice
return AbilityFactoryAlterLife.gainLifeCanPlayAI(this.af, this); return AbilityFactoryAlterLife.gainLifeCanPlayAI(getActivatingPlayer(), this.af, this);
} }
@Override @Override
@@ -153,9 +153,9 @@ public class AbilityFactoryAlterLife {
@Override @Override
public boolean canPlayFromEffectAI(final boolean mandatory, final boolean withOutManaCost) { public boolean canPlayFromEffectAI(final boolean mandatory, final boolean withOutManaCost) {
if (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 // then call xCount with that card to properly calculate the
// amount // amount
// Or choosing how many to sacrifice // Or choosing how many to sacrifice
return AbilityFactoryAlterLife.gainLifeCanPlayAI(this.af, this); return AbilityFactoryAlterLife.gainLifeCanPlayAI(getActivatingPlayer(), this.af, this);
} }
@Override @Override
@@ -219,7 +219,7 @@ public class AbilityFactoryAlterLife {
@Override @Override
public boolean doTrigger(final boolean mandatory) { 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()); final SpellAbility dbGainLife = new DrawbackGainLife(abilityFactory.getHostCard(), abilityFactory.getAbTgt());
@@ -293,12 +293,12 @@ public class AbilityFactoryAlterLife {
* a {@link forge.card.spellability.SpellAbility} object. * a {@link forge.card.spellability.SpellAbility} object.
* @return a boolean. * @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 Random r = MyRandom.getRandom();
final HashMap<String, String> params = af.getMapParams(); final HashMap<String, String> params = af.getMapParams();
final Cost abCost = sa.getPayCosts(); final Cost abCost = sa.getPayCosts();
final Card source = sa.getSourceCard(); final Card source = sa.getSourceCard();
final int life = AllZone.getComputerPlayer().getLife(); final int life = aiPlayer.getLife();
final String amountStr = params.get("LifeAmount"); final String amountStr = params.get("LifeAmount");
int lifeAmount = 0; int lifeAmount = 0;
if (amountStr.equals("X") && source.getSVar(amountStr).equals("Count$xPaid")) { 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; return false;
} }
@@ -377,8 +377,8 @@ public class AbilityFactoryAlterLife {
final Target tgt = sa.getTarget(); final Target tgt = sa.getTarget();
if (tgt != null) { if (tgt != null) {
tgt.resetTargets(); tgt.resetTargets();
if (sa.canTarget(AllZone.getComputerPlayer())) { if (sa.canTarget(aiPlayer)) {
tgt.addTarget(AllZone.getComputerPlayer()); tgt.addTarget(aiPlayer);
} else { } else {
return false; return false;
} }
@@ -405,13 +405,13 @@ public class AbilityFactoryAlterLife {
* a boolean. * a boolean.
* @return 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) { if (!ComputerUtil.canPayCost(sa) && !mandatory) {
// payment it's usually // payment it's usually
// not mandatory // not mandatory
return false; return false;
} }
return gainLifeDoTriggerAINoCost(af, sa, mandatory); return gainLifeDoTriggerAINoCost(aiPlayer, af, sa, mandatory);
} }
/** /**
@@ -427,7 +427,7 @@ public class AbilityFactoryAlterLife {
* a boolean. * a boolean.
* @return 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(); final HashMap<String, String> params = af.getMapParams();
@@ -437,10 +437,10 @@ public class AbilityFactoryAlterLife {
final Target tgt = sa.getTarget(); final Target tgt = sa.getTarget();
if (tgt != null) { if (tgt != null) {
tgt.resetTargets(); tgt.resetTargets();
if (sa.canTarget(AllZone.getComputerPlayer())) { if (sa.canTarget(aiPlayer)) {
tgt.addTarget(AllZone.getComputerPlayer()); tgt.addTarget(aiPlayer);
} else if (mandatory && sa.canTarget(AllZone.getHumanPlayer())) { } else if (mandatory && sa.canTarget(aiPlayer.getOpponent())) {
tgt.addTarget(AllZone.getHumanPlayer()); tgt.addTarget(aiPlayer.getOpponent());
} else { } else {
return false; return false;
} }
@@ -538,7 +538,7 @@ public class AbilityFactoryAlterLife {
// then call xCount with that card to properly calculate the // then call xCount with that card to properly calculate the
// amount // amount
// Or choosing how many to sacrifice // Or choosing how many to sacrifice
return AbilityFactoryAlterLife.loseLifeCanPlayAI(this.af, this); return AbilityFactoryAlterLife.loseLifeCanPlayAI(getActivatingPlayer(), this.af, this);
} }
@Override @Override
@@ -548,7 +548,7 @@ public class AbilityFactoryAlterLife {
@Override @Override
public boolean doTrigger(final boolean mandatory) { 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(), 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 // then call xCount with that card to properly calculate the
// amount // amount
// Or choosing how many to sacrifice // Or choosing how many to sacrifice
return AbilityFactoryAlterLife.loseLifeCanPlayAI(this.af, this); return AbilityFactoryAlterLife.loseLifeCanPlayAI(getActivatingPlayer(), this.af, this);
} }
@Override @Override
@@ -598,9 +598,9 @@ public class AbilityFactoryAlterLife {
@Override @Override
public boolean canPlayFromEffectAI(final boolean mandatory, final boolean withOutManaCost) { public boolean canPlayFromEffectAI(final boolean mandatory, final boolean withOutManaCost) {
if (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 // then call xCount with that card to properly calculate the
// amount // amount
// Or choosing how many to sacrifice // Or choosing how many to sacrifice
return AbilityFactoryAlterLife.loseLifeCanPlayAI(this.af, this); return AbilityFactoryAlterLife.loseLifeCanPlayAI(getActivatingPlayer(), this.af, this);
} }
@Override @Override
@@ -658,12 +658,12 @@ public class AbilityFactoryAlterLife {
@Override @Override
public boolean chkAIDrawback() { public boolean chkAIDrawback() {
return loseLifeDoTriggerAINoCost(this.af, this, false); return loseLifeDoTriggerAINoCost(getActivatingPlayer(), this.af, this, false);
} }
@Override @Override
public boolean doTrigger(final boolean mandatory) { 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()); final SpellAbility dbLoseLife = new DrawbackLoseLife(abilityFactory.getHostCard(), abilityFactory.getAbTgt());
@@ -731,7 +731,7 @@ public class AbilityFactoryAlterLife {
* a {@link forge.card.spellability.SpellAbility} object. * a {@link forge.card.spellability.SpellAbility} object.
* @return a boolean. * @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 Random r = MyRandom.getRandom();
final Cost abCost = sa.getPayCosts(); final Cost abCost = sa.getPayCosts();
final Card source = sa.getSourceCard(); final Card source = sa.getSourceCard();
@@ -772,12 +772,14 @@ public class AbilityFactoryAlterLife {
return false; return false;
} }
} }
Player opp = aiPlayer.getOpponent();
if (!AllZone.getHumanPlayer().canLoseLife()) { if (!opp.canLoseLife()) {
return false; return false;
} }
if (amount >= AllZone.getHumanPlayer().getLife()) { if (amount >= opp.getLife()) {
priority = true; // killing the human should be done asap priority = true; // killing the human should be done asap
} }
@@ -799,8 +801,8 @@ public class AbilityFactoryAlterLife {
if (sa.getTarget() != null) { if (sa.getTarget() != null) {
tgt.resetTargets(); tgt.resetTargets();
if (sa.canTarget(AllZone.getHumanPlayer())) { if (sa.canTarget(opp)) {
sa.getTarget().addTarget(AllZone.getHumanPlayer()); sa.getTarget().addTarget(opp);
} else { } else {
return false; return false;
} }
@@ -827,11 +829,11 @@ public class AbilityFactoryAlterLife {
* a boolean. * a boolean.
* @return 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) { if (!ComputerUtil.canPayCost(sa) && !mandatory) {
return false; return false;
} }
return loseLifeDoTriggerAINoCost(af, sa, mandatory); return loseLifeDoTriggerAINoCost(aiPlayer, af, sa, mandatory);
} }
/** /**
@@ -847,16 +849,16 @@ public class AbilityFactoryAlterLife {
* a boolean. * a boolean.
* @return 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 HashMap<String, String> params = af.getMapParams();
final Target tgt = sa.getTarget(); final Target tgt = sa.getTarget();
if (tgt != null) { if (tgt != null) {
if (sa.canTarget(AllZone.getHumanPlayer())) { if (sa.canTarget(aiPlayer.getOpponent())) {
tgt.addTarget(AllZone.getHumanPlayer()); tgt.addTarget(aiPlayer.getOpponent());
} else if (mandatory && sa.canTarget(AllZone.getComputerPlayer())) { } else if (mandatory && sa.canTarget(aiPlayer)) {
tgt.addTarget(AllZone.getComputerPlayer()); tgt.addTarget(aiPlayer);
} else { } else {
return false; return false;
} }
@@ -881,9 +883,9 @@ public class AbilityFactoryAlterLife {
tgtPlayers = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), params.get("Defined"), sa); 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 // For cards like Foul Imp, ETB you lose life
if ((amount + 3) > AllZone.getComputerPlayer().getLife()) { if ((amount + 3) > aiPlayer.getLife()) {
return false; return false;
} }
} }
@@ -971,7 +973,7 @@ public class AbilityFactoryAlterLife {
@Override @Override
public boolean canPlayAI() { public boolean canPlayAI() {
return AbilityFactoryAlterLife.poisonCanPlayAI(af, this); return AbilityFactoryAlterLife.poisonCanPlayAI(getActivatingPlayer(), af, this);
} }
@Override @Override
@@ -981,7 +983,7 @@ public class AbilityFactoryAlterLife {
@Override @Override
public boolean doTrigger(final boolean mandatory) { 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()); 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 // then call xCount with that card to properly calculate the
// amount // amount
// Or choosing how many to sacrifice // Or choosing how many to sacrifice
return AbilityFactoryAlterLife.poisonCanPlayAI(af, this); return AbilityFactoryAlterLife.poisonCanPlayAI(getActivatingPlayer(), af, this);
} }
@Override @Override
@@ -1064,7 +1066,7 @@ public class AbilityFactoryAlterLife {
// then call xCount with that card to properly calculate the // then call xCount with that card to properly calculate the
// amount // amount
// Or choosing how many to sacrifice // Or choosing how many to sacrifice
return AbilityFactoryAlterLife.poisonCanPlayAI(af, this); return AbilityFactoryAlterLife.poisonCanPlayAI(getActivatingPlayer(), af, this);
} }
@Override @Override
@@ -1079,7 +1081,7 @@ public class AbilityFactoryAlterLife {
@Override @Override
public boolean doTrigger(final boolean mandatory) { 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()); final SpellAbility dbPoison = new DrawbackPoison(af.getHostCard(), af.getAbTgt());
@@ -1100,7 +1102,7 @@ public class AbilityFactoryAlterLife {
* a boolean. * a boolean.
* @return 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) { if (!ComputerUtil.canPayCost(sa) && !mandatory) {
// payment it's usually // payment it's usually
// not mandatory // not mandatory
@@ -1111,7 +1113,7 @@ public class AbilityFactoryAlterLife {
final Target tgt = sa.getTarget(); final Target tgt = sa.getTarget();
if (tgt != null) { if (tgt != null) {
tgt.addTarget(AllZone.getHumanPlayer()); tgt.addTarget(aiPlayer.getOpponent());
} else { } else {
final ArrayList<Player> players = AbilityFactory.getDefinedPlayers(sa.getSourceCard(), final ArrayList<Player> players = AbilityFactory.getDefinedPlayers(sa.getSourceCard(),
params.get("Defined"), sa); params.get("Defined"), sa);
@@ -1240,7 +1242,7 @@ public class AbilityFactoryAlterLife {
* a {@link forge.card.spellability.SpellAbility} object. * a {@link forge.card.spellability.SpellAbility} object.
* @return a boolean. * @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 Cost abCost = sa.getPayCosts();
final Card source = sa.getSourceCard(); final Card source = sa.getSourceCard();
final HashMap<String, String> params = af.getMapParams(); final HashMap<String, String> params = af.getMapParams();
@@ -1278,7 +1280,7 @@ public class AbilityFactoryAlterLife {
if (sa.getTarget() != null) { if (sa.getTarget() != null) {
tgt.resetTargets(); tgt.resetTargets();
sa.getTarget().addTarget(AllZone.getHumanPlayer()); sa.getTarget().addTarget(aiPlayer.getOpponent());
} }
return true; return true;
@@ -1320,7 +1322,7 @@ public class AbilityFactoryAlterLife {
@Override @Override
public boolean canPlayAI() { public boolean canPlayAI() {
return AbilityFactoryAlterLife.setLifeCanPlayAI(af, this); return AbilityFactoryAlterLife.setLifeCanPlayAI(getActivatingPlayer(), af, this);
} }
@Override @Override
@@ -1330,7 +1332,7 @@ public class AbilityFactoryAlterLife {
@Override @Override
public boolean doTrigger(final boolean mandatory) { 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()); 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 // then call xCount with that card to properly calculate the
// amount // amount
// Or choosing how many to sacrifice // Or choosing how many to sacrifice
return AbilityFactoryAlterLife.setLifeCanPlayAI(af, this); return AbilityFactoryAlterLife.setLifeCanPlayAI(getActivatingPlayer(), af, this);
} }
@Override @Override
@@ -1413,7 +1415,7 @@ public class AbilityFactoryAlterLife {
// then call xCount with that card to properly calculate the // then call xCount with that card to properly calculate the
// amount // amount
// Or choosing how many to sacrifice // Or choosing how many to sacrifice
return AbilityFactoryAlterLife.setLifeCanPlayAI(af, this); return AbilityFactoryAlterLife.setLifeCanPlayAI(getActivatingPlayer(), af, this);
} }
@Override @Override
@@ -1428,7 +1430,7 @@ public class AbilityFactoryAlterLife {
@Override @Override
public boolean doTrigger(final boolean mandatory) { 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()); final SpellAbility dbSetLife = new DrawbackSetLife(af.getHostCard(), af.getAbTgt());
@@ -1497,16 +1499,17 @@ public class AbilityFactoryAlterLife {
* a {@link forge.card.spellability.SpellAbility} object. * a {@link forge.card.spellability.SpellAbility} object.
* @return a boolean. * @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(); final Random r = MyRandom.getRandom();
// Ability_Cost abCost = sa.getPayCosts(); // Ability_Cost abCost = sa.getPayCosts();
final Card source = sa.getSourceCard(); final Card source = sa.getSourceCard();
final int life = AllZone.getComputerPlayer().getLife(); final int myLife = aiPlayer.getLife();
final int hlife = AllZone.getHumanPlayer().getLife(); final Player opponent = aiPlayer.getOpponent();
final int hlife = opponent.getLife();
final HashMap<String, String> params = af.getMapParams(); final HashMap<String, String> params = af.getMapParams();
final String amountStr = params.get("LifeAmount"); final String amountStr = params.get("LifeAmount");
if (!AllZone.getComputerPlayer().canGainLife()) { if (!aiPlayer.canGainLife()) {
return false; return false;
} }
@@ -1535,21 +1538,21 @@ public class AbilityFactoryAlterLife {
if (tgt != null) { if (tgt != null) {
tgt.resetTargets(); tgt.resetTargets();
if (tgt.canOnlyTgtOpponent()) { if (tgt.canOnlyTgtOpponent()) {
tgt.addTarget(AllZone.getHumanPlayer()); tgt.addTarget(opponent);
// if we can only target the human, and the Human's life would // if we can only target the human, and the Human's life would
// go up, don't play it. // go up, don't play it.
// possibly add a combo here for Magister Sphinx and Higedetsu's // possibly add a combo here for Magister Sphinx and Higedetsu's
// (sp?) Second Rite // (sp?) Second Rite
if ((amount > hlife) || !AllZone.getHumanPlayer().canLoseLife()) { if ((amount > hlife) || !opponent.canLoseLife()) {
return false; return false;
} }
} else { } else {
if ((amount > life) && (life <= 10)) { if ((amount > myLife) && (myLife <= 10)) {
tgt.addTarget(AllZone.getComputerPlayer()); tgt.addTarget(aiPlayer);
} else if (hlife > amount) { } else if (hlife > amount) {
tgt.addTarget(AllZone.getHumanPlayer()); tgt.addTarget(opponent);
} else if (amount > life) { } else if (amount > myLife) {
tgt.addTarget(AllZone.getComputerPlayer()); tgt.addTarget(aiPlayer);
} else { } else {
return false; return false;
} }
@@ -1558,19 +1561,19 @@ public class AbilityFactoryAlterLife {
if (params.containsKey("Each") && params.get("Defined").equals("Each")) { if (params.containsKey("Each") && params.get("Defined").equals("Each")) {
if (amount == 0) { if (amount == 0) {
return false; return false;
} else if (life > amount) { // will decrease computer's life } else if (myLife > amount) { // will decrease computer's life
if ((life < 5) || ((life - amount) > (hlife - amount))) { if ((myLife < 5) || ((myLife - amount) > (hlife - amount))) {
return false; return false;
} }
} }
} }
if (amount < life) { if (amount < myLife) {
return false; return false;
} }
} }
// if life is in danger, always activate // if life is in danger, always activate
if ((life < 3) && (amount > life)) { if ((myLife < 3) && (amount > myLife)) {
return true; return true;
} }
@@ -1590,9 +1593,10 @@ public class AbilityFactoryAlterLife {
* a boolean. * a boolean.
* @return a boolean. * @return a boolean.
*/ */
private static boolean setLifeDoTriggerAI(final AbilityFactory af, final SpellAbility sa, final boolean mandatory) { private static boolean setLifeDoTriggerAI(final Player aiPlayer, final AbilityFactory af, final SpellAbility sa, final boolean mandatory) {
final int life = AllZone.getComputerPlayer().getLife(); final int myLife = aiPlayer.getLife();
final int hlife = AllZone.getHumanPlayer().getLife(); final Player opponent = aiPlayer.getOpponent();
final int hlife = opponent.getLife();
final Card source = sa.getSourceCard(); final Card source = sa.getSourceCard();
final HashMap<String, String> params = af.getMapParams(); final HashMap<String, String> params = af.getMapParams();
final String amountStr = params.get("LifeAmount"); final String amountStr = params.get("LifeAmount");
@@ -1613,7 +1617,7 @@ public class AbilityFactoryAlterLife {
} }
if (source.getName().equals("Eternity Vessel") if (source.getName().equals("Eternity Vessel")
&& (AllZoneUtil.isCardInPlay("Vampire Hexmage", AllZone.getHumanPlayer()) || (source && (AllZoneUtil.isCardInPlay("Vampire Hexmage", opponent) || (source
.getCounters(Counters.CHARGE) == 0))) { .getCounters(Counters.CHARGE) == 0))) {
return false; return false;
} }
@@ -1625,14 +1629,14 @@ public class AbilityFactoryAlterLife {
if (tgt != null) { if (tgt != null) {
tgt.resetTargets(); tgt.resetTargets();
if (tgt.canOnlyTgtOpponent()) { if (tgt.canOnlyTgtOpponent()) {
tgt.addTarget(AllZone.getHumanPlayer()); tgt.addTarget(opponent);
} else { } else {
if ((amount > life) && (life <= 10)) { if ((amount > myLife) && (myLife <= 10)) {
tgt.addTarget(AllZone.getComputerPlayer()); tgt.addTarget(aiPlayer);
} else if (hlife > amount) { } else if (hlife > amount) {
tgt.addTarget(AllZone.getHumanPlayer()); tgt.addTarget(opponent);
} else if (amount > life) { } else if (amount > myLife) {
tgt.addTarget(AllZone.getComputerPlayer()); tgt.addTarget(aiPlayer);
} else { } else {
return false; return false;
} }
@@ -1714,7 +1718,7 @@ public class AbilityFactoryAlterLife {
@Override @Override
public boolean canPlayAI() { public boolean canPlayAI() {
return AbilityFactoryAlterLife.exchangeLifeCanPlayAI(af, this); return AbilityFactoryAlterLife.exchangeLifeCanPlayAI(getActivatingPlayer(), af, this);
} }
@Override @Override
@@ -1752,7 +1756,7 @@ public class AbilityFactoryAlterLife {
@Override @Override
public boolean canPlayAI() { public boolean canPlayAI() {
return AbilityFactoryAlterLife.exchangeLifeCanPlayAI(af, this); return AbilityFactoryAlterLife.exchangeLifeCanPlayAI(getActivatingPlayer(), af, this);
} }
@Override @Override
@@ -1796,7 +1800,7 @@ public class AbilityFactoryAlterLife {
@Override @Override
public boolean canPlayAI() { public boolean canPlayAI() {
return AbilityFactoryAlterLife.exchangeLifeCanPlayAI(af, this); return AbilityFactoryAlterLife.exchangeLifeCanPlayAI(getActivatingPlayer(), af, this);
} }
@Override @Override
@@ -1878,12 +1882,13 @@ public class AbilityFactoryAlterLife {
* a {@link forge.card.spellability.SpellAbility} object. * a {@link forge.card.spellability.SpellAbility} object.
* @return a boolean. * @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 Random r = MyRandom.getRandom();
final int life = AllZone.getComputerPlayer().getLife(); final int myLife = aiPlayer.getLife();
final int hLife = AllZone.getHumanPlayer().getLife(); Player opponent = aiPlayer.getOpponent();
final int hLife = opponent.getLife();
if (!AllZone.getComputerPlayer().canGainLife()) { if (!aiPlayer.canGainLife()) {
return false; return false;
} }
@@ -1898,22 +1903,22 @@ public class AbilityFactoryAlterLife {
final Target tgt = sa.getTarget(); final Target tgt = sa.getTarget();
if (tgt != null) { if (tgt != null) {
tgt.resetTargets(); tgt.resetTargets();
if (AllZone.getHumanPlayer().canBeTargetedBy(sa)) { if (opponent.canBeTargetedBy(sa)) {
// never target self, that would be silly for exchange // never target self, that would be silly for exchange
tgt.addTarget(AllZone.getHumanPlayer()); tgt.addTarget(opponent);
if (!AllZone.getHumanPlayer().canLoseLife()) { if (!opponent.canLoseLife()) {
return false; return false;
} }
} }
} }
// if life is in danger, always activate // if life is in danger, always activate
if ((life < 5) && (hLife > life)) { if ((myLife < 5) && (hLife > myLife)) {
return true; return true;
} }
// cost includes sacrifice probably, so make sure it's worth it // cost includes sacrifice probably, so make sure it's worth it
chance &= (hLife > (life + 8)); chance &= (hLife > (myLife + 8));
return ((r.nextFloat() < .6667) && chance); return ((r.nextFloat() < .6667) && chance);
} }

View File

@@ -109,7 +109,7 @@ public final class AbilityFactoryChangeZone {
@Override @Override
public boolean canPlayAI() { public boolean canPlayAI() {
return AbilityFactoryChangeZone.changeZoneCanPlayAI(af, this); return AbilityFactoryChangeZone.changeZoneCanPlayAI(getActivatingPlayer(), af, this);
} }
@Override @Override
@@ -124,7 +124,7 @@ public final class AbilityFactoryChangeZone {
@Override @Override
public boolean doTrigger(final boolean mandatory) { 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()); final SpellAbility abChangeZone = new AbilityChangeZone(af.getHostCard(), af.getAbCost(), af.getAbTgt());
@@ -148,7 +148,8 @@ public final class AbilityFactoryChangeZone {
@Override @Override
public boolean canPlayAI() { public boolean canPlayAI() {
return AbilityFactoryChangeZone.changeZoneCanPlayAI(af, this);
return AbilityFactoryChangeZone.changeZoneCanPlayAI(getActivatingPlayer(), af, this);
} }
@Override @Override
@@ -164,9 +165,9 @@ public final class AbilityFactoryChangeZone {
@Override @Override
public boolean canPlayFromEffectAI(final boolean mandatory, final boolean withOutManaCost) { public boolean canPlayFromEffectAI(final boolean mandatory, final boolean withOutManaCost) {
if (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); AbilityFactoryChangeZone.setMiscellaneous(af, spChangeZone);
@@ -205,12 +206,12 @@ public final class AbilityFactoryChangeZone {
@Override @Override
public boolean canPlayAI() { public boolean canPlayAI() {
return AbilityFactoryChangeZone.changeZoneCanPlayAI(af, this); return AbilityFactoryChangeZone.changeZoneCanPlayAI(getActivatingPlayer(), af, this);
} }
@Override @Override
public boolean chkAIDrawback() { public boolean chkAIDrawback() {
return AbilityFactoryChangeZone.changeZonePlayDrawbackAI(af, this); return AbilityFactoryChangeZone.changeZonePlayDrawbackAI(getActivatingPlayer(), af, this);
} }
@Override @Override
@@ -220,7 +221,7 @@ public final class AbilityFactoryChangeZone {
@Override @Override
public boolean doTrigger(final boolean mandatory) { 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()); final SpellAbility dbChangeZone = new DrawbackChangeZone(af.getHostCard(), af.getAbTgt());
@@ -305,7 +306,7 @@ public final class AbilityFactoryChangeZone {
* a {@link forge.card.spellability.SpellAbility} object. * a {@link forge.card.spellability.SpellAbility} object.
* @return a boolean. * @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(); final HashMap<String, String> params = af.getMapParams();
String origin = ""; String origin = "";
if (params.containsKey("Origin")) { if (params.containsKey("Origin")) {
@@ -315,7 +316,7 @@ public final class AbilityFactoryChangeZone {
if (AbilityFactoryChangeZone.isHidden(origin, params.containsKey("Hidden"))) { if (AbilityFactoryChangeZone.isHidden(origin, params.containsKey("Hidden"))) {
return AbilityFactoryChangeZone.changeHiddenOriginCanPlayAI(af, sa); return AbilityFactoryChangeZone.changeHiddenOriginCanPlayAI(af, sa);
} else if (AbilityFactoryChangeZone.isKnown(origin)) { } else if (AbilityFactoryChangeZone.isKnown(origin)) {
return AbilityFactoryChangeZone.changeKnownOriginCanPlayAI(af, sa); return AbilityFactoryChangeZone.changeKnownOriginCanPlayAI(aiPlayer, af, sa);
} }
return false; return false;
@@ -332,7 +333,7 @@ public final class AbilityFactoryChangeZone {
* a {@link forge.card.spellability.SpellAbility} object. * a {@link forge.card.spellability.SpellAbility} object.
* @return a boolean. * @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(); final HashMap<String, String> params = af.getMapParams();
String origin = ""; String origin = "";
if (params.containsKey("Origin")) { if (params.containsKey("Origin")) {
@@ -342,7 +343,7 @@ public final class AbilityFactoryChangeZone {
if (AbilityFactoryChangeZone.isHidden(origin, params.containsKey("Hidden"))) { if (AbilityFactoryChangeZone.isHidden(origin, params.containsKey("Hidden"))) {
return AbilityFactoryChangeZone.changeHiddenOriginPlayDrawbackAI(af, sa); return AbilityFactoryChangeZone.changeHiddenOriginPlayDrawbackAI(af, sa);
} else if (AbilityFactoryChangeZone.isKnown(origin)) { } else if (AbilityFactoryChangeZone.isKnown(origin)) {
return AbilityFactoryChangeZone.changeKnownOriginPlayDrawbackAI(af, sa); return AbilityFactoryChangeZone.changeKnownOriginPlayDrawbackAI(aiPlayer, af, sa);
} }
return false; return false;
@@ -361,12 +362,12 @@ public final class AbilityFactoryChangeZone {
* a boolean. * a boolean.
* @return 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) { if (!ComputerUtil.canPayCost(sa) && !mandatory) {
return false; 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. * a boolean.
* @return 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 boolean mandatory) {
final HashMap<String, String> params = af.getMapParams(); final HashMap<String, String> params = af.getMapParams();
String origin = ""; String origin = "";
@@ -393,7 +394,7 @@ public final class AbilityFactoryChangeZone {
if (AbilityFactoryChangeZone.isHidden(origin, params.containsKey("Hidden"))) { if (AbilityFactoryChangeZone.isHidden(origin, params.containsKey("Hidden"))) {
return AbilityFactoryChangeZone.changeHiddenTriggerAI(af, sa, mandatory); return AbilityFactoryChangeZone.changeHiddenTriggerAI(af, sa, mandatory);
} else if (AbilityFactoryChangeZone.isKnown(origin)) { } else if (AbilityFactoryChangeZone.isKnown(origin)) {
return AbilityFactoryChangeZone.changeKnownOriginTriggerAI(af, sa, mandatory); return AbilityFactoryChangeZone.changeKnownOriginTriggerAI(aiPlayer, af, sa, mandatory);
} }
return false; return false;
@@ -1484,7 +1485,7 @@ public final class AbilityFactoryChangeZone {
* a {@link forge.card.spellability.SpellAbility} object. * a {@link forge.card.spellability.SpellAbility} object.
* @return a boolean. * @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 // Retrieve either this card, or target Cards in Graveyard
final Cost abCost = af.getAbCost(); final Cost abCost = af.getAbCost();
final Card source = sa.getSourceCard(); final Card source = sa.getSourceCard();
@@ -1519,7 +1520,7 @@ public final class AbilityFactoryChangeZone {
final Target tgt = sa.getTarget(); final Target tgt = sa.getTarget();
if (tgt != null) { if (tgt != null) {
if (!AbilityFactoryChangeZone.changeKnownPreferredTarget(af, sa, false)) { if (!AbilityFactoryChangeZone.changeKnownPreferredTarget(aiPlayer, af, sa, false)) {
return false; return false;
} }
} else { } else {
@@ -1556,7 +1557,7 @@ public final class AbilityFactoryChangeZone {
return false; return false;
} }
final ArrayList<Object> objects = AbilityFactory.predictThreatenedObjects(af); final ArrayList<Object> objects = AbilityFactory.predictThreatenedObjects(aiPlayer, af);
boolean contains = false; boolean contains = false;
for (final Card c : retrieval) { for (final Card c : retrieval) {
if (objects.contains(c)) { 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 // don't return something to your hand if your hand is full of good stuff
if (destination.equals(ZoneType.Hand) && origin.equals(ZoneType.Graveyard)) { 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)) { if (Singletons.getModel().getGameState().getPhaseHandler().getPhase().isBefore(PhaseType.MAIN1)) {
return false; return false;
} }
@@ -1578,8 +1579,8 @@ public final class AbilityFactoryChangeZone {
&& handSize > 1) { && handSize > 1) {
return false; return false;
} }
if (Singletons.getModel().getGameState().getPhaseHandler().isPlayerTurn(AllZone.getComputerPlayer()) if (Singletons.getModel().getGameState().getPhaseHandler().isPlayerTurn(aiPlayer)
&& handSize >= AllZone.getComputerPlayer().getMaxHandSize()) { && handSize >= aiPlayer.getMaxHandSize()) {
return false; return false;
} }
} }
@@ -1603,12 +1604,12 @@ public final class AbilityFactoryChangeZone {
* a {@link forge.card.spellability.SpellAbility} object. * a {@link forge.card.spellability.SpellAbility} object.
* @return a boolean. * @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) { if (sa.getTarget() == null) {
return true; 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. * a boolean.
* @return 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 boolean mandatory) {
final HashMap<String, String> params = af.getMapParams(); final HashMap<String, String> params = af.getMapParams();
final Card source = sa.getSourceCard(); final Card source = sa.getSourceCard();
@@ -1649,7 +1650,7 @@ public final class AbilityFactoryChangeZone {
} }
List<Card> list = AllZoneUtil.getCardsIn(origin); 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)) { if (source.isInZone(ZoneType.Hand)) {
list = CardLists.filter(list, Predicates.not(CardPredicates.nameEquals(source.getName()))); // Don't get the same card back. 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)) { if (origin.equals(ZoneType.Battlefield)) {
// filter out untargetables // filter out untargetables
list = CardLists.getTargetableCards(list, sa); 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. // Don't blink cards that will die.
aiPermanents = CardLists.filter(aiPermanents, new Predicate<Card>() { 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 // check stack for something on the stack that will kill
// anything i control // anything i control
if (AllZone.getStack().size() > 0) { 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>(); final List<Card> threatenedTargets = new ArrayList<Card>();
@@ -1979,7 +1980,7 @@ public final class AbilityFactoryChangeZone {
* a boolean. * a boolean.
* @return 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 boolean mandatory) {
final HashMap<String, String> params = af.getMapParams(); final HashMap<String, String> params = af.getMapParams();
if (!ComputerUtil.canPayCost(sa)) { 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 // do nothing
} else if (!AbilityFactoryChangeZone.changeKnownUnpreferredTarget(af, sa, mandatory)) { } else if (!AbilityFactoryChangeZone.changeKnownUnpreferredTarget(af, sa, mandatory)) {
return false; return false;

View File

@@ -305,7 +305,7 @@ public class AbilityFactoryPreventDamage {
// react to threats on the stack // react to threats on the stack
if (AllZone.getStack().size() > 0) { 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) { for (final Object o : objects) {
if (threatenedObjects.contains(o)) { if (threatenedObjects.contains(o)) {
chance = true; chance = true;

View File

@@ -580,7 +580,7 @@ public class AbilityFactoryPump {
return false; return false;
} }
} else if (keyword.equals("Shroud") || keyword.equals("Hexproof")) { } 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; return false;
} }
} else if (keyword.equals("Islandwalk")) { } else if (keyword.equals("Islandwalk")) {

View File

@@ -289,7 +289,7 @@ public class AbilityFactoryRegenerate {
final ArrayList<Card> list = AbilityFactory.getDefinedCards(hostCard, params.get("Defined"), sa); final ArrayList<Card> list = AbilityFactory.getDefinedCards(hostCard, params.get("Defined"), sa);
if (AllZone.getStack().size() > 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) { for (final Card c : list) {
if (objects.contains(c)) { if (objects.contains(c)) {
@@ -325,7 +325,7 @@ public class AbilityFactoryRegenerate {
if (AllZone.getStack().size() > 0) { if (AllZone.getStack().size() > 0) {
// check stack for something on the stack will kill anything i // check stack for something on the stack will kill anything i
// control // control
final ArrayList<Object> objects = AbilityFactory.predictThreatenedObjects(af); final ArrayList<Object> objects = AbilityFactory.predictThreatenedObjects(sa.getActivatingPlayer(), af);
final List<Card> threatenedTargets = new ArrayList<Card>(); final List<Card> threatenedTargets = new ArrayList<Card>();
@@ -737,7 +737,7 @@ public class AbilityFactoryRegenerate {
int numSaved = 0; int numSaved = 0;
if (AllZone.getStack().size() > 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) { for (final Card c : list) {
if (objects.contains(c) && c.getShield() == 0) { if (objects.contains(c) && c.getShield() == 0) {