From d4ee65f9373e84b0fa4016ec6f40e8f8eb6e93e5 Mon Sep 17 00:00:00 2001 From: Agetian Date: Wed, 5 Dec 2018 16:44:20 +0300 Subject: [PATCH] - Fixed the AI trying to gang-block and kill an attacker which can't be killed because combat damage to it would be prevented. - Added a couple AI hints to Ajani's Welcome. --- .../src/main/java/forge/ai/AiBlockController.java | 11 +++++++++++ .../src/main/java/forge/ai/ComputerUtilCombat.java | 2 +- forge-gui/res/cardsfolder/a/ajanis_welcome.txt | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/forge-ai/src/main/java/forge/ai/AiBlockController.java b/forge-ai/src/main/java/forge/ai/AiBlockController.java index d674d866cec..e948d3cebfc 100644 --- a/forge-ai/src/main/java/forge/ai/AiBlockController.java +++ b/forge-ai/src/main/java/forge/ai/AiBlockController.java @@ -22,6 +22,7 @@ import com.google.common.base.Predicates; import forge.card.CardStateName; import forge.game.CardTraitBase; import forge.game.GameEntity; +import forge.game.GlobalRuleChange; import forge.game.card.*; import forge.game.combat.Combat; import forge.game.combat.CombatUtil; @@ -771,6 +772,16 @@ public class AiBlockController { blockers = getPossibleBlockers(combat, attacker, blockersLeft, false); blockers.removeAll(combat.getBlockers(attacker)); + // Don't add any blockers that won't kill the attacker because the damage would be prevented by a static effect + if (!ai.getGame().getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noPrevention)) { + blockers = CardLists.filter(blockers, new Predicate() { + @Override + public boolean apply(Card blocker) { + return !ComputerUtilCombat.isCombatDamagePrevented(blocker, attacker, blocker.getNetCombatDamage()); + } + }); + } + // Try to use safe blockers first if (blockers.size() > 0) { safeBlockers = getSafeBlockers(combat, attacker, blockers); diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index 897be168b58..a6f3475e5f9 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -2560,7 +2560,7 @@ public class ComputerUtilCombat { return original; } - private static boolean isCombatDamagePrevented(final Card attacker, final GameEntity target, final int damage) { + public static boolean isCombatDamagePrevented(final Card attacker, final GameEntity target, final int damage) { final Game game = attacker.getGame(); // first try to replace the damage diff --git a/forge-gui/res/cardsfolder/a/ajanis_welcome.txt b/forge-gui/res/cardsfolder/a/ajanis_welcome.txt index 21dd08c4849..a8527351f95 100644 --- a/forge-gui/res/cardsfolder/a/ajanis_welcome.txt +++ b/forge-gui/res/cardsfolder/a/ajanis_welcome.txt @@ -3,4 +3,6 @@ ManaCost:W Types:Enchantment T:Mode$ ChangesZone | TriggerZones$ Battlefield | ValidCard$ Creature.YouCtrl | Origin$ Any | Destination$ Battlefield | Execute$ TrigGainLife | TriggerDescription$ Whenever a creature enters the battlefield under your control, you gain 1 life. SVar:TrigGainLife:DB$ GainLife | Defined$ You | LifeAmount$ 1 +SVar:PlayMain1:TRUE +SVar:AIPriorityModifier:9 Oracle:Whenever a creature enters the battlefield under your control, you gain 1 life. \ No newline at end of file