diff --git a/Mage/src/mage/abilities/AbilityImpl.java b/Mage/src/mage/abilities/AbilityImpl.java index d9c649101c2..1b0aab70994 100644 --- a/Mage/src/mage/abilities/AbilityImpl.java +++ b/Mage/src/mage/abilities/AbilityImpl.java @@ -196,6 +196,7 @@ public abstract class AbilityImpl> implements Ability { // 20121001 - 601.2b // If the spell has a variable cost that will be paid as it's being cast (such as an {X} in // its mana cost; see rule 107.3), the player announces the value of that variable. + // TODO: Handle announcing other variable costs here like: RemoveVariableCountersSourceCost if (game.getPlayer(this.controllerId).isHuman()) { // AI can't handle this yet. Uses old way of playXMana VariableManaCost manaX = null; @@ -276,7 +277,11 @@ public abstract class AbilityImpl> implements Ability { } //20100716 - 601.2g - if (!costs.pay(this, game, sourceId, controllerId, noMana)) { + UUID activatorId = controllerId; + if (this instanceof ActivatedAbilityImpl) { + activatorId = ((ActivatedAbilityImpl)this).getActivatorId(); + } + if (!costs.pay(this, game, sourceId, activatorId, noMana)) { logger.debug("activate failed - non mana costs"); return false; } diff --git a/Mage/src/mage/abilities/ActivatedAbilityImpl.java b/Mage/src/mage/abilities/ActivatedAbilityImpl.java index 018da30aa41..40eda30fb00 100644 --- a/Mage/src/mage/abilities/ActivatedAbilityImpl.java +++ b/Mage/src/mage/abilities/ActivatedAbilityImpl.java @@ -54,6 +54,8 @@ import mage.target.Target; public abstract class ActivatedAbilityImpl> extends AbilityImpl implements ActivatedAbility { protected TimingRule timing = TimingRule.INSTANT; + protected boolean onlyOpponentCanActivate = false; + protected UUID activatorId; protected ActivatedAbilityImpl(AbilityType abilityType, Zone zone) { super(abilityType, zone); @@ -62,6 +64,8 @@ public abstract class ActivatedAbilityImpl> ex public ActivatedAbilityImpl(ActivatedAbilityImpl ability) { super(ability); timing = ability.timing; + onlyOpponentCanActivate = ability.onlyOpponentCanActivate; + activatorId = ability.activatorId; } public ActivatedAbilityImpl(Zone zone) { @@ -152,12 +156,14 @@ public abstract class ActivatedAbilityImpl> ex @Override public boolean canActivate(UUID playerId, Game game) { //20091005 - 602.2 - if (!controlsAbility(playerId, game)) { + if ((!onlyOpponentCanActivate && !controlsAbility(playerId, game)) || + (onlyOpponentCanActivate && !game.getOpponents(controllerId).contains(playerId))) { return false; } //20091005 - 602.5d/602.5e if (timing == TimingRule.INSTANT || game.canPlaySorcery(playerId)) { if (costs.canPay(sourceId, controllerId, game) && canChooseTarget(game)) { + this.activatorId = playerId; return true; } } @@ -230,4 +236,12 @@ public abstract class ActivatedAbilityImpl> ex } return sb.toString(); } + + public void setOnlyOpponentCanActivate(boolean onlyOpponentCanActivate) { + this.onlyOpponentCanActivate = onlyOpponentCanActivate; + } + + public UUID getActivatorId() { + return this.activatorId; + } } diff --git a/Mage/src/mage/abilities/costs/common/RemoveCounterCost.java b/Mage/src/mage/abilities/costs/common/RemoveCounterCost.java index 420054d2474..4ec5de3f3df 100644 --- a/Mage/src/mage/abilities/costs/common/RemoveCounterCost.java +++ b/Mage/src/mage/abilities/costs/common/RemoveCounterCost.java @@ -51,7 +51,6 @@ import mage.target.TargetPermanent; public class RemoveCounterCost extends CostImpl { private TargetPermanent target; - private int amount; private String name; private CounterType counterTypeToRemove; @@ -68,7 +67,6 @@ public class RemoveCounterCost extends CostImpl { public RemoveCounterCost(final RemoveCounterCost cost) { super(cost); this.target = cost.target.copy(); - this.amount = cost.amount; this.name = cost.name; } diff --git a/Mage/src/mage/abilities/effects/common/continious/ControlEnchantedEffect.java b/Mage/src/mage/abilities/effects/common/continious/ControlEnchantedEffect.java index 24e045e4b04..0a039f5c1b9 100644 --- a/Mage/src/mage/abilities/effects/common/continious/ControlEnchantedEffect.java +++ b/Mage/src/mage/abilities/effects/common/continious/ControlEnchantedEffect.java @@ -12,7 +12,7 @@ import mage.game.permanent.Permanent; public class ControlEnchantedEffect extends ContinuousEffectImpl { public ControlEnchantedEffect() { - super(Constants.Duration.WhileOnBattlefield, Constants.Outcome.Detriment); + super(Constants.Duration.WhileOnBattlefield, Constants.Outcome.GainControl); staticText = "You control enchanted creature"; }