"Shadowfax"
This commit is contained in:
@@ -36,7 +36,7 @@ public abstract class AbstractAttachable extends AbstractLotroCardBlueprint {
|
||||
return false;
|
||||
}
|
||||
|
||||
protected Filter getFullValidTargetFilter(String playerId, final LotroGame game, PhysicalCard self) {
|
||||
protected Filter getFullValidTargetFilter(String playerId, final LotroGame game, final PhysicalCard self) {
|
||||
return Filters.and(getValidTargetFilter(playerId, game, self),
|
||||
new Filter() {
|
||||
@Override
|
||||
@@ -57,6 +57,16 @@ public abstract class AbstractAttachable extends AbstractLotroCardBlueprint {
|
||||
});
|
||||
}
|
||||
|
||||
private Filter getFullAttachValidTargetFilter(String playerId, final LotroGame game, final PhysicalCard self) {
|
||||
return Filters.and(getFullValidTargetFilter(playerId, game, self),
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return modifiersQuerying.canHavePlayedOn(gameState, self, physicalCard);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected abstract Filter getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self);
|
||||
|
||||
@Override
|
||||
@@ -67,7 +77,7 @@ public abstract class AbstractAttachable extends AbstractLotroCardBlueprint {
|
||||
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, Filter additionalAttachmentFilter, int twilightModifier) {
|
||||
return (self.getBlueprint().getSide() != Side.SHADOW || PlayConditions.canPayForShadowCard(game, self, twilightModifier))
|
||||
&& PlayConditions.checkUniqueness(game.getGameState(), game.getModifiersQuerying(), self)
|
||||
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), getFullValidTargetFilter(playerId, game, self), additionalAttachmentFilter);
|
||||
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), getFullAttachValidTargetFilter(playerId, game, self), additionalAttachmentFilter);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -93,7 +103,7 @@ public abstract class AbstractAttachable extends AbstractLotroCardBlueprint {
|
||||
}
|
||||
|
||||
public AttachPermanentAction getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, Filter additionalAttachmentFilter, int twilightModifier) {
|
||||
return new AttachPermanentAction(game, self, Filters.and(getFullValidTargetFilter(playerId, game, self), additionalAttachmentFilter), getAttachCostModifiers(playerId, game, self), twilightModifier);
|
||||
return new AttachPermanentAction(game, self, Filters.and(getFullAttachValidTargetFilter(playerId, game, self), additionalAttachmentFilter), getAttachCostModifiers(playerId, game, self), twilightModifier);
|
||||
}
|
||||
|
||||
protected List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) {
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.GameState;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
|
||||
import com.gempukku.lotro.logic.timing.Action;
|
||||
|
||||
import java.util.LinkedList;
|
||||
@@ -34,7 +35,7 @@ public abstract class AbstractAttachableFPPossession extends AbstractAttachable
|
||||
_vitality = vitality;
|
||||
}
|
||||
|
||||
private void appendTransferPossessionAction(List<Action> actions, LotroGame game, PhysicalCard self, Filter validTargetFilter) {
|
||||
private void appendTransferPossessionAction(List<Action> actions, LotroGame game, final PhysicalCard self, Filter validTargetFilter) {
|
||||
GameState gameState = game.getGameState();
|
||||
if (Filters.canSpot(gameState, game.getModifiersQuerying(), validTargetFilter)
|
||||
&& gameState.getCurrentPhase() == Phase.FELLOWSHIP
|
||||
@@ -60,6 +61,14 @@ public abstract class AbstractAttachableFPPossession extends AbstractAttachable
|
||||
);
|
||||
}
|
||||
|
||||
validTransferFilter = Filters.and(validTransferFilter,
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return modifiersQuerying.canHaveTransferredOn(gameState, self, physicalCard);
|
||||
}
|
||||
});
|
||||
|
||||
if (Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), validTransferFilter))
|
||||
actions.add(new TransferPermanentAction(self, game, validTransferFilter));
|
||||
}
|
||||
|
||||
@@ -5,14 +5,12 @@ import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Zone;
|
||||
import com.gempukku.lotro.filters.Filter;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.GameState;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.GameUtils;
|
||||
import com.gempukku.lotro.logic.actions.AbstractCostToEffectAction;
|
||||
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
|
||||
import com.gempukku.lotro.logic.effects.PlayCardEffect;
|
||||
import com.gempukku.lotro.logic.effects.SendMessageEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
|
||||
import java.util.Iterator;
|
||||
@@ -46,13 +44,7 @@ public class AttachPermanentAction extends AbstractCostToEffectAction {
|
||||
_removeCardEffect = new RemoveCardFromZoneEffect(card);
|
||||
|
||||
_chooseTargetEffect =
|
||||
new ChooseActiveCardEffect(null, card.getOwner(), "Attach " + card.getBlueprint().getName() + ". Choose target to attach to", filter,
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return modifiersQuerying.canHavePlayedOn(gameState, card, physicalCard);
|
||||
}
|
||||
}) {
|
||||
new ChooseActiveCardEffect(null, card.getOwner(), "Attach " + card.getBlueprint().getName() + ". Choose target to attach to", filter) {
|
||||
@Override
|
||||
protected void cardSelected(PhysicalCard target) {
|
||||
_putCardIntoPlayEffect = new AttachCardEffect(_source, target);
|
||||
|
||||
@@ -4,11 +4,9 @@ import com.gempukku.lotro.cards.effects.PayTwilightCostEffect;
|
||||
import com.gempukku.lotro.cards.effects.TransferPermanentEffect;
|
||||
import com.gempukku.lotro.filters.Filter;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.GameState;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.ActivateCardAction;
|
||||
import com.gempukku.lotro.logic.effects.ChooseActiveCardsEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
@@ -18,13 +16,7 @@ public class TransferPermanentAction extends ActivateCardAction {
|
||||
|
||||
appendCost(new PayTwilightCostEffect(card));
|
||||
appendEffect(
|
||||
new ChooseActiveCardsEffect(null, card.getOwner(), "Choose target to attach to", 1, 1, filter,
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return modifiersQuerying.canHaveTransferredOn(gameState, card, physicalCard);
|
||||
}
|
||||
}) {
|
||||
new ChooseActiveCardsEffect(null, card.getOwner(), "Choose target to attach to", 1, 1, filter) {
|
||||
@Override
|
||||
protected void cardsSelected(LotroGame game, Collection<PhysicalCard> target) {
|
||||
if (target.size() > 0) {
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package com.gempukku.lotro.cards.effects;
|
||||
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.GameState;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
|
||||
import com.gempukku.lotro.logic.timing.AbstractEffect;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
public class AttachCardEffect extends UnrespondableEffect {
|
||||
public class AttachCardEffect extends AbstractEffect {
|
||||
private PhysicalCard _physicalCard;
|
||||
private PhysicalCard _targetCard;
|
||||
|
||||
@@ -15,9 +17,29 @@ public class AttachCardEffect extends UnrespondableEffect {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doPlayEffect(LotroGame game) {
|
||||
GameState gameState = game.getGameState();
|
||||
gameState.attachCard(_physicalCard, _targetCard);
|
||||
gameState.startAffecting(_physicalCard, game.getModifiersEnvironment());
|
||||
public boolean isPlayableInFull(LotroGame game) {
|
||||
return !PlayConditions.nonPlayZone(_targetCard.getZone())
|
||||
&& game.getModifiersQuerying().canHavePlayedOn(game.getGameState(), _physicalCard, _targetCard);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getText(LotroGame game) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EffectResult.Type getType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected FullEffectResult playEffectReturningResult(LotroGame game) {
|
||||
if (isPlayableInFull(game)) {
|
||||
GameState gameState = game.getGameState();
|
||||
gameState.attachCard(_physicalCard, _targetCard);
|
||||
gameState.startAffecting(_physicalCard, game.getModifiersEnvironment());
|
||||
return new FullEffectResult(null, true, true);
|
||||
}
|
||||
return new FullEffectResult(null, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
package com.gempukku.lotro.cards.set4.gandalf;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractAttachableFPPossession;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.ExertCharactersEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.MayNotBearModifier;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
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.game.state.Skirmish;
|
||||
import com.gempukku.lotro.logic.actions.RequiredTriggerAction;
|
||||
import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: The Two Towers
|
||||
* Side: Free
|
||||
* Culture: Gandalf
|
||||
* Twilight Cost: 2
|
||||
* Type: Possession • Mount
|
||||
* Strength: +2
|
||||
* Game Text: Bearer must be Gandalf. Discard any hand weapon he bears. Gandalf may not bear a hand weapon.
|
||||
* At the start of each skirmish involving Gandalf, each minion skirmishing him must exert.
|
||||
*/
|
||||
public class Card4_100 extends AbstractAttachableFPPossession {
|
||||
public Card4_100() {
|
||||
super(2, 2, 0, Culture.GANDALF, Keyword.MOUNT, "Shadowfax", true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Filter getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
|
||||
return Filters.name("Gandalf");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<? extends Modifier> getNonBasicStatsModifiers(PhysicalCard self) {
|
||||
return Collections.singletonList(
|
||||
new MayNotBearModifier(self, Filters.hasAttached(self), Filters.keyword(Keyword.HAND_WEAPON)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RequiredTriggerAction> getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
|
||||
if (PlayConditions.played(game.getGameState(), game.getModifiersQuerying(), effectResult, Filters.sameCard(self))) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new DiscardCardsFromPlayEffect(self, Filters.and(Filters.attachedTo(Filters.hasAttached(self)), Filters.keyword(Keyword.HAND_WEAPON))));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
if (effectResult.getType() == EffectResult.Type.START_OF_PHASE
|
||||
&& game.getGameState().getCurrentPhase() == Phase.SKIRMISH) {
|
||||
final Skirmish skirmish = game.getGameState().getSkirmish();
|
||||
if (skirmish != null && skirmish.getFellowshipCharacter() != null && skirmish.getFellowshipCharacter().getBlueprint().getName().equals("Gandalf")) {
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(self);
|
||||
action.appendEffect(
|
||||
new ExertCharactersEffect(self, Filters.inSkirmishAgainst(Filters.name("Gandalf"))));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user