From 0049b887e470acf7fad723f85bd074340473d70c Mon Sep 17 00:00:00 2001 From: marcins78 Date: Thu, 3 Jan 2013 17:27:09 +0000 Subject: [PATCH] "Take Back Your Lands!" --- .../lotro/cards/set20/dunland/Card20_036.java | 42 +++++++++++++++++++ .../logic/modifiers/AbstractModifier.java | 5 +++ .../modifiers/CantBeLiberatedModifier.java | 30 +++++++++++++ .../lotro/logic/modifiers/Modifier.java | 2 + .../lotro/logic/modifiers/ModifierEffect.java | 1 + .../lotro/logic/modifiers/ModifiersLogic.java | 13 ++++++ .../logic/modifiers/ModifiersQuerying.java | 2 + 7 files changed, 95 insertions(+) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/dunland/Card20_036.java create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/CantBeLiberatedModifier.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/dunland/Card20_036.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/dunland/Card20_036.java new file mode 100644 index 000000000..41f002ffd --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/dunland/Card20_036.java @@ -0,0 +1,42 @@ +package com.gempukku.lotro.cards.set20.dunland; + +import com.gempukku.lotro.cards.AbstractAttachable; +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.common.*; +import com.gempukku.lotro.filters.Filter; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.modifiers.CantBeLiberatedModifier; +import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.SpotCondition; + +/** + * 3 + * •Take Back Your Lands! + * Dunland Condition • Support Area + * To play spot a [Dunland] man. + * Plays on a site you control. + * While you can spot a [Dunland] man, the Free Peoples Player may not liberate this site. + */ +public class Card20_036 extends AbstractAttachable { + public Card20_036() { + super(Side.SHADOW, CardType.CONDITION, 3, Culture.DUNLAND, null, "Take Back Your Lands!", null, true); + } + + @Override + public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int withTwilightRemoved, Filter additionalAttachmentFilter, int twilightModifier) { + return super.checkPlayRequirements(playerId, game, self, withTwilightRemoved, additionalAttachmentFilter, twilightModifier) + && PlayConditions.canSpot(game, Culture.DUNLAND, Race.MAN); + } + + @Override + protected Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) { + return Filters.siteControlled(playerId); + } + + @Override + public Modifier getAlwaysOnModifier(PhysicalCard self) { + return new CantBeLiberatedModifier(self, Side.FREE_PEOPLE, new SpotCondition(Culture.DUNLAND, Race.MAN), Filters.hasAttached(self)); + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java index 252f7341a..4d6d84bb0 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java @@ -257,6 +257,11 @@ public abstract class AbstractModifier implements Modifier { return true; } + @Override + public boolean canBeLiberated(GameState gameState, ModifiersQuerying modifiersQuerying, String performingPlayer, PhysicalCard card, PhysicalCard source) { + return true; + } + @Override public boolean canBeReturnedToHand(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, PhysicalCard source) { return true; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/CantBeLiberatedModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/CantBeLiberatedModifier.java new file mode 100644 index 000000000..9244eac02 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/CantBeLiberatedModifier.java @@ -0,0 +1,30 @@ +package com.gempukku.lotro.logic.modifiers; + +import com.gempukku.lotro.common.Filterable; +import com.gempukku.lotro.common.Side; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.GameState; + +public class CantBeLiberatedModifier extends AbstractModifier { + private Side _side; + + public CantBeLiberatedModifier(PhysicalCard source, Filterable affectFilter) { + super(source, "Can't be liberated", affectFilter, ModifierEffect.LIBERATION_MODIFIER); + } + + public CantBeLiberatedModifier(PhysicalCard source, Condition condition, Filterable affectFilter) { + super(source, "Can't be liberated", affectFilter, condition, ModifierEffect.LIBERATION_MODIFIER); + } + + public CantBeLiberatedModifier(PhysicalCard source, Side side, Condition condition, Filterable affectFilter) { + super(source, "Can't be liberated", affectFilter, condition, ModifierEffect.LIBERATION_MODIFIER); + _side = side; + } + + @Override + public boolean canBeLiberated(GameState gameState, ModifiersQuerying modifiersQuerying, String performingPlayer, PhysicalCard card, PhysicalCard source) { + return !(_side == null || + (_side == Side.SHADOW && !performingPlayer.equals(gameState.getCurrentPlayerId())) || + (_side == Side.FREE_PEOPLE && performingPlayer.equals(gameState.getCurrentPlayerId()))); + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java index fb512d5c5..b5b696698 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java @@ -104,6 +104,8 @@ public interface Modifier { public boolean canBeDiscardedFromPlay(GameState gameState, ModifiersQuerying modifiersQuerying, String performingPlayer, PhysicalCard card, PhysicalCard source); + public boolean canBeLiberated(GameState gameState, ModifiersQuerying modifiersQuerying, String performingPlayer, PhysicalCard card, PhysicalCard source); + public boolean canBeReturnedToHand(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, PhysicalCard source); public boolean canBeHealed(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifierEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifierEffect.java index edb4808e3..30c0cfdce 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifierEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifierEffect.java @@ -8,6 +8,7 @@ public enum ModifierEffect { WOUND_MODIFIER, BURDEN_MODIFIER, THREAT_MODIFIER, PRESENCE_MODIFIER, ARCHERY_MODIFIER, MOVE_LIMIT_MODIFIER, ACTION_MODIFIER, ASSIGNMENT_MODIFIER, DISCARD_FROM_PLAY_MODIFIER, DISCARD_NOT_FROM_PLAY, LOOK_OR_REVEAL_MODIFIER, SPOT_MODIFIER, TARGET_MODIFIER, RETURN_TO_HAND_MODIFIER, TRANSFER_MODIFIER, + LIBERATION_MODIFIER, EXTRA_ACTION_MODIFIER, EXTRA_COST_MODIFIER, INITIATIVE_MODIFIER, TEXT_MODIFIER, 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 8ae9f7a98..034c9e6e9 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 @@ -902,6 +902,19 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { return true; } + @Override + public boolean canBeLiberated(GameState gameState, String playerId, PhysicalCard card, PhysicalCard source) { + LoggingThreadLocal.logMethodStart(card, "canBeLiberated"); + try { + for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.LIBERATION_MODIFIER, card)) + if (!modifier.canBeLiberated(gameState, this, playerId, card, source)) + return false; + return true; + } finally { + LoggingThreadLocal.logMethodEnd(); + } + } + @Override public Side hasInitiative(GameState gameState) { for (Modifier modifier : getModifiers(gameState, ModifierEffect.INITIATIVE_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 f13b2da0c..8144f75c7 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 @@ -126,6 +126,8 @@ public interface ModifiersQuerying { public boolean canDiscardCardsFromTopOfDeck(GameState gameState, String playerId, PhysicalCard source); + public boolean canBeLiberated(GameState gameState, String playerId, PhysicalCard card, PhysicalCard source); + public Side hasInitiative(GameState gameState); public int getSpotBonus(GameState gameState, Filterable filter);