diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set31/set31-sites.json b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set31/set31-sites.json index 8f95bfafa..4672e4edd 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/cards/set31/set31-sites.json +++ b/gemp-lotr/gemp-lotr-async/src/main/web/cards/set31/set31-sites.json @@ -41,8 +41,26 @@ "phase": "maneuver" }, "effect": { - "type": "playCardFromDrawDeck", - "filter": "choose(hand weapon)" + "type":"forEachPlayer", + "effect": [ + { + "type": "chooseYesOrNo", + "text": "Would you like to play a hand weapon?", + "memorize": "choice" + }, + { + "type": "conditional", + "condition": { + "type": "memoryIs", + "memory": "choice", + "value": "yes" + }, + "effect": { + "type": "playCardFromDrawDeck", + "filter": "choose(hand weapon)" + } + } + ] } } }, 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 035cab1a0..7006b588d 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 @@ -133,6 +133,7 @@ public class EffectAppenderFactory { effectAppenderProducers.put("getcardsfromtopofdeck", new GetCardsFromTopOfDeck()); effectAppenderProducers.put("removetext", new RemoveText()); effectAppenderProducers.put("stackcardsfromdeck", new StackCardsFromDeck()); + effectAppenderProducers.put("foreachplayer", new ForEachPlayer()); } public EffectAppender getEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ForEachPlayer.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ForEachPlayer.java new file mode 100644 index 000000000..69d4695df --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/appender/ForEachPlayer.java @@ -0,0 +1,57 @@ +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.DelegateActionContext; +import com.gempukku.lotro.cards.build.InvalidCardDefinitionException; +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.logic.GameUtils; +import com.gempukku.lotro.logic.actions.CostToEffectAction; +import com.gempukku.lotro.logic.actions.SubAction; +import com.gempukku.lotro.logic.effects.StackActionEffect; +import com.gempukku.lotro.logic.timing.Effect; +import org.json.simple.JSONObject; + +public class ForEachPlayer implements EffectAppenderProducer { + @Override + public EffectAppender createEffectAppender(JSONObject effectObject, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(effectObject, "effect"); + + final JSONObject[] effectArray = FieldUtils.getObjectArray(effectObject.get("effect"), "effect"); + + final EffectAppender[] effectAppenders = environment.getEffectAppenderFactory().getEffectAppenders(effectArray, environment); + + return new DelayedAppender() { + @Override + protected Effect createEffect(boolean cost, CostToEffectAction action, ActionContext actionContext) { + SubAction subAction = new SubAction(action); + for (String playerId : GameUtils.getAllPlayers(actionContext.getGame())) { + for (EffectAppender effectAppender : effectAppenders) { + DelegateActionContext playerActionContext = new DelegateActionContext(actionContext, playerId, + actionContext.getGame(), actionContext.getSource(), actionContext.getEffectResult(), + actionContext.getEffect()); + effectAppender.appendEffect(cost, action, playerActionContext); + } + } + return new StackActionEffect(subAction); + } + + @Override + public boolean isPlayableInFull(ActionContext actionContext) { + for (String playerId : GameUtils.getAllPlayers(actionContext.getGame())) { + for (EffectAppender effectAppender : effectAppenders) { + DelegateActionContext playerActionContext = new DelegateActionContext(actionContext, playerId, + actionContext.getGame(), actionContext.getSource(), actionContext.getEffectResult(), + actionContext.getEffect()); + if (!effectAppender.isPlayableInFull(playerActionContext)) + return false; + } + } + + return true; + } + }; + } +}