-- run_string check_logic_path.check() local path_fields = { "path_walk", "path_main", "path_home", "center_point" } function check() for smart_name,smart in pairs(smart_terrain.smart_terrains_by_name) do --printf("checking smart ---> %s", smart_name) for k,v in pairs(smart.job_data) do --printf(" checking work --> %s", v.section) local ltx = v.ini_file or smart.ltx check_ini(ltx, v.section, smart, v.prefix_name) end end end local section_to_check = {} function get_sections(ini, active_section_cond) for k,cond in pairs(active_section_cond) do if cond.section ~= nil then if section_to_check[cond.section] ~= true then section_to_check[cond.section] = true local switch_sections = xr_logic.cfg_get_switch_conditions(ini, cond.section) if switch_sections ~= nil and switch_sections ~= "" then for kk, v in pairs(switch_sections) do get_sections(ini, v.condlist) end end end end end end function check_ini(ini, section, smart, prefix_name) section_to_check = {} local active_section_cond = xr_logic.cfg_get_condlist(ini, section, "active") get_sections(ini, active_section_cond.condlist) --print_table(section_to_check) for sect,v in pairs(section_to_check) do local path_field for i,vv in pairs(path_fields) do if ini:line_exist(sect, vv) then path_field = vv break end end if path_field ~= nil then local prefix if prefix_name ~= nil then prefix = prefix_name else prefix = smart:name() end local path_walk = utils.cfg_get_string(ini, sect, path_field, smart, false, prefix) --printf(" check path %s", path_walk) local patrol_walk = patrol(path_walk) -- Проверка наличия пути if not patrol_walk then printf("path_walk [%s] doesnt exist in the game", path_walk) end -- Если это валк путь, проверяем есть ли лук. local patrol_look = nil if path_field == "path_walk" then local path_look_name = utils.cfg_get_string(ini, sect, "path_look", smart, false, prefix) if path_look_name ~= nil then --printf(" checking path look %s", tostring(path_look_name)) patrol_look = patrol(path_look_name) if not patrol_look then printf("path_look [%s] doesnt exist in the game", path_look_name) end end end -- Итерируемся по точкам патрульного пути local cnt = patrol_walk:count() for pt = 0, cnt - 1 do local point = patrol_walk:point(pt) -- Проверка что точка на АИ карте local level_vertex_id = patrol_walk:level_vertex_id(pt) if level_vertex_id == nil then printf("path_walk [%s] point [%s] is not on the AI map (no_level_id)", path_walk, pt) end -- local vertex_position = level.vertex_position(level_vertex_id) -- if vertex_position:distance_to_sqr(point) > 0.49 then -- printf("path_walk [%s] point [%s] is not on the AI map (by_distance)", path_walk, pt) -- end -- Проверка что есть соответствующий лук путь. if patrol_look ~= nil then local flags = patrol_walk:flags(pt) local look_cnt = patrol_look:count() local is_found = false for look_pt = 0, look_cnt - 1 do local look_flags = patrol_walk:flags(look_pt) if flags:equal(look_flags) then is_found = true break end end if cnt == 1 and not_is_found then printf("path_walk [%s] is one-point walk path without corresponding look points", path_walk) end else -- Спешл кейс на случай когда одноточечным путь волка if cnt == 1 then printf("path_walk [%s] is one-point walk path without path_look", path_walk) end end end end end end function main() check() end