Switch to SpawningAbility

This commit is contained in:
tool4EvEr
2022-08-08 14:53:03 +02:00
parent ed48bc027e
commit a06367dfc6
6 changed files with 16 additions and 8 deletions

View File

@@ -326,6 +326,7 @@ public abstract class SpellAbilityEffect {
final SpellAbility newSa = AbilityFactory.getAbility(trigSA, sa.getHostCard());
newSa.setIntrinsic(intrinsic);
trig.setOverridingAbility(newSa);
trig.setSpawningAbility(sa.copy(sa.getHostCard(), sa.getActivatingPlayer(), true));
sa.getActivatingPlayer().getGame().getTriggerHandler().registerDelayedTrigger(trig);
}
@@ -641,10 +642,16 @@ public abstract class SpellAbilityEffect {
final Card hostCard = sa.getHostCard();
final Game game = hostCard.getGame();
hostCard.addUntilLeavesBattlefield(triggerList.allCards());
final TriggerHandler trigHandler = game.getTriggerHandler();
final Card lki = CardUtil.getLKICopy(hostCard);
lki.clearControllers();
lki.setOwner(sa.getActivatingPlayer());
final TriggerHandler trigHandler = game.getTriggerHandler();
final Card lki;
if (sa.hasParam("ReturnAbility")) {
lki = CardUtil.getLKICopy(hostCard);
lki.clearControllers();
lki.setOwner(sa.getActivatingPlayer());
} else {
lki = null;
}
return new GameCommand() {
@@ -671,14 +678,13 @@ public abstract class SpellAbilityEffect {
if (newCard == null || !newCard.equalsWithTimestamp(c)) {
continue;
}
Trigger trig = null;
if (sa.hasAdditionalAbility("ReturnAbility")) {
String valid = sa.getParamOrDefault("ReturnValid", "Card.IsTriggerRemembered");
String trigSA = "Mode$ ChangesZone | Origin$ " + cell.getColumnKey() + " | Destination$ " + cell.getRowKey() + " | ValidCard$ " + valid +
" | TriggerDescription$ " + sa.getAdditionalAbility("ReturnAbility").getParam("SpellDescription");
trig = TriggerHandler.parseTrigger(trigSA, hostCard, sa.isIntrinsic(), null);
Trigger trig = TriggerHandler.parseTrigger(trigSA, hostCard, sa.isIntrinsic(), null);
trig.setSpawningAbility(sa.copy(lki, sa.getActivatingPlayer(), true));
trig.setActiveZone(null);
trig.addRemembered(newCard);

View File

@@ -67,6 +67,7 @@ public class AddPhaseEffect extends SpellAbilityEffect {
SpellAbility overridingSA = AbilityFactory.getAbility(sa.getSVar(sa.getParam("ExtraPhaseDelayedTriggerExcute")), sa.getHostCard());
overridingSA.setActivatingPlayer(sa.getActivatingPlayer());
delTrig.setOverridingAbility(overridingSA);
delTrig.setSpawningAbility(sa.copy(sa.getHostCard(), sa.getActivatingPlayer(), true));
extraPhase.addTrigger(delTrig);
}
}

View File

@@ -56,6 +56,7 @@ public class AddTurnEffect extends SpellAbilityEffect {
SpellAbility overridingSA = AbilityFactory.getAbility(sa.getSVar(sa.getParam("ExtraTurnDelayedTriggerExcute")), sa.getHostCard());
overridingSA.setActivatingPlayer(sa.getActivatingPlayer());
delTrig.setOverridingAbility(overridingSA);
delTrig.setSpawningAbility(sa.copy(sa.getHostCard(), sa.getActivatingPlayer(), true));
extra.addTrigger(delTrig);
}
if (sa.hasParam("SkipUntap")) {

View File

@@ -665,6 +665,7 @@ public class CountersPutEffect extends SpellAbilityEffect {
final SpellAbility newSa = AbilityFactory.getAbility(trigSA, host);
newSa.setIntrinsic(intrinsic);
trig.setOverridingAbility(newSa);
trig.setSpawningAbility(sa.copy(host, sa.getActivatingPlayer(), true));
sa.getActivatingPlayer().getGame().getTriggerHandler().registerDelayedTrigger(trig);
}
}

View File

@@ -531,7 +531,6 @@ public abstract class Trigger extends TriggerReplacementBase {
public SpellAbility getSpawningAbility() {
return spawningAbility;
}
public void setSpawningAbility(SpellAbility ability) {
spawningAbility = ability;
}

View File

@@ -541,7 +541,7 @@ public class TriggerHandler {
sa.changeText();
}
} else {
Player controller = delayedTriggers.contains(regtrig) ? sa.getActivatingPlayer() : host.getController();
Player controller = regtrig.getSpawningAbility() != null ? regtrig.getSpawningAbility().getActivatingPlayer() : host.getController();
// need to copy the SA because of TriggeringObjects
sa = sa.copy(host, controller, false);
}