mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 20:58:03 +00:00
AI fix
This commit is contained in:
@@ -875,7 +875,7 @@ public class ComputerUtilCost {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val = ObjectUtils.min(val, abCost.getMaxForNonManaX(root, ai, false));
|
val = ObjectUtils.min(val, abCost.getMaxForNonManaX(root, ai, effect));
|
||||||
|
|
||||||
if (val != null && val > 0) {
|
if (val != null && val > 0) {
|
||||||
// filter cost parts for preferences, don't choose X > than possible preferences
|
// filter cost parts for preferences, don't choose X > than possible preferences
|
||||||
|
|||||||
@@ -768,8 +768,9 @@ public class CountersPutAi extends CountersAi {
|
|||||||
list = AbilityUtils.getDefinedCards(source, sa.getParam("Defined"), sa);
|
list = AbilityUtils.getDefinedCards(source, sa.getParam("Defined"), sa);
|
||||||
|
|
||||||
if (amountStr.equals("X")
|
if (amountStr.equals("X")
|
||||||
&& root.getXManaCostPaid() != null /* SubAbility on something that already had set PayX, e.g. Endless One ETB counters */
|
&& root.getXManaCostPaid() == null
|
||||||
&& sa.hasParam(amountStr) && sa.getSVar(amountStr).equals("Count$xPaid")) {
|
&& source.getXManaCostPaid() == 0 /* SubAbility on something that already had set PayX, e.g. Endless One ETB counters */
|
||||||
|
&& sa.hasSVar(amountStr) && sa.getSVar(amountStr).equals("Count$xPaid")) {
|
||||||
|
|
||||||
// detect if there's more than one X in the cost (Hangarback Walker, Walking Ballista, etc.)
|
// detect if there's more than one X in the cost (Hangarback Walker, Walking Ballista, etc.)
|
||||||
SpellAbility testSa = sa;
|
SpellAbility testSa = sa;
|
||||||
|
|||||||
@@ -273,6 +273,12 @@ public class TokenAi extends SpellAbilityAi {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mandatory) {
|
||||||
|
// Necessary because the AI goes into this method twice, first to set up targets (with mandatory=true)
|
||||||
|
// and then the second time to confirm the trigger (where mandatory may be set to false).
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
Card actualToken = spawnToken(ai, sa);
|
Card actualToken = spawnToken(ai, sa);
|
||||||
String tokenPower = sa.getParamOrDefault("TokenPower", actualToken.getBasePowerString());
|
String tokenPower = sa.getParamOrDefault("TokenPower", actualToken.getBasePowerString());
|
||||||
String tokenToughness = sa.getParamOrDefault("TokenToughness", actualToken.getBaseToughnessString());
|
String tokenToughness = sa.getParamOrDefault("TokenToughness", actualToken.getBaseToughnessString());
|
||||||
@@ -293,12 +299,6 @@ public class TokenAi extends SpellAbilityAi {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mandatory) {
|
|
||||||
// Necessary because the AI goes into this method twice, first to set up targets (with mandatory=true)
|
|
||||||
// and then the second time to confirm the trigger (where mandatory may be set to false).
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ("OnlyOnAlliedAttack".equals(sa.getParam("AILogic"))) {
|
if ("OnlyOnAlliedAttack".equals(sa.getParam("AILogic"))) {
|
||||||
Combat combat = ai.getGame().getCombat();
|
Combat combat = ai.getGame().getCombat();
|
||||||
return combat != null && combat.getAttackingPlayer() != null
|
return combat != null && combat.getAttackingPlayer() != null
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package forge.game.keyword;
|
|||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
public class Trample extends KeywordInstance<Trample> {
|
public class Trample extends KeywordInstance<Trample> {
|
||||||
private String type = "";
|
private String type = "";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user