diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/gollum/Card15_052.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/gollum/Card15_052.java index 8d3c47ec1..04e2618bd 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/gollum/Card15_052.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/gollum/Card15_052.java @@ -3,8 +3,8 @@ package com.gempukku.lotro.cards.set15.gollum; 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.AddUntilEndOfTurnModifierEffect; import com.gempukku.lotro.cards.effects.PreventableEffect; +import com.gempukku.lotro.cards.effects.SnapshotAndApplyStrengthModifierUntilStartOfPhaseEffect; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Phase; @@ -15,7 +15,7 @@ import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.SubAction; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect; -import com.gempukku.lotro.logic.modifiers.StrengthModifier; +import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator; import com.gempukku.lotro.logic.timing.Effect; /** @@ -53,8 +53,8 @@ public class Card15_052 extends AbstractEvent { @Override public Effect createPreventionCostForPlayer(SubAction subAction, String playerId) { - return new AddUntilEndOfTurnModifierEffect( - new StrengthModifier(self, CardType.MINION, -2)) { + return new SnapshotAndApplyStrengthModifierUntilStartOfPhaseEffect( + self, new ConstantEvaluator(-2), Phase.FELLOWSHIP, CardType.MINION) { @Override public String getText(LotroGame game) { return "Make each minion strength -2"; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/uruk_hai/Card17_113.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/uruk_hai/Card17_113.java index e08d5d945..7efc7b863 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/uruk_hai/Card17_113.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/uruk_hai/Card17_113.java @@ -4,8 +4,8 @@ import com.gempukku.lotro.cards.AbstractPermanent; import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.TriggerConditions; import com.gempukku.lotro.cards.effects.AddTokenEffect; -import com.gempukku.lotro.cards.effects.RemoveTokenEffect; import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect; +import com.gempukku.lotro.cards.effects.choose.ChooseAndRemoveCultureTokensFromCardEffect; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; @@ -45,10 +45,10 @@ public class Card17_113 extends AbstractPermanent { @Override public List getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { if (TriggerConditions.winsSkirmish(game, effectResult, CardType.MINION, Culture.URUK_HAI) - && PlayConditions.canRemoveTokens(game, self, Token.URUK_HAI)) { + && PlayConditions.canRemoveTokens(game, Token.URUK_HAI, 1, CardType.CONDITION)) { OptionalTriggerAction action = new OptionalTriggerAction(self); action.appendCost( - new RemoveTokenEffect(self, self, Token.URUK_HAI)); + new ChooseAndRemoveCultureTokensFromCardEffect(self, playerId, Token.URUK_HAI, 1, CardType.CONDITION)); action.appendEffect( new ChooseAndExertCharactersEffect(action, playerId, 1, 1, CardType.COMPANION)); return Collections.singletonList(action); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set19/rohan/Card19_024.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set19/rohan/Card19_024.java index 6ca1b104c..c190c3dbc 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set19/rohan/Card19_024.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set19/rohan/Card19_024.java @@ -44,7 +44,7 @@ public class Card19_024 extends AbstractAttachable { @Override public List getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (TriggerConditions.winsSkirmish(game, effectResult, self.getAttachedTo())) { + if (TriggerConditions.startOfPhase(game, effectResult, Phase.SKIRMISH)) { OptionalTriggerAction action = new OptionalTriggerAction(self); action.appendEffect( new ChooseAndTransferAttachableEffect(action, playerId, self, Filters.any, Filters.and(Culture.ROHAN, Race.MAN))); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/moria/Card2_057.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/moria/Card2_057.java index 02c103b49..a2e6833a9 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/moria/Card2_057.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/moria/Card2_057.java @@ -2,14 +2,17 @@ package com.gempukku.lotro.cards.set2.moria; import com.gempukku.lotro.cards.AbstractResponseOldEvent; import com.gempukku.lotro.cards.actions.PlayEventAction; +import com.gempukku.lotro.cards.TriggerConditions; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Race; 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.WoundCharactersEffect; import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.results.SkirmishAboutToEndResult; import java.util.Collections; import java.util.List; @@ -34,17 +37,22 @@ public class Card2_057 extends AbstractResponseOldEvent { } @Override - public List getOptionalAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (effectResult.getType() == EffectResult.Type.SKIRMISH_ABOUT_TO_END - && checkPlayRequirements(playerId, game, self, 0, 0, false, false) - && Filters.filter(game.getGameState().getSkirmish().getShadowCharacters(), game.getGameState(), game.getModifiersQuerying(), - Filters.balrog, Filters.hasAttached(Filters.name("Whip of Many Thongs"))).size() > 0) { - PlayEventAction action = new PlayEventAction(self); - action.appendEffect( - new WoundCharactersEffect(self, CardType.COMPANION, Filters.inSkirmish)); - action.appendEffect( - new WoundCharactersEffect(self, CardType.COMPANION, Filters.inSkirmish)); - return Collections.singletonList(action); + public List getOptionalAfterActions(String playerId, final LotroGame game, EffectResult effectResult, PhysicalCard self) { + if (checkPlayRequirements(playerId, game, self, 0, 0, false, false) + && effectResult.getType() == EffectResult.Type.SKIRMISH_ABOUT_TO_END) { + SkirmishAboutToEndResult checkSkirmish = (SkirmishAboutToEndResult) effectResult; + for (PhysicalCard minion: checkSkirmish.getMinionsInvolved()) { + if (minion.getBlueprint().getName().equals("The Balrog") + && Filters.filter(game.getGameState().getSkirmish().getShadowCharacters(), game.getGameState(), + game.getModifiersQuerying(), Filters.hasAttached(Filters.name("Whip of Many Thongs"))).size() > 0) { + PlayEventAction action = new PlayEventAction(self); + action.appendEffect( + new WoundCharactersEffect(self, CardType.COMPANION, Filters.inSkirmish)); + action.appendEffect( + new WoundCharactersEffect(self, CardType.COMPANION, Filters.inSkirmish)); + return Collections.singletonList(action); + } + } } return null; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dunland/Card4_015.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dunland/Card4_015.java index f5bea53b8..4717035ba 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dunland/Card4_015.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dunland/Card4_015.java @@ -2,7 +2,9 @@ package com.gempukku.lotro.cards.set4.dunland; import com.gempukku.lotro.cards.AbstractMinion; import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect; import com.gempukku.lotro.cards.effects.choose.ChooseAndAssignCharacterToMinionEffect; +import com.gempukku.lotro.cards.modifiers.AllyParticipatesInArcheryFireAndSkirmishesModifier; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Phase; @@ -11,6 +13,7 @@ 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.ChooseActiveCardEffect; import com.gempukku.lotro.logic.modifiers.Modifier; import com.gempukku.lotro.logic.modifiers.StrengthModifier; import com.gempukku.lotro.logic.timing.Action; @@ -53,7 +56,16 @@ public class Card4_015 extends AbstractMinion { && PlayConditions.canSpot(game, CardType.ALLY)) { final ActivateCardAction action = new ActivateCardAction(self); action.appendEffect( - new ChooseAndAssignCharacterToMinionEffect(action, playerId, self, true, CardType.ALLY)); + new ChooseActiveCardEffect(self, playerId, "Choose an Ally", CardType.ALLY) { + @Override + protected void cardSelected(LotroGame game, PhysicalCard card) { + action.appendEffect( + new AddUntilStartOfPhaseModifierEffect( + new AllyParticipatesInArcheryFireAndSkirmishesModifier(self, Filters.sameCard(card)), Phase.SKIRMISH)); + action.appendEffect( + new ChooseAndAssignCharacterToMinionEffect(action, playerId, self, true, Filters.sameCard(card))); + } + }); return Collections.singletonList(action); } return null; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dunland/Card4_018.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dunland/Card4_018.java index 74fc0ee94..c25b68756 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dunland/Card4_018.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dunland/Card4_018.java @@ -2,14 +2,18 @@ package com.gempukku.lotro.cards.set4.dunland; import com.gempukku.lotro.cards.AbstractMinion; import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect; import com.gempukku.lotro.cards.effects.choose.ChooseAndAssignCharacterToMinionEffect; +import com.gempukku.lotro.cards.modifiers.AllyParticipatesInArcheryFireAndSkirmishesModifier; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Race; +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.ChooseActiveCardEffect; import com.gempukku.lotro.logic.timing.Action; import java.util.Collections; @@ -38,7 +42,16 @@ public class Card4_018 extends AbstractMinion { && PlayConditions.canSpot(game, CardType.ALLY)) { final ActivateCardAction action = new ActivateCardAction(self); action.appendEffect( - new ChooseAndAssignCharacterToMinionEffect(action, playerId, self, true, CardType.ALLY)); + new ChooseActiveCardEffect(self, playerId, "Choose an Ally", CardType.ALLY) { + @Override + protected void cardSelected(LotroGame game, PhysicalCard card) { + action.appendEffect( + new AddUntilStartOfPhaseModifierEffect( + new AllyParticipatesInArcheryFireAndSkirmishesModifier(self, Filters.sameCard(card)), Phase.SKIRMISH)); + action.appendEffect( + new ChooseAndAssignCharacterToMinionEffect(action, playerId, self, true, Filters.sameCard(card))); + } + }); return Collections.singletonList(action); } return null; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_146.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_146.java index e659ac093..063fd37b0 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_146.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_146.java @@ -4,11 +4,11 @@ import com.gempukku.lotro.cards.AbstractPermanent; import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; import com.gempukku.lotro.cards.modifiers.AllyParticipatesInArcheryFireModifier; +import com.gempukku.lotro.cards.modifiers.CantTakeArcheryWoundsModifier; import com.gempukku.lotro.common.*; 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.modifiers.CantTakeWoundsModifier; import com.gempukku.lotro.logic.timing.Action; import java.util.Collections; @@ -38,7 +38,7 @@ public class Card4_146 extends AbstractPermanent { new AllyParticipatesInArcheryFireModifier(self, CardType.ALLY))); action.appendEffect( new AddUntilEndOfPhaseModifierEffect( - new CantTakeWoundsModifier(self, CardType.COMPANION))); + new CantTakeArcheryWoundsModifier(self, CardType.COMPANION))); return Collections.singletonList(action); } return null; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/sauron/Card5_095.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/sauron/Card5_095.java index 9319d26bf..62bcedb05 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/sauron/Card5_095.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/sauron/Card5_095.java @@ -10,6 +10,9 @@ 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.decisions.DecisionResultInvalidException; +import com.gempukku.lotro.logic.decisions.IntegerAwaitingDecision; +import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect; import com.gempukku.lotro.logic.modifiers.Modifier; import com.gempukku.lotro.logic.modifiers.StrengthModifier; import com.gempukku.lotro.logic.timing.Action; @@ -41,16 +44,24 @@ public class Card5_095 extends AbstractPermanent { } @Override - protected List getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) { + protected List getExtraPhaseActions(final String playerId, final LotroGame game, final PhysicalCard self) { if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.MANEUVER, self, 0) && PlayConditions.canSpot(game, 2, Culture.SAURON, Race.ORC)) { - ActivateCardAction action = new ActivateCardAction(self); + final ActivateCardAction action = new ActivateCardAction(self); action.appendEffect( - new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.SAURON, CardType.CONDITION)); - action.appendEffect( - new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.SAURON, CardType.CONDITION)); - action.appendEffect( - new SelfDiscardEffect(self)); + new PlayoutDecisionEffect(playerId, + new IntegerAwaitingDecision(1, "How many SAURON conditions do you wish to play from your discard pile?", 0, 2) { + @Override + public void decisionMade(String result) throws DecisionResultInvalidException { + int count = getValidatedResult(result); + for (int i = 0; i < count; i++) + action.appendEffect( + new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.SAURON, CardType.CONDITION)); + action.appendEffect( + new SelfDiscardEffect(self)); + } + }) + ); return Collections.singletonList(action); } return null; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/sauron/Card5_096.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/sauron/Card5_096.java index 93c819674..368c7e78f 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/sauron/Card5_096.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/sauron/Card5_096.java @@ -27,24 +27,27 @@ import java.util.List; */ public class Card5_096 extends AbstractEvent { public Card5_096() { - super(Side.SHADOW, 0, Culture.SAURON, "Eye of Barad-Dur", Phase.SKIRMISH); + super(Side.SHADOW, 0, Culture.SAURON, "Eye of Barad-Dur", Phase.FELLOWSHIP, Phase.MANEUVER, Phase.SKIRMISH, Phase.REGROUP); } @Override public PlayEventAction getPlayCardAction(String playerId, LotroGame game, final PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) { - 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))); - } - }); - return action; + if (game.getGameState().getCurrentPhase() == Phase.SKIRMISH) { + 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))); + } + }); + return action; + } + return null; } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/elven/Card7_022.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/elven/Card7_022.java index 851844f2a..c0de79534 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/elven/Card7_022.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/elven/Card7_022.java @@ -37,6 +37,7 @@ public class Card7_022 extends AbstractPermanent { @Override public List getOptionalInPlayAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { if (TriggerConditions.played(game, effectResult, Culture.ELVEN, CardType.EVENT, Keyword.SKIRMISH) + && game.getGameState().getCurrentPhase() == Phase.SKIRMISH && PlayConditions.canSelfDiscard(self, game)) { ActivateCardAction action = new ActivateCardAction(self); action.appendCost( diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gandalf/Card7_033.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gandalf/Card7_033.java index df4c051b8..4a4db6ba2 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gandalf/Card7_033.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gandalf/Card7_033.java @@ -46,7 +46,7 @@ public class Card7_033 extends AbstractEvent { @Override protected void cardSelected(LotroGame game, PhysicalCard card) { action.appendEffect( - new HealCharactersEffect(self, card.getBlueprint().getCulture())); + new HealCharactersEffect(self, card.getBlueprint().getCulture(), CardType.COMPANION)); } }); return action; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gandalf/Card7_043.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gandalf/Card7_043.java index 8e2ca108f..1f01a69af 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gandalf/Card7_043.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/gandalf/Card7_043.java @@ -4,6 +4,7 @@ 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.choose.ChooseAndExertCharactersEffect; +import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Side; @@ -46,7 +47,7 @@ public class Card7_043 extends AbstractEvent { @Override protected void cardSelected(LotroGame game, PhysicalCard card) { game.getModifiersEnvironment().addUntilStartOfPhaseModifier( - new StrengthModifier(self, card.getBlueprint().getCulture(), 3), Phase.REGROUP); + new StrengthModifier(self, Filters.and(card.getBlueprint().getCulture(), Filters.unboundCompanion), 3), Phase.REGROUP); } }); return action; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_262.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_262.java index 0262ffe8c..0492f5db8 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_262.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/sauron/Card7_262.java @@ -11,6 +11,8 @@ 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.decisions.MultipleChoiceAwaitingDecision; +import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect; import com.gempukku.lotro.logic.timing.Effect; import java.util.LinkedList; @@ -33,29 +35,43 @@ public class Card7_262 extends AbstractEvent { @Override public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int withTwilightRemoved, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) { return super.checkPlayRequirements(playerId, game, self, withTwilightRemoved, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile) - && PlayConditions.canPlayFromDiscard(playerId, game, Culture.SAURON, Race.ORC) - && (PlayConditions.canRemoveBurdens(game, self, 1) - || PlayConditions.canPlayFromStacked(playerId, game, Filters.siteControlled(playerId), Keyword.BESIEGER)); + && (PlayConditions.canPlayFromDiscard(playerId, game, Culture.SAURON, Race.ORC) + && PlayConditions.canRemoveBurdens(game, self, 1)) + || PlayConditions.canPlayFromStacked(playerId, game, Filters.siteControlled(playerId), Keyword.BESIEGER); } @Override - public PlayEventAction getPlayCardAction(final String playerId, LotroGame game, final PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) { + public PlayEventAction getPlayCardAction(final String playerId, final LotroGame game, final PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) { final PlayEventAction action = new PlayEventAction(self); - List possibleCosts = new LinkedList(); - possibleCosts.add( - new ChooseAndPlayCardFromStackedEffect(playerId, Filters.siteControlled(playerId), Keyword.BESIEGER) { - @Override - public String getText(LotroGame game) { - return "Play a besieger stacked on a site you control"; + if (PlayConditions.canPlayFromStacked(playerId, game, Filters.siteControlled(playerId), Keyword.BESIEGER) + && PlayConditions.canRemoveBurdens(game, self, 1) + && PlayConditions.canPlayFromDiscard(playerId, game, Culture.SAURON, Race.ORC)) { + action.appendEffect( + new PlayoutDecisionEffect(playerId, + new MultipleChoiceAwaitingDecision(1, "Which would you like to do?", new String[]{"Play a besieger stacked on a site you control", "Remove a burden to play a SAURON Orc from Discard"}) { + @Override + protected void validDecisionMade(int index, String result) { + if (result.equals("Play a besieger stacked on a site you control")) { + action.appendEffect( + new ChooseAndPlayCardFromStackedEffect(playerId, Filters.siteControlled(playerId), Keyword.BESIEGER)); + } else { + action.appendCost( + new RemoveBurdenEffect(playerId, self)); + action.appendEffect( + new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.SAURON, Race.ORC)); } - }); - possibleCosts.add( - new RemoveBurdenEffect(playerId, self)); - action.appendCost( - new ChoiceEffect(action, playerId, possibleCosts)); - - action.appendEffect( - new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.SAURON, Race.ORC)); + } + })); + } else if (PlayConditions.canPlayFromStacked(playerId, game, Filters.siteControlled(playerId), Keyword.BESIEGER)) { + action.appendEffect( + new ChooseAndPlayCardFromStackedEffect(playerId, Filters.siteControlled(playerId), Keyword.BESIEGER)); + } else if (PlayConditions.canRemoveBurdens(game, self, 1) + && PlayConditions.canPlayFromDiscard(playerId, game, Culture.SAURON, Race.ORC)) { + action.appendCost( + new RemoveBurdenEffect(playerId, self)); + action.appendEffect( + new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.SAURON, Race.ORC)); + } return action; } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_182.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_182.java index d774a15f7..0c323455b 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_182.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_182.java @@ -11,6 +11,7 @@ import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.results.SkirmishAboutToEndResult; import java.util.Collections; import java.util.List; @@ -32,12 +33,17 @@ public class Card7_182 extends AbstractResponseEvent { @Override public List getOptionalAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { if (effectResult.getType() == EffectResult.Type.SKIRMISH_ABOUT_TO_END - && checkPlayRequirements(playerId, game, self, 0, 0, false, false) - && Filters.filter(game.getGameState().getSkirmish().getShadowCharacters(), game.getGameState(), game.getModifiersQuerying(), Race.NAZGUL).size() > 0) { - PlayEventAction action = new PlayEventAction(self); - action.appendEffect( - new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, CardType.POSSESSION, Filters.attachedTo(CardType.COMPANION, Filters.inSkirmish))); - return Collections.singletonList(action); + && checkPlayRequirements(playerId, game, self, 0, 0, false, false)) { + SkirmishAboutToEndResult checkSkirmish = (SkirmishAboutToEndResult) effectResult; + for (PhysicalCard minion: checkSkirmish.getMinionsInvolved()) { + if (minion.getBlueprint().getRace() == Race.NAZGUL) { + PlayEventAction action = new PlayEventAction(self); + action.appendEffect( + new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, CardType.POSSESSION, Filters.attachedTo( + CardType.COMPANION, Filters.inSkirmish))); + return Collections.singletonList(action); + } + } } return null; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_054.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_054.java index 28930df4d..7b3386ccd 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_054.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/raider/Card8_054.java @@ -43,7 +43,9 @@ public class Card8_054 extends AbstractMinion { && PlayConditions.canRemoveAnyCultureTokens(game, 2, Filters.any)) { final OptionalTriggerAction action = new OptionalTriggerAction(self); action.appendCost( - new ChooseAndRemoveCultureTokensFromCardEffect(self, playerId, null, 2, Filters.any)); + new ChooseAndRemoveCultureTokensFromCardEffect(self, playerId, null, 1, Filters.any)); + action.appendCost( + new ChooseAndRemoveCultureTokensFromCardEffect(self, playerId, null, 1, Filters.any)); action.appendEffect( new ChooseActiveCardEffect(self, playerId, "Choose a card to add tokens to", Filters.hasToken(Token.RAIDER)) { @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/rohan/Card8_087.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/rohan/Card8_087.java index f3048594f..ffba3256e 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/rohan/Card8_087.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/rohan/Card8_087.java @@ -50,8 +50,6 @@ public class Card8_087 extends AbstractCompanion { new PlayAnyNumberOfCardsFromDeckEffect(action, playerId, rohanPossessions)); } }); - action.appendEffect( - new ShuffleDeckEffect(playerId)); return Collections.singletonList(action); } return null; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/wraith/Card8_077.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/wraith/Card8_077.java index 94bb583a8..8d2dce0c2 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/wraith/Card8_077.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/wraith/Card8_077.java @@ -12,6 +12,9 @@ import com.gempukku.lotro.common.Race; 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.decisions.DecisionResultInvalidException; +import com.gempukku.lotro.logic.decisions.IntegerAwaitingDecision; +import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect; import com.gempukku.lotro.logic.timing.Action; import java.util.LinkedList; @@ -35,12 +38,12 @@ public class Card8_077 extends AbstractMinion { } @Override - protected List getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) { + protected List getExtraPhaseActions(final String playerId, final LotroGame game, PhysicalCard self) { if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)) { List actions = new LinkedList(); if (PlayConditions.canSelfDiscard(self, game) && PlayConditions.canPlayFromDiscard(playerId, game, Culture.WRAITH, CardType.MINION)) { - ActivateCardAction action = new ActivateCardAction(self); + final ActivateCardAction action = new ActivateCardAction(self); action.setText("Play from discard"); action.appendCost( new SelfDiscardEffect(self)); @@ -50,14 +53,23 @@ public class Card8_077 extends AbstractMinion { } if (PlayConditions.canSelfDiscard(self, game) && PlayConditions.canSpot(game, 6, CardType.COMPANION)) { - ActivateCardAction action = new ActivateCardAction(self); + final ActivateCardAction action = new ActivateCardAction(self); action.setText("Play from deck"); action.appendCost( new SelfDiscardEffect(self)); action.appendEffect( - new ChooseAndPlayCardFromDeckEffect(playerId, -1, Culture.WRAITH, CardType.MINION)); - action.appendEffect( - new ChooseAndPlayCardFromDeckEffect(playerId, -1, Culture.WRAITH, CardType.MINION)); + new PlayoutDecisionEffect(playerId, + new IntegerAwaitingDecision(1, "How many WRAITH minions do you wish to play from your draw deck?", 0, 2) { + @Override + public void decisionMade(String result) throws DecisionResultInvalidException { + int count = getValidatedResult(result); + for (int i = 0; i < count; i++) + action.appendEffect( + new ChooseAndPlayCardFromDeckEffect(playerId, -1, Culture.WRAITH, CardType.MINION)); + + } + }) + ); actions.add(action); } return actions; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/actions/SkirmishPhaseAction.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/actions/SkirmishPhaseAction.java index 26bc3cb72..b0e5ee2a0 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/actions/SkirmishPhaseAction.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/actions/SkirmishPhaseAction.java @@ -45,12 +45,12 @@ public class SkirmishPhaseAction extends SystemQueueAction { protected void doPlayEffect(LotroGame game) { if (!game.getGameState().getSkirmish().isCancelled()) { insertEffect( - new ResolveSkirmishEffect(), - new TriggeringResultEffect(new SkirmishAboutToEndResult(), "Skirmish about to end")); + new ResolveSkirmishEffect()); } } }); - + appendEffect( + new TriggeringResultEffect(null, new SkirmishAboutToEndResult(shadowCharacters), "Skirmish about to end")); appendEffect( new TriggeringResultEffect(null, new EndOfPhaseResult(Phase.SKIRMISH), "End of skirmish phase")); appendEffect( diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/SkirmishAboutToEndResult.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/SkirmishAboutToEndResult.java index 58c31a335..806c09e41 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/SkirmishAboutToEndResult.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/SkirmishAboutToEndResult.java @@ -1,9 +1,22 @@ package com.gempukku.lotro.logic.timing.results; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.timing.EffectResult; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + public class SkirmishAboutToEndResult extends EffectResult { - public SkirmishAboutToEndResult() { - super(Type.SKIRMISH_ABOUT_TO_END); + private Set _minionsInvolved; + + public SkirmishAboutToEndResult(Set minionsInvolved) { + super(EffectResult.Type.SKIRMISH_ABOUT_TO_END); + _minionsInvolved = minionsInvolved; + } + + public Set getMinionsInvolved() { + return _minionsInvolved; } }