mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 03:38:01 +00:00
canPlayAndPayFor: check for RaiseCost
This commit is contained in:
@@ -743,11 +743,15 @@ public class AiController {
|
|||||||
return AiPlayDecision.CantPlaySa;
|
return AiPlayDecision.CantPlaySa;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int oldCMC = 0;
|
||||||
boolean xCost = sa.getPayCosts().hasXInAnyCostPart() || sa.getHostCard().hasStartOfKeyword("Strive");
|
boolean xCost = sa.getPayCosts().hasXInAnyCostPart() || sa.getHostCard().hasStartOfKeyword("Strive");
|
||||||
if (!xCost && !ComputerUtilCost.canPayCost(sa, player)) {
|
if (!xCost) {
|
||||||
// for most costs, it's OK to check if they can be paid early in order to avoid running a heavy API check
|
if (!ComputerUtilCost.canPayCost(sa, player)) {
|
||||||
// when the AI won't even be able to play the spell in the first place (even if it could afford it)
|
// for most costs, it's OK to check if they can be paid early in order to avoid running a heavy API check
|
||||||
return AiPlayDecision.CantAfford;
|
// when the AI won't even be able to play the spell in the first place (even if it could afford it)
|
||||||
|
return AiPlayDecision.CantAfford;
|
||||||
|
}
|
||||||
|
oldCMC = CostAdjustment.adjust(sa.getPayCosts(), sa).getTotalMana().getCMC();
|
||||||
}
|
}
|
||||||
|
|
||||||
// state needs to be switched here so API checks evaluate the right face
|
// state needs to be switched here so API checks evaluate the right face
|
||||||
@@ -763,6 +767,14 @@ public class AiController {
|
|||||||
return canPlay;
|
return canPlay;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check if some target raised cost
|
||||||
|
if (!xCost) {
|
||||||
|
int finalCMC = CostAdjustment.adjust(sa.getPayCosts(), sa).getTotalMana().getCMC();
|
||||||
|
if (finalCMC > oldCMC) {
|
||||||
|
xCost = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (xCost && !ComputerUtilCost.canPayCost(sa, player)) {
|
if (xCost && !ComputerUtilCost.canPayCost(sa, player)) {
|
||||||
// for dependent costs with X, e.g. Repeal, which require a valid target to be specified before a decision can be made
|
// for dependent costs with X, e.g. Repeal, which require a valid target to be specified before a decision can be made
|
||||||
// on whether the cost can be paid, this can only be checked late after canPlaySa has been run (or the AI will misplay)
|
// on whether the cost can be paid, this can only be checked late after canPlaySa has been run (or the AI will misplay)
|
||||||
|
|||||||
Reference in New Issue
Block a user