diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_115.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_115.java deleted file mode 100644 index b09abd9ca..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_115.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.gempukku.lotro.cards.set3.site; - -import com.gempukku.lotro.common.Keyword; -import com.gempukku.lotro.common.Side; -import com.gempukku.lotro.common.SitesBlock; -import com.gempukku.lotro.filters.Filters; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.Assignment; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.cardtype.AbstractSite; -import com.gempukku.lotro.logic.modifiers.AbstractModifier; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierEffect; -import com.gempukku.lotro.logic.modifiers.condition.LocationCondition; - -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * Set: Realms of Elf-lords - * Twilight Cost: 3 - * Type: Site - * Site: 6 - * Game Text: Forest. Sanctuary. While the fellowship is at Caras Galadhon, no more than one minion may be assigned - * to each skirmish. - */ -public class Card3_115 extends AbstractSite { - public Card3_115() { - super("Caras Galadhon", SitesBlock.FELLOWSHIP, 6, 3, Direction.LEFT); - addKeyword(Keyword.FOREST); - - } - - @Override - public List getInPlayModifiers(LotroGame game, PhysicalCard self) { - return Collections.singletonList( - new AbstractModifier(self, "No more than one minion may be assigned to each skirmish", null, new LocationCondition(Filters.name(getTitle())), ModifierEffect.ASSIGNMENT_MODIFIER) { - @Override - public boolean isValidAssignments(LotroGame game, Side side, Map> assignments) { - for (Map.Entry> minionsAssignedToCharacter : assignments.entrySet()) { - PhysicalCard fp = minionsAssignedToCharacter.getKey(); - Set minions = minionsAssignedToCharacter.getValue(); - List alreadyAssigned = game.getGameState().getAssignments(); - if (countMinionsCurrentlyAssignedToFPChar(alreadyAssigned, fp) + minions.size() > 1) - return false; - } - return true; - } - - private int countMinionsCurrentlyAssignedToFPChar(List assignments, PhysicalCard fp) { - for (Assignment assignment : assignments) { - if (assignment.getFellowshipCharacter() == fp) - return assignment.getShadowCharacters().size(); - } - return 0; - } - }); - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_116.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_116.java deleted file mode 100644 index 9c54b806c..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_116.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.gempukku.lotro.cards.set3.site; - -import com.gempukku.lotro.logic.cardtype.AbstractSite; -import com.gempukku.lotro.logic.timing.TriggerConditions; -import com.gempukku.lotro.logic.effects.AddBurdenEffect; -import com.gempukku.lotro.common.SitesBlock; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.actions.RequiredTriggerAction; -import com.gempukku.lotro.logic.timing.EffectResult; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Realms of Elf-lords - * Twilight Cost: 2 - * Type: Site - * Site: 4 - * Game Text: When the fellowship moves to Eregion Hills, add a burden. - */ -public class Card3_116 extends AbstractSite { - public Card3_116() { - super("Eregion Hills", SitesBlock.FELLOWSHIP, 4, 2, Direction.RIGHT); - } - - @Override - public List getRequiredAfterTriggers(LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (TriggerConditions.movesTo(game, effectResult, self)) { - RequiredTriggerAction action = new RequiredTriggerAction(self); - action.appendEffect( - new AddBurdenEffect(game.getGameState().getCurrentPlayerId(), self, 1)); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_117.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_117.java deleted file mode 100644 index 04820c839..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_117.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.gempukku.lotro.cards.set3.site; - -import com.gempukku.lotro.common.Keyword; -import com.gempukku.lotro.common.Phase; -import com.gempukku.lotro.common.SitesBlock; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.cardtype.AbstractSite; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.PlayersCantPlayPhaseEventsModifier; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Realms of Elf-lords - * Twilight Cost: 8 - * Type: Site - * Site: 8 - * Game Text: River. Maneuver events may not be played. - */ -public class Card3_117 extends AbstractSite { - public Card3_117() { - super("Gates of Argonath", SitesBlock.FELLOWSHIP, 8, 8, Direction.RIGHT); - addKeyword(Keyword.RIVER); - } - - @Override - public List getInPlayModifiers(LotroGame game, PhysicalCard self) { - return Collections.singletonList( - new PlayersCantPlayPhaseEventsModifier(self, Phase.MANEUVER)); - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_118.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_118.java deleted file mode 100644 index 22eea89e0..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_118.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.gempukku.lotro.cards.set3.site; - -import com.gempukku.lotro.common.Keyword; -import com.gempukku.lotro.common.SitesBlock; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.cardtype.AbstractSite; -import com.gempukku.lotro.logic.modifiers.Modifier; -import com.gempukku.lotro.logic.modifiers.ModifierFlag; -import com.gempukku.lotro.logic.modifiers.SpecialFlagModifier; -import com.gempukku.lotro.logic.modifiers.condition.LocationCondition; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Realms of Elf-lords - * Twilight Cost: 6 - * Type: Site - * Site: 7 - * Game Text: River. While the fellowship is at The Great River, cards may not be played from draw decks or discard piles. - */ -public class Card3_118 extends AbstractSite { - public Card3_118() { - super("The Great River", SitesBlock.FELLOWSHIP, 7, 6, Direction.RIGHT); - addKeyword(Keyword.RIVER); - } - - @Override - public List getInPlayModifiers(LotroGame game, PhysicalCard self) { - return Collections.singletonList( - new SpecialFlagModifier(self, new LocationCondition(self), ModifierFlag.CANT_PLAY_FROM_DISCARD_OR_DECK)); - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_119.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_119.java deleted file mode 100644 index 0f00afb58..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_119.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.gempukku.lotro.cards.set3.site; - -import com.gempukku.lotro.logic.cardtype.AbstractSite; -import com.gempukku.lotro.logic.timing.PlayConditions; -import com.gempukku.lotro.logic.timing.TriggerConditions; -import com.gempukku.lotro.logic.effects.RemoveBurdenEffect; -import com.gempukku.lotro.common.SitesBlock; -import com.gempukku.lotro.common.Race; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.actions.OptionalTriggerAction; -import com.gempukku.lotro.logic.timing.EffectResult; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Realms of Elf-lords - * Twilight Cost: 0 - * Type: Site - * Site: 3 - * Game Text: Sanctuary. When the fellowship moves to House of Elrond, the Free Peoples player may spot 2 Elves - * to remove a burden. - */ -public class Card3_119 extends AbstractSite { - public Card3_119() { - super("House of Elrond", SitesBlock.FELLOWSHIP, 3, 0, Direction.RIGHT); - - } - - @Override - public List getOptionalAfterTriggers(String playerId, LotroGame game, EffectResult effectResult, PhysicalCard self) { - if (TriggerConditions.movesTo(game, effectResult, self) - && playerId.equals(game.getGameState().getCurrentPlayerId()) - && PlayConditions.canSpot(game, 2, Race.ELF)) { - OptionalTriggerAction action = new OptionalTriggerAction(self); - action.appendEffect( - new RemoveBurdenEffect(playerId, self)); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_120.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_120.java deleted file mode 100644 index 13e2bd5fa..000000000 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set3/site/Card3_120.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.gempukku.lotro.cards.set3.site; - -import com.gempukku.lotro.common.*; -import com.gempukku.lotro.filters.Filters; -import com.gempukku.lotro.game.PhysicalCard; -import com.gempukku.lotro.game.state.LotroGame; -import com.gempukku.lotro.logic.actions.ActivateCardAction; -import com.gempukku.lotro.logic.cardtype.AbstractSite; -import com.gempukku.lotro.logic.effects.ChooseAndWoundCharactersEffect; -import com.gempukku.lotro.logic.effects.choose.ChooseAndExertCharactersEffect; -import com.gempukku.lotro.logic.timing.PlayConditions; - -import java.util.Collections; -import java.util.List; - -/** - * Set: Realms of Elf-lords - * Twilight Cost: 9 - * Type: Site - * Site: 9 - * Game Text: Maneuver: Spot 4 companions and exert your [ISENGARD] Orc to make the Free Peoples player wound - * a companion. - */ -public class Card3_120 extends AbstractSite { - public Card3_120() { - super("Wastes of Emyn Muil", SitesBlock.FELLOWSHIP, 9, 9, Direction.LEFT); - } - - @Override - public List getPhaseActionsInPlay(String playerId, LotroGame game, PhysicalCard self) { - if (PlayConditions.canUseSiteDuringPhase(game, Phase.MANEUVER, self) - && PlayConditions.canSpot(game, 4, CardType.COMPANION) - && PlayConditions.canExert(self, game, Filters.owner(playerId), Culture.ISENGARD, Race.ORC)) { - ActivateCardAction action = new ActivateCardAction(self); - action.appendCost( - new ChooseAndExertCharactersEffect(action, playerId, 1, 1, Filters.owner(playerId), Culture.ISENGARD, Race.ORC)); - action.appendEffect( - new ChooseAndWoundCharactersEffect(action, game.getGameState().getCurrentPlayerId(), 1, 1, CardType.COMPANION)); - return Collections.singletonList(action); - } - return null; - } -} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantPlayCardsFromDeckOrDiscardPile.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantPlayCardsFromDeckOrDiscardPile.java new file mode 100644 index 000000000..6f044ec43 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantPlayCardsFromDeckOrDiscardPile.java @@ -0,0 +1,26 @@ +package com.gempukku.lotro.cards.build.field.effect.modifier; + +import com.gempukku.lotro.cards.build.*; +import com.gempukku.lotro.cards.build.field.FieldUtils; +import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.ModifierFlag; +import com.gempukku.lotro.logic.modifiers.SpecialFlagModifier; +import org.json.simple.JSONObject; + +public class CantPlayCardsFromDeckOrDiscardPile implements ModifierSourceProducer { + @Override + public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(object, "requires"); + + final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("requires"), "requires"); + final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment); + + return new ModifierSource() { + @Override + public Modifier getModifier(ActionContext actionContext) { + return new SpecialFlagModifier(actionContext.getSource(), + new RequirementCondition(requirements, actionContext), ModifierFlag.CANT_PLAY_FROM_DISCARD_OR_DECK); + } + }; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantPlayPhaseEvents.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantPlayPhaseEvents.java new file mode 100644 index 000000000..04a254674 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/CantPlayPhaseEvents.java @@ -0,0 +1,31 @@ +package com.gempukku.lotro.cards.build.field.effect.modifier; + +import com.gempukku.lotro.cards.build.*; +import com.gempukku.lotro.cards.build.field.FieldUtils; +import com.gempukku.lotro.common.Phase; +import com.gempukku.lotro.logic.modifiers.Modifier; +import com.gempukku.lotro.logic.modifiers.PlayersCantPlayPhaseEventsModifier; +import org.json.simple.JSONObject; + +public class CantPlayPhaseEvents implements ModifierSourceProducer { + @Override + public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(object, "phase", "requires"); + + final Phase phase = FieldUtils.getEnum(Phase.class, object.get("phase"), "phase"); + if (phase == null) + throw new InvalidCardDefinitionException("Has to have a phase defined"); + + final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("requires"), "requires"); + + final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment); + + return new ModifierSource() { + @Override + public Modifier getModifier(ActionContext actionContext) { + return new PlayersCantPlayPhaseEventsModifier(actionContext.getSource(), + new RequirementCondition(requirements, actionContext), phase); + } + }; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifierSourceFactory.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifierSourceFactory.java index 4fcc12dca..8f360038b 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifierSourceFactory.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/ModifierSourceFactory.java @@ -37,6 +37,8 @@ public class ModifierSourceFactory { modifierProducers.put("cantheal", new CantHeal()); modifierProducers.put("cantlookorrevealhand", new CantLookOrRevealHand()); modifierProducers.put("cantplaycards", new CantPlayCards()); + modifierProducers.put("cantplaycardsfromdeckordiscardpile", new CantPlayCardsFromDeckOrDiscardPile()); + modifierProducers.put("cantplayphaseevents", new CantPlayPhaseEvents()); modifierProducers.put("cantplayphaseeventsorphasespecialabilities", new CantPlayPhaseEventsOrPhaseSpecialAbilities()); modifierProducers.put("cantplayphasespecialabilities", new CantPlayPhaseSpecialAbilities()); modifierProducers.put("cantpreventwounds", new CantPreventWounds()); @@ -63,6 +65,7 @@ public class ModifierSourceFactory { modifierProducers.put("modifysanctuaryheal", new ModifySanctuaryHeal()); modifierProducers.put("modifysitenumber", new ModifySiteNumber()); modifierProducers.put("modifystrength", new ModifyStrength()); + modifierProducers.put("nomorethanoneminionmaybeassignedtoeachskirmish", new NoMorethanOneMinionMayBeAssignedToEachSkirmish()); modifierProducers.put("opponentmaynotdiscard", new OpponentMayNotDiscard()); modifierProducers.put("removekeyword", new RemoveKeyword()); modifierProducers.put("ringtextisinactive", new RingTextIsInactive()); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/NoMorethanOneMinionMayBeAssignedToEachSkirmish.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/NoMorethanOneMinionMayBeAssignedToEachSkirmish.java new file mode 100644 index 000000000..ee38c3ee4 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/cards/build/field/effect/modifier/NoMorethanOneMinionMayBeAssignedToEachSkirmish.java @@ -0,0 +1,54 @@ +package com.gempukku.lotro.cards.build.field.effect.modifier; + +import com.gempukku.lotro.cards.build.CardGenerationEnvironment; +import com.gempukku.lotro.cards.build.InvalidCardDefinitionException; +import com.gempukku.lotro.cards.build.ModifierSource; +import com.gempukku.lotro.cards.build.Requirement; +import com.gempukku.lotro.cards.build.field.FieldUtils; +import com.gempukku.lotro.common.Side; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.Assignment; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.modifiers.AbstractModifier; +import com.gempukku.lotro.logic.modifiers.ModifierEffect; +import org.json.simple.JSONObject; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class NoMorethanOneMinionMayBeAssignedToEachSkirmish implements ModifierSourceProducer { + @Override + public ModifierSource getModifierSource(JSONObject object, CardGenerationEnvironment environment) throws InvalidCardDefinitionException { + FieldUtils.validateAllowedFields(object, "requires"); + + final JSONObject[] conditionArray = FieldUtils.getObjectArray(object.get("requires"), "requires"); + final Requirement[] requirements = environment.getRequirementFactory().getRequirements(conditionArray, environment); + + return (actionContext) -> { + RequirementCondition requirementCondition = new RequirementCondition(requirements, actionContext); + + return new AbstractModifier(actionContext.getSource(), "No more than one minion may be assigned to each skirmish", null, requirementCondition, ModifierEffect.ASSIGNMENT_MODIFIER) { + @Override + public boolean isValidAssignments(LotroGame game, Side side, Map> assignments) { + for (Map.Entry> minionsAssignedToCharacter : assignments.entrySet()) { + PhysicalCard fp = minionsAssignedToCharacter.getKey(); + Set minions = minionsAssignedToCharacter.getValue(); + List alreadyAssigned = game.getGameState().getAssignments(); + if (countMinionsCurrentlyAssignedToFPChar(alreadyAssigned, fp) + minions.size() > 1) + return false; + } + return true; + } + + private int countMinionsCurrentlyAssignedToFPChar(List assignments, PhysicalCard fp) { + for (Assignment assignment : assignments) { + if (assignment.getFellowshipCharacter() == fp) + return assignment.getShadowCharacters().size(); + } + return 0; + } + }; + }; + } +}