From e1350a6efa46d55a7610283472f572b2b1b0bbee Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Wed, 29 Feb 2012 13:50:45 +0000 Subject: [PATCH] "Elven Armaments" --- .../lotro/cards/AbstractAttachable.java | 22 +++---- .../cards/AbstractLotroCardBlueprint.java | 12 ++-- .../lotro/cards/set18/elven/Card18_008.java | 60 +++++++++++++++++++ .../com/gempukku/lotro/filters/Filters.java | 3 +- .../lotro/game/LotroCardBlueprint.java | 3 +- 5 files changed, 84 insertions(+), 16 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set18/elven/Card18_008.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractAttachable.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractAttachable.java index 4084bc67c..cc6539e0c 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractAttachable.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractAttachable.java @@ -41,16 +41,18 @@ public abstract class AbstractAttachable extends AbstractLotroCardBlueprint { new Filter() { @Override public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { - PossessionClass possessionClass = getPossessionClass(); - if (possessionClass != null) { - boolean extraPossessionClass = isExtraPossessionClass(game, self, physicalCard); - List attachedCards = game.getGameState().getAttachedCards(physicalCard); - Collection matchingClassPossessions = Filters.filter(attachedCards, gameState, modifiersQuerying, Filters.or(CardType.POSSESSION, CardType.ARTIFACT), possessionClass); - if (matchingClassPossessions.size() > 1) - return false; - if (!extraPossessionClass && matchingClassPossessions.size() == 1 && - !((AbstractAttachable) matchingClassPossessions.iterator().next().getBlueprint()).isExtraPossessionClass(game, self, physicalCard)) - return false; + Set possessionClasses = getPossessionClasses(); + if (possessionClasses != null) { + for (PossessionClass possessionClass : possessionClasses) { + boolean extraPossessionClass = isExtraPossessionClass(game, self, physicalCard); + List attachedCards = game.getGameState().getAttachedCards(physicalCard); + Collection matchingClassPossessions = Filters.filter(attachedCards, gameState, modifiersQuerying, Filters.or(CardType.POSSESSION, CardType.ARTIFACT), possessionClass); + if (matchingClassPossessions.size() > 1) + return false; + if (!extraPossessionClass && matchingClassPossessions.size() == 1 && + !((AbstractAttachable) matchingClassPossessions.iterator().next().getBlueprint()).isExtraPossessionClass(game, self, physicalCard)) + return false; + } } return true; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractLotroCardBlueprint.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractLotroCardBlueprint.java index 5fa6d1655..274a82f4f 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractLotroCardBlueprint.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractLotroCardBlueprint.java @@ -14,10 +14,7 @@ import com.gempukku.lotro.logic.timing.Action; import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.EffectResult; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public abstract class AbstractLotroCardBlueprint implements LotroCardBlueprint { private String _name; @@ -165,6 +162,13 @@ public abstract class AbstractLotroCardBlueprint implements LotroCardBlueprint { } @Override + public Set getPossessionClasses() { + final PossessionClass possessionClass = getPossessionClass(); + if (possessionClass != null) + return Collections.singleton(possessionClass); + return null; + } + public PossessionClass getPossessionClass() { return null; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set18/elven/Card18_008.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set18/elven/Card18_008.java new file mode 100644 index 000000000..182aa2c3e --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set18/elven/Card18_008.java @@ -0,0 +1,60 @@ +package com.gempukku.lotro.cards.set18.elven; + +import com.gempukku.lotro.cards.AbstractAttachableFPPossession; +import com.gempukku.lotro.cards.modifiers.ArcheryTotalModifier; +import com.gempukku.lotro.cards.modifiers.MayNotBearModifier; +import com.gempukku.lotro.cards.modifiers.PlayersCantUsePhaseSpecialAbilitiesModifier; +import com.gempukku.lotro.common.*; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.SpotCondition; + +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; + +/** + * Set: Treachery & Deceit + * Side: Free + * Culture: Elven + * Twilight Cost: 2 + * Type: Possession • Hand Weapon/Shield + * Strength: +2 + * Vitality: +1 + * Game Text: To play, bearer must not be bearing any possessions. Bearer must be an [ELVEN] companion. Bearer cannot + * bear any other possessions. While a unique companion bears this possession, the Free Peoples player may not use + * archery special abilities and the minion archery total is -1. + */ +public class Card18_008 extends AbstractAttachableFPPossession { + public Card18_008() { + super(2, 2, 1, Culture.ELVEN, null, "Elven Armaments"); + } + + @Override + public Set getPossessionClasses() { + Set result = new HashSet(); + result.add(PossessionClass.HAND_WEAPON); + result.add(PossessionClass.SHIELD); + return result; + } + + @Override + protected Filterable getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) { + return Filters.and(Culture.ELVEN, CardType.COMPANION, Filters.not(Filters.hasAttached(CardType.POSSESSION))); + } + + @Override + protected List getNonBasicStatsModifiers(PhysicalCard self) { + List modifiers = new LinkedList(); + modifiers.add( + new MayNotBearModifier(self, Filters.hasAttached(self), Filters.not(self), CardType.POSSESSION)); + modifiers.add( + new PlayersCantUsePhaseSpecialAbilitiesModifier(self, new SpotCondition(Filters.hasAttached(self), Filters.unique, CardType.COMPANION), Phase.ARCHERY)); + modifiers.add( + new ArcheryTotalModifier(self, Side.SHADOW, new SpotCondition(Filters.hasAttached(self), Filters.unique, CardType.COMPANION), -1)); + return modifiers; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java index db7481826..89f516769 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/filters/Filters.java @@ -159,7 +159,8 @@ public class Filters { return new Filter() { @Override public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { - return physicalCard.getBlueprint().getPossessionClass() == possessionClass; + final Set possessionClasses = physicalCard.getBlueprint().getPossessionClasses(); + return possessionClasses != null && possessionClasses.contains(possessionClass); } }; } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroCardBlueprint.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroCardBlueprint.java index a75033844..d7711119e 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroCardBlueprint.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroCardBlueprint.java @@ -13,6 +13,7 @@ import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.EffectResult; import java.util.List; +import java.util.Set; public interface LotroCardBlueprint { public Side getSide(); @@ -87,7 +88,7 @@ public interface LotroCardBlueprint { public int getSiteNumber(); - public PossessionClass getPossessionClass(); + public Set getPossessionClasses(); public Direction getSiteDirection();