From f3fa33658c4db8c9bc7b81c901f603b9e1b2d6c4 Mon Sep 17 00:00:00 2001 From: Christian 'ketura' McCarty Date: Wed, 23 Apr 2025 22:26:27 -0500 Subject: [PATCH] Fixed cards using RevealCards not actually working, as that *only* works when revealing cards from play (rather useless) --- .../cards/official/set02/set02-Gandalf.hjson | 2 +- .../cards/official/set12/set12-Elven.hjson | 2 +- .../field/effect/EffectAppenderFactory.java | 4 +- .../appender/RevealCardsFromDiscard.java | 46 +++++++++++++++++++ .../appender/RevealCardsFromDrawDeck.java | 46 +++++++++++++++++++ ...ealCards.java => RevealCardsFromPlay.java} | 2 +- 6 files changed, 98 insertions(+), 4 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCardsFromDiscard.java create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCardsFromDrawDeck.java rename gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/{RevealCards.java => RevealCardsFromPlay.java} (97%) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set02/set02-Gandalf.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set02/set02-Gandalf.hjson index 233ddee11..055e4f07c 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set02/set02-Gandalf.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set02/set02-Gandalf.hjson @@ -167,7 +167,7 @@ text: Choose card to reveal and put beneath your deck } { - type: revealCards + type: RevealCardsFromDiscard select: memory(chosenCard) } { diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set12/set12-Elven.hjson b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set12/set12-Elven.hjson index e84c637a6..1d9150526 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set12/set12-Elven.hjson +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/cards/official/set12/set12-Elven.hjson @@ -34,7 +34,7 @@ memory: topCards } { - type: RevealCards + type: RevealCardsFromDrawDeck select: memory(topCards) count: memory(cardCount) } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/EffectAppenderFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/EffectAppenderFactory.java index f2cca63a5..ea5b22a7e 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/EffectAppenderFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/EffectAppenderFactory.java @@ -162,7 +162,9 @@ public class EffectAppenderFactory { effectAppenderProducers.put("resetwhileinzonedata", new ResetWhileInZoneData()); effectAppenderProducers.put("returntohand", new ReturnToHand()); effectAppenderProducers.put("revealbottomcardsofdrawdeck", new RevealBottomCardsOfDrawDeck()); - effectAppenderProducers.put("revealcards", new RevealCards()); + effectAppenderProducers.put("revealcards", new RevealCardsFromPlay()); + effectAppenderProducers.put("revealcardsfromdiscard", new RevealCardsFromDiscard()); + effectAppenderProducers.put("revealcardsfromdeck", new RevealCardsFromDrawDeck()); effectAppenderProducers.put("revealcardsfromadventuredeck", new RevealCardsFromAdventureDeck()); effectAppenderProducers.put("revealcardsfromhand", new RevealCardsFromHand()); effectAppenderProducers.put("revealhand", new RevealHand()); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCardsFromDiscard.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCardsFromDiscard.java new file mode 100644 index 000000000..ae940bfb2 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCardsFromDiscard.java @@ -0,0 +1,46 @@ +package com.gempukku.lotro.cards.build.field.effect.appender; + +import com.gempukku.lotro.cards.build.ActionContext; +import com.gempukku.lotro.cards.build.CardGenerationEnvironment; +import com.gempukku.lotro.cards.build.InvalidCardDefinitionException; +import com.gempukku.lotro.cards.build.ValueSource; +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.CardResolver; +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.RevealCardEffect; +import com.gempukku.lotro.logic.timing.Effect; +import org.json.simple.JSONObject; + +import java.util.Collection; + +public class RevealCardsFromDiscard implements EffectAppenderProducer { + @Override + public EffectAppender createEffectAppender(boolean cost, JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(effectObject, "count", "select", "memorize"); + + final String select = FieldUtils.getString(effectObject.get("select"), "select", "choose(any)"); + final String memorize = FieldUtils.getString(effectObject.get("memorize"), "memorize", "_temp"); + + final ValueSource countSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment); + + MultiEffectAppender result = new MultiEffectAppender(); + + result.addEffectAppender( + CardResolver.resolveCardsInDiscard(select, countSource, memorize, "you", "Choose cards to reveal", environment)); + result.addEffectAppender( + new DelayedAppender() { + @Override + protected Effect createEffect(boolean cost, CostToEffectAction action, ActionContext actionContext) { + final Collection cardsToReveal = actionContext.getCardsFromMemory(memorize); + return new RevealCardEffect(actionContext.getSource(), cardsToReveal); + } + }); + + return result; + } + +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCardsFromDrawDeck.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCardsFromDrawDeck.java new file mode 100644 index 000000000..ddec12d6f --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCardsFromDrawDeck.java @@ -0,0 +1,46 @@ +package com.gempukku.lotro.cards.build.field.effect.appender; + +import com.gempukku.lotro.cards.build.ActionContext; +import com.gempukku.lotro.cards.build.CardGenerationEnvironment; +import com.gempukku.lotro.cards.build.InvalidCardDefinitionException; +import com.gempukku.lotro.cards.build.ValueSource; +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.CardResolver; +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.RevealCardEffect; +import com.gempukku.lotro.logic.timing.Effect; +import org.json.simple.JSONObject; + +import java.util.Collection; + +public class RevealCardsFromDrawDeck implements EffectAppenderProducer { + @Override + public EffectAppender createEffectAppender(boolean cost, JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(effectObject, "count", "select", "memorize"); + + final String select = FieldUtils.getString(effectObject.get("select"), "select", "choose(any)"); + final String memorize = FieldUtils.getString(effectObject.get("memorize"), "memorize", "_temp"); + + final ValueSource countSource = ValueResolver.resolveEvaluator(effectObject.get("count"), 1, environment); + + MultiEffectAppender result = new MultiEffectAppender(); + + result.addEffectAppender( + CardResolver.resolveCardsInDeck(select, null, countSource, memorize, "you", "you",false, "Choose cards to reveal", environment)); + result.addEffectAppender( + new DelayedAppender() { + @Override + protected Effect createEffect(boolean cost, CostToEffectAction action, ActionContext actionContext) { + final Collection cardsToReveal = actionContext.getCardsFromMemory(memorize); + return new RevealCardEffect(actionContext.getSource(), cardsToReveal); + } + }); + + return result; + } + +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCards.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCardsFromPlay.java similarity index 97% rename from gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCards.java rename to gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCardsFromPlay.java index aac01c64f..6e6cdae85 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCards.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/RevealCardsFromPlay.java @@ -17,7 +17,7 @@ import org.json.simple.JSONObject; import java.util.Collection; -public class RevealCards implements EffectAppenderProducer { +public class RevealCardsFromPlay implements EffectAppenderProducer { @Override public EffectAppender createEffectAppender(boolean cost, JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { FieldUtils.validateAllowedFields(effectObject, "count", "select", "memorize");