"Take Back Your Lands!"

This commit is contained in:
marcins78
2013-01-03 17:27:09 +00:00
parent 95c6693fdf
commit 0049b887e4
7 changed files with 95 additions and 0 deletions

View File

@@ -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));
}
}

View File

@@ -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;

View File

@@ -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())));
}
}

View File

@@ -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);

View File

@@ -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,

View File

@@ -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)) {

View File

@@ -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);