From 67d6eb62e7ba1c4c47984ce060b6d77957043816 Mon Sep 17 00:00:00 2001 From: marcins78 Date: Wed, 13 Feb 2013 16:33:17 +0000 Subject: [PATCH] Game can end either at start of regroup or end of regroup phase per format. --- .../java/com/gempukku/lotro/game/LotroFormat.java | 2 ++ .../lotro/logic/timing/rules/WinConditionRule.java | 8 +++++++- .../lotro/game/formats/DefaultLotroFormat.java | 11 ++++++++++- .../lotro/game/formats/LotroFormatLibrary.java | 5 ++++- .../src/main/resources/lotrFormats.json | 1 + 5 files changed, 24 insertions(+), 3 deletions(-) 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 1aae5a620..addbc8630 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 @@ -14,6 +14,8 @@ public interface LotroFormat { public boolean hasMulliganRule(); + public boolean winAtEndOfRegroup(); + public String getName(); public void validateCard(String cardId) throws DeckInvalidException; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/WinConditionRule.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/WinConditionRule.java index 80702a8c4..31264bdeb 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/WinConditionRule.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/WinConditionRule.java @@ -22,11 +22,17 @@ public class WinConditionRule { new AbstractActionProxy() { @Override public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResults) { - if (effectResults.getType() == EffectResult.Type.START_OF_PHASE + if (game.getFormat().winAtEndOfRegroup() + && effectResults.getType() == EffectResult.Type.END_OF_PHASE + && game.getGameState().getCurrentPhase() == Phase.REGROUP + && game.getGameState().getCurrentSiteNumber() == 9) + game.playerWon(game.getGameState().getCurrentPlayerId(), "Surviving to end of Regroup phase on site 9"); + else if (effectResults.getType() == EffectResult.Type.START_OF_PHASE && game.getGameState().getCurrentPhase() == Phase.REGROUP && game.getGameState().getCurrentSiteNumber() == 9 && !game.getModifiersQuerying().hasFlagActive(game.getGameState(), ModifierFlag.WIN_CHECK_AFTER_SHADOW_RECONCILE)) game.playerWon(game.getGameState().getCurrentPlayerId(), "Surviving to Regroup phase on site 9"); + return null; } }); 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 a606c113b..469b2d22a 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 @@ -22,6 +22,7 @@ public class DefaultLotroFormat implements LotroFormat { private boolean _mulliganRule; private boolean _canCancelRingBearerSkirmish; private boolean _hasRuleOfFour; + private boolean _winAtEndOfRegroup; private int _minimumDeckSize = 60; private List _bannedCards = new ArrayList(); private List _restrictedCards = new ArrayList(); @@ -30,7 +31,7 @@ public class DefaultLotroFormat implements LotroFormat { public DefaultLotroFormat(LotroCardBlueprintLibrary library, String name, Block siteBlock, boolean validateShadowFPCount, int minimumDeckSize, int maximumSameName, boolean mulliganRule, - boolean canCancelRingBearerSkirmish, boolean hasRuleOfFour) { + boolean canCancelRingBearerSkirmish, boolean hasRuleOfFour, boolean winAtEndOfRegroup) { _library = library; _name = name; _siteBlock = siteBlock; @@ -40,8 +41,11 @@ public class DefaultLotroFormat implements LotroFormat { _mulliganRule = mulliganRule; _canCancelRingBearerSkirmish = canCancelRingBearerSkirmish; _hasRuleOfFour = hasRuleOfFour; + _winAtEndOfRegroup = winAtEndOfRegroup; } + + @Override public final boolean isOrderedSites() { return _siteBlock != Block.SHADOWS; @@ -57,6 +61,11 @@ public class DefaultLotroFormat implements LotroFormat { return _mulliganRule; } + @Override + public boolean winAtEndOfRegroup() { + return _winAtEndOfRegroup; + } + @Override public boolean canCancelRingBearerSkirmish() { return _canCancelRingBearerSkirmish; 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 4ed8c3dc2..eeb2665e9 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 @@ -36,8 +36,11 @@ public class LotroFormatLibrary { Boolean hasRuleOfFour = (Boolean) formatDef.get("ruleOfFour"); if (hasRuleOfFour == null) hasRuleOfFour = true; + Boolean winAtEndOfRegroup = (Boolean) formatDef.get("winAtEndOfRegroup"); + if (winAtEndOfRegroup == null) + winAtEndOfRegroup = false; - final DefaultLotroFormat format = new DefaultLotroFormat(library, name, block, true, 60, 4, true, cancelRingBearerSkirmish, hasRuleOfFour); + final DefaultLotroFormat format = new DefaultLotroFormat(library, name, block, true, 60, 4, true, cancelRingBearerSkirmish, hasRuleOfFour, winAtEndOfRegroup); 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 0eda99512..9f6a004d5 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, + "winAtEndOfRegroup":true, "ruleOfFour":false, "hall":false }