Resolve "Wrong player controls ETB trigger of Clone"

This commit is contained in:
Hans Mackowiak
2020-02-25 15:03:20 +00:00
parent c916c4da31
commit f03e386399

View File

@@ -274,7 +274,7 @@ public class TriggerHandler {
} }
private void runStateTrigger(final Map<AbilityKey, Object> runParams) { private void runStateTrigger(final Map<AbilityKey, Object> runParams) {
for (final Trigger t: activeTriggers) { for (final Trigger t: Lists.newArrayList(activeTriggers)) {
if (canRunTrigger(t, TriggerType.Always, runParams)) { if (canRunTrigger(t, TriggerType.Always, runParams)) {
runSingleTrigger(t, runParams); runSingleTrigger(t, runParams);
} }
@@ -545,12 +545,17 @@ public class TriggerHandler {
// need to set as Overriding Abiltiy so it can be copied better // need to set as Overriding Abiltiy so it can be copied better
regtrig.setOverridingAbility(sa); regtrig.setOverridingAbility(sa);
} }
sa.setActivatingPlayer(host.getController());
if (regtrig.isIntrinsic()) {
sa.setIntrinsic(true);
sa.changeText();
}
} else { } else {
// need to copy the SA because of TriggeringObjects // need to copy the SA because of TriggeringObjects
sa = sa.copy(); sa = sa.copy(host, host.getController(), false);
} }
sa.setHostCard(host);
sa.setLastStateBattlefield(game.getLastStateBattlefield()); sa.setLastStateBattlefield(game.getLastStateBattlefield());
sa.setLastStateGraveyard(game.getLastStateGraveyard()); sa.setLastStateGraveyard(game.getLastStateGraveyard());
@@ -562,9 +567,7 @@ public class TriggerHandler {
sa.setTriggeringObjects(regtrig.getStoredTriggeredObjects()); sa.setTriggeringObjects(regtrig.getStoredTriggeredObjects());
} }
if (sa.getActivatingPlayer() == null) { // overriding delayed trigger should have set activator if (sa.getDeltrigActivatingPlayer() != null) {
sa.setActivatingPlayer(host.getController());
} else if (sa.getDeltrigActivatingPlayer() != null) {
// make sure that the original delayed trigger activator is restored // make sure that the original delayed trigger activator is restored
// (may have been overwritten by the AI simulation routines, e.g. Rainbow Vale) // (may have been overwritten by the AI simulation routines, e.g. Rainbow Vale)
sa.setActivatingPlayer(sa.getDeltrigActivatingPlayer()); sa.setActivatingPlayer(sa.getDeltrigActivatingPlayer());
@@ -579,11 +582,6 @@ public class TriggerHandler {
host.addRemembered(sa.getActivatingPlayer()); host.addRemembered(sa.getActivatingPlayer());
} }
if (regtrig.isIntrinsic() && regtrig.getOverridingAbility() == null) {
sa.setIntrinsic(true);
sa.changeText();
}
sa.setStackDescription(sa.toString()); sa.setStackDescription(sa.toString());
if (sa.getApi() == ApiType.Charm && !sa.isWrapper()) { if (sa.getApi() == ApiType.Charm && !sa.isWrapper()) {
if (!CharmEffect.makeChoices(sa)) { if (!CharmEffect.makeChoices(sa)) {