diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_224.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_224.java index 392ae3c80..541a705e8 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_224.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_224.java @@ -53,6 +53,7 @@ public class Card1_224 extends AbstractResponseOldEvent { List assignments = new LinkedList(game.getGameState().getAssignments()); for (Assignment assignment : assignments) game.getGameState().removeAssignment(assignment); + game.getGameState().finishSkirmish(); PhysicalCard ringBearer = game.getGameState().getRingBearer(game.getGameState().getCurrentPlayerId()); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java index 7e8c6a141..f0dde6faf 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java @@ -1028,9 +1028,11 @@ public class GameState { } public void finishSkirmish() { - _skirmish = null; - for (GameStateListener listener : getAllGameStateListeners()) - listener.finishSkirmish(); + if (_skirmish != null) { + _skirmish = null; + for (GameStateListener listener : getAllGameStateListeners()) + listener.finishSkirmish(); + } } public PhysicalCard removeTopDeckCard(String player) { 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 ffcad44ed..d53438469 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 @@ -17,6 +17,7 @@ import java.util.HashMap; import java.util.Map; import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertTrue; public class IndividualCardAtTest extends AbstractAtTest { @Test @@ -625,4 +626,89 @@ public class IndividualCardAtTest extends AbstractAtTest { assertEquals(Zone.ATTACHED, hobbitSword.getZone()); assertEquals(1, _game.getGameState().getTokenCount(corsairWarGalley, Token.RAIDER)); } + + @Test + public void returnToItsMaster() throws DecisionResultInvalidException { + 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, _library.getLotroCardBlueprint("1_224")); + _game.getGameState().addCardToZone(_game, returnToItsMaster, Zone.HAND); + + PhysicalCardImpl nelya = new PhysicalCardImpl(102, "1_233", P2, _library.getLotroCardBlueprint("1_233")); + _game.getGameState().addCardToZone(_game, nelya, Zone.SHADOW_CHARACTERS); + + PhysicalCardImpl hobbitSword = new PhysicalCardImpl(102, "1_299", P1, _library.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()); + } } diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html b/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html index 5b406fd0c..079982831 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html @@ -3,6 +3,8 @@ - "King's Board" now correctly allows to exert the named characters for the effect, if you do not control Eomer. - Another change to Muster. Now to USE Muster, you have to click the card shadow showing above the panel used to drive game flow (where you press "Pass" and accept your choices). +- "Return to Its Master" now also ends current skirmish, to allow assigning the Nazgul and Ring-bearer that were +skirmishing at the time when it is played. 24 Oct. 2012 - Added replay speed buttons.