From 1dabfbb07ba144a017093f276b418d2c22c4c2ee Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Wed, 2 Oct 2013 08:08:09 +0200 Subject: [PATCH] Fixed cards with endless loops if a player left game while he has to make a choice. --- .../src/mage/sets/alarareborn/TraceOfAbundance.java | 2 +- .../src/mage/sets/avacynrestored/CavernOfSouls.java | 2 +- .../src/mage/sets/avacynrestored/RidersOfGavony.java | 10 ++++++---- Mage.Sets/src/mage/sets/dragonsmaze/PlasmCapture.java | 4 ++-- Mage.Sets/src/mage/sets/gatecrash/VerdantHaven.java | 2 +- Mage.Sets/src/mage/sets/magic2011/ConundrumSphinx.java | 2 +- .../src/mage/sets/magic2012/AdaptiveAutomaton.java | 2 +- Mage.Sets/src/mage/sets/magic2014/DoorOfDestinies.java | 2 +- Mage.Sets/src/mage/sets/newphyrexia/Xenograft.java | 2 +- Mage.Sets/src/mage/sets/onslaught/WordsOfWind.java | 2 +- .../src/mage/sets/returntoravnica/AxebaneGuardian.java | 2 +- .../mage/sets/returntoravnica/TabletOfTheGuilds.java | 4 ++-- Mage.Sets/src/mage/sets/theros/XenagosTheReveler.java | 2 +- .../src/mage/sets/urzaslegacy/EngineeredPlague.java | 2 +- 14 files changed, 21 insertions(+), 19 deletions(-) diff --git a/Mage.Sets/src/mage/sets/alarareborn/TraceOfAbundance.java b/Mage.Sets/src/mage/sets/alarareborn/TraceOfAbundance.java index e70f567e570..f5c99f91cf9 100644 --- a/Mage.Sets/src/mage/sets/alarareborn/TraceOfAbundance.java +++ b/Mage.Sets/src/mage/sets/alarareborn/TraceOfAbundance.java @@ -145,7 +145,7 @@ class TraceOfAbundanceEffect extends ManaEffect { Player player = game.getPlayer(land.getControllerId()); if (player != null) { ChoiceColor choice = new ChoiceColor(); - while (!player.choose(outcome, choice, game)) { + while (!player.choose(outcome, choice, game) && player.isInGame()) { game.debugMessage("player canceled choosing color. retrying."); } int amount = 1; diff --git a/Mage.Sets/src/mage/sets/avacynrestored/CavernOfSouls.java b/Mage.Sets/src/mage/sets/avacynrestored/CavernOfSouls.java index d44c8640ce2..7bb67456b4a 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/CavernOfSouls.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/CavernOfSouls.java @@ -108,7 +108,7 @@ class CavernOfSoulsEffect extends OneShotEffect { Choice typeChoice = new ChoiceImpl(true); typeChoice.setMessage("Choose creature type"); typeChoice.setChoices(CardRepository.instance.getCreatureTypes()); - while (!player.choose(Outcome.Benefit, typeChoice, game)) { + while (!player.choose(Outcome.Benefit, typeChoice, game) && player.isInGame()) { game.debugMessage("player canceled choosing type. retrying."); } game.informPlayers(permanent.getName() + ": " + player.getName() + " has chosen " + typeChoice.getChoice()); diff --git a/Mage.Sets/src/mage/sets/avacynrestored/RidersOfGavony.java b/Mage.Sets/src/mage/sets/avacynrestored/RidersOfGavony.java index 3020bfa3038..94564cfb167 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/RidersOfGavony.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/RidersOfGavony.java @@ -102,12 +102,14 @@ class RidersOfGavonyEffect extends OneShotEffect { Choice typeChoice = new ChoiceImpl(true); typeChoice.setMessage("Choose creature type"); typeChoice.setChoices(CardRepository.instance.getCreatureTypes()); - while (!player.choose(Outcome.BoostCreature, typeChoice, game)) { + while (!player.choose(Outcome.BoostCreature, typeChoice, game) && player.isInGame()) { game.debugMessage("player canceled choosing type. retrying."); } - game.informPlayers(permanent.getName() + ": " + player.getName() + " has chosen " + typeChoice.getChoice()); - game.getState().setValue(permanent.getId() + "_type", typeChoice.getChoice()); - permanent.addInfo("chosen type", "Chosen type: " + typeChoice.getChoice().toString() + ""); + if (typeChoice.getChoice() != null) { + game.informPlayers(permanent.getName() + ": " + player.getName() + " has chosen " + typeChoice.getChoice()); + game.getState().setValue(permanent.getId() + "_type", typeChoice.getChoice()); + permanent.addInfo("chosen type", "Chosen type: " + typeChoice.getChoice().toString() + ""); + } } return false; } diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/PlasmCapture.java b/Mage.Sets/src/mage/sets/dragonsmaze/PlasmCapture.java index e738f41bb0c..cea2529cd2c 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/PlasmCapture.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/PlasmCapture.java @@ -133,8 +133,8 @@ class PlasmCaptureManaEffect extends ManaEffect { Mana mana = new Mana(); for(int i = 0; i < amountOfMana; i++){ ChoiceColor choiceColor = new ChoiceColor(); - while (!player.choose(Outcome.Benefit, choiceColor, game)) { - game.debugMessage("player canceled choosing color. retrying."); + while (!player.choose(Outcome.Benefit, choiceColor, game) && player.isInGame()) { + game.debugMessage("player canceled choosing color. retrying." ); } if (choiceColor.getColor().isBlack()) { diff --git a/Mage.Sets/src/mage/sets/gatecrash/VerdantHaven.java b/Mage.Sets/src/mage/sets/gatecrash/VerdantHaven.java index bc796779a55..ad59ff5834d 100644 --- a/Mage.Sets/src/mage/sets/gatecrash/VerdantHaven.java +++ b/Mage.Sets/src/mage/sets/gatecrash/VerdantHaven.java @@ -140,7 +140,7 @@ class VerdantHavenManaEffect extends ManaEffect { Player player = game.getPlayer(land.getControllerId()); if (player != null) { ChoiceColor choice = new ChoiceColor(); - while (!player.choose(outcome, choice, game)) { + while (!player.choose(outcome, choice, game) && player.isInGame()) { game.debugMessage("player canceled choosing color. retrying."); } int amount = 1; diff --git a/Mage.Sets/src/mage/sets/magic2011/ConundrumSphinx.java b/Mage.Sets/src/mage/sets/magic2011/ConundrumSphinx.java index 619dfb434b8..a5a73708e21 100644 --- a/Mage.Sets/src/mage/sets/magic2011/ConundrumSphinx.java +++ b/Mage.Sets/src/mage/sets/magic2011/ConundrumSphinx.java @@ -95,7 +95,7 @@ class ConundrumSphinxEffect extends OneShotEffect { for (Player player: game.getPlayers().values()) { if(player.getLibrary().size() > 0){ cardChoice.clearChoice(); - while (!player.choose(Outcome.DrawCard, cardChoice, game)) { + while (!player.choose(Outcome.DrawCard, cardChoice, game) && player.isInGame()) { game.debugMessage("player canceled choosing name. retrying."); } String cardName = cardChoice.getChoice(); diff --git a/Mage.Sets/src/mage/sets/magic2012/AdaptiveAutomaton.java b/Mage.Sets/src/mage/sets/magic2012/AdaptiveAutomaton.java index 23df17c7de2..b4919cacbaa 100644 --- a/Mage.Sets/src/mage/sets/magic2012/AdaptiveAutomaton.java +++ b/Mage.Sets/src/mage/sets/magic2012/AdaptiveAutomaton.java @@ -95,7 +95,7 @@ class AdaptiveAutomatonEffect extends OneShotEffect { Choice typeChoice = new ChoiceImpl(true); typeChoice.setMessage("Choose creature type"); typeChoice.setChoices(CardRepository.instance.getCreatureTypes()); - while (!player.choose(Outcome.BoostCreature, typeChoice, game)) { + while (!player.choose(Outcome.BoostCreature, typeChoice, game) && player.isInGame()) { game.debugMessage("player canceled choosing type. retrying."); } game.informPlayers(permanent.getName() + ": " + player.getName() + " has chosen " + typeChoice.getChoice()); diff --git a/Mage.Sets/src/mage/sets/magic2014/DoorOfDestinies.java b/Mage.Sets/src/mage/sets/magic2014/DoorOfDestinies.java index 96c92a2857e..96742f577ca 100644 --- a/Mage.Sets/src/mage/sets/magic2014/DoorOfDestinies.java +++ b/Mage.Sets/src/mage/sets/magic2014/DoorOfDestinies.java @@ -107,7 +107,7 @@ class ChooseCreatureTypeEffect extends OneShotEffect { Choice typeChoice = new ChoiceImpl(true); typeChoice.setMessage("Choose creature type"); typeChoice.setChoices(CardRepository.instance.getCreatureTypes()); - while (!player.choose(Outcome.BoostCreature, typeChoice, game)) { + while (!player.choose(Outcome.BoostCreature, typeChoice, game) && player.isInGame()) { game.debugMessage("player canceled choosing type. retrying."); } game.informPlayers(permanent.getName() + ": " + player.getName() + " has chosen " + typeChoice.getChoice()); diff --git a/Mage.Sets/src/mage/sets/newphyrexia/Xenograft.java b/Mage.Sets/src/mage/sets/newphyrexia/Xenograft.java index 4a70a36c75b..0ec0183bbee 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/Xenograft.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/Xenograft.java @@ -97,7 +97,7 @@ class XenograftEffect extends OneShotEffect { Choice typeChoice = new ChoiceImpl(true); typeChoice.setMessage("Choose creature type"); typeChoice.setChoices(CardRepository.instance.getCreatureTypes()); - while (!player.choose(Outcome.BoostCreature, typeChoice, game)) { + while (!player.choose(Outcome.BoostCreature, typeChoice, game) && player.isInGame()) { game.debugMessage("player canceled choosing type. retrying."); } game.informPlayers(permanent.getName() + ": " + player.getName() + " has chosen " + typeChoice.getChoice()); diff --git a/Mage.Sets/src/mage/sets/onslaught/WordsOfWind.java b/Mage.Sets/src/mage/sets/onslaught/WordsOfWind.java index d1c2da66ea9..5e58ff17f7c 100644 --- a/Mage.Sets/src/mage/sets/onslaught/WordsOfWind.java +++ b/Mage.Sets/src/mage/sets/onslaught/WordsOfWind.java @@ -105,7 +105,7 @@ class WordsOfWindEffect extends ReplacementEffectImpl { TargetControlledPermanent target = new TargetControlledPermanent(); List liste = game.getBattlefield().getActivePermanents(new FilterControlledPermanent(), playerId, game); if(!liste.isEmpty()){ - while (!player.choose(Outcome.ReturnToHand, target, source.getSourceId(), game)){ + while (!player.choose(Outcome.ReturnToHand, target, source.getSourceId(), game) && player.isInGame()){ game.debugMessage("player canceled choosing permanent. retrying."); } Permanent permanent = game.getPermanent(target.getFirstTarget()); diff --git a/Mage.Sets/src/mage/sets/returntoravnica/AxebaneGuardian.java b/Mage.Sets/src/mage/sets/returntoravnica/AxebaneGuardian.java index 21ff2988db4..675d2b568ce 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/AxebaneGuardian.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/AxebaneGuardian.java @@ -111,7 +111,7 @@ class AxebaneGuardianManaEffect extends ManaEffect { Mana mana = new Mana(); for(int i = 0; i < x; i++){ ChoiceColor choiceColor = new ChoiceColor(); - while (!player.choose(Outcome.Benefit, choiceColor, game)) { + while (!player.choose(Outcome.Benefit, choiceColor, game) && player.isInGame()) { game.debugMessage("player canceled choosing color. retrying."); } diff --git a/Mage.Sets/src/mage/sets/returntoravnica/TabletOfTheGuilds.java b/Mage.Sets/src/mage/sets/returntoravnica/TabletOfTheGuilds.java index 5e0c5303fcb..cc31538aa7f 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/TabletOfTheGuilds.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/TabletOfTheGuilds.java @@ -91,7 +91,7 @@ class TabletOfTheGuildsEntersBattlefieldEffect extends OneShotEffect { for(int i = 0; i < x; i++){ Mana mana = new Mana(); - while (!player.choose(Outcome.Benefit, manaChoice, game)) { + while (!player.choose(Outcome.Benefit, manaChoice, game) && player.isInGame()) { game.debugMessage("player canceled choosing color. retrying."); } diff --git a/Mage.Sets/src/mage/sets/urzaslegacy/EngineeredPlague.java b/Mage.Sets/src/mage/sets/urzaslegacy/EngineeredPlague.java index fd7259bb20e..ab9085d6648 100644 --- a/Mage.Sets/src/mage/sets/urzaslegacy/EngineeredPlague.java +++ b/Mage.Sets/src/mage/sets/urzaslegacy/EngineeredPlague.java @@ -90,7 +90,7 @@ public class EngineeredPlague extends CardImpl { Choice typeChoice = new ChoiceImpl(true); typeChoice.setMessage("Choose creature type"); typeChoice.setChoices(CardRepository.instance.getCreatureTypes()); - while (!player.choose(Outcome.Detriment, typeChoice, game)) { + while (!player.choose(Outcome.Detriment, typeChoice, game) && player.isInGame()) { game.debugMessage("player canceled choosing type. retrying."); } game.informPlayers(permanent.getName() + ": " + player.getName() + " has chosen " + typeChoice.getChoice());