fix Cycling for Zero with xPaid, also do Zaxara with xPaid

This commit is contained in:
Hans Mackowiak
2020-04-25 19:56:37 +00:00
committed by Michael Kamensky
parent 0bb42a2794
commit b5deb0b252
5 changed files with 12 additions and 11 deletions

View File

@@ -27,7 +27,6 @@ public enum AbilityKey {
Blockers("Blockers"), Blockers("Blockers"),
CastSA("CastSA"), CastSA("CastSA"),
CastSACMC("CastSACMC"), CastSACMC("CastSACMC"),
CastSAX("CastSAX"),
Card("Card"), Card("Card"),
Cards("Cards"), Cards("Cards"),
CardLKI("CardLKI"), CardLKI("CardLKI"),

View File

@@ -1586,13 +1586,13 @@ public class AbilityUtils {
// If the chosen creature has X in its mana cost, that X is considered to be 0. // If the chosen creature has X in its mana cost, that X is considered to be 0.
// The value of X in Altered Egos last ability will be whatever value was chosen for X while casting Altered Ego. // The value of X in Altered Egos last ability will be whatever value was chosen for X while casting Altered Ego.
if (sa.getOriginalHost() != null || !sa.getHostCard().equals(c)) { if (sa.getOriginalHost() != null || !sa.getHostCard().equals(c)) {
return 0; return CardFactoryUtil.doXMath(0, expr, c);
} }
if (root.isTrigger()) { if (root.isTrigger()) {
Trigger t = root.getTrigger(); Trigger t = root.getTrigger();
if (t == null) { if (t == null) {
return 0; return CardFactoryUtil.doXMath(0, expr, c);
} }
// 107.3k If an objects enters-the-battlefield triggered ability or replacement effect refers to X, // 107.3k If an objects enters-the-battlefield triggered ability or replacement effect refers to X,
@@ -1603,11 +1603,15 @@ public class AbilityUtils {
return CardFactoryUtil.doXMath(c.getXManaCostPaid(), expr, c); return CardFactoryUtil.doXMath(c.getXManaCostPaid(), expr, c);
} else if (TriggerType.SpellCast.equals(t.getMode())) { } else if (TriggerType.SpellCast.equals(t.getMode())) {
// Cast Trigger like Hydroid Krasis // Cast Trigger like Hydroid Krasis
return CardFactoryUtil.doXMath(c.getXManaCostPaid(), expr, c); SpellAbility castSA = (SpellAbility) root.getTriggeringObject(AbilityKey.SpellAbility);
if (castSA == null || castSA.getXManaCostPaid() == null) {
return CardFactoryUtil.doXMath(0, expr, c);
}
return CardFactoryUtil.doXMath(castSA.getXManaCostPaid(), expr, c);
} else if (TriggerType.Cycled.equals(t.getMode())) { } else if (TriggerType.Cycled.equals(t.getMode())) {
SpellAbility cycleSA = (SpellAbility) sa.getTriggeringObject(AbilityKey.Cause); SpellAbility cycleSA = (SpellAbility) sa.getTriggeringObject(AbilityKey.Cause);
if (cycleSA == null) { if (cycleSA == null || cycleSA.getXManaCostPaid() == null) {
return 0; return CardFactoryUtil.doXMath(0, expr, c);
} }
return CardFactoryUtil.doXMath(cycleSA.getXManaCostPaid(), expr, c); return CardFactoryUtil.doXMath(cycleSA.getXManaCostPaid(), expr, c);
} }
@@ -1619,7 +1623,7 @@ public class AbilityUtils {
} }
} }
return 0; return CardFactoryUtil.doXMath(0, expr, c);
} }
// Count$Kicked.<numHB>.<numNotHB> // Count$Kicked.<numHB>.<numNotHB>

View File

@@ -278,8 +278,7 @@ public class TriggerSpellAbilityCast extends Trigger {
AbilityKey.Activator, AbilityKey.Activator,
AbilityKey.CurrentStormCount, AbilityKey.CurrentStormCount,
AbilityKey.CurrentCastSpells, AbilityKey.CurrentCastSpells,
AbilityKey.CastSACMC, AbilityKey.CastSACMC
AbilityKey.CastSAX
); );
} }

View File

@@ -293,7 +293,6 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
runParams.put(AbilityKey.Activator, sp.getActivatingPlayer()); runParams.put(AbilityKey.Activator, sp.getActivatingPlayer());
runParams.put(AbilityKey.CastSA, si.getSpellAbility(true)); runParams.put(AbilityKey.CastSA, si.getSpellAbility(true));
runParams.put(AbilityKey.CastSACMC, si.getSpellAbility(true).getHostCard().getCMC()); runParams.put(AbilityKey.CastSACMC, si.getSpellAbility(true).getHostCard().getCMC());
runParams.put(AbilityKey.CastSAX, si.getSpellAbility(true).getHostCard().getXManaCostPaid());
runParams.put(AbilityKey.CurrentStormCount, thisTurnCast.size()); runParams.put(AbilityKey.CurrentStormCount, thisTurnCast.size());
runParams.put(AbilityKey.CurrentCastSpells, new CardCollection(thisTurnCast)); runParams.put(AbilityKey.CurrentCastSpells, new CardCollection(thisTurnCast));
game.getTriggerHandler().runTrigger(TriggerType.SpellAbilityCast, runParams, true); game.getTriggerHandler().runTrigger(TriggerType.SpellAbilityCast, runParams, true);

View File

@@ -8,7 +8,7 @@ T:Mode$ SpellCast | ValidCard$ Card.hasXCost | ValidActivatingPlayer$ You | Trig
SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ g_0_0_hydra | TokenOwner$ You | RememberTokens$ True | SubAbility$ DBPutCounter SVar:TrigToken:DB$ Token | TokenAmount$ 1 | TokenScript$ g_0_0_hydra | TokenOwner$ You | RememberTokens$ True | SubAbility$ DBPutCounter
SVar:DBPutCounter:DB$ PutCounter | Defined$ Remembered | CounterType$ P1P1 | CounterNum$ X | References$ X | SubAbility$ DBCleanup SVar:DBPutCounter:DB$ PutCounter | Defined$ Remembered | CounterType$ P1P1 | CounterNum$ X | References$ X | SubAbility$ DBCleanup
SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True SVar:DBCleanup:DB$ Cleanup | ClearRemembered$ True
SVar:X:TriggerCount$CastSAX SVar:X:Count$xPaid
DeckHas:Ability$Token DeckHas:Ability$Token
AI:RemoveDeck:Random AI:RemoveDeck:Random
Oracle:Deathtouch\n{T}: Add two mana of any one color.\nWhenever you cast a spell with {X} in its mana cost, create a 0/0 green Hydra creature token, then put X +1/+1 counters on it. Oracle:Deathtouch\n{T}: Add two mana of any one color.\nWhenever you cast a spell with {X} in its mana cost, create a 0/0 green Hydra creature token, then put X +1/+1 counters on it.