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);
}
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);
for (SpellAbility s : source.getSpellAbilities()) {
if ("PayEnergy".equals(s.getParam("AILogic"))) {
@@ -85,7 +86,6 @@ public class DamageDealAi extends DamageAiBase {
}
return false;
}
if (damage.equals("X")) {
if (sa.getSVar(damage).equals("Count$xPaid")) {
// Life Drain
if ("XLifeDrain".equals(logic)) {
@@ -111,7 +111,7 @@ public class DamageDealAi extends DamageAiBase {
final String damage = sa.getParam("NumDmg");
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")) {
dmg = ComputerUtilCost.getMaxXValue(sa, ai, sa.isTrigger());
@@ -542,13 +542,6 @@ public class DamageDealAi extends DamageAiBase {
sa.getTargets().add(enemy);
}
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
@@ -557,11 +550,7 @@ public class DamageDealAi extends DamageAiBase {
return false;
}
immediately = immediately || ComputerUtil.playImmediately(ai, sa);
if (!(sa.getParent() != null && sa.getParent().isTargetNumberValid())) {
sa.resetTargets();
}
// target loop
TargetChoices tcs = sa.getTargets();
@@ -622,6 +611,8 @@ public class DamageDealAi extends DamageAiBase {
}
}
immediately = immediately || ComputerUtil.playImmediately(ai, sa);
int totalTargetedSoFar = -1;
while (sa.canAddMoreTarget()) {
if (totalTargetedSoFar == tcs.size()) {

View File

@@ -1,8 +1,8 @@
Name:Domri's Ambush
ManaCost:R G
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.
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
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$ PowerDmg
SVar:X:ParentTargeted$CardPower
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.