From 8c61ffc7df52c32379f93ba2272e75458dfc6f2e Mon Sep 17 00:00:00 2001 From: marcins78 Date: Fri, 19 Apr 2013 13:46:59 +0000 Subject: [PATCH] - FP characters that were removed from skirmish, now also count as losing a skirmish involving the opposing minions. --- .../src/main/web/includes/changeLog.html | 1 + .../logic/effects/ResolveSkirmishEffect.java | 182 +++++++++--------- 2 files changed, 95 insertions(+), 88 deletions(-) diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html index 8eb0f6e9b..11be77b28 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html +++ b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html @@ -1,6 +1,7 @@
 19 Apr. 2013
 - "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.
 
 18 Apr. 2013
 - Fixed a type in "Palantir" name.
diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ResolveSkirmishEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ResolveSkirmishEffect.java
index 5f883843a..ce25707a1 100644
--- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ResolveSkirmishEffect.java
+++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/ResolveSkirmishEffect.java
@@ -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 involving = new HashSet();
+		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 fpList(PhysicalCard card) {
-        if (card != null)
-            return Collections.singleton(card);
-        else
-            return Collections.emptySet();
-    }
+		return new FullEffectResult(true);
+	}
+
+	private Set fpList(PhysicalCard card) {
+		if (card != null)
+			return Collections.singleton(card);
+		else
+			return Collections.emptySet();
+	}
 }