"Streets of Edoras"

This commit is contained in:
marcins78@gmail.com
2011-10-16 20:59:03 +00:00
parent 5327593060
commit b5c9b099a0
10 changed files with 135 additions and 4 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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