- FP characters that were removed from skirmish, now also count as losing a skirmish involving the opposing minions.

This commit is contained in:
marcins78
2013-04-19 13:46:59 +00:00
parent bfc88e0104
commit 8c61ffc7df
2 changed files with 95 additions and 88 deletions

View File

@@ -1,6 +1,7 @@
<pre style="font-size:80%">
<b>19 Apr. 2013</b>
- "Grieving the Fallen" cannot be attached to Ring-bearer.
- FP characters that were removed from skirmish, now also count as losing a skirmish involving the opposing minions.
<b>18 Apr. 2013</b>
- Fixed a type in "Palantir" name.

View File

@@ -11,113 +11,119 @@ import com.gempukku.lotro.logic.timing.results.NormalSkirmishResult;
import com.gempukku.lotro.logic.timing.results.OverwhelmSkirmishResult;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public class ResolveSkirmishEffect extends AbstractEffect {
public enum Result {
FELLOWSHIP_OVERWHELMED, FELLOWSHIP_LOSES, SHADOW_LOSES, SHADOW_OVERWHELMED
}
public enum Result {
FELLOWSHIP_OVERWHELMED, FELLOWSHIP_LOSES, SHADOW_LOSES, SHADOW_OVERWHELMED
}
@Override
public String getText(LotroGame game) {
return "Resolve skirmish";
}
@Override
public String getText(LotroGame game) {
return "Resolve skirmish";
}
@Override
public Type getType() {
return Type.BEFORE_SKIRMISH_RESOLVED;
}
@Override
public Type getType() {
return Type.BEFORE_SKIRMISH_RESOLVED;
}
@Override
public boolean isPlayableInFull(LotroGame game) {
return true;
}
@Override
public boolean isPlayableInFull(LotroGame game) {
return true;
}
public Result getUpcomingResult(LotroGame game) {
final Skirmish skirmish = game.getGameState().getSkirmish();
public Result getUpcomingResult(LotroGame game) {
final Skirmish skirmish = game.getGameState().getSkirmish();
if (skirmish.getShadowCharacters().size() == 0)
return Result.SHADOW_LOSES;
if (skirmish.getFellowshipCharacter() == null)
return Result.FELLOWSHIP_LOSES;
if (skirmish.getShadowCharacters().size() == 0)
return Result.SHADOW_LOSES;
if (skirmish.getFellowshipCharacter() == null)
return Result.FELLOWSHIP_LOSES;
int fpStrength = RuleUtils.getFellowshipSkirmishStrength(game);
int shadowStrength = RuleUtils.getShadowSkirmishStrength(game);
int fpStrength = RuleUtils.getFellowshipSkirmishStrength(game);
int shadowStrength = RuleUtils.getShadowSkirmishStrength(game);
final PhysicalCard fellowshipCharacter = skirmish.getFellowshipCharacter();
final PhysicalCard fellowshipCharacter = skirmish.getFellowshipCharacter();
int multiplier = 2;
if (fellowshipCharacter != null)
multiplier = game.getModifiersQuerying().getOverwhelmMultiplier(game.getGameState(), fellowshipCharacter);
int multiplier = 2;
if (fellowshipCharacter != null)
multiplier = game.getModifiersQuerying().getOverwhelmMultiplier(game.getGameState(), fellowshipCharacter);
if (fpStrength == 0 && shadowStrength == 0)
return Result.FELLOWSHIP_LOSES;
else if (fpStrength * multiplier <= shadowStrength) {
return Result.FELLOWSHIP_OVERWHELMED;
} else if (fpStrength <= shadowStrength) {
return Result.FELLOWSHIP_LOSES;
} else if (fpStrength >= 2 * shadowStrength) {
return Result.SHADOW_OVERWHELMED;
} else {
return Result.SHADOW_LOSES;
}
}
if (fpStrength == 0 && shadowStrength == 0)
return Result.FELLOWSHIP_LOSES;
else if (fpStrength * multiplier <= shadowStrength) {
return Result.FELLOWSHIP_OVERWHELMED;
} else if (fpStrength <= shadowStrength) {
return Result.FELLOWSHIP_LOSES;
} else if (fpStrength >= 2 * shadowStrength) {
return Result.SHADOW_OVERWHELMED;
} else {
return Result.SHADOW_LOSES;
}
}
@Override
protected FullEffectResult playEffectReturningResult(LotroGame game) {
Skirmish skirmish = game.getGameState().getSkirmish();
@Override
protected FullEffectResult playEffectReturningResult(LotroGame game) {
Skirmish skirmish = game.getGameState().getSkirmish();
Result result = getUpcomingResult(game);
Result result = getUpcomingResult(game);
if (result == Result.FELLOWSHIP_LOSES) {
game.getGameState().sendMessage("Skirmish resolved with a normal win");
game.getActionsEnvironment().emitEffectResult(new NormalSkirmishResult(skirmish.getShadowCharacters(), fpList(skirmish.getFellowshipCharacter()), skirmish.getRemovedFromSkirmish()));
Set<PhysicalCard> involving = new HashSet<PhysicalCard>();
if (skirmish.getFellowshipCharacter() != null)
involving.add(skirmish.getFellowshipCharacter());
involving.addAll(skirmish.getShadowCharacters());
for (PhysicalCard minion : skirmish.getShadowCharacters())
game.getActionsEnvironment().emitEffectResult(new CharacterWonSkirmishResult(CharacterWonSkirmishResult.SkirmishType.NORMAL, minion, skirmish.getFellowshipCharacter()));
if (skirmish.getFellowshipCharacter() != null)
game.getActionsEnvironment().emitEffectResult(new CharacterLostSkirmishResult(CharacterLostSkirmishResult.SkirmishType.NORMAL, skirmish.getFellowshipCharacter(), skirmish.getShadowCharacters()));
for (PhysicalCard removedMinion : skirmish.getRemovedFromSkirmish())
game.getActionsEnvironment().emitEffectResult(new CharacterLostSkirmishResult(CharacterLostSkirmishResult.SkirmishType.NORMAL, removedMinion, skirmish.getFellowshipCharacter()));
} else if (result == Result.SHADOW_LOSES) {
game.getGameState().sendMessage("Skirmish resolved with a normal win");
game.getActionsEnvironment().emitEffectResult(new NormalSkirmishResult(fpList(skirmish.getFellowshipCharacter()), skirmish.getShadowCharacters(), skirmish.getRemovedFromSkirmish()));
if (result == Result.FELLOWSHIP_LOSES) {
game.getGameState().sendMessage("Skirmish resolved with a normal win");
game.getActionsEnvironment().emitEffectResult(new NormalSkirmishResult(skirmish.getShadowCharacters(), fpList(skirmish.getFellowshipCharacter()), skirmish.getRemovedFromSkirmish()));
for (PhysicalCard minion : skirmish.getShadowCharacters())
game.getActionsEnvironment().emitEffectResult(new CharacterLostSkirmishResult(CharacterLostSkirmishResult.SkirmishType.NORMAL, minion, skirmish.getFellowshipCharacter()));
if (skirmish.getFellowshipCharacter() != null)
game.getActionsEnvironment().emitEffectResult(new CharacterWonSkirmishResult(CharacterWonSkirmishResult.SkirmishType.NORMAL, skirmish.getFellowshipCharacter(), skirmish.getShadowCharacters()));
for (PhysicalCard removedMinion : skirmish.getRemovedFromSkirmish())
game.getActionsEnvironment().emitEffectResult(new CharacterLostSkirmishResult(CharacterLostSkirmishResult.SkirmishType.NORMAL, removedMinion, skirmish.getFellowshipCharacter()));
} else if (result == Result.FELLOWSHIP_OVERWHELMED) {
game.getGameState().sendMessage("Skirmish resolved with an overwhelm");
game.getActionsEnvironment().emitEffectResult(new OverwhelmSkirmishResult(skirmish.getShadowCharacters(), fpList(skirmish.getFellowshipCharacter()), skirmish.getRemovedFromSkirmish()));
for (PhysicalCard minion : skirmish.getShadowCharacters())
game.getActionsEnvironment().emitEffectResult(new CharacterWonSkirmishResult(CharacterWonSkirmishResult.SkirmishType.NORMAL, minion, involving));
if (skirmish.getFellowshipCharacter() != null)
game.getActionsEnvironment().emitEffectResult(new CharacterLostSkirmishResult(CharacterLostSkirmishResult.SkirmishType.NORMAL, skirmish.getFellowshipCharacter(), involving));
for (PhysicalCard removedCharacter : skirmish.getRemovedFromSkirmish())
game.getActionsEnvironment().emitEffectResult(new CharacterLostSkirmishResult(CharacterLostSkirmishResult.SkirmishType.NORMAL, removedCharacter, involving));
} else if (result == Result.SHADOW_LOSES) {
game.getGameState().sendMessage("Skirmish resolved with a normal win");
game.getActionsEnvironment().emitEffectResult(new NormalSkirmishResult(fpList(skirmish.getFellowshipCharacter()), skirmish.getShadowCharacters(), skirmish.getRemovedFromSkirmish()));
for (PhysicalCard minion : skirmish.getShadowCharacters())
game.getActionsEnvironment().emitEffectResult(new CharacterWonSkirmishResult(CharacterWonSkirmishResult.SkirmishType.OVERWHELM, minion, skirmish.getFellowshipCharacter()));
if (skirmish.getFellowshipCharacter() != null)
game.getActionsEnvironment().emitEffectResult(new CharacterLostSkirmishResult(CharacterLostSkirmishResult.SkirmishType.OVERWHELM, skirmish.getFellowshipCharacter(), skirmish.getShadowCharacters()));
for (PhysicalCard removedMinion : skirmish.getRemovedFromSkirmish())
game.getActionsEnvironment().emitEffectResult(new CharacterLostSkirmishResult(CharacterLostSkirmishResult.SkirmishType.OVERWHELM, removedMinion, skirmish.getFellowshipCharacter()));
} else {
game.getGameState().sendMessage("Skirmish resolved with an overwhelm");
game.getActionsEnvironment().emitEffectResult(new OverwhelmSkirmishResult(fpList(skirmish.getFellowshipCharacter()), skirmish.getShadowCharacters(), skirmish.getRemovedFromSkirmish()));
for (PhysicalCard minion : skirmish.getShadowCharacters())
game.getActionsEnvironment().emitEffectResult(new CharacterLostSkirmishResult(CharacterLostSkirmishResult.SkirmishType.NORMAL, minion, involving));
if (skirmish.getFellowshipCharacter() != null)
game.getActionsEnvironment().emitEffectResult(new CharacterWonSkirmishResult(CharacterWonSkirmishResult.SkirmishType.NORMAL, skirmish.getFellowshipCharacter(), involving));
for (PhysicalCard removedCharacter : skirmish.getRemovedFromSkirmish())
game.getActionsEnvironment().emitEffectResult(new CharacterLostSkirmishResult(CharacterLostSkirmishResult.SkirmishType.NORMAL, removedCharacter, involving));
} else if (result == Result.FELLOWSHIP_OVERWHELMED) {
game.getGameState().sendMessage("Skirmish resolved with an overwhelm");
game.getActionsEnvironment().emitEffectResult(new OverwhelmSkirmishResult(skirmish.getShadowCharacters(), fpList(skirmish.getFellowshipCharacter()), skirmish.getRemovedFromSkirmish()));
for (PhysicalCard minion : skirmish.getShadowCharacters())
game.getActionsEnvironment().emitEffectResult(new CharacterLostSkirmishResult(CharacterLostSkirmishResult.SkirmishType.OVERWHELM, minion, skirmish.getFellowshipCharacter()));
if (skirmish.getFellowshipCharacter() != null)
game.getActionsEnvironment().emitEffectResult(new CharacterWonSkirmishResult(CharacterWonSkirmishResult.SkirmishType.OVERWHELM, skirmish.getFellowshipCharacter(), skirmish.getShadowCharacters()));
for (PhysicalCard removedMinion : skirmish.getRemovedFromSkirmish())
game.getActionsEnvironment().emitEffectResult(new CharacterLostSkirmishResult(CharacterLostSkirmishResult.SkirmishType.OVERWHELM, removedMinion, skirmish.getFellowshipCharacter()));
}
for (PhysicalCard minion : skirmish.getShadowCharacters())
game.getActionsEnvironment().emitEffectResult(new CharacterWonSkirmishResult(CharacterWonSkirmishResult.SkirmishType.OVERWHELM, minion, involving));
if (skirmish.getFellowshipCharacter() != null)
game.getActionsEnvironment().emitEffectResult(new CharacterLostSkirmishResult(CharacterLostSkirmishResult.SkirmishType.OVERWHELM, skirmish.getFellowshipCharacter(), involving));
for (PhysicalCard removedCharacter : skirmish.getRemovedFromSkirmish())
game.getActionsEnvironment().emitEffectResult(new CharacterLostSkirmishResult(CharacterLostSkirmishResult.SkirmishType.OVERWHELM, removedCharacter, involving));
} else {
game.getGameState().sendMessage("Skirmish resolved with an overwhelm");
game.getActionsEnvironment().emitEffectResult(new OverwhelmSkirmishResult(fpList(skirmish.getFellowshipCharacter()), skirmish.getShadowCharacters(), skirmish.getRemovedFromSkirmish()));
return new FullEffectResult(true);
}
for (PhysicalCard minion : skirmish.getShadowCharacters())
game.getActionsEnvironment().emitEffectResult(new CharacterLostSkirmishResult(CharacterLostSkirmishResult.SkirmishType.OVERWHELM, minion, involving));
if (skirmish.getFellowshipCharacter() != null)
game.getActionsEnvironment().emitEffectResult(new CharacterWonSkirmishResult(CharacterWonSkirmishResult.SkirmishType.OVERWHELM, skirmish.getFellowshipCharacter(), involving));
for (PhysicalCard removedCharacter : skirmish.getRemovedFromSkirmish())
game.getActionsEnvironment().emitEffectResult(new CharacterLostSkirmishResult(CharacterLostSkirmishResult.SkirmishType.OVERWHELM, removedCharacter, involving));
}
private Set<PhysicalCard> fpList(PhysicalCard card) {
if (card != null)
return Collections.singleton(card);
else
return Collections.emptySet();
}
return new FullEffectResult(true);
}
private Set<PhysicalCard> fpList(PhysicalCard card) {
if (card != null)
return Collections.singleton(card);
else
return Collections.emptySet();
}
}