- Expanded AI P/T prediction with +1/+1 counters granting abilities.

This commit is contained in:
Sloth
2013-09-09 15:27:01 +00:00
parent 22c54a488b
commit a065c8573f

View File

@@ -846,22 +846,31 @@ public class ComputerUtilCombat {
if (!(ability instanceof AbilityActivated) || ability.getPayCosts() == null) { if (!(ability instanceof AbilityActivated) || ability.getPayCosts() == null) {
continue; continue;
} }
if (ability.getApi() != ApiType.Pump) { if (ability.hasParam("ActivationPhases") || ability.hasParam("SorcerySpeed") || ability.hasParam("ActivationZone")) {
continue; continue;
} }
if (ability.hasParam("ActivationPhases") || ability.hasParam("SorcerySpeed")) { if (ability.getApi() == ApiType.Pump) {
continue; if (!ability.hasParam("NumAtt")) {
} continue;
}
if (!ability.hasParam("NumAtt")) { if (ComputerUtilCost.canPayCost(ability, defender.getController())) {
continue; int pBonus = AbilityUtils.calculateAmount(ability.getSourceCard(), ability.getParam("NumAtt"), ability);
} if (pBonus > 0) {
power += pBonus;
}
}
} else if (ability.getApi() == ApiType.PutCounter) {
if (!ability.hasParam("CounterType") || !ability.getParam("CounterType").equals("P1P1")) {
continue;
}
if (ComputerUtilCost.canPayCost(ability, defender.getController())) { if (ComputerUtilCost.canPayCost(ability, defender.getController())) {
int pBonus = AbilityUtils.calculateAmount(ability.getSourceCard(), ability.getParam("NumAtt"), ability); int pBonus = AbilityUtils.calculateAmount(ability.getSourceCard(), ability.getParam("CounterNum"), ability);
if (pBonus > 0) { if (pBonus > 0) {
power += pBonus; power += pBonus;
}
} }
} }
} }
@@ -966,18 +975,27 @@ public class ComputerUtilCombat {
continue; continue;
} }
if (ability.hasParam("ActivationPhases") || ability.hasParam("SorcerySpeed") || ability.hasParam("ActivationZone")) {
continue;
}
if (ability.getApi() != ApiType.Pump || !ability.hasParam("NumDef")) { if (ability.getApi() != ApiType.Pump || !ability.hasParam("NumDef")) {
continue; if (ComputerUtilCost.canPayCost(ability, defender.getController())) {
} int tBonus = AbilityUtils.calculateAmount(ability.getSourceCard(), ability.getParam("NumDef"), ability);
if (tBonus > 0) {
toughness += tBonus;
}
}
} else if (ability.getApi() == ApiType.PutCounter) {
if (!ability.hasParam("CounterType") || !ability.getParam("CounterType").equals("P1P1")) {
continue;
}
if (ability.hasParam("ActivationPhases") || ability.hasParam("SorcerySpeed")) { if (ComputerUtilCost.canPayCost(ability, defender.getController())) {
continue; int tBonus = AbilityUtils.calculateAmount(ability.getSourceCard(), ability.getParam("CounterNum"), ability);
} if (tBonus > 0) {
toughness += tBonus;
if (ComputerUtilCost.canPayCost(ability, defender.getController())) { }
int tBonus = AbilityUtils.calculateAmount(ability.getSourceCard(), ability.getParam("NumDef"), ability);
if (tBonus > 0) {
toughness += tBonus;
} }
} }
} }
@@ -1123,22 +1141,31 @@ public class ComputerUtilCombat {
if (!(ability instanceof AbilityActivated) || ability.getPayCosts() == null) { if (!(ability instanceof AbilityActivated) || ability.getPayCosts() == null) {
continue; continue;
} }
if (ability.getApi() != ApiType.Pump) { if (ability.hasParam("ActivationPhases") || ability.hasParam("SorcerySpeed") || ability.hasParam("ActivationZone")) {
continue; continue;
} }
if (ability.hasParam("ActivationPhases") || ability.hasParam("SorcerySpeed")) { if (ability.getApi() == ApiType.Pump) {
continue; if (!ability.hasParam("NumAtt")) {
} continue;
}
if (!ability.hasParam("NumAtt")) { if (!ability.getPayCosts().hasTapCost() && ComputerUtilCost.canPayCost(ability, attacker.getController())) {
continue; int pBonus = AbilityUtils.calculateAmount(ability.getSourceCard(), ability.getParam("NumAtt"), ability);
} if (pBonus > 0) {
power += pBonus;
}
}
} else if (ability.getApi() == ApiType.PutCounter) {
if (!ability.hasParam("CounterType") || !ability.getParam("CounterType").equals("P1P1")) {
continue;
}
if (!ability.getPayCosts().hasTapCost() && ComputerUtilCost.canPayCost(ability, attacker.getController())) { if (!ability.getPayCosts().hasTapCost() && ComputerUtilCost.canPayCost(ability, attacker.getController())) {
int pBonus = AbilityUtils.calculateAmount(ability.getSourceCard(), ability.getParam("NumAtt"), ability); int pBonus = AbilityUtils.calculateAmount(ability.getSourceCard(), ability.getParam("CounterNum"), ability);
if (pBonus > 0) { if (pBonus > 0) {
power += pBonus; power += pBonus;
}
} }
} }
} }
@@ -1295,18 +1322,27 @@ public class ComputerUtilCombat {
continue; continue;
} }
if (ability.hasParam("ActivationPhases") || ability.hasParam("SorcerySpeed") || ability.hasParam("ActivationZone")) {
continue;
}
if (ability.getApi() != ApiType.Pump || !ability.hasParam("NumDef")) { if (ability.getApi() != ApiType.Pump || !ability.hasParam("NumDef")) {
continue; if (!ability.getPayCosts().hasTapCost() && ComputerUtilCost.canPayCost(ability, attacker.getController())) {
} int tBonus = AbilityUtils.calculateAmount(ability.getSourceCard(), ability.getParam("NumDef"), ability);
if (tBonus > 0) {
toughness += tBonus;
}
}
} else if (ability.getApi() == ApiType.PutCounter) {
if (!ability.hasParam("CounterType") || !ability.getParam("CounterType").equals("P1P1")) {
continue;
}
if (ability.hasParam("ActivationPhases") || ability.hasParam("SorcerySpeed")) { if (!ability.getPayCosts().hasTapCost() && ComputerUtilCost.canPayCost(ability, attacker.getController())) {
continue; int tBonus = AbilityUtils.calculateAmount(ability.getSourceCard(), ability.getParam("CounterNum"), ability);
} if (tBonus > 0) {
toughness += tBonus;
if (!ability.getPayCosts().hasTapCost() && ComputerUtilCost.canPayCost(ability, attacker.getController())) { }
int tBonus = AbilityUtils.calculateAmount(ability.getSourceCard(), ability.getParam("NumDef"), ability);
if (tBonus > 0) {
toughness += tBonus;
} }
} }
} }