- "Caras Galadhon" should no longer work badly in case of some assignment actions (Orc Assassin).

This commit is contained in:
marcins78@gmail.com
2012-04-30 11:54:25 +00:00
parent 2fb31f526d
commit 10c041b218
3 changed files with 80 additions and 13 deletions

View File

@@ -247,26 +247,22 @@ public class Filters {
new Filter() {
@Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
Map<PhysicalCard, Set<PhysicalCard>> currentAssignments = new HashMap<PhysicalCard, Set<PhysicalCard>>();
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<PhysicalCard, Set<PhysicalCard>> afterThatAssignment = new HashMap<PhysicalCard, Set<PhysicalCard>>(currentAssignments);
Map<PhysicalCard, Set<PhysicalCard>> thisAssignment = new HashMap<PhysicalCard, Set<PhysicalCard>>();
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;
}
}

View File

@@ -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));
}
}

View File

@@ -2,6 +2,7 @@
<b>30 Apr. 2012</b>
- "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).
<b>27 Apr. 2012</b>
- "Morning Came" now correctly adds +2 Strength to the character if shadow player puts card from hand beneath his/her