From ae1d21a34f3fb9c887d4068d3144ed3bc011d4ff Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Mon, 16 Jan 2012 15:16:20 +0000 Subject: [PATCH] - System now correctly recognizes attribute bonus from attribute penalty and the source of the bonus/penalty is checked for cancelling bonus modifiers. --- .../modifiers/CancelKeywordBonusModifier.java | 10 ++++-- .../CancelStrengthBonusModifier.java | 24 -------------- .../CancelStrengthBonusSourceModifier.java | 24 ++++++++++++++ .../CancelStrengthBonusTargetModifier.java | 31 +++++++++++++++++++ .../lotro/cards/set1/isengard/Card1_132.java | 4 +-- .../lotro/cards/set1/isengard/Card1_143.java | 25 ++------------- .../lotro/cards/set10/wraith/Card10_057.java | 10 ++++-- .../lotro/cards/set11/men/Card11_087.java | 10 ++++-- .../lotro/cards/set12/men/Card12_070.java | 7 +++-- .../cards/set12/uruk_hai/Card12_157.java | 6 ++-- .../lotro/cards/set13/gandalf/Card13_038.java | 7 +++-- .../lotro/cards/set2/gondor/Card2_038.java | 16 ++++------ .../lotro/cards/set2/shire/Card2_105.java | 6 ++-- .../lotro/cards/set3/isengard/Card3_072.java | 6 ++-- .../lotro/cards/set4/dunland/Card4_028.java | 6 ++-- .../lotro/cards/set8/wraith/Card8_084.java | 7 +++-- .../logic/modifiers/AbstractModifier.java | 2 +- .../lotro/logic/modifiers/Modifier.java | 2 +- .../lotro/logic/modifiers/ModifierEffect.java | 5 ++- .../lotro/logic/modifiers/ModifiersLogic.java | 23 ++++++++------ .../src/main/webapp/includes/changeLog.html | 4 ++- 21 files changed, 135 insertions(+), 100 deletions(-) delete mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CancelStrengthBonusModifier.java create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CancelStrengthBonusSourceModifier.java create mode 100644 gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CancelStrengthBonusTargetModifier.java diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CancelKeywordBonusModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CancelKeywordBonusModifier.java index 7bc27a857..c47ebad6e 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CancelKeywordBonusModifier.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CancelKeywordBonusModifier.java @@ -1,7 +1,8 @@ package com.gempukku.lotro.cards.modifiers; +import com.gempukku.lotro.common.Filterable; import com.gempukku.lotro.common.Keyword; -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; @@ -11,15 +12,18 @@ import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; public class CancelKeywordBonusModifier extends AbstractModifier implements KeywordAffectingModifier { private Keyword _keyword; + private Filterable _sourceFilter; - public CancelKeywordBonusModifier(PhysicalCard source, Keyword keyword, Filter affectFilter) { + public CancelKeywordBonusModifier(PhysicalCard source, Keyword keyword, Filterable affectFilter, Filterable sourceFilter) { super(source, "Cancel " + keyword.getHumanReadable() + " keyword", affectFilter, ModifierEffect.CANCEL_KEYWORD_BONUS_MODIFIER); _keyword = keyword; + _sourceFilter = sourceFilter; } @Override public boolean appliesKeywordModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource, Keyword keyword) { - if (keyword == _keyword) + if (keyword == _keyword + && (_sourceFilter == null || (modifierSource != null && Filters.and(_sourceFilter).accepts(gameState, modifiersQuerying, modifierSource)))) return false; return true; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CancelStrengthBonusModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CancelStrengthBonusModifier.java deleted file mode 100644 index 660f46b90..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CancelStrengthBonusModifier.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.gempukku.lotro.cards.modifiers; - -import com.gempukku.lotro.filters.Filter; -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.Condition; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; - -public class CancelStrengthBonusModifier extends AbstractModifier { - public CancelStrengthBonusModifier(PhysicalCard source, Filter affectFilter) { - super(source, "Cancel strength bonus", affectFilter, ModifierEffect.STRENGTH_MODIFIER); - } - - public CancelStrengthBonusModifier(PhysicalCard source, Condition condition, Filter affectFilter) { - super(source, "Cancel strength bonus", affectFilter, condition, ModifierEffect.STRENGTH_MODIFIER); - } - - @Override - public boolean appliesStrengthModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource) { - return false; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CancelStrengthBonusSourceModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CancelStrengthBonusSourceModifier.java new file mode 100644 index 000000000..3607804f6 --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CancelStrengthBonusSourceModifier.java @@ -0,0 +1,24 @@ +package com.gempukku.lotro.cards.modifiers; + +import com.gempukku.lotro.common.Filterable; +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.Condition; +import com.gempukku.lotro.logic.modifiers.ModifierEffect; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; + +public class CancelStrengthBonusSourceModifier extends AbstractModifier { + public CancelStrengthBonusSourceModifier(PhysicalCard source, Filterable affectFilter) { + super(source, "Cancel strength bonus", affectFilter, ModifierEffect.STRENGTH_BONUS_SOURCE_MODIFIER); + } + + public CancelStrengthBonusSourceModifier(PhysicalCard source, Condition condition, Filterable affectFilter) { + super(source, "Cancel strength bonus", affectFilter, condition, ModifierEffect.STRENGTH_BONUS_SOURCE_MODIFIER); + } + + @Override + public boolean appliesStrengthBonusModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource, PhysicalCard modifierTaget) { + return false; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CancelStrengthBonusTargetModifier.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CancelStrengthBonusTargetModifier.java new file mode 100644 index 000000000..1ca5e408b --- /dev/null +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/modifiers/CancelStrengthBonusTargetModifier.java @@ -0,0 +1,31 @@ +package com.gempukku.lotro.cards.modifiers; + +import com.gempukku.lotro.common.Filterable; +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.Condition; +import com.gempukku.lotro.logic.modifiers.ModifierEffect; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; + +public class CancelStrengthBonusTargetModifier extends AbstractModifier { + private Filterable _sourceFilter; + + public CancelStrengthBonusTargetModifier(PhysicalCard source, Filterable affectFilter, Filterable sourceFilter) { + super(source, "Has some strength bonuses cancelled", affectFilter, ModifierEffect.STRENGTH_BONUS_TARGET_MODIFIER); + _sourceFilter = sourceFilter; + } + + public CancelStrengthBonusTargetModifier(PhysicalCard source, Condition condition, Filterable affectFilter, Filterable sourceFilter) { + super(source, "Has some strength bonuses cancelled", affectFilter, condition, ModifierEffect.STRENGTH_BONUS_TARGET_MODIFIER); + _sourceFilter = sourceFilter; + } + + @Override + public boolean appliesStrengthBonusModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource, PhysicalCard modifierTaget) { + if (_sourceFilter == null || (modifierSource != null && Filters.and(_sourceFilter).accepts(gameState, modifiersQuerying, modifierSource))) + return false; + return true; + } +} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_132.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_132.java index 0dd9da9ef..9609a1761 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_132.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_132.java @@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set1.isengard; import com.gempukku.lotro.cards.AbstractOldEvent; import com.gempukku.lotro.cards.actions.PlayEventAction; import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect; -import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier; +import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusSourceModifier; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; @@ -43,7 +43,7 @@ public class Card1_132 extends AbstractOldEvent { protected void cardSelected(LotroGame game, PhysicalCard possession) { action.appendEffect( new AddUntilStartOfPhaseModifierEffect( - new CancelStrengthBonusModifier(self, Filters.sameCard(possession)), Phase.REGROUP)); + new CancelStrengthBonusSourceModifier(self, Filters.sameCard(possession)), Phase.REGROUP)); } } ); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_143.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_143.java index bed34f92b..4dc7feccc 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_143.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set1/isengard/Card1_143.java @@ -1,18 +1,13 @@ package com.gempukku.lotro.cards.set1.isengard; import com.gempukku.lotro.cards.AbstractMinion; -import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier; -import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusTargetModifier; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Race; -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.Skirmish; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; /** * Set: The Fellowship of the Ring @@ -33,22 +28,6 @@ public class Card1_143 extends AbstractMinion { @Override public Modifier getAlwaysOnModifier(final PhysicalCard self) { - return new CancelStrengthBonusModifier(self, Filters.and( - // Weapon bonus (Hand or Ranged) - Filters.weapon, - // That is attached to Companion or Ally - Filters.attachedTo(Filters.or(CardType.COMPANION, CardType.ALLY)), - // In a skirmish with this minion - new Filter() { - @Override - public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { - Skirmish skirmish = gameState.getSkirmish(); - if (skirmish != null - && skirmish.getShadowCharacters().contains(self)) - return true; - return false; - } - } - )); + return new CancelStrengthBonusTargetModifier(self, Filters.inSkirmishAgainst(self), Filters.weapon); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/wraith/Card10_057.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/wraith/Card10_057.java index c15691141..6e2fb59a7 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/wraith/Card10_057.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set10/wraith/Card10_057.java @@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set10.wraith; import com.gempukku.lotro.cards.AbstractMinion; import com.gempukku.lotro.cards.modifiers.CancelKeywordBonusModifier; -import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier; +import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusTargetModifier; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Keyword; @@ -35,9 +35,13 @@ public class Card10_057 extends AbstractMinion { public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { List modifiers = new LinkedList(); modifiers.add( - new CancelStrengthBonusModifier(self, Filters.and(CardType.POSSESSION, Filters.attachedTo(CardType.COMPANION, Filters.inSkirmishAgainst(self))))); + new CancelStrengthBonusTargetModifier(self, + Filters.and(CardType.COMPANION, Filters.inSkirmishAgainst(self)), + CardType.POSSESSION)); modifiers.add( - new CancelKeywordBonusModifier(self, Keyword.DAMAGE, Filters.and(CardType.POSSESSION, Filters.attachedTo(CardType.COMPANION, Filters.inSkirmishAgainst(self))))); + new CancelKeywordBonusModifier(self, Keyword.DAMAGE, + Filters.and(CardType.COMPANION, Filters.inSkirmishAgainst(self)), + CardType.POSSESSION)); return modifiers; } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/men/Card11_087.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/men/Card11_087.java index dea7ebf78..af0e945df 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/men/Card11_087.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set11/men/Card11_087.java @@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set11.men; import com.gempukku.lotro.cards.AbstractAttachable; import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.modifiers.CancelKeywordBonusModifier; -import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier; +import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusTargetModifier; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.filters.Filters; @@ -43,9 +43,13 @@ public class Card11_087 extends AbstractAttachable { public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { List modifiers = new LinkedList(); modifiers.add( - new CancelStrengthBonusModifier(self, Filters.and(CardType.POSSESSION, Filters.attachedTo(Filters.hasAttached(self), Filters.inSkirmishAgainst(Culture.MEN, CardType.MINION))))); + new CancelStrengthBonusTargetModifier(self, + Filters.and(Filters.hasAttached(self), Filters.inSkirmishAgainst(Culture.MEN, CardType.MINION)), + CardType.POSSESSION)); modifiers.add( - new CancelKeywordBonusModifier(self, Keyword.DAMAGE, Filters.and(CardType.POSSESSION, Filters.attachedTo(Filters.hasAttached(self), Filters.inSkirmishAgainst(Culture.MEN, CardType.MINION))))); + new CancelKeywordBonusModifier(self, Keyword.DAMAGE, + Filters.and(Filters.hasAttached(self), Filters.inSkirmishAgainst(Culture.MEN, CardType.MINION)), + CardType.POSSESSION)); return modifiers; } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/men/Card12_070.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/men/Card12_070.java index f4b356d70..e2e019738 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/men/Card12_070.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/men/Card12_070.java @@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractPermanent; import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.effects.SelfDiscardEffect; import com.gempukku.lotro.cards.effects.choose.ChooseAndTransferAttachableEffect; -import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier; +import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusTargetModifier; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; @@ -34,8 +34,9 @@ public class Card12_070 extends AbstractPermanent { @Override public Modifier getAlwaysOnModifier(PhysicalCard self) { - return new CancelStrengthBonusModifier(self, new SpotCondition(6, CardType.COMPANION), - Filters.and(CardType.POSSESSION, Filters.attachedTo(CardType.COMPANION, Filters.inSkirmishAgainst(CardType.MINION, Culture.MEN)))); + return new CancelStrengthBonusTargetModifier(self, new SpotCondition(6, CardType.COMPANION), + Filters.and(CardType.COMPANION, Filters.inSkirmishAgainst(Culture.MEN, CardType.MINION)), + CardType.POSSESSION); } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/uruk_hai/Card12_157.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/uruk_hai/Card12_157.java index 08e073daf..f2f23b87d 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/uruk_hai/Card12_157.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set12/uruk_hai/Card12_157.java @@ -1,7 +1,7 @@ package com.gempukku.lotro.cards.set12.uruk_hai; import com.gempukku.lotro.cards.AbstractMinion; -import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier; +import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusTargetModifier; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Race; @@ -28,6 +28,8 @@ public class Card12_157 extends AbstractMinion { @Override public Modifier getAlwaysOnModifier(PhysicalCard self) { - return new CancelStrengthBonusModifier(self, Filters.and(Filters.weapon, Filters.attachedTo(Filters.inSkirmishAgainst(self)))); + return new CancelStrengthBonusTargetModifier(self, + Filters.and(Filters.character, Filters.inSkirmishAgainst(self)), + Filters.weapon); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/gandalf/Card13_038.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/gandalf/Card13_038.java index 47adad94f..8f8ac0a4d 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/gandalf/Card13_038.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set13/gandalf/Card13_038.java @@ -1,7 +1,7 @@ package com.gempukku.lotro.cards.set13.gandalf; import com.gempukku.lotro.cards.AbstractFollower; -import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier; +import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusTargetModifier; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Side; @@ -44,7 +44,8 @@ public class Card13_038 extends AbstractFollower { @Override protected List getNonBasicStatsModifiers(PhysicalCard self) { return Collections.singletonList( - new CancelStrengthBonusModifier(self, new SpotCondition(2, Culture.GANDALF, CardType.COMPANION), - Filters.and(CardType.POSSESSION, Filters.attachedTo(CardType.MINION, Filters.inSkirmishAgainst(Filters.hasAttached(self)))))); + new CancelStrengthBonusTargetModifier(self, new SpotCondition(2, Culture.GANDALF, CardType.COMPANION), + Filters.and(CardType.MINION, Filters.inSkirmishAgainst(Filters.hasAttached(self))), + CardType.POSSESSION)); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_038.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_038.java index 38efc25b3..3459408f1 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_038.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/gondor/Card2_038.java @@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set2.gondor; import com.gempukku.lotro.cards.AbstractAttachableFPPossession; import com.gempukku.lotro.cards.modifiers.ArcheryTotalModifier; -import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier; +import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusTargetModifier; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.PossessionClass; @@ -10,10 +10,9 @@ 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.game.state.LotroGame; import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; +import com.gempukku.lotro.logic.modifiers.SpotCondition; import java.util.LinkedList; import java.util.List; @@ -42,13 +41,10 @@ public class Card2_038 extends AbstractAttachableFPPossession { List modifiers = new LinkedList(); modifiers.add(new ArcheryTotalModifier(self, Side.SHADOW, -1)); modifiers.add( - new CancelStrengthBonusModifier(self, Filters.and(Filters.attachedTo(Filters.and(CardType.MINION, Filters.inSkirmish)), - new Filter() { - @Override - public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { - return gameState.getSkirmish() != null && gameState.getSkirmish().getFellowshipCharacter() == self.getAttachedTo(); - } - }))); + new CancelStrengthBonusTargetModifier(self, + new SpotCondition(Filters.boromir, Filters.hasAttached(self)), + Filters.and(CardType.MINION, Filters.inSkirmishAgainst(Filters.boromir)), + Filters.weapon)); return modifiers; } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/shire/Card2_105.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/shire/Card2_105.java index 1651da5ba..e9fcd5ef8 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/shire/Card2_105.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set2/shire/Card2_105.java @@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set2.shire; import com.gempukku.lotro.cards.AbstractAttachableFPPossession; import com.gempukku.lotro.cards.modifiers.ArcheryTotalModifier; -import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier; +import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusTargetModifier; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.filters.Filters; @@ -39,7 +39,9 @@ public class Card2_105 extends AbstractAttachableFPPossession { modifiers.add( new ArcheryTotalModifier(self, Side.SHADOW, -1)); modifiers.add( - new CancelStrengthBonusModifier(self, Filters.and(Filters.weapon, Filters.attachedTo(Filters.inSkirmishAgainst(Filters.hasAttached(self)))))); + new CancelStrengthBonusTargetModifier(self, + Filters.and(CardType.MINION, Filters.inSkirmishAgainst(Filters.frodo)), + Filters.weapon)); modifiers.add( new RemoveKeywordModifier(self, Filters.inSkirmishAgainst(Filters.hasAttached(self)), Keyword.DAMAGE)); return modifiers; diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/isengard/Card3_072.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/isengard/Card3_072.java index d610b6153..4e55a0c2f 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/isengard/Card3_072.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/isengard/Card3_072.java @@ -29,9 +29,7 @@ public class Card3_072 extends AbstractPermanent { public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { return Collections.singletonList( new CancelKeywordBonusModifier(self, Keyword.DAMAGE, - Filters.and( - Filters.weapon, - Filters.attachedTo(Filters.inSkirmishAgainst(Filters.and(Culture.ISENGARD, Race.ORC))) - ))); + Filters.and(Filters.character, Filters.inSkirmishAgainst(Culture.ISENGARD, Race.ORC)), + Filters.weapon)); } } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dunland/Card4_028.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dunland/Card4_028.java index 216049b42..6a90bd411 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dunland/Card4_028.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/dunland/Card4_028.java @@ -6,7 +6,7 @@ import com.gempukku.lotro.cards.effects.AddTokenEffect; import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; import com.gempukku.lotro.cards.effects.RemoveTokenEffect; import com.gempukku.lotro.cards.effects.RemoveTwilightEffect; -import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier; +import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusTargetModifier; import com.gempukku.lotro.common.*; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; @@ -55,7 +55,9 @@ public class Card4_028 extends AbstractPermanent { protected void cardSelected(LotroGame game, PhysicalCard dunlandMan) { action.appendEffect( new AddUntilEndOfPhaseModifierEffect( - new CancelStrengthBonusModifier(self, Filters.and(CardType.POSSESSION, Filters.attachedTo(Filters.inSkirmishAgainst(Filters.sameCard(dunlandMan))))), Phase.SKIRMISH)); + new CancelStrengthBonusTargetModifier(self, + Filters.and(Filters.character, Filters.inSkirmishAgainst(dunlandMan)), + CardType.POSSESSION), Phase.SKIRMISH)); } }); return Collections.singletonList(action); diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/wraith/Card8_084.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/wraith/Card8_084.java index cb5f1cf83..efbda8a14 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/wraith/Card8_084.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set8/wraith/Card8_084.java @@ -1,7 +1,7 @@ package com.gempukku.lotro.cards.set8.wraith; import com.gempukku.lotro.cards.AbstractMinion; -import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusModifier; +import com.gempukku.lotro.cards.modifiers.CancelStrengthBonusTargetModifier; import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Race; @@ -33,7 +33,8 @@ public class Card8_084 extends AbstractMinion { @Override public List getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { return Collections.singletonList( - new CancelStrengthBonusModifier(self, - Filters.and(Filters.weapon, Filters.attachedTo(Race.MAN, Filters.inSkirmishAgainst(self))))); + new CancelStrengthBonusTargetModifier(self, + Filters.and(Race.MAN, Filters.inSkirmishAgainst(self)), + Filters.weapon)); } } 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 fc374b53b..dc7c95adb 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 @@ -92,7 +92,7 @@ public abstract class AbstractModifier implements Modifier { } @Override - public boolean appliesStrengthModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource) { + public boolean appliesStrengthBonusModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource, PhysicalCard modifierTaget) { return true; } 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 0a69f1e3b..03904d6de 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 @@ -36,7 +36,7 @@ public interface Modifier { public int getStrengthModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard); - public boolean appliesStrengthModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource); + public boolean appliesStrengthBonusModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource, PhysicalCard modifierTaget); public int getVitalityModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard); 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 166636cc4..91f61421d 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 @@ -1,7 +1,10 @@ package com.gempukku.lotro.logic.modifiers; public enum ModifierEffect { - SIGNET_MODIFIER, STRENGTH_MODIFIER, VITALITY_MODIFIER, RESISTANCE_MODIFIER, SITE_NUMBER_MODIFIER, TWILIGHT_COST_MODIFIER, OVERWHELM_MODIFIER, + SIGNET_MODIFIER, STRENGTH_MODIFIER, + STRENGTH_BONUS_SOURCE_MODIFIER, + STRENGTH_BONUS_TARGET_MODIFIER, + VITALITY_MODIFIER, RESISTANCE_MODIFIER, SITE_NUMBER_MODIFIER, TWILIGHT_COST_MODIFIER, OVERWHELM_MODIFIER, WOUND_MODIFIER, BURDEN_MODIFIER, THREAT_MODIFIER, PRESENCE_MODIFIER, ARCHERY_MODIFIER, MOVE_LIMIT_MODIFIER, ACTION_MODIFIER, ASSIGNMENT_MODIFIER, DISCARD_FROM_PLAY_MODIFIER, DISCARD_NOT_FROM_PLAY, LOOK_OR_REVEAL_MODIFIER, SPOT_MODIFIER, TARGET_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 8cd40287c..c43b574b4 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 @@ -306,8 +306,9 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { try { int result = physicalCard.getBlueprint().getStrength(); for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.STRENGTH_MODIFIER, physicalCard)) { - if (appliesStrengthModifier(gameState, modifier.getSource())) - result += modifier.getStrengthModifier(gameState, this, physicalCard); + final int strengthModifier = modifier.getStrengthModifier(gameState, this, physicalCard); + if (strengthModifier <= 0 || appliesStrengthBonusModifier(gameState, modifier.getSource(), physicalCard)) + result += strengthModifier; } return Math.max(0, result); } finally { @@ -315,13 +316,17 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying { } } - private boolean appliesStrengthModifier(GameState gameState, PhysicalCard modifierSource) { - if (modifierSource == null) - return true; - for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.STRENGTH_MODIFIER, modifierSource)) { - if (!modifier.appliesStrengthModifier(gameState, this, modifierSource)) - return false; - } + private boolean appliesStrengthBonusModifier(GameState gameState, PhysicalCard modifierSource, PhysicalCard modifierTarget) { + if (modifierSource != null) + for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.STRENGTH_BONUS_SOURCE_MODIFIER, modifierSource)) { + if (!modifier.appliesStrengthBonusModifier(gameState, this, modifierSource, modifierTarget)) + return false; + } + if (modifierTarget != null) + for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.STRENGTH_BONUS_TARGET_MODIFIER, modifierTarget)) { + if (!modifier.appliesStrengthBonusModifier(gameState, this, modifierSource, modifierTarget)) + return false; + } return true; } diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html b/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html index 478fa8fc6..3e7fdc45c 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html @@ -3,7 +3,9 @@ - "Fearless" should now be giving a proper bonus to the minion. - "Orthanc Warrior" has a propert name now. - Added "Bloodlines" (set 13) set. -- "Master Proudfoot" now gives an option of choosing which cards to put into hand, because of Rule of 4. +- "Master Proudfoot" now gives an option of choosing which cards to put into hand, because of Rule of 4. +- System now correctly recognizes attribute bonus from attribute penalty and the source of the bonus/penalty is checked +for cancelling bonus modifiers. 15 Jan. 2012 - "Hobbit Farmer" and other allies copying site text should now be able to activate the site phase actions.