From c8f94c994d2c8f2f6d5958ee44916a16db640220 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Mon, 16 Apr 2012 10:21:57 +0000 Subject: [PATCH] If a card just looks if there is anything stacked (with Filters.any) it will find cards that do not belong to active side. --- .../lotro/cards/set4/isengard/Card4_167.java | 11 ++----- .../com/gempukku/lotro/filters/Filters.java | 2 ++ .../lotro/at/IndividualCardAtTest.java | 33 ++++++++++++++++++- 3 files changed, 36 insertions(+), 10 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_167.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_167.java index 22c15fb70..da0fb3fb6 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_167.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/isengard/Card4_167.java @@ -6,11 +6,9 @@ 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.GameState; import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.modifiers.Condition; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.modifiers.SpotCondition; import java.util.Collections; import java.util.List; @@ -38,11 +36,6 @@ public class Card4_167 extends AbstractAttachable { public List getAlwaysOnModifiers(LotroGame game, final PhysicalCard self) { return Collections.singletonList( new SidePlayerCantPlayPhaseEventsOrSpecialAbilitiesModifier(self, - new Condition() { - @Override - public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) { - return Filters.filter(gameState.getStackedCards(self.getAttachedTo()), gameState, modifiersQuerying, Filters.activeSide, Race.URUK_HAI).size() > 0; - } - }, Side.FREE_PEOPLE, Phase.SKIRMISH)); + new SpotCondition(self, Filters.hasStacked(Race.URUK_HAI)), Side.FREE_PEOPLE, Phase.SKIRMISH)); } } 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 1a876121b..94af22acf 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 @@ -637,6 +637,8 @@ public class Filters { @Override public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { List physicalCardList = gameState.getStackedCards(physicalCard); + if (filter.length == 1 && filter[0] == Filters.any) + return physicalCardList.size() > 0; return (Filters.filter(physicalCardList, gameState, modifiersQuerying, Filters.and(filter, activeSide)).size() > 0); } }; diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java index 75ee43544..afe42c655 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java @@ -8,7 +8,6 @@ import com.gempukku.lotro.logic.decisions.AwaitingDecision; import com.gempukku.lotro.logic.decisions.AwaitingDecisionType; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; import com.gempukku.lotro.logic.vo.LotroDeck; -import static junit.framework.Assert.assertEquals; import org.junit.Test; import java.util.Arrays; @@ -16,6 +15,8 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; +import static junit.framework.Assert.assertEquals; + public class IndividualCardAtTest extends AbstractAtTest { @Test public void dwarvenAxeDoesNotFreeze() throws DecisionResultInvalidException { @@ -484,4 +485,34 @@ public class IndividualCardAtTest extends AbstractAtTest { assertEquals(8, _game.getModifiersQuerying().getTwilightCost(_game.getGameState(), attea, false)); } + + @Test + public void sentBackAllowsPlayingCardInDeadPile() throws DecisionResultInvalidException { + initializeSimplestGame(); + + PhysicalCardImpl sentBack = new PhysicalCardImpl(100, "9_27", P1, _library.getLotroCardBlueprint("9_27")); + _game.getGameState().addCardToZone(_game, sentBack, Zone.SUPPORT); + + PhysicalCardImpl radagast1 = new PhysicalCardImpl(101, "9_26", P1, _library.getLotroCardBlueprint("9_26")); + _game.getGameState().addCardToZone(_game, radagast1, Zone.DEAD); + + PhysicalCardImpl radagast2 = new PhysicalCardImpl(101, "9_26", P1, _library.getLotroCardBlueprint("9_26")); + _game.getGameState().addCardToZone(_game, radagast2, Zone.HAND); + + skipMulligans(); + + // End fellowship + AwaitingDecision playFellowshipAction = _userFeedback.getAwaitingDecision(P1); + assertEquals(AwaitingDecisionType.CARD_ACTION_CHOICE, playFellowshipAction.getDecisionType()); + validateContents(new String[]{"" + sentBack.getCardId()}, ((String[]) playFellowshipAction.getDecisionParameters().get("cardId"))); + playerDecided(P1, "0"); + + AwaitingDecision chooseRadagast = _userFeedback.getAwaitingDecision(P1); + assertEquals(AwaitingDecisionType.CARD_SELECTION, chooseRadagast.getDecisionType()); + validateContents(new String[]{"" + radagast2.getCardId()}, ((String[]) chooseRadagast.getDecisionParameters().get("cardId"))); + playerDecided(P1, String.valueOf(radagast2.getCardId())); + + assertEquals(Zone.FREE_CHARACTERS, radagast2.getZone()); + assertEquals(4, _game.getGameState().getTwilightPool()); + } }