Sanctuary rule and Rule of 9
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -326,6 +326,10 @@ public class GameState {
|
||||
return Collections.unmodifiableList(_discards.get(playerId));
|
||||
}
|
||||
|
||||
public List<? extends PhysicalCard> getDeadPile(String playerId) {
|
||||
return Collections.unmodifiableList(_deadPiles.get(playerId));
|
||||
}
|
||||
|
||||
public List<? extends PhysicalCard> getAdventureDeck(String playerId) {
|
||||
return Collections.unmodifiableList(_adventureDecks.get(playerId));
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<? extends Action> 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<PhysicalCard> cards) {
|
||||
if (cards.size() > 0) {
|
||||
_action.addEffect(new HealCharacterEffect(cards.get(0)));
|
||||
if (_counter < 5)
|
||||
_action.addEffect(new HealCompanion(_fpPlayerId, _action, _counter + 1));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user