From d375321e64a5a53929dc39f6a279c88753218f9d Mon Sep 17 00:00:00 2001 From: mattsc Date: Fri, 21 Oct 2016 13:53:23 -0700 Subject: [PATCH] Fast Micro AI: fix behavior with attack_hidden_enemies=yes ai_helper.get_attacks() now excludes hidden enemies by default -> they need to be specifically included if they are to be attacked, as opposed to having to be excluded when not. --- data/ai/micro_ais/cas/ca_fast_combat.lua | 5 ++++- data/ai/micro_ais/cas/ca_fast_combat_leader.lua | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/data/ai/micro_ais/cas/ca_fast_combat.lua b/data/ai/micro_ais/cas/ca_fast_combat.lua index 7623441800a..b5ca6b223aa 100644 --- a/data/ai/micro_ais/cas/ca_fast_combat.lua +++ b/data/ai/micro_ais/cas/ca_fast_combat.lua @@ -56,6 +56,7 @@ function ca_fast_combat:evaluation(cfg, data) end -- Exclude hidden enemies, except if attack_hidden_enemies=yes is set in [micro_ai] tag + local viewing_side = wesnoth.current.side if (not cfg.attack_hidden_enemies) then local hidden_enemies = AH.get_live_units { { "filter_side", { { "enemy_of", { side = wesnoth.current.side } } } }, @@ -65,6 +66,8 @@ function ca_fast_combat:evaluation(cfg, data) for _,e in ipairs(hidden_enemies) do enemy_map:remove(e.x, e.y) end + else + viewing_side = 0 end local aggression = ai.aspects.aggression @@ -80,7 +83,7 @@ function ca_fast_combat:evaluation(cfg, data) local unit_copy = FAU.get_unit_copy(unit.id, data.gamedata) if (unit.attacks_left > 0) and (#unit.attacks > 0) then - local attacks = AH.get_attacks({ unit }, { include_occupied = cfg.include_occupied_attack_hexes }) + local attacks = AH.get_attacks({ unit }, { include_occupied = cfg.include_occupied_attack_hexes, viewing_side = viewing_side }) if (#attacks > 0) then local max_rating, best_target, best_dst = -9e99 diff --git a/data/ai/micro_ais/cas/ca_fast_combat_leader.lua b/data/ai/micro_ais/cas/ca_fast_combat_leader.lua index eff165fa28d..7bdaa130190 100644 --- a/data/ai/micro_ais/cas/ca_fast_combat_leader.lua +++ b/data/ai/micro_ais/cas/ca_fast_combat_leader.lua @@ -48,6 +48,7 @@ function ca_fast_combat_leader:evaluation(cfg, data) end -- Exclude hidden enemies, except if attack_hidden_enemies=yes is set in [micro_ai] tag + local viewing_side = wesnoth.current.side if (not cfg.attack_hidden_enemies) then local hidden_enemies = AH.get_live_units { { "filter_side", { { "enemy_of", { side = wesnoth.current.side } } } }, @@ -57,6 +58,8 @@ function ca_fast_combat_leader:evaluation(cfg, data) for _,e in ipairs(hidden_enemies) do enemy_map:remove(e.x, e.y) end + else + viewing_side = 0 end local aggression = ai.aspects.aggression @@ -114,7 +117,7 @@ function ca_fast_combat_leader:evaluation(cfg, data) end end - local attacks = AH.get_attacks({ leader }, { include_occupied = cfg.include_occupied_attack_hexes }) + local attacks = AH.get_attacks({ leader }, { include_occupied = cfg.include_occupied_attack_hexes, viewing_side = viewing_side }) if (#attacks > 0) then local max_rating, best_target, best_dst = -9e99