From f84177bbcd18a4646d46849aeeb76c7cc52e21b2 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Thu, 9 May 2013 09:06:31 +0200 Subject: [PATCH] Added missing logic to remove continuous effects with duration EndOfCombat. --- .../abilities/DelayedTriggeredAbilities.java | 10 ++++++++++ .../abilities/effects/ContinuousEffects.java | 10 ++++++++++ .../effects/ContinuousEffectsList.java | 17 ++++++++++++----- Mage/src/mage/game/GameState.java | 7 +++++++ Mage/src/mage/game/turn/EndOfCombatStep.java | 1 + 5 files changed, 40 insertions(+), 5 deletions(-) diff --git a/Mage/src/mage/abilities/DelayedTriggeredAbilities.java b/Mage/src/mage/abilities/DelayedTriggeredAbilities.java index 5694ec48b45..db8045a749b 100644 --- a/Mage/src/mage/abilities/DelayedTriggeredAbilities.java +++ b/Mage/src/mage/abilities/DelayedTriggeredAbilities.java @@ -73,5 +73,15 @@ import mage.game.events.GameEvent; } } + public void removeEndOfCombatAbilities() { + for (Iterator it = this.iterator();it.hasNext();) { + DelayedTriggeredAbility ability = it.next(); + if (ability.getDuration() == Duration.EndOfCombat) { + it.remove(); + } + } + } + + } diff --git a/Mage/src/mage/abilities/effects/ContinuousEffects.java b/Mage/src/mage/abilities/effects/ContinuousEffects.java index 870cf75fec4..c303731c9f1 100644 --- a/Mage/src/mage/abilities/effects/ContinuousEffects.java +++ b/Mage/src/mage/abilities/effects/ContinuousEffects.java @@ -117,6 +117,16 @@ public class ContinuousEffects implements Serializable { return restrictionEffects; } + public void removeEndOfCombatEffects() { + layeredEffects.removeEndOfCombatEffects(); + replacementEffects.removeEndOfCombatEffects(); + preventionEffects.removeEndOfCombatEffects(); + requirementEffects.removeEndOfCombatEffects(); + restrictionEffects.removeEndOfCombatEffects(); + asThoughEffects.removeEndOfCombatEffects(); + costModificationEffects.removeEndOfCombatEffects(); + } + public void removeEndOfTurnEffects() { layeredEffects.removeEndOfTurnEffects(); replacementEffects.removeEndOfTurnEffects(); diff --git a/Mage/src/mage/abilities/effects/ContinuousEffectsList.java b/Mage/src/mage/abilities/effects/ContinuousEffectsList.java index 943bdae543d..bf6e015eb4c 100644 --- a/Mage/src/mage/abilities/effects/ContinuousEffectsList.java +++ b/Mage/src/mage/abilities/effects/ContinuousEffectsList.java @@ -27,14 +27,11 @@ */ package mage.abilities.effects; -import mage.Constants; import mage.abilities.Ability; import mage.game.Game; import java.util.*; -import static mage.Constants.Duration.Custom; -import static mage.Constants.Duration.OneUse; -import static mage.Constants.Duration.WhileOnBattlefield; +import mage.Constants.Duration; /** * @@ -68,7 +65,17 @@ public class ContinuousEffectsList extends ArrayList public void removeEndOfTurnEffects() { for (Iterator i = this.iterator(); i.hasNext();) { T entry = i.next(); - if (entry.getDuration() == Constants.Duration.EndOfTurn) { + if (entry.getDuration() == Duration.EndOfTurn) { + i.remove(); + effectAbilityMap.remove(entry.getId()); + } + } + } + + public void removeEndOfCombatEffects() { + for (Iterator i = this.iterator(); i.hasNext();) { + T entry = i.next(); + if (entry.getDuration() == Duration.EndOfCombat) { i.remove(); effectAbilityMap.remove(entry.getId()); } diff --git a/Mage/src/mage/game/GameState.java b/Mage/src/mage/game/GameState.java index fed196e626c..1129ab63f16 100644 --- a/Mage/src/mage/game/GameState.java +++ b/Mage/src/mage/game/GameState.java @@ -366,6 +366,13 @@ public class GameState implements Serializable, Copyable { battlefield.fireControlChangeEvents(game); } + // Remove End of Combat effects + public void removeEocEffects(Game game) { + effects.removeEndOfCombatEffects(); + delayed.removeEndOfCombatAbilities(); + applyEffects(game); + } + public void removeEotEffects(Game game) { effects.removeEndOfTurnEffects(); delayed.removeEndOfTurnAbilities(); diff --git a/Mage/src/mage/game/turn/EndOfCombatStep.java b/Mage/src/mage/game/turn/EndOfCombatStep.java index 70d6d3ee0d8..68a34ca155b 100644 --- a/Mage/src/mage/game/turn/EndOfCombatStep.java +++ b/Mage/src/mage/game/turn/EndOfCombatStep.java @@ -55,6 +55,7 @@ public class EndOfCombatStep extends Step { super.endStep(game, activePlayerId); //20091005 - 511.3 game.getCombat().endCombat(game); + game.getState().removeEocEffects(game); // game.saveState(); }