From 9aad85f1d2571330a128c22eac49fe22988ac752 Mon Sep 17 00:00:00 2001 From: "marcin.sciesinski" Date: Sat, 11 Nov 2017 15:04:46 -0800 Subject: [PATCH] Fixed - "Underground Lake" --- .../CheckTurnLimitPerPlayerEffect.java | 35 +++++++++++++++++++ .../lotro/cards/set31/site/Card31_048.java | 7 ++-- .../lotro/logic/modifiers/ModifiersLogic.java | 9 +++-- .../logic/modifiers/ModifiersQuerying.java | 2 ++ 4 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/CheckTurnLimitPerPlayerEffect.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/CheckTurnLimitPerPlayerEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/CheckTurnLimitPerPlayerEffect.java new file mode 100644 index 000000000..b786a69f4 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/CheckTurnLimitPerPlayerEffect.java @@ -0,0 +1,35 @@ +package com.gempukku.lotro.cards.effects; + +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.actions.SubAction; +import com.gempukku.lotro.logic.timing.Action; +import com.gempukku.lotro.logic.timing.Effect; +import com.gempukku.lotro.logic.timing.UnrespondableEffect; + +public class CheckTurnLimitPerPlayerEffect extends UnrespondableEffect { + private Action _action; + private PhysicalCard _card; + private String _playerId; + private int _limit; + private Effect _limitedEffect; + + public CheckTurnLimitPerPlayerEffect(Action action, PhysicalCard card, String playerId, int limit, Effect limitedEffect) { + _card = card; + this._playerId = playerId; + _limit = limit; + _limitedEffect = limitedEffect; + _action = action; + } + + @Override + public void doPlayEffect(LotroGame game) { + int incrementedBy = game.getModifiersQuerying().getUntilEndOfTurnLimitCounter(_card, _playerId +"-").incrementToLimit(_limit, 1); + if (incrementedBy > 0) { + SubAction subAction = new SubAction(_action); + subAction.appendEffect( + _limitedEffect); + game.getActionsEnvironment().addActionToStack(subAction); + } + } +} \ No newline at end of file diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set31/site/Card31_048.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set31/site/Card31_048.java index 35e1c1df8..fd900802c 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set31/site/Card31_048.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set31/site/Card31_048.java @@ -3,6 +3,7 @@ package com.gempukku.lotro.cards.set31.site; import com.gempukku.lotro.cards.AbstractSite; import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.effects.CheckTurnLimitEffect; +import com.gempukku.lotro.cards.effects.CheckTurnLimitPerPlayerEffect; import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect; import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDeckEffect; import com.gempukku.lotro.common.*; @@ -34,10 +35,8 @@ public class Card31_048 extends AbstractSite { public List getPhaseActions(final String playerId, final LotroGame game, final PhysicalCard self) { if (PlayConditions.canUseSiteDuringPhase(game, Phase.MANEUVER, self)) { final ActivateCardAction action = new ActivateCardAction(self); - action.appendEffect(new CheckTurnLimitEffect(action, self, 1, - new ChooseAndPlayCardFromDeckEffect(playerId, Side.FREE_PEOPLE, Filters.name("The One Ring")))); - action.appendEffect(new CheckTurnLimitEffect(action, self, 1, - new ChooseAndPlayCardFromDeckEffect(playerId, Side.SHADOW, CardType.CONDITION))); + action.appendEffect(new CheckTurnLimitPerPlayerEffect(action, self, playerId, 1, + new ChooseAndPlayCardFromDeckEffect(playerId, Filters.or(Filters.and(Side.SHADOW, CardType.CONDITION), Filters.name("The One Ring"))))); return Collections.singletonList(action); } return null; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java index a639938cf..f703b8b3f 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java @@ -22,7 +22,7 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { private Map> _endOfPhaseLimitCounters = new HashMap>(); private Map> _startOfPhaseLimitCounters = new HashMap>(); - private Map _turnLimitCounters = new HashMap(); + private Map _turnLimitCounters = new HashMap(); private int _drawnThisPhaseCount = 0; private Map _woundsPerPhaseMap = new HashMap(); @@ -69,10 +69,15 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { @Override public LimitCounter getUntilEndOfTurnLimitCounter(PhysicalCard card) { + return getUntilEndOfTurnLimitCounter(card, ""); + } + + @Override + public LimitCounter getUntilEndOfTurnLimitCounter(PhysicalCard card, String prefix) { LimitCounter limitCounter = _turnLimitCounters.get(card.getCardId()); if (limitCounter == null) { limitCounter = new DefaultLimitCounter(); - _turnLimitCounters.put(card.getCardId(), limitCounter); + _turnLimitCounters.put(prefix + card.getCardId(), limitCounter); } return limitCounter; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java index 0613a75f8..a0628c56c 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java @@ -24,6 +24,8 @@ public interface ModifiersQuerying { public LimitCounter getUntilEndOfTurnLimitCounter(PhysicalCard card); + public LimitCounter getUntilEndOfTurnLimitCounter(PhysicalCard card, String prefix); + public Collection getModifiersAffecting(GameState gameState, PhysicalCard card); public Evaluator getFpStrengthOverrideEvaluator(GameState gameState, PhysicalCard fpCharacter);