From 868226674b5251d61992b8150075c2e2c790808c Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Tue, 18 Oct 2011 23:48:39 +0000 Subject: [PATCH] - Finally (hopefully) fixed "The One Ring" bug that prevented Frodo from taking it off, when he was supposed to. --- .../AddUntilEndOfTurnActionProxyEffect.java | 18 +++++++ .../gempukku/lotro/cards/set1/Card1_001.java | 54 ++++++++++--------- .../gempukku/lotro/cards/set1/Card1_002.java | 27 +++++----- .../gempukku/lotro/cards/set4/Card4_001.java | 27 +++++----- .../lotro/game/ActionsEnvironment.java | 2 + .../actions/DefaultActionsEnvironment.java | 12 +++++ .../rules/EndEffectsAndActionsRule.java | 1 + .../src/main/webapp/includes/changeLog.html | 1 + 8 files changed, 90 insertions(+), 52 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/AddUntilEndOfTurnActionProxyEffect.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/AddUntilEndOfTurnActionProxyEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/AddUntilEndOfTurnActionProxyEffect.java new file mode 100644 index 000000000..a3c4ae043 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/AddUntilEndOfTurnActionProxyEffect.java @@ -0,0 +1,18 @@ +package com.gempukku.lotro.cards.effects; + +import com.gempukku.lotro.game.ActionProxy; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.timing.UnrespondableEffect; + +public class AddUntilEndOfTurnActionProxyEffect extends UnrespondableEffect { + private ActionProxy _actionProxy; + + public AddUntilEndOfTurnActionProxyEffect(ActionProxy actionProxy) { + _actionProxy = actionProxy; + } + + @Override + public void doPlayEffect(LotroGame game) { + game.getActionsEnvironment().addUntilEndOfTurnActionProxy(_actionProxy); + } +} \ No newline at end of file diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_001.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_001.java index db9435505..7877748f9 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_001.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_001.java @@ -69,35 +69,37 @@ public class Card1_001 extends AbstractAttachable { action.appendEffect(new AddBurdenEffect(self, 2)); action.appendEffect(new PutOnTheOneRingEffect()); if (game.getGameState().getCurrentPhase() == Phase.REGROUP) { - action.appendEffect(new AddUntilEndOfPhaseActionProxyEffect( - new AbstractActionProxy() { - @Override - public List getRequiredAfterTriggers(LotroGame lotroGame, EffectResult effectResult) { - if (effectResult.getType() == EffectResult.Type.END_OF_PHASE - && ((StartOfPhaseResult) effectResult).getPhase() == Phase.REGROUP) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendEffect(new TakeOffTheOneRingEffect()); - return Collections.singletonList(action); + action.appendEffect( + new AddUntilEndOfTurnActionProxyEffect( + new AbstractActionProxy() { + @Override + public List getRequiredAfterTriggers(LotroGame lotroGame, EffectResult effectResult) { + if (effectResult.getType() == EffectResult.Type.END_OF_PHASE + && ((StartOfPhaseResult) effectResult).getPhase() == Phase.REGROUP) { + ActivateCardAction action = new ActivateCardAction(null); + action.appendEffect(new TakeOffTheOneRingEffect()); + return Collections.singletonList(action); + } + return null; + } } - return null; - } - } - , Phase.REGROUP)); + )); } else { - action.appendEffect(new AddUntilStartOfPhaseActionProxyEffect( - new AbstractActionProxy() { - @Override - public List getRequiredAfterTriggers(LotroGame lotroGame, EffectResult effectResult) { - if (effectResult.getType() == EffectResult.Type.START_OF_PHASE - && ((StartOfPhaseResult) effectResult).getPhase() == Phase.REGROUP) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendEffect(new TakeOffTheOneRingEffect()); - return Collections.singletonList(action); + action.appendEffect( + new AddUntilEndOfTurnActionProxyEffect( + new AbstractActionProxy() { + @Override + public List getRequiredAfterTriggers(LotroGame lotroGame, EffectResult effectResult) { + if (effectResult.getType() == EffectResult.Type.START_OF_PHASE + && ((StartOfPhaseResult) effectResult).getPhase() == Phase.REGROUP) { + ActivateCardAction action = new ActivateCardAction(null); + action.appendEffect(new TakeOffTheOneRingEffect()); + return Collections.singletonList(action); + } + return null; + } } - return null; - } - } - , Phase.REGROUP)); + )); } actions.add(action); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_002.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_002.java index 54d2ac2c5..ce2f6eae3 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_002.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/Card1_002.java @@ -67,20 +67,21 @@ public class Card1_002 extends AbstractAttachable { action.appendEffect(new PreventCardEffect(woundEffect, self.getAttachedTo())); action.appendEffect(new AddBurdenEffect(self, 1)); action.appendEffect(new PutOnTheOneRingEffect()); - action.appendEffect(new AddUntilStartOfPhaseActionProxyEffect( - new AbstractActionProxy() { - @Override - public List getRequiredAfterTriggers(LotroGame lotroGame, EffectResult effectResult) { - if (effectResult.getType() == EffectResult.Type.START_OF_PHASE - && ((StartOfPhaseResult) effectResult).getPhase() == Phase.REGROUP) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendEffect(new TakeOffTheOneRingEffect()); - return Collections.singletonList(action); + action.appendEffect( + new AddUntilEndOfTurnActionProxyEffect( + new AbstractActionProxy() { + @Override + public List getRequiredAfterTriggers(LotroGame lotroGame, EffectResult effectResult) { + if (effectResult.getType() == EffectResult.Type.START_OF_PHASE + && ((StartOfPhaseResult) effectResult).getPhase() == Phase.REGROUP) { + ActivateCardAction action = new ActivateCardAction(self); + action.appendEffect(new TakeOffTheOneRingEffect()); + return Collections.singletonList(action); + } + return null; + } } - return null; - } - } - , Phase.REGROUP)); + )); actions.add(action); return actions; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/Card4_001.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/Card4_001.java index 5b35988b9..68d0a8b41 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/Card4_001.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/Card4_001.java @@ -73,20 +73,21 @@ public class Card4_001 extends AbstractAttachable { new AddBurdenEffect(self, 1)); action.appendEffect( new PutOnTheOneRingEffect()); - action.appendEffect(new AddUntilStartOfPhaseActionProxyEffect( - new AbstractActionProxy() { - @Override - public List getRequiredAfterTriggers(LotroGame lotroGame, EffectResult effectResult) { - if (effectResult.getType() == EffectResult.Type.START_OF_PHASE - && ((StartOfPhaseResult) effectResult).getPhase() == Phase.REGROUP) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendEffect(new TakeOffTheOneRingEffect()); - return Collections.singletonList(action); + action.appendEffect( + new AddUntilEndOfTurnActionProxyEffect( + new AbstractActionProxy() { + @Override + public List getRequiredAfterTriggers(LotroGame lotroGame, EffectResult effectResult) { + if (effectResult.getType() == EffectResult.Type.START_OF_PHASE + && ((StartOfPhaseResult) effectResult).getPhase() == Phase.REGROUP) { + ActivateCardAction action = new ActivateCardAction(null); + action.appendEffect(new TakeOffTheOneRingEffect()); + return Collections.singletonList(action); + } + return null; + } } - return null; - } - } - , Phase.REGROUP)); + )); return Collections.singletonList(action); } return null; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/ActionsEnvironment.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/ActionsEnvironment.java index 7d68285ff..4eb239a90 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/ActionsEnvironment.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/ActionsEnvironment.java @@ -26,5 +26,7 @@ public interface ActionsEnvironment { public void addUntilEndOfPhaseActionProxy(ActionProxy actionProxy, Phase phase); + public void addUntilEndOfTurnActionProxy(ActionProxy actionProxy); + public void addActionToStack(Action action); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/actions/DefaultActionsEnvironment.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/actions/DefaultActionsEnvironment.java index cb70f2ff3..21f98e3d0 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/actions/DefaultActionsEnvironment.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/actions/DefaultActionsEnvironment.java @@ -24,6 +24,7 @@ public class DefaultActionsEnvironment implements ActionsEnvironment { private List _actionProxies = new LinkedList(); private Map> _untilStartOfPhaseActionProxies = new HashMap>(); private Map> _untilEndOfPhaseActionProxies = new HashMap>(); + private List _untilEndOfTurnActionProxies = new LinkedList(); public DefaultActionsEnvironment(LotroGame lotroGame, ActionStack actionStack) { _lotroGame = lotroGame; @@ -50,6 +51,11 @@ public class DefaultActionsEnvironment implements ActionsEnvironment { } } + public void removeEndOfTurnActionProxies() { + _actionProxies.removeAll(_untilEndOfTurnActionProxies); + _untilEndOfTurnActionProxies.clear(); + } + @Override public void addUntilStartOfPhaseActionProxy(ActionProxy actionProxy, Phase phase) { _actionProxies.add(actionProxy); @@ -72,6 +78,12 @@ public class DefaultActionsEnvironment implements ActionsEnvironment { list.add(actionProxy); } + @Override + public void addUntilEndOfTurnActionProxy(ActionProxy actionProxy) { + _actionProxies.add(actionProxy); + _untilEndOfTurnActionProxies.add(actionProxy); + } + @Override public List getRequiredBeforeTriggers(Effect effect) { GatherRequiredBeforeTriggers gatherActions = new GatherRequiredBeforeTriggers(effect); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/EndEffectsAndActionsRule.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/EndEffectsAndActionsRule.java index 785689e2c..44c4581d0 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/EndEffectsAndActionsRule.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/EndEffectsAndActionsRule.java @@ -56,6 +56,7 @@ public class EndEffectsAndActionsRule { @Override public void doPlayEffect(LotroGame game) { _modifiersLogic.removeEndOfTurn(); + _actionsEnvironment.removeEndOfTurnActionProxies(); } }, "Remove effects" )); diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html b/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html index 440683797..c2120c156 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html @@ -12,6 +12,7 @@ twilight cost, instead of just making it cheaper to play. - System messages ("player joined/left room") are now different color, so they could be easily distinguishable. - Winning player in the hall now shows differently on the table, once the game is finished. - Increased how long the table is up after the game was finished to 10 minutes to give better bragging opportunity. +- Finally (hopefully) fixed "The One Ring" bug that prevented Frodo from taking it off, when he was supposed to. 17 Oct. 2011 - "Coming for the Ring" is no longed considered Free People card by the game.