From 5d1100f1ab71873fbb408d699dc3a5eab16f94ba Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Thu, 29 Dec 2011 06:29:25 +0000 Subject: [PATCH] "Alatar" --- .../lotro/cards/TriggerConditions.java | 10 +++ .../effects/TransferPermanentEffect.java | 5 ++ .../lotro/cards/set13/gandalf/Card13_028.java | 64 +++++++++++++++++++ .../lotro/logic/timing/EffectResult.java | 2 +- .../timing/results/CardTransferredResult.java | 29 +++++++++ 5 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/gandalf/Card13_028.java create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/CardTransferredResult.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/TriggerConditions.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/TriggerConditions.java index aaafb9d64..30ebfb168 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/TriggerConditions.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/TriggerConditions.java @@ -284,4 +284,14 @@ public class TriggerConditions { public static boolean moves(LotroGame game, EffectResult effectResult) { return effectResult.getType() == EffectResult.Type.WHEN_FELLOWSHIP_MOVES; } + + public static boolean transferredCard(LotroGame game, EffectResult effectResult, Filterable transferredCard, Filterable transferredFrom, Filterable transferredTo) { + if (effectResult.getType() == EffectResult.Type.CARD_TRANSFERRED) { + CardTransferredResult transferResult = (CardTransferredResult) effectResult; + return (Filters.and(transferredCard).accepts(game.getGameState(), game.getModifiersQuerying(), transferResult.getTransferredCard()) + && (transferredFrom == null || (transferResult.getTransferredFrom() != null && Filters.and(transferredFrom).accepts(game.getGameState(), game.getModifiersQuerying(), transferResult.getTransferredFrom()))) + && (transferredTo == null || (transferResult.getTransferredTo() != null && Filters.and(transferredTo).accepts(game.getGameState(), game.getModifiersQuerying(), transferResult.getTransferredTo())))); + } + return false; + } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/TransferPermanentEffect.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/TransferPermanentEffect.java index 168be72ba..afe0406c9 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/TransferPermanentEffect.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/effects/TransferPermanentEffect.java @@ -6,6 +6,7 @@ import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.GameUtils; import com.gempukku.lotro.logic.timing.AbstractEffect; import com.gempukku.lotro.logic.timing.Effect; +import com.gempukku.lotro.logic.timing.results.CardTransferredResult; public class TransferPermanentEffect extends AbstractEffect { private PhysicalCard _physicalCard; @@ -38,8 +39,12 @@ public class TransferPermanentEffect extends AbstractEffect { if (isPlayableInFull(game)) { GameState gameState = game.getGameState(); gameState.sendMessage(_physicalCard.getOwner() + " transfers " + GameUtils.getCardLink(_physicalCard) + " to " + GameUtils.getCardLink(_targetCard)); + PhysicalCard transferredFrom = _physicalCard.getAttachedTo(); gameState.transferCard(_physicalCard, _targetCard); + game.getActionsEnvironment().emitEffectResult( + new CardTransferredResult(_physicalCard, transferredFrom, _targetCard)); + return new FullEffectResult(true, true); } return new FullEffectResult(false, false); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/gandalf/Card13_028.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/gandalf/Card13_028.java new file mode 100644 index 000000000..2443fcc63 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/gandalf/Card13_028.java @@ -0,0 +1,64 @@ +package com.gempukku.lotro.cards.set13.gandalf; + +import com.gempukku.lotro.cards.AbstractFollower; +import com.gempukku.lotro.cards.TriggerConditions; +import com.gempukku.lotro.cards.effects.ReinforceTokenEffect; +import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Side; +import com.gempukku.lotro.common.Token; +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.OptionalTriggerAction; +import com.gempukku.lotro.logic.effects.AddTwilightEffect; +import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.SpotCondition; +import com.gempukku.lotro.logic.modifiers.StrengthModifier; +import com.gempukku.lotro.logic.timing.Effect; +import com.gempukku.lotro.logic.timing.EffectResult; + +import java.util.Collections; +import java.util.List; + +/** + * Set: Bloodlines + * Side: Free + * Culture: Gandalf + * Twilight Cost: 2 + * Type: Follower + * Game Text: Aid - (2). (At the start of the maneuver phase, you may add (2) to transfer this to a companion.) Each + * time you transfer this to a companion, you may reinforce a [GANDALF] token. While you can spot a [GANDALF] companion, + * each minion skirmishing bearer is strength -1. + */ +public class Card13_028 extends AbstractFollower { + public Card13_028() { + super(Side.FREE_PEOPLE, 2, Culture.GANDALF, "Alatar", true); + } + + @Override + protected boolean canPayAidCost(LotroGame game, PhysicalCard self) { + return true; + } + + @Override + protected Effect getAidCost(LotroGame game, PhysicalCard self) { + return new AddTwilightEffect(self, 2); + } + + @Override + protected List getExtraOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { + if (TriggerConditions.transferredCard(game, effectResult, self, null, CardType.COMPANION)) { + OptionalTriggerAction action = new OptionalTriggerAction(self); + action.appendEffect( + new ReinforceTokenEffect(self, playerId, Token.GANDALF)); + return Collections.singletonList(action); + } + return null; + } + + @Override + public Modifier getAlwaysOnModifier(PhysicalCard self) { + return new StrengthModifier(self, Filters.and(CardType.MINION, Filters.inSkirmishAgainst(Filters.hasAttached(self))), new SpotCondition(Culture.GANDALF, CardType.COMPANION), -1); + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java index cea4a3afd..6b3e45851 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/EffectResult.java @@ -49,7 +49,7 @@ public abstract class EffectResult { CHARACTER_WON_SKIRMISH, CHARACTER_LOST_SKIRMISH, - CHARACTER_ASSIGNED + CHARACTER_ASSIGNED, CARD_TRANSFERRED } private Type _type; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/CardTransferredResult.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/CardTransferredResult.java new file mode 100644 index 000000000..834ca7d2f --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/CardTransferredResult.java @@ -0,0 +1,29 @@ +package com.gempukku.lotro.logic.timing.results; + +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.logic.timing.EffectResult; + +public class CardTransferredResult extends EffectResult { + private PhysicalCard _transferredCard; + private PhysicalCard _transferredFrom; + private PhysicalCard _transferredTo; + + public CardTransferredResult(PhysicalCard transferredCard, PhysicalCard transferredFrom, PhysicalCard transferredTo) { + super(EffectResult.Type.CARD_TRANSFERRED); + _transferredCard = transferredCard; + _transferredFrom = transferredFrom; + _transferredTo = transferredTo; + } + + public PhysicalCard getTransferredCard() { + return _transferredCard; + } + + public PhysicalCard getTransferredFrom() { + return _transferredFrom; + } + + public PhysicalCard getTransferredTo() { + return _transferredTo; + } +}