Fix crash with Armory Automaton

This commit is contained in:
tool4EvEr
2023-02-12 12:32:04 +01:00
parent c0a0da6604
commit 71c14c00f0

View File

@@ -1313,7 +1313,14 @@ public class AttachAi extends SpellAbilityAi {
// at some point can support attaching a different card // at some point can support attaching a different card
Card attachSource = sa.getHostCard(); Card attachSource = sa.getHostCard();
if (sa.hasParam("Object")) { if (sa.hasParam("Object")) {
attachSource = AbilityUtils.getDefinedCards(attachSource, sa.getParam("Object"), sa).get(0); CardCollection objs = AbilityUtils.getDefinedCards(attachSource, sa.getParam("Object"), sa);
if (objs.isEmpty()) {
if (!mandatory) {
return null;
}
} else {
attachSource = objs.get(0);
}
} }
// Don't equip if DontEquip SVar is set // Don't equip if DontEquip SVar is set
@@ -1321,6 +1328,11 @@ public class AttachAi extends SpellAbilityAi {
return null; return null;
} }
// is no attachment so no using attach
if (!mandatory && !attachSource.isAttachment()) {
return null;
}
final TargetRestrictions tgt = sa.getTargetRestrictions(); final TargetRestrictions tgt = sa.getTargetRestrictions();
// Is a SA that moves target attachment // Is a SA that moves target attachment
@@ -1345,31 +1357,26 @@ public class AttachAi extends SpellAbilityAi {
return preferred.isEmpty() ? Aggregates.random(list) : Aggregates.random(preferred); return preferred.isEmpty() ? Aggregates.random(list) : Aggregates.random(preferred);
} }
// is no attachment so no using attach
if (!attachSource.isAttachment()) {
return null;
}
// Don't fortify if already fortifying // Don't fortify if already fortifying
if (attachSource.isFortification() && attachSource.getAttachedTo() != null if (attachSource.isFortification() && attachSource.getAttachedTo() != null
&& attachSource.getAttachedTo().getController() == aiPlayer) { && attachSource.getAttachedTo().getController() == aiPlayer) {
return null; return null;
} }
CardCollection list = null; List<Card> list = null;
if (tgt == null) { if (tgt == null) {
list = AbilityUtils.getDefinedCards(attachSource, sa.getParam("Defined"), sa); list = AbilityUtils.getDefinedCards(attachSource, sa.getParam("Defined"), sa);
} else { } else {
list = CardLists.filter(CardUtil.getValidCardsToTarget(tgt, sa), CardPredicates.canBeAttached(attachSource, sa)); list = CardUtil.getValidCardsToTarget(tgt, sa);
} }
if (list.isEmpty()) { if (list.isEmpty()) {
return null; return null;
} }
CardCollection prefList = list; CardCollection prefList = CardLists.filter(list, CardPredicates.canBeAttached(attachSource, sa));
// Filter AI-specific targets if provided // Filter AI-specific targets if provided
prefList = ComputerUtil.filterAITgts(sa, aiPlayer, list, true); prefList = ComputerUtil.filterAITgts(sa, aiPlayer, prefList, true);
Card c = attachGeneralAI(aiPlayer, sa, prefList, mandatory, attachSource, sa.getParam("AILogic")); Card c = attachGeneralAI(aiPlayer, sa, prefList, mandatory, attachSource, sa.getParam("AILogic"));
@@ -1425,8 +1432,9 @@ public class AttachAi extends SpellAbilityAi {
if (c == null && mandatory) { if (c == null && mandatory) {
CardLists.shuffle(list); CardLists.shuffle(list);
c = list.getFirst(); c = list.get(0);
} }
return c; return c;
} }