Reveal random cards from hand
This commit is contained in:
@@ -416,6 +416,111 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"40_76": {
|
||||
"title": "He's Remembered!",
|
||||
"culture": "gandalf",
|
||||
"cost": 0,
|
||||
"type": "event",
|
||||
"keyword": [
|
||||
"regroup",
|
||||
"spell"
|
||||
],
|
||||
"effects": {
|
||||
"type": "event",
|
||||
"cost": {
|
||||
"type": "exert",
|
||||
"filter": "choose(name(Gandalf))"
|
||||
},
|
||||
"effect": {
|
||||
"type": "putCardsFromDiscardIntoHand",
|
||||
"filter": "choose(culture(Gandalf))"
|
||||
}
|
||||
}
|
||||
},
|
||||
"40_77": {
|
||||
"title": "*I Will Help You Bear This Burden",
|
||||
"culture": "gandalf",
|
||||
"cost": 2,
|
||||
"type": "condition",
|
||||
"strength": 1,
|
||||
"resistance": 1,
|
||||
"keyword": "spell",
|
||||
"target": "name(Frodo)",
|
||||
"effects": [
|
||||
{
|
||||
"type": "extraCost",
|
||||
"cost": {
|
||||
"type": "exert",
|
||||
"filter": "choose(name(Gandalf))"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "activated",
|
||||
"phase": [
|
||||
"fellowship",
|
||||
"regroup"
|
||||
],
|
||||
"cost": {
|
||||
"type": "discardFromHand",
|
||||
"forced": false,
|
||||
"count": 2,
|
||||
"filter": "choose(culture(Gandalf))"
|
||||
},
|
||||
"effect": {
|
||||
"type": "removeBurdens"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"40_78": {
|
||||
"title": "Illuminate",
|
||||
"culture": "gandalf",
|
||||
"cost": 1,
|
||||
"type": "event",
|
||||
"keyword": [
|
||||
"maneuver",
|
||||
"spell"
|
||||
],
|
||||
"condition": {
|
||||
"type": "canSpot",
|
||||
"filter": "name(Gandalf)"
|
||||
},
|
||||
"effects": {
|
||||
"type": "event",
|
||||
"effect": [
|
||||
{
|
||||
"type": "revealRandomCardsFromHand",
|
||||
"hand": "shadowPlayer",
|
||||
"forced": true,
|
||||
"memorize": "revealedCard"
|
||||
},
|
||||
{
|
||||
"type": "conditional",
|
||||
"condition": {
|
||||
"type": "memoryMatches",
|
||||
"memory": "revealedCard",
|
||||
"filter": "side(free people)"
|
||||
},
|
||||
"effect": {
|
||||
"type": "heal",
|
||||
"filter": "choose(companion)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "conditional",
|
||||
"condition": {
|
||||
"type": "memoryMatches",
|
||||
"memory": "revealedCard",
|
||||
"filter": "side(shadow)"
|
||||
},
|
||||
"effect": {
|
||||
"type": "exert",
|
||||
"filter": "choose(minion)"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"40_86": {
|
||||
"title": "Protector of the West",
|
||||
"culture": "gandalf",
|
||||
|
||||
@@ -53,8 +53,7 @@ public class DefaultActionContext implements ActionContext {
|
||||
|
||||
@Override
|
||||
public Collection<? extends PhysicalCard> getCardsFromMemory(String memory) {
|
||||
final Collection<PhysicalCard> physicalCards = cardMemory.get(memory);
|
||||
return physicalCards;
|
||||
return cardMemory.get(memory);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -71,6 +71,7 @@ public class EffectAppenderFactory {
|
||||
effectAppenderProducers.put("sideplayercantplayphaseeventsorusephasespecialabilities", new SidePlayerCantPlayPhaseEventsOrUsePhaseSpecialAbilities());
|
||||
effectAppenderProducers.put("shadowcanthaveinitiative", new ShadowCantHaveInitiative());
|
||||
effectAppenderProducers.put("canparticipateinarcheryfireandskirmishes", new CanParticipateInArcheryFireAndSkirmishes());
|
||||
effectAppenderProducers.put("revealrandomcardsfromhand", new RevealRandomCardsFromHand());
|
||||
}
|
||||
|
||||
public EffectAppender getEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
package com.gempukku.lotro.cards.build.field.effect.appender;
|
||||
|
||||
import com.gempukku.lotro.cards.build.*;
|
||||
import com.gempukku.lotro.cards.build.field.FieldUtils;
|
||||
import com.gempukku.lotro.cards.build.field.effect.EffectAppender;
|
||||
import com.gempukku.lotro.cards.build.field.effect.EffectAppenderProducer;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.PlayerResolver;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.logic.actions.CostToEffectAction;
|
||||
import com.gempukku.lotro.logic.effects.RevealRandomCardsFromHandEffect;
|
||||
import com.gempukku.lotro.logic.timing.Effect;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class RevealRandomCardsFromHand implements EffectAppenderProducer {
|
||||
@Override
|
||||
public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
|
||||
FieldUtils.validateAllowedFields(effectObject, "hand", "forced", "count", "memorize");
|
||||
|
||||
final String hand = FieldUtils.getString(effectObject.get("hand"), "hand", "you");
|
||||
final boolean forced = FieldUtils.getBoolean(effectObject.get("forced"), "forced");
|
||||
final String memorized = FieldUtils.getString(effectObject.get("memorize"), "memorize", "_temp");
|
||||
|
||||
final ValueSource countSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment);
|
||||
final PlayerSource handSource = PlayerResolver.resolvePlayer(hand, environment);
|
||||
|
||||
return new DelayedAppender() {
|
||||
@Override
|
||||
protected Effect createEffect(boolean cost, CostToEffectAction action, ActionContext actionContext) {
|
||||
final String handPlayer = handSource.getPlayer(actionContext);
|
||||
final int count = countSource.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null);
|
||||
|
||||
return new RevealRandomCardsFromHandEffect(actionContext.getPerformingPlayer(), handPlayer, actionContext.getSource(), count) {
|
||||
@Override
|
||||
protected void cardsRevealed(List<PhysicalCard> revealedCards) {
|
||||
actionContext.setCardMemory(memorized, revealedCards);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPlayableInFull(ActionContext actionContext) {
|
||||
final String handPlayer = handSource.getPlayer(actionContext);
|
||||
final int count = countSource.getEvaluator(actionContext).evaluateExpression(actionContext.getGame(), null);
|
||||
if (actionContext.getGame().getGameState().getHand(handPlayer).size() < count)
|
||||
return false;
|
||||
return !forced
|
||||
|| actionContext.getGame().getModifiersQuerying().canLookOrRevealCardsInHand(actionContext.getGame(), handPlayer, actionContext.getPerformingPlayer());
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package com.gempukku.lotro.cards.build.field.effect.filter;
|
||||
import com.gempukku.lotro.cards.build.*;
|
||||
import com.gempukku.lotro.cards.build.field.effect.appender.resolver.ValueResolver;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filter;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.logic.timing.results.CharacterLostSkirmishResult;
|
||||
|
||||
@@ -90,7 +91,8 @@ public class FilterFactory {
|
||||
return (actionContext) -> Filters.attachedTo(filterableSource.getFilterable(actionContext));
|
||||
});
|
||||
parameterFilters.put("name",
|
||||
(parameter, environment) -> (actionContext) -> Filters.name(parameter));
|
||||
(parameter, environment) -> (actionContext) -> (Filter)
|
||||
(game, physicalCard) -> physicalCard.getBlueprint().getTitle().equalsIgnoreCase(parameter));
|
||||
parameterFilters.put("inSkirmishAgainst",
|
||||
(parameter, environment) -> {
|
||||
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(parameter, environment);
|
||||
|
||||
Reference in New Issue
Block a user