"Phial of Galadriel"
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user