From 4334cd38dbcd42f4670d78a822958b7e6cd3cec8 Mon Sep 17 00:00:00 2001 From: PhallenCassidy Date: Wed, 12 Sep 2018 11:08:53 -0400 Subject: [PATCH 01/17] Added chat call for 1R147 "Uruk Guard" Now announces which companion cannot be assigned to skirmish Uruk Guard --- .../java/com/gempukku/lotro/cards/set1/isengard/Card1_147.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_147.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_147.java index 66abb9333..9257cc680 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_147.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_147.java @@ -8,6 +8,7 @@ import com.gempukku.lotro.cards.modifiers.CantBeAssignedAgainstModifier; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.ActivateCardAction; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; @@ -47,6 +48,7 @@ public class Card1_147 extends AbstractMinion { action.appendEffect( new AddUntilEndOfPhaseModifierEffect( new CantBeAssignedAgainstModifier(self, Side.FREE_PEOPLE, Filters.sameCard(companion), self))); + game.getGameState().sendMessage(self.getOwner() +" has chosen "+ companion.getBlueprint().getName()); } }); return Collections.singletonList(action); From 2f5cc577ef82a3621432d131509225b30d174c49 Mon Sep 17 00:00:00 2001 From: PhallenCassidy Date: Wed, 12 Sep 2018 11:11:33 -0400 Subject: [PATCH 02/17] Fix to 1U211 "Drawn to Its Power" Previously, burdens would be added if the Ring-bearer died (triggering exertions from Gates of the Dead) even though "burdens are only placed on your Ring-bearer." --- .../java/com/gempukku/lotro/cards/set1/wraith/Card1_211.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_211.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_211.java index 25d7f4bcd..77406fa15 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_211.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_211.java @@ -4,6 +4,7 @@ import com.gempukku.lotro.cards.AbstractPermanent; import com.gempukku.lotro.cards.TriggerConditions; import com.gempukku.lotro.cards.effects.AddBurdenEffect; import com.gempukku.lotro.common.*; +import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.RequiredTriggerAction; @@ -28,7 +29,7 @@ public class Card1_211 extends AbstractPermanent { @Override public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (TriggerConditions.forEachKilledInASkirmish(game, effectResult, Race.NAZGUL, CardType.COMPANION)) { + if (TriggerConditions.forEachKilledInASkirmish(game, effectResult, Race.NAZGUL, CardType.COMPANION, Filters.not(Filters.ringBearer))) { RequiredTriggerAction action = new RequiredTriggerAction(self); action.appendEffect( new AddBurdenEffect(self.getOwner(), self, 1)); From 87cb36510aafa8c79873f4c70eb990aaa9c089d9 Mon Sep 17 00:00:00 2001 From: PhallenCassidy Date: Wed, 12 Sep 2018 11:12:46 -0400 Subject: [PATCH 03/17] Fix to 6P122 "The Witch-king, Deathless Lord" Can now wound an ally once if and only if all companions are exhausted and no ally can be wounded twice --- .../lotro/cards/set6/wraith/Card6_122.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/wraith/Card6_122.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/wraith/Card6_122.java index d5413a409..c82912405 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/wraith/Card6_122.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/wraith/Card6_122.java @@ -5,6 +5,7 @@ import com.gempukku.lotro.cards.TriggerConditions; import com.gempukku.lotro.cards.effects.ChoiceEffect; import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect; import com.gempukku.lotro.common.*; +import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.RequiredTriggerAction; @@ -39,13 +40,20 @@ public class Card6_122 extends AbstractMinion { if (TriggerConditions.forEachKilledInASkirmish(game, effectResult, Race.NAZGUL, CardType.COMPANION)) { RequiredTriggerAction action = new RequiredTriggerAction(self); List possibleEffects = new LinkedList(); - possibleEffects.add( - new ChooseAndWoundCharactersEffect(action, self.getOwner(), 1, 1, 2, CardType.ALLY) { - @Override - public String getText(LotroGame game) { - return "Wound an ally twice"; - } - }); + if (Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), + CardType.ALLY, Filters.moreVitalityThan(1))) { + possibleEffects.add( + new ChooseAndWoundCharactersEffect(action, self.getOwner(), 1, 1, 2, CardType.ALLY) { + @Override + public String getText(LotroGame game) { + return "Wound an ally twice"; + } + }); + } else if (!Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), + CardType.COMPANION, Filters.moreVitalityThan(1))) { + possibleEffects.add( + new ChooseAndWoundCharactersEffect(action, self.getOwner(), 1, 1, 1, CardType.ALLY)); + } possibleEffects.add( new ChooseAndExertCharactersEffect(action, self.getOwner(), 1, 1, CardType.COMPANION) { @Override From ccfe676b78ee6bb867b3f5fd54e2b7462c5a9af9 Mon Sep 17 00:00:00 2001 From: PhallenCassidy Date: Wed, 12 Sep 2018 11:13:51 -0400 Subject: [PATCH 04/17] Fix to 8R20 "Saved From the Fire" Can no longer target the Ring-bearer, per card text --- .../java/com/gempukku/lotro/cards/set8/gandalf/Card8_020.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/gandalf/Card8_020.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/gandalf/Card8_020.java index 0777d46cc..1a0ddc887 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/gandalf/Card8_020.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/gandalf/Card8_020.java @@ -39,7 +39,7 @@ public class Card8_020 extends AbstractEvent { public PlayEventAction getPlayCardAction(final String playerId, LotroGame game, PhysicalCard self, int twilightModifier, boolean ignoreRoamingPenalty) { final PlayEventAction action = new PlayEventAction(self); action.appendCost( - new ChooseActiveCardEffect(self, playerId, "Choose a companion", CardType.COMPANION) { + new ChooseActiveCardEffect(self, playerId, "Choose a companion", CardType.COMPANION, Filters.not(Filters.ringBearer)) { @Override protected void cardSelected(LotroGame game, final PhysicalCard card) { action.insertCost( From 7e2dc152cae62ed642cfefc2b0cd64ad67137937 Mon Sep 17 00:00:00 2001 From: PhallenCassidy Date: Wed, 12 Sep 2018 11:15:00 -0400 Subject: [PATCH 05/17] Added chat call for 10R23 "Shelob, Her Ladyship" Now announces which companion cannot be assigned to skirmishes --- .../java/com/gempukku/lotro/cards/set10/gollum/Card10_023.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/gollum/Card10_023.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/gollum/Card10_023.java index 6d3e1ccd5..7aca75c14 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/gollum/Card10_023.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/gollum/Card10_023.java @@ -10,6 +10,7 @@ import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Race; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.OptionalTriggerAction; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; @@ -50,6 +51,7 @@ public class Card10_023 extends AbstractMinion { action.appendEffect( new AddUntilEndOfTurnModifierEffect( new CantBeAssignedToSkirmishModifier(self, card))); + game.getGameState().sendMessage(self.getOwner() +" has chosen "+ card.getBlueprint().getName()); } }); return Collections.singletonList(action); From d91efbae5c7be704bf5ddaa056d0abefe5e5d8a2 Mon Sep 17 00:00:00 2001 From: PhallenCassidy Date: Wed, 12 Sep 2018 11:16:03 -0400 Subject: [PATCH 06/17] Fix to 10R112 "Nine-fingered Frodo and the Ring of Doom" Can now remove one threat if and only if there are no burdens and not two threats --- .../lotro/cards/set10/shire/Card10_112.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/shire/Card10_112.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/shire/Card10_112.java index f85bed16f..c2a1c3510 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/shire/Card10_112.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/shire/Card10_112.java @@ -47,13 +47,18 @@ public class Card10_112 extends AbstractEvent { List possibleEffects = new LinkedList(); possibleEffects.add( new RemoveBurdenEffect(playerId, self)); - possibleEffects.add( - new RemoveThreatsEffect(self, 2) { - @Override - public String getText(LotroGame game) { - return "Remove 2 threats"; - } - }); + if (game.getGameState().getThreats() > 1) { + possibleEffects.add( + new RemoveThreatsEffect(self, 2) { + @Override + public String getText(LotroGame game) { + return "Remove 2 threats"; + } + }); + } else if (game.getGameState().getBurdens() == 0) { + possibleEffects.add( + new RemoveThreatsEffect(self, 1)); + } action.appendEffect( new ChoiceEffect(action, playerId, possibleEffects)); return action; From a9287a8555e44c5ed6fd14f7a329d795e8f48650 Mon Sep 17 00:00:00 2001 From: PhallenCassidy Date: Wed, 12 Sep 2018 11:17:05 -0400 Subject: [PATCH 07/17] Added chat call for 11R50 "Safe Passage" Now announces which keyword is named --- .../com/gempukku/lotro/cards/set11/gollum/Card11_050.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/gollum/Card11_050.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/gollum/Card11_050.java index 991c15259..d73194f84 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/gollum/Card11_050.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/gollum/Card11_050.java @@ -8,6 +8,7 @@ import com.gempukku.lotro.cards.effects.choose.ChooseAndExertCharactersEffect; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.OptionalTriggerAction; import com.gempukku.lotro.logic.actions.RequiredTriggerAction; @@ -33,7 +34,7 @@ public class Card11_050 extends AbstractPermanent { } @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, final PhysicalCard self) { + public List getRequiredAfterTriggers(final LotroGame game, EffectResult effectResult, final PhysicalCard self) { if (TriggerConditions.played(game, effectResult, self)) { RequiredTriggerAction action = new RequiredTriggerAction(self); action.appendEffect( @@ -49,6 +50,8 @@ public class Card11_050 extends AbstractPermanent { self.setWhileInZoneData(Keyword.PLAINS); else self.setWhileInZoneData(Keyword.RIVER); + + game.getGameState().sendMessage(self.getOwner() +" has chosen "+ result); } })); return Collections.singletonList(action); From d3a7844e93fc7fe230331a53a06b71980ce6cbad Mon Sep 17 00:00:00 2001 From: PhallenCassidy Date: Wed, 12 Sep 2018 11:18:19 -0400 Subject: [PATCH 08/17] Added chat call for 12R54 "Saruman, Of Many Colours" Now announces which culture's companions are strength -1 --- .../com/gempukku/lotro/cards/set12/isengard/Card12_054.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/isengard/Card12_054.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/isengard/Card12_054.java index 20f3ddc59..1bebbba03 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/isengard/Card12_054.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/isengard/Card12_054.java @@ -63,7 +63,7 @@ public class Card12_054 extends AbstractMinion { } @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, final PhysicalCard self) { + public List getRequiredAfterTriggers(final LotroGame game, EffectResult effectResult, final PhysicalCard self) { if (TriggerConditions.played(game, effectResult, self)) { RequiredTriggerAction action = new RequiredTriggerAction(self); @@ -78,6 +78,7 @@ public class Card12_054 extends AbstractMinion { @Override protected void validDecisionMade(int index, String result) { self.setWhileInZoneData(Culture.findCultureByHumanReadable(result)); + game.getGameState().sendMessage(self.getOwner() +" has chosen "+ result); } })); return Collections.singletonList(action); From d6df21c5eae86975cb21f599489fc1500961d9b9 Mon Sep 17 00:00:00 2001 From: PhallenCassidy Date: Wed, 12 Sep 2018 11:19:04 -0400 Subject: [PATCH 09/17] Added chat call for 12R156 "Uruk-hai Guard" Now announces which companion cannot be assigned to skirmish Uruk-Hai Guard --- .../com/gempukku/lotro/cards/set12/uruk_hai/Card12_156.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/uruk_hai/Card12_156.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/uruk_hai/Card12_156.java index 8c03b2bf3..2236d8014 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/uruk_hai/Card12_156.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/uruk_hai/Card12_156.java @@ -7,6 +7,7 @@ import com.gempukku.lotro.cards.effects.SelfExertEffect; import com.gempukku.lotro.cards.modifiers.CantBeAssignedAgainstModifier; import com.gempukku.lotro.common.*; import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.ActivateCardAction; import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect; @@ -48,6 +49,7 @@ public class Card12_156 extends AbstractMinion { action.appendEffect( new AddUntilEndOfPhaseModifierEffect( new CantBeAssignedAgainstModifier(self, Side.FREE_PEOPLE, card, self))); + game.getGameState().sendMessage(self.getOwner() +" has chosen "+ card.getBlueprint().getName()); } }); return Collections.singletonList(action); From ef755dabc10354d9a1dbd72dcf18251da5de4298 Mon Sep 17 00:00:00 2001 From: PhallenCassidy Date: Wed, 12 Sep 2018 11:19:55 -0400 Subject: [PATCH 10/17] Minor fix to 15R117 "Tower Troll" Prevention text now properly populates --- .../lotro/cards/set15/orc/Card15_117.java | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/orc/Card15_117.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/orc/Card15_117.java index 107a5ac12..9433a7f9e 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/orc/Card15_117.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set15/orc/Card15_117.java @@ -56,23 +56,28 @@ public class Card15_117 extends AbstractMinion { new SelfExertEffect(action, self)); action.appendEffect( new ChooseActiveCardEffect(self, playerId, "Choose companion", CardType.COMPANION, Filters.not(Filters.ringBearer), Filters.assignableToSkirmishAgainst(Side.SHADOW, self)) { - @Override - protected void cardSelected(LotroGame game, PhysicalCard companion) { - if (PlayConditions.canSpot(game, 6, CardType.COMPANION)) - action.appendEffect( - new AssignmentEffect(playerId, companion, self)); - else - action.appendEffect( - new PreventableEffect(action, - new AssignmentEffect(playerId, companion, self), game.getGameState().getCurrentPlayerId(), - new PreventableEffect.PreventionCost() { - @Override - public Effect createPreventionCostForPlayer(SubAction subAction, String playerId) { - return new ChooseAndExertCharactersEffect(action, playerId, 1, 1, CardType.COMPANION); - } - })); - } - }); + @Override + protected void cardSelected(LotroGame game, PhysicalCard companion) { + if (PlayConditions.canSpot(game, 6, CardType.COMPANION)) + action.appendEffect( + new AssignmentEffect(playerId, companion, self)); + else + action.appendEffect( + new PreventableEffect(action, + new AssignmentEffect(playerId, companion, self), game.getGameState().getCurrentPlayerId(), + new PreventableEffect.PreventionCost() { + @Override + public Effect createPreventionCostForPlayer(SubAction subAction, String playerId) { + return new ChooseAndExertCharactersEffect(action, playerId, 1, 1, CardType.COMPANION) { + @Override + public String getText(LotroGame game) { + return "Exert a companion"; + } + }; + } + })); + } + }); return Collections.singletonList(action); } return null; From 8134335f8b41422949b0b4616608a2289ae57532 Mon Sep 17 00:00:00 2001 From: PhallenCassidy Date: Wed, 12 Sep 2018 11:26:35 -0400 Subject: [PATCH 11/17] Semi-Fix for The Hobbit League Right now, cards from The Hobbit Draft League (and only that league) disappear the next server day. I have no idea why only The Hobbit was affected. Adding this code back in allows the collection to stay until the next server reset, FotR and TTT still persist through resets. Should at least allow the league to be playable. --- .../gempukku/lotro/league/SoloDraftLeagueData.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SoloDraftLeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SoloDraftLeagueData.java index 52fbb4a2f..e4f8029f1 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SoloDraftLeagueData.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SoloDraftLeagueData.java @@ -86,10 +86,20 @@ public class SoloDraftLeagueData implements LeagueData { @Override public int process(CollectionsManager collectionsManager, List leagueStandings, int oldStatus, int currentTime) { int status = oldStatus; - + + if (status == 0) { + Map map = collectionsManager.getPlayersCollection(_collectionType.getCode()); + for (Map.Entry playerCardCollectionEntry : map.entrySet()) { + Player player = playerCardCollectionEntry.getKey(); + CardCollection leagueProduct = _draft.initializeNewCollection(getSeed(player)); + collectionsManager.addItemsToPlayerCollection(false, "New sealed league product", player, _collectionType, leagueProduct.getAll().values()); + } + status = 1; + } + int maxGamesTotal = _serie.getMaxMatches(); - if (status == 0) { + if (status == 1) { if (currentTime > DateUtils.offsetDate(_serie.getEnd(), 1)) { for (PlayerStanding leagueStanding : leagueStandings) { CardCollection leaguePrize = _leaguePrizes.getPrizeForLeague(leagueStanding.getStanding(), leagueStandings.size(), leagueStanding.getGamesPlayed(), maxGamesTotal, _collectionType); From 9e450335aa41eb381d98afd0333ec03ddaf2ef7c Mon Sep 17 00:00:00 2001 From: PhallenCassidy Date: Wed, 12 Sep 2018 11:41:46 -0400 Subject: [PATCH 12/17] Fix to 6P122 "The Witch-king, Deathless Lord" Correctly allows The Witch-king to wound an ally with one vitality twice (for corner cases with wound prevention) if all Free Peoples characters are exhausted --- .../com/gempukku/lotro/cards/set6/wraith/Card6_122.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/wraith/Card6_122.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/wraith/Card6_122.java index c82912405..3c3447943 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/wraith/Card6_122.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/wraith/Card6_122.java @@ -10,6 +10,7 @@ import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.actions.RequiredTriggerAction; import com.gempukku.lotro.logic.effects.ChooseAndWoundCharactersEffect; +import com.gempukku.lotro.logic.effects.WoundCharactersEffect; import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.timing.EffectResult; @@ -52,7 +53,13 @@ public class Card6_122 extends AbstractMinion { } else if (!Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), CardType.COMPANION, Filters.moreVitalityThan(1))) { possibleEffects.add( - new ChooseAndWoundCharactersEffect(action, self.getOwner(), 1, 1, 1, CardType.ALLY)); + new ChooseAndWoundCharactersEffect(action, self.getOwner(), 1, 1, 1, CardType.ALLY) { + @Override + protected void woundedCardsCallback(Collection cards) { + for (PhysicalCard card : cards) + action.appendEffect(new WoundCharactersEffect(self, card)); + } + }); } possibleEffects.add( new ChooseAndExertCharactersEffect(action, self.getOwner(), 1, 1, CardType.COMPANION) { From 080906432d7e6ce86e262f75f6fb69fae4a9f7d3 Mon Sep 17 00:00:00 2001 From: PhallenCassidy Date: Wed, 12 Sep 2018 11:49:24 -0400 Subject: [PATCH 13/17] Update changeLog.html --- .../src/main/web/includes/changeLog.html | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html index 259bc5b2e..14141035a 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html +++ b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html @@ -1,5 +1,17 @@
 Most recent update
+- "Drawn to Its Power" can no longer adds burden if The Ring-Bearer was killed
+- "The Witch-king, Deathless Lord" can now wound an ally twice if all Free Peoples characters are exhausted
+- "Nine-fingered Frodo and the Ring of Doom" can now remove one threat if there is one threat and no burdens
+- "Saved from the Fire" can no longer target the Ring-Bearer
+- "Tower Troll" now has the correct prevention pop-up text
+- "Uruk Guard" and "Uruk-hai Guard" now announce the selected companion in chat
+- "Shelob, Her Ladyship" now announces the seclected companion in chat
+- "Safe Passage" now announces the selected keyword in chat
+- "Saruman, Of Many Colours" now announces the selected culture in chat
+- The Hobbit Draft League should no longer disappear from users' collections each server day
+
+21 June 2018
 - Added Draft for Fellowship block, The Two Towers block, and The Hobbit
 - Added prize support for Draft games
 - Users can now select what kind of foiling they want to see under the "Settings" tab in-game

From cc3bd2e09f9182c0c3147b3e6328444a32b5755a Mon Sep 17 00:00:00 2001
From: PhallenCassidy 
Date: Wed, 12 Sep 2018 11:53:15 -0400
Subject: [PATCH 14/17] Fix to 6P122 "The Witch-king, Deathless Lord"

Will allow The Witch-king to wound an ally twice if all Free Peoples characters are exhausted, and should compile as an added bonus
---
 .../java/com/gempukku/lotro/cards/set6/wraith/Card6_122.java    | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/wraith/Card6_122.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/wraith/Card6_122.java
index 3c3447943..fae3763ef 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/wraith/Card6_122.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/wraith/Card6_122.java
@@ -14,6 +14,8 @@ import com.gempukku.lotro.logic.effects.WoundCharactersEffect;
 import com.gempukku.lotro.logic.timing.Effect;
 import com.gempukku.lotro.logic.timing.EffectResult;
 
+
+import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;

From 572c0a6d5b44c66c79e38c6d455e6d348b6dbf2b Mon Sep 17 00:00:00 2001
From: "marcin.sciesinski" 
Date: Wed, 12 Sep 2018 19:26:53 -0700
Subject: [PATCH 15/17] Fixing issues with solo-drafts losing collections

---
 .../lotro/async/LotroHttpRequestHandler.java  |  7 +++--
 .../async/handler/AdminRequestHandler.java    |  2 +-
 .../async/handler/ChatRequestHandler.java     |  2 +-
 .../handler/CollectionRequestHandler.java     |  2 +-
 .../async/handler/DeckRequestHandler.java     |  2 +-
 .../async/handler/DeliveryRequestHandler.java |  2 +-
 .../handler/GameHistoryRequestHandler.java    |  2 +-
 .../async/handler/GameRequestHandler.java     |  8 ++---
 .../async/handler/LeagueRequestHandler.java   |  8 +++--
 .../async/handler/LoginRequestHandler.java    | 10 +++----
 .../async/handler/MerchantRequestHandler.java |  3 +-
 .../async/handler/MtgCardsRequestHandler.java | 16 +++++-----
 .../handler/PlayerStatsRequestHandler.java    |  3 +-
 .../async/handler/RegisterRequestHandler.java |  2 +-
 .../async/handler/ReplayRequestHandler.java   |  2 +-
 .../async/handler/RootUriRequestHandler.java  |  3 +-
 .../handler/ServerStatsRequestHandler.java    |  2 +-
 .../handler/SoloDraftRequestHandler.java      | 28 ++++++++++-------
 .../async/handler/StatusRequestHandler.java   |  3 +-
 .../handler/TournamentRequestHandler.java     |  2 +-
 .../async/handler/WebRequestHandler.java      | 27 ++++++++---------
 .../lotro/league/ConstructedLeagueData.java   |  6 ++++
 .../com/gempukku/lotro/league/LeagueData.java | 11 ++++---
 .../league/NewConstructedLeagueData.java      |  6 ++++
 .../lotro/league/NewSealedLeagueData.java     |  6 ++++
 .../lotro/league/SealedLeagueData.java        |  6 ++++
 .../lotro/league/SoloDraftLeagueData.java     | 30 +++++++++++--------
 27 files changed, 122 insertions(+), 79 deletions(-)

diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroHttpRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroHttpRequestHandler.java
index 2f5d6164b..1a2ff61e5 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroHttpRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/LotroHttpRequestHandler.java
@@ -74,7 +74,7 @@ public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler {
         }
 
         public void printLog(int statusCode, long finishedTime) {
-            _accesslog.debug(remoteIp+","+statusCode+","+uri+","+(finishedTime-requestTime));
+            _accesslog.debug(remoteIp + "," + statusCode + "," + uri + "," + (finishedTime - requestTime));
         }
     }
 
@@ -138,8 +138,9 @@ public class LotroHttpRequestHandler extends SimpleChannelUpstreamHandler {
             try {
                 String ipAddress = ((InetSocketAddress) e.getRemoteAddress()).getAddress().getHostAddress();
                 if (isBanned(ipAddress))
-                    throw new HttpProcessingException(404);
-                _uriRequestHandler.handleRequest(uri, request, _objects, responseWriter, e);
+                    responseWriter.writeError(404);
+                else
+                    _uriRequestHandler.handleRequest(uri, request, _objects, responseWriter, e);
             } catch (HttpProcessingException exp) {
                 responseWriter.writeError(exp.getStatus());
             } catch (Exception exp) {
diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/AdminRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/AdminRequestHandler.java
index e5d9c608c..35d1a9a98 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/AdminRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/AdminRequestHandler.java
@@ -97,7 +97,7 @@ public class AdminRequestHandler extends LotroServerRequestHandler implements Ur
         } else if (uri.equals("/findMultipleAccounts") && request.getMethod() == HttpMethod.POST) {
             findMultipleAccounts(request, responseWriter);
         } else {
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
         }
     }
 
diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/ChatRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/ChatRequestHandler.java
index 80dae8e55..4fb1d2618 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/ChatRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/ChatRequestHandler.java
@@ -44,7 +44,7 @@ public class ChatRequestHandler extends LotroServerRequestHandler implements Uri
         } else if (uri.startsWith("/") && request.getMethod() == HttpMethod.POST) {
             postMessages(request, URLDecoder.decode(uri.substring(1)), responseWriter);
         } else {
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
         }
     }
 
diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/CollectionRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/CollectionRequestHandler.java
index e6657e258..8c950c171 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/CollectionRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/CollectionRequestHandler.java
@@ -65,7 +65,7 @@ public class CollectionRequestHandler extends LotroServerRequestHandler implemen
         } else if (uri.startsWith("/") && request.getMethod() == HttpMethod.GET) {
             getCollection(request, uri.substring(1), responseWriter);
         } else {
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
         }
     }
 
diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/DeckRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/DeckRequestHandler.java
index 5c8d0547b..cfad0fc99 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/DeckRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/DeckRequestHandler.java
@@ -56,7 +56,7 @@ public class DeckRequestHandler extends LotroServerRequestHandler implements Uri
         } else if (uri.equals("/stats") && request.getMethod() == HttpMethod.POST) {
             getDeckStats(request, responseWriter);
         } else {
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
         }
     }
 
diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/DeliveryRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/DeliveryRequestHandler.java
index e77df04a3..6a7219841 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/DeliveryRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/DeliveryRequestHandler.java
@@ -29,7 +29,7 @@ public class DeliveryRequestHandler extends LotroServerRequestHandler implements
         if (uri.equals("") && request.getMethod() == HttpMethod.GET) {
             getDelivery(request, responseWriter);
         } else {
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
         }
     }
 
diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/GameHistoryRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/GameHistoryRequestHandler.java
index be4ada624..b47c490f1 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/GameHistoryRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/GameHistoryRequestHandler.java
@@ -81,7 +81,7 @@ public class GameHistoryRequestHandler extends LotroServerRequestHandler impleme
 
             responseWriter.writeXmlResponse(doc);
         } else {
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
         }
     }
 }
diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/GameRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/GameRequestHandler.java
index 321aa1226..5e2371dd7 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/GameRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/GameRequestHandler.java
@@ -60,7 +60,7 @@ public class GameRequestHandler extends LotroServerRequestHandler implements Uri
         } else if (uri.startsWith("/") && request.getMethod() == HttpMethod.POST) {
             updateGameState(request, uri.substring(1), responseWriter);
         } else {
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
         }
     }
 
@@ -90,11 +90,11 @@ public class GameRequestHandler extends LotroServerRequestHandler implements Uri
             GameUpdateLongPollingResource pollingResource = new GameUpdateLongPollingResource(pollableResource, channelNumber, gameMediator, resourceOwner, responseWriter);
             _longPollingSystem.processLongPollingResource(pollingResource, pollableResource);
         } catch (SubscriptionConflictException exp) {
-            responseWriter.writeError(409);
+            throw new HttpProcessingException(409);
         } catch (PrivateInformationException e) {
-            responseWriter.writeError(403);
+            throw new HttpProcessingException(403);
         } catch (SubscriptionExpiredException e) {
-            responseWriter.writeError(410);
+            throw new HttpProcessingException(410);
         }
     }
 
diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/LeagueRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/LeagueRequestHandler.java
index d4105f335..b9f41b319 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/LeagueRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/LeagueRequestHandler.java
@@ -54,7 +54,7 @@ public class LeagueRequestHandler extends LotroServerRequestHandler implements U
         } else if (uri.startsWith("/") && request.getMethod() == HttpMethod.POST) {
             joinLeague(request, uri.substring(1), responseWriter, e);
         } else {
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
         }
     }
 
@@ -94,13 +94,15 @@ public class LeagueRequestHandler extends LotroServerRequestHandler implements U
         final List series = leagueData.getSeries();
 
         int end = series.get(series.size() - 1).getEnd();
+        int start = series.get(0).getStart();
+        int currentDate = DateUtils.getCurrentDate();
 
         Element leagueElem = doc.createElement("league");
         boolean inLeague = _leagueService.isPlayerInLeague(league, resourceOwner);
 
         leagueElem.setAttribute("member", String.valueOf(inLeague));
-        leagueElem.setAttribute("joinable", String.valueOf(!inLeague && end >= DateUtils.getCurrentDate()));
-        leagueElem.setAttribute("draftable", String.valueOf(inLeague && leagueData.isSoloDraftLeague()));
+        leagueElem.setAttribute("joinable", String.valueOf(!inLeague && end >= currentDate));
+        leagueElem.setAttribute("draftable", String.valueOf(inLeague && leagueData.isSoloDraftLeague() && start >= currentDate));
         leagueElem.setAttribute("type", league.getType());
         leagueElem.setAttribute("name", league.getName());
         leagueElem.setAttribute("cost", String.valueOf(league.getCost()));
diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/LoginRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/LoginRequestHandler.java
index 698c226ac..e65255ad7 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/LoginRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/LoginRequestHandler.java
@@ -1,5 +1,6 @@
 package com.gempukku.lotro.async.handler;
 
+import com.gempukku.lotro.async.HttpProcessingException;
 import com.gempukku.lotro.async.ResponseWriter;
 import com.gempukku.lotro.game.Player;
 import org.jboss.netty.channel.MessageEvent;
@@ -28,18 +29,17 @@ public class LoginRequestHandler extends LotroServerRequestHandler implements Ur
                 if (player.getType().contains("u")) {
                     final Date bannedUntil = player.getBannedUntil();
                     if (bannedUntil != null && bannedUntil.after(new Date()))
-                        responseWriter.writeError(409);
+                        throw new HttpProcessingException(409);
                     else
                         responseWriter.writeXmlResponse(null, logUserReturningHeaders(e, login));
                 } else {
-                    responseWriter.writeError(403);
+                    throw new HttpProcessingException(403);
                 }
             } else {
-                responseWriter.writeError(401);
+                throw new HttpProcessingException(401);
             }
-
         } else {
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
         }
     }
 
diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/MerchantRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/MerchantRequestHandler.java
index b83188c5c..0afd61c51 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/MerchantRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/MerchantRequestHandler.java
@@ -1,5 +1,6 @@
 package com.gempukku.lotro.async.handler;
 
+import com.gempukku.lotro.async.HttpProcessingException;
 import com.gempukku.lotro.async.ResponseWriter;
 import com.gempukku.lotro.cards.CardSets;
 import com.gempukku.lotro.cards.packs.SetDefinition;
@@ -55,7 +56,7 @@ public class MerchantRequestHandler extends LotroServerRequestHandler implements
         } else if (uri.equals("/tradeFoil") && request.getMethod() == HttpMethod.POST) {
             tradeInFoil(request, responseWriter);
         } else {
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
         }
     }
 
diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/MtgCardsRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/MtgCardsRequestHandler.java
index a31ad10fe..1a8e7e2e1 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/MtgCardsRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/MtgCardsRequestHandler.java
@@ -1,5 +1,6 @@
 package com.gempukku.lotro.async.handler;
 
+import com.gempukku.lotro.async.HttpProcessingException;
 import com.gempukku.lotro.async.ResponseWriter;
 import com.gempukku.mtg.MtgCardServer;
 import com.gempukku.mtg.ProviderNotFoundException;
@@ -44,16 +45,13 @@ public class MtgCardsRequestHandler implements UriRequestHandler {
         responseWriter.writeByteResponse(dataProvidersResponse, headers);
     }
 
-    private void processCardListRequest(ResponseWriter responseWriter, String provider, String updateMarker) {
+    private void processCardListRequest(ResponseWriter responseWriter, String provider, String updateMarker) throws Exception {
         try {
             MtgCardServer.CardDatabaseHolder cardDatabaseHolder = _mtgCardServer.getCardDatabaseHolder(provider);
-            if (cardDatabaseHolder == null) {
-                responseWriter.writeError(204);
-                return;
-            } else if (updateMarker != null && updateMarker.equals(String.valueOf(cardDatabaseHolder.getUpdateDate()))) {
-                responseWriter.writeError(304);
-                return;
-            }
+            if (cardDatabaseHolder == null)
+                throw new HttpProcessingException(204);
+            else if (updateMarker != null && updateMarker.equals(String.valueOf(cardDatabaseHolder.getUpdateDate())))
+                throw new HttpProcessingException(304);
 
             Map headers = new HashMap();
             headers.put(CONTENT_TYPE, "application/json; charset=UTF-8");
@@ -61,7 +59,7 @@ public class MtgCardsRequestHandler implements UriRequestHandler {
 
             responseWriter.writeByteResponse(cardDatabaseHolder.getBytes(), headers);
         } catch (ProviderNotFoundException exp) {
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
         }
     }
 
diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/PlayerStatsRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/PlayerStatsRequestHandler.java
index efc414d1a..e8aeb2016 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/PlayerStatsRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/PlayerStatsRequestHandler.java
@@ -1,5 +1,6 @@
 package com.gempukku.lotro.async.handler;
 
+import com.gempukku.lotro.async.HttpProcessingException;
 import com.gempukku.lotro.async.ResponseWriter;
 import com.gempukku.lotro.db.PlayerStatistic;
 import com.gempukku.lotro.game.GameHistoryService;
@@ -56,7 +57,7 @@ public class PlayerStatsRequestHandler extends LotroServerRequestHandler impleme
 
             responseWriter.writeXmlResponse(doc);
         } else {
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
         }
     }
 
diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RegisterRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RegisterRequestHandler.java
index cf012f1d2..d37e7b843 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RegisterRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RegisterRequestHandler.java
@@ -34,7 +34,7 @@ public class RegisterRequestHandler extends LotroServerRequestHandler implements
             }
 
         } else {
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
         }
     }
 }
diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/ReplayRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/ReplayRequestHandler.java
index 8da6eb424..c90ebba4b 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/ReplayRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/ReplayRequestHandler.java
@@ -57,7 +57,7 @@ public class ReplayRequestHandler extends LotroServerRequestHandler implements U
 
             responseWriter.writeByteResponse(baos.toByteArray(), headers);
         } else {
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
         }
     }
 }
diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RootUriRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RootUriRequestHandler.java
index 0b3ef4ff1..bced81344 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RootUriRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RootUriRequestHandler.java
@@ -1,5 +1,6 @@
 package com.gempukku.lotro.async.handler;
 
+import com.gempukku.lotro.async.HttpProcessingException;
 import com.gempukku.lotro.async.ResponseWriter;
 import com.gempukku.lotro.common.ApplicationConfiguration;
 import org.jboss.netty.channel.MessageEvent;
@@ -101,7 +102,7 @@ public class RootUriRequestHandler implements UriRequestHandler {
         } else if (uri.equals(_serverContextPath)) {
             _statusRequestHandler.handleRequest(uri.substring(_serverContextPath.length()), request, context, responseWriter, e);
         } else {
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
         }
     }
 }
diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/ServerStatsRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/ServerStatsRequestHandler.java
index a12917243..1d95b8dbb 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/ServerStatsRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/ServerStatsRequestHandler.java
@@ -86,7 +86,7 @@ public class ServerStatsRequestHandler extends LotroServerRequestHandler impleme
                 throw new HttpProcessingException(400);
             }
         } else {
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
         }
     }
 }
diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/SoloDraftRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/SoloDraftRequestHandler.java
index 5a5704499..a0656b386 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/SoloDraftRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/SoloDraftRequestHandler.java
@@ -1,5 +1,7 @@
 package com.gempukku.lotro.async.handler;
 
+import com.gempukku.lotro.DateUtils;
+import com.gempukku.lotro.async.HttpProcessingException;
 import com.gempukku.lotro.async.ResponseWriter;
 import com.gempukku.lotro.cards.CardSets;
 import com.gempukku.lotro.collection.CollectionsManager;
@@ -48,7 +50,7 @@ public class SoloDraftRequestHandler extends LotroServerRequestHandler implement
         } else if (uri.startsWith("/") && request.getMethod() == HttpMethod.GET) {
             getAvailablePicks(request, uri.substring(1), responseWriter);
         } else {
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
         }
     }
 
@@ -59,11 +61,13 @@ public class SoloDraftRequestHandler extends LotroServerRequestHandler implement
         League league = findLeagueByType(leagueType);
 
         if (league == null)
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
 
         LeagueData leagueData = league.getLeagueData(_cardSets, _soloDraftDefinitions);
-        if (!leagueData.isSoloDraftLeague())
-            responseWriter.writeError(404);
+        int leagueStart = leagueData.getSeries().get(0).getStart();
+
+        if (!leagueData.isSoloDraftLeague() || DateUtils.getCurrentDate() < leagueStart)
+            throw new HttpProcessingException(404);
 
         SoloDraftLeagueData soloDraftLeagueData = (SoloDraftLeagueData) leagueData;
         CollectionType collectionType = soloDraftLeagueData.getCollectionType();
@@ -113,11 +117,13 @@ public class SoloDraftRequestHandler extends LotroServerRequestHandler implement
         League league = findLeagueByType(leagueType);
 
         if (league == null)
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
 
         LeagueData leagueData = league.getLeagueData(_cardSets, _soloDraftDefinitions);
-        if (!leagueData.isSoloDraftLeague())
-            responseWriter.writeError(404);
+        int leagueStart = leagueData.getSeries().get(0).getStart();
+
+        if (!leagueData.isSoloDraftLeague() || DateUtils.getCurrentDate() < leagueStart)
+            throw new HttpProcessingException(404);
 
         SoloDraftLeagueData soloDraftLeagueData = (SoloDraftLeagueData) leagueData;
         CollectionType collectionType = soloDraftLeagueData.getCollectionType();
@@ -127,7 +133,7 @@ public class SoloDraftRequestHandler extends LotroServerRequestHandler implement
         CardCollection collection = _collectionsManager.getPlayerCollection(resourceOwner, collectionType.getCode());
         boolean finished = (Boolean) collection.getExtraInformation().get("finished");
         if (finished)
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
 
         int stage = ((Number) collection.getExtraInformation().get("stage")).intValue();
         long playerSeed = ((Number) collection.getExtraInformation().get("seed")).longValue();
@@ -137,12 +143,12 @@ public class SoloDraftRequestHandler extends LotroServerRequestHandler implement
 
         SoloDraft.DraftChoice draftChoice = getSelectedDraftChoice(selectedChoiceId, possibleChoices);
         if (draftChoice == null)
-            responseWriter.writeError(400);
+            throw new HttpProcessingException(400);
 
         CardCollection selectedCards = soloDraft.getCardsForChoiceId(selectedChoiceId, playerSeed, stage);
         Map extraInformationChanges = new HashMap();
         boolean hasNextStage = soloDraft.hasNextStage(playerSeed, stage);
-        extraInformationChanges.put("stage", stage+1);
+        extraInformationChanges.put("stage", stage + 1);
         if (!hasNextStage)
             extraInformationChanges.put("finished", true);
 
@@ -164,7 +170,7 @@ public class SoloDraftRequestHandler extends LotroServerRequestHandler implement
         }
 
         if (hasNextStage) {
-            Iterable availableChoices = soloDraft.getAvailableChoices(playerSeed, stage+1);
+            Iterable availableChoices = soloDraft.getAvailableChoices(playerSeed, stage + 1);
             appendAvailablePics(doc, pickResultElem, availableChoices);
         }
 
diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/StatusRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/StatusRequestHandler.java
index 6c6830298..8e4fecaad 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/StatusRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/StatusRequestHandler.java
@@ -1,5 +1,6 @@
 package com.gempukku.lotro.async.handler;
 
+import com.gempukku.lotro.async.HttpProcessingException;
 import com.gempukku.lotro.async.ResponseWriter;
 import com.gempukku.lotro.chat.ChatServer;
 import com.gempukku.lotro.game.GameHistoryService;
@@ -36,7 +37,7 @@ public class StatusRequestHandler extends LotroServerRequestHandler implements U
 
             responseWriter.writeHtmlResponse(sb.toString());
         } else {
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
         }
     }
 }
diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/TournamentRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/TournamentRequestHandler.java
index 517157d95..5c4d0f16b 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/TournamentRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/TournamentRequestHandler.java
@@ -52,7 +52,7 @@ public class TournamentRequestHandler extends LotroServerRequestHandler implemen
         } else if (uri.startsWith("/") && request.getMethod() == HttpMethod.GET) {
             getTournamentInfo(request, uri.substring(1), responseWriter);
         } else {
-            responseWriter.writeError(404);
+            throw new HttpProcessingException(404);
         }
     }
 
diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/WebRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/WebRequestHandler.java
index 973faae46..9ee7b956c 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/WebRequestHandler.java
+++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/WebRequestHandler.java
@@ -1,9 +1,12 @@
 package com.gempukku.lotro.async.handler;
 
+import com.gempukku.lotro.async.HttpProcessingException;
 import com.gempukku.lotro.async.ResponseWriter;
 import org.jboss.netty.channel.MessageEvent;
 import org.jboss.netty.handler.codec.http.HttpHeaders;
+
 import static org.jboss.netty.handler.codec.http.HttpHeaders.Names.IF_NONE_MATCH;
+
 import org.jboss.netty.handler.codec.http.HttpRequest;
 
 import java.io.File;
@@ -22,10 +25,8 @@ public class WebRequestHandler implements UriRequestHandler {
 
     @Override
     public void handleRequest(String uri, HttpRequest request, Map context, ResponseWriter responseWriter, MessageEvent e) throws Exception {
-        if (clientHasCurrentVersion(request)) {
-            responseWriter.writeError(304);
-            return;
-        }
+        if (clientHasCurrentVersion(request))
+            throw new HttpProcessingException(304);
 
         if (uri.equals(""))
             uri = "index.html";
@@ -34,16 +35,14 @@ public class WebRequestHandler implements UriRequestHandler {
 
         if ((uri.contains(".."))
                 || uri.contains(File.separator + ".")
-                || uri.startsWith(".") || uri.endsWith(".")) {
-            responseWriter.writeError(403);
-        } else {
-            File file = new File(_root + uri);
-            if (!file.getCanonicalPath().startsWith(_root))
-                responseWriter.writeError(403);
-            else {
-                responseWriter.writeFile(file, Collections.singletonMap(HttpHeaders.Names.ETAG, _uniqueEtag));
-            }
-        }
+                || uri.startsWith(".") || uri.endsWith("."))
+            throw new HttpProcessingException(403);
+
+        File file = new File(_root + uri);
+        if (!file.getCanonicalPath().startsWith(_root))
+            throw new HttpProcessingException(403);
+
+        responseWriter.writeFile(file, Collections.singletonMap(HttpHeaders.Names.ETAG, _uniqueEtag));
     }
 
     private boolean clientHasCurrentVersion(HttpRequest request) {
diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/ConstructedLeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/ConstructedLeagueData.java
index 861833e89..660b04460 100644
--- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/ConstructedLeagueData.java
+++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/ConstructedLeagueData.java
@@ -5,6 +5,7 @@ import com.gempukku.lotro.cards.CardSets;
 import com.gempukku.lotro.collection.CollectionsManager;
 import com.gempukku.lotro.competitive.PlayerStanding;
 import com.gempukku.lotro.db.vo.CollectionType;
+import com.gempukku.lotro.draft2.SoloDraft;
 import com.gempukku.lotro.draft2.SoloDraftDefinitions;
 import com.gempukku.lotro.game.CardCollection;
 import com.gempukku.lotro.game.Player;
@@ -47,6 +48,11 @@ public class ConstructedLeagueData implements LeagueData {
         return false;
     }
 
+    @Override
+    public SoloDraft getSoloDraft() {
+        return null;
+    }
+
     @Override
     public List getSeries() {
         return _series;
diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeagueData.java
index c7ab7f91c..7bbfd4b26 100644
--- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeagueData.java
+++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeagueData.java
@@ -2,17 +2,20 @@ package com.gempukku.lotro.league;
 
 import com.gempukku.lotro.collection.CollectionsManager;
 import com.gempukku.lotro.competitive.PlayerStanding;
+import com.gempukku.lotro.draft2.SoloDraft;
 import com.gempukku.lotro.game.CardCollection;
 import com.gempukku.lotro.game.Player;
 
 import java.util.List;
 
 public interface LeagueData {
-    public boolean isSoloDraftLeague();
+    boolean isSoloDraftLeague();
 
-    public List getSeries();
+    List getSeries();
 
-    public CardCollection joinLeague(CollectionsManager collecionsManager, Player player, int currentTime);
+    SoloDraft getSoloDraft();
 
-    public int process(CollectionsManager collectionsManager, List leagueStandings, int oldStatus, int currentTime);
+    CardCollection joinLeague(CollectionsManager collecionsManager, Player player, int currentTime);
+
+    int process(CollectionsManager collectionsManager, List leagueStandings, int oldStatus, int currentTime);
 }
diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewConstructedLeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewConstructedLeagueData.java
index 1da001142..5940cc436 100644
--- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewConstructedLeagueData.java
+++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewConstructedLeagueData.java
@@ -5,6 +5,7 @@ import com.gempukku.lotro.cards.CardSets;
 import com.gempukku.lotro.collection.CollectionsManager;
 import com.gempukku.lotro.competitive.PlayerStanding;
 import com.gempukku.lotro.db.vo.CollectionType;
+import com.gempukku.lotro.draft2.SoloDraft;
 import com.gempukku.lotro.draft2.SoloDraftDefinitions;
 import com.gempukku.lotro.game.CardCollection;
 import com.gempukku.lotro.game.Player;
@@ -50,6 +51,11 @@ public class NewConstructedLeagueData implements LeagueData {
         return false;
     }
 
+    @Override
+    public SoloDraft getSoloDraft() {
+        return null;
+    }
+
     @Override
     public List getSeries() {
         return Collections.unmodifiableList(_series);
diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewSealedLeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewSealedLeagueData.java
index 534df97f1..da441ff02 100644
--- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewSealedLeagueData.java
+++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewSealedLeagueData.java
@@ -5,6 +5,7 @@ import com.gempukku.lotro.cards.CardSets;
 import com.gempukku.lotro.collection.CollectionsManager;
 import com.gempukku.lotro.competitive.PlayerStanding;
 import com.gempukku.lotro.db.vo.CollectionType;
+import com.gempukku.lotro.draft2.SoloDraft;
 import com.gempukku.lotro.draft2.SoloDraftDefinitions;
 import com.gempukku.lotro.game.CardCollection;
 import com.gempukku.lotro.game.DefaultCardCollection;
@@ -51,6 +52,11 @@ public class NewSealedLeagueData implements LeagueData {
         return false;
     }
 
+    @Override
+    public SoloDraft getSoloDraft() {
+        return null;
+    }
+
     @Override
     public List getSeries() {
         return Collections.unmodifiableList(_series);
diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SealedLeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SealedLeagueData.java
index 968a6798b..d018d26f1 100644
--- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SealedLeagueData.java
+++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SealedLeagueData.java
@@ -5,6 +5,7 @@ import com.gempukku.lotro.cards.CardSets;
 import com.gempukku.lotro.collection.CollectionsManager;
 import com.gempukku.lotro.competitive.PlayerStanding;
 import com.gempukku.lotro.db.vo.CollectionType;
+import com.gempukku.lotro.draft2.SoloDraft;
 import com.gempukku.lotro.draft2.SoloDraftDefinitions;
 import com.gempukku.lotro.game.CardCollection;
 import com.gempukku.lotro.game.DefaultCardCollection;
@@ -51,6 +52,11 @@ public class SealedLeagueData implements LeagueData {
         return false;
     }
 
+    @Override
+    public SoloDraft getSoloDraft() {
+        return null;
+    }
+
     @Override
     public List getSeries() {
         return Collections.unmodifiableList(_series);
diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SoloDraftLeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SoloDraftLeagueData.java
index e4f8029f1..3f46f317b 100644
--- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SoloDraftLeagueData.java
+++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SoloDraftLeagueData.java
@@ -42,6 +42,7 @@ public class SoloDraftLeagueData implements LeagueData {
         return _collectionType;
     }
 
+    @Override
     public SoloDraft getSoloDraft() {
         return _draft;
     }
@@ -64,11 +65,12 @@ public class SoloDraftLeagueData implements LeagueData {
     public CardCollection joinLeague(CollectionsManager collectionsManager, Player player, int currentTime) {
         MutableCardCollection startingCollection = new DefaultCardCollection();
         long seed = getSeed(player);
+        if (currentTime >= _serie.getStart()) {
+            CardCollection leagueProduct = _draft.initializeNewCollection(seed);
 
-        CardCollection leagueProduct = _draft.initializeNewCollection(seed);
-
-        for (Map.Entry serieCollectionItem : leagueProduct.getAll().entrySet())
-            startingCollection.addItem(serieCollectionItem.getKey(), serieCollectionItem.getValue().getCount());
+            for (Map.Entry serieCollectionItem : leagueProduct.getAll().entrySet())
+                startingCollection.addItem(serieCollectionItem.getKey(), serieCollectionItem.getValue().getCount());
+        }
 
         startingCollection.setExtraInformation(createExtraInformation(seed));
         collectionsManager.addPlayerCollection(false, "Sealed league product", player, _collectionType, startingCollection);
@@ -86,17 +88,21 @@ public class SoloDraftLeagueData implements LeagueData {
     @Override
     public int process(CollectionsManager collectionsManager, List leagueStandings, int oldStatus, int currentTime) {
         int status = oldStatus;
-        
+
         if (status == 0) {
-            Map map = collectionsManager.getPlayersCollection(_collectionType.getCode());
-            for (Map.Entry playerCardCollectionEntry : map.entrySet()) {
-                Player player = playerCardCollectionEntry.getKey();
-                CardCollection leagueProduct = _draft.initializeNewCollection(getSeed(player));
-                collectionsManager.addItemsToPlayerCollection(false, "New sealed league product", player, _collectionType, leagueProduct.getAll().values());
+            if (currentTime >= _serie.getStart()) {
+                Map map = collectionsManager.getPlayersCollection(_collectionType.getCode());
+                for (Map.Entry playerCardCollectionEntry : map.entrySet()) {
+
+                    Player player = playerCardCollectionEntry.getKey();
+                    CardCollection leagueProduct = _draft.initializeNewCollection(getSeed(player));
+
+                    collectionsManager.addItemsToPlayerCollection(false, "New sealed league product", player, _collectionType, leagueProduct.getAll().values());
+                }
+                status = 1;
             }
-            status = 1;
         }
-        
+
         int maxGamesTotal = _serie.getMaxMatches();
 
         if (status == 1) {

From 5d5949633a563b3ba5d9e8ca2158f2e0e49fa28b Mon Sep 17 00:00:00 2001
From: "marcin.sciesinski" 
Date: Wed, 12 Sep 2018 19:36:57 -0700
Subject: [PATCH 16/17] Fixing issues with solo-drafts losing collections

---
 .../lotro/league/SoloDraftLeagueData.java     | 27 +++++--------------
 1 file changed, 6 insertions(+), 21 deletions(-)

diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SoloDraftLeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SoloDraftLeagueData.java
index 3f46f317b..53db891c9 100644
--- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SoloDraftLeagueData.java
+++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SoloDraftLeagueData.java
@@ -65,12 +65,11 @@ public class SoloDraftLeagueData implements LeagueData {
     public CardCollection joinLeague(CollectionsManager collectionsManager, Player player, int currentTime) {
         MutableCardCollection startingCollection = new DefaultCardCollection();
         long seed = getSeed(player);
-        if (currentTime >= _serie.getStart()) {
-            CardCollection leagueProduct = _draft.initializeNewCollection(seed);
 
-            for (Map.Entry serieCollectionItem : leagueProduct.getAll().entrySet())
-                startingCollection.addItem(serieCollectionItem.getKey(), serieCollectionItem.getValue().getCount());
-        }
+        CardCollection leagueProduct = _draft.initializeNewCollection(seed);
+
+        for (Map.Entry serieCollectionItem : leagueProduct.getAll().entrySet())
+            startingCollection.addItem(serieCollectionItem.getKey(), serieCollectionItem.getValue().getCount());
 
         startingCollection.setExtraInformation(createExtraInformation(seed));
         collectionsManager.addPlayerCollection(false, "Sealed league product", player, _collectionType, startingCollection);
@@ -90,23 +89,9 @@ public class SoloDraftLeagueData implements LeagueData {
         int status = oldStatus;
 
         if (status == 0) {
-            if (currentTime >= _serie.getStart()) {
-                Map map = collectionsManager.getPlayersCollection(_collectionType.getCode());
-                for (Map.Entry playerCardCollectionEntry : map.entrySet()) {
-
-                    Player player = playerCardCollectionEntry.getKey();
-                    CardCollection leagueProduct = _draft.initializeNewCollection(getSeed(player));
-
-                    collectionsManager.addItemsToPlayerCollection(false, "New sealed league product", player, _collectionType, leagueProduct.getAll().values());
-                }
-                status = 1;
-            }
-        }
-
-        int maxGamesTotal = _serie.getMaxMatches();
-
-        if (status == 1) {
             if (currentTime > DateUtils.offsetDate(_serie.getEnd(), 1)) {
+                int maxGamesTotal = _serie.getMaxMatches();
+
                 for (PlayerStanding leagueStanding : leagueStandings) {
                     CardCollection leaguePrize = _leaguePrizes.getPrizeForLeague(leagueStanding.getStanding(), leagueStandings.size(), leagueStanding.getGamesPlayed(), maxGamesTotal, _collectionType);
                     if (leaguePrize != null)

From 3aaa23e0b9c047dac75cf87254f00bcd14494327 Mon Sep 17 00:00:00 2001
From: "marcin.sciesinski" 
Date: Wed, 12 Sep 2018 19:37:31 -0700
Subject: [PATCH 17/17] Further fixes to "Deathless Lord"

---
 .../com/gempukku/lotro/cards/set6/wraith/Card6_122.java   | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/wraith/Card6_122.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/wraith/Card6_122.java
index fae3763ef..0901ee633 100644
--- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/wraith/Card6_122.java
+++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/wraith/Card6_122.java
@@ -39,12 +39,12 @@ public class Card6_122 extends AbstractMinion {
     }
 
     @Override
-    public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) {
+    public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, final PhysicalCard self) {
         if (TriggerConditions.forEachKilledInASkirmish(game, effectResult, Race.NAZGUL, CardType.COMPANION)) {
-            RequiredTriggerAction action = new RequiredTriggerAction(self);
+            final RequiredTriggerAction action = new RequiredTriggerAction(self);
             List possibleEffects = new LinkedList();
             if (Filters.canSpot(game.getGameState(), game.getModifiersQuerying(),
-                    CardType.ALLY, Filters.moreVitalityThan(1))) {
+                    CardType.ALLY, Filters.canTakeWounds(self, 2))) {
                 possibleEffects.add(
                         new ChooseAndWoundCharactersEffect(action, self.getOwner(), 1, 1, 2, CardType.ALLY) {
                     @Override
@@ -53,7 +53,7 @@ public class Card6_122 extends AbstractMinion {
                     }
                 });
             } else if (!Filters.canSpot(game.getGameState(), game.getModifiersQuerying(),
-                    CardType.COMPANION, Filters.moreVitalityThan(1))) {
+                    CardType.COMPANION, Filters.canExert(self))) {
                 possibleEffects.add(
                         new ChooseAndWoundCharactersEffect(action, self.getOwner(), 1, 1, 1, CardType.ALLY) {
                     @Override