From c845ab95bf6c405a2fd1ebd0fc6f2826c1a024ce Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Mon, 28 Nov 2011 18:17:06 +0000 Subject: [PATCH] Splitting the discard from play effect result for each card. --- .../lotro/cards/TriggerConditions.java | 6 ++++ .../cards/effects/LiberateASiteEffect.java | 5 ++-- .../effects/ReturnCardsToHandEffect.java | 6 ++-- .../effects/StackCardFromPlayEffect.java | 5 ++-- .../lotro/cards/set1/moria/Card1_193.java | 28 +++++++++---------- .../lotro/cards/set3/shire/Card3_111.java | 2 +- .../effects/DiscardCardsFromPlayEffect.java | 4 ++- .../lotro/logic/effects/KillEffect.java | 8 ++++-- .../lotro/logic/timing/EffectResult.java | 8 ++++-- .../results/DiscardCardFromHandResult.java | 2 +- .../results/DiscardCardsFromPlayResult.java | 14 ++++------ .../logic/timing/rules/DiscardedCardRule.java | 17 ++++------- 12 files changed, 58 insertions(+), 47 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/TriggerConditions.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/TriggerConditions.java index f825c67c4..d4575eeec 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/TriggerConditions.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/TriggerConditions.java @@ -136,6 +136,12 @@ public class TriggerConditions { return false; } + public static boolean forEachDiscardedFromPlay(LotroGame game, EffectResult effectResult, Filterable... filters) { + if (effectResult.getType() == EffectResult.Type.FOR_EACH_DISCARDED_FROM_PLAY) + return Filters.and(filters).accepts(game.getGameState(), game.getModifiersQuerying(), ((DiscardCardsFromPlayResult) effectResult).getDiscardedCard()); + return false; + } + public static boolean forEachWounded(LotroGame game, EffectResult effectResult, Filterable... filters) { if (effectResult.getType() == EffectResult.Type.FOR_EACH_WOUNDED) return Filters.and(filters).accepts(game.getGameState(), game.getModifiersQuerying(), ((WoundResult) effectResult).getWoundedCard()); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/LiberateASiteEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/LiberateASiteEffect.java index 8194aefc9..1bbf2dd3b 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/LiberateASiteEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/LiberateASiteEffect.java @@ -69,8 +69,9 @@ public class LiberateASiteEffect extends AbstractEffect { game.getGameState().loseControlOfCard(siteToLiberate, Zone.ADVENTURE_PATH); - if (discardedCards.size() > 0) - game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCards)); + for (PhysicalCard discardedCard : discardedCards) + game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCard)); + return new FullEffectResult(true, true); } return new FullEffectResult(false, false); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ReturnCardsToHandEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ReturnCardsToHandEffect.java index 9a25557d9..ba20b2fd1 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ReturnCardsToHandEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/ReturnCardsToHandEffect.java @@ -77,8 +77,10 @@ public class ReturnCardsToHandEffect extends AbstractEffect { if (_source != null && cardsToReturnToHand.size() > 0) game.getGameState().sendMessage(GameUtils.getCardLink(_source) + " returns " + getAppendedNames(cardsToReturnToHand) + " to hand"); - if (discardedFromPlay.size() > 0) - game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedFromPlay)); + + for (PhysicalCard discardedCard : discardedFromPlay) + game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCard)); + return new FullEffectResult(true, true); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackCardFromPlayEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackCardFromPlayEffect.java index 9041f98fb..6b333ccd0 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackCardFromPlayEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/StackCardFromPlayEffect.java @@ -66,8 +66,9 @@ public class StackCardFromPlayEffect extends AbstractEffect { game.getGameState().stackCard(game, _card, _stackOn); // Send the result (attached cards get discarded) - if (discardedCards.size() > 0) - game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCards)); + for (PhysicalCard discardedCard : discardedCards) + game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCard)); + return new FullEffectResult(true, true); } return new FullEffectResult(false, false); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_193.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_193.java index 13d493173..a5446d8ec 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_193.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_193.java @@ -1,6 +1,7 @@ package com.gempukku.lotro.cards.set1.moria; import com.gempukku.lotro.cards.AbstractPermanent; +import com.gempukku.lotro.cards.TriggerConditions; import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDiscardEffect; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; @@ -9,11 +10,11 @@ import com.gempukku.lotro.common.Zone; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.GameUtils; import com.gempukku.lotro.logic.actions.ActivateCardAction; import com.gempukku.lotro.logic.timing.EffectResult; import com.gempukku.lotro.logic.timing.results.DiscardCardsFromPlayResult; -import java.util.Collection; import java.util.Collections; import java.util.List; @@ -33,20 +34,19 @@ public class Card1_193 extends AbstractPermanent { @Override public List getOptionalInPlayAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (effectResult.getType() == EffectResult.Type.DISCARD_FROM_PLAY) { + if (TriggerConditions.forEachDiscardedFromPlay(game, effectResult, Culture.MORIA, Filters.weapon, Zone.DISCARD, Filters.playable(game, -1))) { DiscardCardsFromPlayResult discardResult = (DiscardCardsFromPlayResult) effectResult; - Collection discardedCards = discardResult.getDiscardedCards(); - if (Filters.filter(discardedCards, game.getGameState(), game.getModifiersQuerying(), Zone.DISCARD, Culture.MORIA, Filters.weapon, Filters.playable(game, -1)).size() > 0) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendEffect( - new ChooseAndPlayCardFromDiscardEffect(playerId, - game, - -1, Filters.and( - Culture.MORIA, - Filters.weapon, - Filters.in(discardedCards)))); - return Collections.singletonList(action); - } + final PhysicalCard discardedCard = discardResult.getDiscardedCard(); + ActivateCardAction action = new ActivateCardAction(self); + action.setText("Play " + GameUtils.getCardLink(discardedCard)); + action.appendEffect( + new ChooseAndPlayCardFromDiscardEffect(playerId, + game, + -1, Filters.and( + Culture.MORIA, + Filters.weapon, + discardedCard))); + return Collections.singletonList(action); } return null; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/shire/Card3_111.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/shire/Card3_111.java index aeec3c00b..601b6fe94 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/shire/Card3_111.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/shire/Card3_111.java @@ -32,7 +32,7 @@ public class Card3_111 extends AbstractAlly { @Override public List getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (effectResult.getType() == EffectResult.Type.DISCARD_FROM_HAND) { + if (effectResult.getType() == EffectResult.Type.FOR_EACH_DISCARDED_FROM_HAND) { DiscardCardFromHandResult discardCardsResult = (DiscardCardFromHandResult) effectResult; if (discardCardsResult.isForced()) { OptionalTriggerAction action = new OptionalTriggerAction(self); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DiscardCardsFromPlayEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DiscardCardsFromPlayEffect.java index fe85d69fa..96e44106a 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DiscardCardsFromPlayEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DiscardCardsFromPlayEffect.java @@ -86,6 +86,8 @@ public class DiscardCardsFromPlayEffect extends AbstractPreventableCardEffect { if (_source != null && discardedCards.size() > 0) game.getGameState().sendMessage(_source.getOwner() + " discards " + getAppendedNames(discardedCards) + " from play using " + GameUtils.getCardLink(_source)); - game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCards)); + + for (PhysicalCard discardedCard : discardedCards) + game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCard)); } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/KillEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/KillEffect.java index 07c4ed0a4..8b9cff690 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/KillEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/KillEffect.java @@ -108,13 +108,17 @@ public class KillEffect extends AbstractSuccessfulEffect { game.getActionsEnvironment().emitEffectResult(new KilledResult(killedCards, _cause)); for (PhysicalCard killedCard : killedCards) game.getActionsEnvironment().emitEffectResult(new ForEachKilledResult(killedCard, _cause)); - game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCards)); + for (PhysicalCard discardedCard : discardedCards) + game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCard)); + } else if (killedCards.size() > 0) { game.getActionsEnvironment().emitEffectResult(new KilledResult(killedCards, _cause)); for (PhysicalCard killedCard : killedCards) game.getActionsEnvironment().emitEffectResult(new ForEachKilledResult(killedCard, _cause)); } else if (discardedCards.size() > 0) { - game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCards)); + for (PhysicalCard discardedCard : discardedCards) + game.getActionsEnvironment().emitEffectResult(new DiscardCardsFromPlayResult(discardedCard)); + } } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java index a3655b2d0..8817bfe32 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java @@ -4,13 +4,15 @@ public abstract class EffectResult { public enum Type { // Translated to new format ANY_NUMBER_KILLED, FOR_EACH_KILLED, - FOR_EACH_WOUNDED, FOR_EACH_EXERTED, + FOR_EACH_WOUNDED, FOR_EACH_EXERTED, FOR_EACH_DISCARDED_FROM_PLAY, - // Old format - DISCARD_FROM_PLAY, DISCARD_FROM_HAND, + FOR_EACH_DISCARDED_FROM_HAND, FREE_PEOPLE_PLAYER_STARTS_ASSIGNING, + // Old format + + ASSIGNMENT, OVERWHELM_IN_SKIRMISH, RESOLVE_SKIRMISH, START_OF_PHASE, diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/DiscardCardFromHandResult.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/DiscardCardFromHandResult.java index a242463bb..3bf90c76c 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/DiscardCardFromHandResult.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/DiscardCardFromHandResult.java @@ -9,7 +9,7 @@ public class DiscardCardFromHandResult extends EffectResult { private boolean _forced; public DiscardCardFromHandResult(PhysicalCard source, PhysicalCard card, boolean forced) { - super(Type.DISCARD_FROM_HAND); + super(Type.FOR_EACH_DISCARDED_FROM_HAND); _source = source; _card = card; _forced = forced; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/DiscardCardsFromPlayResult.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/DiscardCardsFromPlayResult.java index 86b5e1d2e..e1ba47b20 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/DiscardCardsFromPlayResult.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/DiscardCardsFromPlayResult.java @@ -3,17 +3,15 @@ package com.gempukku.lotro.logic.timing.results; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.logic.timing.EffectResult; -import java.util.Set; - public class DiscardCardsFromPlayResult extends EffectResult { - private Set _cards; + private PhysicalCard _card; - public DiscardCardsFromPlayResult(Set cards) { - super(EffectResult.Type.DISCARD_FROM_PLAY); - _cards = cards; + public DiscardCardsFromPlayResult(PhysicalCard card) { + super(EffectResult.Type.FOR_EACH_DISCARDED_FROM_PLAY); + _card = card; } - public Set getDiscardedCards() { - return _cards; + public PhysicalCard getDiscardedCard() { + return _card; } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/DiscardedCardRule.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/DiscardedCardRule.java index a23270ab8..367ecc4a3 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/DiscardedCardRule.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/DiscardedCardRule.java @@ -8,8 +8,7 @@ import com.gempukku.lotro.logic.actions.RequiredTriggerAction; import com.gempukku.lotro.logic.timing.EffectResult; import com.gempukku.lotro.logic.timing.results.DiscardCardsFromPlayResult; -import java.util.Collection; -import java.util.LinkedList; +import java.util.Collections; import java.util.List; public class DiscardedCardRule { @@ -24,16 +23,12 @@ public class DiscardedCardRule { new AbstractActionProxy() { @Override public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult) { - if (effectResult.getType() == EffectResult.Type.DISCARD_FROM_PLAY) { + if (effectResult.getType() == EffectResult.Type.FOR_EACH_DISCARDED_FROM_PLAY) { DiscardCardsFromPlayResult discardResult = (DiscardCardsFromPlayResult) effectResult; - Collection discardedCards = discardResult.getDiscardedCards(); - List actions = new LinkedList(); - for (PhysicalCard discardedCard : discardedCards) { - RequiredTriggerAction trigger = discardedCard.getBlueprint().getDiscardedFromPlayRequiredTrigger(game, discardedCard); - if (trigger != null) - actions.add(trigger); - } - return actions; + final PhysicalCard discardedCard = discardResult.getDiscardedCard(); + RequiredTriggerAction trigger = discardedCard.getBlueprint().getDiscardedFromPlayRequiredTrigger(game, discardedCard); + if (trigger != null) + return Collections.singletonList(trigger); } return null; }