- System now correctly recognizes attribute bonus from attribute penalty and the source of the bonus/penalty is checked for cancelling bonus modifiers.

This commit is contained in:
marcins78@gmail.com
2012-01-16 15:16:20 +00:00
parent 97bf29e782
commit ae1d21a34f
21 changed files with 135 additions and 100 deletions

View File

@@ -1,7 +1,8 @@
package com.gempukku.lotro.cards.modifiers; package com.gempukku.lotro.cards.modifiers;
import com.gempukku.lotro.common.Filterable;
import com.gempukku.lotro.common.Keyword; 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.PhysicalCard;
import com.gempukku.lotro.game.state.GameState; import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.logic.modifiers.AbstractModifier; 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 { public class CancelKeywordBonusModifier extends AbstractModifier implements KeywordAffectingModifier {
private Keyword _keyword; 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); super(source, "Cancel " + keyword.getHumanReadable() + " keyword", affectFilter, ModifierEffect.CANCEL_KEYWORD_BONUS_MODIFIER);
_keyword = keyword; _keyword = keyword;
_sourceFilter = sourceFilter;
} }
@Override @Override
public boolean appliesKeywordModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource, Keyword keyword) { 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 false;
return true; return true;
} }

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set1.isengard;
import com.gempukku.lotro.cards.AbstractOldEvent; import com.gempukku.lotro.cards.AbstractOldEvent;
import com.gempukku.lotro.cards.actions.PlayEventAction; import com.gempukku.lotro.cards.actions.PlayEventAction;
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect; 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.common.*;
import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
@@ -43,7 +43,7 @@ public class Card1_132 extends AbstractOldEvent {
protected void cardSelected(LotroGame game, PhysicalCard possession) { protected void cardSelected(LotroGame game, PhysicalCard possession) {
action.appendEffect( action.appendEffect(
new AddUntilStartOfPhaseModifierEffect( new AddUntilStartOfPhaseModifierEffect(
new CancelStrengthBonusModifier(self, Filters.sameCard(possession)), Phase.REGROUP)); new CancelStrengthBonusSourceModifier(self, Filters.sameCard(possession)), Phase.REGROUP));
} }
} }
); );

View File

@@ -1,18 +1,13 @@
package com.gempukku.lotro.cards.set1.isengard; package com.gempukku.lotro.cards.set1.isengard;
import com.gempukku.lotro.cards.AbstractMinion; 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.CardType;
import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Race; import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard; 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.Modifier;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
/** /**
* Set: The Fellowship of the Ring * Set: The Fellowship of the Ring
@@ -33,22 +28,6 @@ public class Card1_143 extends AbstractMinion {
@Override @Override
public Modifier getAlwaysOnModifier(final PhysicalCard self) { public Modifier getAlwaysOnModifier(final PhysicalCard self) {
return new CancelStrengthBonusModifier(self, Filters.and( return new CancelStrengthBonusTargetModifier(self, Filters.inSkirmishAgainst(self), Filters.weapon);
// 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;
}
}
));
} }
} }

View File

@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set10.wraith;
import com.gempukku.lotro.cards.AbstractMinion; import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.modifiers.CancelKeywordBonusModifier; 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.CardType;
import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Keyword;
@@ -35,9 +35,13 @@ public class Card10_057 extends AbstractMinion {
public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) {
List<Modifier> modifiers = new LinkedList<Modifier>(); List<Modifier> modifiers = new LinkedList<Modifier>();
modifiers.add( 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( 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; return modifiers;
} }
} }

View File

@@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set11.men;
import com.gempukku.lotro.cards.AbstractAttachable; import com.gempukku.lotro.cards.AbstractAttachable;
import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.modifiers.CancelKeywordBonusModifier; 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.common.*;
import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.filters.Filters;
@@ -43,9 +43,13 @@ public class Card11_087 extends AbstractAttachable {
public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) {
List<Modifier> modifiers = new LinkedList<Modifier>(); List<Modifier> modifiers = new LinkedList<Modifier>();
modifiers.add( 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( 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; return modifiers;
} }
} }

View File

@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractPermanent;
import com.gempukku.lotro.cards.PlayConditions; import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.effects.SelfDiscardEffect; import com.gempukku.lotro.cards.effects.SelfDiscardEffect;
import com.gempukku.lotro.cards.effects.choose.ChooseAndTransferAttachableEffect; 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.common.*;
import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
@@ -34,8 +34,9 @@ public class Card12_070 extends AbstractPermanent {
@Override @Override
public Modifier getAlwaysOnModifier(PhysicalCard self) { public Modifier getAlwaysOnModifier(PhysicalCard self) {
return new CancelStrengthBonusModifier(self, new SpotCondition(6, CardType.COMPANION), return new CancelStrengthBonusTargetModifier(self, new SpotCondition(6, CardType.COMPANION),
Filters.and(CardType.POSSESSION, Filters.attachedTo(CardType.COMPANION, Filters.inSkirmishAgainst(CardType.MINION, Culture.MEN)))); Filters.and(CardType.COMPANION, Filters.inSkirmishAgainst(Culture.MEN, CardType.MINION)),
CardType.POSSESSION);
} }
@Override @Override

View File

@@ -1,7 +1,7 @@
package com.gempukku.lotro.cards.set12.uruk_hai; package com.gempukku.lotro.cards.set12.uruk_hai;
import com.gempukku.lotro.cards.AbstractMinion; 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.Culture;
import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Race; import com.gempukku.lotro.common.Race;
@@ -28,6 +28,8 @@ public class Card12_157 extends AbstractMinion {
@Override @Override
public Modifier getAlwaysOnModifier(PhysicalCard self) { 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);
} }
} }

View File

@@ -1,7 +1,7 @@
package com.gempukku.lotro.cards.set13.gandalf; package com.gempukku.lotro.cards.set13.gandalf;
import com.gempukku.lotro.cards.AbstractFollower; 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.CardType;
import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Side; import com.gempukku.lotro.common.Side;
@@ -44,7 +44,8 @@ public class Card13_038 extends AbstractFollower {
@Override @Override
protected List<? extends Modifier> getNonBasicStatsModifiers(PhysicalCard self) { protected List<? extends Modifier> getNonBasicStatsModifiers(PhysicalCard self) {
return Collections.singletonList( return Collections.singletonList(
new CancelStrengthBonusModifier(self, new SpotCondition(2, Culture.GANDALF, CardType.COMPANION), new CancelStrengthBonusTargetModifier(self, new SpotCondition(2, Culture.GANDALF, CardType.COMPANION),
Filters.and(CardType.POSSESSION, Filters.attachedTo(CardType.MINION, Filters.inSkirmishAgainst(Filters.hasAttached(self)))))); Filters.and(CardType.MINION, Filters.inSkirmishAgainst(Filters.hasAttached(self))),
CardType.POSSESSION));
} }
} }

View File

@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set2.gondor;
import com.gempukku.lotro.cards.AbstractAttachableFPPossession; import com.gempukku.lotro.cards.AbstractAttachableFPPossession;
import com.gempukku.lotro.cards.modifiers.ArcheryTotalModifier; 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.CardType;
import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.PossessionClass; 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.Filter;
import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard; 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.LotroGame;
import com.gempukku.lotro.logic.modifiers.Modifier; 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.LinkedList;
import java.util.List; import java.util.List;
@@ -42,13 +41,10 @@ public class Card2_038 extends AbstractAttachableFPPossession {
List<Modifier> modifiers = new LinkedList<Modifier>(); List<Modifier> modifiers = new LinkedList<Modifier>();
modifiers.add(new ArcheryTotalModifier(self, Side.SHADOW, -1)); modifiers.add(new ArcheryTotalModifier(self, Side.SHADOW, -1));
modifiers.add( modifiers.add(
new CancelStrengthBonusModifier(self, Filters.and(Filters.attachedTo(Filters.and(CardType.MINION, Filters.inSkirmish)), new CancelStrengthBonusTargetModifier(self,
new Filter() { new SpotCondition(Filters.boromir, Filters.hasAttached(self)),
@Override Filters.and(CardType.MINION, Filters.inSkirmishAgainst(Filters.boromir)),
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { Filters.weapon));
return gameState.getSkirmish() != null && gameState.getSkirmish().getFellowshipCharacter() == self.getAttachedTo();
}
})));
return modifiers; return modifiers;
} }
} }

View File

@@ -2,7 +2,7 @@ package com.gempukku.lotro.cards.set2.shire;
import com.gempukku.lotro.cards.AbstractAttachableFPPossession; import com.gempukku.lotro.cards.AbstractAttachableFPPossession;
import com.gempukku.lotro.cards.modifiers.ArcheryTotalModifier; 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.common.*;
import com.gempukku.lotro.filters.Filter; import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.filters.Filters;
@@ -39,7 +39,9 @@ public class Card2_105 extends AbstractAttachableFPPossession {
modifiers.add( modifiers.add(
new ArcheryTotalModifier(self, Side.SHADOW, -1)); new ArcheryTotalModifier(self, Side.SHADOW, -1));
modifiers.add( 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( modifiers.add(
new RemoveKeywordModifier(self, Filters.inSkirmishAgainst(Filters.hasAttached(self)), Keyword.DAMAGE)); new RemoveKeywordModifier(self, Filters.inSkirmishAgainst(Filters.hasAttached(self)), Keyword.DAMAGE));
return modifiers; return modifiers;

View File

@@ -29,9 +29,7 @@ public class Card3_072 extends AbstractPermanent {
public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList( return Collections.singletonList(
new CancelKeywordBonusModifier(self, Keyword.DAMAGE, new CancelKeywordBonusModifier(self, Keyword.DAMAGE,
Filters.and( Filters.and(Filters.character, Filters.inSkirmishAgainst(Culture.ISENGARD, Race.ORC)),
Filters.weapon, Filters.weapon));
Filters.attachedTo(Filters.inSkirmishAgainst(Filters.and(Culture.ISENGARD, Race.ORC)))
)));
} }
} }

View File

@@ -6,7 +6,7 @@ import com.gempukku.lotro.cards.effects.AddTokenEffect;
import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect; import com.gempukku.lotro.cards.effects.AddUntilEndOfPhaseModifierEffect;
import com.gempukku.lotro.cards.effects.RemoveTokenEffect; import com.gempukku.lotro.cards.effects.RemoveTokenEffect;
import com.gempukku.lotro.cards.effects.RemoveTwilightEffect; 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.common.*;
import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.PhysicalCard;
@@ -55,7 +55,9 @@ public class Card4_028 extends AbstractPermanent {
protected void cardSelected(LotroGame game, PhysicalCard dunlandMan) { protected void cardSelected(LotroGame game, PhysicalCard dunlandMan) {
action.appendEffect( action.appendEffect(
new AddUntilEndOfPhaseModifierEffect( 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); return Collections.singletonList(action);

View File

@@ -1,7 +1,7 @@
package com.gempukku.lotro.cards.set8.wraith; package com.gempukku.lotro.cards.set8.wraith;
import com.gempukku.lotro.cards.AbstractMinion; 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.Culture;
import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Race; import com.gempukku.lotro.common.Race;
@@ -33,7 +33,8 @@ public class Card8_084 extends AbstractMinion {
@Override @Override
public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) { public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList( return Collections.singletonList(
new CancelStrengthBonusModifier(self, new CancelStrengthBonusTargetModifier(self,
Filters.and(Filters.weapon, Filters.attachedTo(Race.MAN, Filters.inSkirmishAgainst(self))))); Filters.and(Race.MAN, Filters.inSkirmishAgainst(self)),
Filters.weapon));
} }
} }

View File

@@ -92,7 +92,7 @@ public abstract class AbstractModifier implements Modifier {
} }
@Override @Override
public boolean appliesStrengthModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource) { public boolean appliesStrengthBonusModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard modifierSource, PhysicalCard modifierTaget) {
return true; return true;
} }

View File

@@ -36,7 +36,7 @@ public interface Modifier {
public int getStrengthModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard); 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); public int getVitalityModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard);

View File

@@ -1,7 +1,10 @@
package com.gempukku.lotro.logic.modifiers; package com.gempukku.lotro.logic.modifiers;
public enum ModifierEffect { 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, 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, 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, LOOK_OR_REVEAL_MODIFIER, SPOT_MODIFIER, TARGET_MODIFIER,

View File

@@ -306,8 +306,9 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
try { try {
int result = physicalCard.getBlueprint().getStrength(); int result = physicalCard.getBlueprint().getStrength();
for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.STRENGTH_MODIFIER, physicalCard)) { for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.STRENGTH_MODIFIER, physicalCard)) {
if (appliesStrengthModifier(gameState, modifier.getSource())) final int strengthModifier = modifier.getStrengthModifier(gameState, this, physicalCard);
result += modifier.getStrengthModifier(gameState, this, physicalCard); if (strengthModifier <= 0 || appliesStrengthBonusModifier(gameState, modifier.getSource(), physicalCard))
result += strengthModifier;
} }
return Math.max(0, result); return Math.max(0, result);
} finally { } finally {
@@ -315,13 +316,17 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
} }
} }
private boolean appliesStrengthModifier(GameState gameState, PhysicalCard modifierSource) { private boolean appliesStrengthBonusModifier(GameState gameState, PhysicalCard modifierSource, PhysicalCard modifierTarget) {
if (modifierSource == null) if (modifierSource != null)
return true; for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.STRENGTH_BONUS_SOURCE_MODIFIER, modifierSource)) {
for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.STRENGTH_MODIFIER, modifierSource)) { if (!modifier.appliesStrengthBonusModifier(gameState, this, modifierSource, modifierTarget))
if (!modifier.appliesStrengthModifier(gameState, this, modifierSource)) return false;
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; return true;
} }

View File

@@ -3,7 +3,9 @@
- "Fearless" should now be giving a proper bonus to the minion. - "Fearless" should now be giving a proper bonus to the minion.
- "Orthanc Warrior" has a propert name now. - "Orthanc Warrior" has a propert name now.
- Added "Bloodlines" (set 13) set. - 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.
<b>15 Jan. 2012</b> <b>15 Jan. 2012</b>
- "Hobbit Farmer" and other allies copying site text should now be able to activate the site phase actions. - "Hobbit Farmer" and other allies copying site text should now be able to activate the site phase actions.