Merge pull request #45 from PhallenCassidy/fixes-for-lotr

Fixes for LotR
This commit is contained in:
Marcin Sciesinski
2018-04-16 12:53:54 -07:00
committed by GitHub
19 changed files with 180 additions and 84 deletions

View File

@@ -3,8 +3,8 @@ package com.gempukku.lotro.cards.set15.gollum;
import com.gempukku.lotro.cards.AbstractEvent; import com.gempukku.lotro.cards.AbstractEvent;
import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction; import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.AddUntilEndOfTurnModifierEffect;
import com.gempukku.lotro.cards.effects.PreventableEffect; import com.gempukku.lotro.cards.effects.PreventableEffect;
import com.gempukku.lotro.cards.effects.SnapshotAndApplyStrengthModifierUntilStartOfPhaseEffect;
import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Phase;
@@ -15,7 +15,7 @@ import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.SubAction; import com.gempukku.lotro.logic.actions.SubAction;
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect; import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect;
import com.gempukku.lotro.logic.modifiers.StrengthModifier; import com.gempukku.lotro.logic.modifiers.evaluator.ConstantEvaluator;
import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.Effect;
/** /**
@@ -53,8 +53,8 @@ public class Card15_052 extends AbstractEvent {
@Override @Override
public Effect createPreventionCostForPlayer(SubAction subAction, String playerId) { public Effect createPreventionCostForPlayer(SubAction subAction, String playerId) {
return new AddUntilEndOfTurnModifierEffect( return new SnapshotAndApplyStrengthModifierUntilStartOfPhaseEffect(
new StrengthModifier(self, CardType.MINION, -2)) { self, new ConstantEvaluator(-2), Phase.FELLOWSHIP, CardType.MINION) {
@Override @Override
public String getText(LotroGame game) { public String getText(LotroGame game) {
return "Make each minion strength -2"; return "Make each minion strength -2";

View File

@@ -4,8 +4,8 @@ import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.TriggerConditions; import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.cards.effects.AddTokenEffect; import com.gempukku.lotro.cards.effects.AddTokenEffect;
import com.gempukku.lotro.cards.effects.RemoveTokenEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect; import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndRemoveCultureTokensFromCardEffect;
import com.gempukku.lotro.common.*; import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
@@ -45,10 +45,10 @@ public class Card17_113 extends AbstractPermanent {
@Override @Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.winsSkirmish(game, effectResult, CardType.MINION, Culture.URUK_HAI) if (TriggerConditions.winsSkirmish(game, effectResult, CardType.MINION, Culture.URUK_HAI)
&& PlayConditions.canRemoveTokens(game, self, Token.URUK_HAI)) { && PlayConditions.canRemoveTokens(game, Token.URUK_HAI, 1, CardType.CONDITION)) {
OptionalTriggerAction action = new OptionalTriggerAction(self); OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendCost( action.appendCost(
new RemoveTokenEffect(self, self, Token.URUK_HAI)); new ChooseAndRemoveCultureTokensFromCardEffect(self, playerId, Token.URUK_HAI, 1, CardType.CONDITION));
action.appendEffect( action.appendEffect(
new ChooseAndExertCharactersEffect(action, playerId, 1, 1, CardType.COMPANION)); new ChooseAndExertCharactersEffect(action, playerId, 1, 1, CardType.COMPANION));
return Collections.singletonList(action); return Collections.singletonList(action);

View File

@@ -44,7 +44,7 @@ public class Card19_024 extends AbstractAttachable {
@Override @Override
public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { public List<OptionalTriggerAction> getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.winsSkirmish(game, effectResult, self.getAttachedTo())) { if (TriggerConditions.startOfPhase(game, effectResult, Phase.SKIRMISH)) {
OptionalTriggerAction action = new OptionalTriggerAction(self); OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendEffect( action.appendEffect(
new ChooseAndTransferAttachableEffect(action, playerId, self, Filters.any, Filters.and(Culture.ROHAN, Race.MAN))); new ChooseAndTransferAttachableEffect(action, playerId, self, Filters.any, Filters.and(Culture.ROHAN, Race.MAN)));

View File

@@ -2,14 +2,17 @@ package com.gempukku.lotro.cards.set2.moria;
import com.gempukku.lotro.cards.AbstractResponseOldEvent; import com.gempukku.lotro.cards.AbstractResponseOldEvent;
import com.gempukku.lotro.cards.actions.PlayEventAction; import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.TriggerConditions;
import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.common.Side; import com.gempukku.lotro.common.Side;
import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.effects.WoundCharactersEffect; import com.gempukku.lotro.logic.effects.WoundCharactersEffect;
import com.gempukku.lotro.logic.timing.EffectResult; import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.results.SkirmishAboutToEndResult;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@@ -34,17 +37,22 @@ public class Card2_057 extends AbstractResponseOldEvent {
} }
@Override @Override
public List<PlayEventAction> getOptionalAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { public List<PlayEventAction> getOptionalAfterActions(String playerId, final LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (effectResult.getType() == EffectResult.Type.SKIRMISH_ABOUT_TO_END if (checkPlayRequirements(playerId, game, self, 0, 0, false, false)
&& checkPlayRequirements(playerId, game, self, 0, 0, false, false) && effectResult.getType() == EffectResult.Type.SKIRMISH_ABOUT_TO_END) {
&& Filters.filter(game.getGameState().getSkirmish().getShadowCharacters(), game.getGameState(), game.getModifiersQuerying(), SkirmishAboutToEndResult checkSkirmish = (SkirmishAboutToEndResult) effectResult;
Filters.balrog, Filters.hasAttached(Filters.name("Whip of Many Thongs"))).size() > 0) { for (PhysicalCard minion: checkSkirmish.getMinionsInvolved()) {
PlayEventAction action = new PlayEventAction(self); if (minion.getBlueprint().getName().equals("The Balrog")
action.appendEffect( && Filters.filter(game.getGameState().getSkirmish().getShadowCharacters(), game.getGameState(),
new WoundCharactersEffect(self, CardType.COMPANION, Filters.inSkirmish)); game.getModifiersQuerying(), Filters.hasAttached(Filters.name("Whip of Many Thongs"))).size() > 0) {
action.appendEffect( PlayEventAction action = new PlayEventAction(self);
new WoundCharactersEffect(self, CardType.COMPANION, Filters.inSkirmish)); action.appendEffect(
return Collections.singletonList(action); new WoundCharactersEffect(self, CardType.COMPANION, Filters.inSkirmish));
action.appendEffect(
new WoundCharactersEffect(self, CardType.COMPANION, Filters.inSkirmish));
return Collections.singletonList(action);
}
}
} }
return null; return null;
} }

View File

@@ -2,7 +2,9 @@ package com.gempukku.lotro.cards.set4.dunland;
import com.gempukku.lotro.cards.AbstractMinion; import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndAssignCharacterToMinionEffect; import com.gempukku.lotro.cards.effects.choose.ChooseAndAssignCharacterToMinionEffect;
import com.gempukku.lotro.cards.modifiers.AllyParticipatesInArcheryFireAndSkirmishesModifier;
import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Phase;
@@ -11,6 +13,7 @@ import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.ActivateCardAction; import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
import com.gempukku.lotro.logic.modifiers.Modifier; import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.StrengthModifier; import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Action;
@@ -53,7 +56,16 @@ public class Card4_015 extends AbstractMinion {
&& PlayConditions.canSpot(game, CardType.ALLY)) { && PlayConditions.canSpot(game, CardType.ALLY)) {
final ActivateCardAction action = new ActivateCardAction(self); final ActivateCardAction action = new ActivateCardAction(self);
action.appendEffect( action.appendEffect(
new ChooseAndAssignCharacterToMinionEffect(action, playerId, self, true, CardType.ALLY)); new ChooseActiveCardEffect(self, playerId, "Choose an Ally", CardType.ALLY) {
@Override
protected void cardSelected(LotroGame game, PhysicalCard card) {
action.appendEffect(
new AddUntilStartOfPhaseModifierEffect(
new AllyParticipatesInArcheryFireAndSkirmishesModifier(self, Filters.sameCard(card)), Phase.SKIRMISH));
action.appendEffect(
new ChooseAndAssignCharacterToMinionEffect(action, playerId, self, true, Filters.sameCard(card)));
}
});
return Collections.singletonList(action); return Collections.singletonList(action);
} }
return null; return null;

View File

@@ -2,14 +2,18 @@ package com.gempukku.lotro.cards.set4.dunland;
import com.gempukku.lotro.cards.AbstractMinion; import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndAssignCharacterToMinionEffect; import com.gempukku.lotro.cards.effects.choose.ChooseAndAssignCharacterToMinionEffect;
import com.gempukku.lotro.cards.modifiers.AllyParticipatesInArcheryFireAndSkirmishesModifier;
import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Race; import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.ActivateCardAction; import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Action;
import java.util.Collections; import java.util.Collections;
@@ -38,7 +42,16 @@ public class Card4_018 extends AbstractMinion {
&& PlayConditions.canSpot(game, CardType.ALLY)) { && PlayConditions.canSpot(game, CardType.ALLY)) {
final ActivateCardAction action = new ActivateCardAction(self); final ActivateCardAction action = new ActivateCardAction(self);
action.appendEffect( action.appendEffect(
new ChooseAndAssignCharacterToMinionEffect(action, playerId, self, true, CardType.ALLY)); new ChooseActiveCardEffect(self, playerId, "Choose an Ally", CardType.ALLY) {
@Override
protected void cardSelected(LotroGame game, PhysicalCard card) {
action.appendEffect(
new AddUntilStartOfPhaseModifierEffect(
new AllyParticipatesInArcheryFireAndSkirmishesModifier(self, Filters.sameCard(card)), Phase.SKIRMISH));
action.appendEffect(
new ChooseAndAssignCharacterToMinionEffect(action, playerId, self, true, Filters.sameCard(card)));
}
});
return Collections.singletonList(action); return Collections.singletonList(action);
} }
return null; return null;

View File

@@ -4,11 +4,11 @@ import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.modifiers.AllyParticipatesInArcheryFireModifier; import com.gempukku.lotro.cards.modifiers.AllyParticipatesInArcheryFireModifier;
import com.gempukku.lotro.cards.modifiers.CantTakeArcheryWoundsModifier;
import com.gempukku.lotro.common.*; import com.gempukku.lotro.common.*;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.ActivateCardAction; import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.modifiers.CantTakeWoundsModifier;
import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Action;
import java.util.Collections; import java.util.Collections;
@@ -38,7 +38,7 @@ public class Card4_146 extends AbstractPermanent {
new AllyParticipatesInArcheryFireModifier(self, CardType.ALLY))); new AllyParticipatesInArcheryFireModifier(self, CardType.ALLY)));
action.appendEffect( action.appendEffect(
new AddUntilEndOfPhaseModifierEffect( new AddUntilEndOfPhaseModifierEffect(
new CantTakeWoundsModifier(self, CardType.COMPANION))); new CantTakeArcheryWoundsModifier(self, CardType.COMPANION)));
return Collections.singletonList(action); return Collections.singletonList(action);
} }
return null; return null;

View File

@@ -10,6 +10,9 @@ import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.ActivateCardAction; import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
import com.gempukku.lotro.logic.decisions.IntegerAwaitingDecision;
import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect;
import com.gempukku.lotro.logic.modifiers.Modifier; import com.gempukku.lotro.logic.modifiers.Modifier;
import com.gempukku.lotro.logic.modifiers.StrengthModifier; import com.gempukku.lotro.logic.modifiers.StrengthModifier;
import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Action;
@@ -41,16 +44,24 @@ public class Card5_095 extends AbstractPermanent {
} }
@Override @Override
protected List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) { protected List<? extends Action> getExtraPhaseActions(final String playerId, final LotroGame game, final PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.MANEUVER, self, 0) if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.MANEUVER, self, 0)
&& PlayConditions.canSpot(game, 2, Culture.SAURON, Race.ORC)) { && PlayConditions.canSpot(game, 2, Culture.SAURON, Race.ORC)) {
ActivateCardAction action = new ActivateCardAction(self); final ActivateCardAction action = new ActivateCardAction(self);
action.appendEffect( action.appendEffect(
new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.SAURON, CardType.CONDITION)); new PlayoutDecisionEffect(playerId,
action.appendEffect( new IntegerAwaitingDecision(1, "How many SAURON conditions do you wish to play from your discard pile?", 0, 2) {
new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.SAURON, CardType.CONDITION)); @Override
action.appendEffect( public void decisionMade(String result) throws DecisionResultInvalidException {
new SelfDiscardEffect(self)); int count = getValidatedResult(result);
for (int i = 0; i < count; i++)
action.appendEffect(
new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.SAURON, CardType.CONDITION));
action.appendEffect(
new SelfDiscardEffect(self));
}
})
);
return Collections.singletonList(action); return Collections.singletonList(action);
} }
return null; return null;

View File

@@ -27,24 +27,27 @@ import java.util.List;
*/ */
public class Card5_096 extends AbstractEvent { public class Card5_096 extends AbstractEvent {
public Card5_096() { public Card5_096() {
super(Side.SHADOW, 0, Culture.SAURON, "Eye of Barad-Dur", Phase.SKIRMISH); super(Side.SHADOW, 0, Culture.SAURON, "Eye of Barad-Dur", Phase.FELLOWSHIP, Phase.MANEUVER, Phase.SKIRMISH, Phase.REGROUP);
} }
@Override @Override
public PlayEventAction getPlayCardAction(String playerId, LotroGame game, final PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) { public PlayEventAction getPlayCardAction(String playerId, LotroGame game, final PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) {
final PlayEventAction action = new PlayEventAction(self); if (game.getGameState().getCurrentPhase() == Phase.SKIRMISH) {
action.appendEffect( final PlayEventAction action = new PlayEventAction(self);
new ChooseActiveCardEffect(self, playerId, "Choose companion or ally", action.appendEffect(
Filters.or(CardType.COMPANION, CardType.ALLY), Filters.inSkirmishAgainst(Culture.SAURON, Race.ORC)) { new ChooseActiveCardEffect(self, playerId, "Choose companion or ally",
@Override Filters.or(CardType.COMPANION, CardType.ALLY), Filters.inSkirmishAgainst(Culture.SAURON, Race.ORC)) {
protected void cardSelected(LotroGame game, PhysicalCard card) { @Override
int ringBoundCompanions = Filters.countActive(game.getGameState(), game.getModifiersQuerying(), CardType.COMPANION, Keyword.RING_BOUND); protected void cardSelected(LotroGame game, PhysicalCard card) {
action.insertEffect( int ringBoundCompanions = Filters.countActive(game.getGameState(), game.getModifiersQuerying(), CardType.COMPANION, Keyword.RING_BOUND);
new AddUntilEndOfPhaseModifierEffect( action.insertEffect(
new StrengthModifier(self, Filters.sameCard(card), -ringBoundCompanions))); new AddUntilEndOfPhaseModifierEffect(
} new StrengthModifier(self, Filters.sameCard(card), -ringBoundCompanions)));
}); }
return action; });
return action;
}
return null;
} }
@Override @Override

View File

@@ -37,6 +37,7 @@ public class Card7_022 extends AbstractPermanent {
@Override @Override
public List<? extends ActivateCardAction> getOptionalInPlayAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { public List<? extends ActivateCardAction> getOptionalInPlayAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (TriggerConditions.played(game, effectResult, Culture.ELVEN, CardType.EVENT, Keyword.SKIRMISH) if (TriggerConditions.played(game, effectResult, Culture.ELVEN, CardType.EVENT, Keyword.SKIRMISH)
&& game.getGameState().getCurrentPhase() == Phase.SKIRMISH
&& PlayConditions.canSelfDiscard(self, game)) { && PlayConditions.canSelfDiscard(self, game)) {
ActivateCardAction action = new ActivateCardAction(self); ActivateCardAction action = new ActivateCardAction(self);
action.appendCost( action.appendCost(

View File

@@ -46,7 +46,7 @@ public class Card7_033 extends AbstractEvent {
@Override @Override
protected void cardSelected(LotroGame game, PhysicalCard card) { protected void cardSelected(LotroGame game, PhysicalCard card) {
action.appendEffect( action.appendEffect(
new HealCharactersEffect(self, card.getBlueprint().getCulture())); new HealCharactersEffect(self, card.getBlueprint().getCulture(), CardType.COMPANION));
} }
}); });
return action; return action;

View File

@@ -4,6 +4,7 @@ import com.gempukku.lotro.cards.AbstractEvent;
import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.actions.PlayEventAction; import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect; import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Side; import com.gempukku.lotro.common.Side;
@@ -46,7 +47,7 @@ public class Card7_043 extends AbstractEvent {
@Override @Override
protected void cardSelected(LotroGame game, PhysicalCard card) { protected void cardSelected(LotroGame game, PhysicalCard card) {
game.getModifiersEnvironment().addUntilStartOfPhaseModifier( game.getModifiersEnvironment().addUntilStartOfPhaseModifier(
new StrengthModifier(self, card.getBlueprint().getCulture(), 3), Phase.REGROUP); new StrengthModifier(self, Filters.and(card.getBlueprint().getCulture(), Filters.unboundCompanion), 3), Phase.REGROUP);
} }
}); });
return action; return action;

View File

@@ -11,6 +11,8 @@ import com.gempukku.lotro.common.*;
import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.decisions.MultipleChoiceAwaitingDecision;
import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect;
import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.Effect;
import java.util.LinkedList; import java.util.LinkedList;
@@ -33,29 +35,43 @@ public class Card7_262 extends AbstractEvent {
@Override @Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int withTwilightRemoved, int twilightModifier, boolean ignoreRoamingPenalty, boolean ignoreCheckingDeadPile) { 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) return super.checkPlayRequirements(playerId, game, self, withTwilightRemoved, twilightModifier, ignoreRoamingPenalty, ignoreCheckingDeadPile)
&& PlayConditions.canPlayFromDiscard(playerId, game, Culture.SAURON, Race.ORC) && (PlayConditions.canPlayFromDiscard(playerId, game, Culture.SAURON, Race.ORC)
&& (PlayConditions.canRemoveBurdens(game, self, 1) && PlayConditions.canRemoveBurdens(game, self, 1))
|| PlayConditions.canPlayFromStacked(playerId, game, Filters.siteControlled(playerId), Keyword.BESIEGER)); || PlayConditions.canPlayFromStacked(playerId, game, Filters.siteControlled(playerId), Keyword.BESIEGER);
} }
@Override @Override
public PlayEventAction getPlayCardAction(final String playerId, LotroGame game, final PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) { public PlayEventAction getPlayCardAction(final String playerId, final LotroGame game, final PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) {
final PlayEventAction action = new PlayEventAction(self); final PlayEventAction action = new PlayEventAction(self);
List<Effect> possibleCosts = new LinkedList<Effect>(); if (PlayConditions.canPlayFromStacked(playerId, game, Filters.siteControlled(playerId), Keyword.BESIEGER)
possibleCosts.add( && PlayConditions.canRemoveBurdens(game, self, 1)
new ChooseAndPlayCardFromStackedEffect(playerId, Filters.siteControlled(playerId), Keyword.BESIEGER) { && PlayConditions.canPlayFromDiscard(playerId, game, Culture.SAURON, Race.ORC)) {
@Override action.appendEffect(
public String getText(LotroGame game) { new PlayoutDecisionEffect(playerId,
return "Play a besieger stacked on a site you control"; new MultipleChoiceAwaitingDecision(1, "Which would you like to do?", new String[]{"Play a besieger stacked on a site you control", "Remove a burden to play a SAURON Orc from Discard"}) {
@Override
protected void validDecisionMade(int index, String result) {
if (result.equals("Play a besieger stacked on a site you control")) {
action.appendEffect(
new ChooseAndPlayCardFromStackedEffect(playerId, Filters.siteControlled(playerId), Keyword.BESIEGER));
} else {
action.appendCost(
new RemoveBurdenEffect(playerId, self));
action.appendEffect(
new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.SAURON, Race.ORC));
} }
}); }
possibleCosts.add( }));
new RemoveBurdenEffect(playerId, self)); } else if (PlayConditions.canPlayFromStacked(playerId, game, Filters.siteControlled(playerId), Keyword.BESIEGER)) {
action.appendCost( action.appendEffect(
new ChoiceEffect(action, playerId, possibleCosts)); new ChooseAndPlayCardFromStackedEffect(playerId, Filters.siteControlled(playerId), Keyword.BESIEGER));
} else if (PlayConditions.canRemoveBurdens(game, self, 1)
action.appendEffect( && PlayConditions.canPlayFromDiscard(playerId, game, Culture.SAURON, Race.ORC)) {
new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.SAURON, Race.ORC)); action.appendCost(
new RemoveBurdenEffect(playerId, self));
action.appendEffect(
new ChooseAndPlayCardFromDiscardEffect(playerId, game, Culture.SAURON, Race.ORC));
}
return action; return action;
} }
} }

View File

@@ -11,6 +11,7 @@ import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.timing.EffectResult; import com.gempukku.lotro.logic.timing.EffectResult;
import com.gempukku.lotro.logic.timing.results.SkirmishAboutToEndResult;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@@ -32,12 +33,17 @@ public class Card7_182 extends AbstractResponseEvent {
@Override @Override
public List<PlayEventAction> getOptionalAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { public List<PlayEventAction> getOptionalAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) {
if (effectResult.getType() == EffectResult.Type.SKIRMISH_ABOUT_TO_END if (effectResult.getType() == EffectResult.Type.SKIRMISH_ABOUT_TO_END
&& checkPlayRequirements(playerId, game, self, 0, 0, false, false) && checkPlayRequirements(playerId, game, self, 0, 0, false, false)) {
&& Filters.filter(game.getGameState().getSkirmish().getShadowCharacters(), game.getGameState(), game.getModifiersQuerying(), Race.NAZGUL).size() > 0) { SkirmishAboutToEndResult checkSkirmish = (SkirmishAboutToEndResult) effectResult;
PlayEventAction action = new PlayEventAction(self); for (PhysicalCard minion: checkSkirmish.getMinionsInvolved()) {
action.appendEffect( if (minion.getBlueprint().getRace() == Race.NAZGUL) {
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, CardType.POSSESSION, Filters.attachedTo(CardType.COMPANION, Filters.inSkirmish))); PlayEventAction action = new PlayEventAction(self);
return Collections.singletonList(action); action.appendEffect(
new ChooseAndDiscardCardsFromPlayEffect(action, playerId, 1, 1, CardType.POSSESSION, Filters.attachedTo(
CardType.COMPANION, Filters.inSkirmish)));
return Collections.singletonList(action);
}
}
} }
return null; return null;
} }

View File

@@ -43,7 +43,9 @@ public class Card8_054 extends AbstractMinion {
&& PlayConditions.canRemoveAnyCultureTokens(game, 2, Filters.any)) { && PlayConditions.canRemoveAnyCultureTokens(game, 2, Filters.any)) {
final OptionalTriggerAction action = new OptionalTriggerAction(self); final OptionalTriggerAction action = new OptionalTriggerAction(self);
action.appendCost( action.appendCost(
new ChooseAndRemoveCultureTokensFromCardEffect(self, playerId, null, 2, Filters.any)); new ChooseAndRemoveCultureTokensFromCardEffect(self, playerId, null, 1, Filters.any));
action.appendCost(
new ChooseAndRemoveCultureTokensFromCardEffect(self, playerId, null, 1, Filters.any));
action.appendEffect( action.appendEffect(
new ChooseActiveCardEffect(self, playerId, "Choose a card to add tokens to", Filters.hasToken(Token.RAIDER)) { new ChooseActiveCardEffect(self, playerId, "Choose a card to add tokens to", Filters.hasToken(Token.RAIDER)) {
@Override @Override

View File

@@ -50,8 +50,6 @@ public class Card8_087 extends AbstractCompanion {
new PlayAnyNumberOfCardsFromDeckEffect(action, playerId, rohanPossessions)); new PlayAnyNumberOfCardsFromDeckEffect(action, playerId, rohanPossessions));
} }
}); });
action.appendEffect(
new ShuffleDeckEffect(playerId));
return Collections.singletonList(action); return Collections.singletonList(action);
} }
return null; return null;

View File

@@ -12,6 +12,9 @@ import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.ActivateCardAction; import com.gempukku.lotro.logic.actions.ActivateCardAction;
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
import com.gempukku.lotro.logic.decisions.IntegerAwaitingDecision;
import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect;
import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Action;
import java.util.LinkedList; import java.util.LinkedList;
@@ -35,12 +38,12 @@ public class Card8_077 extends AbstractMinion {
} }
@Override @Override
protected List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) { protected List<? extends Action> getExtraPhaseActions(final String playerId, final LotroGame game, PhysicalCard self) {
if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)) { if (PlayConditions.canUseShadowCardDuringPhase(game, Phase.SHADOW, self, 0)) {
List<ActivateCardAction> actions = new LinkedList<ActivateCardAction>(); List<ActivateCardAction> actions = new LinkedList<ActivateCardAction>();
if (PlayConditions.canSelfDiscard(self, game) if (PlayConditions.canSelfDiscard(self, game)
&& PlayConditions.canPlayFromDiscard(playerId, game, Culture.WRAITH, CardType.MINION)) { && PlayConditions.canPlayFromDiscard(playerId, game, Culture.WRAITH, CardType.MINION)) {
ActivateCardAction action = new ActivateCardAction(self); final ActivateCardAction action = new ActivateCardAction(self);
action.setText("Play from discard"); action.setText("Play from discard");
action.appendCost( action.appendCost(
new SelfDiscardEffect(self)); new SelfDiscardEffect(self));
@@ -50,14 +53,23 @@ public class Card8_077 extends AbstractMinion {
} }
if (PlayConditions.canSelfDiscard(self, game) if (PlayConditions.canSelfDiscard(self, game)
&& PlayConditions.canSpot(game, 6, CardType.COMPANION)) { && PlayConditions.canSpot(game, 6, CardType.COMPANION)) {
ActivateCardAction action = new ActivateCardAction(self); final ActivateCardAction action = new ActivateCardAction(self);
action.setText("Play from deck"); action.setText("Play from deck");
action.appendCost( action.appendCost(
new SelfDiscardEffect(self)); new SelfDiscardEffect(self));
action.appendEffect( action.appendEffect(
new ChooseAndPlayCardFromDeckEffect(playerId, -1, Culture.WRAITH, CardType.MINION)); new PlayoutDecisionEffect(playerId,
action.appendEffect( new IntegerAwaitingDecision(1, "How many WRAITH minions do you wish to play from your draw deck?", 0, 2) {
new ChooseAndPlayCardFromDeckEffect(playerId, -1, Culture.WRAITH, CardType.MINION)); @Override
public void decisionMade(String result) throws DecisionResultInvalidException {
int count = getValidatedResult(result);
for (int i = 0; i < count; i++)
action.appendEffect(
new ChooseAndPlayCardFromDeckEffect(playerId, -1, Culture.WRAITH, CardType.MINION));
}
})
);
actions.add(action); actions.add(action);
} }
return actions; return actions;

View File

@@ -45,12 +45,12 @@ public class SkirmishPhaseAction extends SystemQueueAction {
protected void doPlayEffect(LotroGame game) { protected void doPlayEffect(LotroGame game) {
if (!game.getGameState().getSkirmish().isCancelled()) { if (!game.getGameState().getSkirmish().isCancelled()) {
insertEffect( insertEffect(
new ResolveSkirmishEffect(), new ResolveSkirmishEffect());
new TriggeringResultEffect(new SkirmishAboutToEndResult(), "Skirmish about to end"));
} }
} }
}); });
appendEffect(
new TriggeringResultEffect(null, new SkirmishAboutToEndResult(shadowCharacters), "Skirmish about to end"));
appendEffect( appendEffect(
new TriggeringResultEffect(null, new EndOfPhaseResult(Phase.SKIRMISH), "End of skirmish phase")); new TriggeringResultEffect(null, new EndOfPhaseResult(Phase.SKIRMISH), "End of skirmish phase"));
appendEffect( appendEffect(

View File

@@ -1,9 +1,22 @@
package com.gempukku.lotro.logic.timing.results; package com.gempukku.lotro.logic.timing.results;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.timing.EffectResult; import com.gempukku.lotro.logic.timing.EffectResult;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public class SkirmishAboutToEndResult extends EffectResult { public class SkirmishAboutToEndResult extends EffectResult {
public SkirmishAboutToEndResult() { private Set<PhysicalCard> _minionsInvolved;
super(Type.SKIRMISH_ABOUT_TO_END);
public SkirmishAboutToEndResult(Set<PhysicalCard> minionsInvolved) {
super(EffectResult.Type.SKIRMISH_ABOUT_TO_END);
_minionsInvolved = minionsInvolved;
}
public Set<PhysicalCard> getMinionsInvolved() {
return _minionsInvolved;
} }
} }