From eb37e1d7e654e970e02a289f24504ffd4900f945 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Thu, 1 Sep 2011 02:15:34 +0000 Subject: [PATCH] Sanctuary rule and Rule of 9 --- .../gempukku/lotro/cards/AbstractAlly.java | 2 +- .../lotro/cards/AbstractCompanion.java | 2 +- .../gempukku/lotro/cards/PlayConditions.java | 22 +++++- .../lotro/cards/set1/dwarven/Card1_010.java | 2 +- .../lotro/cards/set1/dwarven/Card1_025.java | 2 +- .../lotro/cards/set1/elven/Card1_034.java | 2 +- .../lotro/cards/set1/elven/Card1_040.java | 2 +- .../lotro/cards/set1/elven/Card1_045.java | 2 +- .../lotro/cards/set1/elven/Card1_059.java | 2 +- .../lotro/cards/set1/isengard/Card1_144.java | 2 +- .../lotro/cards/set1/isengard/Card1_152.java | 2 +- .../lotro/cards/set1/shire/Card1_290.java | 2 +- .../lotro/cards/set1/site/Card1_343.java | 2 +- .../lotro/cards/set1/site/Card1_358.java | 2 +- .../gempukku/lotro/game/state/GameState.java | 4 ++ .../logic}/effects/HealCharacterEffect.java | 2 +- .../gempukku/lotro/logic/timing/RuleSet.java | 8 +-- .../logic/timing/rules/SanctuaryRule.java | 69 +++++++++++++++++++ 18 files changed, 110 insertions(+), 21 deletions(-) rename gemp-lotr/{gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards => gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic}/effects/HealCharacterEffect.java (90%) create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/SanctuaryRule.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractAlly.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractAlly.java index 906c57d6b..d8416edb8 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractAlly.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractAlly.java @@ -1,7 +1,6 @@ package com.gempukku.lotro.cards; import com.gempukku.lotro.cards.actions.PlayPermanentAction; -import com.gempukku.lotro.cards.effects.HealCharacterEffect; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Side; @@ -11,6 +10,7 @@ import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.CostToEffectAction; import com.gempukku.lotro.logic.effects.DiscardCardFromHandEffect; +import com.gempukku.lotro.logic.effects.HealCharacterEffect; import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; import com.gempukku.lotro.logic.timing.Action; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractCompanion.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractCompanion.java index 837a8c9c7..835502638 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractCompanion.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractCompanion.java @@ -1,13 +1,13 @@ package com.gempukku.lotro.cards; import com.gempukku.lotro.cards.actions.PlayPermanentAction; -import com.gempukku.lotro.cards.effects.HealCharacterEffect; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.CostToEffectAction; import com.gempukku.lotro.logic.effects.DiscardCardFromHandEffect; +import com.gempukku.lotro.logic.effects.HealCharacterEffect; import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; import com.gempukku.lotro.logic.timing.Action; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/PlayConditions.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/PlayConditions.java index 4d603a731..605e44465 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/PlayConditions.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/PlayConditions.java @@ -53,16 +53,34 @@ public class PlayConditions { return (nonPlayZone(self.getZone()) && self.getBlueprint().getCardType() == CardType.COMPANION && gameState.getCurrentPhase() == Phase.GAME_SETUP - && (!blueprint.isUnique() || !Filters.canSpot(gameState, modifiersQuerying, Filters.name(blueprint.getName()))) + // Rule of 9 + && (getTotalCompanions(self.getOwner(), gameState, modifiersQuerying) < 9) + && + (!blueprint.isUnique() + || + (!Filters.canSpot(gameState, modifiersQuerying, Filters.name(blueprint.getName()))) + || + (!Filters.canSpot(gameState, modifiersQuerying, Filters.name(blueprint.getName())) && (Filters.filter(gameState.getDeadPile(self.getOwner()), gameState, modifiersQuerying, Filters.name(blueprint.getName())).size() == 0))) && modifiersQuerying.getTwilightCost(gameState, self) <= (4 - gameState.getTwilightPool())); } + private static int getTotalCompanions(String playerId, GameState gameState, ModifiersQuerying modifiersQuerying) { + return Filters.countActive(gameState, modifiersQuerying, Filters.type(CardType.COMPANION)) + + Filters.filter(gameState.getDeadPile(playerId), gameState, modifiersQuerying, Filters.type(CardType.COMPANION)).size(); + } + public static boolean canPlayCharacterDuringFellowship(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) { LotroCardBlueprint blueprint = self.getBlueprint(); return (nonPlayZone(self.getZone()) && (self.getBlueprint().getCardType() == CardType.COMPANION || self.getBlueprint().getCardType() == CardType.ALLY) && gameState.getCurrentPhase() == Phase.FELLOWSHIP - && (!blueprint.isUnique() || !Filters.canSpot(gameState, modifiersQuerying, Filters.name(blueprint.getName())))); + // Rule of 9 + && (getTotalCompanions(self.getOwner(), gameState, modifiersQuerying) < 9) + // Uniqness + && + (!blueprint.isUnique() + || + (!Filters.canSpot(gameState, modifiersQuerying, Filters.name(blueprint.getName())) && (Filters.filter(gameState.getDeadPile(self.getOwner()), gameState, modifiersQuerying, Filters.name(blueprint.getName())).size() == 0)))); } public static boolean canPlayMinionDuringShadow(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) { diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_010.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_010.java index 3733c84b3..7fb654c76 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_010.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_010.java @@ -3,7 +3,6 @@ package com.gempukku.lotro.cards.set1.dwarven; import com.gempukku.lotro.cards.AbstractAttachable; import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.effects.ExertCharacterEffect; -import com.gempukku.lotro.cards.effects.HealCharacterEffect; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Keyword; @@ -13,6 +12,7 @@ import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.CostToEffectAction; +import com.gempukku.lotro.logic.effects.HealCharacterEffect; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.EffectResult; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_025.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_025.java index 265891032..86252d34f 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_025.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/dwarven/Card1_025.java @@ -3,11 +3,11 @@ package com.gempukku.lotro.cards.set1.dwarven; import com.gempukku.lotro.cards.AbstractLotroCardBlueprint; import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.actions.PlayEventAction; -import com.gempukku.lotro.cards.effects.HealCharacterEffect; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.effects.HealCharacterEffect; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.EffectResult; import com.gempukku.lotro.logic.timing.results.SkirmishResult; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_034.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_034.java index 291878e8d..ffff73aea 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_034.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_034.java @@ -3,7 +3,6 @@ package com.gempukku.lotro.cards.set1.elven; import com.gempukku.lotro.cards.AbstractAlly; import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.effects.ExertCharacterEffect; -import com.gempukku.lotro.cards.effects.HealCharacterEffect; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Keyword; @@ -13,6 +12,7 @@ import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.CostToEffectAction; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; +import com.gempukku.lotro.logic.effects.HealCharacterEffect; import com.gempukku.lotro.logic.timing.Action; import java.util.LinkedList; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_040.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_040.java index 48665ac3a..20fd5f428 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_040.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_040.java @@ -3,7 +3,6 @@ package com.gempukku.lotro.cards.set1.elven; import com.gempukku.lotro.cards.AbstractAlly; import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.effects.ExertCharacterEffect; -import com.gempukku.lotro.cards.effects.HealCharacterEffect; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Keyword; @@ -13,6 +12,7 @@ import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.CostToEffectAction; import com.gempukku.lotro.logic.effects.DrawCardEffect; +import com.gempukku.lotro.logic.effects.HealCharacterEffect; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.EffectResult; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_045.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_045.java index 3d4e6e39a..cca45556c 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_045.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_045.java @@ -4,7 +4,6 @@ import com.gempukku.lotro.cards.AbstractAlly; import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.actions.PlayPermanentAction; import com.gempukku.lotro.cards.effects.ExertCharacterEffect; -import com.gempukku.lotro.cards.effects.HealCharacterEffect; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.filters.Filters; @@ -14,6 +13,7 @@ import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.CostToEffectAction; import com.gempukku.lotro.logic.effects.ChooseCardsFromHandEffect; +import com.gempukku.lotro.logic.effects.HealCharacterEffect; import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.EffectResult; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_059.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_059.java index 278bf15c9..eb47978a8 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_059.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_059.java @@ -6,13 +6,13 @@ import com.gempukku.lotro.cards.actions.PlayPermanentAction; import com.gempukku.lotro.cards.effects.AddTwilightEffect; import com.gempukku.lotro.cards.effects.ChoiceEffect; import com.gempukku.lotro.cards.effects.ExertCharacterEffect; -import com.gempukku.lotro.cards.effects.HealCharacterEffect; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.CostToEffectAction; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; +import com.gempukku.lotro.logic.effects.HealCharacterEffect; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Effect; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_144.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_144.java index 664fffb79..43f9687ab 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_144.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_144.java @@ -3,7 +3,6 @@ package com.gempukku.lotro.cards.set1.isengard; import com.gempukku.lotro.cards.AbstractLotroCardBlueprint; import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.actions.PlayPermanentAction; -import com.gempukku.lotro.cards.effects.HealCharacterEffect; import com.gempukku.lotro.cards.effects.RemoveTwilightEffect; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filters; @@ -11,6 +10,7 @@ import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.CostToEffectAction; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; +import com.gempukku.lotro.logic.effects.HealCharacterEffect; import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.EffectResult; import com.gempukku.lotro.logic.timing.results.SkirmishResult; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_152.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_152.java index 84d5c7618..e70bd9839 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_152.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_152.java @@ -2,7 +2,6 @@ package com.gempukku.lotro.cards.set1.isengard; import com.gempukku.lotro.cards.AbstractMinion; import com.gempukku.lotro.cards.PlayConditions; -import com.gempukku.lotro.cards.effects.HealCharacterEffect; import com.gempukku.lotro.cards.effects.RemoveTwilightEffect; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Keyword; @@ -12,6 +11,7 @@ import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.CostToEffectAction; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; +import com.gempukku.lotro.logic.effects.HealCharacterEffect; import com.gempukku.lotro.logic.timing.Action; import java.util.LinkedList; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/shire/Card1_290.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/shire/Card1_290.java index 828022f06..9ce09abac 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/shire/Card1_290.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/shire/Card1_290.java @@ -3,13 +3,13 @@ package com.gempukku.lotro.cards.set1.shire; import com.gempukku.lotro.cards.AbstractCompanion; import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.effects.ExertCharacterEffect; -import com.gempukku.lotro.cards.effects.HealCharacterEffect; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.CostToEffectAction; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; +import com.gempukku.lotro.logic.effects.HealCharacterEffect; import com.gempukku.lotro.logic.timing.Action; import java.util.LinkedList; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_343.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_343.java index 1b48b0972..c5a254e0c 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_343.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_343.java @@ -2,7 +2,6 @@ package com.gempukku.lotro.cards.set1.site; import com.gempukku.lotro.cards.AbstractSite; import com.gempukku.lotro.cards.PlayConditions; -import com.gempukku.lotro.cards.effects.HealCharacterEffect; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Phase; @@ -12,6 +11,7 @@ import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.CostToEffectAction; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; import com.gempukku.lotro.logic.effects.DiscardCardFromPlayEffect; +import com.gempukku.lotro.logic.effects.HealCharacterEffect; import com.gempukku.lotro.logic.timing.Action; import java.util.Collections; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_358.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_358.java index 05f4855f6..f77ba3139 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_358.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_358.java @@ -2,7 +2,6 @@ package com.gempukku.lotro.cards.set1.site; import com.gempukku.lotro.cards.AbstractSite; import com.gempukku.lotro.cards.PlayConditions; -import com.gempukku.lotro.cards.effects.HealCharacterEffect; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Keyword; @@ -14,6 +13,7 @@ import com.gempukku.lotro.logic.actions.CostToEffectAction; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; import com.gempukku.lotro.logic.effects.ChooseCardsFromHandEffect; import com.gempukku.lotro.logic.effects.DiscardCardFromHandEffect; +import com.gempukku.lotro.logic.effects.HealCharacterEffect; import com.gempukku.lotro.logic.timing.Action; import java.util.Collections; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java index c57b1f0d0..cfe2cfcee 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java @@ -326,6 +326,10 @@ public class GameState { return Collections.unmodifiableList(_discards.get(playerId)); } + public List getDeadPile(String playerId) { + return Collections.unmodifiableList(_deadPiles.get(playerId)); + } + public List getAdventureDeck(String playerId) { return Collections.unmodifiableList(_adventureDecks.get(playerId)); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/HealCharacterEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/HealCharacterEffect.java similarity index 90% rename from gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/HealCharacterEffect.java rename to gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/HealCharacterEffect.java index 731791341..b6ea4d48f 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/HealCharacterEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/HealCharacterEffect.java @@ -1,4 +1,4 @@ -package com.gempukku.lotro.cards.effects; +package com.gempukku.lotro.logic.effects; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleSet.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleSet.java index 60a24acb7..5d848d4fb 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleSet.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleSet.java @@ -3,10 +3,7 @@ package com.gempukku.lotro.logic.timing; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.game.state.actions.DefaultActionsEnvironment; import com.gempukku.lotro.logic.modifiers.ModifiersLogic; -import com.gempukku.lotro.logic.timing.rules.CharacterDeathRule; -import com.gempukku.lotro.logic.timing.rules.EndEffectsAndActionsRule; -import com.gempukku.lotro.logic.timing.rules.ResolveSkirmishRule; -import com.gempukku.lotro.logic.timing.rules.RoamingRule; +import com.gempukku.lotro.logic.timing.rules.*; public class RuleSet { private LotroGame _game; @@ -20,7 +17,6 @@ public class RuleSet { } public void applyRuleSet() { - new EndEffectsAndActionsRule(_actionsEnvironment, _modifiersLogic).applyRule(); new RoamingRule(_modifiersLogic).applyRule(); @@ -28,5 +24,7 @@ public class RuleSet { new ResolveSkirmishRule(_game, _actionsEnvironment).applyRule(); new CharacterDeathRule(_actionsEnvironment).applyRule(); + + new SanctuaryRule(_actionsEnvironment).applyRule(); } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/SanctuaryRule.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/SanctuaryRule.java new file mode 100644 index 000000000..e8bfd72a6 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/SanctuaryRule.java @@ -0,0 +1,69 @@ +package com.gempukku.lotro.logic.timing.rules; + +import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.Keyword; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.AbstractActionProxy; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.game.state.actions.DefaultActionsEnvironment; +import com.gempukku.lotro.logic.actions.CostToEffectAction; +import com.gempukku.lotro.logic.effects.ChooseActiveCardsEffect; +import com.gempukku.lotro.logic.effects.HealCharacterEffect; +import com.gempukku.lotro.logic.timing.Action; +import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.UnrespondableEffect; + +import java.util.Collections; +import java.util.List; + +public class SanctuaryRule { + private DefaultActionsEnvironment _actionsEnvironment; + + public SanctuaryRule(DefaultActionsEnvironment actionsEnvironment) { + _actionsEnvironment = actionsEnvironment; + } + + public void applyRule() { + _actionsEnvironment.addAlwaysOnActionProxy( + new AbstractActionProxy() { + @Override + public List getPlayableWhenActions(String playerId, LotroGame game, EffectResult effectResult) { + if (effectResult.getType() == EffectResult.Type.START_OF_TURN + && game.getModifiersQuerying().hasKeyword(game.getGameState(), game.getGameState().getCurrentSite(), Keyword.SANCTUARY)) { + CostToEffectAction action = new CostToEffectAction(null, null, "Sanctuary healing"); + action.addEffect(new HealCompanion(game.getGameState().getCurrentPlayerId(), action, 0)); + return Collections.singletonList(action); + } + return null; + } + }); + } + + private class HealCompanion extends UnrespondableEffect { + private String _fpPlayerId; + private CostToEffectAction _action; + private int _counter; + + private HealCompanion(String fpPlayerId, CostToEffectAction action, int counter) { + _fpPlayerId = fpPlayerId; + _action = action; + _counter = counter; + } + + @Override + public void playEffect(LotroGame game) { + _action.addEffect( + new ChooseActiveCardsEffect(_fpPlayerId, "Choose companion to heal", 0, 1, Filters.type(CardType.COMPANION)) { + @Override + protected void cardsSelected(List cards) { + if (cards.size() > 0) { + _action.addEffect(new HealCharacterEffect(cards.get(0))); + if (_counter < 5) + _action.addEffect(new HealCompanion(_fpPlayerId, _action, _counter + 1)); + } + } + }); + } + } +}