- Added AI support for Blind Zealot and Necrite.

This commit is contained in:
Sloth
2014-10-27 20:15:44 +00:00
parent 7ff491bfd3
commit 57a9fc2710
4 changed files with 32 additions and 10 deletions

View File

@@ -174,7 +174,7 @@ public class PlayerControllerAi extends PlayerController {
@Override
public boolean confirmTrigger(SpellAbility sa, Trigger regtrig, Map<String, String> triggerParams, boolean isMandatory) {
if (triggerParams.containsKey("DelayedTrigger")) {
if (triggerParams.containsKey("DelayedTrigger") || isMandatory) {
//TODO: The only card with an optional delayed trigger is Shirei, Shizo's Caretaker,
// needs to be expanded when a more difficult cards comes up
return true;
@@ -197,7 +197,7 @@ public class PlayerControllerAi extends PlayerController {
}
// There is no way this doTrigger here will have the same target as stored above
// So it's possible it's making a different decision here than will actually happen
if (!brains.doTrigger(sa, isMandatory)) {
if (!brains.doTrigger(sa, false)) {
ret = false;
}
if (storeChoices) {

View File

@@ -207,6 +207,8 @@ public class DestroyAi extends SpellAbilityAi {
final Card source = sa.getHostCard();
final boolean noRegen = sa.hasParam("NoRegen");
if (tgt != null) {
sa.resetTargets();
CardCollection list = CardLists.getTargetableCards(ai.getGame().getCardsIn(ZoneType.Battlefield), sa);
list = CardLists.getValidCards(list, tgt.getValidTgts(), source.getController(), source);
@@ -214,8 +216,6 @@ public class DestroyAi extends SpellAbilityAi {
return false;
}
sa.resetTargets();
CardCollection preferred = CardLists.getNotKeyword(list, "Indestructible");
preferred = CardLists.filterControlledBy(preferred, ai.getOpponents());
@@ -232,14 +232,38 @@ public class DestroyAi extends SpellAbilityAi {
});
}
if (sa.hasParam("AITgts")) {
if (sa.getParam("AITgts").equals("BetterThanSource")) {
if (source.isEnchanted()) {
if (source.getEnchantedBy(false).get(0).getController().equals(ai)) {
preferred.clear();
}
} else {
final int value = ComputerUtilCard.evaluateCreature(source);
preferred = CardLists.filter(preferred, new Predicate<Card>() {
@Override
public boolean apply(final Card c) {
return ComputerUtilCard.evaluateCreature(c) > value + 30;
}
});
}
} else {
preferred = CardLists.getValidCards(preferred, sa.getParam("AITgts"), sa.getActivatingPlayer(), source);
}
}
for (final Card c : preferred) {
list.remove(c);
}
if (preferred.isEmpty() && !mandatory) {
return false;
}
while (sa.getTargets().getNumTargeted() < tgt.getMaxTargets(sa.getHostCard(), sa)) {
if (preferred.isEmpty()) {
if ((sa.getTargets().getNumTargeted() == 0)
|| (sa.getTargets().getNumTargeted() < tgt.getMinTargets(sa.getHostCard(), sa))) {
if (sa.getTargets().getNumTargeted() == 0
|| sa.getTargets().getNumTargeted() < tgt.getMinTargets(sa.getHostCard(), sa)) {
if (!mandatory) {
sa.resetTargets();
return false;