From bfa001851f0996d41d50dff353a65b333e7aa3d4 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Tue, 24 Jan 2012 22:18:07 +0000 Subject: [PATCH] - If a character is removed from skirmish and not in play anymore, "character loses skirmish" is not triggered for it. --- .../gempukku/lotro/game/state/Skirmish.java | 6 ++-- .../logic/effects/ResolveSkirmishEffect.java | 29 ++++++++++++++----- .../timing/results/NormalSkirmishResult.java | 4 +-- .../results/OverwhelmSkirmishResult.java | 4 +-- .../logic/timing/results/SkirmishResult.java | 10 +------ .../src/main/webapp/includes/changeLog.html | 2 ++ 6 files changed, 31 insertions(+), 24 deletions(-) diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/Skirmish.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/Skirmish.java index 668fdcd5c..4df3d562f 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/Skirmish.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/Skirmish.java @@ -10,7 +10,7 @@ public class Skirmish { private Set _shadowCharacters; private boolean _cancelled; - private Set _removedFromSkirmish = new HashSet(); + private Set _removedFromSkirmish = new HashSet(); public Skirmish(PhysicalCard fellowshipCharacter, Set shadowCharacters) { _fellowshipCharacter = fellowshipCharacter; @@ -30,10 +30,10 @@ public class Skirmish { } public void addRemovedFromSkirmish(PhysicalCard loser) { - _removedFromSkirmish.add(loser); + _removedFromSkirmish.add(loser.getCardId()); } - public Set getRemovedFromSkirmish() { + public Set getRemovedFromSkirmish() { return _removedFromSkirmish; } 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 50f32e4cc..fb6eed983 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 @@ -1,8 +1,12 @@ package com.gempukku.lotro.logic.effects; +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.game.state.Skirmish; +import com.gempukku.lotro.logic.modifiers.ModifiersQuerying; import com.gempukku.lotro.logic.timing.AbstractEffect; import com.gempukku.lotro.logic.timing.RuleUtils; import com.gempukku.lotro.logic.timing.results.CharacterLostSkirmishResult; @@ -64,49 +68,58 @@ public class ResolveSkirmishEffect extends AbstractEffect { if (result == Result.FELLOWSHIP_LOSES) { game.getGameState().sendMessage("Skirmish finishes with a normal win"); - game.getActionsEnvironment().emitEffectResult(new NormalSkirmishResult(skirmish.getShadowCharacters(), fpList(skirmish.getFellowshipCharacter()), skirmish.getRemovedFromSkirmish())); + game.getActionsEnvironment().emitEffectResult(new NormalSkirmishResult(skirmish.getShadowCharacters(), fpList(skirmish.getFellowshipCharacter()))); 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()) + for (PhysicalCard removedMinion : Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), in(skirmish.getRemovedFromSkirmish()))) game.getActionsEnvironment().emitEffectResult(new CharacterLostSkirmishResult(CharacterLostSkirmishResult.SkirmishType.NORMAL, removedMinion, skirmish.getFellowshipCharacter())); } else if (result == Result.SHADOW_LOSES) { game.getGameState().sendMessage("Skirmish finishes with a normal win"); - game.getActionsEnvironment().emitEffectResult(new NormalSkirmishResult(fpList(skirmish.getFellowshipCharacter()), skirmish.getShadowCharacters(), skirmish.getRemovedFromSkirmish())); + game.getActionsEnvironment().emitEffectResult(new NormalSkirmishResult(fpList(skirmish.getFellowshipCharacter()), skirmish.getShadowCharacters())); 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()) + for (PhysicalCard removedMinion : Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), in(skirmish.getRemovedFromSkirmish()))) game.getActionsEnvironment().emitEffectResult(new CharacterLostSkirmishResult(CharacterLostSkirmishResult.SkirmishType.NORMAL, removedMinion, skirmish.getFellowshipCharacter())); } else if (result == Result.FELLOWSHIP_OVERWHELMED) { game.getGameState().sendMessage("Skirmish finishes with an overwhelm"); - game.getActionsEnvironment().emitEffectResult(new OverwhelmSkirmishResult(skirmish.getShadowCharacters(), fpList(skirmish.getFellowshipCharacter()), skirmish.getRemovedFromSkirmish())); + game.getActionsEnvironment().emitEffectResult(new OverwhelmSkirmishResult(skirmish.getShadowCharacters(), fpList(skirmish.getFellowshipCharacter()))); 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()) + for (PhysicalCard removedMinion : Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), in(skirmish.getRemovedFromSkirmish()))) game.getActionsEnvironment().emitEffectResult(new CharacterLostSkirmishResult(CharacterLostSkirmishResult.SkirmishType.OVERWHELM, removedMinion, skirmish.getFellowshipCharacter())); } else { game.getGameState().sendMessage("Skirmish finishes with an overwhelm"); - game.getActionsEnvironment().emitEffectResult(new OverwhelmSkirmishResult(fpList(skirmish.getFellowshipCharacter()), skirmish.getShadowCharacters(), skirmish.getRemovedFromSkirmish())); + game.getActionsEnvironment().emitEffectResult(new OverwhelmSkirmishResult(fpList(skirmish.getFellowshipCharacter()), skirmish.getShadowCharacters())); 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()) + for (PhysicalCard removedMinion : Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), in(skirmish.getRemovedFromSkirmish()))) game.getActionsEnvironment().emitEffectResult(new CharacterLostSkirmishResult(CharacterLostSkirmishResult.SkirmishType.OVERWHELM, removedMinion, skirmish.getFellowshipCharacter())); } return new FullEffectResult(true, true); } + private Filter in(final Set cardIds) { + return new Filter() { + @Override + public boolean accepts(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard physicalCard) { + return cardIds.contains(physicalCard.getCardId()); + } + }; + } + private Set fpList(PhysicalCard card) { if (card != null) return Collections.singleton(card); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/NormalSkirmishResult.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/NormalSkirmishResult.java index cd6a7eaa4..ee31fa1a8 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/NormalSkirmishResult.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/NormalSkirmishResult.java @@ -6,7 +6,7 @@ import com.gempukku.lotro.logic.timing.EffectResult; import java.util.Set; public class NormalSkirmishResult extends SkirmishResult { - public NormalSkirmishResult(Set winners, Set losers, Set removedFromSkirmish) { - super(EffectResult.Type.SKIRMISH_FINISHED_NORMALLY, winners, losers, removedFromSkirmish); + public NormalSkirmishResult(Set winners, Set losers) { + super(EffectResult.Type.SKIRMISH_FINISHED_NORMALLY, winners, losers); } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/OverwhelmSkirmishResult.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/OverwhelmSkirmishResult.java index 3ce51377d..839dd0377 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/OverwhelmSkirmishResult.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/OverwhelmSkirmishResult.java @@ -6,7 +6,7 @@ import com.gempukku.lotro.logic.timing.EffectResult; import java.util.Set; public class OverwhelmSkirmishResult extends SkirmishResult { - public OverwhelmSkirmishResult(Set winners, Set losers, Set removedFromSkirmish) { - super(EffectResult.Type.SKIRMISH_FINISHED_WITH_OVERWHELM, winners, losers, removedFromSkirmish); + public OverwhelmSkirmishResult(Set winners, Set losers) { + super(EffectResult.Type.SKIRMISH_FINISHED_WITH_OVERWHELM, winners, losers); } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/SkirmishResult.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/SkirmishResult.java index 01786efcb..03355fc9e 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/SkirmishResult.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/results/SkirmishResult.java @@ -3,20 +3,16 @@ package com.gempukku.lotro.logic.timing.results; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.logic.timing.EffectResult; -import java.util.HashSet; import java.util.Set; public abstract class SkirmishResult extends EffectResult { private Set _winners; private Set _inSkirmishlosers; - private Set _losers; - public SkirmishResult(EffectResult.Type type, Set winners, Set losers, Set removedFromSkirmish) { + public SkirmishResult(EffectResult.Type type, Set winners, Set losers) { super(type); _winners = winners; _inSkirmishlosers = losers; - _losers = new HashSet(losers); - _losers.addAll(removedFromSkirmish); } public Set getWinners() { @@ -26,8 +22,4 @@ public abstract class SkirmishResult extends EffectResult { public Set getInSkirmishLosers() { return _inSkirmishlosers; } - - public Set getLosers() { - return _losers; - } } diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html b/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html index f048e8629..a2fb60efd 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html @@ -2,6 +2,8 @@ 24 Jan. 2012 - "Horse of Rohan" now requires to spot ROHAN Man. - Ring-bearer can't be discarded or returned to hand. +- If a character is removed from skirmish and no longer in play, "character loses skirmish" is not triggered for that +character. 23 Jan. 2012 - You can't create a League table, if you played maximum number of games in league serie. You can't join a league table