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.
* @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) {

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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")) {

View File

@@ -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) {