- Fixed a bug in DamagePreventAi.

This commit is contained in:
Sloth
2013-12-06 14:47:30 +00:00
parent de9ce7ebb9
commit 6550fa28ca

View File

@@ -20,6 +20,7 @@ import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType; import forge.game.phase.PhaseType;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.spellability.TargetChoices;
import forge.game.spellability.TargetRestrictions; import forge.game.spellability.TargetRestrictions;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
@@ -93,11 +94,12 @@ public class DamagePreventAi extends SpellAbilityAi {
// react to threats on the stack // react to threats on the stack
else if (!game.getStack().isEmpty()) { else if (!game.getStack().isEmpty()) {
sa.resetTargets(); sa.resetTargets();
final TargetChoices tcs = sa.getTargets();
// check stack for something on the stack will kill anything i control // check stack for something on the stack will kill anything i control
final List<GameObject> objects = ComputerUtil.predictThreatenedObjects(sa.getActivatingPlayer(), sa); final List<GameObject> objects = ComputerUtil.predictThreatenedObjects(sa.getActivatingPlayer(), sa);
if (objects.contains(ai)) { if (objects.contains(ai)) {
sa.getTargets().add(ai); tcs.add(ai);
chance = true; chance = true;
} }
final List<Card> threatenedTargets = new ArrayList<Card>(); final List<Card> threatenedTargets = new ArrayList<Card>();
@@ -113,17 +115,18 @@ public class DamagePreventAi extends SpellAbilityAi {
if (!threatenedTargets.isEmpty()) { if (!threatenedTargets.isEmpty()) {
// Choose "best" of the remaining to save // Choose "best" of the remaining to save
sa.getTargets().add(ComputerUtilCard.getBestCreatureAI(threatenedTargets)); tcs.add(ComputerUtilCard.getBestCreatureAI(threatenedTargets));
chance = true; chance = true;
} }
} // Protect combatants } // Protect combatants
else if (game.getPhaseHandler().is(PhaseType.COMBAT_DECLARE_BLOCKERS)) { else if (game.getPhaseHandler().is(PhaseType.COMBAT_DECLARE_BLOCKERS)) {
sa.resetTargets(); sa.resetTargets();
final TargetChoices tcs = sa.getTargets();
if (sa.canTarget(ai) && ComputerUtilCombat.wouldLoseLife(ai, combat) if (sa.canTarget(ai) && ComputerUtilCombat.wouldLoseLife(ai, combat)
&& (ComputerUtilCombat.lifeInDanger(ai, combat) || sa.isAbility() || sa.isTrigger()) && (ComputerUtilCombat.lifeInDanger(ai, combat) || sa.isAbility() || sa.isTrigger())
&& game.getPhaseHandler().getPlayerTurn().isOpponentOf(ai)) { && game.getPhaseHandler().getPlayerTurn().isOpponentOf(ai)) {
sa.getTargets().add(ai); tcs.add(ai);
chance = true; chance = true;
} else { } else {
// filter AIs battlefield by what I can target // filter AIs battlefield by what I can target
@@ -138,8 +141,8 @@ public class DamagePreventAi extends SpellAbilityAi {
CardLists.sortByEvaluateCreature(combatants); CardLists.sortByEvaluateCreature(combatants);
for (final Card c : combatants) { for (final Card c : combatants) {
if (ComputerUtilCombat.combatantWouldBeDestroyed(ai, c, combat)) { if (ComputerUtilCombat.combatantWouldBeDestroyed(ai, c, combat) && tcs.getNumTargeted() < tgt.getMaxTargets(hostCard, sa)) {
sa.getTargets().add(c); tcs.add(c);
chance = true; chance = true;
} }
} }