- 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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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)))
|
|
||||||
)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
Reference in New Issue
Block a user