From a46d22484b60216067e1bc3e96e18d8a181637d6 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Sun, 20 Nov 2011 01:41:41 +0000 Subject: [PATCH] "Sent Back" --- .../PutCharacterFromPlayInDeadPileEffect.java | 82 +++++++++++++++++++ .../lotro/cards/set7/sauron/Card7_266.java | 12 +-- .../lotro/cards/set8/gandalf/Card8_020.java | 16 ++-- .../lotro/cards/set9/gandalf/Card9_027.java | 55 +++++++++++++ 4 files changed, 145 insertions(+), 20 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCharacterFromPlayInDeadPileEffect.java create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set9/gandalf/Card9_027.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCharacterFromPlayInDeadPileEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCharacterFromPlayInDeadPileEffect.java new file mode 100644 index 000000000..229794c40 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCharacterFromPlayInDeadPileEffect.java @@ -0,0 +1,82 @@ +package com.gempukku.lotro.cards.effects; + +import com.gempukku.lotro.common.Zone; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.GameState; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.GameUtils; +import com.gempukku.lotro.logic.timing.AbstractEffect; +import com.gempukku.lotro.logic.timing.results.DiscardCardsFromPlayResult; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class PutCharacterFromPlayInDeadPileEffect extends AbstractEffect { + private PhysicalCard _card; + + public PutCharacterFromPlayInDeadPileEffect(PhysicalCard card) { + _card = card; + } + + @Override + public String getText(LotroGame game) { + return null; + } + + @Override + public Type getType() { + return null; + } + + @Override + public boolean isPlayableInFull(LotroGame game) { + return _card.getZone() != null && _card.getZone().isInPlay(); + } + + @Override + protected FullEffectResult playEffectReturningResult(LotroGame game) { + if (isPlayableInFull(game)) { + GameState gameState = game.getGameState(); + + gameState.sendMessage(GameUtils.getCardLink(_card) + " is put into dead pile"); + + // For result + Set discardedCards = new HashSet(); + + // Prepare the moves + Set toRemoveFromZone = new HashSet(); + Set toAddToDeadPile = new HashSet(); + Set toAddToDiscard = new HashSet(); + + toRemoveFromZone.add(_card); + + toAddToDeadPile.add(_card); + + List attachedCards = gameState.getAttachedCards(_card); + discardedCards.addAll(attachedCards); + toRemoveFromZone.addAll(attachedCards); + toAddToDiscard.addAll(attachedCards); + + List stackedCards = gameState.getStackedCards(_card); + toRemoveFromZone.addAll(stackedCards); + toAddToDiscard.addAll(stackedCards); + + gameState.removeCardsFromZone(null, toRemoveFromZone); + + for (PhysicalCard deadCard : toAddToDeadPile) + gameState.addCardToZone(game, deadCard, Zone.DEAD); + + for (PhysicalCard discardedCard : toAddToDiscard) + gameState.addCardToZone(game, discardedCard, Zone.DISCARD); + + if (discardedCards.size() > 0) { + return new FullEffectResult(Arrays.asList(new DiscardCardsFromPlayResult(discardedCards)), true, true); + } else { + return new FullEffectResult(null, true, true); + } + } + return new FullEffectResult(null, false, false); + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_266.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_266.java index 5067bd645..1da683aba 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_266.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_266.java @@ -3,14 +3,12 @@ package com.gempukku.lotro.cards.set7.sauron; import com.gempukku.lotro.cards.AbstractEvent; import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.actions.PlayEventAction; +import com.gempukku.lotro.cards.effects.PutCharacterFromPlayInDeadPileEffect; import com.gempukku.lotro.common.*; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; import com.gempukku.lotro.logic.effects.RemoveThreatsEffect; -import com.gempukku.lotro.logic.timing.UnrespondableEffect; - -import java.util.Collections; /** * Set: The Return of the King @@ -43,13 +41,7 @@ public class Card7_266 extends AbstractEvent { @Override protected void cardSelected(LotroGame game, final PhysicalCard card) { action.insertEffect( - new UnrespondableEffect() { - @Override - protected void doPlayEffect(LotroGame game) { - game.getGameState().removeCardsFromZone(game.getGameState().getCurrentPlayerId(), Collections.singleton(card)); - game.getGameState().addCardToZone(game, card, Zone.DEAD); - } - }); + new PutCharacterFromPlayInDeadPileEffect(card)); } }); return action; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/gandalf/Card8_020.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/gandalf/Card8_020.java index 359547ee6..f8751108e 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/gandalf/Card8_020.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/gandalf/Card8_020.java @@ -4,17 +4,19 @@ import com.gempukku.lotro.cards.AbstractEvent; import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.actions.PlayEventAction; import com.gempukku.lotro.cards.effects.PutCardFromDeckIntoHandOrDiscardEffect; +import com.gempukku.lotro.cards.effects.PutCharacterFromPlayInDeadPileEffect; import com.gempukku.lotro.cards.effects.ShuffleDeckEffect; import com.gempukku.lotro.cards.effects.choose.ChooseArbitraryCardsEffect; -import com.gempukku.lotro.common.*; +import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.common.Side; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; -import com.gempukku.lotro.logic.timing.UnrespondableEffect; import java.util.Collection; -import java.util.Collections; /** * Set: Siege of Gondor @@ -44,13 +46,7 @@ public class Card8_020 extends AbstractEvent { @Override protected void cardSelected(LotroGame game, final PhysicalCard card) { action.insertCost( - new UnrespondableEffect() { - @Override - protected void doPlayEffect(LotroGame game) { - game.getGameState().removeCardsFromZone(playerId, Collections.singleton(card)); - game.getGameState().addCardToZone(game, card, Zone.DEAD); - } - }); + new PutCharacterFromPlayInDeadPileEffect(card)); action.appendEffect( new ChooseArbitraryCardsEffect(playerId, "Choose cards to put in your hand", game.getGameState().getDeck(playerId), 0, 3) { @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set9/gandalf/Card9_027.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set9/gandalf/Card9_027.java new file mode 100644 index 000000000..a1c730921 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set9/gandalf/Card9_027.java @@ -0,0 +1,55 @@ +package com.gempukku.lotro.cards.set9.gandalf; + +import com.gempukku.lotro.cards.AbstractPermanent; +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.effects.PutCharacterFromPlayInDeadPileEffect; +import com.gempukku.lotro.common.*; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.actions.ActivateCardAction; +import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect; +import com.gempukku.lotro.logic.timing.Action; +import com.gempukku.lotro.logic.timing.UnrespondableEffect; + +import java.util.Collections; +import java.util.List; + +/** + * Set: Reflections + * Side: Free + * Culture: Gandalf + * Twilight Cost: 2 + * Type: Condition • Support Area + * Game Text: Skirmish: Discard this condition to discard each minion skirmishing a Wizard. Place that Wizard in your + * dead pile. Fellowship or Regroup: Play a Wizard (even if another copy of that Wizard is in your dead pile). + */ +public class Card9_027 extends AbstractPermanent { + public Card9_027() { + super(Side.FREE_PEOPLE, 2, CardType.CONDITION, Culture.GANDALF, Zone.SUPPORT, "Sent Back"); + } + + @Override + protected List getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) { + if (PlayConditions.canUseFPCardDuringPhase(game, Phase.SKIRMISH, self) + && PlayConditions.canSelfDiscard(self, game)) { + final ActivateCardAction action = new ActivateCardAction(self); + action.appendCost( + new DiscardCardsFromPlayEffect(self, self)); + action.appendEffect( + new DiscardCardsFromPlayEffect(self, CardType.MINION, Filters.inSkirmishAgainst(Race.WIZARD))); + action.appendEffect( + new UnrespondableEffect() { + @Override + protected void doPlayEffect(LotroGame game) { + PhysicalCard wizard = Filters.findFirstActive(game.getGameState(), game.getModifiersQuerying(), Race.WIZARD, Filters.inSkirmish); + if (wizard != null) + action.appendEffect( + new PutCharacterFromPlayInDeadPileEffect(wizard)); + } + }); + return Collections.singletonList(action); + } + return null; + } +}