"Haradrim Marksman"

This commit is contained in:
marcins78@gmail.com
2011-11-14 12:36:20 +00:00
parent 4d43b81677
commit 58838e8100
8 changed files with 125 additions and 17 deletions

View File

@@ -0,0 +1,24 @@
package com.gempukku.lotro.cards.modifiers;
import com.gempukku.lotro.common.Filterable;
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 CantTakeArcheryWoundsModifier extends AbstractModifier {
public CantTakeArcheryWoundsModifier(PhysicalCard source, Filterable affectFilter) {
super(source, "Can't take archery wounds", affectFilter, ModifierEffect.WOUND_MODIFIER);
}
public CantTakeArcheryWoundsModifier(PhysicalCard source, Condition condition, Filterable affectFilter) {
super(source, "Can't take archery wounds", affectFilter, condition, ModifierEffect.WOUND_MODIFIER);
}
@Override
public boolean canTakeArcheryWound(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
return false;
}
}

View File

@@ -0,0 +1,44 @@
package com.gempukku.lotro.cards.set8.raider;
import com.gempukku.lotro.cards.AbstractMinion;
import com.gempukku.lotro.cards.modifiers.CantTakeArcheryWoundsModifier;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Race;
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 com.gempukku.lotro.logic.modifiers.SpotCondition;
import java.util.Collections;
import java.util.List;
/**
* Set: Siege of Gondor
* Side: Shadow
* Culture: Raider
* Twilight Cost: 5
* Type: Minion • Man
* Strength: 11
* Vitality: 3
* Site: 4
* Game Text: Southron. Archer. While you can spot another [RAIDER] Man, Ring-bound companions cannot take archery
* wounds.
*/
public class Card8_060 extends AbstractMinion {
public Card8_060() {
super(5, 11, 3, 4, Race.MAN, Culture.RAIDER, "Haradrim Marksman", true);
addKeyword(Keyword.SOUTHRON);
addKeyword(Keyword.ARCHER);
}
@Override
public List<? extends Modifier> getAlwaysOnModifiers(LotroGame game, PhysicalCard self) {
return Collections.singletonList(
new CantTakeArcheryWoundsModifier(self,
new SpotCondition(Filters.not(self), Culture.RAIDER, Race.MAN),
Filters.and(CardType.COMPANION, Keyword.RING_BOUND)));
}
}

View File

@@ -118,6 +118,11 @@ public abstract class AbstractModifier implements Modifier {
return true;
}
@Override
public boolean canTakeArcheryWound(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
return true;
}
@Override
public boolean canBeExerted(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard exertionSource, PhysicalCard card) {
return true;

View File

@@ -49,6 +49,8 @@ public interface Modifier {
public boolean canTakeWound(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int woundsAlreadyTakenInPhase);
public boolean canTakeArcheryWound(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard);
public boolean canBeExerted(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard source, PhysicalCard card);
public boolean isAllyParticipateInArcheryFire(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard card);

View File

@@ -337,6 +337,17 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
return true;
}
@Override
public boolean canTakeArcheryWound(GameState gameState, PhysicalCard card) {
for (Modifier modifier : getModifiers(ModifierEffect.WOUND_MODIFIER)) {
if (affectsCardWithSkipSet(gameState, card, modifier)) {
if (!modifier.canTakeArcheryWound(gameState, this, card))
return false;
}
}
return true;
}
@Override
public boolean canBeExerted(GameState gameState, PhysicalCard source, PhysicalCard card) {
for (Modifier modifier : getModifiers(ModifierEffect.WOUND_MODIFIER)) {

View File

@@ -50,6 +50,8 @@ public interface ModifiersQuerying {
// Wounds/exertions
public boolean canTakeWound(GameState gameState, PhysicalCard card);
public boolean canTakeArcheryWound(GameState gameState, PhysicalCard card);
public boolean canBeExerted(GameState gameState, PhysicalCard exertionSource, PhysicalCard card);
public boolean canBeHealed(GameState gameState, PhysicalCard card);

View File

@@ -29,26 +29,34 @@ public class FellowshipPlayerAssignsArcheryDamageGameProcess implements GameProc
if (_woundsToAssign > 0) {
Filter filter =
Filters.or(
Filters.type(CardType.COMPANION),
Filters.and(
Filters.type(CardType.ALLY),
Filters.or(
Filters.and(
Filters.allyAtHome,
Filters.and(
Filters.or(
Filters.type(CardType.COMPANION),
Filters.and(
Filters.type(CardType.ALLY),
Filters.or(
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) {
return !modifiersQuerying.isAllyPreventedFromParticipatingInArcheryFire(gameState, physicalCard);
return modifiersQuerying.isAllyAllowedToParticipateInArcheryFire(gameState, physicalCard);
}
}),
new Filter() {
@Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
return modifiersQuerying.isAllyAllowedToParticipateInArcheryFire(gameState, physicalCard);
}
})
)
})
)
),
new Filter() {
@Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
return modifiersQuerying.canTakeArcheryWound(gameState, physicalCard);
}
}
);
SystemQueueAction action = new SystemQueueAction();

View File

@@ -3,9 +3,12 @@ package com.gempukku.lotro.logic.timing.processes.turn.archery;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.filters.Filter;
import com.gempukku.lotro.filters.Filters;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.game.state.GameState;
import com.gempukku.lotro.game.state.LotroGame;
import com.gempukku.lotro.logic.actions.SystemQueueAction;
import com.gempukku.lotro.logic.effects.ChooseAndWoundCharactersEffect;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
import com.gempukku.lotro.logic.timing.processes.GameProcess;
public class ShadowPlayerAssignsArcheryDamageGameProcess implements GameProcess {
@@ -26,7 +29,16 @@ public class ShadowPlayerAssignsArcheryDamageGameProcess implements GameProcess
@Override
public void process(LotroGame game) {
if (_woundsToAssign > 0) {
Filter filter = Filters.and(Filters.type(CardType.MINION), Filters.owner(_playerId));
Filter filter =
Filters.and(
Filters.type(CardType.MINION),
Filters.owner(_playerId),
new Filter() {
@Override
public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) {
return modifiersQuerying.canTakeArcheryWound(gameState, physicalCard);
}
});
SystemQueueAction action = new SystemQueueAction();
for (int i = 0; i < _woundsToAssign; i++) {