From 9db793212b54dbbe578c32ec211fee9a0ca13069 Mon Sep 17 00:00:00 2001 From: "marcin.sciesinski" Date: Thu, 8 Aug 2019 17:51:48 -0700 Subject: [PATCH] Fixed Second Edition missing cards and images and extracted toil payment. --- .../src/main/web/js/gemp-022/set40.js | 10 +- .../cards/AbstractLotroCardBlueprint.java | 5 +- .../src/main/resources/set40-rarity.txt | 6 ++ .../logic/modifiers/AbstractModifier.java | 5 + .../lotro/logic/modifiers/Modifier.java | 2 + .../lotro/logic/modifiers/ModifierEffect.java | 2 +- .../lotro/logic/modifiers/ModifiersLogic.java | 10 ++ .../logic/modifiers/ModifiersQuerying.java | 2 + .../gempukku/lotro/logic/timing/RuleSet.java | 102 ++++++++---------- .../lotro/logic/timing/rules/ToilRule.java | 45 ++++++++ 10 files changed, 124 insertions(+), 65 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/ToilRule.java diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/set40.js b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/set40.js index bc73be7d2..dff91aa4b 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/set40.js +++ b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/set40.js @@ -144,7 +144,7 @@ var set40 = { '40_143': 'http://lotrtcgwiki.com/images/2E1C143.jpg', '40_144': 'http://lotrtcgwiki.com/images/2E1U144.jpg', '40_145': 'http://lotrtcgwiki.com/images/2E1U145.jpg', - '40_146': 'http://lotrtcgwiki.com/images/2E1R146.jpg', + '40_146': 'http://lotrtcgwiki.com/images/2E1C146.jpg', '40_147': 'http://lotrtcgwiki.com/images/2E1C147.jpg', '40_148': 'http://lotrtcgwiki.com/images/2E1R148.jpg', '40_149': 'http://lotrtcgwiki.com/images/2E1U149.jpg', @@ -195,7 +195,7 @@ var set40 = { '40_194': 'http://lotrtcgwiki.com/images/2E1U194.jpg', '40_195': 'http://lotrtcgwiki.com/images/2E1R195.jpg', '40_196': 'http://lotrtcgwiki.com/images/2E1R196.jpg', - '40_197': 'http://lotrtcgwiki.com/images/2E1R197.jpg', + '40_197': 'http://lotrtcgwiki.com/images/2E1U197.jpg', '40_198': 'http://lotrtcgwiki.com/images/2E1U198.jpg', '40_199': 'http://lotrtcgwiki.com/images/2E1U199.jpg', '40_200': 'http://lotrtcgwiki.com/images/2E1R200.jpg', @@ -250,12 +250,12 @@ var set40 = { '40_249': 'http://lotrtcgwiki.com/images/2E1R249.jpg', '40_250': 'http://lotrtcgwiki.com/images/2E1U250.jpg', '40_251': 'http://lotrtcgwiki.com/images/2E1U251.jpg', - '40_252': 'http://lotrtcgwiki.com/images/2E1U252.jpg', + '40_252': 'http://lotrtcgwiki.com/images/2E1R252.jpg', '40_253': 'http://lotrtcgwiki.com/images/2E1C253.jpg', '40_254': 'http://lotrtcgwiki.com/images/2E1C254.jpg', '40_255': 'http://lotrtcgwiki.com/images/2E1C255.jpg', '40_256': 'http://lotrtcgwiki.com/images/2E1C256.jpg', - '40_257': 'http://lotrtcgwiki.com/images/2E1U257.jpg', + '40_257': 'http://lotrtcgwiki.com/images/2E1R257.jpg', '40_258': 'http://lotrtcgwiki.com/images/2E1U258.jpg', '40_259': 'http://lotrtcgwiki.com/images/2E1C259.jpg', '40_260': 'http://lotrtcgwiki.com/images/2E1C260.jpg', @@ -284,7 +284,7 @@ var set40 = { '40_283': 'http://lotrtcgwiki.com/images/2E1U283.jpg', '40_284': 'http://lotrtcgwiki.com/images/2E1U284.jpg', '40_285': 'http://lotrtcgwiki.com/images/2E1U285.jpg', - '40_286': 'http://lotrtcgwiki.com/images/2E1U286.jpg', + '40_286': 'http://lotrtcgwiki.com/images/2E1C286.jpg', '40_287': 'http://lotrtcgwiki.com/images/2E1U287.jpg', '40_288': 'http://lotrtcgwiki.com/images/2E1U288.jpg', '40_289': 'http://lotrtcgwiki.com/images/2E1U289.jpg', diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractLotroCardBlueprint.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractLotroCardBlueprint.java index af92dcf38..422ba91a0 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractLotroCardBlueprint.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/AbstractLotroCardBlueprint.java @@ -45,9 +45,8 @@ public abstract class AbstractLotroCardBlueprint implements LotroCardBlueprint { if (!game.getModifiersQuerying().canPayExtraCostsToPlay(game.getGameState(), self)) return false; - int toilCount = game.getModifiersQuerying().getKeywordCount(game.getGameState(), self, Keyword.TOIL); - if (toilCount > 0) - twilightModifier -= toilCount * Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.owner(playerId), getCulture(), Filters.character, Filters.canExert(self)); + twilightModifier-= game.getModifiersQuerying().getPotentialDiscount(game.getGameState(), self); + return (getSide() != Side.SHADOW || PlayConditions.canPayForShadowCard(game, self, withTwilightRemoved, twilightModifier, ignoreRoamingPenalty)); } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/set40-rarity.txt b/gemp-lotr/gemp-lotr-cards/src/main/resources/set40-rarity.txt index a4cc86596..da2d09aff 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/set40-rarity.txt +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/set40-rarity.txt @@ -32,6 +32,7 @@ 40S32 40S33 40S34 +40S35 40S36 40S37 40S38 @@ -111,12 +112,14 @@ 40S112 40S113 40S114 +40S115 40S116 40S117 40S118 40S119 40S120 40S121 +40S122 40S123 40S124 40S125 @@ -232,6 +235,7 @@ 40S235 40S236 40S237 +40S238 40S239 40S240 40S241 @@ -275,6 +279,7 @@ 40S279 40S280 40S281 +40S282 40S283 40S284 40S285 @@ -289,6 +294,7 @@ 40S294 40S295 40S296 +40S297 40S298 40S299 40S300 diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java index 63bda8293..192243ca1 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/AbstractModifier.java @@ -378,4 +378,9 @@ public abstract class AbstractModifier implements Modifier { public int getSanctuaryHealModifier(GameState gameState, ModifiersQuerying modifiersQuerying) { return 0; } + + @Override + public int getPotentialDiscount(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard discountCard) { + return 0; + } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java index 8965e88c6..ca2f13f5e 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/Modifier.java @@ -151,4 +151,6 @@ public interface Modifier { public int getFPCulturesSpotCountModifier(GameState gameState, ModifiersQuerying modifiersQuerying, String playerId); int getSanctuaryHealModifier(GameState gameState, ModifiersQuerying modifiersQuerying); + + int getPotentialDiscount(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard discountCard); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifierEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifierEffect.java index f3accd4f4..cc97e5f1b 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifierEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifierEffect.java @@ -22,5 +22,5 @@ public enum ModifierEffect { REMOVE_KEYWORD_MODIFIER, GIVE_KEYWORD_MODIFIER, CANCEL_KEYWORD_BONUS_TARGET_MODIFIER, LOSE_ALL_KEYWORDS_MODIFIER, - SANCTUARY_HEAL_MODIFIER + SANCTUARY_HEAL_MODIFIER, POTENTIAL_DISCOUNT_MODIFIER } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java index 4ba9d7052..591ea1ad3 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersLogic.java @@ -1070,6 +1070,16 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { return result; } + @Override + public int getPotentialDiscount(GameState gameState, PhysicalCard playedCard) { + int result = 0; + for (Modifier modifier : getModifiers(gameState, ModifierEffect.POTENTIAL_DISCOUNT_MODIFIER)) { + result+=modifier.getPotentialDiscount(gameState, this, playedCard); + } + + return result; + } + private class ModifierHookImpl implements ModifierHook { private Modifier _modifier; diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java index 491f83fe7..2ae9d1c58 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/modifiers/ModifiersQuerying.java @@ -154,4 +154,6 @@ public interface ModifiersQuerying { public boolean canPlaySite(GameState gameState, String playerId); int getSanctuaryHealModifier(GameState gameState); + + int getPotentialDiscount(GameState gameState, PhysicalCard playedCard); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleSet.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleSet.java index d571fa477..3886475b1 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleSet.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleSet.java @@ -1,56 +1,46 @@ -package com.gempukku.lotro.logic.timing; - -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.game.state.actions.DefaultActionsEnvironment; -import com.gempukku.lotro.logic.modifiers.ModifiersLogic; -import com.gempukku.lotro.logic.timing.rules.AmbushRule; -import com.gempukku.lotro.logic.timing.rules.CunningRule; -import com.gempukku.lotro.logic.timing.rules.DiscardedCardRule; -import com.gempukku.lotro.logic.timing.rules.EnduringRule; -import com.gempukku.lotro.logic.timing.rules.FrodoAndSamRule; -import com.gempukku.lotro.logic.timing.rules.HunterRule; -import com.gempukku.lotro.logic.timing.rules.KilledCardRule; -import com.gempukku.lotro.logic.timing.rules.MusterRule; -import com.gempukku.lotro.logic.timing.rules.ResolveSkirmishRule; -import com.gempukku.lotro.logic.timing.rules.RingBearerRule; -import com.gempukku.lotro.logic.timing.rules.RoamingRule; -import com.gempukku.lotro.logic.timing.rules.SanctuaryRule; -import com.gempukku.lotro.logic.timing.rules.ThreatRule; - -public class RuleSet { - private LotroGame _game; - private DefaultActionsEnvironment _actionsEnvironment; - private ModifiersLogic _modifiersLogic; - - public RuleSet(LotroGame game, DefaultActionsEnvironment actionsEnvironment, ModifiersLogic modifiersLogic) { - _game = game; - _actionsEnvironment = actionsEnvironment; - _modifiersLogic = modifiersLogic; - } - - public void applyRuleSet() { - new RoamingRule(_modifiersLogic).applyRule(); - new EnduringRule(_modifiersLogic).applyRule(); - new HunterRule(_modifiersLogic).applyRule(); - - new MusterRule(_actionsEnvironment).applyRule(); - - new AmbushRule(_actionsEnvironment).applyRule(); - - new ResolveSkirmishRule(_game, _actionsEnvironment).applyRule(); - - new SanctuaryRule(_actionsEnvironment, _modifiersLogic).applyRule(); - - new DiscardedCardRule(_actionsEnvironment).applyRule(); - - new KilledCardRule(_actionsEnvironment).applyRule(); - - new FrodoAndSamRule(_modifiersLogic).applyRule(); - - new RingBearerRule(_modifiersLogic).applyRule(); - - new ThreatRule(_actionsEnvironment).applyRule(); - - new CunningRule(_modifiersLogic).applyRule(); - } -} +package com.gempukku.lotro.logic.timing; + +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.game.state.actions.DefaultActionsEnvironment; +import com.gempukku.lotro.logic.modifiers.ModifiersLogic; +import com.gempukku.lotro.logic.timing.rules.*; + +public class RuleSet { + private LotroGame _game; + private DefaultActionsEnvironment _actionsEnvironment; + private ModifiersLogic _modifiersLogic; + + public RuleSet(LotroGame game, DefaultActionsEnvironment actionsEnvironment, ModifiersLogic modifiersLogic) { + _game = game; + _actionsEnvironment = actionsEnvironment; + _modifiersLogic = modifiersLogic; + } + + public void applyRuleSet() { + new RoamingRule(_modifiersLogic).applyRule(); + new EnduringRule(_modifiersLogic).applyRule(); + new HunterRule(_modifiersLogic).applyRule(); + + new MusterRule(_actionsEnvironment).applyRule(); + + new AmbushRule(_actionsEnvironment).applyRule(); + + new ResolveSkirmishRule(_game, _actionsEnvironment).applyRule(); + + new SanctuaryRule(_actionsEnvironment, _modifiersLogic).applyRule(); + + new DiscardedCardRule(_actionsEnvironment).applyRule(); + + new KilledCardRule(_actionsEnvironment).applyRule(); + + new FrodoAndSamRule(_modifiersLogic).applyRule(); + + new RingBearerRule(_modifiersLogic).applyRule(); + + new ThreatRule(_actionsEnvironment).applyRule(); + + new CunningRule(_modifiersLogic).applyRule(); + + new ToilRule(_modifiersLogic).applyRule(); + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/ToilRule.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/ToilRule.java new file mode 100644 index 000000000..2ebc3565b --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/rules/ToilRule.java @@ -0,0 +1,45 @@ +package com.gempukku.lotro.logic.timing.rules; + +import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.Keyword; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.AbstractActionProxy; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.GameState; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.game.state.actions.DefaultActionsEnvironment; +import com.gempukku.lotro.logic.GameUtils; +import com.gempukku.lotro.logic.actions.OptionalTriggerAction; +import com.gempukku.lotro.logic.effects.AddTwilightEffect; +import com.gempukku.lotro.logic.modifiers.AbstractModifier; +import com.gempukku.lotro.logic.modifiers.ModifierEffect; +import com.gempukku.lotro.logic.modifiers.ModifiersLogic; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.timing.EffectResult; +import com.gempukku.lotro.logic.timing.results.AssignAgainstResult; + +import java.util.Collections; +import java.util.List; + +public class ToilRule { + private ModifiersLogic modifiersLogic; + + public ToilRule(ModifiersLogic modifiersLogic) { + this.modifiersLogic = modifiersLogic; + } + + public void applyRule() { + modifiersLogic.addAlwaysOnModifier( + new AbstractModifier(null, "Toil discount", Filters.any, ModifierEffect.POTENTIAL_DISCOUNT_MODIFIER) { + @Override + public int getPotentialDiscount(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard discountCard) { + int toilCount = modifiersQuerying.getKeywordCount(gameState, discountCard, Keyword.TOIL); + if (toilCount > 0) + return toilCount * Filters.countActive(gameState, modifiersQuerying, Filters.owner(discountCard.getOwner()), + discountCard.getBlueprint().getCulture(), Filters.character, Filters.canExert(discountCard)); + + return 0; + } + }); + } +}