From d5fc6697aec5a28108bb36299b81ec42d5c0484b Mon Sep 17 00:00:00 2001 From: marcins78 Date: Wed, 13 Feb 2013 16:28:05 +0000 Subject: [PATCH] "Rule of 4" is optional for per format. --- .../cards/effects/PutCardFromDeckIntoHandEffect.java | 2 +- .../PutCardFromDeckIntoHandOrDiscardEffect.java | 2 +- .../effects/PutCardFromDiscardIntoHandEffect.java | 2 +- .../effects/PutCardFromStackedIntoHandEffect.java | 2 +- .../java/com/gempukku/lotro/game/LotroFormat.java | 2 ++ .../lotro/logic/effects/DrawOneCardEffect.java | 3 ++- .../lotro/logic/modifiers/ModifiersLogic.java | 2 +- .../lotro/logic/modifiers/ModifiersQuerying.java | 2 +- .../lotro/game/formats/DefaultLotroFormat.java | 11 ++++++++++- .../lotro/game/formats/LotroFormatLibrary.java | 5 ++++- .../src/main/resources/lotrFormats.json | 1 + 11 files changed, 25 insertions(+), 9 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromDeckIntoHandEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromDeckIntoHandEffect.java index 995254d68..d3a98a12b 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromDeckIntoHandEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromDeckIntoHandEffect.java @@ -34,7 +34,7 @@ public class PutCardFromDeckIntoHandEffect extends AbstractEffect { @Override protected FullEffectResult playEffectReturningResult(LotroGame game) { - if (game.getModifiersQuerying().canDrawCardAndIncrement(game.getGameState(), _card.getOwner()) + if ((!game.getFormat().hasRuleOfFour() || game.getModifiersQuerying().canDrawCardAndIncrementForRuleOfFour(game.getGameState(), _card.getOwner())) && _card.getZone() == Zone.DECK) { GameState gameState = game.getGameState(); gameState.sendMessage(_card.getOwner() + " puts " + GameUtils.getCardLink(_card) + " from deck into his or her hand"); 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 4ec4a6efe..4f4199090 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 @@ -39,7 +39,7 @@ public class PutCardFromDeckIntoHandOrDiscardEffect extends AbstractEffect { @Override protected FullEffectResult playEffectReturningResult(LotroGame game) { if (_physicalCard.getZone() == Zone.DECK) { - if (game.getModifiersQuerying().canDrawCardAndIncrement(game.getGameState(), _physicalCard.getOwner())) { + if ((!game.getFormat().hasRuleOfFour() || game.getModifiersQuerying().canDrawCardAndIncrementForRuleOfFour(game.getGameState(), _physicalCard.getOwner()))) { game.getGameState().sendMessage(_physicalCard.getOwner() + " puts " + GameUtils.getCardLink(_physicalCard) + " from deck into his or her hand"); game.getGameState().removeCardsFromZone(_physicalCard.getOwner(), Collections.singleton(_physicalCard)); game.getGameState().addCardToZone(game, _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 5a258c576..17151c5f5 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 @@ -35,7 +35,7 @@ public class PutCardFromDiscardIntoHandEffect extends AbstractEffect { @Override protected FullEffectResult playEffectReturningResult(LotroGame game) { - if (game.getModifiersQuerying().canDrawCardAndIncrement(game.getGameState(), _card.getOwner()) + if ((!game.getFormat().hasRuleOfFour() || game.getModifiersQuerying().canDrawCardAndIncrementForRuleOfFour(game.getGameState(), _card.getOwner())) && _card.getZone() == Zone.DISCARD) { GameState gameState = game.getGameState(); gameState.sendMessage(_card.getOwner() + " puts " + GameUtils.getCardLink(_card) + " from discard into his or her hand"); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromStackedIntoHandEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromStackedIntoHandEffect.java index 2738a0397..52ee34c71 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromStackedIntoHandEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PutCardFromStackedIntoHandEffect.java @@ -36,7 +36,7 @@ public class PutCardFromStackedIntoHandEffect extends AbstractEffect { @Override protected FullEffectResult playEffectReturningResult(LotroGame game) { if (_card.getZone() == Zone.STACKED - && game.getModifiersQuerying().canDrawCardAndIncrement(game.getGameState(), _card.getOwner())) { + && (!game.getFormat().hasRuleOfFour() || game.getModifiersQuerying().canDrawCardAndIncrementForRuleOfFour(game.getGameState(), _card.getOwner()))) { GameState gameState = game.getGameState(); gameState.sendMessage(_card.getOwner() + " puts " + GameUtils.getCardLink(_card) + " from " + GameUtils.getCardLink(_card.getStackedOn()) + " into his or her hand"); gameState.removeCardsFromZone(_card.getOwner(), Collections.singleton(_card)); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroFormat.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroFormat.java index b9117a922..1aae5a620 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroFormat.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroFormat.java @@ -10,6 +10,8 @@ public interface LotroFormat { public boolean canCancelRingBearerSkirmish(); + public boolean hasRuleOfFour(); + public boolean hasMulliganRule(); public String getName(); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DrawOneCardEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DrawOneCardEffect.java index 906e0d1ce..87e92a450 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DrawOneCardEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/DrawOneCardEffect.java @@ -40,7 +40,8 @@ public class DrawOneCardEffect extends AbstractEffect implements Preventable { @Override protected FullEffectResult playEffectReturningResult(LotroGame game) { int drawn = 0; - if (!_prevented && game.getGameState().getDeck(_playerId).size() > 0 && game.getModifiersQuerying().canDrawCardAndIncrement(game.getGameState(), _playerId)) { + if (!_prevented && game.getGameState().getDeck(_playerId).size() > 0 && + (!game.getFormat().hasRuleOfFour() || game.getModifiersQuerying().canDrawCardAndIncrementForRuleOfFour(game.getGameState(), _playerId))) { game.getGameState().playerDrawsCard(_playerId); drawn++; } 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 b410e2487..4e342db0b 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 @@ -893,7 +893,7 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { * @return */ @Override - public boolean canDrawCardAndIncrement(GameState gameState, String playerId) { + public boolean canDrawCardAndIncrementForRuleOfFour(GameState gameState, String playerId) { if (gameState.getCurrentPlayerId().equals(playerId)) { if (gameState.getCurrentPhase() != Phase.FELLOWSHIP) return true; 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 7fe490170..89ba80425 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 @@ -125,7 +125,7 @@ public interface ModifiersQuerying { public boolean canDrawCardNoIncrement(GameState gameState, String playerId); - public boolean canDrawCardAndIncrement(GameState gameState, String playerId); + public boolean canDrawCardAndIncrementForRuleOfFour(GameState gameState, String playerId); public boolean canLookOrRevealCardsInHand(GameState gameState, String revealingPlayerId, String performingPlayerId); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/DefaultLotroFormat.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/DefaultLotroFormat.java index 76c496cde..a606c113b 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/DefaultLotroFormat.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/DefaultLotroFormat.java @@ -21,13 +21,16 @@ public class DefaultLotroFormat implements LotroFormat { private int _maximumSameName = 4; private boolean _mulliganRule; private boolean _canCancelRingBearerSkirmish; + private boolean _hasRuleOfFour; private int _minimumDeckSize = 60; private List _bannedCards = new ArrayList(); private List _restrictedCards = new ArrayList(); private List _validCards = new ArrayList(); private List _validSets = new ArrayList(); - public DefaultLotroFormat(LotroCardBlueprintLibrary library, String name, Block siteBlock, boolean validateShadowFPCount, int minimumDeckSize, int maximumSameName, boolean mulliganRule, boolean canCancelRingBearerSkirmish) { + public DefaultLotroFormat(LotroCardBlueprintLibrary library, String name, Block siteBlock, + boolean validateShadowFPCount, int minimumDeckSize, int maximumSameName, boolean mulliganRule, + boolean canCancelRingBearerSkirmish, boolean hasRuleOfFour) { _library = library; _name = name; _siteBlock = siteBlock; @@ -36,6 +39,7 @@ public class DefaultLotroFormat implements LotroFormat { _maximumSameName = maximumSameName; _mulliganRule = mulliganRule; _canCancelRingBearerSkirmish = canCancelRingBearerSkirmish; + _hasRuleOfFour = hasRuleOfFour; } @Override @@ -58,6 +62,11 @@ public class DefaultLotroFormat implements LotroFormat { return _canCancelRingBearerSkirmish; } + @Override + public boolean hasRuleOfFour() { + return _hasRuleOfFour; + } + @Override public List getValidSets() { return Collections.unmodifiableList(_validSets); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/LotroFormatLibrary.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/LotroFormatLibrary.java index a9de7ab6f..913fe8c8d 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/LotroFormatLibrary.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/LotroFormatLibrary.java @@ -33,8 +33,11 @@ public class LotroFormatLibrary { Boolean cancelRingBearerSkirmish = (Boolean) formatDef.get("cancelRingBearerSkirmish"); if (cancelRingBearerSkirmish == null) cancelRingBearerSkirmish = false; + Boolean hasRuleOfFour = (Boolean) formatDef.get("hasRuleOfFour"); + if (hasRuleOfFour == null) + hasRuleOfFour = true; - final DefaultLotroFormat format = new DefaultLotroFormat(library, name, block, true, 60, 4, true, cancelRingBearerSkirmish); + final DefaultLotroFormat format = new DefaultLotroFormat(library, name, block, true, 60, 4, true, cancelRingBearerSkirmish, hasRuleOfFour); JSONArray sets = (JSONArray) formatDef.get("set"); for (Object set : sets) diff --git a/gemp-lotr/gemp-lotr-server/src/main/resources/lotrFormats.json b/gemp-lotr/gemp-lotr-server/src/main/resources/lotrFormats.json index bcbdc86fb..0eda99512 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/resources/lotrFormats.json +++ b/gemp-lotr/gemp-lotr-server/src/main/resources/lotrFormats.json @@ -255,6 +255,7 @@ "valid":[], "set":[20], "cancelRingBearerSkirmish":true, + "ruleOfFour":false, "hall":false } ] \ No newline at end of file