From 8698f7e4ab3fa2f41e9d70df5b7ff82bcb7bfac6 Mon Sep 17 00:00:00 2001 From: Agetian Date: Sat, 26 Aug 2017 06:17:56 +0000 Subject: [PATCH] - Bomat Courier AI improvement: teach the AI to sac Courier when threatened in case sacrificing it would provide hand card advantage --- .../java/forge/ai/ability/ChangeZoneAllAi.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAllAi.java b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAllAi.java index 4bd4d46b13b..63c8fa1b464 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAllAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAllAi.java @@ -6,12 +6,7 @@ import java.util.Random; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; -import forge.ai.AiPlayerPredicates; -import forge.ai.ComputerUtilAbility; -import forge.ai.ComputerUtilCard; -import forge.ai.ComputerUtilCost; -import forge.ai.SpecialCardAi; -import forge.ai.SpellAbilityAi; +import forge.ai.*; import forge.game.Game; import forge.game.ability.AbilityUtils; import forge.game.card.Card; @@ -191,6 +186,14 @@ public class ChangeZoneAllAi extends SpellAbilityAi { // minimum card advantage unless the hand will be fully reloaded int minAdv = logic.contains(".minAdv") ? Integer.parseInt(logic.substring(logic.indexOf(".minAdv") + 7)) : 0; + if (numExiledWithSrc > curHandSize) { + if (ComputerUtil.predictThreatenedObjects(ai, sa, true).contains(source)) { + // Ping-activate to try to gain some card advantage + // TODO: ideally, should evaluate the hand value and not discard good hands to it + return true; + } + } + return (curHandSize + minAdv - 1 < numExiledWithSrc) || (numExiledWithSrc >= ai.getMaxHandSize()); } } else if (origin.equals(ZoneType.Stack)) {