From 35ea56778af0ed3fad25738cd04a5c9dc5074050 Mon Sep 17 00:00:00 2001 From: Marcin Sciesinski Date: Fri, 18 Oct 2024 13:23:32 +0700 Subject: [PATCH] Fixed issue with cards creating assignments --- .../lotro/cards/set7/wraith/Card7_174.java | 4 +- .../cards/official/set01/set1-wraith.hjson | 1 + .../appender/AssignFpCharacterToSkirmish.java | 7 +- .../com/gempukku/lotro/filters/Filters.java | 16 +- .../lotro/logic/effects/AssignmentEffect.java | 2 +- ...hooseAndAssignCharacterToMinionEffect.java | 2 +- ...hooseAndAssignMinionToCompanionEffect.java | 2 +- .../choose/ChooseAndDoAssignmentEffect.java | 4 +- .../ai/AIPlayerAssignsMinionsGameProcess.java | 2 +- ...PeoplePlayerAssignsMinionsGameProcess.java | 4 +- ...dowPlayerAssignsHisMinionsGameProcess.java | 4 +- .../lotro/at/IndividualCardAtTest.java | 160 +++++++++++++++++- .../official/set01/Card_01_224_Tests.java | 5 +- 13 files changed, 185 insertions(+), 28 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_174.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_174.java index 20608af36..dbace6db2 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_174.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set7/wraith/Card7_174.java @@ -36,11 +36,11 @@ public class Card7_174 extends AbstractPermanent { action.appendCost( new RemoveThreatsEffect(self, 5)); action.appendEffect( - new ChooseActiveCardEffect(self, playerId, "Choose a Nazgul", Race.NAZGUL, Filters.assignableToSkirmishAgainst(Side.SHADOW, Filters.and(CardType.COMPANION, Filters.not(Filters.ringBearer)), false, false)) { + new ChooseActiveCardEffect(self, playerId, "Choose a Nazgul", Race.NAZGUL, Filters.assignableToSkirmishAgainst(Side.SHADOW, Filters.and(CardType.COMPANION, Filters.not(Filters.ringBearer)), true, false, false)) { @Override protected void cardSelected(LotroGame game, final PhysicalCard nazgul) { action.insertEffect( - new ChooseActiveCardEffect(self, playerId, "Choose a companion", CardType.COMPANION, Filters.not(Filters.ringBearer), Filters.assignableToSkirmishAgainst(Side.SHADOW, nazgul, false, false)) { + new ChooseActiveCardEffect(self, playerId, "Choose a companion", CardType.COMPANION, Filters.not(Filters.ringBearer), Filters.assignableToSkirmishAgainst(Side.SHADOW, nazgul)) { @Override protected void cardSelected(final LotroGame game, final PhysicalCard card) { action.appendEffect( diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set01/set1-wraith.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set01/set1-wraith.hjson index 53513a22d..c79556469 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set01/set1-wraith.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set01/set1-wraith.hjson @@ -695,6 +695,7 @@ type: assignFpCharacterToSkirmish fpCharacter: choose(ring bearer) against: choose(nazgul) + ignoreFierce: true } { type: addTrigger diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AssignFpCharacterToSkirmish.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AssignFpCharacterToSkirmish.java index 612d28c2f..db39a3d89 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AssignFpCharacterToSkirmish.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/AssignFpCharacterToSkirmish.java @@ -23,11 +23,12 @@ import java.util.List; public class AssignFpCharacterToSkirmish implements EffectAppenderProducer { @Override public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { - FieldUtils.validateAllowedFields(effectObject, "player", "fpCharacter", "against"); + FieldUtils.validateAllowedFields(effectObject, "player", "fpCharacter", "against", "ignoreFierce"); final String player = FieldUtils.getString(effectObject.get("player"), "player", "you"); final String fpCharacter = FieldUtils.getString(effectObject.get("fpCharacter"), "fpCharacter"); final String against = FieldUtils.getString(effectObject.get("against"), "against"); + final boolean ignoreFierce = FieldUtils.getBoolean(effectObject.get("ignoreFierce"), "ignoreFierce", false); final PlayerSource playerSource = PlayerResolver.resolvePlayer(player, environment); @@ -41,7 +42,7 @@ public class AssignFpCharacterToSkirmish implements EffectAppenderProducer { final String assigningPlayer = playerSource.getPlayer(actionContext); Side assigningSide = GameUtils.getSide(actionContext.getGame(), assigningPlayer); final Filterable filter = minionFilter.getFilterable(actionContext); - return Filters.assignableToSkirmishAgainst(assigningSide, filter); + return Filters.assignableToSkirmishAgainst(assigningSide, filter, ignoreFierce); }, "_tempFpCharacter", player, "Choose character to assign to skirmish", environment)); result.addEffectAppender( CardResolver.resolveCard(against, @@ -49,7 +50,7 @@ public class AssignFpCharacterToSkirmish implements EffectAppenderProducer { final String assigningPlayer = playerSource.getPlayer(actionContext); Side assigningSide = GameUtils.getSide(actionContext.getGame(), assigningPlayer); final Collection fpChar = actionContext.getCardsFromMemory("_tempFpCharacter"); - return Filters.assignableToSkirmishAgainst(assigningSide, Filters.in(fpChar)); + return Filters.assignableToSkirmishAgainst(assigningSide, Filters.in(fpChar), ignoreFierce); }, "_tempMinion", player, "Choose minion to assign to character", environment)); result.addEffectAppender( new DelayedAppender() { 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 905b1d7b8..d7d76850e 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 @@ -282,7 +282,11 @@ public class Filters { } public static Filter assignableToSkirmishAgainst(final Side assignedBySide, final Filterable againstFilter) { - return assignableToSkirmishAgainst(assignedBySide, againstFilter, false, false); + return assignableToSkirmishAgainst(assignedBySide, againstFilter, false); + } + + public static Filter assignableToSkirmishAgainst(final Side assignedBySide, final Filterable againstFilter, boolean ignoreFierce) { + return assignableToSkirmishAgainst(assignedBySide, againstFilter, ignoreFierce, false, false); } public static Filter notPreventedByEffectToAssign(final Side assignedBySide, final PhysicalCard againstCard) { @@ -302,15 +306,15 @@ public class Filters { }; } - public static Filter assignableToSkirmishAgainst(final Side assignedBySide, final Filterable againstFilter, final boolean ignoreUnassigned, final boolean allowAllyToSkirmish) { + public static Filter assignableToSkirmishAgainst(final Side assignedBySide, final Filterable againstFilter, final boolean ignoreFierce, final boolean ignoreUnassigned, final boolean allowAllyToSkirmish) { return Filters.and( - assignableToSkirmish(assignedBySide, ignoreUnassigned, allowAllyToSkirmish), + assignableToSkirmish(assignedBySide, ignoreFierce, ignoreUnassigned, allowAllyToSkirmish), new Filter() { @Override public boolean accepts(LotroGame game, PhysicalCard physicalCard) { for (PhysicalCard card : Filters.filterActive(game, againstFilter)) { if (card.getBlueprint().getSide() != physicalCard.getBlueprint().getSide() - && Filters.assignableToSkirmish(assignedBySide, ignoreUnassigned, allowAllyToSkirmish).accepts(game, card)) { + && Filters.assignableToSkirmish(assignedBySide, ignoreFierce, ignoreUnassigned, allowAllyToSkirmish).accepts(game, card)) { Map> thisAssignment = new HashMap<>(); if (card.getBlueprint().getSide() == Side.FREE_PEOPLE) { if (thisAssignment.containsKey(card)) @@ -333,7 +337,7 @@ public class Filters { }); } - public static Filter assignableToSkirmish(final Side assignedBySide, final boolean ignoreUnassigned, final boolean allowAllyToSkirmish) { + public static Filter assignableToSkirmish(final Side assignedBySide, final boolean ignoreFierce, final boolean ignoreUnassigned, final boolean allowAllyToSkirmish) { Filter assignableFilter = Filters.or( Filters.and( CardType.ALLY, @@ -366,7 +370,7 @@ public class Filters { new Filter() { @Override public boolean accepts(LotroGame game, PhysicalCard physicalCard) { - return (!game.getGameState().isFierceSkirmishes()) || game.getModifiersQuerying().hasKeyword(game, physicalCard, Keyword.FIERCE); + return (ignoreFierce || !game.getGameState().isFierceSkirmishes()) || game.getModifiersQuerying().hasKeyword(game, physicalCard, Keyword.FIERCE); } })); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/AssignmentEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/AssignmentEffect.java index da0c31aab..8e7d16919 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/AssignmentEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/AssignmentEffect.java @@ -47,7 +47,7 @@ public class AssignmentEffect extends AbstractEffect { @Override public boolean isPlayableInFull(LotroGame game) { Side side = _playerId.equals(game.getGameState().getCurrentPlayerId()) ? Side.FREE_PEOPLE : Side.SHADOW; - return Filters.assignableToSkirmishAgainst(side, _fpChar, _ignoreSingleMinionRestriction, _skipAllyLocationCheck).accepts(game, _minion); + return Filters.assignableToSkirmishAgainst(side, _fpChar, false, _ignoreSingleMinionRestriction, _skipAllyLocationCheck).accepts(game, _minion); } @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignCharacterToMinionEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignCharacterToMinionEffect.java index 32e590e8c..23d7c5c17 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignCharacterToMinionEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignCharacterToMinionEffect.java @@ -33,7 +33,7 @@ public class ChooseAndAssignCharacterToMinionEffect extends ChooseActiveCardEffe @Override protected Filter getExtraFilterForPlaying(final LotroGame game) { final Side side = game.getGameState().getCurrentPlayerId().equals(_playerId) ? Side.FREE_PEOPLE : Side.SHADOW; - return Filters.assignableToSkirmishAgainst(side, _minion, false, _skipAllyLocationCheck); + return Filters.assignableToSkirmishAgainst(side, _minion, false, false, _skipAllyLocationCheck); } @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignMinionToCompanionEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignMinionToCompanionEffect.java index dc2f935fc..2d182218a 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignMinionToCompanionEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndAssignMinionToCompanionEffect.java @@ -27,7 +27,7 @@ public class ChooseAndAssignMinionToCompanionEffect extends ChooseActiveCardEffe @Override protected Filter getExtraFilterForPlaying(final LotroGame game) { final Side side = game.getGameState().getCurrentPlayerId().equals(_playerId) ? Side.FREE_PEOPLE : Side.SHADOW; - return Filters.assignableToSkirmishAgainst(side, _companion, false, false); + return Filters.assignableToSkirmishAgainst(side, _companion); } @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndDoAssignmentEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndDoAssignmentEffect.java index 4221e64b5..e3d029176 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndDoAssignmentEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/choose/ChooseAndDoAssignmentEffect.java @@ -49,7 +49,7 @@ public class ChooseAndDoAssignmentEffect extends AbstractSubActionEffect { } private Collection getAssignableMinions(LotroGame game) { - return Filters.filterActive(game, CardType.MINION, _minionFilter, Filters.assignableToSkirmishAgainst(getDecidingPlayerSide(game), _fpFilter, false, false)); + return Filters.filterActive(game, CardType.MINION, _minionFilter, Filters.assignableToSkirmishAgainst(getDecidingPlayerSide(game), _fpFilter)); } @Override @@ -70,7 +70,7 @@ public class ChooseAndDoAssignmentEffect extends AbstractSubActionEffect { } private void minionSelected(final LotroGame game, final PhysicalCard minion) { - Collection assignableFpCharacters = Filters.filterActive(game, Filters.or(CardType.COMPANION, CardType.ALLY), _fpFilter, Filters.assignableToSkirmishAgainst(getDecidingPlayerSide(game), minion, false, false)); + Collection assignableFpCharacters = Filters.filterActive(game, Filters.or(CardType.COMPANION, CardType.ALLY), _fpFilter, Filters.assignableToSkirmishAgainst(getDecidingPlayerSide(game), minion)); if (assignableFpCharacters.size() == 1) assignmentSelected(game, assignableFpCharacters.iterator().next(), minion); else diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/ai/AIPlayerAssignsMinionsGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/ai/AIPlayerAssignsMinionsGameProcess.java index 06f769a88..6d88809da 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/ai/AIPlayerAssignsMinionsGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/ai/AIPlayerAssignsMinionsGameProcess.java @@ -30,7 +30,7 @@ public class AIPlayerAssignsMinionsGameProcess implements GameProcess { GameState gameState = game.getGameState(); Filter minionFilter = Filters.and(CardType.MINION, Filters.owner("AI"), Filters.in(_leftoverMinions)); - final Set minions = new HashSet<>(Filters.filterActive(game, minionFilter, Filters.assignableToSkirmish(Side.SHADOW, true, false))); + final Set minions = new HashSet<>(Filters.filterActive(game, minionFilter, Filters.assignableToSkirmish(Side.SHADOW, false, true, false))); if (minions.size() > 0) { final PhysicalCard ringBearer = game.getGameState().getRingBearer(game.getGameState().getCurrentPlayerId()); Map> assignments = Collections.singletonMap(ringBearer, minions); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/FreePeoplePlayerAssignsMinionsGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/FreePeoplePlayerAssignsMinionsGameProcess.java index e5a6ad38e..b16a0be78 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/FreePeoplePlayerAssignsMinionsGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/FreePeoplePlayerAssignsMinionsGameProcess.java @@ -44,14 +44,14 @@ public class FreePeoplePlayerAssignsMinionsGameProcess implements GameProcess { protected void doPlayEffect(final LotroGame game) { final GameState gameState = game.getGameState(); - final Collection minions = Filters.filterActive(game, CardType.MINION, Filters.assignableToSkirmish(Side.FREE_PEOPLE, true, false)); + final Collection minions = Filters.filterActive(game, CardType.MINION, Filters.assignableToSkirmish(Side.FREE_PEOPLE, false, true, false)); if (minions.size() > 0) { final Collection freePeopleTargets = Filters.filterActive(game, Filters.and( Filters.or( CardType.COMPANION, CardType.ALLY), - Filters.assignableToSkirmish(Side.FREE_PEOPLE, true, false))); + Filters.assignableToSkirmish(Side.FREE_PEOPLE, false, true, false))); game.getUserFeedback().sendAwaitingDecision(gameState.getCurrentPlayerId(), diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/ShadowPlayerAssignsHisMinionsGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/ShadowPlayerAssignsHisMinionsGameProcess.java index 188456da7..ff37c74f7 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/ShadowPlayerAssignsHisMinionsGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/assign/ShadowPlayerAssignsHisMinionsGameProcess.java @@ -36,14 +36,14 @@ public class ShadowPlayerAssignsHisMinionsGameProcess implements GameProcess { GameState gameState = game.getGameState(); Filter minionFilter = Filters.and(CardType.MINION, Filters.owner(_playerId), Filters.in(_leftoverMinions)); - final Collection minions = Filters.filterActive(game, minionFilter, Filters.assignableToSkirmish(Side.SHADOW, true, false)); + final Collection minions = Filters.filterActive(game, minionFilter, Filters.assignableToSkirmish(Side.SHADOW, false, true, false)); if (minions.size() > 0) { final Collection freePeopleTargets = Filters.filterActive(game, Filters.and( Filters.or( CardType.COMPANION, CardType.ALLY), - Filters.assignableToSkirmish(Side.SHADOW, true, false))); + Filters.assignableToSkirmish(Side.SHADOW, false, true, false))); game.getUserFeedback().sendAwaitingDecision(_playerId, new PlayerAssignMinionsDecision(1, "Assign minions to companions or allies at home", freePeopleTargets, minions) { 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 8801f3ccc..8e6e82ee1 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 @@ -14,10 +14,7 @@ import org.junit.Test; import java.util.*; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; +import static org.junit.Assert.*; public class IndividualCardAtTest extends AbstractAtTest { @@ -1203,4 +1200,159 @@ public class IndividualCardAtTest extends AbstractAtTest { assertEquals(Zone.DISCARD, morgulBlade.getZone()); assertEquals(Zone.ATTACHED, bladeTip.getZone()); } + + @Test + public void returnToItsMaster() throws DecisionResultInvalidException, CardNotFoundException { + LotroDeck p1Deck = createSimplestDeck(); + p1Deck.setRing("4_1"); + LotroDeck p2Deck = createSimplestDeck(); + + Map decks = new HashMap<>(); + decks.put(P1, p1Deck); + decks.put(P2, p2Deck); + + initializeGameWithDecks(decks); + + skipMulligans(); + + PhysicalCardImpl returnToItsMaster = new PhysicalCardImpl(102, "1_224", P2, _cardLibrary.getLotroCardBlueprint("1_224")); + _game.getGameState().addCardToZone(_game, returnToItsMaster, Zone.HAND); + + PhysicalCardImpl nelya = new PhysicalCardImpl(102, "1_233", P2, _cardLibrary.getLotroCardBlueprint("1_233")); + _game.getGameState().addCardToZone(_game, nelya, Zone.SHADOW_CHARACTERS); + + PhysicalCardImpl hobbitSword = new PhysicalCardImpl(102, "1_299", P1, _cardLibrary.getLotroCardBlueprint("1_299")); + _game.getGameState().attachCard(_game, hobbitSword, _game.getGameState().getRingBearer(P1)); + + // End fellowship + playerDecided(P1, ""); + + // End shadow + playerDecided(P2, ""); + + // End maneuvers phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // End archery phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // End assignment phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // Assign + playerDecided(P1, _game.getGameState().getRingBearer(P1).getCardId() + " " + nelya.getCardId()); + + // Choose skirmish to resolve + playerDecided(P1, "" + _game.getGameState().getRingBearer(P1).getCardId()); + + // Skirmish phase + AwaitingDecision skirmishAction = _userFeedback.getAwaitingDecision(P1); + playerDecided(P1, getCardActionId(skirmishAction, "Use The One")); + + assertTrue(_game.getGameState().isWearingRing()); + + // End skirmish phase + playerDecided(P2, ""); + playerDecided(P1, ""); + + // Don't use Return to Its Master + playerDecided(P2, ""); + + // End assignment phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // Assign + playerDecided(P1, _game.getGameState().getRingBearer(P1).getCardId() + " " + nelya.getCardId()); + + // Choose skirmish to resolve + playerDecided(P1, "" + _game.getGameState().getRingBearer(P1).getCardId()); + + // End fierce skirmish phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + AwaitingDecision playeReturnDecision = _userFeedback.getAwaitingDecision(P2); + playerDecided(P2, getCardActionId(playeReturnDecision, "Play Return")); + + // Choose skirmish to resolve + playerDecided(P1, "" + _game.getGameState().getRingBearer(P1).getCardId()); + + assertEquals(_game.getGameState().getRingBearer(P1), _game.getGameState().getSkirmish().getFellowshipCharacter()); + assertEquals(1, _game.getGameState().getSkirmish().getShadowCharacters().size()); + assertEquals(nelya, _game.getGameState().getSkirmish().getShadowCharacters().iterator().next()); + } + + + @Test + public void returnToItsMasterNonFierceNazgul() throws DecisionResultInvalidException, CardNotFoundException { + LotroDeck p1Deck = createSimplestDeck(); + p1Deck.setRing("4_1"); + LotroDeck p2Deck = createSimplestDeck(); + + Map decks = new HashMap<>(); + decks.put(P1, p1Deck); + decks.put(P2, p2Deck); + + initializeGameWithDecks(decks); + + skipMulligans(); + + PhysicalCardImpl returnToItsMaster = new PhysicalCardImpl(102, "1_224", P2, _cardLibrary.getLotroCardBlueprint("1_224")); + _game.getGameState().addCardToZone(_game, returnToItsMaster, Zone.HAND); + + PhysicalCardImpl nonFierceNazgul = new PhysicalCardImpl(102, "2_83", P2, _cardLibrary.getLotroCardBlueprint("1_233")); + _game.getGameState().addCardToZone(_game, nonFierceNazgul, Zone.SHADOW_CHARACTERS); + + PhysicalCardImpl hobbitSword = new PhysicalCardImpl(102, "1_299", P1, _cardLibrary.getLotroCardBlueprint("1_299")); + _game.getGameState().attachCard(_game, hobbitSword, _game.getGameState().getRingBearer(P1)); + + // End fellowship + playerDecided(P1, ""); + + // End shadow + playerDecided(P2, ""); + + // End maneuvers phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // End archery phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // End assignment phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // Assign + playerDecided(P1, _game.getGameState().getRingBearer(P1).getCardId() + " " + nonFierceNazgul.getCardId()); + + // Choose skirmish to resolve + playerDecided(P1, "" + _game.getGameState().getRingBearer(P1).getCardId()); + + // Skirmish phase + AwaitingDecision skirmishAction = _userFeedback.getAwaitingDecision(P1); + playerDecided(P1, getCardActionId(skirmishAction, "Use The One")); + + assertTrue(_game.getGameState().isWearingRing()); + + // End skirmish phase + playerDecided(P2, ""); + playerDecided(P1, ""); + + AwaitingDecision playeReturnDecision = _userFeedback.getAwaitingDecision(P2); + playerDecided(P2, getCardActionId(playeReturnDecision, "Play Return")); + + // Choose skirmish to resolve + playerDecided(P1, "" + _game.getGameState().getRingBearer(P1).getCardId()); + + assertEquals(_game.getGameState().getRingBearer(P1), _game.getGameState().getSkirmish().getFellowshipCharacter()); + assertEquals(1, _game.getGameState().getSkirmish().getShadowCharacters().size()); + assertEquals(nonFierceNazgul, _game.getGameState().getSkirmish().getShadowCharacters().iterator().next()); + } + } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_224_Tests.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_224_Tests.java index 6f5fd1bfc..eb1787c1a 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_224_Tests.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/cards/official/set01/Card_01_224_Tests.java @@ -106,9 +106,8 @@ public class Card_01_224_Tests //Can't quite get the rest - //assertEquals(2, scn.GetShadowCardChoiceCount()); // both enquea and TWK - //scn.ShadowChooseCard(enquea); - //We should now be asking freeps to choose the next skirmish to resolve and in a skirmish phase + assertEquals(2, scn.GetShadowCardChoiceCount()); // both enquea and TWK + scn.ShadowChooseCard(enquea); }