- Ring-bearer can't be discarded or returned to hand.
This commit is contained in:
@@ -2,11 +2,13 @@ package com.gempukku.lotro.cards.effects;
|
||||
|
||||
import com.gempukku.lotro.common.Filterable;
|
||||
import com.gempukku.lotro.common.Zone;
|
||||
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.GameUtils;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
|
||||
import com.gempukku.lotro.logic.timing.AbstractEffect;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
import com.gempukku.lotro.logic.timing.results.DiscardCardsFromPlayResult;
|
||||
@@ -39,7 +41,13 @@ public class ReturnCardsToHandEffect extends AbstractEffect {
|
||||
|
||||
@Override
|
||||
public boolean isPlayableInFull(LotroGame game) {
|
||||
return Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), _filter).size() > 0;
|
||||
return Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), _filter,
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return (_source == null || modifiersQuerying.canBeReturnedToHand(gameState, physicalCard, _source));
|
||||
}
|
||||
}).size() > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
package com.gempukku.lotro.cards.effects.choose;
|
||||
|
||||
import com.gempukku.lotro.common.Filterable;
|
||||
import com.gempukku.lotro.filters.Filter;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.GameState;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.SubAction;
|
||||
import com.gempukku.lotro.logic.effects.ChooseActiveCardsEffect;
|
||||
import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
|
||||
import com.gempukku.lotro.logic.timing.Action;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -20,6 +23,16 @@ public class ChooseAndDiscardCardsFromPlayEffect extends ChooseActiveCardsEffect
|
||||
_action = action;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Filter getExtraFilterForPlaying(LotroGame game) {
|
||||
return new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return (_action.getActionSource() == null || modifiersQuerying.canBeDiscardedFromPlay(gameState, physicalCard, _action.getActionSource()));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void cardsSelected(LotroGame game, Collection<PhysicalCard> cards) {
|
||||
_resultSubAction = new SubAction(_action);
|
||||
|
||||
@@ -2,11 +2,14 @@ package com.gempukku.lotro.cards.effects.choose;
|
||||
|
||||
import com.gempukku.lotro.cards.effects.ReturnCardsToHandEffect;
|
||||
import com.gempukku.lotro.common.Filterable;
|
||||
import com.gempukku.lotro.filters.Filter;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.GameState;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.SubAction;
|
||||
import com.gempukku.lotro.logic.effects.ChooseActiveCardsEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
|
||||
import com.gempukku.lotro.logic.timing.Action;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -19,6 +22,16 @@ public class ChooseAndReturnCardsToHandEffect extends ChooseActiveCardsEffect {
|
||||
_action = action;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Filter getExtraFilterForPlaying(LotroGame game) {
|
||||
return new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return (_action.getActionSource() == null || modifiersQuerying.canBeReturnedToHand(gameState, physicalCard, _action.getActionSource()));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void cardsSelected(LotroGame game, Collection<PhysicalCard> cards) {
|
||||
SubAction subAction = new SubAction(_action);
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.gempukku.lotro.cards.set1.shire;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractCompanion;
|
||||
import com.gempukku.lotro.cards.modifiers.CantDiscardFromPlayModifier;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Race;
|
||||
import com.gempukku.lotro.common.Signet;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.logic.modifiers.CantDiscardFromPlayModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.gempukku.lotro.cards.set13.uruk_hai;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractMinion;
|
||||
import com.gempukku.lotro.cards.modifiers.CantDiscardFromPlayModifier;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.logic.modifiers.CantDiscardFromPlayModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
|
||||
/**
|
||||
|
||||
@@ -5,7 +5,6 @@ import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.TriggerConditions;
|
||||
import com.gempukku.lotro.cards.effects.AddBurdenEffect;
|
||||
import com.gempukku.lotro.cards.effects.SelfExertEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.CantDiscardFromPlayModifier;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Race;
|
||||
@@ -13,6 +12,7 @@ import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.ActivateCardAction;
|
||||
import com.gempukku.lotro.logic.modifiers.CantDiscardFromPlayModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.TriggerConditions;
|
||||
import com.gempukku.lotro.cards.effects.ExhaustCharacterEffect;
|
||||
import com.gempukku.lotro.cards.effects.SelfExertEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.CantDiscardFromPlayModifier;
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
@@ -15,6 +14,7 @@ import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.ActivateCardAction;
|
||||
import com.gempukku.lotro.logic.effects.ChooseActiveCardEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.CantDiscardFromPlayModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ import com.gempukku.lotro.cards.AbstractMinion;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.TriggerConditions;
|
||||
import com.gempukku.lotro.cards.effects.SelfExertEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.CantDiscardFromPlayModifier;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Race;
|
||||
@@ -13,6 +12,7 @@ import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.actions.ActivateCardAction;
|
||||
import com.gempukku.lotro.logic.effects.ChooseAndWoundCharactersEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.CantDiscardFromPlayModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
import com.gempukku.lotro.logic.timing.EffectResult;
|
||||
|
||||
|
||||
@@ -236,6 +236,11 @@ public abstract class AbstractModifier implements Modifier {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeReturnedToHand(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, PhysicalCard source) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeHealed(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card) {
|
||||
return true;
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
package com.gempukku.lotro.cards.modifiers;
|
||||
package com.gempukku.lotro.logic.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.ModifierEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
|
||||
|
||||
public class CantDiscardFromPlayModifier extends AbstractModifier {
|
||||
private Filter _sourceFilter;
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.gempukku.lotro.logic.modifiers;
|
||||
|
||||
import com.gempukku.lotro.filters.Filter;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.GameState;
|
||||
|
||||
public class CantReturnToHandModifier extends AbstractModifier {
|
||||
private Filter _sourceFilter;
|
||||
|
||||
public CantReturnToHandModifier(PhysicalCard source, String text, Filter affectFilter, Filter sourceFilter) {
|
||||
super(source, text, affectFilter, ModifierEffect.RETURN_TO_HAND_MODIFIER);
|
||||
_sourceFilter = sourceFilter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeReturnedToHand(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, PhysicalCard source) {
|
||||
if (_sourceFilter.accepts(gameState, modifiersQuerying, source))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -96,6 +96,8 @@ public interface Modifier {
|
||||
|
||||
public boolean canBeDiscardedFromPlay(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, PhysicalCard source);
|
||||
|
||||
public boolean canBeReturnedToHand(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, PhysicalCard source);
|
||||
|
||||
public boolean canBeHealed(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card);
|
||||
|
||||
public boolean canRemoveBurden(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard source);
|
||||
|
||||
@@ -7,7 +7,7 @@ public enum ModifierEffect {
|
||||
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,
|
||||
LOOK_OR_REVEAL_MODIFIER, SPOT_MODIFIER, TARGET_MODIFIER, RETURN_TO_HAND_MODIFIER,
|
||||
|
||||
EXTRA_ACTION_MODIFIER, INITIATIVE_MODIFIER, TEXT_MODIFIER,
|
||||
|
||||
|
||||
@@ -677,6 +677,19 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeReturnedToHand(GameState gameState, PhysicalCard card, PhysicalCard source) {
|
||||
LoggingThreadLocal.logMethodStart(card, "canBeReturnedToHand");
|
||||
try {
|
||||
for (Modifier modifier : getModifiersAffectingCard(gameState, ModifierEffect.RETURN_TO_HAND_MODIFIER, card))
|
||||
if (!modifier.canBeReturnedToHand(gameState, this, card, source))
|
||||
return false;
|
||||
return true;
|
||||
} finally {
|
||||
LoggingThreadLocal.logMethodEnd();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeHealed(GameState gameState, PhysicalCard card) {
|
||||
LoggingThreadLocal.logMethodStart(card, "canBeHealed");
|
||||
|
||||
@@ -96,6 +96,8 @@ public interface ModifiersQuerying {
|
||||
// Others
|
||||
public boolean canBeDiscardedFromPlay(GameState gameState, PhysicalCard card, PhysicalCard source);
|
||||
|
||||
public boolean canBeReturnedToHand(GameState gameState, PhysicalCard card, PhysicalCard source);
|
||||
|
||||
public boolean canDrawCardNoIncrement(GameState gameState, String playerId);
|
||||
|
||||
public boolean canDrawCardAndIncrement(GameState gameState, String playerId);
|
||||
|
||||
@@ -36,6 +36,8 @@ public class RuleSet {
|
||||
|
||||
new FrodoAndSamRule(_modifiersLogic).applyRule();
|
||||
|
||||
new RingBearerRule(_modifiersLogic).applyRule();
|
||||
|
||||
new ThreatRule(_actionsEnvironment).applyRule();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.gempukku.lotro.logic.timing.rules;
|
||||
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.logic.modifiers.CantDiscardFromPlayModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.CantReturnToHandModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifiersLogic;
|
||||
|
||||
public class RingBearerRule {
|
||||
private ModifiersLogic _modifiersLogic;
|
||||
|
||||
public RingBearerRule(ModifiersLogic modifiersLogic) {
|
||||
_modifiersLogic = modifiersLogic;
|
||||
}
|
||||
|
||||
public void applyRule() {
|
||||
_modifiersLogic.addAlwaysOnModifier(
|
||||
new CantDiscardFromPlayModifier(null, "Can't be discarded from play", Filters.ringBearer, Filters.any));
|
||||
_modifiersLogic.addAlwaysOnModifier(
|
||||
new CantReturnToHandModifier(null, "Can't be returned to hand", Filters.ringBearer, Filters.any));
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
<pre style="font-size:80%">
|
||||
<b>24 Jan. 2012</b>
|
||||
- "Horse of Rohan" now requires to spot ROHAN Man.
|
||||
- Ring-bearer can't be discarded or returned to hand.
|
||||
|
||||
<b>23 Jan. 2012</b>
|
||||
- You can't create a League table, if you played maximum number of games in league serie. You can't join a league table
|
||||
|
||||
Reference in New Issue
Block a user