diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/StrengthModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/StrengthModifier.java index aeb43ebaa..339976819 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/StrengthModifier.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/StrengthModifier.java @@ -36,7 +36,7 @@ public class StrengthModifier extends AbstractModifier { } @Override - public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - return result + _evaluator.evaluateExpression(gameState, modifiersQuerying, physicalCard); + public int getStrengthModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { + return _evaluator.evaluateExpression(gameState, modifiersQuerying, physicalCard); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/MultiplyEvaluator.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/MultiplyEvaluator.java new file mode 100644 index 000000000..70875ae21 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/evaluator/MultiplyEvaluator.java @@ -0,0 +1,21 @@ +package com.gempukku.lotro.cards.modifiers.evaluator; + +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.GameState; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; + +public class MultiplyEvaluator implements Evaluator { + private Evaluator _source; + private int _multiplier; + + public MultiplyEvaluator(int multiplier, Evaluator source) { + _multiplier = multiplier; + _source = source; + } + + @Override + public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) { + return _multiplier * _source.evaluateExpression(gameState, modifiersQuerying, self); + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_049.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_049.java index f13027d41..c7d637dd0 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_049.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/elven/Card1_049.java @@ -1,16 +1,14 @@ package com.gempukku.lotro.cards.set1.elven; import com.gempukku.lotro.cards.AbstractAttachable; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; +import com.gempukku.lotro.cards.modifiers.evaluator.CountSpottableEvaluator; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filter; 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.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; /** * Set: The Fellowship of the Ring @@ -34,12 +32,6 @@ public class Card1_049 extends AbstractAttachable { @Override public Modifier getAlwaysOnModifier(PhysicalCard self) { - return new AbstractModifier(self, "Strength +1 for each Elf you can spot (limit +3)", Filters.hasAttached(self), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER}) { - @Override - public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - int count = Math.min(3, Filters.countSpottable(gameState, modifiersQuerying, Filters.race(Race.ELF))); - return result + count; - } - }; + return new StrengthModifier(self, Filters.hasAttached(self), null, new CountSpottableEvaluator(3, Race.ELF)); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_072.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_072.java index 8e138e43c..364a116ab 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_072.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/gandalf/Card1_072.java @@ -1,6 +1,7 @@ package com.gempukku.lotro.cards.set1.gandalf; import com.gempukku.lotro.cards.AbstractCompanion; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Race; @@ -8,10 +9,9 @@ import com.gempukku.lotro.common.Signet; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.GameState; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; /** * Set: The Fellowship of the Ring @@ -33,19 +33,21 @@ public class Card1_072 extends AbstractCompanion { @Override public Modifier getAlwaysOnModifier(PhysicalCard self) { - return new AbstractModifier(self, "Gandalf is strength +1 for each of these races you can spot in the fellowship: Hobbit, Dwarf, Elf, and Man.", Filters.sameCard(self), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER}) { - @Override - public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - if (Filters.canSpot(gameState, modifiersQuerying, Filters.type(CardType.COMPANION), Filters.race(Race.HOBBIT))) - result++; - if (Filters.canSpot(gameState, modifiersQuerying, Filters.type(CardType.COMPANION), Filters.race(Race.DWARF))) - result++; - if (Filters.canSpot(gameState, modifiersQuerying, Filters.type(CardType.COMPANION), Filters.race(Race.ELF))) - result++; - if (Filters.canSpot(gameState, modifiersQuerying, Filters.type(CardType.COMPANION), Filters.race(Race.MAN))) - result++; - return result; - } - }; + return new StrengthModifier(self, self, null, + new Evaluator() { + @Override + public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) { + int result = 0; + if (Filters.canSpot(gameState, modifiersQuerying, Filters.type(CardType.COMPANION), Filters.race(Race.HOBBIT))) + result++; + if (Filters.canSpot(gameState, modifiersQuerying, Filters.type(CardType.COMPANION), Filters.race(Race.DWARF))) + result++; + if (Filters.canSpot(gameState, modifiersQuerying, Filters.type(CardType.COMPANION), Filters.race(Race.ELF))) + result++; + if (Filters.canSpot(gameState, modifiersQuerying, Filters.type(CardType.COMPANION), Filters.race(Race.MAN))) + result++; + return result; + } + }); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_148.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_148.java index 0d1cf2853..69f9602eb 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_148.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_148.java @@ -1,16 +1,14 @@ package com.gempukku.lotro.cards.set1.isengard; import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; +import com.gempukku.lotro.cards.modifiers.evaluator.CountSpottableEvaluator; import com.gempukku.lotro.common.Culture; 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.logic.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; /** * Set: The Fellowship of the Ring @@ -31,11 +29,6 @@ public class Card1_148 extends AbstractMinion { @Override public Modifier getAlwaysOnModifier(final PhysicalCard self) { - return new AbstractModifier(self, "Strength +1 for each other Uruk-hai you can spot", Filters.sameCard(self), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER}) { - @Override - public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - return result + Filters.countSpottable(gameState, modifiersQuerying, Filters.and(Filters.race(Race.URUK_HAI), Filters.not(Filters.sameCard(self)))); - } - }; + return new StrengthModifier(self, self, null, new CountSpottableEvaluator(Race.URUK_HAI, Filters.not(self))); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_163.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_163.java index 47278d89d..d48076a0e 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_163.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_163.java @@ -1,15 +1,13 @@ package com.gempukku.lotro.cards.set1.moria; import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; +import com.gempukku.lotro.cards.modifiers.evaluator.CountSpottableEvaluator; import com.gempukku.lotro.common.Culture; 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.logic.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; /** * Set: The Fellowship of the Ring @@ -29,11 +27,6 @@ public class Card1_163 extends AbstractMinion { @Override public Modifier getAlwaysOnModifier(PhysicalCard self) { - return new AbstractModifier(self, "For each other MORIA Orc you can spot, Ancient Chieftain is strength +1.", Filters.sameCard(self), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER}) { - @Override - public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - return result + Filters.countSpottable(gameState, modifiersQuerying, Filters.culture(Culture.MORIA), Filters.race(Race.ORC), Filters.not(Filters.sameCard(physicalCard))); - } - }; + return new StrengthModifier(self, self, null, new CountSpottableEvaluator(Culture.MORIA, Race.ORC, Filters.not(self))); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_184.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_184.java index 21ec0cdf5..4cc7cbbcc 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_184.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/moria/Card1_184.java @@ -1,18 +1,21 @@ package com.gempukku.lotro.cards.set1.moria; import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.modifiers.ArcheryTotalModifier; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; +import com.gempukku.lotro.cards.modifiers.conditions.LocationCondition; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Race; import com.gempukku.lotro.common.Side; -import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.GameState; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; +import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.modifiers.SpotCondition; + +import java.util.LinkedList; +import java.util.List; /** * Set: The Fellowship of the Ring @@ -32,28 +35,12 @@ public class Card1_184 extends AbstractMinion { } @Override - public Modifier getAlwaysOnModifier(final PhysicalCard self) { - return new AbstractModifier(self, "Strength +2", - Filters.and( - Filters.sameCard(self), - new Filter() { - @Override - public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { - return modifiersQuerying.hasKeyword(gameState, gameState.getCurrentSite(), Keyword.UNDERGROUND); - } - }), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER, ModifierEffect.ARCHERY_MODIFIER}) { - @Override - public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - return result + 2; - } - - @Override - public int getArcheryTotal(GameState gameState, ModifiersQuerying modifiersLogic, Side side, int result) { - if (side == Side.FREE_PEOPLE - && Filters.canSpot(gameState, modifiersLogic, Filters.culture(Culture.MORIA), Filters.race(Race.ORC), Filters.not(Filters.sameCard(self)))) - return result - 1; - return result; - } - }; + public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { + List modifiers = new LinkedList(); + modifiers.add( + new StrengthModifier(self, self, new LocationCondition(Keyword.UNDERGROUND), 2)); + modifiers.add( + new ArcheryTotalModifier(self, Side.FREE_PEOPLE, new SpotCondition(Culture.MORIA, Race.ORC, Filters.not(self)), -1)); + return modifiers; } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_256.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_256.java index 91d8b37e5..cbcb49929 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_256.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_256.java @@ -1,16 +1,13 @@ package com.gempukku.lotro.cards.set1.sauron; import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; +import com.gempukku.lotro.cards.modifiers.evaluator.CountSpottableEvaluator; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; 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.logic.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; /** * Set: The Fellowship of the Ring @@ -30,12 +27,6 @@ public class Card1_256 extends AbstractMinion { @Override public Modifier getAlwaysOnModifier(PhysicalCard self) { - return new AbstractModifier(self, "For each companion you can spot, this minion is strength +1.", Filters.sameCard(self), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER}) { - @Override - public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - int companions = Filters.countSpottable(gameState, modifiersQuerying, Filters.type(CardType.COMPANION)); - return companions + result; - } - }; + return new StrengthModifier(self, self, null, new CountSpottableEvaluator(CardType.COMPANION)); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_259.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_259.java index d4e18ada9..64dee9216 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_259.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/sauron/Card1_259.java @@ -1,15 +1,13 @@ package com.gempukku.lotro.cards.set1.sauron; import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; +import com.gempukku.lotro.cards.modifiers.evaluator.CountSpottableEvaluator; import com.gempukku.lotro.common.Culture; 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.logic.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; /** * Set: The Fellowship of the Ring @@ -29,12 +27,6 @@ public class Card1_259 extends AbstractMinion { @Override public Modifier getAlwaysOnModifier(final PhysicalCard self) { - return new AbstractModifier(self, "For each other [SAURON] Orc you can spot, Morgul Warden is strength +1.", Filters.sameCard(self), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER}) { - @Override - public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - int otherSauronOrcs = Filters.countSpottable(gameState, modifiersQuerying, Filters.culture(Culture.SAURON), Filters.race(Race.ORC), Filters.not(Filters.sameCard(self))); - return otherSauronOrcs + result; - } - }; + return new StrengthModifier(self, self, null, new CountSpottableEvaluator(Culture.SAURON, Race.ORC, Filters.not(self))); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_208.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_208.java index 6bd71f05c..47d614c64 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_208.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_208.java @@ -1,21 +1,20 @@ package com.gempukku.lotro.cards.set1.wraith; import com.gempukku.lotro.cards.AbstractAttachable; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; +import com.gempukku.lotro.cards.modifiers.conditions.LocationCondition; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filter; 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.RequiredTriggerAction; import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; import com.gempukku.lotro.logic.timing.EffectResult; import java.util.Collections; +import java.util.LinkedList; import java.util.List; /** @@ -39,14 +38,13 @@ public class Card1_208 extends AbstractAttachable { } @Override - public Modifier getAlwaysOnModifier(PhysicalCard self) { - return new AbstractModifier(self, "Strength +2, While at a Plains site, bearer is Strength +2", Filters.hasAttached(self), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER}) { - @Override - public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - int bonus = (modifiersQuerying.hasKeyword(gameState, gameState.getCurrentSite(), Keyword.PLAINS)) ? 4 : 2; - return result + bonus; - } - }; + public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { + List modifiers = new LinkedList(); + modifiers.add( + new StrengthModifier(self, Filters.hasAttached(self), 2)); + modifiers.add( + new StrengthModifier(self, Filters.hasAttached(self), new LocationCondition(Keyword.PLAINS), 2)); + return modifiers; } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_218.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_218.java index 815ec0ded..fd8ceac5a 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_218.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_218.java @@ -1,16 +1,18 @@ package com.gempukku.lotro.cards.set1.wraith; import com.gempukku.lotro.cards.AbstractAttachable; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filter; 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.modifiers.AbstractModifier; +import com.gempukku.lotro.logic.modifiers.KeywordModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.modifiers.SpotBurdensCondition; + +import java.util.LinkedList; +import java.util.List; /** * Set: The Fellowship of the Ring @@ -32,26 +34,12 @@ public class Card1_218 extends AbstractAttachable { } @Override - public Modifier getAlwaysOnModifier(PhysicalCard self) { - return new AbstractModifier(self, "Strength +2, While you can spot 3 burdens, bearer is damage +1", Filters.hasAttached(self), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER, ModifierEffect.KEYWORD_MODIFIER}) { - @Override - public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - return result + 2; - } - - @Override - public int getKeywordCount(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, int result) { - if (keyword == Keyword.DAMAGE && gameState.getBurdens() >= 3) - return result + 1; - return result; - } - - @Override - public boolean hasKeyword(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword, boolean result) { - if (keyword == Keyword.DAMAGE && gameState.getBurdens() >= 3) - return true; - return result; - } - }; + public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { + List modifiers = new LinkedList(); + modifiers.add( + new StrengthModifier(self, Filters.hasAttached(self), 2)); + modifiers.add( + new KeywordModifier(self, Filters.hasAttached(self), new SpotBurdensCondition(3), Keyword.DAMAGE, 1)); + return modifiers; } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_237.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_237.java index fe14533b0..381424f0b 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_237.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/wraith/Card1_237.java @@ -1,16 +1,15 @@ package com.gempukku.lotro.cards.set1.wraith; import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; +import com.gempukku.lotro.cards.modifiers.evaluator.CountSpottableEvaluator; +import com.gempukku.lotro.cards.modifiers.evaluator.MultiplyEvaluator; import com.gempukku.lotro.common.Culture; 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.logic.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; /** * Set: The Fellowship of the Ring @@ -31,12 +30,6 @@ public class Card1_237 extends AbstractMinion { @Override public Modifier getAlwaysOnModifier(final PhysicalCard self) { - return new AbstractModifier(self, "For each other Nazgul you can spot, The Witch-king is strength +2.", Filters.sameCard(self), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER}) { - @Override - public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - int otherNazgul = Filters.countSpottable(gameState, modifiersQuerying, Filters.race(Race.NAZGUL), Filters.not(Filters.sameCard(self))); - return result + (otherNazgul * 2); - } - }; + return new StrengthModifier(self, self, null, new MultiplyEvaluator(2, new CountSpottableEvaluator(Race.NAZGUL, Filters.not(self)))); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/dwarven/Card2_007.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/dwarven/Card2_007.java index 83d5c911f..5c378cdbe 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/dwarven/Card2_007.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/dwarven/Card2_007.java @@ -1,16 +1,13 @@ package com.gempukku.lotro.cards.set2.dwarven; import com.gempukku.lotro.cards.AbstractCompanion; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; +import com.gempukku.lotro.cards.modifiers.evaluator.CountSpottableEvaluator; import com.gempukku.lotro.common.Culture; 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.logic.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; /** * Set: Mines of Moria @@ -30,12 +27,6 @@ public class Card2_007 extends AbstractCompanion { @Override public Modifier getAlwaysOnModifier(PhysicalCard self) { - return new AbstractModifier(self, "For each DWARVEN tale you can spot, Gloin is strength +1 (limit +4)", Filters.sameCard(self), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER}) { - @Override - public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - int bonus = Math.max(4, Filters.countSpottable(gameState, modifiersQuerying, Filters.culture(Culture.DWARVEN), Filters.keyword(Keyword.TALE))); - return result + bonus; - } - }; + return new StrengthModifier(self, self, null, new CountSpottableEvaluator(4, Culture.DWARVEN, Keyword.TALE)); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/sauron/Card3_094.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/sauron/Card3_094.java index c8b33e03d..0fdb86b98 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/sauron/Card3_094.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/sauron/Card3_094.java @@ -1,17 +1,14 @@ package com.gempukku.lotro.cards.set3.sauron; import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; +import com.gempukku.lotro.cards.modifiers.evaluator.CountSpottableEvaluator; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; 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.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; import java.util.Collections; import java.util.List; @@ -35,11 +32,6 @@ public class Card3_094 extends AbstractMinion { @Override public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { return Collections.singletonList( - new AbstractModifier(self, "For each [SAURON] condition you can spot, this minion is strength +1.", Filters.sameCard(self), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER}) { - @Override - public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - return Filters.countSpottable(gameState, modifiersQuerying, Filters.culture(Culture.SAURON), Filters.type(CardType.CONDITION)) + result; - } - }); + new StrengthModifier(self, self, null, new CountSpottableEvaluator(Culture.SAURON, CardType.CONDITION))); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/sauron/Card3_096.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/sauron/Card3_096.java index 86db8fc0f..750b00923 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/sauron/Card3_096.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/sauron/Card3_096.java @@ -1,17 +1,15 @@ package com.gempukku.lotro.cards.set3.sauron; import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; +import com.gempukku.lotro.cards.modifiers.evaluator.CountSpottableEvaluator; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Race; import com.gempukku.lotro.common.Side; 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.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; import java.util.Collections; import java.util.List; @@ -35,12 +33,6 @@ public class Card3_096 extends AbstractMinion { @Override public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { return Collections.singletonList( - new AbstractModifier(self, "For each Free Peoples card borne by a character this minion is skirmishing, that character is strength -1", - Filters.inSkirmishAgainst(Filters.sameCard(self)), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER}) { - @Override - public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - return result - Filters.filter(gameState.getAttachedCards(physicalCard), gameState, modifiersQuerying, Filters.side(Side.FREE_PEOPLE)).size(); - } - }); + new StrengthModifier(self, self, null, new CountSpottableEvaluator(Side.FREE_PEOPLE, Filters.attachedTo(Filters.inSkirmishAgainst(self))))); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/sauron/Card3_099.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/sauron/Card3_099.java index 675a38137..acba1ef0a 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/sauron/Card3_099.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/sauron/Card3_099.java @@ -1,16 +1,15 @@ package com.gempukku.lotro.cards.set3.sauron; import com.gempukku.lotro.cards.AbstractMinion; +import com.gempukku.lotro.cards.modifiers.StrengthModifier; import com.gempukku.lotro.common.Culture; 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.modifiers.AbstractModifier; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.modifiers.evaluator.Evaluator; import java.util.Collections; import java.util.List; @@ -34,11 +33,12 @@ public class Card3_099 extends AbstractMinion { @Override public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { return Collections.singletonList( - new AbstractModifier(self, "For each card in your hand, this minion is strength +1", Filters.sameCard(self), new ModifierEffect[]{ModifierEffect.STRENGTH_MODIFIER}) { - @Override - public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - return result + gameState.getHand(physicalCard.getOwner()).size(); - } - }); + new StrengthModifier(self, self, null, + new Evaluator() { + @Override + public int evaluateExpression(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) { + return gameState.getHand(self.getOwner()).size(); + } + })); } } 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 f31f890f4..c5bb06933 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 @@ -73,8 +73,8 @@ public abstract class AbstractModifier implements Modifier { } @Override - public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { - return result; + public int getStrengthModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { + return 0; } @Override 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 d5585300e..bd0aa761f 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 @@ -28,7 +28,7 @@ public interface Modifier { public boolean isKeywordRemoved(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, Keyword keyword); - public int getStrength(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result); + public int getStrengthModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard); public boolean appliesStrengthModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource, boolean result); 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 0d83d7d2c..8d9a661af 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 @@ -233,7 +233,7 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { for (Modifier modifier : getModifiers(ModifierEffect.STRENGTH_MODIFIER)) { if (affectsCardWithSkipSet(gameState, physicalCard, modifier) && appliesStrengthModifier(gameState, modifier.getSource())) - result = modifier.getStrength(gameState, this, physicalCard, result); + result = modifier.getStrengthModifier(gameState, this, physicalCard); } return Math.max(0, result); }