From af4ec9b3e780a33ca9bc83d58d890cc4e480f027 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov <jaydi85@gmail.com> Date: Thu, 20 Jun 2019 23:16:17 +0400 Subject: [PATCH] * Do unless any player pays - fixed that it asks to pay remaining players even after payed; --- .../src/mage/cards/r/RhysticScrying.java | 10 ++++---- .../src/mage/cards/s/ScarwoodBandits.java | 17 +++++++------- .../common/DoUnlessAnyPlayerPaysEffect.java | 23 +++++++++++-------- .../mana/DoUnlessAnyPlayerPaysManaEffect.java | 13 +++++++---- 4 files changed, 36 insertions(+), 27 deletions(-) diff --git a/Mage.Sets/src/mage/cards/r/RhysticScrying.java b/Mage.Sets/src/mage/cards/r/RhysticScrying.java index 85c867e666..469efd5a36 100644 --- a/Mage.Sets/src/mage/cards/r/RhysticScrying.java +++ b/Mage.Sets/src/mage/cards/r/RhysticScrying.java @@ -1,7 +1,5 @@ - package mage.cards.r; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.costs.Cost; @@ -15,8 +13,9 @@ import mage.constants.Outcome; import mage.game.Game; import mage.players.Player; +import java.util.UUID; + /** - * * @author L_J */ public final class RhysticScrying extends CardImpl { @@ -61,13 +60,16 @@ class RhysticScryingEffect extends OneShotEffect { // check if any player is willing to pay for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { Player player = game.getPlayer(playerId); - if (player != null && cost.canPay(source, source.getSourceId(), player.getId(), game) && player.chooseUse(Outcome.Detriment, "Pay " + cost.getText() + " for " + sourceObject.getLogName() + "?", source, game)) { + if (player != null && player.canRespond() + && cost.canPay(source, source.getSourceId(), player.getId(), game) + && player.chooseUse(Outcome.Benefit, "Pay " + cost.getText() + " for " + sourceObject.getLogName() + "?", source, game)) { cost.clearPaid(); if (cost.pay(source, game, source.getSourceId(), player.getId(), false, null)) { if (!game.isSimulation()) { game.informPlayers(player.getLogName() + " pays the cost for " + sourceObject.getLogName()); } doEffect = true; + break; } } } diff --git a/Mage.Sets/src/mage/cards/s/ScarwoodBandits.java b/Mage.Sets/src/mage/cards/s/ScarwoodBandits.java index dc70ee0c32..fa59c4dcc5 100644 --- a/Mage.Sets/src/mage/cards/s/ScarwoodBandits.java +++ b/Mage.Sets/src/mage/cards/s/ScarwoodBandits.java @@ -1,7 +1,5 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.MageObject; import mage.abilities.Ability; @@ -21,18 +19,15 @@ import mage.abilities.effects.common.continuous.GainControlTargetEffect; import mage.abilities.keyword.ForestwalkAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.SubType; -import mage.constants.Zone; +import mage.constants.*; import mage.game.Game; import mage.players.Player; import mage.target.common.TargetArtifactPermanent; import mage.util.CardUtil; +import java.util.UUID; + /** - * * @author L_J */ public final class ScarwoodBandits extends CardImpl { @@ -117,13 +112,17 @@ class DoUnlessAnyOpponentPaysEffect extends OneShotEffect { // check if any opponent is willing to pay for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { Player player = game.getPlayer(playerId); - if (player != null && !player.equals(controller) && cost.canPay(source, source.getSourceId(), player.getId(), game) && player.chooseUse(Outcome.Detriment, message, source, game)) { + if (player != null && player.canRespond() + && !player.equals(controller) + && cost.canPay(source, source.getSourceId(), player.getId(), game) + && player.chooseUse(Outcome.Benefit, message, source, game)) { cost.clearPaid(); if (cost.pay(source, game, source.getSourceId(), player.getId(), false, null)) { if (!game.isSimulation()) { game.informPlayers(player.getLogName() + " pays the cost to prevent the effect"); } doEffect = false; + break; } } } diff --git a/Mage/src/main/java/mage/abilities/effects/common/DoUnlessAnyPlayerPaysEffect.java b/Mage/src/main/java/mage/abilities/effects/common/DoUnlessAnyPlayerPaysEffect.java index 8368248a15..28d2dda59d 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/DoUnlessAnyPlayerPaysEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/DoUnlessAnyPlayerPaysEffect.java @@ -1,11 +1,9 @@ package mage.abilities.effects.common; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.costs.Cost; -import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.Effect; @@ -15,9 +13,11 @@ import mage.constants.Outcome; import mage.game.Game; import mage.players.Player; import mage.util.CardUtil; +import mage.util.ManaUtil; + +import java.util.UUID; /** - * * @author LevelX2 */ public class DoUnlessAnyPlayerPaysEffect extends OneShotEffect { @@ -65,34 +65,39 @@ public class DoUnlessAnyPlayerPaysEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); MageObject sourceObject = game.getObject(source.getSourceId()); Cost costToPay; - if (controller != null - && sourceObject != null) { + String costValueMessage; + if (controller != null && sourceObject != null) { if (cost != null) { costToPay = cost.copy(); + costValueMessage = costToPay.getText(); } else { - costToPay = new GenericManaCost(genericMana.calculate(game, source, this)); + costToPay = ManaUtil.createManaCost(genericMana, game, source, this); + costValueMessage = "{" + genericMana.calculate(game, source, this) + "}"; } String message; if (chooseUseText == null) { String effectText = executingEffects.getText(source.getModes().getMode()); - message = "Pay " + costToPay.getText() + " to prevent (" + effectText.substring(0, effectText.length() - 1) + ")?"; + message = "Pay " + costValueMessage + " to prevent (" + effectText.substring(0, effectText.length() - 1) + ")?"; } else { message = chooseUseText; } message = CardUtil.replaceSourceName(message, sourceObject.getName()); + boolean result = true; boolean doEffect = true; // check if any player is willing to pay for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { Player player = game.getPlayer(playerId); - if (player != null - && costToPay.canPay(source, source.getSourceId(), player.getId(), game) && player.chooseUse(Outcome.Detriment, message, source, game)) { + if (player != null && player.canRespond() + && costToPay.canPay(source, source.getSourceId(), player.getId(), game) + && player.chooseUse(Outcome.Detriment, message, source, game)) { costToPay.clearPaid(); if (costToPay.pay(source, game, source.getSourceId(), player.getId(), false, null)) { if (!game.isSimulation()) { game.informPlayers(player.getLogName() + " pays the cost to prevent the effect"); } doEffect = false; + break; } } } diff --git a/Mage/src/main/java/mage/abilities/effects/mana/DoUnlessAnyPlayerPaysManaEffect.java b/Mage/src/main/java/mage/abilities/effects/mana/DoUnlessAnyPlayerPaysManaEffect.java index 73a3eba235..82605c39ec 100644 --- a/Mage/src/main/java/mage/abilities/effects/mana/DoUnlessAnyPlayerPaysManaEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/mana/DoUnlessAnyPlayerPaysManaEffect.java @@ -5,9 +5,6 @@ */ package mage.abilities.effects.mana; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; import mage.MageObject; import mage.Mana; import mage.abilities.Ability; @@ -19,8 +16,11 @@ import mage.game.Game; import mage.players.Player; import mage.util.CardUtil; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** - * * @author LevelX2 */ public class DoUnlessAnyPlayerPaysManaEffect extends ManaEffect { @@ -53,13 +53,16 @@ public class DoUnlessAnyPlayerPaysManaEffect extends ManaEffect { // check if any player is willing to pay for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { Player player = game.getPlayer(playerId); - if (player != null && cost.canPay(source, source.getSourceId(), player.getId(), game) && player.chooseUse(Outcome.Detriment, message, source, game)) { + if (player != null && player.canRespond() + && cost.canPay(source, source.getSourceId(), player.getId(), game) + && player.chooseUse(Outcome.Detriment, message, source, game)) { cost.clearPaid(); if (cost.pay(source, game, source.getSourceId(), player.getId(), false, null)) { if (!game.isSimulation()) { game.informPlayers(player.getLogName() + " pays the cost to prevent the effect"); } doEffect = false; + break; } } }