Fixing assignments and archery fire.
This commit is contained in:
@@ -7,13 +7,18 @@ import com.gempukku.lotro.logic.modifiers.AbstractModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifierEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
|
||||
|
||||
public class AllyOnCurrentSiteModifier extends AbstractModifier {
|
||||
public AllyOnCurrentSiteModifier(PhysicalCard source, Filter affectFilter) {
|
||||
public class AllyParticipatesInArcheryFireAndSkirmishesModifier extends AbstractModifier {
|
||||
public AllyParticipatesInArcheryFireAndSkirmishesModifier(PhysicalCard source, Filter affectFilter) {
|
||||
super(source, "Can participate in archery and skirmishes", affectFilter, new ModifierEffect[]{ModifierEffect.PRESENCE_MODIFIER});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllyOnCurrentSite(GameState gameState, ModifiersQuerying modifiersLogic, PhysicalCard card, boolean allyOnCurrentSite) {
|
||||
public boolean isAllyParticipateInArcheryFire(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllyParticipateInSkirmishes(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.gempukku.lotro.cards.modifiers;
|
||||
|
||||
import com.gempukku.lotro.common.Side;
|
||||
import com.gempukku.lotro.filters.Filter;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.GameState;
|
||||
@@ -13,7 +14,7 @@ public class CantBeAssignedToSkirmishModifier extends AbstractModifier {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeAssignedToSkirmish(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, boolean result) {
|
||||
public boolean canBeAssignedToSkirmish(GameState gameState, Side sidePlayer, ModifiersQuerying modifiersQuerying, PhysicalCard card) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractAlly;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.cards.effects.ExertCharactersEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.AllyOnCurrentSiteModifier;
|
||||
import com.gempukku.lotro.cards.modifiers.AllyParticipatesInArcheryFireAndSkirmishesModifier;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
@@ -40,7 +40,7 @@ public class Card1_027 extends AbstractAlly {
|
||||
action.appendCost(new ExertCharactersEffect(self, self));
|
||||
action.appendEffect(
|
||||
new AddUntilStartOfPhaseModifierEffect(
|
||||
new AllyOnCurrentSiteModifier(self, Filters.sameCard(self)), Phase.REGROUP));
|
||||
new AllyParticipatesInArcheryFireAndSkirmishesModifier(self, Filters.sameCard(self)), Phase.REGROUP));
|
||||
return Collections.singletonList(action);
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.actions.PlayEventAction;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.cards.effects.ChooseAndExertCharactersEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.AllyOnCurrentSiteModifier;
|
||||
import com.gempukku.lotro.cards.modifiers.AllyParticipatesInArcheryFireAndSkirmishesModifier;
|
||||
import com.gempukku.lotro.cards.modifiers.StrengthModifier;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
@@ -50,7 +50,7 @@ public class Card1_064 extends AbstractEvent {
|
||||
, Phase.REGROUP));
|
||||
action.appendEffect(
|
||||
new AddUntilStartOfPhaseModifierEffect(
|
||||
new AllyOnCurrentSiteModifier(self, Filters.sameCard(elfAlly))
|
||||
new AllyParticipatesInArcheryFireAndSkirmishesModifier(self, Filters.sameCard(elfAlly))
|
||||
, Phase.REGROUP));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.actions.PlayEventAction;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.cards.effects.ChooseAndExertCharactersEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.AllyOnCurrentSiteModifier;
|
||||
import com.gempukku.lotro.cards.modifiers.AllyParticipatesInArcheryFireAndSkirmishesModifier;
|
||||
import com.gempukku.lotro.cards.modifiers.StrengthModifier;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
@@ -50,7 +50,7 @@ public class Card1_065 extends AbstractEvent {
|
||||
, Phase.REGROUP));
|
||||
action.appendEffect(
|
||||
new AddUntilStartOfPhaseModifierEffect(
|
||||
new AllyOnCurrentSiteModifier(self, Filters.sameCard(elfAlly))
|
||||
new AllyParticipatesInArcheryFireAndSkirmishesModifier(self, Filters.sameCard(elfAlly))
|
||||
, Phase.REGROUP));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.actions.PlayEventAction;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.cards.effects.ChooseAndExertCharactersEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.AllyOnCurrentSiteModifier;
|
||||
import com.gempukku.lotro.cards.modifiers.AllyParticipatesInArcheryFireAndSkirmishesModifier;
|
||||
import com.gempukku.lotro.cards.modifiers.StrengthModifier;
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
@@ -53,7 +53,7 @@ public class Card1_109 extends AbstractEvent {
|
||||
, Phase.REGROUP));
|
||||
action.appendEffect(
|
||||
new AddUntilStartOfPhaseModifierEffect(
|
||||
new AllyOnCurrentSiteModifier(self, Filters.sameCard(ally))
|
||||
new AllyParticipatesInArcheryFireAndSkirmishesModifier(self, Filters.sameCard(ally))
|
||||
, Phase.REGROUP));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,9 +35,9 @@ public class Card1_169 extends AbstractEvent {
|
||||
final PlayEventAction action = new PlayEventAction(self);
|
||||
final PhysicalCard ringBearer = game.getGameState().getRingBearer(game.getGameState().getCurrentPlayerId());
|
||||
|
||||
if (Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), Filters.keyword(Keyword.RING_BEARER), Filters.canBeAssignedToSkirmish()).size() > 0) {
|
||||
if (Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), Filters.keyword(Keyword.RING_BEARER), Filters.canBeAssignedToSkirmish(Side.SHADOW)).size() > 0) {
|
||||
action.appendEffect(
|
||||
new ChooseActiveCardEffect(self, game.getGameState().getCurrentPlayerId(), "Choose minion to assign Ring-Bearer to", Filters.type(CardType.MINION), Filters.canBeAssignedToSkirmish()) {
|
||||
new ChooseActiveCardEffect(self, game.getGameState().getCurrentPlayerId(), "Choose minion to assign Ring-Bearer to", Filters.type(CardType.MINION), Filters.canBeAssignedToSkirmish(Side.SHADOW)) {
|
||||
@Override
|
||||
protected void cardSelected(PhysicalCard minion) {
|
||||
action.appendEffect(
|
||||
|
||||
@@ -28,11 +28,11 @@ public class Card1_171 extends AbstractEvent {
|
||||
public PlayEventAction getPlayCardAction(final String playerId, final LotroGame game, final PhysicalCard self, int twilightModifier) {
|
||||
final PlayEventAction action = new PlayEventAction(self);
|
||||
action.appendEffect(
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose exhausted companion", Filters.type(CardType.COMPANION), Filters.exhausted(), Filters.canBeAssignedToSkirmish()) {
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose exhausted companion", Filters.type(CardType.COMPANION), Filters.exhausted(), Filters.canBeAssignedToSkirmish(Side.SHADOW)) {
|
||||
@Override
|
||||
protected void cardSelected(final PhysicalCard companion) {
|
||||
action.appendEffect(
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose MORIA Orc", Filters.culture(Culture.MORIA), Filters.race(Race.ORC), Filters.canBeAssignedToSkirmish()) {
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose MORIA Orc", Filters.culture(Culture.MORIA), Filters.race(Race.ORC), Filters.canBeAssignedToSkirmish(Side.SHADOW)) {
|
||||
@Override
|
||||
protected void cardSelected(PhysicalCard moriaOrc) {
|
||||
action.appendEffect(
|
||||
|
||||
@@ -43,10 +43,10 @@ public class Card1_262 extends AbstractMinion {
|
||||
protected List<? extends Action> getExtraPhaseActions(final String playerId, LotroGame game, final PhysicalCard self) {
|
||||
if (PlayConditions.canUseShadowCardDuringPhase(game.getGameState(), Phase.ASSIGNMENT, self, 0)
|
||||
&& Filters.countSpottable(game.getGameState(), game.getModifiersQuerying(), Filters.race(Race.HOBBIT), Filters.type(CardType.COMPANION)) >= 2
|
||||
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.sameCard(self), Filters.canBeAssignedToSkirmish())) {
|
||||
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.sameCard(self), Filters.canBeAssignedToSkirmish(Side.SHADOW))) {
|
||||
final ActivateCardAction action = new ActivateCardAction(self, Keyword.ASSIGNMENT);
|
||||
action.appendEffect(
|
||||
new ChooseActiveCardEffect(self, game.getGameState().getCurrentPlayerId(), "Choose a Hobbit", Filters.race(Race.HOBBIT), Filters.type(CardType.COMPANION), Filters.canBeAssignedToSkirmish()) {
|
||||
new ChooseActiveCardEffect(self, game.getGameState().getCurrentPlayerId(), "Choose a Hobbit", Filters.race(Race.HOBBIT), Filters.type(CardType.COMPANION), Filters.canBeAssignedToSkirmish(Side.SHADOW)) {
|
||||
@Override
|
||||
protected void cardSelected(PhysicalCard hobbit) {
|
||||
action.appendEffect(new AssignmentEffect(hobbit.getOwner(), hobbit, Collections.singletonList(self), "Orc Assassin effect"));
|
||||
|
||||
@@ -48,7 +48,7 @@ public class Card1_224 extends AbstractResponseEvent {
|
||||
for (Skirmish assignment : assignments)
|
||||
game.getGameState().removeAssignment(assignment);
|
||||
|
||||
if (Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.keyword(Keyword.RING_BEARER), Filters.canBeAssignedToSkirmish()) > 0) {
|
||||
if (Filters.countActive(game.getGameState(), game.getModifiersQuerying(), Filters.keyword(Keyword.RING_BEARER), Filters.canBeAssignedToSkirmish(Side.SHADOW)) > 0) {
|
||||
action.appendEffect(
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose a Nazgul to skirmish the Ring-Bearer", Filters.race(Race.NAZGUL)) {
|
||||
@Override
|
||||
|
||||
@@ -37,9 +37,9 @@ public class Card1_236 extends AbstractMinion {
|
||||
if (PlayConditions.canUseShadowCardDuringPhase(game.getGameState(), Phase.ASSIGNMENT, self, 0)
|
||||
&& game.getGameState().getBurdens() >= 4) {
|
||||
final ActivateCardAction action = new ActivateCardAction(self, Keyword.ASSIGNMENT);
|
||||
if (Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.sameCard(self), Filters.notAssigned())) {
|
||||
if (Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.sameCard(self), Filters.notAssigned(), Filters.canBeAssignedToSkirmish(Side.SHADOW))) {
|
||||
action.appendEffect(
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose a companion (except the Ring-Bearer", Filters.type(CardType.COMPANION), Filters.not(Filters.keyword(Keyword.RING_BEARER)), Filters.canBeAssignedToSkirmish()) {
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose a companion (except the Ring-Bearer", Filters.type(CardType.COMPANION), Filters.not(Filters.keyword(Keyword.RING_BEARER)), Filters.canBeAssignedToSkirmish(Side.SHADOW)) {
|
||||
@Override
|
||||
protected void cardSelected(PhysicalCard companion) {
|
||||
action.appendEffect(
|
||||
|
||||
@@ -4,7 +4,7 @@ import com.gempukku.lotro.cards.AbstractAttachableFPPossession;
|
||||
import com.gempukku.lotro.cards.PlayConditions;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.cards.effects.ChooseAndExertCharactersEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.AllyOnCurrentSiteModifier;
|
||||
import com.gempukku.lotro.cards.modifiers.AllyParticipatesInArcheryFireAndSkirmishesModifier;
|
||||
import com.gempukku.lotro.cards.modifiers.StrengthModifier;
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
@@ -57,7 +57,7 @@ public class Card3_042 extends AbstractAttachableFPPossession {
|
||||
new StrengthModifier(self, Filters.sameCard(card), 3), Phase.REGROUP));
|
||||
action.insertEffect(
|
||||
new AddUntilStartOfPhaseModifierEffect(
|
||||
new AllyOnCurrentSiteModifier(self, Filters.sameCard(card)), Phase.REGROUP));
|
||||
new AllyParticipatesInArcheryFireAndSkirmishesModifier(self, Filters.sameCard(card)), Phase.REGROUP));
|
||||
}
|
||||
});
|
||||
return Collections.singletonList(action);
|
||||
|
||||
@@ -67,11 +67,11 @@ public class Card3_069 extends AbstractMinion {
|
||||
action.appendCost(
|
||||
new ExertCharactersEffect(self, self));
|
||||
action.appendEffect(
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose ISENGARD minion", Filters.culture(Culture.ISENGARD), Filters.type(CardType.MINION), Filters.canBeAssignedToSkirmish()) {
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose ISENGARD minion", Filters.culture(Culture.ISENGARD), Filters.type(CardType.MINION), Filters.canBeAssignedToSkirmish(Side.SHADOW)) {
|
||||
@Override
|
||||
protected void cardSelected(final PhysicalCard minion) {
|
||||
action.appendEffect(
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose non Ring-bearer companion", Filters.type(CardType.COMPANION), Filters.not(Filters.keyword(Keyword.RING_BEARER)), Filters.canBeAssignedToSkirmish()) {
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose non Ring-bearer companion", Filters.type(CardType.COMPANION), Filters.not(Filters.keyword(Keyword.RING_BEARER)), Filters.canBeAssignedToSkirmish(Side.SHADOW)) {
|
||||
@Override
|
||||
protected void cardSelected(PhysicalCard companion) {
|
||||
action.appendEffect(
|
||||
|
||||
@@ -48,11 +48,11 @@ public class Card4_015 extends AbstractMinion {
|
||||
@Override
|
||||
protected List<? extends Action> getExtraPhaseActions(final String playerId, LotroGame game, final PhysicalCard self) {
|
||||
if (PlayConditions.canUseShadowCardDuringPhase(game.getGameState(), Phase.ASSIGNMENT, self, 0)
|
||||
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.ALLY))) {
|
||||
&& Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.type(CardType.ALLY), Filters.canBeAssignedToSkirmish(Side.SHADOW))) {
|
||||
final ActivateCardAction action = new ActivateCardAction(self, Keyword.ASSIGNMENT);
|
||||
if (Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.sameCard(self), Filters.notAssigned())) {
|
||||
action.appendEffect(
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose an ally", Filters.type(CardType.ALLY), Filters.canBeAssignedToSkirmish()) {
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose an ally", Filters.type(CardType.ALLY), Filters.canBeAssignedToSkirmish(Side.SHADOW)) {
|
||||
@Override
|
||||
protected void cardSelected(PhysicalCard ally) {
|
||||
action.appendEffect(
|
||||
|
||||
@@ -38,7 +38,7 @@ public class Card4_018 extends AbstractMinion {
|
||||
final ActivateCardAction action = new ActivateCardAction(self, Keyword.ASSIGNMENT);
|
||||
if (Filters.canSpot(game.getGameState(), game.getModifiersQuerying(), Filters.sameCard(self), Filters.notAssigned())) {
|
||||
action.appendEffect(
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose an ally", Filters.type(CardType.ALLY), Filters.canBeAssignedToSkirmish()) {
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose an ally", Filters.type(CardType.ALLY), Filters.canBeAssignedToSkirmish(Side.SHADOW)) {
|
||||
@Override
|
||||
protected void cardSelected(PhysicalCard ally) {
|
||||
action.appendEffect(
|
||||
|
||||
@@ -37,11 +37,11 @@ public class Card4_031 extends AbstractPermanent {
|
||||
action.appendCost(
|
||||
new RemoveTwilightEffect(2));
|
||||
action.appendEffect(
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose DUNLAND Man", Filters.culture(Culture.DUNLAND), Filters.race(Race.MAN), Filters.canBeAssignedToSkirmish()) {
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose DUNLAND Man", Filters.culture(Culture.DUNLAND), Filters.race(Race.MAN), Filters.canBeAssignedToSkirmish(Side.SHADOW)) {
|
||||
@Override
|
||||
protected void cardSelected(final PhysicalCard dunlandMan) {
|
||||
action.insertEffect(
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose unbound companion", Filters.unboundCompanion(), Filters.canBeAssignedToSkirmish()) {
|
||||
new ChooseActiveCardEffect(self, playerId, "Choose unbound companion", Filters.unboundCompanion(), Filters.canBeAssignedToSkirmish(Side.SHADOW)) {
|
||||
@Override
|
||||
protected void cardSelected(PhysicalCard unboundCompanion) {
|
||||
action.insertEffect(
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.gempukku.lotro.cards.set4.gandalf;
|
||||
import com.gempukku.lotro.cards.AbstractEvent;
|
||||
import com.gempukku.lotro.cards.actions.PlayEventAction;
|
||||
import com.gempukku.lotro.cards.effects.AddUntilStartOfPhaseModifierEffect;
|
||||
import com.gempukku.lotro.cards.modifiers.AllyOnCurrentSiteModifier;
|
||||
import com.gempukku.lotro.cards.modifiers.AllyParticipatesInArcheryFireAndSkirmishesModifier;
|
||||
import com.gempukku.lotro.common.*;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
@@ -49,7 +49,7 @@ public class Card4_101 extends AbstractEvent {
|
||||
new KeywordModifier(self, Filters.sameCard(card), Keyword.DAMAGE, 2), Phase.REGROUP));
|
||||
action.appendEffect(
|
||||
new AddUntilStartOfPhaseModifierEffect(
|
||||
new AllyOnCurrentSiteModifier(self, Filters.sameCard(card)), Phase.REGROUP));
|
||||
new AllyParticipatesInArcheryFireAndSkirmishesModifier(self, Filters.sameCard(card)), Phase.REGROUP));
|
||||
}
|
||||
});
|
||||
return action;
|
||||
|
||||
@@ -66,7 +66,7 @@ public class Filters {
|
||||
};
|
||||
}
|
||||
|
||||
public static Filter canBeAssignedToSkirmish() {
|
||||
public static Filter canBeAssignedToSkirmish(final Side sidePlayer) {
|
||||
return new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
@@ -77,7 +77,7 @@ public class Filters {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return modifiersQuerying.canBeAssignedToSkirmish(gameState, physicalCard);
|
||||
return modifiersQuerying.canBeAssignedToSkirmish(gameState, sidePlayer, physicalCard);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -116,8 +116,13 @@ public abstract class AbstractModifier implements Modifier {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllyOnCurrentSite(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, boolean allyOnCurrentSite) {
|
||||
return allyOnCurrentSite;
|
||||
public boolean isAllyParticipateInArcheryFire(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllyParticipateInSkirmishes(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -166,7 +171,7 @@ public abstract class AbstractModifier implements Modifier {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeAssignedToSkirmish(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, boolean result) {
|
||||
public boolean canBeAssignedToSkirmish(GameState gameState, Side sidePlayer, ModifiersQuerying modifiersQuerying, PhysicalCard card) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -48,7 +48,9 @@ public interface Modifier {
|
||||
|
||||
public boolean canBeExerted(GameState gameState, ModifiersLogic modifiersLogic, PhysicalCard source, PhysicalCard card, boolean result);
|
||||
|
||||
public boolean isAllyOnCurrentSite(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, boolean allyOnCurrentSite);
|
||||
public boolean isAllyParticipateInArcheryFire(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card);
|
||||
|
||||
public boolean isAllyParticipateInSkirmishes(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card);
|
||||
|
||||
public int getArcheryTotal(GameState gameState, ModifiersQuerying modifiersQuerying, Side side, int result);
|
||||
|
||||
@@ -68,7 +70,7 @@ public interface Modifier {
|
||||
|
||||
public boolean isValidAssignments(GameState gameState, Side Side, ModifiersQuerying modifiersQuerying, Map<PhysicalCard, List<PhysicalCard>> assignments, boolean result);
|
||||
|
||||
public boolean canBeAssignedToSkirmish(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, boolean result);
|
||||
public boolean canBeAssignedToSkirmish(GameState gameState, Side sidePlayer, ModifiersQuerying modifiersQuerying, PhysicalCard card);
|
||||
|
||||
public boolean canBeDiscardedFromPlay(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card, PhysicalCard source, boolean result);
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.gempukku.lotro.logic.modifiers;
|
||||
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.common.Phase;
|
||||
import com.gempukku.lotro.common.Side;
|
||||
@@ -319,15 +318,23 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllyOnCurrentSite(GameState gameState, PhysicalCard card) {
|
||||
boolean allyOnCurrentSite = (card.getBlueprint().getCardType() == CardType.ALLY
|
||||
&& gameState.getCurrentSiteNumber() == card.getBlueprint().getSiteNumber()
|
||||
&& gameState.getCurrentSite().getBlueprint().getSiteBlock() == card.getBlueprint().getSiteBlock());
|
||||
public boolean isAllyParticipateInArcheryFire(GameState gameState, PhysicalCard card) {
|
||||
for (Modifier modifier : getModifiers(ModifierEffect.PRESENCE_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
allyOnCurrentSite = modifier.isAllyOnCurrentSite(gameState, this, card, allyOnCurrentSite);
|
||||
if (modifier.isAllyParticipateInArcheryFire(gameState, this, card))
|
||||
return true;
|
||||
}
|
||||
return allyOnCurrentSite;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllyParticipateInSkirmishes(GameState gameState, PhysicalCard card) {
|
||||
for (Modifier modifier : getModifiers(ModifierEffect.PRESENCE_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (modifier.isAllyParticipateInSkirmishes(gameState, this, card))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -389,13 +396,12 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeAssignedToSkirmish(GameState gameState, PhysicalCard card) {
|
||||
boolean result = true;
|
||||
|
||||
public boolean canBeAssignedToSkirmish(GameState gameState, Side sidePlayer, PhysicalCard card) {
|
||||
for (Modifier modifier : getModifiers(ModifierEffect.ASSIGNMENT_MODIFIER))
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
result = modifier.canBeAssignedToSkirmish(gameState, this, card, result);
|
||||
return result;
|
||||
if (!modifier.canBeAssignedToSkirmish(gameState, sidePlayer, this, card))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -15,20 +15,27 @@ import java.util.Map;
|
||||
public interface ModifiersQuerying {
|
||||
public Collection<Modifier> getModifiersAffecting(GameState gameState, PhysicalCard card);
|
||||
|
||||
// Keywords
|
||||
public boolean hasKeyword(GameState gameState, PhysicalCard physicalCard, Keyword keyword);
|
||||
|
||||
public int getKeywordCount(GameState gameState, PhysicalCard physicalCard, Keyword keyword);
|
||||
|
||||
// Archery
|
||||
public int getArcheryTotal(GameState gameState, Side side, int baseArcheryTotal);
|
||||
|
||||
public boolean addsToArcheryTotal(GameState gameState, PhysicalCard card);
|
||||
|
||||
|
||||
public int getMoveLimit(GameState gameState, int baseMoveLimit);
|
||||
|
||||
// Twilight cost
|
||||
public int getTwilightCost(GameState gameState, PhysicalCard physicalCard);
|
||||
|
||||
public int getPlayOnTwilightCost(GameState gameState, PhysicalCard physicalCard, PhysicalCard target);
|
||||
|
||||
public int getRoamingPenalty(GameState gameState, PhysicalCard physicalCard);
|
||||
|
||||
// Stats
|
||||
public int getStrength(GameState gameState, PhysicalCard physicalCard);
|
||||
|
||||
public int getVitality(GameState gameState, PhysicalCard physicalCard);
|
||||
@@ -37,14 +44,23 @@ public interface ModifiersQuerying {
|
||||
|
||||
public boolean isOverwhelmedByStrength(GameState gameState, PhysicalCard card, int strength, int opposingStrength);
|
||||
|
||||
// Wounds/exertions
|
||||
public boolean canTakeWound(GameState gameState, PhysicalCard card);
|
||||
|
||||
public boolean canBeExerted(GameState gameState, PhysicalCard exertionSource, PhysicalCard card);
|
||||
|
||||
public boolean isAllyOnCurrentSite(GameState gameState, PhysicalCard card);
|
||||
public boolean canBeHealed(GameState gameState, PhysicalCard card);
|
||||
|
||||
public boolean addsToArcheryTotal(GameState gameState, PhysicalCard card);
|
||||
// Assignments
|
||||
public boolean canBeAssignedToSkirmish(GameState gameState, Side playerSide, PhysicalCard card);
|
||||
|
||||
public boolean isAllyParticipateInSkirmishes(GameState gameState, PhysicalCard card);
|
||||
|
||||
public boolean isAllyParticipateInArcheryFire(GameState gameState, PhysicalCard card);
|
||||
|
||||
public boolean isValidAssignments(GameState gameState, Side side, Map<PhysicalCard, List<PhysicalCard>> assignments);
|
||||
|
||||
// Playing actions
|
||||
public boolean canPlayAction(GameState gameState, Action action);
|
||||
|
||||
public boolean canHavePlayedOn(GameState gameState, PhysicalCard playedCard, PhysicalCard target);
|
||||
@@ -53,14 +69,9 @@ public interface ModifiersQuerying {
|
||||
|
||||
public boolean shouldSkipPhase(GameState gameState, Phase phase, String playerId);
|
||||
|
||||
public boolean isValidAssignments(GameState gameState, Side side, Map<PhysicalCard, List<PhysicalCard>> assignments);
|
||||
|
||||
public boolean canBeAssignedToSkirmish(GameState gameState, PhysicalCard card);
|
||||
|
||||
// Others
|
||||
public boolean canBeDiscardedFromPlay(GameState gameState, PhysicalCard card, PhysicalCard source);
|
||||
|
||||
public boolean canBeHealed(GameState gameState, PhysicalCard card);
|
||||
|
||||
public boolean canDrawCardAndIncrement(GameState gameState, String playerId);
|
||||
|
||||
public boolean canLookOrRevealCardsInHand(GameState gameState, String playerId);
|
||||
|
||||
@@ -36,12 +36,20 @@ public class ArcheryFireGameProcess implements GameProcess {
|
||||
},
|
||||
Filters.or(
|
||||
Filters.type(CardType.COMPANION),
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return modifiersQuerying.isAllyOnCurrentSite(gameState, physicalCard);
|
||||
}
|
||||
}));
|
||||
Filters.and(
|
||||
Filters.type(CardType.ALLY),
|
||||
Filters.or(
|
||||
Filters.and(
|
||||
Filters.siteNumber(_game.getGameState().getCurrentSiteNumber()),
|
||||
Filters.siteBlock(_game.getGameState().getCurrentSiteBlock()))
|
||||
),
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return modifiersQuerying.isAllyParticipateInArcheryFire(gameState, physicalCard);
|
||||
}
|
||||
}
|
||||
)));
|
||||
|
||||
_fellowshipArcheryTotal = _game.getModifiersQuerying().getArcheryTotal(gameState, Side.FREE_PEOPLE, _fellowshipArcheryTotal);
|
||||
|
||||
|
||||
@@ -28,14 +28,24 @@ public class FellowshipPlayerAssignsArcheryDamageGameProcess implements GameProc
|
||||
public void process() {
|
||||
if (_woundsToAssign > 0) {
|
||||
|
||||
Filter filter = Filters.or(
|
||||
Filters.type(CardType.COMPANION),
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return modifiersQuerying.isAllyOnCurrentSite(gameState, physicalCard);
|
||||
}
|
||||
});
|
||||
Filter filter =
|
||||
Filters.or(
|
||||
Filters.type(CardType.COMPANION),
|
||||
Filters.and(
|
||||
Filters.type(CardType.ALLY),
|
||||
Filters.or(
|
||||
Filters.and(
|
||||
Filters.siteNumber(_game.getGameState().getCurrentSiteNumber()),
|
||||
Filters.siteBlock(_game.getGameState().getCurrentSiteBlock()))
|
||||
),
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return modifiersQuerying.isAllyParticipateInArcheryFire(gameState, physicalCard);
|
||||
}
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
RequiredTriggerAction action = new RequiredTriggerAction(null) {
|
||||
@Override
|
||||
|
||||
@@ -39,18 +39,28 @@ public class FreePeoplePlayerAssignsMinionsGameProcess implements GameProcess {
|
||||
Filters.keyword(Keyword.FIERCE),
|
||||
minionFilter);
|
||||
|
||||
final Collection<PhysicalCard> minions = Filters.filterActive(gameState, _game.getModifiersQuerying(), minionFilter, Filters.canBeAssignedToSkirmish());
|
||||
final Collection<PhysicalCard> minions = Filters.filterActive(gameState, _game.getModifiersQuerying(), minionFilter, Filters.canBeAssignedToSkirmish(Side.FREE_PEOPLE));
|
||||
if (minions.size() > 0) {
|
||||
final Collection<PhysicalCard> freePeopleTargets = Filters.filterActive(gameState, _game.getModifiersQuerying(),
|
||||
Filters.or(
|
||||
Filters.type(CardType.COMPANION),
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return modifiersQuerying.isAllyOnCurrentSite(gameState, physicalCard);
|
||||
}
|
||||
}),
|
||||
Filters.canBeAssignedToSkirmish());
|
||||
Filters.and(
|
||||
Filters.type(CardType.ALLY),
|
||||
Filters.or(
|
||||
Filters.and(
|
||||
Filters.siteNumber(gameState.getCurrentSiteNumber()),
|
||||
Filters.siteBlock(gameState.getCurrentSiteBlock())
|
||||
),
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return modifiersQuerying.isAllyParticipateInSkirmishes(gameState, physicalCard);
|
||||
}
|
||||
}
|
||||
)
|
||||
)
|
||||
),
|
||||
Filters.canBeAssignedToSkirmish(Side.FREE_PEOPLE));
|
||||
|
||||
_game.getUserFeedback().sendAwaitingDecision(gameState.getCurrentPlayerId(),
|
||||
new PlayerAssignMinionsDecision(1, "Assign minions to companions or allies at home", freePeopleTargets, minions) {
|
||||
|
||||
@@ -42,18 +42,28 @@ public class ShadowPlayerAssignsHisMinionsGameProcess implements GameProcess {
|
||||
Filters.keyword(Keyword.FIERCE),
|
||||
minionFilter);
|
||||
|
||||
final Collection<PhysicalCard> minions = Filters.filterActive(gameState, _game.getModifiersQuerying(), minionFilter, Filters.canBeAssignedToSkirmish());
|
||||
final Collection<PhysicalCard> minions = Filters.filterActive(gameState, _game.getModifiersQuerying(), minionFilter, Filters.canBeAssignedToSkirmish(Side.SHADOW));
|
||||
if (minions.size() > 0) {
|
||||
final Collection<PhysicalCard> freePeopleTargets = Filters.filterActive(gameState, _game.getModifiersQuerying(),
|
||||
Filters.or(
|
||||
Filters.type(CardType.COMPANION),
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return modifiersQuerying.isAllyOnCurrentSite(gameState, physicalCard);
|
||||
}
|
||||
}
|
||||
), Filters.canBeAssignedToSkirmish());
|
||||
Filters.and(
|
||||
Filters.type(CardType.ALLY),
|
||||
Filters.or(
|
||||
Filters.and(
|
||||
Filters.siteNumber(gameState.getCurrentSiteNumber()),
|
||||
Filters.siteBlock(gameState.getCurrentSiteBlock())
|
||||
),
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return modifiersQuerying.isAllyParticipateInSkirmishes(gameState, physicalCard);
|
||||
}
|
||||
}
|
||||
)
|
||||
)
|
||||
),
|
||||
Filters.canBeAssignedToSkirmish(Side.SHADOW));
|
||||
|
||||
_game.getUserFeedback().sendAwaitingDecision(_playerId,
|
||||
new PlayerAssignMinionsDecision(1, "Assign minions to companions or allies at home", freePeopleTargets, minions) {
|
||||
|
||||
Reference in New Issue
Block a user