diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealAndChooseCardsFromOpponentHandEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealAndChooseCardsFromOpponentHandEffect.java index e9c32d1ee..02066be33 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealAndChooseCardsFromOpponentHandEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealAndChooseCardsFromOpponentHandEffect.java @@ -4,16 +4,19 @@ import com.gempukku.lotro.filters.Filter; 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.SubAction; import com.gempukku.lotro.logic.decisions.ArbitraryCardsSelectionDecision; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; -import com.gempukku.lotro.logic.timing.UnrespondableEffect; +import com.gempukku.lotro.logic.timing.AbstractEffect; +import com.gempukku.lotro.logic.timing.Action; +import com.gempukku.lotro.logic.timing.EffectResult; import java.util.Collection; import java.util.LinkedList; import java.util.List; -public abstract class RevealAndChooseCardsFromOpponentHandEffect extends UnrespondableEffect { +public abstract class RevealAndChooseCardsFromOpponentHandEffect extends AbstractEffect { + private Action _action; private String _playerId; private String _opponentId; private PhysicalCard _source; @@ -22,7 +25,8 @@ public abstract class RevealAndChooseCardsFromOpponentHandEffect extends Unrespo private int _minChosen; private int _maxChosen; - protected RevealAndChooseCardsFromOpponentHandEffect(String playerId, String opponentId, PhysicalCard source, String text, Filter selectionFilter, int minChosen, int maxChosen) { + protected RevealAndChooseCardsFromOpponentHandEffect(Action action, String playerId, String opponentId, PhysicalCard source, String text, Filter selectionFilter, int minChosen, int maxChosen) { + _action = action; _playerId = playerId; _opponentId = opponentId; _source = source; @@ -33,10 +37,21 @@ public abstract class RevealAndChooseCardsFromOpponentHandEffect extends Unrespo } @Override - public void doPlayEffect(LotroGame game) { + public boolean isPlayableInFull(LotroGame game) { + return (game.getModifiersQuerying().canLookOrRevealCardsInHand(game.getGameState(), _opponentId)) + && game.getGameState().getHand(_opponentId).size() >= _minChosen; + } + + @Override + protected FullEffectResult playEffectReturningResult(LotroGame game) { if (game.getModifiersQuerying().canLookOrRevealCardsInHand(game.getGameState(), _opponentId)) { List opponentHand = new LinkedList(game.getGameState().getHand(_opponentId)); - game.getGameState().sendMessage(GameUtils.getCardLink(_source) + " revealed " + _opponentId + " hand - " + getAppendedNames(opponentHand)); + + SubAction subAction = new SubAction(_action); + subAction.appendEffect( + new RevealCardsFromHandEffect(_source, _opponentId, opponentHand)); + game.getActionsEnvironment().addActionToStack(subAction); + Collection selectable = Filters.filter(opponentHand, game.getGameState(), game.getModifiersQuerying(), _selectionFilter); game.getUserFeedback().sendAwaitingDecision(_playerId, @@ -47,7 +62,19 @@ public abstract class RevealAndChooseCardsFromOpponentHandEffect extends Unrespo cardsSelected(selectedCards); } }); + return new FullEffectResult(null, true, true); } + return new FullEffectResult(null, false, false); + } + + @Override + public String getText(LotroGame game) { + return null; + } + + @Override + public EffectResult.Type getType() { + return null; } protected abstract void cardsSelected(List selectedCards); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealCardsFromHandEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealCardsFromHandEffect.java new file mode 100644 index 000000000..89f22008c --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealCardsFromHandEffect.java @@ -0,0 +1,50 @@ +package com.gempukku.lotro.cards.effects; + +import com.gempukku.lotro.common.Zone; +import com.gempukku.lotro.game.PhysicalCard; +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.EffectResult; +import com.gempukku.lotro.logic.timing.results.RevealCardsFromHandResult; + +import java.util.Collection; + +public class RevealCardsFromHandEffect extends AbstractEffect { + private PhysicalCard _source; + private String _handPlayerId; + private Collection _cards; + + public RevealCardsFromHandEffect(PhysicalCard source, String handPlayerId, Collection cards) { + _source = source; + _handPlayerId = handPlayerId; + _cards = cards; + } + + @Override + public String getText(LotroGame game) { + return null; + } + + @Override + public EffectResult.Type getType() { + return EffectResult.Type.REVEAL_CARDS_FROM_HAND; + } + + @Override + public boolean isPlayableInFull(LotroGame game) { + for (PhysicalCard card : _cards) { + if (card.getZone() != Zone.HAND) + return false; + } + + return true; + } + + @Override + protected FullEffectResult playEffectReturningResult(LotroGame game) { + game.getGameState().sendMessage(GameUtils.getCardLink(_source) + " revealed " + _handPlayerId + " cards in hand - " + getAppendedNames(_cards)); + + return new FullEffectResult(new EffectResult[]{new RevealCardsFromHandResult(_source, _handPlayerId, _cards)}, true, true); + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealRandomCardsFromHandEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealRandomCardsFromHandEffect.java index acf502b3b..661cb2283 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealRandomCardsFromHandEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/RevealRandomCardsFromHandEffect.java @@ -5,6 +5,7 @@ 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.EffectResult; +import com.gempukku.lotro.logic.timing.results.RevealCardsFromHandResult; import java.util.List; @@ -28,7 +29,7 @@ public abstract class RevealRandomCardsFromHandEffect extends AbstractEffect { @Override public EffectResult.Type getType() { - return null; + return EffectResult.Type.REVEAL_CARDS_FROM_HAND; } @Override @@ -38,7 +39,7 @@ public abstract class RevealRandomCardsFromHandEffect extends AbstractEffect { if (randomCards.size() > 0) game.getGameState().sendMessage(GameUtils.getCardLink(_source) + " revealed cards from " + _playerHand + " hand at random - " + getAppendedNames(randomCards)); cardsRevealed(randomCards); - return new FullEffectResult(null, randomCards.size() == _count, randomCards.size() == _count); + return new FullEffectResult(new EffectResult[]{new RevealCardsFromHandResult(_source, _playerHand, randomCards)}, randomCards.size() == _count, randomCards.size() == _count); } return new FullEffectResult(null, false, false); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_036.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_036.java index 6b7a8e0d3..9eb739283 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_036.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_036.java @@ -53,7 +53,7 @@ public class Card1_036 extends AbstractOldEvent { protected void opponentChosen(String opponentId) { List hand = game.getGameState().getHand(opponentId); int orcsCount = Filters.filter(hand, game.getGameState(), game.getModifiersQuerying(), Filters.race(Race.ORC)).size(); - action.appendEffect(new RevealAndChooseCardsFromOpponentHandEffect(playerId, opponentId, self, "Opponent's hand", Filters.none, 0, 0) { + action.appendEffect(new RevealAndChooseCardsFromOpponentHandEffect(action, playerId, opponentId, self, "Opponent's hand", Filters.none, 0, 0) { @Override protected void cardsSelected(List selectedCards) { // Do nothing diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_044.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_044.java index b114de3c1..00503e187 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_044.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_044.java @@ -50,7 +50,7 @@ public class Card1_044 extends AbstractOldEvent { @Override protected void opponentChosen(final String opponentId) { action.appendEffect( - new RevealAndChooseCardsFromOpponentHandEffect(playerId, opponentId, self, "Choose an ISENGARD minion", Filters.and(Filters.culture(Culture.ISENGARD), Filters.type(CardType.MINION)), 0, 1) { + new RevealAndChooseCardsFromOpponentHandEffect(action, playerId, opponentId, self, "Choose an ISENGARD minion", Filters.and(Filters.culture(Culture.ISENGARD), Filters.type(CardType.MINION)), 0, 1) { @Override protected void cardsSelected(List selectedCards) { if (selectedCards.size() > 0) { diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_075.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_075.java index 6694f0f9f..84f15746a 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_075.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_075.java @@ -57,7 +57,7 @@ public class Card1_075 extends AbstractAttachableFPPossession { @Override protected void opponentChosen(final String opponentId) { action.appendEffect( - new RevealAndChooseCardsFromOpponentHandEffect(playerId, opponentId, self, "Opponent's hand", Filters.none, 0, 0) { + new RevealAndChooseCardsFromOpponentHandEffect(action, playerId, opponentId, self, "Opponent's hand", Filters.none, 0, 0) { @Override protected void cardsSelected(List selectedCards) { Collection orcs = Filters.filter(game.getGameState().getHand(opponentId), game.getGameState(), game.getModifiersQuerying(), Filters.race(Race.ORC)); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_086.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_086.java index 946aebeb3..2a8aa40d0 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_086.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_086.java @@ -42,7 +42,7 @@ public class Card1_086 extends AbstractOldEvent { @Override protected void opponentChosen(String opponentId) { action.appendEffect( - new RevealAndChooseCardsFromOpponentHandEffect(playerId, opponentId, self, "Opponent's hand", Filters.none, 0, 0) { + new RevealAndChooseCardsFromOpponentHandEffect(action, playerId, opponentId, self, "Opponent's hand", Filters.none, 0, 0) { @Override protected void cardsSelected(List selectedCards) { // Do nothing, just revealing diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/shire/Card1_313.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/shire/Card1_313.java index ca85a7557..184955f75 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/shire/Card1_313.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/shire/Card1_313.java @@ -56,7 +56,7 @@ public class Card1_313 extends AbstractAttachableFPPossession { @Override protected void opponentChosen(final String opponentId) { action.appendEffect( - new RevealAndChooseCardsFromOpponentHandEffect(playerId, opponentId, self, "Opponent's hand", Filters.none, 0, 0) { + new RevealAndChooseCardsFromOpponentHandEffect(action, playerId, opponentId, self, "Opponent's hand", Filters.none, 0, 0) { @Override protected void cardsSelected(List selectedCards) { Collection orcs = Filters.filter(game.getGameState().getHand(opponentId), game.getGameState(), game.getModifiersQuerying(), Filters.race(Race.ORC)); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/rohan/Card5_096.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/rohan/Card5_096.java new file mode 100644 index 000000000..caaed7dfb --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/rohan/Card5_096.java @@ -0,0 +1,66 @@ +package com.gempukku.lotro.cards.set5.rohan; + +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.AddBurdenEffect; +import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; +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.effects.ChooseActiveCardEffect; +import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.results.RevealCardsFromHandResult; + +import java.util.Collections; +import java.util.List; + +/** + * Set: Battle of Helm's Deep + * Side: Shadow + * Culture: Sauron + * Twilight Cost: 0 + * Type: Event + * Game Text: Skirmish: Make a companion or ally skirmishing a [SAURON] Orc strength -1 for each ring-bound companion. + * Response: If a free people player reveals this card from your hand, discard this card to add 2 burdens. + */ +public class Card5_096 extends AbstractEvent { + public Card5_096() { + super(Side.SHADOW, 0, Culture.SAURON, "Eye of Barad-Dur", Phase.SKIRMISH); + } + + @Override + public PlayEventAction getPlayCardAction(String playerId, LotroGame game, final PhysicalCard self, int twilightModifier) { + final PlayEventAction action = new PlayEventAction(self); + action.appendEffect( + new ChooseActiveCardEffect(self, playerId, "Choose companion or ally", + Filters.or(CardType.COMPANION, CardType.ALLY), Filters.inSkirmishAgainst(Culture.SAURON, Race.ORC)) { + @Override + protected void cardSelected(LotroGame game, PhysicalCard card) { + int ringBoundCompanions = Filters.countActive(game.getGameState(), game.getModifiersQuerying(), CardType.COMPANION, Keyword.RING_BOUND); + action.insertEffect( + new AddUntilEndOfPhaseModifierEffect( + new StrengthModifier(self, Filters.sameCard(card), -ringBoundCompanions), Phase.SKIRMISH)); + } + }); + return action; + } + + @Override + public List getOptionalAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { + if (effectResult.getType() == EffectResult.Type.REVEAL_CARDS_FROM_HAND) { + RevealCardsFromHandResult revealResult = (RevealCardsFromHandResult) effectResult; + if (revealResult.getSource().getOwner().equals(game.getGameState().getCurrentPlayerId()) + && revealResult.getRevealedCards().contains(self) + && PlayConditions.canPayForShadowCard(game, self, 0)) { + PlayEventAction action = new PlayEventAction(self); + action.appendEffect( + new AddBurdenEffect(self, 2)); + return Collections.singletonList(action); + } + } + return null; + } +} 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 56754cb67..367623c93 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 @@ -20,7 +20,8 @@ public abstract class EffectResult { PUT_ON_THE_ONE_RING, REMOVE_BURDEN, ADD_BURDEN, - WHEN_MOVE_FROM, WHEN_FELLOWSHIP_MOVES, WHEN_MOVE_TO + WHEN_MOVE_FROM, WHEN_FELLOWSHIP_MOVES, WHEN_MOVE_TO, + REVEAL_CARDS_FROM_HAND } private Type _type; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/RevealCardsFromHandResult.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/RevealCardsFromHandResult.java new file mode 100644 index 000000000..05a0a452f --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/RevealCardsFromHandResult.java @@ -0,0 +1,31 @@ +package com.gempukku.lotro.logic.timing.results; + +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.logic.timing.EffectResult; + +import java.util.Collection; + +public class RevealCardsFromHandResult extends EffectResult { + private PhysicalCard _source; + private String _playerId; + private Collection _revealedCards; + + public RevealCardsFromHandResult(PhysicalCard source, String playerId, Collection revealedCards) { + super(Type.REVEAL_CARDS_FROM_HAND); + _source = source; + _playerId = playerId; + _revealedCards = revealedCards; + } + + public PhysicalCard getSource() { + return _source; + } + + public String getPlayerId() { + return _playerId; + } + + public Collection getRevealedCards() { + return _revealedCards; + } +}