From ddce2bb584754d874e1b73d411cf0fed291e9b8a Mon Sep 17 00:00:00 2001 From: Sloth Date: Tue, 4 Jun 2013 08:48:35 +0000 Subject: [PATCH] - Fixed triggers on clones leaving the battlefield not firing. --- src/main/java/forge/CardUtil.java | 3 +++ src/main/java/forge/card/trigger/TriggerHandler.java | 11 +++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/forge/CardUtil.java b/src/main/java/forge/CardUtil.java index 0392f6aee06..02f062be770 100644 --- a/src/main/java/forge/CardUtil.java +++ b/src/main/java/forge/CardUtil.java @@ -120,6 +120,9 @@ public final class CardUtil { newCopy.setOwner(in.getOwner()); newCopy.setController(in.getController(), 0); newCopy.getCharacteristics().copyFrom(in.getState(in.getCurState())); + if (in.isCloned()) { + newCopy.addAlternateState(CardCharacteristicName.Cloner); + } newCopy.setType(new ArrayList(in.getType())); newCopy.setTriggers(in.getTriggers(), false); for (SpellAbility sa : in.getManaAbility()) { diff --git a/src/main/java/forge/card/trigger/TriggerHandler.java b/src/main/java/forge/card/trigger/TriggerHandler.java index d13301a6faf..7e868659817 100644 --- a/src/main/java/forge/card/trigger/TriggerHandler.java +++ b/src/main/java/forge/card/trigger/TriggerHandler.java @@ -249,7 +249,8 @@ public class TriggerHandler { Card card = (Card) runParams.get("Card"); if (card.getController() == player) { for (final Trigger t : card.getTriggers()) { - if (!t.isStatic() && (card.isToken() || !t.isIntrinsic()) && canRunTrigger(t, mode, runParams)) { + if (!t.isStatic() && (card.isCloned() || card.isToken() || !t.isIntrinsic()) + && canRunTrigger(t, mode, runParams)) { this.runSingleTrigger(t, runParams); checkStatics = true; } @@ -348,11 +349,7 @@ public class TriggerHandler { } SpellAbility sa = null; - Card host = game.getCardState(regtrig.getHostCard()); - - if (host == null) { - host = regtrig.getHostCard(); - } + Card host = regtrig.getHostCard(); sa = regtrig.getOverridingAbility(); if (sa == null) { @@ -366,6 +363,8 @@ public class TriggerHandler { sa = AbilityFactory.getAbility(host.getSVar(triggerParams.get("Execute")), host); } } + host = game.getCardState(regtrig.getHostCard()); + sa.setSourceCard(host); sa.setTrigger(true); sa.setSourceTrigger(regtrig.getId()); regtrig.setTriggeringObjects(sa);