Fixed Barrows of Edoras not working. Also fixed PutCardsFromXonTop/BottomOfDeck not iterating properly in the choice window.
This commit is contained in:
@@ -753,6 +753,13 @@
|
||||
{
|
||||
type: activated
|
||||
phase: fellowship
|
||||
requires: {
|
||||
type: IsGreaterThan
|
||||
firstNumber: {
|
||||
type: ForEachInHand
|
||||
}
|
||||
secondNumber: 0
|
||||
}
|
||||
effect: [
|
||||
{
|
||||
type: putCardsFromHandOnBottomOfDeck
|
||||
|
||||
@@ -83,7 +83,6 @@ public class EffectAppenderFactory {
|
||||
effectAppenderProducers.put("filtercardsinmemory", new FilterCardsInMemory());
|
||||
effectAppenderProducers.put("getcardsfromtopofdeck", new GetCardsFromTopOfDeck());
|
||||
effectAppenderProducers.put("heal", new Heal());
|
||||
effectAppenderProducers.put("if", new IfEffect());
|
||||
effectAppenderProducers.put("incrementperphaselimit", new IncrementPerPhaseLimit());
|
||||
effectAppenderProducers.put("incrementperturnlimit", new IncrementPerTurnLimit());
|
||||
effectAppenderProducers.put("incrementtoil", new IncrementToil());
|
||||
|
||||
@@ -47,7 +47,9 @@ public class PutCardsFromDeckOnBottomOfDeck implements EffectAppenderProducer {
|
||||
protected void cardsSelected(LotroGame game, Collection<PhysicalCard> selectedCards) {
|
||||
PhysicalCard card = selectedCards.iterator().next();
|
||||
// Removed from remaining
|
||||
cards.remove(card);
|
||||
for(var effect : result) {
|
||||
((ChooseArbitraryCardsEffect)effect).removeCard(card);
|
||||
}
|
||||
|
||||
GameState gameState = game.getGameState();
|
||||
if (reveal) {
|
||||
|
||||
@@ -47,7 +47,9 @@ public class PutCardsFromDeckOnTopOfDeck implements EffectAppenderProducer {
|
||||
protected void cardsSelected(LotroGame game, Collection<PhysicalCard> selectedCards) {
|
||||
PhysicalCard card = selectedCards.iterator().next();
|
||||
// Removed from remaining
|
||||
cards.remove(card);
|
||||
for(var effect : result) {
|
||||
((ChooseArbitraryCardsEffect)effect).removeCard(card);
|
||||
}
|
||||
|
||||
GameState gameState = game.getGameState();
|
||||
if (reveal) {
|
||||
|
||||
@@ -46,7 +46,9 @@ public class PutCardsFromDiscardOnBottomOfDeck implements EffectAppenderProducer
|
||||
protected void cardsSelected(LotroGame game, Collection<PhysicalCard> selectedCards) {
|
||||
PhysicalCard card = selectedCards.iterator().next();
|
||||
// Removed from remaining
|
||||
cards.remove(card);
|
||||
for(var effect : result) {
|
||||
((ChooseArbitraryCardsEffect)effect).removeCard(card);
|
||||
}
|
||||
|
||||
GameState gameState = game.getGameState();
|
||||
gameState.sendMessage(card.getOwner() + " puts " + GameUtils.getCardLink(card) + " from discard on the bottom of deck");
|
||||
|
||||
@@ -46,7 +46,9 @@ public class PutCardsFromDiscardOnTopOfDeck implements EffectAppenderProducer {
|
||||
protected void cardsSelected(LotroGame game, Collection<PhysicalCard> selectedCards) {
|
||||
PhysicalCard card = selectedCards.iterator().next();
|
||||
// Removed from remaining
|
||||
cards.remove(card);
|
||||
for(var effect : result) {
|
||||
((ChooseArbitraryCardsEffect)effect).removeCard(card);
|
||||
}
|
||||
|
||||
GameState gameState = game.getGameState();
|
||||
gameState.sendMessage(card.getOwner() + " puts " + GameUtils.getCardLink(card) + " from discard on the top of deck");
|
||||
|
||||
@@ -49,7 +49,9 @@ public class PutCardsFromHandOnBottomOfDeck implements EffectAppenderProducer {
|
||||
protected void cardsSelected(LotroGame game, Collection<PhysicalCard> selectedCards) {
|
||||
PhysicalCard card = selectedCards.iterator().next();
|
||||
// Removed from remaining
|
||||
cards.remove(card);
|
||||
for(var effect : result) {
|
||||
((ChooseArbitraryCardsEffect)effect).removeCard(card);
|
||||
}
|
||||
|
||||
GameState gameState = game.getGameState();
|
||||
if (reveal) {
|
||||
|
||||
@@ -50,7 +50,9 @@ public class PutCardsFromHandOnTopOfDeck implements EffectAppenderProducer {
|
||||
protected void cardsSelected(LotroGame game, Collection<PhysicalCard> selectedCards) {
|
||||
PhysicalCard card = selectedCards.iterator().next();
|
||||
// Removed from remaining
|
||||
cards.remove(card);
|
||||
for(var effect : result) {
|
||||
((ChooseArbitraryCardsEffect)effect).removeCard(card);
|
||||
}
|
||||
|
||||
GameState gameState = game.getGameState();
|
||||
if (reveal) {
|
||||
|
||||
@@ -47,7 +47,9 @@ public class PutCardsFromPlayOnBottomOfDeck implements EffectAppenderProducer {
|
||||
protected void cardsSelected(LotroGame game, Collection<PhysicalCard> selectedCards) {
|
||||
PhysicalCard card = selectedCards.iterator().next();
|
||||
// Removed from remaining
|
||||
cards.remove(card);
|
||||
for(var effect : result) {
|
||||
((ChooseArbitraryCardsEffect)effect).removeCard(card);
|
||||
}
|
||||
|
||||
GameState gameState = game.getGameState();
|
||||
gameState.sendMessage(card.getOwner() + " puts " + GameUtils.getCardLink(card) + " from play on the bottom of deck");
|
||||
|
||||
@@ -47,7 +47,9 @@ public class PutCardsFromPlayOnTopOfDeck implements EffectAppenderProducer {
|
||||
protected void cardsSelected(LotroGame game, Collection<PhysicalCard> selectedCards) {
|
||||
PhysicalCard card = selectedCards.iterator().next();
|
||||
// Removed from remaining
|
||||
cards.remove(card);
|
||||
for(var effect : result) {
|
||||
((ChooseArbitraryCardsEffect)effect).removeCard(card);
|
||||
}
|
||||
|
||||
GameState gameState = game.getGameState();
|
||||
gameState.sendMessage(card.getOwner() + " puts " + GameUtils.getCardLink(card) + " from play on the top of deck");
|
||||
|
||||
@@ -497,7 +497,7 @@ public class GameState {
|
||||
if (assignment.getFellowshipCharacter() == card)
|
||||
removeAssignment(assignment);
|
||||
if (assignment.getShadowCharacters().remove(card))
|
||||
if (assignment.getShadowCharacters().size() == 0)
|
||||
if (assignment.getShadowCharacters().isEmpty())
|
||||
removeAssignment(assignment);
|
||||
}
|
||||
|
||||
@@ -534,7 +534,7 @@ public class GameState {
|
||||
if (end)
|
||||
zoneCards.add((PhysicalCardImpl) card);
|
||||
else
|
||||
zoneCards.add(0, (PhysicalCardImpl) card);
|
||||
zoneCards.addFirst((PhysicalCardImpl) card);
|
||||
|
||||
if (card.getZone() != null)
|
||||
_log.error("Card was in " + card.getZone() + " when tried to add to zone: " + zone);
|
||||
|
||||
@@ -87,5 +87,9 @@ public abstract class ChooseArbitraryCardsEffect extends AbstractEffect {
|
||||
return new FullEffectResult(success);
|
||||
}
|
||||
|
||||
public void removeCard(PhysicalCard card) {
|
||||
_cards.remove(card);
|
||||
}
|
||||
|
||||
protected abstract void cardsSelected(LotroGame game, Collection<PhysicalCard> selectedCards);
|
||||
}
|
||||
|
||||
@@ -17,10 +17,38 @@ public class Card_04_337_Tests
|
||||
return new GenericCardTestHelper(
|
||||
new HashMap<>()
|
||||
{{
|
||||
put("card", "4_337");
|
||||
// put other cards in here as needed for the test case
|
||||
put("fodder01", "5_1");
|
||||
put("fodder02", "5_2");
|
||||
put("fodder03", "5_3");
|
||||
put("fodder04", "5_4");
|
||||
put("fodder05", "5_5");
|
||||
put("fodder06", "5_6");
|
||||
put("fodder07", "5_7");
|
||||
put("fodder08", "5_8");
|
||||
put("fodder09", "5_9");
|
||||
put("fodder10", "5_10");
|
||||
put("fodder11", "5_11");
|
||||
put("fodder12", "5_12");
|
||||
put("fodder13", "5_13");
|
||||
put("fodder14", "5_14");
|
||||
put("fodder15", "5_15");
|
||||
put("fodder16", "5_16");
|
||||
put("fodder17", "5_17");
|
||||
put("fodder18", "5_18");
|
||||
put("fodder19", "5_19");
|
||||
put("fodder20", "5_20");
|
||||
}},
|
||||
new HashMap<>() {{
|
||||
put("site1", "1_319");
|
||||
put("site2", "1_327");
|
||||
put("site3", "4_337");
|
||||
put("site4", "1_343");
|
||||
put("site5", "1_349");
|
||||
put("site6", "101_61");
|
||||
put("site7", "3_118");
|
||||
put("site8", "1_356");
|
||||
put("site9", "1_360");
|
||||
}},
|
||||
GenericCardTestHelper.FellowshipSites,
|
||||
GenericCardTestHelper.FOTRFrodo,
|
||||
GenericCardTestHelper.RulingRing
|
||||
);
|
||||
@@ -45,8 +73,8 @@ public class Card_04_337_Tests
|
||||
var scn = GetScenario();
|
||||
|
||||
//Use this once you have set the deck up properly
|
||||
//var card = scn.GetFreepsSite(3);
|
||||
var card = scn.GetFreepsCard("card");
|
||||
var card = scn.GetFreepsSite(3);
|
||||
//var card = scn.GetFreepsCard("barrows");
|
||||
|
||||
assertEquals("Barrows of Edoras", card.getBlueprint().getTitle());
|
||||
assertNull(card.getBlueprint().getSubtitle());
|
||||
@@ -57,18 +85,93 @@ public class Card_04_337_Tests
|
||||
assertEquals(3, card.getBlueprint().getSiteNumber());
|
||||
}
|
||||
|
||||
// Uncomment any @Test markers below once this is ready to be used
|
||||
//@Test
|
||||
public void BarrowsofEdorasTest1() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
@Test
|
||||
public void BarrowsofEdorasAbilityPutsCardsOnBottomOfDeckAndDraws4TheFirstTimeItIsActivated() throws DecisionResultInvalidException, CardNotFoundException {
|
||||
//Pre-game setup
|
||||
var scn = GetScenario();
|
||||
|
||||
var card = scn.GetFreepsCard("card");
|
||||
scn.FreepsMoveCardToHand(card);
|
||||
var barrows = scn.GetShadowSite(3);
|
||||
|
||||
var fodder01 = scn.GetFreepsCard("fodder01");
|
||||
var fodder02 = scn.GetFreepsCard("fodder02");
|
||||
var fodder03 = scn.GetFreepsCard("fodder03");
|
||||
var fodder04 = scn.GetFreepsCard("fodder04");
|
||||
var fodder05 = scn.GetFreepsCard("fodder05");
|
||||
var fodder06 = scn.GetFreepsCard("fodder06");
|
||||
var fodder07 = scn.GetFreepsCard("fodder07");
|
||||
var fodder08 = scn.GetFreepsCard("fodder08");
|
||||
var fodder09 = scn.GetFreepsCard("fodder09");
|
||||
var fodder10 = scn.GetFreepsCard("fodder10");
|
||||
var fodder11 = scn.GetFreepsCard("fodder11");
|
||||
var fodder12 = scn.GetFreepsCard("fodder12");
|
||||
var fodder13 = scn.GetFreepsCard("fodder13");
|
||||
var fodder14 = scn.GetFreepsCard("fodder14");
|
||||
var fodder15 = scn.GetFreepsCard("fodder15");
|
||||
var fodder16 = scn.GetFreepsCard("fodder16");
|
||||
var fodder17 = scn.GetFreepsCard("fodder17");
|
||||
var fodder18 = scn.GetFreepsCard("fodder18");
|
||||
var fodder19 = scn.GetFreepsCard("fodder19");
|
||||
var fodder20 = scn.GetFreepsCard("fodder20");
|
||||
|
||||
scn.FreepsMoveCardToHand(fodder01, fodder02, fodder03, fodder04, fodder05, fodder06, fodder07, fodder08);
|
||||
scn.FreepsMoveCardsToTopOfDeck(fodder20, fodder19, fodder18, fodder17, fodder16, fodder15, fodder14, fodder13, fodder12, fodder11, fodder10, fodder09);
|
||||
|
||||
scn.StartGame();
|
||||
scn.FreepsPlayCard(card);
|
||||
|
||||
assertEquals(0, scn.GetTwilight());
|
||||
assertEquals(8, scn.GetFreepsHandCount());
|
||||
|
||||
scn.SkipToSite(3);
|
||||
|
||||
assertEquals(Phase.FELLOWSHIP, scn.GetCurrentPhase());
|
||||
assertEquals(3, (long)scn.GetCurrentSite().getSiteNumber());
|
||||
|
||||
assertTrue(scn.FreepsActionAvailable(barrows));
|
||||
|
||||
scn.FreepsUseCardAction(barrows);
|
||||
|
||||
scn.FreepsChooseCardBPFromSelection(fodder08);
|
||||
scn.FreepsChooseCardBPFromSelection(fodder07);
|
||||
scn.FreepsChooseCardBPFromSelection(fodder06);
|
||||
scn.FreepsChooseCardBPFromSelection(fodder05);
|
||||
scn.FreepsChooseCardBPFromSelection(fodder04);
|
||||
scn.FreepsChooseCardBPFromSelection(fodder03);
|
||||
scn.FreepsChooseCardBPFromSelection(fodder02);
|
||||
//No player choice for the last card as Gemp performs a choice of 1 automatically
|
||||
|
||||
assertEquals(scn.GetFromBottomOfFreepsDeck(1), fodder01);
|
||||
assertEquals(scn.GetFromBottomOfFreepsDeck(2), fodder02);
|
||||
assertEquals(scn.GetFromBottomOfFreepsDeck(3), fodder03);
|
||||
assertEquals(scn.GetFromBottomOfFreepsDeck(4), fodder04);
|
||||
assertEquals(scn.GetFromBottomOfFreepsDeck(5), fodder05);
|
||||
assertEquals(scn.GetFromBottomOfFreepsDeck(6), fodder06);
|
||||
assertEquals(scn.GetFromBottomOfFreepsDeck(7), fodder07);
|
||||
assertEquals(scn.GetFromBottomOfFreepsDeck(8), fodder08);
|
||||
|
||||
assertEquals(4, scn.GetFreepsHandCount());
|
||||
assertEquals(Zone.HAND, fodder09.getZone());
|
||||
assertEquals(Zone.HAND, fodder10.getZone());
|
||||
assertEquals(Zone.HAND, fodder11.getZone());
|
||||
assertEquals(Zone.HAND, fodder12.getZone());
|
||||
|
||||
//Do it again, Sam
|
||||
|
||||
assertTrue(scn.FreepsActionAvailable(barrows));
|
||||
|
||||
scn.FreepsUseCardAction(barrows);
|
||||
|
||||
scn.FreepsChooseCardBPFromSelection(fodder12);
|
||||
scn.FreepsChooseCardBPFromSelection(fodder11);
|
||||
scn.FreepsChooseCardBPFromSelection(fodder10);
|
||||
//No player choice for the last card as Gemp performs a choice of 1 automatically
|
||||
|
||||
assertEquals(scn.GetFromBottomOfFreepsDeck(1), fodder09);
|
||||
assertEquals(scn.GetFromBottomOfFreepsDeck(2), fodder10);
|
||||
assertEquals(scn.GetFromBottomOfFreepsDeck(3), fodder11);
|
||||
assertEquals(scn.GetFromBottomOfFreepsDeck(4), fodder12);
|
||||
|
||||
//Psyche! Rule of 4 means you can only really do this once
|
||||
assertEquals(0, scn.GetFreepsHandCount());
|
||||
|
||||
assertFalse(scn.FreepsActionAvailable(barrows));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user