"Streets of Edoras"
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
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;
|
||||
import com.gempukku.lotro.logic.modifiers.AbstractModifier;
|
||||
import com.gempukku.lotro.logic.modifiers.Condition;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifierEffect;
|
||||
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
|
||||
|
||||
public class AllyMayNotParticipateInArcheryFireAndSkirmishesModifier extends AbstractModifier {
|
||||
private PhysicalCard _source;
|
||||
|
||||
public AllyMayNotParticipateInArcheryFireAndSkirmishesModifier(PhysicalCard source, Condition condition, Filter affectFilter) {
|
||||
super(source, "May not participate in archery fire and skirmishes", affectFilter, condition, new ModifierEffect[]{ModifierEffect.PRESENCE_MODIFIER});
|
||||
_source = source;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllyPreventedFromParticipatingInArcheryFire(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllyPreventedFromParticipatingInSkirmishes(GameState gameState, Side sidePlayer, ModifiersQuerying modifiersQuerying, PhysicalCard card) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.gempukku.lotro.cards.set4.site;
|
||||
|
||||
import com.gempukku.lotro.cards.AbstractSite;
|
||||
import com.gempukku.lotro.cards.modifiers.AllyMayNotParticipateInArcheryFireAndSkirmishesModifier;
|
||||
import com.gempukku.lotro.cards.modifiers.LocationCondition;
|
||||
import com.gempukku.lotro.common.Block;
|
||||
import com.gempukku.lotro.common.CardType;
|
||||
import com.gempukku.lotro.common.Culture;
|
||||
import com.gempukku.lotro.common.Keyword;
|
||||
import com.gempukku.lotro.filters.Filters;
|
||||
import com.gempukku.lotro.game.PhysicalCard;
|
||||
import com.gempukku.lotro.game.state.LotroGame;
|
||||
import com.gempukku.lotro.logic.modifiers.Modifier;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Set: The Two Towers
|
||||
* Twilight Cost: 0
|
||||
* Type: Site
|
||||
* Site: 3T
|
||||
* Game Text: Sanctuary. Each [ROHAN] ally may not participate in archery fire or skirmishes at Streets of Edoras.
|
||||
*/
|
||||
public class Card4_340 extends AbstractSite {
|
||||
public Card4_340() {
|
||||
super("Streets of Edoras", Block.TWO_TOWERS, 3, 0, Direction.RIGHT);
|
||||
addKeyword(Keyword.SANCTUARY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) {
|
||||
return Collections.singletonList(
|
||||
new AllyMayNotParticipateInArcheryFireAndSkirmishesModifier(self, new LocationCondition(Filters.sameCard(self)), Filters.and(Culture.ROHAN, CardType.ALLY)));
|
||||
}
|
||||
}
|
||||
@@ -130,6 +130,16 @@ public abstract class AbstractModifier implements Modifier {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllyPreventedFromParticipatingInArcheryFire(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllyPreventedFromParticipatingInSkirmishes(GameState gameState, Side sidePlayer, ModifiersQuerying modifiersQuerying, PhysicalCard card) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getArcheryTotal(GameState gameState, ModifiersQuerying modifiersQuerying, Side side, int result) {
|
||||
return result;
|
||||
|
||||
@@ -54,6 +54,10 @@ public interface Modifier {
|
||||
|
||||
public boolean isAllyParticipateInSkirmishes(GameState gameState, Side sidePlayer, ModifiersQuerying modifiersQuerying, PhysicalCard card);
|
||||
|
||||
public boolean isAllyPreventedFromParticipatingInArcheryFire(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card);
|
||||
|
||||
public boolean isAllyPreventedFromParticipatingInSkirmishes(GameState gameState, Side sidePlayer, ModifiersQuerying modifiersQuerying, PhysicalCard card);
|
||||
|
||||
public int getArcheryTotal(GameState gameState, ModifiersQuerying modifiersQuerying, Side side, int result);
|
||||
|
||||
public int getMoveLimit(GameState gameState, ModifiersQuerying modifiersQuerying, int result);
|
||||
|
||||
@@ -347,6 +347,26 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllyPreventedFromParticipatingInArcheryFire(GameState gameState, PhysicalCard card) {
|
||||
for (Modifier modifier : getModifiers(ModifierEffect.PRESENCE_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (modifier.isAllyPreventedFromParticipatingInArcheryFire(gameState, this, card))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllyPreventedFromParticipatingInSkirmishes(GameState gameState, Side sidePlayer, PhysicalCard card) {
|
||||
for (Modifier modifier : getModifiers(ModifierEffect.PRESENCE_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (modifier.isAllyPreventedFromParticipatingInSkirmishes(gameState, sidePlayer, this, card))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addsToArcheryTotal(GameState gameState, PhysicalCard card) {
|
||||
boolean result = true;
|
||||
|
||||
@@ -60,6 +60,10 @@ public interface ModifiersQuerying {
|
||||
|
||||
public boolean isAllyParticipateInArcheryFire(GameState gameState, PhysicalCard card);
|
||||
|
||||
public boolean isAllyPreventedFromParticipatingInSkirmishes(GameState gameState, Side sidePlayer, PhysicalCard card);
|
||||
|
||||
public boolean isAllyPreventedFromParticipatingInArcheryFire(GameState gameState, PhysicalCard card);
|
||||
|
||||
public boolean isValidAssignments(GameState gameState, Side side, Map<PhysicalCard, List<PhysicalCard>> assignments);
|
||||
|
||||
// Playing actions
|
||||
|
||||
@@ -39,7 +39,14 @@ public class ArcheryFireGameProcess implements GameProcess {
|
||||
Filters.and(
|
||||
Filters.type(CardType.ALLY),
|
||||
Filters.or(
|
||||
Filters.allyAtHome,
|
||||
Filters.and(
|
||||
Filters.allyAtHome,
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return !modifiersQuerying.isAllyPreventedFromParticipatingInArcheryFire(gameState, physicalCard);
|
||||
}
|
||||
}),
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
|
||||
@@ -34,7 +34,14 @@ public class FellowshipPlayerAssignsArcheryDamageGameProcess implements GameProc
|
||||
Filters.and(
|
||||
Filters.type(CardType.ALLY),
|
||||
Filters.or(
|
||||
Filters.allyAtHome,
|
||||
Filters.and(
|
||||
Filters.allyAtHome,
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return !modifiersQuerying.isAllyPreventedFromParticipatingInArcheryFire(gameState, physicalCard);
|
||||
}
|
||||
}),
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
|
||||
@@ -47,7 +47,14 @@ public class FreePeoplePlayerAssignsMinionsGameProcess implements GameProcess {
|
||||
Filters.and(
|
||||
Filters.type(CardType.ALLY),
|
||||
Filters.or(
|
||||
Filters.allyAtHome,
|
||||
Filters.and(
|
||||
Filters.allyAtHome,
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return !modifiersQuerying.isAllyPreventedFromParticipatingInSkirmishes(gameState, Side.FREE_PEOPLE, physicalCard);
|
||||
}
|
||||
}),
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
|
||||
@@ -50,7 +50,14 @@ public class ShadowPlayerAssignsHisMinionsGameProcess implements GameProcess {
|
||||
Filters.and(
|
||||
Filters.type(CardType.ALLY),
|
||||
Filters.or(
|
||||
Filters.allyAtHome,
|
||||
Filters.and(
|
||||
Filters.allyAtHome,
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
return !modifiersQuerying.isAllyPreventedFromParticipatingInSkirmishes(gameState, Side.SHADOW, physicalCard);
|
||||
}
|
||||
}),
|
||||
new Filter() {
|
||||
@Override
|
||||
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
|
||||
|
||||
Reference in New Issue
Block a user