"Phial of Galadriel"

This commit is contained in:
marcins78@gmail.com
2011-09-30 12:44:45 +00:00
parent f74018130f
commit 9dfe59ea60
9 changed files with 94 additions and 4 deletions

View File

@@ -0,0 +1,22 @@
package com.gempukku.lotro.cards.modifiers;
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.ModifierEffect;
import com.gempukku.lotro.logic.modifiers.ModifiersQuerying;
public class ResistanceModifier extends AbstractModifier {
private int _modifier;
public ResistanceModifier(PhysicalCard source, Filter affectFilter, int modifier) {
super(source, "Resistance " + ((modifier < 0) ? modifier : ("+" + modifier)), affectFilter, new ModifierEffect[]{ModifierEffect.RESISTANCE_MODIFIER});
_modifier = modifier;
}
@Override
public int getResistance(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) {
return result + _modifier;
}
}

View File

@@ -2,6 +2,7 @@ package com.gempukku.lotro.cards.set3.elven;
import com.gempukku.lotro.cards.AbstractAttachableFPPossession; import com.gempukku.lotro.cards.AbstractAttachableFPPossession;
import com.gempukku.lotro.cards.effects.ChooseAndDiscardCardsFromHandEffect; import com.gempukku.lotro.cards.effects.ChooseAndDiscardCardsFromHandEffect;
import com.gempukku.lotro.common.CardType;
import com.gempukku.lotro.common.Culture; import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Phase;
@@ -29,7 +30,7 @@ import java.util.List;
*/ */
public class Card3_023 extends AbstractAttachableFPPossession { public class Card3_023 extends AbstractAttachableFPPossession {
public Card3_023() { public Card3_023() {
super(0, 0, 1, Culture.ELVEN, Keyword.RING, "Nenya", true); super(0, 0, 1, Culture.ELVEN, CardType.ARTIFACT, Keyword.RING, "Nenya", true);
} }
@Override @Override

View File

@@ -0,0 +1,47 @@
package com.gempukku.lotro.cards.set3.elven;
import com.gempukku.lotro.cards.AbstractAttachableFPPossession;
import com.gempukku.lotro.cards.PlayConditions;
import com.gempukku.lotro.cards.modifiers.ResistanceModifier;
import com.gempukku.lotro.common.Culture;
import com.gempukku.lotro.common.Keyword;
import com.gempukku.lotro.common.Race;
import com.gempukku.lotro.filters.Filter;
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: Realms of Elf-lords
* Side: Free
* Culture: Elven
* Twilight Cost: 0
* Type: Possession
* Game Text: To play, exert an Elf. Bearer must be the Ring-bearer. Bearer's resistance is +2.
*/
public class Card3_024 extends AbstractAttachableFPPossession {
public Card3_024() {
super(0, 0, 0, Culture.ELVEN, null, "Phial of Galadriel", true);
}
@Override
public boolean checkPlayRequirements(String playerId, LotroGame game, PhysicalCard self, Filter additionalAttachmentFilter, int twilightModifier) {
return super.checkPlayRequirements(playerId, game, self, additionalAttachmentFilter, twilightModifier)
&& PlayConditions.canExert(self, game.getGameState(), game.getModifiersQuerying(), Filters.race(Race.ELF));
}
@Override
protected Filter getValidTargetFilter(String playerId, LotroGame game, PhysicalCard self) {
return Filters.keyword(Keyword.RING_BEARER);
}
@Override
protected List<? extends Modifier> getNonBasicStatsModifiers(PhysicalCard self) {
return Collections.singletonList(
new ResistanceModifier(self, Filters.hasAttached(self), 2));
}
}

View File

@@ -80,6 +80,11 @@ public abstract class AbstractModifier implements Modifier {
return result; return result;
} }
@Override
public int getResistance(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) {
return result;
}
@Override @Override
public int getTwilightCost(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) { public int getTwilightCost(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result) {
return result; return result;

View File

@@ -32,6 +32,8 @@ public interface Modifier {
public int getVitality(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result); public int getVitality(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result);
public int getResistance(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result);
public int getTwilightCost(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result); public int getTwilightCost(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, int result);
public int getPlayOnTwilightCost(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, PhysicalCard target, int result); public int getPlayOnTwilightCost(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard, PhysicalCard target, int result);

View File

@@ -1,7 +1,8 @@
package com.gempukku.lotro.logic.modifiers; package com.gempukku.lotro.logic.modifiers;
public enum ModifierEffect { public enum ModifierEffect {
KEYWORD_MODIFIER, STRENGTH_MODIFIER, VITALITY_MODIFIER, TWILIGHT_COST_MODIFIER, OVERWHELM_MODIFIER, WOUND_MODIFIER, KEYWORD_MODIFIER, STRENGTH_MODIFIER, VITALITY_MODIFIER, RESISTANCE_MODIFIER, TWILIGHT_COST_MODIFIER, OVERWHELM_MODIFIER,
WOUND_MODIFIER,
PRESENCE_MODIFIER, ARCHERY_MODIFIER, MOVE_LIMIT_MODIFIER, ACTION_MODIFIER, ASSIGNMENT_MODIFIER, DISCARD_FROM_PLAY_MODIFIER, PRESENCE_MODIFIER, ARCHERY_MODIFIER, MOVE_LIMIT_MODIFIER, ACTION_MODIFIER, ASSIGNMENT_MODIFIER, DISCARD_FROM_PLAY_MODIFIER,
LOOK_OR_REVEAL_MODIFIER, SPOT_MODIFIER LOOK_OR_REVEAL_MODIFIER, SPOT_MODIFIER
} }

View File

@@ -236,6 +236,16 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
return Math.max(0, result); return Math.max(0, result);
} }
@Override
public int getResistance(GameState gameState, PhysicalCard physicalCard) {
int result = physicalCard.getBlueprint().getResistance() - gameState.getBurdens();
for (Modifier modifier : getModifiers(ModifierEffect.RESISTANCE_MODIFIER)) {
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
result = modifier.getResistance(gameState, this, physicalCard, result);
}
return Math.max(0, result);
}
@Override @Override
public int getTwilightCost(GameState gameState, PhysicalCard physicalCard) { public int getTwilightCost(GameState gameState, PhysicalCard physicalCard) {
int result = physicalCard.getBlueprint().getTwilightCost(); int result = physicalCard.getBlueprint().getTwilightCost();

View File

@@ -33,6 +33,8 @@ public interface ModifiersQuerying {
public int getVitality(GameState gameState, PhysicalCard physicalCard); public int getVitality(GameState gameState, PhysicalCard physicalCard);
public int getResistance(GameState gameState, PhysicalCard physicalCard);
public boolean isOverwhelmedByStrength(GameState gameState, PhysicalCard card, int strength, int opposingStrength); public boolean isOverwhelmedByStrength(GameState gameState, PhysicalCard card, int strength, int opposingStrength);
public boolean canTakeWound(GameState gameState, PhysicalCard card); public boolean canTakeWound(GameState gameState, PhysicalCard card);

View File

@@ -158,8 +158,8 @@ public class DefaultLotroGame implements LotroGame {
} else { } else {
// Ring-bearer corruption // Ring-bearer corruption
PhysicalCard ringBearer = Filters.findFirstActive(getGameState(), getModifiersQuerying(), Filters.keyword(Keyword.RING_BEARER)); PhysicalCard ringBearer = Filters.findFirstActive(getGameState(), getModifiersQuerying(), Filters.keyword(Keyword.RING_BEARER));
int ringBearerResistance = ringBearer.getBlueprint().getResistance(); int ringBearerResistance = getModifiersQuerying().getResistance(getGameState(), ringBearer);
if (getGameState().getBurdens() >= ringBearerResistance) { if (ringBearerResistance <= 0) {
playerLost(getGameState().getCurrentPlayerId(), "The Ring-Bearer is corrupted"); playerLost(getGameState().getCurrentPlayerId(), "The Ring-Bearer is corrupted");
return; return;
} }