Reveal random cards from hand

This commit is contained in:
marcin.sciesinski
2019-09-02 21:34:49 -07:00
parent 6dcad60e01
commit 9fc2540d50
5 changed files with 164 additions and 3 deletions

View File

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

View File

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

View File

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

View File

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

View File

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