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.
This commit is contained in:
mattsc 2016-10-21 13:53:23 -07:00
parent cf731dd923
commit d375321e64
2 changed files with 8 additions and 2 deletions

View file

@ -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

View file

@ -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