mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 20:58:03 +00:00
- Added AI support for Blind Zealot and Necrite.
This commit is contained in:
@@ -174,7 +174,7 @@ public class PlayerControllerAi extends PlayerController {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean confirmTrigger(SpellAbility sa, Trigger regtrig, Map<String, String> triggerParams, boolean isMandatory) {
|
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,
|
//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
|
// needs to be expanded when a more difficult cards comes up
|
||||||
return true;
|
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
|
// 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
|
// 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;
|
ret = false;
|
||||||
}
|
}
|
||||||
if (storeChoices) {
|
if (storeChoices) {
|
||||||
|
|||||||
@@ -207,6 +207,8 @@ public class DestroyAi extends SpellAbilityAi {
|
|||||||
final Card source = sa.getHostCard();
|
final Card source = sa.getHostCard();
|
||||||
final boolean noRegen = sa.hasParam("NoRegen");
|
final boolean noRegen = sa.hasParam("NoRegen");
|
||||||
if (tgt != null) {
|
if (tgt != null) {
|
||||||
|
sa.resetTargets();
|
||||||
|
|
||||||
CardCollection list = CardLists.getTargetableCards(ai.getGame().getCardsIn(ZoneType.Battlefield), sa);
|
CardCollection list = CardLists.getTargetableCards(ai.getGame().getCardsIn(ZoneType.Battlefield), sa);
|
||||||
list = CardLists.getValidCards(list, tgt.getValidTgts(), source.getController(), source);
|
list = CardLists.getValidCards(list, tgt.getValidTgts(), source.getController(), source);
|
||||||
|
|
||||||
@@ -214,8 +216,6 @@ public class DestroyAi extends SpellAbilityAi {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
sa.resetTargets();
|
|
||||||
|
|
||||||
CardCollection preferred = CardLists.getNotKeyword(list, "Indestructible");
|
CardCollection preferred = CardLists.getNotKeyword(list, "Indestructible");
|
||||||
preferred = CardLists.filterControlledBy(preferred, ai.getOpponents());
|
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) {
|
for (final Card c : preferred) {
|
||||||
list.remove(c);
|
list.remove(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (preferred.isEmpty() && !mandatory) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
while (sa.getTargets().getNumTargeted() < tgt.getMaxTargets(sa.getHostCard(), sa)) {
|
while (sa.getTargets().getNumTargeted() < tgt.getMaxTargets(sa.getHostCard(), sa)) {
|
||||||
if (preferred.isEmpty()) {
|
if (preferred.isEmpty()) {
|
||||||
if ((sa.getTargets().getNumTargeted() == 0)
|
if (sa.getTargets().getNumTargeted() == 0
|
||||||
|| (sa.getTargets().getNumTargeted() < tgt.getMinTargets(sa.getHostCard(), sa))) {
|
|| sa.getTargets().getNumTargeted() < tgt.getMinTargets(sa.getHostCard(), sa)) {
|
||||||
if (!mandatory) {
|
if (!mandatory) {
|
||||||
sa.resetTargets();
|
sa.resetTargets();
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ Types:Creature Human Cleric
|
|||||||
PT:2/2
|
PT:2/2
|
||||||
K:Intimidate
|
K:Intimidate
|
||||||
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDestroy | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may sacrifice it. If you do, destroy target creature that player controls.
|
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Player | CombatDamage$ True | Execute$ TrigDestroy | TriggerZones$ Battlefield | TriggerDescription$ Whenever CARDNAME deals combat damage to a player, you may sacrifice it. If you do, destroy target creature that player controls.
|
||||||
SVar:TrigDestroy:AB$Destroy | Cost$ Sac<1/CARDNAME> | ValidTgts$ Creature.DefenderCtrl | TgtPrompt$ Select target creature defending player controls | NoRegen$ False
|
SVar:TrigDestroy:AB$ Destroy | Cost$ Sac<1/CARDNAME> | ValidTgts$ Creature.DefenderCtrl | AITgts$ BetterThanSource | TgtPrompt$ Select target creature defending player controls
|
||||||
SVar:RemAIDeck:True
|
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/blind_zealot.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/blind_zealot.jpg
|
||||||
Oracle:Intimidate (This creature can't be blocked except by artifact creatures and/or creatures that share a color with it.)\nWhenever Blind Zealot deals combat damage to a player, you may sacrifice it. If you do, destroy target creature that player controls.
|
Oracle:Intimidate (This creature can't be blocked except by artifact creatures and/or creatures that share a color with it.)\nWhenever Blind Zealot deals combat damage to a player, you may sacrifice it. If you do, destroy target creature that player controls.
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ ManaCost:1 B B
|
|||||||
Types:Creature Thrull
|
Types:Creature Thrull
|
||||||
PT:2/2
|
PT:2/2
|
||||||
T:Mode$ AttackerUnblocked | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigDestroy | TriggerDescription$ Whenever CARDNAME attacks and isn't blocked, you may sacrifice it. If you do, destroy target creature defending player controls. It can't be regenerated.
|
T:Mode$ AttackerUnblocked | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigDestroy | TriggerDescription$ Whenever CARDNAME attacks and isn't blocked, you may sacrifice it. If you do, destroy target creature defending player controls. It can't be regenerated.
|
||||||
SVar:TrigDestroy:AB$Destroy | Cost$ Sac<1/CARDNAME> | ValidTgts$ Creature.DefenderCtrl | TgtPrompt$ Select target creature defending player controls | NoRegen$ True
|
SVar:TrigDestroy:AB$ Destroy | Cost$ Sac<1/CARDNAME> | ValidTgts$ Creature.DefenderCtrl | NoRegen$ True | AITgts$ BetterThanSource | TgtPrompt$ Select target creature defending player controls
|
||||||
SVar:RemAIDeck:True
|
|
||||||
SVar:Picture:http://www.wizards.com/global/images/magic/general/necrite.jpg
|
SVar:Picture:http://www.wizards.com/global/images/magic/general/necrite.jpg
|
||||||
Oracle:Whenever Necrite attacks and isn't blocked, you may sacrifice it. If you do, destroy target creature defending player controls. It can't be regenerated.
|
Oracle:Whenever Necrite attacks and isn't blocked, you may sacrifice it. If you do, destroy target creature defending player controls. It can't be regenerated.
|
||||||
|
|||||||
Reference in New Issue
Block a user