Fix for The Hobbit's "Trollshaw Forest"

This commit is contained in:
Phallen Cassidy
2020-04-16 21:49:49 -04:00
parent be0ba2f405
commit 0833230a23
3 changed files with 78 additions and 2 deletions

View File

@@ -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)"
}
}
]
}
}
},

View File

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

View File

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