From a6cbc0fc3c05f6935e4904831ac1d031d0a47bc9 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Wed, 30 Nov 2011 21:38:06 +0000 Subject: [PATCH] Fixing archery. --- .../lotro/cards/set4/dwarven/Card4_057.java | 4 +- .../ChooseAndWoundCharactersEffect.java | 5 +- .../com/gempukku/lotro/game/LotroServer.java | 34 ++++++----- .../com/gempukku/lotro/at/ArcheryAtTest.java | 57 +++++++++++++++++++ 4 files changed, 83 insertions(+), 17 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/ArcheryAtTest.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dwarven/Card4_057.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dwarven/Card4_057.java index 96877f6a5..41b9e75ab 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dwarven/Card4_057.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dwarven/Card4_057.java @@ -58,10 +58,10 @@ public class Card4_057 extends AbstractPermanent { action.insertEffect( new AddUntilEndOfPhaseModifierEffect( new StrengthModifier(self, Filters.sameCard(card), bonus), Phase.SKIRMISH)); - action.appendEffect( - new SelfDiscardEffect(self)); } }); + action.appendEffect( + new SelfDiscardEffect(self)); return Collections.singletonList(action); } return null; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ChooseAndWoundCharactersEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ChooseAndWoundCharactersEffect.java index d191c67dc..0e7ae7010 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ChooseAndWoundCharactersEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ChooseAndWoundCharactersEffect.java @@ -21,7 +21,7 @@ public class ChooseAndWoundCharactersEffect extends ChooseActiveCardsEffect { } public ChooseAndWoundCharactersEffect(Action action, String playerId, int minimum, int maximum, int count, Filterable... filters) { - super(action.getActionSource().getPhysicalCard(), playerId, "Choose characters to wound", minimum, maximum, filters); + super((action.getActionSource() != null) ? action.getActionSource().getPhysicalCard() : null, playerId, "Choose characters to wound", minimum, maximum, filters); _action = action; _count = count; } @@ -44,7 +44,8 @@ public class ChooseAndWoundCharactersEffect extends ChooseActiveCardsEffect { protected void cardsSelected(LotroGame game, Collection cards) { SubAction subAction = new SubAction(_action); for (int i = 0; i < _count; i++) { - WoundCharactersEffect woundEffect = new WoundCharactersEffect(_action.getActionSource().getPhysicalCard(), Filters.in(cards)); + PhysicalCard source = (_action.getActionSource() != null) ? _action.getActionSource().getPhysicalCard() : null; + WoundCharactersEffect woundEffect = new WoundCharactersEffect(source, Filters.in(cards)); if (_sourceText != null) woundEffect.setSourceText(_sourceText); subAction.appendEffect(woundEffect); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroServer.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroServer.java index c4e786975..856f87893 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroServer.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroServer.java @@ -45,21 +45,29 @@ public class LotroServer extends AbstractServer { _chatServer = chatServer; _test = test; _defaultCollection = new DefaultCardCollection(library); - for (int i = 1; i <= 10; i++) { - for (int j = 1; j <= 365; j++) { - String blueprintId = i + "_" + j; - try { - LotroCardBlueprint cardBlueprint = _lotroCardBlueprintLibrary.getLotroCardBlueprint(blueprintId); - CardType cardType = cardBlueprint.getCardType(); - if (cardType == CardType.SITE || cardType == CardType.THE_ONE_RING) - _defaultCollection.addCards(blueprintId, cardBlueprint, 1); - else - _defaultCollection.addCards(blueprintId, cardBlueprint, 4); - } catch (IllegalArgumentException exp) { + Thread thr = new Thread( + new Runnable() { + public void run() { + for (int i = 1; i <= 10; i++) { + for (int j = 1; j <= 365; j++) { + String blueprintId = i + "_" + j; + try { + LotroCardBlueprint cardBlueprint = _lotroCardBlueprintLibrary.getLotroCardBlueprint(blueprintId); + CardType cardType = cardBlueprint.getCardType(); + if (cardType == CardType.SITE || cardType == CardType.THE_ONE_RING) + _defaultCollection.addCards(blueprintId, cardBlueprint, 1); + else + _defaultCollection.addCards(blueprintId, cardBlueprint, 4); + } catch (IllegalArgumentException exp) { + + } + } + } + } } - } - } + ); + thr.start(); _playerDao = new PlayerDAO(dbAccess); _deckDao = new DeckDAO(dbAccess); diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/ArcheryAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/ArcheryAtTest.java new file mode 100644 index 000000000..e5a419edd --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/ArcheryAtTest.java @@ -0,0 +1,57 @@ +package com.gempukku.lotro.at; + +import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.common.Zone; +import com.gempukku.lotro.game.PhysicalCardImpl; +import com.gempukku.lotro.logic.decisions.AwaitingDecision; +import com.gempukku.lotro.logic.decisions.AwaitingDecisionType; +import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException; +import static junit.framework.Assert.assertEquals; +import org.junit.Test; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +public class ArcheryAtTest extends AbstractAtTest { + @Test + public void archeryWorksBothWays() throws DecisionResultInvalidException { + Map> extraCards = new HashMap>(); + initializeSimplestGame(extraCards); + + PhysicalCardImpl legolas = new PhysicalCardImpl(100, "1_51", P1, _library.getLotroCardBlueprint("1_51")); + PhysicalCardImpl archerMinion = new PhysicalCardImpl(101, "4_138", P2, _library.getLotroCardBlueprint("4_138")); + + skipMulligans(); + + _game.getGameState().addCardToZone(_game, legolas, Zone.FREE_CHARACTERS); + + // End fellowship phase + assertEquals(Phase.FELLOWSHIP, _game.getGameState().getCurrentPhase()); + playerDecided(P1, ""); + + _game.getGameState().addCardToZone(_game, archerMinion, Zone.SHADOW_CHARACTERS); + + // End shadow phase + assertEquals(Phase.SHADOW, _game.getGameState().getCurrentPhase()); + playerDecided(P2, ""); + + // End maneuver phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + // End archery phase + playerDecided(P1, ""); + playerDecided(P2, ""); + + AwaitingDecision archeryWoundDecision = _userFeedback.getAwaitingDecision(P1); + assertEquals(AwaitingDecisionType.CARD_SELECTION, archeryWoundDecision.getDecisionType()); + assertEquals(2, ((String[]) archeryWoundDecision.getDecisionParameters().get("cardId")).length); + + playerDecided(P1, String.valueOf(legolas.getCardId())); + + assertEquals(1, _game.getGameState().getWounds(legolas)); + assertEquals(1, _game.getGameState().getWounds(archerMinion)); + assertEquals(Phase.ASSIGNMENT, _game.getGameState().getCurrentPhase()); + } +}