From c5fca345b8bd7c8dd293eee3e05ce1aee2c61d11 Mon Sep 17 00:00:00 2001 From: marcins78 Date: Wed, 13 Feb 2013 14:36:14 +0000 Subject: [PATCH] "Cair Andros" --- .../cards/actions/AttachPermanentAction.java | 18 ++++---- .../lotro/cards/actions/PlayEventAction.java | 10 +++-- .../cards/actions/PlayPermanentAction.java | 20 +++++---- .../lotro/cards/effects/DiscountEffect.java | 3 ++ .../lotro/cards/effects/PlayEventEffect.java | 6 +-- .../DiscardCardFromHandDiscountEffect.java | 6 +++ .../ExertCharactersDiscountEffect.java | 4 ++ .../OptionalDiscardDiscountEffect.java | 6 +++ .../RemoveCardsFromDiscardDiscountEffect.java | 6 +++ .../RemoveThreatsToDiscountEffect.java | 6 +++ .../effects/discount/ToilDiscountEffect.java | 6 +++ .../lotro/cards/results/PlayEventResult.java | 4 +- .../cards/set13/men/DiscountChoiceEffect.java | 6 +++ .../lotro/cards/set20/site/Card20_458.java | 43 +++++++++++++++++++ .../actions/AbstractCostToEffectAction.java | 9 ++++ .../lotro/logic/effects/PlayCardEffect.java | 9 ++-- .../lotro/logic/effects/PlaySiteEffect.java | 2 +- .../logic/timing/results/PlayCardResult.java | 8 +++- 18 files changed, 143 insertions(+), 29 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/site/Card20_458.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/AttachPermanentAction.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/AttachPermanentAction.java index a3c1d6ad5..95d1d8d80 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/AttachPermanentAction.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/AttachPermanentAction.java @@ -34,19 +34,19 @@ public class AttachPermanentAction extends AbstractCostToEffectAction implements private boolean _exertTarget; - private PhysicalCard _target; - private boolean _discountResolved; private DiscountEffect _discountEffect; private boolean _discountApplied; private int _twilightModifier; + private Zone _playedFrom; + private PhysicalCard _target; public AttachPermanentAction(final LotroGame game, final PhysicalCard card, Filter filter, final Map attachCostModifiers, final int twilightModifier) { _cardToAttach = card; - final Zone playedFromZone = card.getZone(); + _playedFrom = card.getZone(); _chooseTargetEffect = new ChooseActiveCardEffect(null, card.getOwner(), "Attach " + GameUtils.getFullName(card) + ". Choose target to attach to", filter) { @@ -65,9 +65,7 @@ public class AttachPermanentAction extends AbstractCostToEffectAction implements _twilightModifier = modifier; - game.getGameState().sendMessage(card.getOwner() + " plays " + GameUtils.getCardLink(card) + " from " + playedFromZone.getHumanReadable() + " on " + GameUtils.getCardLink(target)); - - _playCardEffect = new PlayCardEffect(playedFromZone, card, target, null); + game.getGameState().sendMessage(card.getOwner() + " plays " + GameUtils.getCardLink(card) + " from " + _playedFrom.getHumanReadable() + " on " + GameUtils.getCardLink(target)); } }; } @@ -147,12 +145,14 @@ public class AttachPermanentAction extends AbstractCostToEffectAction implements if (!_discountApplied) { _discountApplied = true; - if (_discountEffect != null) + if (_discountEffect != null) { _twilightModifier -= _discountEffect.getDiscountPaidFor(); + _discountEffect.afterDiscountCallback(this); + } insertCost(new PayPlayOnTwilightCostEffect(_cardToAttach, _target, _twilightModifier)); } - if (_playCardEffect != null) { + if (_target != null) { if (!isCostFailed()) { Effect cost = getNextCost(); if (cost != null) @@ -160,6 +160,8 @@ public class AttachPermanentAction extends AbstractCostToEffectAction implements if (!_cardPlayed) { _cardPlayed = true; + _playCardEffect = new PlayCardEffect(_playedFrom, _cardToAttach, _target, null, isPaidToil()); + return _playCardEffect; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayEventAction.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayEventAction.java index f57b0cd7e..29f294a4e 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayEventAction.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayEventAction.java @@ -33,6 +33,7 @@ public class PlayEventAction extends AbstractCostToEffectAction implements Disco private DiscountEffect _discountEffect; private boolean _discountApplied; + private Zone _playedFrom; public PlayEventAction(PhysicalCard card) { this(card, false); @@ -42,7 +43,7 @@ public class PlayEventAction extends AbstractCostToEffectAction implements Disco _eventPlayed = card; _requiresRanger = requiresRanger; - _playCardEffect = new PlayEventEffect(this, card.getZone(), card, requiresRanger); + _playedFrom = card.getZone(); _text = "Play " + GameUtils.getFullName(_eventPlayed); } @@ -132,8 +133,10 @@ public class PlayEventAction extends AbstractCostToEffectAction implements Disco if (!_discountApplied) { _discountApplied = true; int twilightModifier = 0; - if (_discountEffect != null) + if (_discountEffect != null) { twilightModifier -= _discountEffect.getDiscountPaidFor(); + _discountEffect.afterDiscountCallback(this); + } insertCost(new PayTwilightCostEffect(_eventPlayed, twilightModifier)); } @@ -144,10 +147,11 @@ public class PlayEventAction extends AbstractCostToEffectAction implements Disco if (!_cardPlayed) { _cardPlayed = true; + _playCardEffect = new PlayEventEffect(this, _playedFrom, _eventPlayed, _requiresRanger, isPaidToil()); return _playCardEffect; } - if (!_playCardEffect.getPlayEventResult().isEventCancelled()) { + if (_playCardEffect != null && !_playCardEffect.getPlayEventResult().isEventCancelled()) { Effect effect = getNextEffect(); if (effect != null) return effect; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayPermanentAction.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayPermanentAction.java index 402ed5aae..bb9517b1e 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayPermanentAction.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/actions/PlayPermanentAction.java @@ -17,7 +17,6 @@ import java.util.Collections; public class PlayPermanentAction extends AbstractCostToEffectAction implements DiscountableAction { private PhysicalCard _permanentPlayed; - private Zone _zone; private int _twilightModifier; private boolean _ignoreRoamingPenalty; @@ -34,21 +33,23 @@ public class PlayPermanentAction extends AbstractCostToEffectAction implements D private boolean _discountApplied; private boolean _skipShuffling; + private Zone _fromZone; + private Zone _toZone; + private PhysicalCard _playedFromCard; public PlayPermanentAction(PhysicalCard card, Zone zone, int twilightModifier, boolean ignoreRoamingPenalty) { _permanentPlayed = card; setPerformingPlayer(card.getOwner()); - _zone = zone; _twilightModifier = twilightModifier; _ignoreRoamingPenalty = ignoreRoamingPenalty; - PhysicalCard playedFromCard = null; if (card.getZone() == Zone.STACKED) - playedFromCard = card.getStackedOn(); + _playedFromCard = card.getStackedOn(); else if (card.getZone() == Zone.ATTACHED) - playedFromCard = card.getAttachedTo(); + _playedFromCard = card.getAttachedTo(); - _playCardEffect = new PlayCardEffect(card.getZone(), card, zone, playedFromCard); + _fromZone = card.getZone(); + _toZone = zone; } public void skipShufflingDeck() { @@ -118,8 +119,10 @@ public class PlayPermanentAction extends AbstractCostToEffectAction implements D if (!_discountApplied) { _discountApplied = true; - if (_discountEffect != null) + if (_discountEffect != null) { _twilightModifier -= _discountEffect.getDiscountPaidFor(); + _discountEffect.afterDiscountCallback(this); + } insertCost(new PayTwilightCostEffect(_permanentPlayed, _twilightModifier, _ignoreRoamingPenalty)); } @@ -130,6 +133,7 @@ public class PlayPermanentAction extends AbstractCostToEffectAction implements D if (!_cardPlayed) { _cardPlayed = true; + _playCardEffect = new PlayCardEffect(_fromZone, _permanentPlayed, _toZone, _playedFromCard, isPaidToil()); return _playCardEffect; } @@ -148,6 +152,6 @@ public class PlayPermanentAction extends AbstractCostToEffectAction implements D } public boolean wasCarriedOut() { - return _cardPlayed && _playCardEffect.wasCarriedOut(); + return _cardPlayed && _playCardEffect != null && _playCardEffect.wasCarriedOut(); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscountEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscountEffect.java index 54824ed9f..317cc0f03 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscountEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/DiscountEffect.java @@ -1,9 +1,12 @@ package com.gempukku.lotro.cards.effects; +import com.gempukku.lotro.logic.actions.AbstractCostToEffectAction; import com.gempukku.lotro.logic.timing.Effect; public interface DiscountEffect extends Effect { public void setMinimalRequiredDiscount(int minimalDiscount); public int getDiscountPaidFor(); + + public void afterDiscountCallback(AbstractCostToEffectAction action); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PlayEventEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PlayEventEffect.java index e3d45a829..73c34957a 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PlayEventEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/PlayEventEffect.java @@ -11,10 +11,10 @@ public class PlayEventEffect extends PlayCardEffect { private PhysicalCard _cardPlayed; private PlayEventResult _playEventResult; - public PlayEventEffect(PlayEventAction action, Zone playedFrom, PhysicalCard cardPlayed, boolean requiresRanger) { - super(playedFrom, cardPlayed, (Zone) null, null); + public PlayEventEffect(PlayEventAction action, Zone playedFrom, PhysicalCard cardPlayed, boolean requiresRanger, boolean paidToil) { + super(playedFrom, cardPlayed, (Zone) null, null, paidToil); _cardPlayed = cardPlayed; - _playEventResult = new PlayEventResult(action, playedFrom, getPlayedCard(), requiresRanger); + _playEventResult = new PlayEventResult(action, playedFrom, getPlayedCard(), requiresRanger, paidToil); } public PlayEventResult getPlayEventResult() { diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/DiscardCardFromHandDiscountEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/DiscardCardFromHandDiscountEffect.java index c4036ac4c..7930d8fcf 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/DiscardCardFromHandDiscountEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/DiscardCardFromHandDiscountEffect.java @@ -5,6 +5,7 @@ import com.gempukku.lotro.common.Filterable; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.actions.AbstractCostToEffectAction; import com.gempukku.lotro.logic.actions.SubAction; import com.gempukku.lotro.logic.effects.ChooseAndDiscardCardsFromHandEffect; import com.gempukku.lotro.logic.timing.AbstractSubActionEffect; @@ -64,4 +65,9 @@ public class DiscardCardFromHandDiscountEffect extends AbstractSubActionEffect i processSubAction(game, subAction); } } + + @Override + public void afterDiscountCallback(AbstractCostToEffectAction action) { + } + } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/ExertCharactersDiscountEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/ExertCharactersDiscountEffect.java index 5c24be4d9..b2380227c 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/ExertCharactersDiscountEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/ExertCharactersDiscountEffect.java @@ -6,6 +6,7 @@ import com.gempukku.lotro.common.Filterable; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.actions.AbstractCostToEffectAction; import com.gempukku.lotro.logic.actions.SubAction; import com.gempukku.lotro.logic.timing.AbstractSubActionEffect; import com.gempukku.lotro.logic.timing.Action; @@ -75,4 +76,7 @@ public class ExertCharactersDiscountEffect extends AbstractSubActionEffect imple return _exertedCount * _multiplier; } + @Override + public void afterDiscountCallback(AbstractCostToEffectAction action) { + } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/OptionalDiscardDiscountEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/OptionalDiscardDiscountEffect.java index 94cebf29a..5f97cb0d0 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/OptionalDiscardDiscountEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/OptionalDiscardDiscountEffect.java @@ -7,6 +7,7 @@ import com.gempukku.lotro.cards.effects.choose.ChooseAndDiscardCardsFromPlayEffe import com.gempukku.lotro.common.Filterable; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.actions.AbstractCostToEffectAction; import com.gempukku.lotro.logic.actions.SubAction; import com.gempukku.lotro.logic.timing.AbstractSubActionEffect; import com.gempukku.lotro.logic.timing.Action; @@ -79,4 +80,9 @@ public class OptionalDiscardDiscountEffect extends AbstractSubActionEffect imple protected void discountPaidCallback() { } + + @Override + public void afterDiscountCallback(AbstractCostToEffectAction action) { + } + } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/RemoveCardsFromDiscardDiscountEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/RemoveCardsFromDiscardDiscountEffect.java index a1ba36b3a..6989db059 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/RemoveCardsFromDiscardDiscountEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/RemoveCardsFromDiscardDiscountEffect.java @@ -7,6 +7,7 @@ import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; 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.decisions.ArbitraryCardsSelectionDecision; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; import com.gempukku.lotro.logic.decisions.YesNoDecision; @@ -103,4 +104,9 @@ public class RemoveCardsFromDiscardDiscountEffect implements DiscountEffect { public boolean wasCarriedOut() { return !_required || _paid; } + + @Override + public void afterDiscountCallback(AbstractCostToEffectAction action) { + } + } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/RemoveThreatsToDiscountEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/RemoveThreatsToDiscountEffect.java index 44f7e3dd0..cc5b2068c 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/RemoveThreatsToDiscountEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/RemoveThreatsToDiscountEffect.java @@ -2,6 +2,7 @@ package com.gempukku.lotro.cards.effects.discount; import com.gempukku.lotro.cards.effects.DiscountEffect; import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.actions.AbstractCostToEffectAction; import com.gempukku.lotro.logic.actions.SubAction; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; import com.gempukku.lotro.logic.decisions.IntegerAwaitingDecision; @@ -73,4 +74,9 @@ public class RemoveThreatsToDiscountEffect extends AbstractSubActionEffect imple public int getDiscountPaidFor() { return _threatsRemoved; } + + @Override + public void afterDiscountCallback(AbstractCostToEffectAction action) { + } + } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/ToilDiscountEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/ToilDiscountEffect.java index de62fa00d..7da6a759c 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/ToilDiscountEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/discount/ToilDiscountEffect.java @@ -6,6 +6,7 @@ import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.actions.AbstractCostToEffectAction; import com.gempukku.lotro.logic.actions.SubAction; import com.gempukku.lotro.logic.timing.AbstractSubActionEffect; import com.gempukku.lotro.logic.timing.Action; @@ -84,4 +85,9 @@ public class ToilDiscountEffect extends AbstractSubActionEffect implements Disco return (_exertedCount + _paidToil) * _toilCount; } + @Override + public void afterDiscountCallback(AbstractCostToEffectAction action) { + if (_exertedCount>0) + action.setPaidToil(true); + } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/results/PlayEventResult.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/results/PlayEventResult.java index ed4e72d6d..24da8182b 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/results/PlayEventResult.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/results/PlayEventResult.java @@ -10,8 +10,8 @@ public class PlayEventResult extends PlayCardResult { private PlayEventAction _action; private boolean _requiresRanger; - public PlayEventResult(PlayEventAction action, Zone playedFrom, PhysicalCard playedCard, boolean requiresRanger) { - super(playedFrom, playedCard, null, null); + public PlayEventResult(PlayEventAction action, Zone playedFrom, PhysicalCard playedCard, boolean requiresRanger, boolean paidToil) { + super(playedFrom, playedCard, null, null, paidToil); _action = action; _requiresRanger = requiresRanger; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/men/DiscountChoiceEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/men/DiscountChoiceEffect.java index 8fe0d6fc9..9d23efb4f 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/men/DiscountChoiceEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/men/DiscountChoiceEffect.java @@ -2,6 +2,7 @@ package com.gempukku.lotro.cards.set13.men; import com.gempukku.lotro.cards.effects.DiscountEffect; import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.actions.AbstractCostToEffectAction; import com.gempukku.lotro.logic.decisions.YesNoDecision; import com.gempukku.lotro.logic.timing.AbstractSuccessfulEffect; @@ -51,4 +52,9 @@ public class DiscountChoiceEffect extends AbstractSuccessfulEffect implements Di }); } } + + @Override + public void afterDiscountCallback(AbstractCostToEffectAction action) { + } + } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/site/Card20_458.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/site/Card20_458.java new file mode 100644 index 000000000..f6ec0fd7c --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set20/site/Card20_458.java @@ -0,0 +1,43 @@ +package com.gempukku.lotro.cards.set20.site; + +import com.gempukku.lotro.cards.AbstractSite; +import com.gempukku.lotro.cards.TriggerConditions; +import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect; +import com.gempukku.lotro.common.Block; +import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.Keyword; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.actions.RequiredTriggerAction; +import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.results.PlayCardResult; + +import java.util.Collections; +import java.util.List; + +/** + * Cair Andros + * 8 8 + * River. + * Each time you play an Easterling using toil, the Free Peoples player must exert a companion. + */ +public class Card20_458 extends AbstractSite { + public Card20_458() { + super("Cair Andros", Block.SECOND_ED, 8, 8, null); + addKeyword(Keyword.RIVER); + } + + @Override + public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { + if (TriggerConditions.played(game, effectResult, Keyword.EASTERLING)) { + PlayCardResult playResult = (PlayCardResult) effectResult; + if (playResult.isPaidToil()) { + RequiredTriggerAction action = new RequiredTriggerAction(self); + action.appendEffect( + new ChooseAndExertCharactersEffect(action, game.getGameState().getCurrentPlayerId(), 1, 1, CardType.COMPANION)); + return Collections.singletonList(action); + } + } + return null; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/actions/AbstractCostToEffectAction.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/actions/AbstractCostToEffectAction.java index 02198e4f1..095d61f14 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/actions/AbstractCostToEffectAction.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/actions/AbstractCostToEffectAction.java @@ -16,6 +16,15 @@ public abstract class AbstractCostToEffectAction implements CostToEffectAction { private String _performingPlayer; private boolean _virtualCardAction = false; + private boolean _paidToil = false; + + public boolean isPaidToil() { + return _paidToil; + } + + public void setPaidToil(boolean paidToil) { + _paidToil = paidToil; + } @Override public void setVirtualCardAction(boolean virtualCardAction) { diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/PlayCardEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/PlayCardEffect.java index fe6fc362e..24d8306ce 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/PlayCardEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/PlayCardEffect.java @@ -16,19 +16,22 @@ public class PlayCardEffect extends AbstractEffect { private PhysicalCard _attachedToCard; private Zone _zone; private PhysicalCard _attachedOrStackedPlayedFrom; + private boolean _paidToil; - public PlayCardEffect(Zone playedFrom, PhysicalCard cardPlayed, Zone playedTo, PhysicalCard attachedOrStackedPlayedFrom) { + public PlayCardEffect(Zone playedFrom, PhysicalCard cardPlayed, Zone playedTo, PhysicalCard attachedOrStackedPlayedFrom, boolean paidToil) { _playedFrom = playedFrom; _cardPlayed = cardPlayed; _zone = playedTo; _attachedOrStackedPlayedFrom = attachedOrStackedPlayedFrom; + _paidToil = paidToil; } - public PlayCardEffect(Zone playedFrom, PhysicalCard cardPlayed, PhysicalCard attachedToCard, PhysicalCard attachedOrStackedPlayedFrom) { + public PlayCardEffect(Zone playedFrom, PhysicalCard cardPlayed, PhysicalCard attachedToCard, PhysicalCard attachedOrStackedPlayedFrom, boolean paidToil) { _playedFrom = playedFrom; _cardPlayed = cardPlayed; _attachedToCard = attachedToCard; _attachedOrStackedPlayedFrom = attachedOrStackedPlayedFrom; + _paidToil = paidToil; _zone = Zone.ATTACHED; } @@ -64,7 +67,7 @@ public class PlayCardEffect extends AbstractEffect { game.getGameState().addCardToZone(game, _cardPlayed, _zone); } - game.getActionsEnvironment().emitEffectResult(new PlayCardResult(_playedFrom, _cardPlayed, _attachedToCard, _attachedOrStackedPlayedFrom)); + game.getActionsEnvironment().emitEffectResult(new PlayCardResult(_playedFrom, _cardPlayed, _attachedToCard, _attachedOrStackedPlayedFrom, _paidToil)); return new FullEffectResult(true); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/PlaySiteEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/PlaySiteEffect.java index 258f710d8..8ce4c913d 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/PlaySiteEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/PlaySiteEffect.java @@ -140,7 +140,7 @@ public class PlaySiteEffect extends AbstractEffect { } sitePlayedCallback(newSite); - game.getActionsEnvironment().emitEffectResult(new PlayCardResult(Zone.ADVENTURE_DECK, newSite, null, null)); + game.getActionsEnvironment().emitEffectResult(new PlayCardResult(Zone.ADVENTURE_DECK, newSite, null, null, false)); } }); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/PlayCardResult.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/PlayCardResult.java index fefdf7e6c..6243a469e 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/PlayCardResult.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/PlayCardResult.java @@ -9,13 +9,19 @@ public class PlayCardResult extends EffectResult { private PhysicalCard _playedCard; private PhysicalCard _attachedTo; private PhysicalCard _attachedOrStackedPlayedFrom; + private boolean _paidToil; - public PlayCardResult(Zone playedFrom, PhysicalCard playedCard, PhysicalCard attachedTo, PhysicalCard attachedOrStackedPlayedFrom) { + public PlayCardResult(Zone playedFrom, PhysicalCard playedCard, PhysicalCard attachedTo, PhysicalCard attachedOrStackedPlayedFrom, boolean paidToil) { super(EffectResult.Type.PLAY); _playedFrom = playedFrom; _playedCard = playedCard; _attachedTo = attachedTo; _attachedOrStackedPlayedFrom = attachedOrStackedPlayedFrom; + _paidToil = paidToil; + } + + public boolean isPaidToil() { + return _paidToil; } public PhysicalCard getPlayedCard() {