mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-14 09:48:02 +00:00
Fix Leonardo (#8949)
This commit is contained in:
@@ -275,27 +275,6 @@ public class AiAttackController {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// the attacker will die to a triggered ability (e.g. Sarkhan the Masterless)
|
|
||||||
for (Card c : ai.getOpponents().getCardsIn(ZoneType.Battlefield)) {
|
|
||||||
for (Trigger t : c.getTriggers()) {
|
|
||||||
if (t.getMode() == TriggerType.Attacks) {
|
|
||||||
SpellAbility sa = t.ensureAbility();
|
|
||||||
if (sa == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sa.getApi() == ApiType.EachDamage && "TriggeredAttacker".equals(sa.getParam("Defined"))) {
|
|
||||||
List<Card> valid = CardLists.getValidCards(c.getController().getCreaturesInPlay(), sa.getParam("ValidCards"), c.getController(), c, sa);
|
|
||||||
// TODO: this assumes that 1 damage is dealt per creature. Improve this to check the parameter/X to determine
|
|
||||||
// how much damage is dealt by each of the creatures in the valid list.
|
|
||||||
if (attacker.getNetToughness() <= valid.size()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ("TRUE".equals(attacker.getSVar("HasAttackEffect"))) {
|
if ("TRUE".equals(attacker.getSVar("HasAttackEffect"))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1005,7 +984,7 @@ public class AiAttackController {
|
|||||||
if (attackMax != -1 && combat.getAttackers().size() >= attackMax)
|
if (attackMax != -1 && combat.getAttackers().size() >= attackMax)
|
||||||
return aiAggression;
|
return aiAggression;
|
||||||
|
|
||||||
// TODO if lifeInDanger use chance to hold back some
|
// TODO if lifeInDanger use chance to hold back some (especially in multiplayer)
|
||||||
if (canAttackWrapper(attacker, defender) && isEffectiveAttacker(ai, attacker, combat, defender)) {
|
if (canAttackWrapper(attacker, defender) && isEffectiveAttacker(ai, attacker, combat, defender)) {
|
||||||
combat.addAttacker(attacker, defender);
|
combat.addAttacker(attacker, defender);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1433,7 +1433,11 @@ public class ComputerUtilCombat {
|
|||||||
int damage = AbilityUtils.calculateAmount(source, sa.getParam("NumDmg"), sa);
|
int damage = AbilityUtils.calculateAmount(source, sa.getParam("NumDmg"), sa);
|
||||||
|
|
||||||
toughness -= predictDamageTo(attacker, damage, source, false);
|
toughness -= predictDamageTo(attacker, damage, source, false);
|
||||||
continue;
|
} else if (sa.getApi() == ApiType.EachDamage && "TriggeredAttackerLKICopy".equals(sa.getParam("Defined"))) {
|
||||||
|
List<Card> valid = CardLists.getValidCards(source.getController().getCreaturesInPlay(), sa.getParam("ValidCards"), source.getController(), source, sa);
|
||||||
|
// TODO: this assumes that 1 damage is dealt per creature. Improve this to check the parameter/X to determine
|
||||||
|
// how much damage is dealt by each of the creatures in the valid list.
|
||||||
|
toughness -= valid.size();
|
||||||
} else if (ApiType.Pump.equals(sa.getApi())) {
|
} else if (ApiType.Pump.equals(sa.getApi())) {
|
||||||
if (!sa.hasParam("NumDef")) {
|
if (!sa.hasParam("NumDef")) {
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -2469,7 +2469,8 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars, ITr
|
|||||||
|| keyword.startsWith("Reconfigure") || keyword.startsWith("Squad")
|
|| keyword.startsWith("Reconfigure") || keyword.startsWith("Squad")
|
||||||
|| keyword.startsWith("Miracle") || keyword.startsWith("More Than Meets the Eye")
|
|| keyword.startsWith("Miracle") || keyword.startsWith("More Than Meets the Eye")
|
||||||
|| keyword.startsWith("Level up") || keyword.startsWith("Plot")
|
|| keyword.startsWith("Level up") || keyword.startsWith("Plot")
|
||||||
|| keyword.startsWith("Offspring") || keyword.startsWith("Mayhem")) {
|
|| keyword.startsWith("Offspring") || keyword.startsWith("Mayhem")
|
||||||
|
|| keyword.startsWith("Sneak")) {
|
||||||
String[] k = keyword.split(":");
|
String[] k = keyword.split(":");
|
||||||
sbLong.append(k[0]);
|
sbLong.append(k[0]);
|
||||||
if (k.length > 1) {
|
if (k.length > 1) {
|
||||||
|
|||||||
@@ -3645,6 +3645,7 @@ public class CardFactoryUtil {
|
|||||||
newSA.putParam("Secondary", "True");
|
newSA.putParam("Secondary", "True");
|
||||||
newSA.setAlternativeCost(AlternativeCost.Sneak);
|
newSA.setAlternativeCost(AlternativeCost.Sneak);
|
||||||
newSA.setIntrinsic(intrinsic);
|
newSA.setIntrinsic(intrinsic);
|
||||||
|
newSA.getRestrictions().setInstantSpeed(true);
|
||||||
inst.addSpellAbility(newSA);
|
inst.addSpellAbility(newSA);
|
||||||
} else if (keyword.startsWith("Station")) {
|
} else if (keyword.startsWith("Station")) {
|
||||||
String effect = "AB$ PutCounter | Cost$ tapXType<1/Creature.Other> | Defined$ Self " +
|
String effect = "AB$ PutCounter | Cost$ tapXType<1/Creature.Other> | Defined$ Self " +
|
||||||
|
|||||||
Reference in New Issue
Block a user