From 29b1d1ee1b4c9daa6a0560093b7676aff4071b4f Mon Sep 17 00:00:00 2001 From: Agetian Date: Sun, 15 Oct 2023 08:57:57 +0300 Subject: [PATCH] Improve AI logic for City of Brass. (#3902) * - Improve AI logic for City of Brass. * - Better implementation that avoids a specialized hint and checks the trigger. --- .../main/java/forge/ai/ComputerUtilMana.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java b/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java index 0db0dd975d1..99747810235 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java @@ -1462,6 +1462,26 @@ public class ComputerUtilMana { } } } + // exclude cards that will deal lethal damage when tapped + if (ai.canLoseLife() && !ai.cantLoseForZeroOrLessLife()) { + boolean dealsLethalOnTap = false; + for (Trigger t : card.getTriggers()) { + if (t.getMode() == TriggerType.Taps || t.getMode() == TriggerType.TapsForMana) { + SpellAbility trigSa = t.getOverridingAbility(); + if (trigSa.getApi() == ApiType.DealDamage && trigSa.getParamOrDefault("Defined", "").equals("You")) { + int numDamage = AbilityUtils.calculateAmount(card, trigSa.getParam("NumDmg"), null); + numDamage = ai.staticReplaceDamage(numDamage, card, false); + if (ai.getLife() <= numDamage) { + dealsLethalOnTap = true; + break; + } + } + } + } + if (dealsLethalOnTap) { + continue; + } + } if (card.isCreature() || card.isEnchanted()) { otherManaSources.add(card);