From 10c041b21860b815b0caa53c74444524a37f16e8 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Mon, 30 Apr 2012 11:54:25 +0000 Subject: [PATCH] - "Caras Galadhon" should no longer work badly in case of some assignment actions (Orc Assassin). --- .../com/gempukku/lotro/filters/Filters.java | 20 +++--- .../gempukku/lotro/at/AssignmentAtTest.java | 72 ++++++++++++++++++- .../src/main/webapp/includes/changeLog.html | 1 + 3 files changed, 80 insertions(+), 13 deletions(-) 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 94af22acf..f83c03ebf 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 @@ -247,26 +247,22 @@ public class Filters { new Filter() { @Override public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { - Map> currentAssignments = new HashMap>(); - for (Assignment assignment : gameState.getAssignments()) - currentAssignments.put(assignment.getFellowshipCharacter(), assignment.getShadowCharacters()); - for (PhysicalCard card : Filters.filterActive(gameState, modifiersQuerying, againstFilter)) { if (card.getBlueprint().getSide() != physicalCard.getBlueprint().getSide() && Filters.assignableToSkirmish(assignedBySide, ignoreUnassigned, allowAllyToSkirmish).accepts(gameState, modifiersQuerying, card)) { - Map> afterThatAssignment = new HashMap>(currentAssignments); + Map> thisAssignment = new HashMap>(); if (card.getBlueprint().getSide() == Side.FREE_PEOPLE) { - if (afterThatAssignment.containsKey(card)) - afterThatAssignment.get(card).add(physicalCard); + if (thisAssignment.containsKey(card)) + thisAssignment.get(card).add(physicalCard); else - afterThatAssignment.put(card, Collections.singleton(physicalCard)); + thisAssignment.put(card, Collections.singleton(physicalCard)); } else { - if (afterThatAssignment.containsKey(physicalCard)) - afterThatAssignment.get(physicalCard).add(card); + if (thisAssignment.containsKey(physicalCard)) + thisAssignment.get(physicalCard).add(card); else - afterThatAssignment.put(physicalCard, Collections.singleton(card)); + thisAssignment.put(physicalCard, Collections.singleton(card)); } - if (modifiersQuerying.isValidAssignments(gameState, assignedBySide, afterThatAssignment)) + if (modifiersQuerying.isValidAssignments(gameState, assignedBySide, thisAssignment)) return true; } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/AssignmentAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/AssignmentAtTest.java index fe627cb60..e7aba7cf2 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/AssignmentAtTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/AssignmentAtTest.java @@ -11,13 +11,14 @@ import com.gempukku.lotro.logic.decisions.AwaitingDecisionType; import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; import com.gempukku.lotro.logic.modifiers.KeywordModifier; import com.gempukku.lotro.logic.vo.LotroDeck; -import static junit.framework.Assert.*; import org.junit.Test; import java.util.HashMap; import java.util.List; import java.util.Map; +import static junit.framework.Assert.*; + public class AssignmentAtTest extends AbstractAtTest { @Test public void orcAssassinAssignNotToAlly() throws DecisionResultInvalidException { @@ -438,4 +439,73 @@ public class AssignmentAtTest extends AbstractAtTest { assertEquals(1, assignmentsAfterFreePlayer.get(0).getShadowCharacters().size()); assertTrue(assignmentsAfterFreePlayer.get(0).getShadowCharacters().contains(dunlendingWarrior)); } + + @Test + public void twoOrcAssassinsAtCarasGaladhon() throws DecisionResultInvalidException { + initializeSimplestGame(); + + skipMulligans(); + + PhysicalCardImpl merry = new PhysicalCardImpl(100, "1_303", P1, _library.getLotroCardBlueprint("1_303")); + PhysicalCardImpl carasGaladhon = new PhysicalCardImpl(100, "3_115", P1, _library.getLotroCardBlueprint("3_115")); + PhysicalCardImpl orcAssassin1 = new PhysicalCardImpl(101, "1_262", P2, _library.getLotroCardBlueprint("1_262")); + PhysicalCardImpl orcAssassin2 = new PhysicalCardImpl(102, "1_262", P2, _library.getLotroCardBlueprint("1_262")); + + _game.getGameState().addCardToZone(_game, merry, Zone.FREE_CHARACTERS); + + carasGaladhon.setSiteNumber(2); + _game.getGameState().addCardToZone(_game, carasGaladhon, Zone.ADVENTURE_PATH); + + // End fellowship phase + playerDecided(P1, ""); + + _game.getGameState().addCardToZone(_game, orcAssassin1, Zone.SHADOW_CHARACTERS); + _game.getGameState().addCardToZone(_game, orcAssassin2, Zone.SHADOW_CHARACTERS); + + // End shadow phase + playerDecided(P2, ""); + + // End maneuvers phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // End arhcery phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // Assignment phase + playerDecided(P1, ""); + + AwaitingDecision assignmentActions = _userFeedback.getAwaitingDecision(P2); + assertEquals(AwaitingDecisionType.CARD_ACTION_CHOICE, assignmentActions.getDecisionType()); + validateContents(toCardIdArray(orcAssassin1, orcAssassin2), (String[]) assignmentActions.getDecisionParameters().get("cardId")); + + playerDecided(P2, "0"); + + AwaitingDecision fpFirstAssassinDecision = _userFeedback.getAwaitingDecision(P1); + assertEquals(AwaitingDecisionType.CARD_SELECTION, fpFirstAssassinDecision.getDecisionType()); + validateContents(toCardIdArray(merry, _game.getGameState().getRingBearer(P1)), (String[]) fpFirstAssassinDecision.getDecisionParameters().get("cardId")); + + playerDecided(P1, String.valueOf(merry.getCardId())); + + assertEquals(1, _game.getGameState().getAssignments().size()); + final Assignment firstAssignment = _game.getGameState().getAssignments().get(0); + assertEquals(merry, firstAssignment.getFellowshipCharacter()); + assertEquals(1, firstAssignment.getShadowCharacters().size()); + assertTrue(firstAssignment.getShadowCharacters().contains(orcAssassin1)); + + playerDecided(P1, ""); + + assignmentActions = _userFeedback.getAwaitingDecision(P2); + assertEquals(AwaitingDecisionType.CARD_ACTION_CHOICE, assignmentActions.getDecisionType()); + validateContents(toCardIdArray(orcAssassin1, orcAssassin2), (String[]) assignmentActions.getDecisionParameters().get("cardId")); + + playerDecided(P2, "1"); + + assertEquals(2, _game.getGameState().getAssignments().size()); + final Assignment secondAssignment = _game.getGameState().getAssignments().get(1); + assertEquals(_game.getGameState().getRingBearer(P1), secondAssignment.getFellowshipCharacter()); + assertEquals(1, secondAssignment.getShadowCharacters().size()); + assertTrue(secondAssignment.getShadowCharacters().contains(orcAssassin2)); + } } 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 118097599..04dad298c 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 @@ -2,6 +2,7 @@ 30 Apr. 2012 - "Pillage of Rohan" should now work correctly. - "Realm of Dwarrowdelf" now has two separate limits (for str and dmg). +- "Caras Galadhon" should no longer work badly in case of some assignment actions (Orc Assassin). 27 Apr. 2012 - "Morning Came" now correctly adds +2 Strength to the character if shadow player puts card from hand beneath his/her