- Actions that have playing a card as an effect (except playing from hand or discard), no longer check if there is

a card player can legally play. Effects that play cards from hand and discard, are still not playable if no legal card 
can be played.
This commit is contained in:
marcins78
2013-03-07 10:37:13 +00:00
parent 6317a19125
commit 3085a44e36
24 changed files with 41 additions and 88 deletions

View File

@@ -1,6 +1,9 @@
<pre style="font-size:80%">
<b>7 Mar. 2013</b>
- "Arwen", "Echo of Luthien" now applies its -3 penalty only if the card was actually ELVEN.
- Actions that have playing a card as an effect (except playing from hand or discard), no longer check if there is
a card player can legally play. Effects that play cards from hand and discard, are still not playable if no legal card
can be played.
<b>5 Mar. 2013</b>
- "Bilbo", "Bearer of Things Burgled" and any card that allows a choice of adding twilight now correctly displays

View File

@@ -49,8 +49,7 @@ public class Card11_158 extends AbstractPermanent {
@Override
protected List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.FELLOWSHIP, self)
&& PlayConditions.canPlayFromStacked(playerId, game, self, CardType.POSSESSION)) {
if (PlayConditions.canUseFPCardDuringPhase(game, Phase.FELLOWSHIP, self)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new AddTwilightEffect(self, 1));

View File

@@ -34,8 +34,7 @@ public class Card11_255 extends AbstractNewSite {
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.startOfPhase(game, effectResult, Phase.FELLOWSHIP)
&& playerId.equals(game.getGameState().getCurrentPlayerId())
&& PlayConditions.canExert(self, game, 1, 3, CardType.COMPANION)
&& PlayConditions.canPlayFromDeadPile(playerId, game, Race.WIZARD)) {
&& PlayConditions.canExert(self, game, 1, 3, CardType.COMPANION)) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 3, 3, CardType.COMPANION));

View File

@@ -48,8 +48,7 @@ public class Card12_058 extends AbstractPermanent {
@Override
protected List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 1)
&& PlayConditions.canPlayFromStacked(playerId, game, 1, self, CardType.POSSESSION)) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 1)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new RemoveTwilightEffect(1));

View File

@@ -45,8 +45,7 @@ public class Card13_106 extends AbstractPermanent {
return Collections.singletonList(action);
}
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)
&& PlayConditions.canRemoveBurdens(game, self, 1)
&& PlayConditions.canPlayFromStacked(playerId, game, 0, -3, self, CardType.MINION, Keyword.LURKER)) {
&& PlayConditions.canRemoveBurdens(game, self, 1)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new RemoveBurdenEffect(playerId, self, 1));

View File

@@ -1,7 +1,6 @@
package com.gempukku.lotro.cards.set17.men;
import com.gempukku.lotro.cards.AbstractEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromStackedEffect;
import com.gempukku.lotro.common.CardType;
@@ -27,8 +26,7 @@ public class Card17_046 extends AbstractEvent {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int withTwilightRemoved, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, withTwilightRemoved, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& PlayConditions.canPlayFromStacked(playerId, game, Filters.and(Culture.MEN, CardType.POSSESSION), Culture.MEN, CardType.MINION);
return super.checkPlayRequirements(playerId, game, self, withTwilightRemoved, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile);
}
@Override

View File

@@ -38,8 +38,7 @@ public class Card17_055 extends AbstractMinion {
@Override
protected List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.MANEUVER, self, 0)
&& PlayConditions.canSelfExert(self, game)
&& PlayConditions.canPlayFromStacked(playerId, game, Filters.and(Culture.MEN, CardType.POSSESSION), Culture.MEN, CardType.MINION)) {
&& PlayConditions.canSelfExert(self, game)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new SelfExertEffect(action, self));

View File

@@ -1,7 +1,6 @@
package com.gempukku.lotro.cards.set17.men;
import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromStackedEffect;
import com.gempukku.lotro.common.CardType;
@@ -56,8 +55,7 @@ public class Card17_057 extends AbstractMinion {
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.startOfPhase(game, effectResult, Phase.MANEUVER)
&& PlayConditions.canPlayFromStacked(playerId, game, Filters.and(Culture.MEN, CardType.POSSESSION), CardType.MINION)) {
if (TriggerConditions.startOfPhase(game, effectResult, Phase.MANEUVER)) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendEffect(
new ChooseAndPlayCardFromStackedEffect(playerId, Filters.and(Culture.MEN, CardType.POSSESSION), CardType.MINION));

View File

@@ -46,8 +46,7 @@ public class Card20_034 extends AbstractPermanent {
protected List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) {
if ((PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)
|| PlayConditions.canUseShadowCardDuringPhase(game, Phase.SKIRMISH, self, 0))
&& Filters.filter(game.getGameState().getStackedCards(self), game.getGameState(), game.getModifiersQuerying(), Culture.DUNLAND).size()>=3
&& PlayConditions.canPlayFromStacked(playerId, game, self, Filters.any)) {
&& Filters.filter(game.getGameState().getStackedCards(self), game.getGameState(), game.getModifiersQuerying(), Culture.DUNLAND).size()>=3) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendEffect(
new ChooseAndPlayCardFromStackedEffect(playerId, self, Filters.any));

View File

@@ -44,8 +44,7 @@ public class Card20_240 extends AbstractPermanent {
return Collections.singletonList(action);
}
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)
&& PlayConditions.canRemoveThreat(game, self, 1)
&& PlayConditions.canPlayFromStacked(playerId, game, self, Filters.saruman)) {
&& PlayConditions.canRemoveThreat(game, self, 1)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new RemoveThreatsEffect(self, 1));

View File

@@ -42,8 +42,7 @@ public class Card20_251 extends AbstractPermanent {
@Override
protected List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 2)
&& PlayConditions.canPlayFromStacked(playerId, game, 2, self, Race.GOBLIN)) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 2)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new RemoveTwilightEffect(2));

View File

@@ -1,7 +1,6 @@
package com.gempukku.lotro.cards.set20.moria;
import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromStackedEffect;
import com.gempukku.lotro.common.CardType;
@@ -30,8 +29,7 @@ public class Card20_264 extends AbstractMinion {
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.played(game, effectResult, self)
&& PlayConditions.canPlayFromStacked(playerId, game, Filters.and(Culture.MORIA, CardType.CONDITION), Race.GOBLIN)) {
if (TriggerConditions.played(game, effectResult, self)) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendEffect(
new ChooseAndPlayCardFromStackedEffect(playerId, Filters.and(Culture.MORIA, CardType.CONDITION), Race.GOBLIN));

View File

@@ -30,8 +30,7 @@ public class Card20_274 extends AbstractPermanent {
@Override
public List<? extends Action> getExtraPhaseActions(final String playerId, final LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)
&& PlayConditions.canPlayFromStacked(playerId, game, self, Race.GOBLIN)) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendEffect(
new ChooseAndPlayCardFromStackedEffect(playerId, self, Race.GOBLIN));

View File

@@ -1,7 +1,6 @@
package com.gempukku.lotro.cards.set20.moria;
import com.gempukku.lotro.cards.AbstractEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromStackedEffect;
import com.gempukku.lotro.common.*;
@@ -22,8 +21,7 @@ public class Card20_276 extends AbstractEvent {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int withTwilightRemoved, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, withTwilightRemoved, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& PlayConditions.canPlayFromStacked(playerId, game, Filters.and(Culture.MORIA, CardType.CONDITION), Race.GOBLIN);
return super.checkPlayRequirements(playerId, game, self, withTwilightRemoved, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile);
}
@Override

View File

@@ -1,7 +1,6 @@
package com.gempukku.lotro.cards.set4.gandalf;
import com.gempukku.lotro.cards.AbstractOldEvent;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromDeadPileEffect;
import com.gempukku.lotro.common.Culture;
@@ -30,8 +29,7 @@ public class Card4_106 extends AbstractOldEvent {
return super.checkPlayRequirements(playerId, game, self, withTwilightRemoved, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Race.ELF)
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Culture.GONDOR, Race.MAN)
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Race.DWARF)
&& PlayConditions.canPlayFromDeadPile(playerId, game, Filters.gandalf);
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Race.DWARF);
}
@Override

View File

@@ -34,8 +34,7 @@ public class Card6_117 extends AbstractSite {
@Override
public List<? extends Action> getPhaseActions(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseSiteDuringPhase(game, Phase.FELLOWSHIP, self)
&& PlayConditions.canExert(self, game, 1, 3, CardType.COMPANION, Signet.GANDALF)
&& PlayConditions.canPlayFromDeadPile(playerId, game, Filters.unboundCompanion)) {
&& PlayConditions.canExert(self, game, 1, 3, CardType.COMPANION, Signet.GANDALF)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new ChooseAndExertCharactersEffect(action, playerId, 3, 3, CardType.COMPANION, Signet.GANDALF));

View File

@@ -12,7 +12,6 @@ import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.timing.Effect;
import com.gempukku.lotro.logic.timing.UnrespondableEffect;
import java.util.LinkedList;
import java.util.List;
@@ -34,51 +33,29 @@ public class Card7_262 extends AbstractEvent {
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int withTwilightRemoved, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) {
return super.checkPlayRequirements(playerId, game, self, withTwilightRemoved, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& (
(PlayConditions.canRemoveBurdens(game, self, 1)
&& PlayConditions.canPlayFromDiscard(playerId, game, Culture.SAURON, Race.ORC)
)
|| PlayConditions.canPlayFromStacked(playerId, game, Filters.siteControlled(playerId), Keyword.BESIEGER));
&& PlayConditions.canPlayFromDiscard(playerId, game, Culture.SAURON, Race.ORC)
&& (PlayConditions.canRemoveBurdens(game, self, 1)
|| PlayConditions.canPlayFromStacked(playerId, game, Filters.siteControlled(playerId), Keyword.BESIEGER));
}
@Override
public PlayEventAction getPlayCardAction(final String playerId, LotroGame game, final PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) {
final PlayEventAction action = new PlayEventAction(self);
List<Effect> possibleCosts = new LinkedList<Effect>();
if (PlayConditions.canPlayFromStacked(playerId, game, Filters.siteControlled(playerId), Keyword.BESIEGER))
possibleCosts.add(
new UnrespondableEffect() {
@Override
public String getText(LotroGame game) {
return "Play a besieger stacked on a site you control";
}
@Override
protected void doPlayEffect(LotroGame game) {
action.appendEffect(
new ChooseAndPlayCardFromStackedEffect(playerId, Filters.siteControlled(playerId), Keyword.BESIEGER));
}
});
if (PlayConditions.canRemoveBurdens(game, self, 1)
&& PlayConditions.canPlayFromDiscard(playerId, game, Culture.SAURON, Race.ORC))
possibleCosts.add(
new UnrespondableEffect() {
@Override
public String getText(LotroGame game) {
return "Remove a burden to play a SAURON Orc from your discard pile";
}
@Override
protected void doPlayEffect(LotroGame game) {
action.insertCost(
new RemoveBurdenEffect(playerId, self));
action.appendEffect(
new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.SAURON, Race.ORC));
}
});
possibleCosts.add(
new ChooseAndPlayCardFromStackedEffect(playerId, Filters.siteControlled(playerId), Keyword.BESIEGER) {
@Override
public String getText(LotroGame game) {
return "Play a besieger stacked on a site you control";
}
});
possibleCosts.add(
new RemoveBurdenEffect(playerId, self));
action.appendCost(
new ChoiceEffect(action, playerId, possibleCosts));
action.appendEffect(
new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.SAURON, Race.ORC));
return action;
}
}

View File

@@ -41,8 +41,7 @@ public class Card7_274 extends AbstractMinion {
@Override
protected List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, final PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SKIRMISH, self, 0)
&& PlayConditions.canDiscardFromHand(game, playerId, 2, Filters.any)
&& PlayConditions.canPlayFromStacked(playerId, game, Filters.siteControlled(playerId), Culture.SAURON, Race.ORC)) {
&& PlayConditions.canDiscardFromHand(game, playerId, 2, Filters.any)) {
final ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new ChooseAndDiscardCardsFromHandEffect(action, playerId, false, 2));

View File

@@ -39,7 +39,7 @@ public class Card7_277 extends AbstractMinion {
protected List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)) {
List<ActivateCardAction> actions = new LinkedList<ActivateCardAction>();
if (PlayConditions.canDiscardFromHand(game, playerId, 2, Filters.any) && PlayConditions.canPlayFromStacked(playerId, game, Filters.siteControlled(playerId), Culture.SAURON, Race.ORC)) {
if (PlayConditions.canDiscardFromHand(game, playerId, 2, Filters.any)) {
ActivateCardAction action = new ActivateCardAction(self);
action.setText("Play stacked SAURON Orc");
action.appendCost(
@@ -48,7 +48,7 @@ public class Card7_277 extends AbstractMinion {
new ChooseAndPlayCardFromStackedEffect(playerId, Filters.siteControlled(playerId), Culture.SAURON, Race.ORC));
actions.add(action);
}
if (PlayConditions.canDiscardFromHand(game, playerId, 1, Filters.any) && PlayConditions.canPlayFromStacked(playerId, game, Filters.siteControlled(playerId), Culture.SAURON, Race.ORC, Keyword.BESIEGER)) {
if (PlayConditions.canDiscardFromHand(game, playerId, 1, Filters.any)) {
ActivateCardAction action = new ActivateCardAction(self);
action.setText("Play stacked besieger SAURON Orc");
action.appendCost(

View File

@@ -45,8 +45,7 @@ public class Card8_030 extends AbstractPermanent {
});
return Collections.singletonList(action);
}
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)
&& PlayConditions.canPlayFromStacked(playerId, game, self, CardType.MINION, Culture.GOLLUM)) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendEffect(
new ChooseAndPlayCardFromStackedEffect(playerId, self, CardType.MINION, Culture.GOLLUM));

View File

@@ -38,8 +38,7 @@ public class Card8_098 extends AbstractMinion {
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.played(game, effectResult, self)
&& PlayConditions.canRemoveBurdens(game, self, 1)
&& PlayConditions.canPlayFromStacked(playerId, game, Filters.siteControlled(playerId), Keyword.BESIEGER)) {
&& PlayConditions.canRemoveBurdens(game, self, 1)) {
OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendCost(
new RemoveBurdenEffect(playerId, self));

View File

@@ -1,7 +1,6 @@
package com.gempukku.lotro.cards.set8.sauron;
import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndPlayCardFromStackedEffect;
@@ -51,8 +50,7 @@ public class Card8_105 extends AbstractMinion {
@Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, final PhysicalCard self) {
if (TriggerConditions.winsSkirmish(game, effectResult, self)
&& PlayConditions.canPlayFromStacked(playerId, game, Filters.siteControlled(playerId), Keyword.BESIEGER)) {
if (TriggerConditions.winsSkirmish(game, effectResult, self)) {
final OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendEffect(
new ChooseAndPlayCardFromStackedEffect(playerId, Filters.siteControlled(playerId), Keyword.BESIEGER) {

View File

@@ -61,8 +61,7 @@ public class Card8_107 extends AbstractPermanent {
return Collections.singletonList(action);
}
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)
&& PlayConditions.canRemoveThreat(game, self, 1)
&& PlayConditions.canPlayFromStacked(playerId, game, Filters.siteControlled(playerId), Culture.SAURON, CardType.MINION)) {
&& PlayConditions.canRemoveThreat(game, self, 1)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendCost(
new RemoveThreatsEffect(self, 1));

View File

@@ -66,8 +66,7 @@ public class Card8_071 extends AbstractPermanent {
return Collections.singletonList(action);
}
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)
&& PlayConditions.canSpot(game, 2, Culture.WRAITH, CardType.MINION)
&& PlayConditions.canPlayFromStacked(playerId, game, self, Culture.WRAITH, CardType.MINION)) {
&& PlayConditions.canSpot(game, 2, Culture.WRAITH, CardType.MINION)) {
ActivateCardAction action = new ActivateCardAction(self);
action.appendEffect(
new ChooseAndPlayCardFromStackedEffect(playerId, self, Culture.WRAITH, CardType.MINION));