diff --git a/res/cardsfolder/t/treacherous_werewolf.txt b/res/cardsfolder/t/treacherous_werewolf.txt index d2344b55725..4d63f353a1d 100644 --- a/res/cardsfolder/t/treacherous_werewolf.txt +++ b/res/cardsfolder/t/treacherous_werewolf.txt @@ -2,8 +2,8 @@ Name:Treacherous Werewolf ManaCost:2 B Types:Creature Werewolf Minion PT:2/2 -S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 2 | AddToughness$ 2 | AddTrigger$ Dies | AddSVar$ TrigLose | Condition$ Threshold | Description$ Threshold - As long as seven or more cards are in your graveyard, CARDNAME gets +2/+2 and has "When CARDNAME dies, you lose 4 life." -SVar:Dies:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigLose | Secondary$ True | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, you lose 4 life. +S:Mode$ Continuous | Affected$ Card.Self | AddPower$ 2 | AddToughness$ 2 | AddTrigger$ Dies | Condition$ Threshold | Description$ Threshold - As long as seven or more cards are in your graveyard, CARDNAME gets +2/+2 and has "When CARDNAME dies, you lose 4 life." +SVar:Dies:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | ValidCard$ Card.Self | Execute$ TrigLose | Secondary$ True | TriggerController$ TriggeredCardController | TriggerDescription$ When CARDNAME dies, you lose 4 life. SVar:TrigLose:AB$ LoseLife | Cost$ 0 | Defined$ You | LifeAmount$ 4 SVar:Picture:http://www.wizards.com/global/images/magic/general/treacherous_werewolf.jpg Oracle:Threshold - As long as seven or more cards are in your graveyard, Treacherous Werewolf gets +2/+2 and has "When Treacherous Werewolf dies, you lose 4 life." diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index 315e79d3b79..7522718ab45 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -784,10 +784,10 @@ public class Card extends GameEntity implements Comparable { * @param trigs * a {@link java.util.ArrayList} object. */ - public final void setTriggers(final List trigs) { + public final void setTriggers(final List trigs, boolean intrinsicOnly) { final List copyList = new CopyOnWriteArrayList(); for (final Trigger t : trigs) { - if (t.isIntrinsic()) { + if (!intrinsicOnly || t.isIntrinsic()) { copyList.add(t.getCopyForHostCard(this)); } } diff --git a/src/main/java/forge/CardUtil.java b/src/main/java/forge/CardUtil.java index 244381a0784..00c47617f02 100644 --- a/src/main/java/forge/CardUtil.java +++ b/src/main/java/forge/CardUtil.java @@ -121,7 +121,7 @@ public final class CardUtil { newCopy.setController(in.getController(), 0); newCopy.getCharacteristics().copyFrom(in.getState(in.getCurState())); newCopy.setType(new ArrayList(in.getType())); - newCopy.setTriggers(in.getTriggers()); + newCopy.setTriggers(in.getTriggers(), false); for (SpellAbility sa : in.getManaAbility()) { newCopy.addSpellAbility(sa); sa.setSourceCard(in); diff --git a/src/main/java/forge/card/cardfactory/CardFactory.java b/src/main/java/forge/card/cardfactory/CardFactory.java index 150f2ac3508..9899ed6e1c8 100644 --- a/src/main/java/forge/card/cardfactory/CardFactory.java +++ b/src/main/java/forge/card/cardfactory/CardFactory.java @@ -495,7 +495,7 @@ public class CardFactory { to.setIntrinsicAbilities(from.getUnparsedAbilities()); to.setImageKey(from.getImageKey()); - to.setTriggers(from.getTriggers()); + to.setTriggers(from.getTriggers(), true); to.setReplacementEffects(from.getReplacementEffects()); to.setStaticAbilityStrings(from.getStaticAbilityStrings()); @@ -523,7 +523,7 @@ public class CardFactory { CardCharacteristics characteristics = from.getState(stateToCopy); to.getCharacteristics().copyFrom(characteristics); // handle triggers and replacement effect through Card class interface - to.setTriggers(characteristics.getTriggers()); + to.setTriggers(characteristics.getTriggers(), true); } public static void copySpellAbility(SpellAbility from, SpellAbility to) { diff --git a/src/main/java/forge/card/trigger/Trigger.java b/src/main/java/forge/card/trigger/Trigger.java index 7c5039c581c..576f409766b 100644 --- a/src/main/java/forge/card/trigger/Trigger.java +++ b/src/main/java/forge/card/trigger/Trigger.java @@ -466,6 +466,7 @@ public abstract class Trigger extends TriggerReplacementBase { copy.setMode(this.getMode()); copy.setTriggerPhases(this.validPhases); copy.setActiveZone(validHostZones); + copy.setTemporary(isTemporary()); return copy; } diff --git a/src/main/java/forge/card/trigger/TriggerHandler.java b/src/main/java/forge/card/trigger/TriggerHandler.java index 50eb9f9c2a1..9768c151317 100644 --- a/src/main/java/forge/card/trigger/TriggerHandler.java +++ b/src/main/java/forge/card/trigger/TriggerHandler.java @@ -243,12 +243,15 @@ public class TriggerHandler { boolean checkStatics = false; List playerCards = player.getAllCards(); - // add cards that move to hidden zones + // check LKI copies for triggers if (runParams.containsKey("Destination") && runParams.containsKey("Card")) { Card card = (Card) runParams.get("Card"); - if( !playerCards.contains(card) && player.equals(card.getController())) { - if (game.getZoneOf(card) == null || game.getZoneOf(card).getZoneType().isHidden()) { - playerCards.add(card); + if (card.getController() == player) { + for (final Trigger t : card.getTriggers()) { + if (!t.isStatic() && t.isTemporary() && canRunTrigger(t, mode, runParams)) { + this.runSingleTrigger(t, runParams); + checkStatics = true; + } } } }