- Ring-bearer can't be discarded or returned to hand.

This commit is contained in:
marcins78@gmail.com
2012-01-24 20:53:17 +00:00
parent a9aa9499e8
commit 505a579cb2
18 changed files with 109 additions and 11 deletions

View File

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

View File

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

View File

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

View File

@@ -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;
/**

View File

@@ -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;
/**

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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,

View File

@@ -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");

View File

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

View File

@@ -36,6 +36,8 @@ public class RuleSet {
new FrodoAndSamRule(_modifiersLogic).applyRule();
new RingBearerRule(_modifiersLogic).applyRule();
new ThreatRule(_actionsEnvironment).applyRule();
}
}

View File

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

View File

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