From 829b9069e2bcabddf3f7a1c3a814b51a1c04bf70 Mon Sep 17 00:00:00 2001 From: Michael Kamensky Date: Tue, 2 Nov 2021 22:12:17 +0300 Subject: [PATCH] - AiController: support AICheckSVar/AISVarCompare for ordinary SAs (abilities). --- .../src/main/java/forge/ai/AiController.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java index 1d98254322f..7a59be18717 100644 --- a/forge-ai/src/main/java/forge/ai/AiController.java +++ b/forge-ai/src/main/java/forge/ai/AiController.java @@ -712,6 +712,40 @@ public class AiController { return AiPlayDecision.CantPlaySa; } + // Check a predefined condition (maybe refactor it later to avoid code duplication with similar replacement effect code?) + if (sa.hasParam("AICheckSVar")) { + final Card host = sa.getHostCard(); + final String svarToCheck = sa.getParam("AICheckSVar"); + String comparator = "GE"; + int compareTo = 1; + + if (sa.hasParam("AISVarCompare")) { + final String fullCmp = sa.getParam("AISVarCompare"); + comparator = fullCmp.substring(0, 2); + final String strCmpTo = fullCmp.substring(2); + try { + compareTo = Integer.parseInt(strCmpTo); + } catch (final Exception ignored) { + if (sa == null) { + compareTo = AbilityUtils.calculateAmount(host, host.getSVar(strCmpTo), sa); + } else { + compareTo = AbilityUtils.calculateAmount(host, host.getSVar(strCmpTo), sa); + } + } + } + + int left = 0; + + if (sa == null) { + left = AbilityUtils.calculateAmount(host, svarToCheck, sa); + } else { + left = AbilityUtils.calculateAmount(host, svarToCheck, sa); + } + if (!Expressions.compare(left, comparator, compareTo)) { + return AiPlayDecision.AnotherTime; + } + } + int oldCMC = -1; boolean xCost = sa.getPayCosts().hasXInAnyCostPart() || sa.getHostCard().hasStartOfKeyword("Strive"); if (!xCost) {