From 4b5a555c1e1988f5fecce91d4acb056bd11d94c5 Mon Sep 17 00:00:00 2001 From: Agetian Date: Sun, 21 Jan 2018 16:38:45 +0300 Subject: [PATCH 1/2] - Fixed the AI overtargeting cards like Hunt the Weak and Savage Stomp and failing to add the card to stack. --- forge-ai/src/main/java/forge/ai/ability/FightAi.java | 1 + 1 file changed, 1 insertion(+) diff --git a/forge-ai/src/main/java/forge/ai/ability/FightAi.java b/forge-ai/src/main/java/forge/ai/ability/FightAi.java index 93b6060aaba..d104fca38cf 100644 --- a/forge-ai/src/main/java/forge/ai/ability/FightAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/FightAi.java @@ -55,6 +55,7 @@ public class FightAi extends SpellAbilityAi { return true; } } + return false; // bail at this point, otherwise the AI will overtarget and waste the activation } if (sa.hasParam("TargetsFromDifferentZone")) { From b20c5acf75eb3870383f65c00e066213fe897be3 Mon Sep 17 00:00:00 2001 From: Agetian Date: Sun, 21 Jan 2018 19:49:04 +0300 Subject: [PATCH 2/2] - Issue a warning when trying to execute a trigger that references a SVar which does not exist and abort the execution of that trigger instead of hard-crashing the game (makes the issue with a manifested Hideaway land dying non-fatal). --- .../src/main/java/forge/game/trigger/TriggerHandler.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java index 32c1ca119a2..c05bf6d815a 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java @@ -570,6 +570,11 @@ public class TriggerHandler { }; } else { + if (!host.getCurrentState().hasSVar(triggerParams.get("Execute"))) { + System.err.println("Warning: tried to run a trigger for card " + host + " referencing a SVar " + triggerParams.get("Execute") + " not present on the current state " + host.getCurrentState() + ". Aborting trigger execution to prevent a crash."); + return; + } + sa = AbilityFactory.getAbility(host, triggerParams.get("Execute")); } } else {