From cda5a06a6c4c40bea329c205cf3083344b3db549 Mon Sep 17 00:00:00 2001 From: Neil Gentleman Date: Wed, 11 Nov 2015 12:29:28 -0800 Subject: [PATCH] fix sorcery-speed LimitedTimesPerTurnActivatedAbility calling super.canActivate() from inside activate() will always fail, because the stack is no longer empty --- .../src/mage/game/MomirDuel.java | 2 +- .../common/LimitedTimesPerTurnActivatedAbility.java | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Mage.Server.Plugins/Mage.Game.MomirDuel/src/mage/game/MomirDuel.java b/Mage.Server.Plugins/Mage.Game.MomirDuel/src/mage/game/MomirDuel.java index c13230e0fc4..65290a0b725 100644 --- a/Mage.Server.Plugins/Mage.Game.MomirDuel/src/mage/game/MomirDuel.java +++ b/Mage.Server.Plugins/Mage.Game.MomirDuel/src/mage/game/MomirDuel.java @@ -132,7 +132,7 @@ class MomirEmblem extends Emblem { // {X}, Discard a card: Put a token into play as a copy of a random creature card with converted mana cost X. Play this ability only any time you could play a sorcery and only once each turn. LimitedTimesPerTurnActivatedAbility ability = new LimitedTimesPerTurnActivatedAbility(Zone.COMMAND, new MomirEffect(available), new VariableManaCost()); ability.addCost(new DiscardCardCost()); -// ability.setTiming(TimingRule.SORCERY); + ability.setTiming(TimingRule.SORCERY); this.getAbilities().add(ability); } diff --git a/Mage/src/mage/abilities/common/LimitedTimesPerTurnActivatedAbility.java b/Mage/src/mage/abilities/common/LimitedTimesPerTurnActivatedAbility.java index 53d40539031..a415bb19a18 100644 --- a/Mage/src/mage/abilities/common/LimitedTimesPerTurnActivatedAbility.java +++ b/Mage/src/mage/abilities/common/LimitedTimesPerTurnActivatedAbility.java @@ -71,16 +71,17 @@ public class LimitedTimesPerTurnActivatedAbility extends ActivatedAbilityImpl { @Override public boolean canActivate(UUID playerId, Game game) { - if (super.canActivate(playerId, game)) { - ActivationInfo activationInfo = getActivationInfo(game); - return activationInfo == null || activationInfo.turnNum != game.getTurnNum() || activationInfo.activationCounter < maxActivationsPerTurn; - } - return false; + return super.canActivate(playerId, game) && hasMoreActivationsThisTurn(game); + } + + private boolean hasMoreActivationsThisTurn(Game game) { + ActivationInfo activationInfo = getActivationInfo(game); + return activationInfo == null || activationInfo.turnNum != game.getTurnNum() || activationInfo.activationCounter < maxActivationsPerTurn; } @Override public boolean activate(Game game, boolean noMana) { - if (canActivate(this.controllerId, game)) { + if (hasMoreActivationsThisTurn(game)) { if (super.activate(game, noMana)) { ActivationInfo activationInfo = getActivationInfo(game); if (activationInfo == null) {