Fix illegal target (#2670)

Co-authored-by: TRT <>
This commit is contained in:
tool4ever
2023-03-13 13:11:28 +01:00
committed by GitHub
parent bbb42f5546
commit 6eb724c2f4
2 changed files with 26 additions and 35 deletions

View File

@@ -65,7 +65,8 @@ public class DamageDealAi extends DamageAiBase {
return SpecialCardAi.SarkhanTheMad.considerDig(ai, sa); return SpecialCardAi.SarkhanTheMad.considerDig(ai, sa);
} }
if (damage.equals("X") && sa.getSVar(damage).equals("Count$ChosenNumber")) { if (damage.equals("X")) {
if (sa.getSVar(damage).equals("Count$ChosenNumber")) {
int energy = ai.getCounters(CounterEnumType.ENERGY); int energy = ai.getCounters(CounterEnumType.ENERGY);
for (SpellAbility s : source.getSpellAbilities()) { for (SpellAbility s : source.getSpellAbilities()) {
if ("PayEnergy".equals(s.getParam("AILogic"))) { if ("PayEnergy".equals(s.getParam("AILogic"))) {
@@ -85,7 +86,6 @@ public class DamageDealAi extends DamageAiBase {
} }
return false; return false;
} }
if (damage.equals("X")) {
if (sa.getSVar(damage).equals("Count$xPaid")) { if (sa.getSVar(damage).equals("Count$xPaid")) {
// Life Drain // Life Drain
if ("XLifeDrain".equals(logic)) { if ("XLifeDrain".equals(logic)) {
@@ -111,7 +111,7 @@ public class DamageDealAi extends DamageAiBase {
final String damage = sa.getParam("NumDmg"); final String damage = sa.getParam("NumDmg");
int dmg = AbilityUtils.calculateAmount(source, damage, sa); int dmg = AbilityUtils.calculateAmount(source, damage, sa);
if (damage.equals("X")) { if (damage.equals("X") || sourceName.equals("Crater's Claws")) {
if (sa.getSVar(damage).equals("Count$xPaid") || sourceName.equals("Crater's Claws")) { if (sa.getSVar(damage).equals("Count$xPaid") || sourceName.equals("Crater's Claws")) {
dmg = ComputerUtilCost.getMaxXValue(sa, ai, sa.isTrigger()); dmg = ComputerUtilCost.getMaxXValue(sa, ai, sa.isTrigger());
@@ -542,13 +542,6 @@ public class DamageDealAi extends DamageAiBase {
sa.getTargets().add(enemy); sa.getTargets().add(enemy);
} }
return true; return true;
} else if ("DamageAfterPutCounter".equals(logic)
&& sa.getParent() != null
&& "P1P1".equals(sa.getParent().getParam("CounterType"))) {
// assuming the SA parent is of PutCounter type. Perhaps it's possible to predict counter multipliers here somehow?
final String amountStr = sa.getParent().getParamOrDefault("CounterNum", "1");
final int amount = AbilityUtils.calculateAmount(source, amountStr, sa);
dmg += amount;
} }
// AssumeAtLeastOneTarget is used for cards with funky targeting implementation like Fight with Fire which would // AssumeAtLeastOneTarget is used for cards with funky targeting implementation like Fight with Fire which would
@@ -557,11 +550,7 @@ public class DamageDealAi extends DamageAiBase {
return false; return false;
} }
immediately = immediately || ComputerUtil.playImmediately(ai, sa);
if (!(sa.getParent() != null && sa.getParent().isTargetNumberValid())) {
sa.resetTargets(); sa.resetTargets();
}
// target loop // target loop
TargetChoices tcs = sa.getTargets(); TargetChoices tcs = sa.getTargets();
@@ -622,6 +611,8 @@ public class DamageDealAi extends DamageAiBase {
} }
} }
immediately = immediately || ComputerUtil.playImmediately(ai, sa);
int totalTargetedSoFar = -1; int totalTargetedSoFar = -1;
while (sa.canAddMoreTarget()) { while (sa.canAddMoreTarget()) {
if (totalTargetedSoFar == tcs.size()) { if (totalTargetedSoFar == tcs.size()) {

View File

@@ -1,8 +1,8 @@
Name:Domri's Ambush Name:Domri's Ambush
ManaCost:R G ManaCost:R G
Types:Sorcery Types:Sorcery
A:SP$ PutCounter | Cost$ R G | ValidTgts$ Creature.YouCtrl | CounterType$ P1P1 | TgtPrompt$ Select target creature you control to put a +1/+1 counter | SubAbility$ DBDamage | SpellDescription$ Put a +1/+1 counter on target creature you control. Then that creature deals damage equal to its power to target creature or planeswalker you don't control. A:SP$ PutCounter | Cost$ R G | ValidTgts$ Creature.YouCtrl | CounterType$ P1P1 | TgtPrompt$ Select target creature you control to put a +1/+1 counter | SubAbility$ DBDamage | AILogic$ PowerDmg | SpellDescription$ Put a +1/+1 counter on target creature you control. Then that creature deals damage equal to its power to target creature or planeswalker you don't control.
SVar:DBDamage:DB$ DealDamage | ValidTgts$ Creature.YouDontCtrl,Planeswalker.YouDontCtrl | TgtPrompt$ Select target creature or planeswalker you don't control | NumDmg$ X | DamageSource$ ParentTarget | AILogic$ DamageAfterPutCounter SVar:DBDamage:DB$ DealDamage | ValidTgts$ Creature.YouDontCtrl,Planeswalker.YouDontCtrl | TgtPrompt$ Select target creature or planeswalker you don't control | NumDmg$ X | DamageSource$ ParentTarget | AILogic$ PowerDmg
SVar:X:ParentTargeted$CardPower SVar:X:ParentTargeted$CardPower
DeckHas:Ability$Counters DeckHas:Ability$Counters
Oracle:Put a +1/+1 counter on target creature you control. Then that creature deals damage equal to its power to target creature or planeswalker you don't control. Oracle:Put a +1/+1 counter on target creature you control. Then that creature deals damage equal to its power to target creature or planeswalker you don't control.