From 9d10e9df03fc3fea0632d3be9a29a281a7936b79 Mon Sep 17 00:00:00 2001 From: Sloth Date: Wed, 11 Mar 2015 22:52:39 +0000 Subject: [PATCH] - More improvements for Exploit AI. --- .../src/main/java/forge/ai/ComputerUtil.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtil.java b/forge-ai/src/main/java/forge/ai/ComputerUtil.java index 0bb516ffec6..f522be981d6 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtil.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtil.java @@ -41,6 +41,7 @@ import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; import forge.game.player.Player; import forge.game.spellability.AbilityManaPart; +import forge.game.spellability.AbilitySub; import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbilityStackInstance; import forge.game.spellability.TargetRestrictions; @@ -506,11 +507,33 @@ public class ComputerUtil { final boolean destroy, final boolean isOptional) { CardCollection remaining = new CardCollection(cardlist); final CardCollection sacrificed = new CardCollection(); + final Card host = source.getHostCard(); if (isOptional && source.getActivatingPlayer().isOpponentOf(ai)) { return sacrificed; // sacrifice none } if (isOptional && source.hasParam("Devour") || source.hasParam("Exploit")) { + if (source.hasParam("Exploit")) { + for (Trigger t : host.getTriggers()) { + if (t.getMode() == TriggerType.Exploited) { + final String execute = t.getMapParams().get("Execute"); + if (execute == null) { + continue; + } + final SpellAbility exSA = AbilityFactory.getAbility(host.getSVar(execute), host); + + exSA.setActivatingPlayer(ai); + exSA.setTrigger(true); + + // Run non-mandatory trigger. + // These checks only work if the Executing SpellAbility is an Ability_Sub. + if ((exSA instanceof AbilitySub) && !SpellApiToAi.Converter.get(exSA.getApi()).doTriggerAI(ai, exSA, false)) { + // AI would not run this trigger if given the chance + return sacrificed; + } + } + } + } remaining = CardLists.filter(remaining, new Predicate() { @Override public boolean apply(final Card c) {