From 7effc3820fd7c0b63a1eefa16aeb6d35c7d79a90 Mon Sep 17 00:00:00 2001 From: jendave Date: Sun, 7 Aug 2011 02:00:27 +0000 Subject: [PATCH] - Fix the unless cost for abilities. --- .../card/abilityFactory/AbilityFactory.java | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/src/forge/card/abilityFactory/AbilityFactory.java b/src/forge/card/abilityFactory/AbilityFactory.java index cd66676399c..87f84029e92 100644 --- a/src/forge/card/abilityFactory/AbilityFactory.java +++ b/src/forge/card/abilityFactory/AbilityFactory.java @@ -1393,25 +1393,40 @@ public class AbilityFactory { } }; + final Command paidCommand = new Command() { + private static final long serialVersionUID = 8094833091127334678L; + + public void execute() { + Ability_Sub abSub = sa.getSubAbility(); + resolve(abSub); + } + }; + final Command unpaidCommand = new Command() { private static final long serialVersionUID = 8094833091127334678L; public void execute() { sa.resolve(); if(params.containsKey("PowerSink")) GameActionUtil.doPowerSink(AllZone.HumanPlayer); + Ability_Sub abSub = sa.getSubAbility(); + resolve(abSub); } }; if(payer.isHuman()) { GameActionUtil.payManaDuringAbilityResolve(source + "\r\n", ability.getManaCost(), - Command.Blank, unpaidCommand); + paidCommand, unpaidCommand); } else { if(ComputerUtil.canPayCost(ability)) { ComputerUtil.playNoStack(ability); //Unless cost was payed - no resolve + Ability_Sub abSub = sa.getSubAbility(); + resolve(abSub); } else { - if(params.containsKey("PowerSink")) GameActionUtil.doPowerSink(AllZone.ComputerPlayer); sa.resolve(); + if(params.containsKey("PowerSink")) GameActionUtil.doPowerSink(AllZone.ComputerPlayer); + Ability_Sub abSub = sa.getSubAbility(); + resolve(abSub); } } } @@ -1423,14 +1438,15 @@ public class AbilityFactory { //check conditions if (AbilityFactory.checkConditional(params, sa)) { - if (params.get("UnlessCost") == null) + if (params.get("UnlessCost") == null) { sa.resolve(); + + //try to resolve subabilities (see null check above) + Ability_Sub abSub = sa.getSubAbility(); + resolve(abSub); + } else passUnlessCost(sa); } - - //try to resolve subabilities (see null check above) - Ability_Sub abSub = sa.getSubAbility(); - resolve(abSub); } }//end class AbilityFactory \ No newline at end of file