From 7ee58d44520b6c7167a6e09de45efa88bbd883fa Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Fri, 30 Sep 2011 07:57:52 +0000 Subject: [PATCH] "Gimli's Pipe" You can now have an effect that modifies number of cards you can spot. --- .../decisions/ForEachYouSpotDecision.java | 2 +- .../cards/modifiers/KeywordSpotModifier.java | 34 +++++ .../spotting/SimpleLotroCardBlueprint.java | 141 ++++++++++++++++++ .../spotting/SimplePhysicalCard.java | 61 ++++++++ .../lotro/cards/set1/elven/Card1_049.java | 2 +- .../lotro/cards/set1/gondor/Card1_091.java | 2 +- .../lotro/cards/set1/isengard/Card1_123.java | 2 +- .../lotro/cards/set1/isengard/Card1_125.java | 2 +- .../lotro/cards/set1/isengard/Card1_139.java | 2 +- .../lotro/cards/set1/isengard/Card1_146.java | 2 +- .../lotro/cards/set1/isengard/Card1_148.java | 2 +- .../lotro/cards/set1/isengard/Card1_155.java | 3 +- .../lotro/cards/set1/isengard/Card1_156.java | 2 +- .../lotro/cards/set1/moria/Card1_163.java | 2 +- .../lotro/cards/set1/moria/Card1_167.java | 2 +- .../lotro/cards/set1/moria/Card1_169.java | 2 +- .../lotro/cards/set1/moria/Card1_194.java | 2 +- .../lotro/cards/set1/sauron/Card1_239.java | 2 +- .../lotro/cards/set1/sauron/Card1_248.java | 3 +- .../lotro/cards/set1/sauron/Card1_251.java | 2 +- .../lotro/cards/set1/sauron/Card1_253.java | 2 +- .../lotro/cards/set1/sauron/Card1_256.java | 2 +- .../lotro/cards/set1/sauron/Card1_259.java | 2 +- .../lotro/cards/set1/sauron/Card1_260.java | 2 +- .../lotro/cards/set1/sauron/Card1_262.java | 2 +- .../lotro/cards/set1/shire/Card1_316.java | 2 +- .../lotro/cards/set1/site/Card1_359.java | 2 +- .../lotro/cards/set1/wraith/Card1_231.java | 2 +- .../lotro/cards/set1/wraith/Card1_237.java | 2 +- .../lotro/cards/set2/dwarven/Card2_007.java | 2 +- .../lotro/cards/set2/isengard/Card2_039.java | 2 +- .../lotro/cards/set2/shire/Card2_099.java | 2 +- .../lotro/cards/set2/shire/Card2_107.java | 2 +- .../lotro/cards/set3/dwarven/Card3_002.java | 51 +++++++ .../com/gempukku/lotro/filters/Filters.java | 27 ++-- .../logic/modifiers/AbstractModifier.java | 5 + .../lotro/logic/modifiers/Modifier.java | 3 + .../lotro/logic/modifiers/ModifierEffect.java | 2 +- .../lotro/logic/modifiers/ModifiersLogic.java | 9 ++ .../logic/modifiers/ModifiersQuerying.java | 3 + 40 files changed, 357 insertions(+), 41 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/KeywordSpotModifier.java create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/spotting/SimpleLotroCardBlueprint.java create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/spotting/SimplePhysicalCard.java create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/dwarven/Card3_002.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/decisions/ForEachYouSpotDecision.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/decisions/ForEachYouSpotDecision.java index 6b632d459..df1ab76cb 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/decisions/ForEachYouSpotDecision.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/decisions/ForEachYouSpotDecision.java @@ -24,7 +24,7 @@ public abstract class ForEachYouSpotDecision extends IntegerAwaitingDecision { @Override public Map getDecisionParameters() { Map result = super.getDecisionParameters(); - int count = Filters.countActive(_lotroGame.getGameState(), _lotroGame.getModifiersQuerying(), _filter); + int count = Filters.countSpottable(_lotroGame.getGameState(), _lotroGame.getModifiersQuerying(), _filter); _max = count; result.put("max", String.valueOf(count)); if (_defaultValue > _max) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/KeywordSpotModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/KeywordSpotModifier.java new file mode 100644 index 000000000..2593e15fb --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/KeywordSpotModifier.java @@ -0,0 +1,34 @@ +package com.gempukku.lotro.cards.modifiers; + +import com.gempukku.lotro.cards.modifiers.spotting.SimpleLotroCardBlueprint; +import com.gempukku.lotro.cards.modifiers.spotting.SimplePhysicalCard; +import com.gempukku.lotro.common.Keyword; +import com.gempukku.lotro.filters.Filter; +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.ModifierEffect; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; + +public class KeywordSpotModifier extends AbstractModifier { + private Keyword _keyword; + + public KeywordSpotModifier(PhysicalCard source, Keyword keyword) { + super(source, "Spotting modifier", null, new ModifierEffect[]{ModifierEffect.SPOT_MODIFIER}); + _keyword = keyword; + } + + @Override + public int getSpotCount(GameState gameState, ModifiersQuerying modifiersQuerying, Filter filter, int result) { + if (filter.accepts(gameState, modifiersQuerying, + new SimplePhysicalCard( + new SimpleLotroCardBlueprint() { + @Override + public boolean hasKeyword(Keyword keyword) { + return keyword == _keyword; + } + }))) + return result + 1; + return result; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/spotting/SimpleLotroCardBlueprint.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/spotting/SimpleLotroCardBlueprint.java new file mode 100644 index 000000000..377b56500 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/spotting/SimpleLotroCardBlueprint.java @@ -0,0 +1,141 @@ +package com.gempukku.lotro.cards.modifiers.spotting; + +import com.gempukku.lotro.common.*; +import com.gempukku.lotro.game.LotroCardBlueprint; +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.actions.RequiredTriggerAction; +import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.timing.Action; +import com.gempukku.lotro.logic.timing.Effect; +import com.gempukku.lotro.logic.timing.EffectResult; + +import java.util.List; + +public class SimpleLotroCardBlueprint implements LotroCardBlueprint { + @Override + public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier) { + return false; + } + + @Override + public List getAlwaysOnModifiers(PhysicalCard self) { + return null; + } + + @Override + public CardType getCardType() { + return null; + } + + @Override + public Culture getCulture() { + return null; + } + + @Override + public int getKeywordCount(Keyword keyword) { + return 0; + } + + @Override + public String getName() { + return null; + } + + @Override + public List getOptionalAfterActions(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { + return null; + } + + @Override + public List getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { + return null; + } + + @Override + public List getOptionalBeforeActions(String playerId, LotroGame game, Effect effect, PhysicalCard self) { + return null; + } + + @Override + public List getOptionalBeforeTriggers(String playerId, LotroGame game, Effect effect, PhysicalCard self) { + return null; + } + + @Override + public List getPhaseActions(String playerId, LotroGame game, PhysicalCard self) { + return null; + } + + @Override + public Action getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, int twilightModifier) { + return null; + } + + @Override + public Race getRace() { + return null; + } + + @Override + public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { + return null; + } + + @Override + public List getRequiredBeforeTriggers(LotroGame game, Effect effect, PhysicalCard self) { + return null; + } + + @Override + public int getResistance() { + return 0; + } + + @Override + public Side getSide() { + return null; + } + + @Override + public Signet getSignet() { + return null; + } + + @Override + public Direction getSiteDirection() { + return null; + } + + @Override + public int getSiteNumber() { + return 0; + } + + @Override + public int getStrength() { + return 0; + } + + @Override + public int getTwilightCost() { + return 0; + } + + @Override + public int getVitality() { + return 0; + } + + @Override + public boolean hasKeyword(Keyword keyword) { + return false; + } + + @Override + public boolean isUnique() { + return false; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/spotting/SimplePhysicalCard.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/spotting/SimplePhysicalCard.java new file mode 100644 index 000000000..cbe556b83 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/spotting/SimplePhysicalCard.java @@ -0,0 +1,61 @@ +package com.gempukku.lotro.cards.modifiers.spotting; + +import com.gempukku.lotro.common.Zone; +import com.gempukku.lotro.game.LotroCardBlueprint; +import com.gempukku.lotro.game.PhysicalCard; + +public class SimplePhysicalCard implements PhysicalCard { + private LotroCardBlueprint _blueprint; + + public SimplePhysicalCard(LotroCardBlueprint blueprint) { + _blueprint = blueprint; + } + + @Override + public PhysicalCard getAttachedTo() { + return null; + } + + @Override + public LotroCardBlueprint getBlueprint() { + return _blueprint; + } + + @Override + public String getBlueprintId() { + return null; + } + + @Override + public int getCardId() { + return 0; + } + + @Override + public Object getData() { + return null; + } + + @Override + public String getOwner() { + return null; + } + + @Override + public PhysicalCard getStackedOn() { + return null; + } + + @Override + public Zone getZone() { + return null; + } + + @Override + public void removeData() { + } + + @Override + public void storeData(Object object) { + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_049.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_049.java index aad449b43..f13027d41 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_049.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_049.java @@ -37,7 +37,7 @@ public class Card1_049 extends AbstractAttachable { return new AbstractModifier(self, "Strength +1 for each Elf you can spot (limit +3)", Filters.hasAttached(self), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER}) { @Override public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - int count = Math.min(3, Filters.countActive(gameState, modifiersQuerying, Filters.race(Race.ELF))); + int count = Math.min(3, Filters.countSpottable(gameState, modifiersQuerying, Filters.race(Race.ELF))); return result + count; } }; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gondor/Card1_091.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gondor/Card1_091.java index b721fd046..ff59f9071 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gondor/Card1_091.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gondor/Card1_091.java @@ -56,7 +56,7 @@ public class Card1_091 extends AbstractAttachableFPPossession { @Override public void decisionMade(String result) throws DecisionResultInvalidException { int spotCount = getValidatedResult(result); - int companionsCount = Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.COMPANION)); + int companionsCount = Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.COMPANION)); spotCount = Math.min(spotCount, companionsCount); action.appendEffect( new ChooseActiveCardsEffect(playerId, "Choose companion(s) to heal", spotCount, spotCount, Filters.type(CardType.COMPANION)) { diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_123.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_123.java index 2ff858af0..a617fc1b1 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_123.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_123.java @@ -37,7 +37,7 @@ public class Card1_123 extends AbstractEvent { public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier) { return super.checkPlayRequirements(playerId, game, self, twilightModifier) && PlayConditions.canExert(self, game.getGameState(), game.getModifiersQuerying(), Filters.culture(Culture.ISENGARD), Filters.type(CardType.MINION)) - && Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.COMPANION)) >= 5; + && Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.COMPANION)) >= 5; } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_125.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_125.java index 75fcc6c8d..381dc8341 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_125.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_125.java @@ -39,7 +39,7 @@ public class Card1_125 extends AbstractPermanent { @Override public List getExtraPhaseActions(final String playerId, LotroGame game, final PhysicalCard self) { if (PlayConditions.canUseShadowCardDuringPhase(game.getGameState(), Phase.MANEUVER, self, 2) - && Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.COMPANION)) >= 6) { + && Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.COMPANION)) >= 6) { final ActivateCardAction action = new ActivateCardAction(self, Keyword.MANEUVER); action.appendCost(new RemoveTwilightEffect(2)); action.appendEffect( diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_139.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_139.java index 3c18ccb15..45a6ff621 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_139.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_139.java @@ -40,7 +40,7 @@ public class Card1_139 extends AbstractEvent { @Override protected void cardSelected(PhysicalCard urukHai) { action.appendEffect(new CardAffectsCardEffect(self, urukHai)); - if (Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.COMPANION)) >= 5) { + if (Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.COMPANION)) >= 5) { action.appendEffect( new AddUntilStartOfPhaseModifierEffect( new StrengthModifier(self, Filters.sameCard(urukHai), 4), Phase.REGROUP)); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_146.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_146.java index 1bb5dca8e..baf074032 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_146.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_146.java @@ -34,7 +34,7 @@ public class Card1_146 extends AbstractMinion { @Override protected List getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) { if (PlayConditions.canUseShadowCardDuringPhase(game.getGameState(), Phase.MANEUVER, self, 0) - && Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.COMPANION)) >= 5) { + && Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.COMPANION)) >= 5) { ActivateCardAction action = new ActivateCardAction(self, Keyword.MANEUVER); action.appendEffect(new AddUntilStartOfPhaseModifierEffect(new KeywordModifier(self, Filters.sameCard(self), Keyword.FIERCE), Phase.REGROUP)); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_148.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_148.java index 65b4dda20..0d1cf2853 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_148.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_148.java @@ -34,7 +34,7 @@ public class Card1_148 extends AbstractMinion { return new AbstractModifier(self, "Strength +1 for each other Uruk-hai you can spot", Filters.sameCard(self), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER}) { @Override public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - return result + Filters.countActive(gameState, modifiersQuerying, Filters.and(Filters.race(Race.URUK_HAI), Filters.not(Filters.sameCard(self)))); + return result + Filters.countSpottable(gameState, modifiersQuerying, Filters.and(Filters.race(Race.URUK_HAI), Filters.not(Filters.sameCard(self)))); } }; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_155.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_155.java index e9912b142..1cc603060 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_155.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_155.java @@ -40,7 +40,8 @@ public class Card1_155 extends AbstractMinion { && PlayConditions.canExert(self, game.getGameState(), game.getModifiersQuerying(), self)) { final ActivateCardAction action = new ActivateCardAction(self, Keyword.RESPONSE); action.appendCost(new ExertCharactersCost(self, self)); - int isengardMinionCount = Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.culture(Culture.ISENGARD), Filters.type(CardType.MINION)); + // TODO this should give option to player to spot less + int isengardMinionCount = Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.culture(Culture.ISENGARD), Filters.type(CardType.MINION)); for (int i = 0; i < isengardMinionCount; i++) { action.appendEffect( new UnrespondableEffect() { diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_156.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_156.java index 8d903210a..58b84109e 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_156.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_156.java @@ -34,7 +34,7 @@ public class Card1_156 extends AbstractMinion { @Override protected List getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) { if (PlayConditions.canUseShadowCardDuringPhase(game.getGameState(), Phase.SHADOW, self, 0) - && Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.COMPANION)) >= 6) { + && Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.COMPANION)) >= 6) { ActivateCardAction action = new ActivateCardAction(self, Keyword.MANEUVER); action.appendEffect( new AddUntilStartOfPhaseModifierEffect( diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_163.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_163.java index 570a4cef1..47278d89d 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_163.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_163.java @@ -32,7 +32,7 @@ public class Card1_163 extends AbstractMinion { return new AbstractModifier(self, "For each other MORIA Orc you can spot, Ancient Chieftain is strength +1.", Filters.sameCard(self), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER}) { @Override public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - return result + Filters.countActive(gameState, modifiersQuerying, Filters.culture(Culture.MORIA), Filters.race(Race.ORC), Filters.not(Filters.sameCard(physicalCard))); + return result + Filters.countSpottable(gameState, modifiersQuerying, Filters.culture(Culture.MORIA), Filters.race(Race.ORC), Filters.not(Filters.sameCard(physicalCard))); } }; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_167.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_167.java index 9f4c4aea6..34c8a8b16 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_167.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_167.java @@ -34,7 +34,7 @@ public class Card1_167 extends AbstractEvent { new ChooseActiveCardEffect(playerId, "Choose MORIA Orc", Filters.culture(Culture.MORIA), Filters.race(Race.ORC)) { @Override protected void cardSelected(PhysicalCard orc) { - int bonus = Math.min(4, Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.culture(Culture.MORIA), Filters.race(Race.ORC), Filters.not(Filters.sameCard(orc)))); + int bonus = Math.min(4, Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.culture(Culture.MORIA), Filters.race(Race.ORC), Filters.not(Filters.sameCard(orc)))); action.appendEffect(new CardAffectsCardEffect(self, orc)); action.appendEffect( new AddUntilEndOfPhaseModifierEffect( diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_169.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_169.java index d45b5017b..9fdb803f5 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_169.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_169.java @@ -33,7 +33,7 @@ public class Card1_169 extends AbstractEvent { @Override public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier) { return super.checkPlayRequirements(playerId, game, self, twilightModifier) - && Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.culture(Culture.MORIA), Filters.type(CardType.MINION)) >= 5; + && Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.culture(Culture.MORIA), Filters.type(CardType.MINION)) >= 5; } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_194.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_194.java index 836d1c369..bc2bab071 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_194.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_194.java @@ -39,7 +39,7 @@ public class Card1_194 extends AbstractResponseEvent { @Override public List getOptionalBeforeActions(String playerId, LotroGame game, Effect effect, PhysicalCard self) { if (PlayConditions.played(game.getGameState(), game.getModifiersQuerying(), effect, Filters.and(Filters.type(CardType.EVENT), Filters.keyword(Keyword.STEALTH))) - && Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.culture(Culture.MORIA), Filters.type(CardType.MINION)) >= 3 + && Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.culture(Culture.MORIA), Filters.type(CardType.MINION)) >= 3 && PlayConditions.canPayForShadowCard(game, self, 0)) { PlayEventAction action = new PlayEventAction(self); action.appendEffect(new CancelEventEffect(playerId, (PlayEventEffect) effect)); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_239.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_239.java index 99302e8d3..ccb22c793 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_239.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_239.java @@ -27,7 +27,7 @@ public class Card1_239 extends AbstractEvent { public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier) { return super.checkPlayRequirements(playerId, game, self, twilightModifier) && Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.culture(Culture.SAURON), Filters.race(Race.ORC)) - && Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.COMPANION)) >= 5; + && Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.COMPANION)) >= 5; } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_248.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_248.java index 618113dad..735e43290 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_248.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_248.java @@ -27,7 +27,8 @@ public class Card1_248 extends AbstractEvent { @Override public PlayEventAction getPlayCardAction(String playerId, LotroGame game, PhysicalCard self, int twilightModifier) { PlayEventAction action = new PlayEventAction(self); - int sauronMinions = Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.culture(Culture.SAURON), Filters.type(CardType.MINION)); + // TODO This should give an option to spot less + int sauronMinions = Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.culture(Culture.SAURON), Filters.type(CardType.MINION)); action.appendEffect( new AddTwilightEffect(sauronMinions)); return action; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_251.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_251.java index 80d3c1974..aba8a078b 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_251.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_251.java @@ -29,7 +29,7 @@ public class Card1_251 extends AbstractEvent { public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier) { return super.checkPlayRequirements(playerId, game, self, twilightModifier) && Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.culture(Culture.SAURON), Filters.race(Race.ORC)) - && Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.COMPANION)) >= 6; + && Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.COMPANION)) >= 6; } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_253.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_253.java index cdc7d1680..e373e1dae 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_253.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_253.java @@ -51,7 +51,7 @@ public class Card1_253 extends AbstractPermanent { new Filter() { @Override public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { - return Filters.countActive(gameState, modifiersQuerying, Filters.type(CardType.COMPANION)) >= 5; + return Filters.countSpottable(gameState, modifiersQuerying, Filters.type(CardType.COMPANION)) >= 5; } } ), 2); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_256.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_256.java index aad552c17..91d8b37e5 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_256.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_256.java @@ -33,7 +33,7 @@ public class Card1_256 extends AbstractMinion { return new AbstractModifier(self, "For each companion you can spot, this minion is strength +1.", Filters.sameCard(self), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER}) { @Override public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - int companions = Filters.countActive(gameState, modifiersQuerying, Filters.type(CardType.COMPANION)); + int companions = Filters.countSpottable(gameState, modifiersQuerying, Filters.type(CardType.COMPANION)); return companions + result; } }; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_259.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_259.java index 6fee454a5..d4e18ada9 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_259.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_259.java @@ -32,7 +32,7 @@ public class Card1_259 extends AbstractMinion { return new AbstractModifier(self, "For each other [SAURON] Orc you can spot, Morgul Warden is strength +1.", Filters.sameCard(self), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER}) { @Override public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - int otherSauronOrcs = Filters.countActive(gameState, modifiersQuerying, Filters.culture(Culture.SAURON), Filters.race(Race.ORC), Filters.not(Filters.sameCard(self))); + int otherSauronOrcs = Filters.countSpottable(gameState, modifiersQuerying, Filters.culture(Culture.SAURON), Filters.race(Race.ORC), Filters.not(Filters.sameCard(self))); return otherSauronOrcs + result; } }; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_260.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_260.java index 5fa00f379..33cc69911 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_260.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_260.java @@ -31,7 +31,7 @@ public class Card1_260 extends AbstractPermanent { new Condition() { @Override public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) { - return Filters.countActive(gameState, modifiersQuerying, Filters.type(CardType.COMPANION)) >= 7; + return Filters.countSpottable(gameState, modifiersQuerying, Filters.type(CardType.COMPANION)) >= 7; } }, -1); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_262.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_262.java index db1a3a1cd..158689c98 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_262.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_262.java @@ -43,7 +43,7 @@ public class Card1_262 extends AbstractMinion { @Override protected List getExtraPhaseActions(final String playerId, LotroGame game, final PhysicalCard self) { if (PlayConditions.canUseShadowCardDuringPhase(game.getGameState(), Phase.ASSIGNMENT, self, 0) - && Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.race(Race.HOBBIT), Filters.type(CardType.COMPANION)) >= 2 + && Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.race(Race.HOBBIT), Filters.type(CardType.COMPANION)) >= 2 && Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.sameCard(self), Filters.notAssigned())) { final ActivateCardAction action = new ActivateCardAction(self, Keyword.ASSIGNMENT); action.appendEffect( diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/shire/Card1_316.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/shire/Card1_316.java index 76a2cbee6..2c53c5a41 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/shire/Card1_316.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/shire/Card1_316.java @@ -57,7 +57,7 @@ public class Card1_316 extends AbstractPermanent { ), new ModifierEffect[]{ModifierEffect.TWILIGHT_COST_MODIFIER}) { @Override public int getTwilightCost(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - int hobbitsCount = Filters.countActive(gameState, modifiersQuerying, Filters.type(CardType.COMPANION), Filters.race(Race.HOBBIT)); + int hobbitsCount = Filters.countSpottable(gameState, modifiersQuerying, Filters.type(CardType.COMPANION), Filters.race(Race.HOBBIT)); if (hobbitsCount >= 4) return result - 2; if (hobbitsCount >= 2) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_359.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_359.java index da3e253ee..47ead10c8 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_359.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/site/Card1_359.java @@ -32,7 +32,7 @@ public class Card1_359 extends AbstractSite { @Override public List getPhaseActions(String playerId, LotroGame game, PhysicalCard self) { if (PlayConditions.canUseSiteDuringPhase(game.getGameState(), Phase.SHADOW, self) - && Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.race(Race.ORC)) >= 5) { + && Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.race(Race.ORC)) >= 5) { ActivateCardAction action = new ActivateCardAction(self, Keyword.SHADOW); action.appendEffect( new AddUntilEndOfTurnModifierEffect( diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_231.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_231.java index 6dbf56e48..3e5afff16 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_231.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_231.java @@ -39,7 +39,7 @@ public class Card1_231 extends AbstractMinion { if (PlayConditions.canUseShadowCardDuringPhase(game.getGameState(), Phase.MANEUVER, self, 0) && PlayConditions.canExert(self, game.getGameState(), game.getModifiersQuerying(), self) && ( - Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.COMPANION)) >= 6 + Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.COMPANION)) >= 6 || game.getGameState().getBurdens() >= 5)) { final ActivateCardAction action = new ActivateCardAction(self, Keyword.MANEUVER); action.appendCost( diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_237.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_237.java index af107dce8..fe14533b0 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_237.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_237.java @@ -34,7 +34,7 @@ public class Card1_237 extends AbstractMinion { return new AbstractModifier(self, "For each other Nazgul you can spot, The Witch-king is strength +2.", Filters.sameCard(self), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER}) { @Override public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - int otherNazgul = Filters.countActive(gameState, modifiersQuerying, Filters.race(Race.NAZGUL), Filters.not(Filters.sameCard(self))); + int otherNazgul = Filters.countSpottable(gameState, modifiersQuerying, Filters.race(Race.NAZGUL), Filters.not(Filters.sameCard(self))); return result + (otherNazgul * 2); } }; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/dwarven/Card2_007.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/dwarven/Card2_007.java index 916d9b317..83d5c911f 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/dwarven/Card2_007.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/dwarven/Card2_007.java @@ -33,7 +33,7 @@ public class Card2_007 extends AbstractCompanion { return new AbstractModifier(self, "For each DWARVEN tale you can spot, Gloin is strength +1 (limit +4)", Filters.sameCard(self), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER}) { @Override public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - int bonus = Math.max(4, Filters.countActive(gameState, modifiersQuerying, Filters.culture(Culture.DWARVEN), Filters.keyword(Keyword.TALE))); + int bonus = Math.max(4, Filters.countSpottable(gameState, modifiersQuerying, Filters.culture(Culture.DWARVEN), Filters.keyword(Keyword.TALE))); return result + bonus; } }; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_039.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_039.java index 54589764d..201c20a03 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_039.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/isengard/Card2_039.java @@ -41,7 +41,7 @@ public class Card2_039 extends AbstractEvent { PlayEventAction action = new PlayEventAction(self); action.appendCost( new ChooseAndExertCharactersCost(action, playerId, 1, 1, Filters.race(Race.URUK_HAI))); - int companions = Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.COMPANION)); + int companions = Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.COMPANION)); if (companions >= 6) action.appendEffect( new DiscardCardsFromPlayEffect(self, diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/shire/Card2_099.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/shire/Card2_099.java index 4d4df97cb..c436a0e27 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/shire/Card2_099.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/shire/Card2_099.java @@ -26,7 +26,7 @@ public class Card2_099 extends AbstractEvent { @Override public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier) { return super.checkPlayRequirements(playerId, game, self, twilightModifier) - && Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.race(Race.HOBBIT)) >= 2; + && Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.race(Race.HOBBIT)) >= 2; } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/shire/Card2_107.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/shire/Card2_107.java index c7f298edd..9c1633166 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/shire/Card2_107.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/shire/Card2_107.java @@ -31,7 +31,7 @@ public class Card2_107 extends AbstractPermanent { @Override public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, int twilightModifier) { return super.checkPlayRequirements(playerId, game, self, twilightModifier) - && Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.race(Race.HOBBIT)) >= 2; + && Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.race(Race.HOBBIT)) >= 2; } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/dwarven/Card3_002.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/dwarven/Card3_002.java new file mode 100644 index 000000000..3f680aa4b --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/dwarven/Card3_002.java @@ -0,0 +1,51 @@ +package com.gempukku.lotro.cards.set3.dwarven; + +import com.gempukku.lotro.cards.AbstractAttachable; +import com.gempukku.lotro.cards.PlayConditions; +import com.gempukku.lotro.cards.costs.ExertCharactersCost; +import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; +import com.gempukku.lotro.cards.modifiers.KeywordSpotModifier; +import com.gempukku.lotro.common.*; +import com.gempukku.lotro.filters.Filter; +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.timing.Action; + +import java.util.Collections; +import java.util.List; + +/** + * Set: Realms of Elf-lords + * Side: Free + * Culture: Dwarven + * Twilight Cost: 1 + * Type: Possession • Pipe + * Game Text: Bearer must be Gimli. Fellowship: Exert Gimli to add 1 to the number of pipes you can spot. + */ +public class Card3_002 extends AbstractAttachable { + public Card3_002() { + super(Side.FREE_PEOPLE, CardType.POSSESSION, 1, Culture.DWARVEN, Keyword.PIPE, "Gimli's Pipe", true); + } + + @Override + protected Filter getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) { + return Filters.name("Gimli"); + } + + @Override + protected List getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) { + if (PlayConditions.canUseFPCardDuringPhase(game.getGameState(), Phase.FELLOWSHIP, self) + && PlayConditions.canExert(self, game.getGameState(), game.getModifiersQuerying(), self.getAttachedTo())) { + ActivateCardAction action = new ActivateCardAction(self, Keyword.FELLOWSHIP); + action.appendCost( + new ExertCharactersCost(self, self.getAttachedTo())); + action.appendEffect( + new AddUntilEndOfPhaseModifierEffect( + new KeywordSpotModifier(self, Keyword.PIPE), Phase.FELLOWSHIP)); + return Collections.singletonList(action); + } + return null; + } +} 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 66ee54328..e487dcc26 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 @@ -20,11 +20,18 @@ public class Filters { return visitor.isSpotted(); } + public static int countSpottable(GameState gameState, ModifiersQuerying modifiersQuerying, Filter... filters) { + Filter filter = Filters.and(filters); + GetCardsMatchingFilterVisitor visitor = new GetCardsMatchingFilterVisitor(gameState, modifiersQuerying, filter); + gameState.iterateActiveCards(visitor); + return modifiersQuerying.getSpotCount(gameState, filter, visitor.getCounter()); + } + public static Collection filterActive(GameState gameState, ModifiersQuerying modifiersQuerying, Filter... filters) { Filter filter = Filters.and(filters); - GetCardsVisitor getCards = new GetCardsVisitor(gameState, modifiersQuerying, filter); - gameState.iterateActiveCards(getCards); - return getCards.getPhysicalCards(); + GetCardsMatchingFilterVisitor getCardsMatchingFilter = new GetCardsMatchingFilterVisitor(gameState, modifiersQuerying, filter); + gameState.iterateActiveCards(getCardsMatchingFilter); + return getCardsMatchingFilter.getPhysicalCards(); } public static Collection filter(Collection cards, GameState gameState, ModifiersQuerying modifiersQuerying, Filter... filters) { @@ -43,9 +50,9 @@ public class Filters { } public static int countActive(GameState gameState, ModifiersQuerying modifiersQuerying, Filter... filters) { - GetCardsVisitor visitor = new GetCardsVisitor(gameState, modifiersQuerying, Filters.and(filters)); - gameState.iterateActiveCards(visitor); - return visitor.getCounter(); + GetCardsMatchingFilterVisitor matchingFilterVisitor = new GetCardsMatchingFilterVisitor(gameState, modifiersQuerying, Filters.and(filters)); + gameState.iterateActiveCards(matchingFilterVisitor); + return matchingFilterVisitor.getCounter(); } // Filters available @@ -190,7 +197,7 @@ public class Filters { return new Filter() { @Override public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { - return physicalCard.getOwner().equals(playerId); + return physicalCard.getOwner() != null && physicalCard.getOwner().equals(playerId); } }; } @@ -272,7 +279,7 @@ public class Filters { return new Filter() { @Override public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { - return (physicalCard.getBlueprint().getName().equals(name)); + return physicalCard.getBlueprint().getName() != null && physicalCard.getBlueprint().getName().equals(name); } }; } @@ -395,14 +402,14 @@ public class Filters { } } - private static class GetCardsVisitor extends CompletePhysicalCardVisitor { + private static class GetCardsMatchingFilterVisitor extends CompletePhysicalCardVisitor { private GameState _gameState; private ModifiersQuerying _modifiersQuerying; private Filter _filter; private Set _physicalCards = new HashSet(); - private GetCardsVisitor(GameState gameState, ModifiersQuerying modifiersQuerying, Filter filter) { + private GetCardsMatchingFilterVisitor(GameState gameState, ModifiersQuerying modifiersQuerying, Filter filter) { _gameState = gameState; _modifiersQuerying = modifiersQuerying; _filter = filter; 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 b61736001..4c5a67401 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 @@ -164,4 +164,9 @@ public abstract class AbstractModifier implements Modifier { public boolean canLookOrRevealCardsInHand(GameState gameState, ModifiersQuerying modifiersQuerying, String playerId) { return true; } + + @Override + public int getSpotCount(GameState gameState, ModifiersQuerying modifiersQuerying, Filter filter, int result) { + return result; + } } 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 cc8385ab8..29a3b5a7f 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 @@ -3,6 +3,7 @@ package com.gempukku.lotro.logic.modifiers; import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Side; +import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.logic.timing.Action; @@ -64,4 +65,6 @@ public interface Modifier { public boolean canBeHealed(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, boolean result); public boolean canLookOrRevealCardsInHand(GameState gameState, ModifiersQuerying modifiersQuerying, String playerId); + + public int getSpotCount(GameState gameState, ModifiersQuerying modifiersQuerying, Filter filter, int result); } 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 0534a4f30..e3a23f933 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 @@ -3,5 +3,5 @@ package com.gempukku.lotro.logic.modifiers; public enum ModifierEffect { KEYWORD_MODIFIER, STRENGTH_MODIFIER, VITALITY_MODIFIER, TWILIGHT_COST_MODIFIER, OVERWHELM_MODIFIER, WOUND_MODIFIER, PRESENCE_MODIFIER, ARCHERY_MODIFIER, MOVE_LIMIT_MODIFIER, ACTION_MODIFIER, ASSIGNMENT_MODIFIER, DISCARD_FROM_PLAY_MODIFIER, - LOOK_OR_REVEAL_MODIFIER + LOOK_OR_REVEAL_MODIFIER, SPOT_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 e4e5cde2e..42d24fd52 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 @@ -4,6 +4,7 @@ import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Side; +import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.logic.timing.Action; @@ -392,6 +393,14 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { return true; } + @Override + public int getSpotCount(GameState gameState, Filter filter, int inPlayCount) { + int result = inPlayCount; + for (Modifier modifier : getModifiers(ModifierEffect.SPOT_MODIFIER)) + result = modifier.getSpotCount(gameState, this, filter, result); + return Math.max(0, result); + } + private class ModifierHookImpl implements ModifierHook { private Modifier _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 7c39b3d41..c71ecf9e5 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 @@ -3,6 +3,7 @@ package com.gempukku.lotro.logic.modifiers; import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Side; +import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.logic.timing.Action; @@ -55,4 +56,6 @@ public interface ModifiersQuerying { public boolean canDrawCardAndIncrement(GameState gameState, String playerId); public boolean canLookOrRevealCardsInHand(GameState gameState, String playerId); + + public int getSpotCount(GameState gameState, Filter filter, int inPlayCount); }