Merge branch 'aifix' into 'master'

AttachAi: Add chkAIDrawback for Halvar

See merge request core-developers/forge!5588
This commit is contained in:
Michael Kamensky
2021-10-19 13:48:55 +00:00
3 changed files with 21 additions and 7 deletions

View File

@@ -182,8 +182,7 @@ public abstract class SpellAbilityAi {
return doTriggerNoCostWithSubs(aiPlayer, sa, mandatory); return doTriggerNoCostWithSubs(aiPlayer, sa, mandatory);
} }
public final boolean doTriggerNoCostWithSubs(final Player aiPlayer, final SpellAbility sa, final boolean mandatory) public final boolean doTriggerNoCostWithSubs(final Player aiPlayer, final SpellAbility sa, final boolean mandatory) {
{
if (!doTriggerAINoCost(aiPlayer, sa, mandatory) && !"Always".equals(sa.getParam("AILogic"))) { if (!doTriggerAINoCost(aiPlayer, sa, mandatory) && !"Always".equals(sa.getParam("AILogic"))) {
return false; return false;
} }

View File

@@ -979,7 +979,7 @@ public class AttachAi extends SpellAbilityAi {
if (tgt == null) { if (tgt == null) {
targets = AbilityUtils.getDefinedObjects(card, sa.getParam("Defined"), sa); targets = AbilityUtils.getDefinedObjects(card, sa.getParam("Defined"), sa);
} else { } else {
AttachAi.attachPreference(sa, tgt, mandatory); attachPreference(sa, tgt, mandatory);
targets = sa.getTargets(); targets = sa.getTargets();
} }
@@ -1362,7 +1362,6 @@ public class AttachAi extends SpellAbilityAi {
list = AbilityUtils.getDefinedCards(attachSource, sa.getParam("Defined"), sa); list = AbilityUtils.getDefinedCards(attachSource, sa.getParam("Defined"), sa);
} else { } else {
list = CardLists.getValidCards(aiPlayer.getGame().getCardsIn(tgt.getZone()), tgt.getValidTgts(), sa.getActivatingPlayer(), attachSource, sa); list = CardLists.getValidCards(aiPlayer.getGame().getCardsIn(tgt.getZone()), tgt.getValidTgts(), sa.getActivatingPlayer(), attachSource, sa);
list = CardLists.filter(list, CardPredicates.canBeAttached(attachSource)); list = CardLists.filter(list, CardPredicates.canBeAttached(attachSource));
// TODO If Attaching without casting, don't need to actually target. // TODO If Attaching without casting, don't need to actually target.
@@ -1734,6 +1733,22 @@ public class AttachAi extends SpellAbilityAi {
return chosen; return chosen;
} }
@Override
public boolean chkAIDrawback(final SpellAbility sa, final Player ai) {
// TODO for targeting optional Halvar trigger, needs to be coordinated with PumpAi to make it playable
if (sa.isTrigger() && sa.usesTargeting()) {
CardCollection targetables = CardLists.getTargetableCards(ai.getCardsIn(ZoneType.Battlefield), sa);
CardCollection source = AbilityUtils.getDefinedCards(sa.getHostCard(), sa.getParam("Object"), sa);
Card tgt = attachGeneralAI(ai, sa, targetables, true, source.getFirst(), null);
if (tgt != null) {
sa.resetTargets();
sa.getTargets().add(tgt);
}
return sa.isTargetNumberValid();
}
return false;
}
@Override @Override
public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) { public boolean confirmAction(Player player, SpellAbility sa, PlayerActionConfirmMode mode, String message) {
return true; return true;