From b4b9ffa676b573aadedaa38c90ca80573480a2ef Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Thu, 16 Feb 2012 08:38:20 +0000 Subject: [PATCH] "Warrior of Rohan" --- .../cards/AbstractAttachableFPPossession.java | 3 +- .../modifiers/CantBeTransferredModifier.java | 24 +++++++ .../lotro/cards/set17/rohan/Card17_104.java | 68 +++++++++++++++++++ .../logic/modifiers/AbstractModifier.java | 5 ++ .../lotro/logic/modifiers/Modifier.java | 2 + .../lotro/logic/modifiers/ModifierEffect.java | 2 +- .../lotro/logic/modifiers/ModifiersLogic.java | 8 +++ .../logic/modifiers/ModifiersQuerying.java | 2 + 8 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantBeTransferredModifier.java create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/rohan/Card17_104.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractAttachableFPPossession.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractAttachableFPPossession.java index 74c326038..fcc855483 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractAttachableFPPossession.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractAttachableFPPossession.java @@ -105,7 +105,8 @@ public abstract class AbstractAttachableFPPossession extends AbstractAttachable @Override protected final List getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) { List actions = new LinkedList(); - appendTransferPossessionAction(actions, game, self, getFullValidTargetFilter(playerId, game, self)); + if (game.getModifiersQuerying().canBeTransferred(game.getGameState(), self)) + appendTransferPossessionAction(actions, game, self, getFullValidTargetFilter(playerId, game, self)); List extraActions = getExtraInPlayPhaseActions(playerId, game, self); if (extraActions != null) actions.addAll(extraActions); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantBeTransferredModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantBeTransferredModifier.java new file mode 100644 index 000000000..98fce037d --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CantBeTransferredModifier.java @@ -0,0 +1,24 @@ +package com.gempukku.lotro.cards.modifiers; + +import com.gempukku.lotro.common.Filterable; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.GameState; +import com.gempukku.lotro.logic.modifiers.AbstractModifier; +import com.gempukku.lotro.logic.modifiers.Condition; +import com.gempukku.lotro.logic.modifiers.ModifierEffect; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; + +public class CantBeTransferredModifier extends AbstractModifier { + public CantBeTransferredModifier(PhysicalCard source, Filterable affectFilter) { + this(source, affectFilter, null); + } + + public CantBeTransferredModifier(PhysicalCard source, Filterable affectFilter, Condition condition) { + super(source, "Can't be transferred", affectFilter, condition, ModifierEffect.TRANSFER_MODIFIER); + } + + @Override + public boolean canBeTransferred(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard attachment) { + return false; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/rohan/Card17_104.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/rohan/Card17_104.java new file mode 100644 index 000000000..dee352443 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set17/rohan/Card17_104.java @@ -0,0 +1,68 @@ +package com.gempukku.lotro.cards.set17.rohan; + +import com.gempukku.lotro.cards.AbstractAttachable; +import com.gempukku.lotro.cards.AbstractCompanion; +import com.gempukku.lotro.cards.ExtraFilters; +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.actions.AttachPermanentAction; +import com.gempukku.lotro.cards.effects.LiberateASiteEffect; +import com.gempukku.lotro.cards.effects.choose.ChooseCardsFromHandEffect; +import com.gempukku.lotro.cards.modifiers.CantBeTransferredModifier; +import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.Culture; +import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.common.Race; +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.ActivateCardAction; +import com.gempukku.lotro.logic.modifiers.Modifier; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +/** + * Set: Rise of Saruman + * Side: Free + * Culture: Rohan + * Twilight Cost: 3 + * Type: Companion • Man + * Strength: 7 + * Vitality: 3 + * Resistance: 6 + * Game Text: Possessions cannot be transferred from this companion to another character. Fellowship: Play a possession + * on this companion to liberate a site. + */ +public class Card17_104 extends AbstractCompanion { + public Card17_104() { + super(3, 7, 3, 6, Culture.ROHAN, Race.MAN, null, "Warrior of Rohan"); + } + + @Override + public Modifier getAlwaysOnModifier(PhysicalCard self) { + return new CantBeTransferredModifier(self, Filters.and(CardType.POSSESSION, Filters.attachedTo(self))); + } + + @Override + protected List getExtraInPlayPhaseActions(final String playerId, LotroGame game, final PhysicalCard self) { + if (PlayConditions.canUseFPCardDuringPhase(game, Phase.FELLOWSHIP, self) + && PlayConditions.canPlayFromHand(playerId, game, CardType.POSSESSION, ExtraFilters.attachableTo(game, self))) { + final ActivateCardAction action = new ActivateCardAction(self); + action.appendCost( + new ChooseCardsFromHandEffect(playerId, 1, 1, CardType.POSSESSION, ExtraFilters.attachableTo(game, self)) { + @Override + protected void cardsSelected(LotroGame game, Collection selectedCards) { + for (PhysicalCard selectedCard : selectedCards) { + AttachPermanentAction attachPermanentAction = ((AbstractAttachable) selectedCard.getBlueprint()).getPlayCardAction(playerId, game, selectedCard, Filters.and(self), 0); + game.getActionsEnvironment().addActionToStack(attachPermanentAction); + action.appendEffect( + new LiberateASiteEffect(self)); + } + } + }); + return Collections.singletonList(action); + } + return null; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java index ebdf51af3..49c356e74 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java @@ -227,6 +227,11 @@ public abstract class AbstractModifier implements Modifier { return true; } + @Override + public boolean canBeTransferred(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard attachment) { + return true; + } + @Override public boolean shouldSkipPhase(GameState gameState, ModifiersQuerying modifiersQuerying, Phase phase, String playerId) { return false; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java index d99a348a4..4d962bb95 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java @@ -93,6 +93,8 @@ public interface Modifier { public boolean canHaveTransferredOn(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard playedCard, PhysicalCard target); + public boolean canBeTransferred(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard attachment); + public boolean shouldSkipPhase(GameState gameState, ModifiersQuerying modifiersQuerying, Phase phase, String playerId); public boolean isValidAssignments(GameState gameState, Side Side, ModifiersQuerying modifiersQuerying, PhysicalCard companion, Set minions); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifierEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifierEffect.java index cb9fa9656..edb4808e3 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifierEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifierEffect.java @@ -7,7 +7,7 @@ public enum ModifierEffect { VITALITY_MODIFIER, RESISTANCE_MODIFIER, SITE_NUMBER_MODIFIER, TWILIGHT_COST_MODIFIER, OVERWHELM_MODIFIER, WOUND_MODIFIER, BURDEN_MODIFIER, THREAT_MODIFIER, PRESENCE_MODIFIER, ARCHERY_MODIFIER, MOVE_LIMIT_MODIFIER, ACTION_MODIFIER, ASSIGNMENT_MODIFIER, DISCARD_FROM_PLAY_MODIFIER, DISCARD_NOT_FROM_PLAY, - LOOK_OR_REVEAL_MODIFIER, SPOT_MODIFIER, TARGET_MODIFIER, RETURN_TO_HAND_MODIFIER, + LOOK_OR_REVEAL_MODIFIER, SPOT_MODIFIER, TARGET_MODIFIER, RETURN_TO_HAND_MODIFIER, TRANSFER_MODIFIER, EXTRA_ACTION_MODIFIER, EXTRA_COST_MODIFIER, INITIATIVE_MODIFIER, TEXT_MODIFIER, diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java index b39987f16..4b2506d4b 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java @@ -628,6 +628,14 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { return true; } + @Override + public boolean canBeTransferred(GameState gameState, PhysicalCard attachment) { + for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.TRANSFER_MODIFIER, attachment)) + if (!modifier.canBeTransferred(gameState, this, attachment)) + return false; + return true; + } + @Override public boolean shouldSkipPhase(GameState gameState, Phase phase, String playerId) { for (Modifier modifier : getModifiers(gameState, ModifierEffect.ACTION_MODIFIER)) diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java index 83f125d54..b5b11c293 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java @@ -90,6 +90,8 @@ public interface ModifiersQuerying { public boolean canHaveTransferredOn(GameState gameState, PhysicalCard playedCard, PhysicalCard target); + public boolean canBeTransferred(GameState gameState, PhysicalCard attachment); + public boolean shouldSkipPhase(GameState gameState, Phase phase, String playerId); public List getExtraPhaseActions(GameState gameState, PhysicalCard target);