"Take Back Your Lands!"
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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())));
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user