From 295587c551bd3ad346bc61e339f65275c7500f54 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Tue, 13 Sep 2011 09:34:42 +0000 Subject: [PATCH] Added Rule of 4. --- ...utCardFromDeckIntoHandOrDiscardEffect.java | 6 +++-- .../PutCardFromDiscardIntoHandEffect.java | 8 ++++--- .../lotro/logic/effects/DrawCardEffect.java | 3 ++- .../lotro/logic/modifiers/ModifiersLogic.java | 24 +++++++++++++++++++ .../logic/modifiers/ModifiersQuerying.java | 2 ++ gemp-lotr/todo.txt | 4 ++-- 6 files changed, 39 insertions(+), 8 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromDeckIntoHandOrDiscardEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromDeckIntoHandOrDiscardEffect.java index 1f18daa72..816246a2c 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromDeckIntoHandOrDiscardEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromDeckIntoHandOrDiscardEffect.java @@ -28,7 +28,9 @@ public class PutCardFromDeckIntoHandOrDiscardEffect extends UnrespondableEffect @Override public void doPlayEffect(LotroGame game) { - game.getGameState().removeCardFromZone(_physicalCard); - game.getGameState().addCardToZone(_physicalCard, Zone.HAND); + if (game.getModifiersQuerying().canDrawCardAndIncrement(game.getGameState(), _physicalCard.getOwner())) { + game.getGameState().removeCardFromZone(_physicalCard); + game.getGameState().addCardToZone(_physicalCard, Zone.HAND); + } } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromDiscardIntoHandEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromDiscardIntoHandEffect.java index 9a3fe8267..b361daaa0 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromDiscardIntoHandEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromDiscardIntoHandEffect.java @@ -15,8 +15,10 @@ public class PutCardFromDiscardIntoHandEffect extends UnrespondableEffect { @Override public void doPlayEffect(LotroGame game) { - GameState gameState = game.getGameState(); - gameState.removeCardFromZone(_card); - gameState.addCardToZone(_card, Zone.HAND); + if (game.getModifiersQuerying().canDrawCardAndIncrement(game.getGameState(), _card.getOwner())) { + GameState gameState = game.getGameState(); + gameState.removeCardFromZone(_card); + gameState.addCardToZone(_card, Zone.HAND); + } } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DrawCardEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DrawCardEffect.java index a61e1e856..e62aa4a42 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DrawCardEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DrawCardEffect.java @@ -17,6 +17,7 @@ public class DrawCardEffect extends UnrespondableEffect { @Override public void doPlayEffect(LotroGame game) { - game.getGameState().playerDrawsCard(_playerId); + if (game.getModifiersQuerying().canDrawCardAndIncrement(game.getGameState(), _playerId)) + game.getGameState().playerDrawsCard(_playerId); } } 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 ab1a5cd6f..192d69e1a 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 @@ -21,6 +21,8 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { private Map> _counters = new HashMap>(); + private int _drawnThisPhaseCount = 0; + @Override public LimitCounter getUntilEndOfPhaseLimitCounter(PhysicalCard card, Phase phase) { Map limitCounterMap = _counters.get(phase); @@ -84,6 +86,8 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { Map counterMap = _counters.get(phase); if (counterMap != null) counterMap.clear(); + + _drawnThisPhaseCount = 0; } public void removeStartOfPhase(Phase phase) { @@ -408,6 +412,26 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { return result; } + /** + * Rule of 4. "You cannot draw (or take into hand) more than 4 cards during your fellowship phase." + * + * @param gameState + * @param playerId + * @return + */ + @Override + public boolean canDrawCardAndIncrement(GameState gameState, String playerId) { + if (gameState.getCurrentPlayerId().equals(playerId)) { + if (gameState.getCurrentPhase() != Phase.FELLOWSHIP || _drawnThisPhaseCount < 4) { + _drawnThisPhaseCount++; + return true; + } else { + return false; + } + } + return true; + } + private class ModifierHookImpl implements ModifierHook { private Modifier _modifier; 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 cedf4ad92..e336269b2 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 @@ -49,4 +49,6 @@ public interface ModifiersQuerying { public boolean canBeDiscardedFromPlay(GameState gameState, PhysicalCard card, PhysicalCard source); public boolean canBeHealed(GameState gameState, PhysicalCard card); + + public boolean canDrawCardAndIncrement(GameState gameState, String playerId); } diff --git a/gemp-lotr/todo.txt b/gemp-lotr/todo.txt index 2bc8f87d3..ea4a32055 100644 --- a/gemp-lotr/todo.txt +++ b/gemp-lotr/todo.txt @@ -6,8 +6,6 @@ final methods were possible to avoid implementation errors on new cards added. and go with different selection. 9. Add checkbox option to auto-pass if there is no actions to be played. 10. Add active/all cards switch to the user interface. -11. Merge Shadow and FP support area on the UI and extend the Shadow and FP characters window. -12. Add rule of 4. 13. Add dead/discard pile displays. 14. Add hand/deck card count displays. @@ -21,3 +19,5 @@ overloaded constructor for single cards for backward compatibility, this constru with Filters.sameCard(...) filter. 5. Introduce move card operation in communication between the server and client to change the zone/params of the card. 7. Add chat. +11. Merge Shadow and FP support area on the UI and extend the Shadow and FP characters window. +12. Add rule of 4.