From 442adac65b24c7c77eb0603416a5a2b86a795637 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E4=BA=91?= Date: Mon, 9 Jun 2025 06:17:45 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4=E6=97=A0=E6=95=88?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../3_generate_ley_line_data.py | 1279 +++++++++------ repo/js/AutoLeyLineOutcrop/README.md | 2 +- .../generate_data_format.cpython-313.pyc | Bin 23053 -> 0 bytes .../generate_data_format.py | 859 ----------- repo/js/AutoLeyLineOutcrop/orphan_handling.py | 28 - repo/js/AutoLeyLineOutcrop/output.txt | 1370 ----------------- repo/js/AutoLeyLineOutcrop/output_new.txt | 1001 ------------ .../test_filename_parsing.py | 58 - repo/js/AutoLeyLineOutcrop/test_parsing.py | 58 - 9 files changed, 807 insertions(+), 3848 deletions(-) delete mode 100644 repo/js/AutoLeyLineOutcrop/__pycache__/generate_data_format.cpython-313.pyc delete mode 100644 repo/js/AutoLeyLineOutcrop/generate_data_format.py delete mode 100644 repo/js/AutoLeyLineOutcrop/orphan_handling.py delete mode 100644 repo/js/AutoLeyLineOutcrop/output.txt delete mode 100644 repo/js/AutoLeyLineOutcrop/output_new.txt delete mode 100644 repo/js/AutoLeyLineOutcrop/test_filename_parsing.py delete mode 100644 repo/js/AutoLeyLineOutcrop/test_parsing.py diff --git a/repo/js/AutoLeyLineOutcrop/3_generate_ley_line_data.py b/repo/js/AutoLeyLineOutcrop/3_generate_ley_line_data.py index d4f9add3..ab146f28 100644 --- a/repo/js/AutoLeyLineOutcrop/3_generate_ley_line_data.py +++ b/repo/js/AutoLeyLineOutcrop/3_generate_ley_line_data.py @@ -3,524 +3,857 @@ import json import os -import math - +import sys +import re def format_coord(num): - """Format coordinate to 2 decimal places""" - return round(num, 2) - + return round(float(num), 2) def calculate_distance(x1, y1, x2, y2): - """Calculate Euclidean distance between two points""" - return math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2) + return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5 +# 定义区域排序顺序 +REGION_ORDER = { + "蒙德": 1, + "璃月": 2, + "稻妻": 3, + "须弥": 4, + "枫丹": 5, + "纳塔": 6, + "未知区域": 99 # 未知区域放最后 +} -def find_nearby_node(nodes, x, y, node_type, max_distance=50): - """Find a node of given type within specified distance""" - for node in nodes: - if node["type"] != node_type: - continue - - node_x = node["position"]["x"] - node_y = node["position"]["y"] - - if calculate_distance(node_x, node_y, x, y) < max_distance: - return node +def get_region_sort_key(region_name): + """获取区域的排序键值,用于排序""" + # 从完整区域名称(如"枫丹1-1")中提取基本区域名称(如"枫丹") + base_region = re.match(r"^([^0-9]+)", region_name) + if base_region: + base_region = base_region.group(1) + return REGION_ORDER.get(base_region, 99) + return 99 + +def normalize_region_name(region_name, region_num, route_num, route_sub_num=None): + """规范化区域名称,确保命名一致性 + 例如: + - 标准格式: 蒙德3, 奔狼领, 2 -> 蒙德3-2 + - 特殊格式: 蒙德2, 清泉镇, 4, 1 -> 蒙德2-4-1 + """ + if route_sub_num is not None: + # 特殊格式 + return f"{region_name}{region_num}-{route_num}-{route_sub_num}" + else: + # 标准格式 + return f"{region_name}{region_num}-{route_num}" + +def is_same_region_base(region1, region2): + """检查两个区域名称是否属于同一基本区域 + 例如,"蒙德2-4-1"和"蒙德2-4-2"属于同一基本区域"蒙德2-4" + """ + # 提取区域名称的基本部分(例如从"蒙德2-4-1"提取"蒙德2-4") + base_region1 = re.match(r"^([^-]+-\d+)", region1) + base_region2 = re.match(r"^([^-]+-\d+)", region2) - return None + return (base_region1 and base_region2 and + base_region1.group(1) == base_region2.group(1)) - -def parse_region_from_filename(filename): - """Parse region from filename (e.g., "蒙德3-奔狼领-2.json" -> "蒙德3")""" - parts = filename.split('-') - if len(parts) < 2: - return None - return parts[0] - - -def extract_route_number(filename): - """Extract route number and area from filename (e.g., "蒙德3-奔狼领-2.json" -> ("蒙德3", "奔狼领", 2)) - Also supports decimal route numbers (e.g., "蒙德2-清泉镇-3.5.json" -> ("蒙德2", "清泉镇", 3.5))""" - parts = filename.split('-') - if len(parts) < 3: - return None, None, None +def parse_region_area_number(filename): + """从文件名解析区域、地区和编号 + 支持两种格式: + 1. 标准格式: 蒙德3-奔狼领-2.json -> ("蒙德", 3, "奔狼领", 2) + 2. 特殊格式: 蒙德2-清泉镇-4-1.json -> ("蒙德", 2, "清泉镇", 4, 1) + """ + # 先尝试匹配特殊格式(带有额外连字符的格式) + special_pattern = r"^([^0-9]+)(\d+)-(.+)-(\d+)-(\d+(?:\.\d+)?)\.json$" + match = re.match(special_pattern, filename) + if match: + region_name = match.group(1) + region_num = int(match.group(2)) + area = match.group(3) + route_num = int(match.group(4)) + route_sub_num = int(match.group(5)) + return region_name, region_num, area, route_num, route_sub_num - region = parts[0] - area = parts[1] + # 如果不是特殊格式,尝试匹配标准格式 + standard_pattern = r"^([^0-9]+)(\d+)-(.+)-(\d+(?:\.\d+)?)\.json$" + match = re.match(standard_pattern, filename) + if match: + region_name = match.group(1) + region_num = int(match.group(2)) + area = match.group(3) + route_num = int(match.group(4)) + return region_name, region_num, area, route_num - # Extract number from last part (remove .json) - num_part = parts[2].split('.json')[0] - try: - # Support both integer and decimal route numbers - num = float(num_part) - return region, area, num - except ValueError: - return region, area, None + # 如果都不匹配,返回默认值 + print(f"警告:无法解析文件名 {filename}") + return None, None, None, None - -def read_pathing_file(file_path): - """Read a pathing file and return its data""" - try: - with open(file_path, 'r', encoding='utf-8') as f: - return json.load(f) - except Exception as e: - print(f"Error reading {file_path}: {e}") - return None - - -def get_first_and_last_positions(path_data): - """Extract first and last positions from pathing data""" - if not path_data or "positions" not in path_data: - return None, None - - positions = path_data["positions"] - if not positions or len(positions) < 1: # Changed from 2 to 1 to handle single-position files - return None, None - - return positions[0], positions[-1] - - -def generate_relative_path(file_path, script_dir): - """Generate the appropriate relative path for routes""" - # Get the path relative to the script directory - relative_path = os.path.relpath(file_path, os.path.dirname(script_dir)) - # Standardize path separator - relative_path = relative_path.replace("\\", "/") - - # Remove the "AutoLeyLineOutcrop/" prefix if present - if relative_path.startswith("AutoLeyLineOutcrop/"): - relative_path = relative_path[len("AutoLeyLineOutcrop/"):] - - return relative_path - - -def generate_ley_line_data(): - """Process pathing files and generate LeyLineOutcropData.json""" - # Path to the directory containing pathing files +def generate_new_data_structure_from_pathing(): + """直接从assets/pathing目录读取文件生成新的数据结构""" + # 获取脚本所在目录 script_dir = os.path.dirname(os.path.abspath(__file__)) pathing_dir = os.path.join(script_dir, "assets", "pathing") + target_dir = os.path.join(pathing_dir, "target") - print(f"Looking for pathing files in: {pathing_dir}") + # 检查目录是否存在 + if not os.path.exists(pathing_dir): + print(f"错误:找不到路径目录 {pathing_dir}") + return None + # 初始化新数据结构,分开存储 blossom 和 teleport + new_data = { + "teleports": [], # 传送点节点 + "blossoms": [], # 地脉花节点 + "edges": [], # 边集合 + "indexes": { + "edgesBySource": {}, + "edgesByTarget": {} + } + } + # 创建独立的ID计数器和节点映射 + next_teleport_id = 1 # 传送点专用ID计数器 + next_blossom_id = 1000 # 地脉花专用ID计数器 + teleport_nodes = {} # 按坐标存储传送点节点 (x, y) -> node_id + target_nodes = {} # 按坐标存储目标点节点 (x, y) -> node_id - # Initialize data structures - nodes = [] - node_map = {} # Map to track nodes by ID - next_node_id = 1 - - # Used to group files by region and area - region_area_files = {} - file_data = {} # Store file data for each path - - # Get all pathing JSON files (excluding rerun files and target directory) - pathing_files = [] - target_files = {} # Map target files by region/area/num for reference + # 创建文件路径映射 + file_paths = {} + # 第一遍:读取所有路径文件并创建节点 + print("第一遍:读取路径文件并创建节点...") for root, _, files in os.walk(pathing_dir): - for file in files: + for file in sorted(files): + # 跳过非JSON文件和重运行文件 if not file.endswith('.json') or 'rerun' in file or 'rerun' in root: continue + + # 跳过target目录 + if "target" in root.split(os.path.sep): + continue file_path = os.path.join(root, file) - # Process target directory files separately - if "target" in root.split(os.path.sep): - region, area, num = extract_route_number(file) - if region and area and num: - key = f"{region}-{area}-{num}" - target_files[key] = file_path - continue - - pathing_files.append(file_path) - - # Read and store file data - path_data = read_pathing_file(file_path) - if path_data: - file_data[file_path] = path_data - - # Group files by region and area - region, area, num = extract_route_number(file) - if region and area and num: - key = f"{region}-{area}" - if key not in region_area_files: - region_area_files[key] = [] - region_area_files[key].append((num, file_path)) - - # Sort files within each group by route number - for key in region_area_files: - region_area_files[key].sort() # Sort by route number - - print(f"Found {len(pathing_files)} pathing files (excluding rerun and target files)") - - # First pass: Process teleport points (routes that start with teleport) - for file_path, path_data in file_data.items(): - first_pos, _ = get_first_and_last_positions(path_data) - if not first_pos: - continue - - # Extract region from filename - file_name = os.path.basename(file_path) - region = parse_region_from_filename(file_name) - if not region: - continue - - # Process teleport points - if first_pos.get("type") == "teleport": - x = format_coord(float(first_pos["x"])) - y = format_coord(float(first_pos["y"])) - - # Check if we already have a nearby teleport node - teleport_node = find_nearby_node(nodes, x, y, "teleport") - - if not teleport_node: - # Create new teleport node - teleport_node = { - "id": next_node_id, - "type": "teleport", - "region": region, - "position": {"x": x, "y": y}, - "prev": [], - "next": [] - } - nodes.append(teleport_node) - node_map[next_node_id] = teleport_node - next_node_id += 1 - - # Store teleport node in node_map - node_map[teleport_node["id"]] = teleport_node - - # Build a map of first positions for path-type routes - # This will help us connect path routes to each other - path_first_positions = {} - for file_path, path_data in file_data.items(): - first_pos, _ = get_first_and_last_positions(path_data) - if not first_pos or first_pos.get("type") != "path": - continue - - file_name = os.path.basename(file_path) - region, area, num = extract_route_number(file_name) - if not region or not area or not num: - continue - - key = f"{region}-{area}-{num}" - path_first_positions[key] = { - "x": format_coord(float(first_pos["x"])), - "y": format_coord(float(first_pos["y"])), - "file_path": file_path - } - - # Second pass: Process all target points to create blossom nodes - # Also maintain a map from file info to target nodes - region_area_num_to_target = {} - - for file_path, path_data in file_data.items(): - _, last_pos = get_first_and_last_positions(path_data) - if not last_pos: - continue - - # Extract region from filename - file_name = os.path.basename(file_path) - region = parse_region_from_filename(file_name) - if not region: - continue - - region, area, num = extract_route_number(file_name) - if not region or not area or not num: - continue - - # Process last points as blossom nodes (regardless of type) - target_x = format_coord(float(last_pos["x"])) - target_y = format_coord(float(last_pos["y"])) - - # Determine node type - default to blossom for target or if not specified - node_type = last_pos.get("type", "blossom") - if node_type == "path": - node_type = "blossom" - - # Check if we already have a nearby node of the same type - blossom_node = find_nearby_node(nodes, target_x, target_y, node_type) - - if not blossom_node: - # Create new node - blossom_node = { - "id": next_node_id, - "type": node_type, - "region": region, - "position": {"x": target_x, "y": target_y}, - "prev": [], - "next": [] - } - nodes.append(blossom_node) - node_map[next_node_id] = blossom_node - next_node_id += 1 - - # Store the node in our region-area-num map - key = f"{region}-{area}" - if key not in region_area_num_to_target: - region_area_num_to_target[key] = {} - region_area_num_to_target[key][num] = { - "node": blossom_node, - "file_path": file_path - } - # Special handling for files with only target positions (like 纳塔4-溶水域-2.json) - for file_path in pathing_files: - file_name = os.path.basename(file_path) - region, area, num = extract_route_number(file_name) - if not region or not area or not num: - continue - - # Check if this file has target data but no blossom node yet - key = f"{region}-{area}" - if key in region_area_num_to_target and num not in region_area_num_to_target[key]: - # Check if we have a target file for this route - target_key = f"{region}-{area}-{num}" - if target_key in target_files: - target_path = target_files[target_key] - target_data = read_pathing_file(target_path) + try: + with open(file_path, 'r', encoding='utf-8') as f: + path_data = json.load(f) - if target_data and "positions" in target_data and target_data["positions"]: - # Create node from the target file - target_pos = target_data["positions"][0] - # Determine node type - default to blossom if type is not specified or is target - node_type = target_pos.get("type", "blossom") - if node_type == "target": - node_type = "blossom" - - target_x = format_coord(float(target_pos["x"])) - target_y = format_coord(float(target_pos["y"])) - - # Check if we already have a nearby node of the same type - blossom_node = find_nearby_node(nodes, target_x, target_y, node_type) - - if not blossom_node: - # Create new node - blossom_node = { - "id": next_node_id, - "type": node_type, + # 记录文件路径 + relative_path = os.path.relpath(file_path, script_dir) + relative_path = relative_path.replace("\\", "/") + file_paths[file] = relative_path + + # 检查文件是否有position数据 + if "positions" not in path_data or not path_data["positions"]: + continue + + # 获取第一个位置点(通常是传送点) + first_pos = path_data["positions"][0] + if "type" in first_pos and first_pos["type"] == "teleport": + x = format_coord(first_pos["x"]) + y = format_coord(first_pos["y"]) # 解析区域信息 + result = parse_region_area_number(file) + if len(result) == 5: # 特殊格式 + region_name, region_num, _, _, _ = result + else: # 标准格式或无法解析 + region_name, region_num, _, _ = result + # 传送点仅显示区域名称,不显示编号 + region = f"{region_name}" if region_name else "未知区域" + # 检查是否已存在相同坐标的传送点 + existing_node = False + for coord, node_id in teleport_nodes.items(): + if calculate_distance(coord[0], coord[1], x, y) < 10: # 将阈值从50降低到10 + existing_node = True + break + if not existing_node: # 创建新的传送点节点 + teleport_node = { + "id": next_teleport_id, "region": region, - "position": {"x": target_x, "y": target_y}, - "prev": [], - "next": [] + "position": {"x": x, "y": y} } - nodes.append(blossom_node) - node_map[next_node_id] = blossom_node - next_node_id += 1 - - # Add to region_area_num_to_target map - if key not in region_area_num_to_target: - region_area_num_to_target[key] = {} - region_area_num_to_target[key][num] = { - "node": blossom_node, - "file_path": file_path - } + new_data["teleports"].append(teleport_node) + teleport_nodes[(x, y)] = next_teleport_id + next_teleport_id += 1 + print(f" 创建传送点: ID={teleport_node['id']}, 区域={region}, 坐标=({x}, {y})") + except Exception as e: + print(f" 警告:处理文件 {file} 时出错: {e}") - # Third pass: Connect teleport points to their destination nodes - for file_path, path_data in file_data.items(): - first_pos, last_pos = get_first_and_last_positions(path_data) - if not first_pos or not last_pos: + # 第二遍:读取target目录文件并创建目标节点 + print("\n第二遍:读取target文件并创建目标节点...") + for file in sorted(os.listdir(target_dir)): + if not file.endswith('.json'): continue - - # Extract file info - file_name = os.path.basename(file_path) - region, area, num = extract_route_number(file_name) - - # Skip if we can't parse the file name - if not region or not area or not num: - continue - - # For teleport source type, connect to destination - if first_pos.get("type") == "teleport": - # 查找第一个点(传送点) - x = format_coord(float(first_pos["x"])) - y = format_coord(float(first_pos["y"])) - teleport_node = find_nearby_node(nodes, x, y, "teleport") - # 查找最后一个点(目标点,通常是blossom) - dest_x = format_coord(float(last_pos["x"])) - dest_y = format_coord(float(last_pos["y"])) - - # 确定节点类型,默认为blossom - dest_type = last_pos.get("type", "blossom") - if dest_type == "target" or dest_type == "path": - dest_type = "blossom" + file_path = os.path.join(target_dir, file) + + try: + with open(file_path, 'r', encoding='utf-8') as f: + target_data = json.load(f) + # 检查文件是否有position数据 + if "positions" not in target_data or not target_data["positions"]: + continue - # 查找目标节点 - dest_node = find_nearby_node(nodes, dest_x, dest_y, dest_type) - - # 如果找到了传送点和目标节点,则建立连接 - if teleport_node and dest_node: - # 添加相对路径 - relative_path = generate_relative_path(file_path, script_dir) - - # 将目标添加到传送点的next数组中(如果尚未添加) - route_exists = False - for route in teleport_node["next"]: - if route["target"] == dest_node["id"]: - route_exists = True - break - - if not route_exists: - teleport_node["next"].append({ - "target": dest_node["id"], - "route": relative_path - }) - - # 将传送点添加到目标的prev数组中(如果尚未添加) - if teleport_node["id"] not in dest_node["prev"]: - dest_node["prev"].append(teleport_node["id"]) + # 获取第一个位置点(通常是目标点) + target_pos = target_data["positions"][0] + x = format_coord(target_pos["x"]) + y = format_coord(target_pos["y"]) + result = parse_region_area_number(file) + if len(result) == 5: # 特殊格式 + region_name, region_num, area, route_num, route_sub_num = result + # 使用规范化函数来生成区域名 + region = normalize_region_name(region_name, region_num, route_num, route_sub_num) + else: # 标准格式或无法解析 + region_name, region_num, area, route_num = result + # 使用规范化函数来生成区域名 + region = normalize_region_name(region_name, region_num, route_num) if region_name and region_num and route_num else "未知区域" # 检查是否已存在相同坐标的目标点和相同区域名 + existing_node = False + existing_node_id = None + for coord, node_id in target_nodes.items(): + if calculate_distance(coord[0], coord[1], x, y) < 10: # 阈值为10 + # 找到这个节点,检查它的区域是否与当前区域相同 + for blossom in new_data["blossoms"]: + if blossom["id"] == node_id: + # 检查区域名完全相同 + if blossom["region"] == region: + existing_node = True + existing_node_id = node_id + break + + # 检查区域名基本部分是否相同(如"蒙德2-4"和"蒙德2-4-2") + # 提取区域名称的基本部分(例如从"蒙德2-4-1"提取"蒙德2-4") + current_base_region = re.match(r"^([^-]+-\d+)", region) + existing_base_region = re.match(r"^([^-]+-\d+)", blossom["region"]) + + if (current_base_region and existing_base_region and + current_base_region.group(1) == existing_base_region.group(1)): + print(f" 注意: 坐标 ({x}, {y}) 与已存在节点 '{blossom['region']}' 区域基本部分相同,视为同一节点") + existing_node = True + existing_node_id = node_id + break - # 输出调试信息,帮助排查问题 - else: - debug_info = f"无法连接传送点到目标: 文件={file_name}" - if not teleport_node: - debug_info += f", 未找到传送点({x},{y})" - if not dest_node: - debug_info += f", 未找到目标点({dest_x},{dest_y}, 类型={dest_type})" - print(debug_info) + if not existing_node: + print(f" 注意: 坐标 ({x}, {y}) 附近有另一个区域的节点,但将创建新节点") + + if not existing_node: + # 创建新的目标点节点 + target_node = { + "id": next_blossom_id, + "region": region, + "position": {"x": x, "y": y} + } + new_data["blossoms"].append(target_node) + target_nodes[(x, y)] = next_blossom_id + next_blossom_id += 1 + print(f" 创建目标点: ID={target_node['id']}, 区域={region}, 坐标=({x}, {y})") + except Exception as e: + print(f" 警告:处理目标文件 {file} 时出错: {e}") - # Fourth pass: Connect nodes based on numerical sequence and handle branch paths - for region_area, num_to_target in region_area_num_to_target.items(): - route_numbers = sorted(num_to_target.keys()) + # 第三遍:创建边和索引 + print("\n第三遍:创建边和索引...") + for file in sorted(os.listdir(pathing_dir)): + if not file.endswith('.json') or 'rerun' in file: + continue + + # 跳过target和rerun目录中的文件 + if file not in file_paths: + continue + # 解析文件名 + result = parse_region_area_number(file) + if len(result) == 5: # 特殊格式 + region_name, region_num, area, route_num, route_sub_num = result + else: # 标准格式 + region_name, region_num, area, route_num = result + route_sub_num = None + + if not region_name or not region_num or not area or not route_num: + continue + + # 构建对应的target文件名 + target_file = file - # Connect each route to the next numerically - for i in range(len(route_numbers) - 1): - current_num = route_numbers[i] - next_num = route_numbers[i + 1] + # 检查target文件是否存在 + target_path = os.path.join(target_dir, target_file) + if not os.path.exists(target_path): + print(f" 警告:找不到对应的目标文件 {target_file}") + continue - current_info = num_to_target[current_num] - next_info = num_to_target[next_num] - - current_node = current_info["node"] - next_node = next_info["node"] - next_file_path = next_info["file_path"] - - # Create the connection - relative_path = generate_relative_path(next_file_path, script_dir) - - # Check if this is a main path or a branch path - is_branch = False - - # If route number has decimal part (like 3.5), it's a branch - if current_num != int(current_num) or next_num != int(next_num): - is_branch = True - - # For branch paths, we also need to connect to the next main path - # For example, if we have 3, 3.5, 4, we need to connect 3 to both 3.5 and 4 - if not is_branch and i + 2 < len(route_numbers): - # Check if the next route is a branch (has decimal part) - possible_branch_num = route_numbers[i + 1] - if int(possible_branch_num) == int(current_num) + 1 and possible_branch_num != int(possible_branch_num): - # This is a branch route, also connect current to route after branch - future_num = route_numbers[i + 2] - future_info = num_to_target[future_num] - future_node = future_info["node"] - future_file_path = future_info["file_path"] - - # Create the connection to the future node - future_relative_path = generate_relative_path(future_file_path, script_dir) - - # Add future node to current's next array if not already there - future_route_exists = False - for route in current_node["next"]: - if route["target"] == future_node["id"]: - future_route_exists = True + try: + # 读取路径文件获取源传送点 + file_path = os.path.join(pathing_dir, file) + with open(file_path, 'r', encoding='utf-8') as f: + path_data = json.load(f) + + # 读取目标文件获取目标点 + with open(target_path, 'r', encoding='utf-8') as f: + target_data = json.load(f) + + # 获取传送点坐标 + if "positions" in path_data and path_data["positions"]: + first_pos = path_data["positions"][0] + source_x = format_coord(first_pos["x"]) + source_y = format_coord(first_pos["y"]) + + # 获取目标点坐标 + if "positions" in target_data and target_data["positions"]: + target_pos = target_data["positions"][0] + target_x = format_coord(target_pos["x"]) + target_y = format_coord(target_pos["y"]) # 查找源节点ID + source_id = None + for coord, node_id in teleport_nodes.items(): + if calculate_distance(coord[0], coord[1], source_x, source_y) < 10: # 将阈值从50降低到10 + source_id = node_id + break + + # 查找目标节点ID + target_id = None + for coord, node_id in target_nodes.items(): + if calculate_distance(coord[0], coord[1], target_x, target_y) < 10: # 将阈值从50降低到10 + target_id = node_id break - if not future_route_exists: - current_node["next"].append({ - "target": future_node["id"], - "route": future_relative_path - }) - - # Add current node to future's prev array if not already there - if current_node["id"] not in future_node["prev"]: - future_node["prev"].append(current_node["id"]) - - # Regular connection to the next numerical route - # Add next node to current's next array if not already there - route_exists = False - for route in current_node["next"]: - if route["target"] == next_node["id"]: - route_exists = True - break - - if not route_exists: - current_node["next"].append({ - "target": next_node["id"], - "route": relative_path - }) - - # Add current node to next's prev array if not already there - if current_node["id"] not in next_node["prev"]: - next_node["prev"].append(current_node["id"]) + # 如果找到了源节点和目标节点,创建边 + if source_id and target_id: # 添加边 + edge = { + "source": source_id, + "target": target_id, + "route": file_paths[file], + # 保存原始位置信息,用于在排序后更新ID(稍后会删除) + "sourcePosition": { + "x": source_x, + "y": source_y + }, + "targetPosition": { + "x": target_x, + "y": target_y + } + } + new_data["edges"].append(edge) + + # 更新索引 + if str(source_id) not in new_data["indexes"]["edgesBySource"]: + new_data["indexes"]["edgesBySource"][str(source_id)] = [] + new_data["indexes"]["edgesBySource"][str(source_id)].append(target_id) + + if str(target_id) not in new_data["indexes"]["edgesByTarget"]: + new_data["indexes"]["edgesByTarget"][str(target_id)] = [] + new_data["indexes"]["edgesByTarget"][str(target_id)].append(source_id) + + print(f" 创建边: {source_id} -> {target_id}, 路径={file_paths[file]}") + except Exception as e: + print(f" 警告:处理边关系时出错 {file}: {e}") # 检查每个目标点是否至少有一条有向边 + print("\n检查目标点的连通性...") + orphaned_targets = [] + for blossom in new_data["blossoms"]: + target_id = blossom["id"] + + # 检查是否有边指向此目标点 + has_edge = False + for edge in new_data["edges"]: + if edge["target"] == target_id: + has_edge = True + break + + if not has_edge: + orphaned_targets.append(blossom) + print(f" 警告: 目标点 ID={target_id}, 区域={blossom['region']}, 坐标=({blossom['position']['x']}, {blossom['position']['y']}) 没有入边") - # Fifth pass: Connect "path" type sources to their destinations - for file_path, path_data in file_data.items(): - first_pos, last_pos = get_first_and_last_positions(path_data) - if not first_pos or not last_pos: - continue + # 处理没有边的目标点 - 尝试使用连续编号的路径 + if orphaned_targets: + print(f"\n尝试为 {len(orphaned_targets)} 个孤立目标点寻找连续路径...") - # Skip if not a path type - if first_pos.get("type") != "path": - continue + # 先按区域分组目标点 + region_targets = {} + for orphan in orphaned_targets: + region = orphan["region"] + if region not in region_targets: + region_targets[region] = [] + region_targets[region].append(orphan) - # Extract file info - file_name = os.path.basename(file_path) - region, area, num = extract_route_number(file_name) - - # Skip if we can't parse the file name - if not region or not area or not num: - continue - - # Try to find the source in previous route - prev_num = num - 1 - key = f"{region}-{area}" - if key in region_area_num_to_target and prev_num in region_area_num_to_target[key]: - prev_info = region_area_num_to_target[key][prev_num] - prev_node = prev_info["node"] + # 然后按区域处理 + for region, targets in region_targets.items(): + print(f"\n处理区域 {region} 的 {len(targets)} 个孤立目标点...") - # Find the current destination node - dest_x = format_coord(float(last_pos["x"])) - dest_y = format_coord(float(last_pos["y"])) - - # Determine node type, default to blossom for target or if not specified - dest_type = last_pos.get("type", "blossom") - if dest_type == "target": - dest_type = "blossom" - - dest_node = find_nearby_node(nodes, dest_x, dest_y, dest_type) - - if prev_node and dest_node: - # Add connection from previous node to current destination - relative_path = generate_relative_path(file_path, script_dir) - - # Add destination to previous node's next array if not already there - route_exists = False - for route in prev_node["next"]: - if route["target"] == dest_node["id"]: - route_exists = True + # 获取该区域的所有边 + region_edges = [] + for edge in new_data["edges"]: + # 找到起点对应的传送点 + source_teleport = None + for teleport in new_data["teleports"]: + if teleport["id"] == edge["source"]: + source_teleport = teleport break - if not route_exists: - prev_node["next"].append({ - "target": dest_node["id"], - "route": relative_path - }) + if source_teleport and source_teleport["region"] == region: + region_edges.append(edge) + if not region_edges: + print(f" 区域 {region} 没有现有路径,无法连接孤立目标点") + continue - # Add previous node to destination's prev array if not already there - if prev_node["id"] not in dest_node["prev"]: - dest_node["prev"].append(prev_node["id"]) + # 从每条边的路径中提取区域和编号 + route_info = [] + for edge in region_edges: + route = edge["route"] + file_name = os.path.basename(route) + result = parse_region_area_number(file_name) + if len(result) == 5: # 特殊格式 + region_name, region_num, area, route_num, route_sub_num = result + else: # 标准格式 + region_name, region_num, area, route_num = result + route_sub_num = None + + if region_name and region_num and area and route_num: + info = { + "edge": edge, + "region_name": region_name, + "region_num": region_num, + "area": area, + "route_num": route_num, + "file_name": file_name + } + if route_sub_num is not None: + info["route_sub_num"] = route_sub_num + route_info.append(info) + + # 按区域和地区分组 + area_routes = {} + for info in route_info: + key = f"{info['region_name']}{info['region_num']}-{info['area']}" + if key not in area_routes: + area_routes[key] = [] + area_routes[key].append(info) + + # 对每个地区内的路线按编号排序 + for key, routes in area_routes.items(): + routes.sort(key=lambda x: x["route_num"]) + + # 查找区域内每个孤立目标点附近的路径 + for orphan in targets: + print(f" 处理目标点 ID={orphan['id']}, 坐标=({orphan['position']['x']}, {orphan['position']['y']})") + + # 找到最近的传送点 + nearest_teleport = None + min_distance = float('inf') + + for teleport in new_data["teleports"]: + if teleport["region"] == orphan["region"]: + distance = calculate_distance( + teleport["position"]["x"], teleport["position"]["y"], + orphan["position"]["x"], orphan["position"]["y"] + ) + + if distance < min_distance: + min_distance = distance + nearest_teleport = teleport + + if not nearest_teleport: + print(f" 未找到区域 {orphan['region']} 内的传送点") + continue + + # 查找以这个传送点为起点的所有路径 + teleport_routes = [] + for key, routes in area_routes.items(): + for info in routes: + if info["edge"]["source"] == nearest_teleport["id"]: + teleport_routes.append(info) + + if not teleport_routes: + print(f" 未找到以传送点 ID={nearest_teleport['id']} 为起点的路径") + continue + + # 按路线编号排序 + teleport_routes.sort(key=lambda x: x["route_num"]) + + # 找到编号最大的路径 + last_route = teleport_routes[-1] + next_num = last_route["route_num"] + 1 + print(f" 找到传送点 ID={nearest_teleport['id']} 的最后一条路径: {last_route['file_name']}") + + # 检查是否是特殊格式路径 + if "-" in last_route['area']: + # 特殊格式路径(如"清泉镇-4") + area_parts = last_route['area'].split("-") + if len(area_parts) == 2: + print(f" 建议手动创建新路径: {last_route['region_name']}{last_route['region_num']}-{area_parts[0]}-{area_parts[1]}-{next_num}.json") + else: + print(f" 建议手动创建新路径: {last_route['region_name']}{last_route['region_num']}-{last_route['area']}-{next_num}.json") + else: + # 标准格式路径 + print(f" 建议手动创建新路径: {last_route['region_name']}{last_route['region_num']}-{last_route['area']}-{next_num}.json") + + print(f" 从传送点 ({nearest_teleport['position']['x']}, {nearest_teleport['position']['y']}) 到目标点 ({orphan['position']['x']}, {orphan['position']['y']})") + # 按区域排序传送点和地脉花 + print("\n按区域对节点进行排序...") - # Save to JSON file - ley_line_data = {"node": nodes} - output_path = os.path.join(script_dir, "LeyLineOutcropData.json") + # 对传送点按区域排序 + new_data["teleports"] = sorted(new_data["teleports"], key=lambda x: get_region_sort_key(x["region"])) - with open(output_path, 'w', encoding='utf-8') as f: - json.dump(ley_line_data, f, ensure_ascii=False, indent=4) + # 对地脉花按区域排序 + new_data["blossoms"] = sorted(new_data["blossoms"], key=lambda x: get_region_sort_key(x["region"])) + # 更新排序后的ID(可选) + for i, teleport in enumerate(new_data["teleports"]): + teleport["id"] = i + 1 - print(f"Generated LeyLineOutcropData.json with {len(nodes)} nodes") - return ley_line_data + for i, blossom in enumerate(new_data["blossoms"]): + blossom["id"] = i + 1000 + # 更新边的引用 + for edge in new_data["edges"]: + # 查找新的source ID + for teleport in new_data["teleports"]: + if calculate_distance(teleport["position"]["x"], teleport["position"]["y"], + edge["sourcePosition"]["x"], edge["sourcePosition"]["y"]) < 10: + edge["source"] = teleport["id"] + break + + # 查找新的target ID + for blossom in new_data["blossoms"]: + if calculate_distance(blossom["position"]["x"], blossom["position"]["y"], + edge["targetPosition"]["x"], edge["targetPosition"]["y"]) < 10: + edge["target"] = blossom["id"] + break + + # 在更新ID后删除位置信息 + print("\n删除边数据中的位置信息...") + for edge in new_data["edges"]: + if "sourcePosition" in edge: + del edge["sourcePosition"] + if "targetPosition" in edge: + del edge["targetPosition"] + + # 按照target的顺序排列edges + print("\n按照目标节点(target)的顺序排列边...") + new_data["edges"] = sorted(new_data["edges"], key=lambda x: x["target"]) + + # 创建节点到节点的顺序边 + sequential_edges_count = create_sequential_edges(new_data) + + # 重新排序所有边(包括新的顺序边) + print("\n重新排序所有边...") + new_data["edges"] = sorted(new_data["edges"], key=lambda x: (x.get("type", "teleport"), x["target"])) + + # 重建索引 + new_data["indexes"] = { + "edgesBySource": {}, + "edgesByTarget": {} + } + + for edge in new_data["edges"]: + source_id = edge["source"] + target_id = edge["target"] + + if str(source_id) not in new_data["indexes"]["edgesBySource"]: + new_data["indexes"]["edgesBySource"][str(source_id)] = [] + new_data["indexes"]["edgesBySource"][str(source_id)].append(target_id) + + if str(target_id) not in new_data["indexes"]["edgesByTarget"]: + new_data["indexes"]["edgesByTarget"][str(target_id)] = [] + new_data["indexes"]["edgesByTarget"][str(target_id)].append(source_id) + + # 保存新数据结构 + output_file = os.path.join(script_dir, "LeyLineOutcropData.json") + with open(output_file, 'w', encoding='utf-8') as f: + json.dump(new_data, f, ensure_ascii=False, indent=2) + print(f"\n已生成新的数据结构: {output_file}") + print(f"传送点数量: {len(new_data['teleports'])}") + print(f"地脉花数量: {len(new_data['blossoms'])}") + print(f"总节点数量: {len(new_data['teleports']) + len(new_data['blossoms'])}") + print(f"传送点到地脉花边数量: {len([e for e in new_data['edges'] if e.get('type', 'teleport') == 'teleport'])}") + print(f"节点间顺序边数量: {sequential_edges_count}") + print(f"总边数量: {len(new_data['edges'])}") + print(f"区域排序顺序: {', '.join([k for k, v in sorted(REGION_ORDER.items(), key=lambda item: item[1]) if v < 99])}") + # 报告孤立目标点 + remaining_orphans = 0 + orphaned_blossoms = [] + for blossom in new_data["blossoms"]: + target_id = blossom["id"] + has_edge = False + for edge in new_data["edges"]: + if edge["target"] == target_id: + has_edge = True + break + if not has_edge: + remaining_orphans += 1 + orphaned_blossoms.append(blossom) + + if remaining_orphans > 0: + print(f"\n注意: 仍有 {remaining_orphans} 个目标点没有入边") + print("这些目标点按区域排序如下:") + # 按区域分组展示孤立目标点 + orphaned_by_region = {} + for orphan in orphaned_blossoms: + region = orphan["region"] + base_region = re.match(r"^([^0-9]+)", region) + if base_region: + base_region = base_region.group(1) + if base_region not in orphaned_by_region: + orphaned_by_region[base_region] = [] + orphaned_by_region[base_region].append(orphan) + + # 按照指定顺序显示区域 + for region_name, _ in sorted(REGION_ORDER.items(), key=lambda item: item[1]): + if region_name in orphaned_by_region: + print(f"\n {region_name}区域的孤立目标点:") + for orphan in orphaned_by_region[region_name]: + print(f" ID={orphan['id']}, 区域={orphan['region']}, 坐标=({orphan['position']['x']}, {orphan['position']['y']})") + + print("\n请按照之前的建议手动创建连续编号的路径文件") + else: + print("\n✓ 所有目标点都至少有一条入边") + + return new_data + +def create_sequential_edges(new_data): + """创建节点到节点的顺序边,实现正确的分支逻辑 + + 正确的分支规则: + 1. 主路线到分支: 蒙德2-3 → 蒙德2-4-1, 蒙德2-4-2 + 2. 分支到同序号分支: 蒙德2-4-1 → 蒙德2-5-1 (优先) → 蒙德2-5 (备选) → 终点 + 3. 分支到同序号分支: 蒙德2-4-2 → 蒙德2-5-2 (优先) → 蒙德2-5 (备选) → 终点 + 4. 分支内部不连接: 蒙德2-4-1 和 蒙德2-4-2 之间不相互连接 + 5. 主路线到主路线: 当没有分支时的直接连接 + + 基于实际路径文件查找对应的路线 + """ + print("\n创建节点到节点的顺序边...") + + script_dir = os.path.dirname(os.path.abspath(__file__)) + pathing_dir = os.path.join(script_dir, "assets", "pathing") + + # 按基本区域分组地脉花节点(区域名+区域编号,如"蒙德2") + region_groups = {} + for blossom in new_data["blossoms"]: + region = blossom["region"] + parts = region.split("-") + if len(parts) >= 2: + # 提取基本区域名:区域名+区域编号(如"蒙德2") + import re + match = re.match(r'^([^0-9]+)(\d+)', parts[0]) + if match: + region_name = match.group(1) # 如 "蒙德" + region_num = match.group(2) # 如 "2" + base_region = region_name + region_num # 如 "蒙德2" + if base_region not in region_groups: + region_groups[base_region] = [] + region_groups[base_region].append(blossom) + + # 创建地脉花节点的映射:region -> blossom + region_to_blossom = {} + for blossom in new_data["blossoms"]: + region_to_blossom[blossom["region"]] = blossom + + # 收集所有存在的路径文件 + available_routes = {} + for root, _, files in os.walk(pathing_dir): + for file in sorted(files): + if not file.endswith('.json') or 'rerun' in file or 'rerun' in root: + continue + if "target" in root.split(os.path.sep): + continue + + relative_path = os.path.relpath(os.path.join(root, file), script_dir) + relative_path = relative_path.replace("\\", "/") + available_routes[file] = relative_path + + sequential_edges = [] + + # 为每个区域创建顺序边 + for base_region, blossoms in region_groups.items(): + print(f"\n处理区域: {base_region}") + + # 将节点分为主路线和分支路线 + main_routes = {} # {route_num: blossom} + branch_routes = {} # {route_num: {branch_num: blossom}} + + for blossom in blossoms: + region = blossom["region"] + parts = region.split("-") + + if len(parts) == 2: # 主路线格式:"蒙德2-3" + try: + route_num = int(parts[1]) + main_routes[route_num] = blossom + print(f" 主路线: {region} (路线{route_num})") + except ValueError: + print(f" 警告:无法解析主路线编号: {region}") + + elif len(parts) == 3: # 分支路线格式:"蒙德2-4-1" + try: + route_num = int(parts[1]) + branch_num = int(parts[2]) + if route_num not in branch_routes: + branch_routes[route_num] = {} + branch_routes[route_num][branch_num] = blossom + print(f" 分支路线: {region} (路线{route_num}, 分支{branch_num})") + except ValueError: + print(f" 警告:无法解析分支路线编号: {region}") + + print(f" 找到 {len(main_routes)} 个主路线,{len(branch_routes)} 个分支组") + # 辅助函数:查找路径文件 + def find_route_file(source_region, target_region): + # 从目标区域推断文件名 + result = None + print(f" 查找路径文件: {source_region} → {target_region}") + + for blossom in new_data["blossoms"]: + if blossom["region"] == target_region: + # 尝试通过目标区域构造文件名 + parts = target_region.split("-") + print(f" 目标区域部分: {parts}") + + if len(parts) == 2: # 主路线 + # 例如: 蒙德2-3 -> 蒙德2-xxx-3.json + pattern = f"-{parts[1]}.json" + print(f" 主路线模式: {pattern}") + for filename in available_routes.keys(): + if pattern in filename and parts[0] in filename: + result = available_routes[filename] + print(f" 找到匹配文件: {filename} -> {result}") + break + elif len(parts) == 3: # 分支路线 + # 例如: 蒙德2-4-1 -> 蒙德2-xxx-4-1.json + pattern = f"-{parts[1]}-{parts[2]}.json" + print(f" 分支路线模式: {pattern}") + for filename in available_routes.keys(): + if pattern in filename and parts[0] in filename: + result = available_routes[filename] + print(f" 找到匹配文件: {filename} -> {result}") + break + + if not result: + print(f" 警告:未找到匹配的路径文件") + print(f" 可用文件: {list(available_routes.keys())[:10]}...") # 只显示前10个 + break + return result# 1. 创建主路线到分支路线的连接 + for main_route_num, main_blossom in main_routes.items(): + # 找到下一个路线号,看是否有分支 + next_route_num = main_route_num + 1 + + if next_route_num in branch_routes: + # 连接到下一个路线号的所有分支 + for branch_num, branch_blossom in branch_routes[next_route_num].items(): + route_file = find_route_file(main_blossom["region"], branch_blossom["region"]) + + if route_file: + edge = { + "source": main_blossom["id"], + "target": branch_blossom["id"], + "route": route_file + } + sequential_edges.append(edge) + print(f" 主路线到分支: {main_blossom['region']} → {branch_blossom['region']}") + + # 2. 创建分支到下一个分支的连接(同序号优先) + for route_num, branches in branch_routes.items(): + next_route_num = route_num + 1 + + for branch_num, branch_blossom in branches.items(): + # 优先连接到同序号的下一个分支 + target_found = False + + # 第一优先级:同序号分支 (蒙德2-4-1 → 蒙德2-5-1) + if next_route_num in branch_routes and branch_num in branch_routes[next_route_num]: + target_blossom = branch_routes[next_route_num][branch_num] + route_file = find_route_file(branch_blossom["region"], target_blossom["region"]) + + if route_file: + edge = { + "source": branch_blossom["id"], + "target": target_blossom["id"], + "route": route_file + } + sequential_edges.append(edge) + print(f" 分支到同序号分支: {branch_blossom['region']} → {target_blossom['region']}") + target_found = True + + # 第二优先级:主路线 (蒙德2-4-1 → 蒙德2-5) + if not target_found and next_route_num in main_routes: + target_blossom = main_routes[next_route_num] + route_file = find_route_file(branch_blossom["region"], target_blossom["region"]) + + if route_file: + edge = { + "source": branch_blossom["id"], + "target": target_blossom["id"], + "route": route_file + } + sequential_edges.append(edge) + print(f" 分支到主路线: {branch_blossom['region']} → {target_blossom['region']}") + target_found = True + + # 如果没有找到目标,则为路线终点 + if not target_found: + print(f" 分支终点: {branch_blossom['region']} (无下一个目标)") + + # 3. 创建主路线到主路线的连接(当没有分支时) + sorted_main_routes = sorted(main_routes.keys()) + for i in range(len(sorted_main_routes) - 1): + current_route = sorted_main_routes[i] + next_route = sorted_main_routes[i + 1] + + # 只有在下一个路线没有分支时,才创建主路线到主路线的连接 + if next_route not in branch_routes: + source_blossom = main_routes[current_route] + target_blossom = main_routes[next_route] + route_file = find_route_file(source_blossom["region"], target_blossom["region"]) + + if route_file: + edge = { + "source": source_blossom["id"], + "target": target_blossom["id"], + "route": route_file + } + sequential_edges.append(edge) + print(f" 主路线连接: {source_blossom['region']} → {target_blossom['region']}") + + # 将新的顺序边添加到数据中 + new_data["edges"].extend(sequential_edges) + print(f"\n总共创建了 {len(sequential_edges)} 条顺序边") + + return len(sequential_edges) + +def test_filename_parsing(): + """测试文件名解析功能,确保能正确处理各种格式""" + test_files = [ + "蒙德1-风啸山岭-1.json", # 标准格式 + "璃月3-轻策庄-2.json", # 标准格式 + "蒙德2-清泉镇-4-1.json", # 特殊格式(双连字符数字) + "须弥2-须弥城-3-2.json", # 特殊格式 + "纳塔1-区域-5.5.json" # 小数点路线编号 + ] + + print("测试文件名解析结果:") + for filename in test_files: + result = parse_region_area_number(filename) + if len(result) == 5: # 特殊格式 + region_name, region_num, area, route_num, route_sub_num = result + print(f"文件: {filename} (特殊格式)") + print(f" 区域名称: {region_name}") + print(f" 区域编号: {region_num}") + print(f" 地区: {area}") + print(f" 路线编号: {route_num}") + print(f" 路线子编号: {route_sub_num}") + else: # 标准格式 + region_name, region_num, area, route_num = result + print(f"文件: {filename} (标准格式)") + print(f" 区域名称: {region_name}") + print(f" 区域编号: {region_num}") + print(f" 地区: {area}") + print(f" 路线编号: {route_num}") + # 测试格式化逻辑 + if region_name and region_num and route_num: + if len(result) == 5: # 特殊格式 + route_sub_num = result[4] + # 特殊格式显示为: 蒙德2-5-1 (区域名-区域编号-路线编号-路线子编号) + formatted = f"{region_name}{region_num}-{int(route_num)}-{int(route_sub_num)}" + else: # 标准格式 + # 标准格式显示为: 枫丹1-1 (区域名-区域编号-路线编号) + formatted = f"{region_name}{region_num}-{int(route_num)}" + print(f" 格式化区域: {formatted}") + else: + print(f" 解析失败") + print("") if __name__ == "__main__": - generate_ley_line_data() \ No newline at end of file + # 测试文件名解析 + if len(sys.argv) > 1 and sys.argv[1] == "--test": + test_filename_parsing() + else: + generate_new_data_structure_from_pathing() + diff --git a/repo/js/AutoLeyLineOutcrop/README.md b/repo/js/AutoLeyLineOutcrop/README.md index b8f4cc4f..031a5f97 100644 --- a/repo/js/AutoLeyLineOutcrop/README.md +++ b/repo/js/AutoLeyLineOutcrop/README.md @@ -249,7 +249,7 @@ wgc的bug,请使用bitblt截图方式,脚本只支持这个 8 | 第一波:大型冰史莱姆x2
第二波:大型水史莱姆x3 9 | 第一波:大型火史莱姆x2、火史莱姆x3
第二波:炽热骗骗花x2 -- [ ] 7. 遁玉陵 +- [√] 7. 遁玉陵 **地脉花总数:7** diff --git a/repo/js/AutoLeyLineOutcrop/__pycache__/generate_data_format.cpython-313.pyc b/repo/js/AutoLeyLineOutcrop/__pycache__/generate_data_format.cpython-313.pyc deleted file mode 100644 index 41bfc6dceebfe7e06c560f893c3a1f85ec896eb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23053 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 aR(vi=y(UTjM@h*wN!i^fLY#u>^1lK7uGnb+ diff --git a/repo/js/AutoLeyLineOutcrop/generate_data_format.py b/repo/js/AutoLeyLineOutcrop/generate_data_format.py deleted file mode 100644 index ab146f28..00000000 --- a/repo/js/AutoLeyLineOutcrop/generate_data_format.py +++ /dev/null @@ -1,859 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -import json -import os -import sys -import re - -def format_coord(num): - return round(float(num), 2) - -def calculate_distance(x1, y1, x2, y2): - return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5 - -# 定义区域排序顺序 -REGION_ORDER = { - "蒙德": 1, - "璃月": 2, - "稻妻": 3, - "须弥": 4, - "枫丹": 5, - "纳塔": 6, - "未知区域": 99 # 未知区域放最后 -} - -def get_region_sort_key(region_name): - """获取区域的排序键值,用于排序""" - # 从完整区域名称(如"枫丹1-1")中提取基本区域名称(如"枫丹") - base_region = re.match(r"^([^0-9]+)", region_name) - if base_region: - base_region = base_region.group(1) - return REGION_ORDER.get(base_region, 99) - return 99 - -def normalize_region_name(region_name, region_num, route_num, route_sub_num=None): - """规范化区域名称,确保命名一致性 - 例如: - - 标准格式: 蒙德3, 奔狼领, 2 -> 蒙德3-2 - - 特殊格式: 蒙德2, 清泉镇, 4, 1 -> 蒙德2-4-1 - """ - if route_sub_num is not None: - # 特殊格式 - return f"{region_name}{region_num}-{route_num}-{route_sub_num}" - else: - # 标准格式 - return f"{region_name}{region_num}-{route_num}" - -def is_same_region_base(region1, region2): - """检查两个区域名称是否属于同一基本区域 - 例如,"蒙德2-4-1"和"蒙德2-4-2"属于同一基本区域"蒙德2-4" - """ - # 提取区域名称的基本部分(例如从"蒙德2-4-1"提取"蒙德2-4") - base_region1 = re.match(r"^([^-]+-\d+)", region1) - base_region2 = re.match(r"^([^-]+-\d+)", region2) - - return (base_region1 and base_region2 and - base_region1.group(1) == base_region2.group(1)) - -def parse_region_area_number(filename): - """从文件名解析区域、地区和编号 - 支持两种格式: - 1. 标准格式: 蒙德3-奔狼领-2.json -> ("蒙德", 3, "奔狼领", 2) - 2. 特殊格式: 蒙德2-清泉镇-4-1.json -> ("蒙德", 2, "清泉镇", 4, 1) - """ - # 先尝试匹配特殊格式(带有额外连字符的格式) - special_pattern = r"^([^0-9]+)(\d+)-(.+)-(\d+)-(\d+(?:\.\d+)?)\.json$" - match = re.match(special_pattern, filename) - if match: - region_name = match.group(1) - region_num = int(match.group(2)) - area = match.group(3) - route_num = int(match.group(4)) - route_sub_num = int(match.group(5)) - return region_name, region_num, area, route_num, route_sub_num - - # 如果不是特殊格式,尝试匹配标准格式 - standard_pattern = r"^([^0-9]+)(\d+)-(.+)-(\d+(?:\.\d+)?)\.json$" - match = re.match(standard_pattern, filename) - if match: - region_name = match.group(1) - region_num = int(match.group(2)) - area = match.group(3) - route_num = int(match.group(4)) - return region_name, region_num, area, route_num - - # 如果都不匹配,返回默认值 - print(f"警告:无法解析文件名 {filename}") - return None, None, None, None - -def generate_new_data_structure_from_pathing(): - """直接从assets/pathing目录读取文件生成新的数据结构""" - # 获取脚本所在目录 - script_dir = os.path.dirname(os.path.abspath(__file__)) - pathing_dir = os.path.join(script_dir, "assets", "pathing") - target_dir = os.path.join(pathing_dir, "target") - - # 检查目录是否存在 - if not os.path.exists(pathing_dir): - print(f"错误:找不到路径目录 {pathing_dir}") - return None - # 初始化新数据结构,分开存储 blossom 和 teleport - new_data = { - "teleports": [], # 传送点节点 - "blossoms": [], # 地脉花节点 - "edges": [], # 边集合 - "indexes": { - "edgesBySource": {}, - "edgesByTarget": {} - } - } - # 创建独立的ID计数器和节点映射 - next_teleport_id = 1 # 传送点专用ID计数器 - next_blossom_id = 1000 # 地脉花专用ID计数器 - teleport_nodes = {} # 按坐标存储传送点节点 (x, y) -> node_id - target_nodes = {} # 按坐标存储目标点节点 (x, y) -> node_id - - # 创建文件路径映射 - file_paths = {} - - # 第一遍:读取所有路径文件并创建节点 - print("第一遍:读取路径文件并创建节点...") - for root, _, files in os.walk(pathing_dir): - for file in sorted(files): - # 跳过非JSON文件和重运行文件 - if not file.endswith('.json') or 'rerun' in file or 'rerun' in root: - continue - - # 跳过target目录 - if "target" in root.split(os.path.sep): - continue - - file_path = os.path.join(root, file) - - try: - with open(file_path, 'r', encoding='utf-8') as f: - path_data = json.load(f) - - # 记录文件路径 - relative_path = os.path.relpath(file_path, script_dir) - relative_path = relative_path.replace("\\", "/") - file_paths[file] = relative_path - - # 检查文件是否有position数据 - if "positions" not in path_data or not path_data["positions"]: - continue - - # 获取第一个位置点(通常是传送点) - first_pos = path_data["positions"][0] - if "type" in first_pos and first_pos["type"] == "teleport": - x = format_coord(first_pos["x"]) - y = format_coord(first_pos["y"]) # 解析区域信息 - result = parse_region_area_number(file) - if len(result) == 5: # 特殊格式 - region_name, region_num, _, _, _ = result - else: # 标准格式或无法解析 - region_name, region_num, _, _ = result - # 传送点仅显示区域名称,不显示编号 - region = f"{region_name}" if region_name else "未知区域" - # 检查是否已存在相同坐标的传送点 - existing_node = False - for coord, node_id in teleport_nodes.items(): - if calculate_distance(coord[0], coord[1], x, y) < 10: # 将阈值从50降低到10 - existing_node = True - break - if not existing_node: # 创建新的传送点节点 - teleport_node = { - "id": next_teleport_id, - "region": region, - "position": {"x": x, "y": y} - } - new_data["teleports"].append(teleport_node) - teleport_nodes[(x, y)] = next_teleport_id - next_teleport_id += 1 - print(f" 创建传送点: ID={teleport_node['id']}, 区域={region}, 坐标=({x}, {y})") - except Exception as e: - print(f" 警告:处理文件 {file} 时出错: {e}") - - # 第二遍:读取target目录文件并创建目标节点 - print("\n第二遍:读取target文件并创建目标节点...") - for file in sorted(os.listdir(target_dir)): - if not file.endswith('.json'): - continue - - file_path = os.path.join(target_dir, file) - - try: - with open(file_path, 'r', encoding='utf-8') as f: - target_data = json.load(f) - # 检查文件是否有position数据 - if "positions" not in target_data or not target_data["positions"]: - continue - - # 获取第一个位置点(通常是目标点) - target_pos = target_data["positions"][0] - x = format_coord(target_pos["x"]) - y = format_coord(target_pos["y"]) - result = parse_region_area_number(file) - if len(result) == 5: # 特殊格式 - region_name, region_num, area, route_num, route_sub_num = result - # 使用规范化函数来生成区域名 - region = normalize_region_name(region_name, region_num, route_num, route_sub_num) - else: # 标准格式或无法解析 - region_name, region_num, area, route_num = result - # 使用规范化函数来生成区域名 - region = normalize_region_name(region_name, region_num, route_num) if region_name and region_num and route_num else "未知区域" # 检查是否已存在相同坐标的目标点和相同区域名 - existing_node = False - existing_node_id = None - for coord, node_id in target_nodes.items(): - if calculate_distance(coord[0], coord[1], x, y) < 10: # 阈值为10 - # 找到这个节点,检查它的区域是否与当前区域相同 - for blossom in new_data["blossoms"]: - if blossom["id"] == node_id: - # 检查区域名完全相同 - if blossom["region"] == region: - existing_node = True - existing_node_id = node_id - break - - # 检查区域名基本部分是否相同(如"蒙德2-4"和"蒙德2-4-2") - # 提取区域名称的基本部分(例如从"蒙德2-4-1"提取"蒙德2-4") - current_base_region = re.match(r"^([^-]+-\d+)", region) - existing_base_region = re.match(r"^([^-]+-\d+)", blossom["region"]) - - if (current_base_region and existing_base_region and - current_base_region.group(1) == existing_base_region.group(1)): - print(f" 注意: 坐标 ({x}, {y}) 与已存在节点 '{blossom['region']}' 区域基本部分相同,视为同一节点") - existing_node = True - existing_node_id = node_id - break - - if not existing_node: - print(f" 注意: 坐标 ({x}, {y}) 附近有另一个区域的节点,但将创建新节点") - - if not existing_node: - # 创建新的目标点节点 - target_node = { - "id": next_blossom_id, - "region": region, - "position": {"x": x, "y": y} - } - new_data["blossoms"].append(target_node) - target_nodes[(x, y)] = next_blossom_id - next_blossom_id += 1 - print(f" 创建目标点: ID={target_node['id']}, 区域={region}, 坐标=({x}, {y})") - except Exception as e: - print(f" 警告:处理目标文件 {file} 时出错: {e}") - - # 第三遍:创建边和索引 - print("\n第三遍:创建边和索引...") - for file in sorted(os.listdir(pathing_dir)): - if not file.endswith('.json') or 'rerun' in file: - continue - - # 跳过target和rerun目录中的文件 - if file not in file_paths: - continue - # 解析文件名 - result = parse_region_area_number(file) - if len(result) == 5: # 特殊格式 - region_name, region_num, area, route_num, route_sub_num = result - else: # 标准格式 - region_name, region_num, area, route_num = result - route_sub_num = None - - if not region_name or not region_num or not area or not route_num: - continue - - # 构建对应的target文件名 - target_file = file - - # 检查target文件是否存在 - target_path = os.path.join(target_dir, target_file) - if not os.path.exists(target_path): - print(f" 警告:找不到对应的目标文件 {target_file}") - continue - - try: - # 读取路径文件获取源传送点 - file_path = os.path.join(pathing_dir, file) - with open(file_path, 'r', encoding='utf-8') as f: - path_data = json.load(f) - - # 读取目标文件获取目标点 - with open(target_path, 'r', encoding='utf-8') as f: - target_data = json.load(f) - - # 获取传送点坐标 - if "positions" in path_data and path_data["positions"]: - first_pos = path_data["positions"][0] - source_x = format_coord(first_pos["x"]) - source_y = format_coord(first_pos["y"]) - - # 获取目标点坐标 - if "positions" in target_data and target_data["positions"]: - target_pos = target_data["positions"][0] - target_x = format_coord(target_pos["x"]) - target_y = format_coord(target_pos["y"]) # 查找源节点ID - source_id = None - for coord, node_id in teleport_nodes.items(): - if calculate_distance(coord[0], coord[1], source_x, source_y) < 10: # 将阈值从50降低到10 - source_id = node_id - break - - # 查找目标节点ID - target_id = None - for coord, node_id in target_nodes.items(): - if calculate_distance(coord[0], coord[1], target_x, target_y) < 10: # 将阈值从50降低到10 - target_id = node_id - break - - # 如果找到了源节点和目标节点,创建边 - if source_id and target_id: # 添加边 - edge = { - "source": source_id, - "target": target_id, - "route": file_paths[file], - # 保存原始位置信息,用于在排序后更新ID(稍后会删除) - "sourcePosition": { - "x": source_x, - "y": source_y - }, - "targetPosition": { - "x": target_x, - "y": target_y - } - } - new_data["edges"].append(edge) - - # 更新索引 - if str(source_id) not in new_data["indexes"]["edgesBySource"]: - new_data["indexes"]["edgesBySource"][str(source_id)] = [] - new_data["indexes"]["edgesBySource"][str(source_id)].append(target_id) - - if str(target_id) not in new_data["indexes"]["edgesByTarget"]: - new_data["indexes"]["edgesByTarget"][str(target_id)] = [] - new_data["indexes"]["edgesByTarget"][str(target_id)].append(source_id) - - print(f" 创建边: {source_id} -> {target_id}, 路径={file_paths[file]}") - except Exception as e: - print(f" 警告:处理边关系时出错 {file}: {e}") # 检查每个目标点是否至少有一条有向边 - print("\n检查目标点的连通性...") - orphaned_targets = [] - for blossom in new_data["blossoms"]: - target_id = blossom["id"] - - # 检查是否有边指向此目标点 - has_edge = False - for edge in new_data["edges"]: - if edge["target"] == target_id: - has_edge = True - break - - if not has_edge: - orphaned_targets.append(blossom) - print(f" 警告: 目标点 ID={target_id}, 区域={blossom['region']}, 坐标=({blossom['position']['x']}, {blossom['position']['y']}) 没有入边") - - # 处理没有边的目标点 - 尝试使用连续编号的路径 - if orphaned_targets: - print(f"\n尝试为 {len(orphaned_targets)} 个孤立目标点寻找连续路径...") - - # 先按区域分组目标点 - region_targets = {} - for orphan in orphaned_targets: - region = orphan["region"] - if region not in region_targets: - region_targets[region] = [] - region_targets[region].append(orphan) - - # 然后按区域处理 - for region, targets in region_targets.items(): - print(f"\n处理区域 {region} 的 {len(targets)} 个孤立目标点...") - - # 获取该区域的所有边 - region_edges = [] - for edge in new_data["edges"]: - # 找到起点对应的传送点 - source_teleport = None - for teleport in new_data["teleports"]: - if teleport["id"] == edge["source"]: - source_teleport = teleport - break - - if source_teleport and source_teleport["region"] == region: - region_edges.append(edge) - if not region_edges: - print(f" 区域 {region} 没有现有路径,无法连接孤立目标点") - continue - - # 从每条边的路径中提取区域和编号 - route_info = [] - for edge in region_edges: - route = edge["route"] - file_name = os.path.basename(route) - result = parse_region_area_number(file_name) - if len(result) == 5: # 特殊格式 - region_name, region_num, area, route_num, route_sub_num = result - else: # 标准格式 - region_name, region_num, area, route_num = result - route_sub_num = None - - if region_name and region_num and area and route_num: - info = { - "edge": edge, - "region_name": region_name, - "region_num": region_num, - "area": area, - "route_num": route_num, - "file_name": file_name - } - if route_sub_num is not None: - info["route_sub_num"] = route_sub_num - route_info.append(info) - - # 按区域和地区分组 - area_routes = {} - for info in route_info: - key = f"{info['region_name']}{info['region_num']}-{info['area']}" - if key not in area_routes: - area_routes[key] = [] - area_routes[key].append(info) - - # 对每个地区内的路线按编号排序 - for key, routes in area_routes.items(): - routes.sort(key=lambda x: x["route_num"]) - - # 查找区域内每个孤立目标点附近的路径 - for orphan in targets: - print(f" 处理目标点 ID={orphan['id']}, 坐标=({orphan['position']['x']}, {orphan['position']['y']})") - - # 找到最近的传送点 - nearest_teleport = None - min_distance = float('inf') - - for teleport in new_data["teleports"]: - if teleport["region"] == orphan["region"]: - distance = calculate_distance( - teleport["position"]["x"], teleport["position"]["y"], - orphan["position"]["x"], orphan["position"]["y"] - ) - - if distance < min_distance: - min_distance = distance - nearest_teleport = teleport - - if not nearest_teleport: - print(f" 未找到区域 {orphan['region']} 内的传送点") - continue - - # 查找以这个传送点为起点的所有路径 - teleport_routes = [] - for key, routes in area_routes.items(): - for info in routes: - if info["edge"]["source"] == nearest_teleport["id"]: - teleport_routes.append(info) - - if not teleport_routes: - print(f" 未找到以传送点 ID={nearest_teleport['id']} 为起点的路径") - continue - - # 按路线编号排序 - teleport_routes.sort(key=lambda x: x["route_num"]) - - # 找到编号最大的路径 - last_route = teleport_routes[-1] - next_num = last_route["route_num"] + 1 - print(f" 找到传送点 ID={nearest_teleport['id']} 的最后一条路径: {last_route['file_name']}") - - # 检查是否是特殊格式路径 - if "-" in last_route['area']: - # 特殊格式路径(如"清泉镇-4") - area_parts = last_route['area'].split("-") - if len(area_parts) == 2: - print(f" 建议手动创建新路径: {last_route['region_name']}{last_route['region_num']}-{area_parts[0]}-{area_parts[1]}-{next_num}.json") - else: - print(f" 建议手动创建新路径: {last_route['region_name']}{last_route['region_num']}-{last_route['area']}-{next_num}.json") - else: - # 标准格式路径 - print(f" 建议手动创建新路径: {last_route['region_name']}{last_route['region_num']}-{last_route['area']}-{next_num}.json") - - print(f" 从传送点 ({nearest_teleport['position']['x']}, {nearest_teleport['position']['y']}) 到目标点 ({orphan['position']['x']}, {orphan['position']['y']})") - # 按区域排序传送点和地脉花 - print("\n按区域对节点进行排序...") - - # 对传送点按区域排序 - new_data["teleports"] = sorted(new_data["teleports"], key=lambda x: get_region_sort_key(x["region"])) - - # 对地脉花按区域排序 - new_data["blossoms"] = sorted(new_data["blossoms"], key=lambda x: get_region_sort_key(x["region"])) - # 更新排序后的ID(可选) - for i, teleport in enumerate(new_data["teleports"]): - teleport["id"] = i + 1 - - for i, blossom in enumerate(new_data["blossoms"]): - blossom["id"] = i + 1000 - # 更新边的引用 - for edge in new_data["edges"]: - # 查找新的source ID - for teleport in new_data["teleports"]: - if calculate_distance(teleport["position"]["x"], teleport["position"]["y"], - edge["sourcePosition"]["x"], edge["sourcePosition"]["y"]) < 10: - edge["source"] = teleport["id"] - break - - # 查找新的target ID - for blossom in new_data["blossoms"]: - if calculate_distance(blossom["position"]["x"], blossom["position"]["y"], - edge["targetPosition"]["x"], edge["targetPosition"]["y"]) < 10: - edge["target"] = blossom["id"] - break - - # 在更新ID后删除位置信息 - print("\n删除边数据中的位置信息...") - for edge in new_data["edges"]: - if "sourcePosition" in edge: - del edge["sourcePosition"] - if "targetPosition" in edge: - del edge["targetPosition"] - - # 按照target的顺序排列edges - print("\n按照目标节点(target)的顺序排列边...") - new_data["edges"] = sorted(new_data["edges"], key=lambda x: x["target"]) - - # 创建节点到节点的顺序边 - sequential_edges_count = create_sequential_edges(new_data) - - # 重新排序所有边(包括新的顺序边) - print("\n重新排序所有边...") - new_data["edges"] = sorted(new_data["edges"], key=lambda x: (x.get("type", "teleport"), x["target"])) - - # 重建索引 - new_data["indexes"] = { - "edgesBySource": {}, - "edgesByTarget": {} - } - - for edge in new_data["edges"]: - source_id = edge["source"] - target_id = edge["target"] - - if str(source_id) not in new_data["indexes"]["edgesBySource"]: - new_data["indexes"]["edgesBySource"][str(source_id)] = [] - new_data["indexes"]["edgesBySource"][str(source_id)].append(target_id) - - if str(target_id) not in new_data["indexes"]["edgesByTarget"]: - new_data["indexes"]["edgesByTarget"][str(target_id)] = [] - new_data["indexes"]["edgesByTarget"][str(target_id)].append(source_id) - - # 保存新数据结构 - output_file = os.path.join(script_dir, "LeyLineOutcropData.json") - with open(output_file, 'w', encoding='utf-8') as f: - json.dump(new_data, f, ensure_ascii=False, indent=2) - print(f"\n已生成新的数据结构: {output_file}") - print(f"传送点数量: {len(new_data['teleports'])}") - print(f"地脉花数量: {len(new_data['blossoms'])}") - print(f"总节点数量: {len(new_data['teleports']) + len(new_data['blossoms'])}") - print(f"传送点到地脉花边数量: {len([e for e in new_data['edges'] if e.get('type', 'teleport') == 'teleport'])}") - print(f"节点间顺序边数量: {sequential_edges_count}") - print(f"总边数量: {len(new_data['edges'])}") - print(f"区域排序顺序: {', '.join([k for k, v in sorted(REGION_ORDER.items(), key=lambda item: item[1]) if v < 99])}") - # 报告孤立目标点 - remaining_orphans = 0 - orphaned_blossoms = [] - for blossom in new_data["blossoms"]: - target_id = blossom["id"] - has_edge = False - for edge in new_data["edges"]: - if edge["target"] == target_id: - has_edge = True - break - if not has_edge: - remaining_orphans += 1 - orphaned_blossoms.append(blossom) - - if remaining_orphans > 0: - print(f"\n注意: 仍有 {remaining_orphans} 个目标点没有入边") - print("这些目标点按区域排序如下:") - # 按区域分组展示孤立目标点 - orphaned_by_region = {} - for orphan in orphaned_blossoms: - region = orphan["region"] - base_region = re.match(r"^([^0-9]+)", region) - if base_region: - base_region = base_region.group(1) - if base_region not in orphaned_by_region: - orphaned_by_region[base_region] = [] - orphaned_by_region[base_region].append(orphan) - - # 按照指定顺序显示区域 - for region_name, _ in sorted(REGION_ORDER.items(), key=lambda item: item[1]): - if region_name in orphaned_by_region: - print(f"\n {region_name}区域的孤立目标点:") - for orphan in orphaned_by_region[region_name]: - print(f" ID={orphan['id']}, 区域={orphan['region']}, 坐标=({orphan['position']['x']}, {orphan['position']['y']})") - - print("\n请按照之前的建议手动创建连续编号的路径文件") - else: - print("\n✓ 所有目标点都至少有一条入边") - - return new_data - -def create_sequential_edges(new_data): - """创建节点到节点的顺序边,实现正确的分支逻辑 - - 正确的分支规则: - 1. 主路线到分支: 蒙德2-3 → 蒙德2-4-1, 蒙德2-4-2 - 2. 分支到同序号分支: 蒙德2-4-1 → 蒙德2-5-1 (优先) → 蒙德2-5 (备选) → 终点 - 3. 分支到同序号分支: 蒙德2-4-2 → 蒙德2-5-2 (优先) → 蒙德2-5 (备选) → 终点 - 4. 分支内部不连接: 蒙德2-4-1 和 蒙德2-4-2 之间不相互连接 - 5. 主路线到主路线: 当没有分支时的直接连接 - - 基于实际路径文件查找对应的路线 - """ - print("\n创建节点到节点的顺序边...") - - script_dir = os.path.dirname(os.path.abspath(__file__)) - pathing_dir = os.path.join(script_dir, "assets", "pathing") - - # 按基本区域分组地脉花节点(区域名+区域编号,如"蒙德2") - region_groups = {} - for blossom in new_data["blossoms"]: - region = blossom["region"] - parts = region.split("-") - if len(parts) >= 2: - # 提取基本区域名:区域名+区域编号(如"蒙德2") - import re - match = re.match(r'^([^0-9]+)(\d+)', parts[0]) - if match: - region_name = match.group(1) # 如 "蒙德" - region_num = match.group(2) # 如 "2" - base_region = region_name + region_num # 如 "蒙德2" - if base_region not in region_groups: - region_groups[base_region] = [] - region_groups[base_region].append(blossom) - - # 创建地脉花节点的映射:region -> blossom - region_to_blossom = {} - for blossom in new_data["blossoms"]: - region_to_blossom[blossom["region"]] = blossom - - # 收集所有存在的路径文件 - available_routes = {} - for root, _, files in os.walk(pathing_dir): - for file in sorted(files): - if not file.endswith('.json') or 'rerun' in file or 'rerun' in root: - continue - if "target" in root.split(os.path.sep): - continue - - relative_path = os.path.relpath(os.path.join(root, file), script_dir) - relative_path = relative_path.replace("\\", "/") - available_routes[file] = relative_path - - sequential_edges = [] - - # 为每个区域创建顺序边 - for base_region, blossoms in region_groups.items(): - print(f"\n处理区域: {base_region}") - - # 将节点分为主路线和分支路线 - main_routes = {} # {route_num: blossom} - branch_routes = {} # {route_num: {branch_num: blossom}} - - for blossom in blossoms: - region = blossom["region"] - parts = region.split("-") - - if len(parts) == 2: # 主路线格式:"蒙德2-3" - try: - route_num = int(parts[1]) - main_routes[route_num] = blossom - print(f" 主路线: {region} (路线{route_num})") - except ValueError: - print(f" 警告:无法解析主路线编号: {region}") - - elif len(parts) == 3: # 分支路线格式:"蒙德2-4-1" - try: - route_num = int(parts[1]) - branch_num = int(parts[2]) - if route_num not in branch_routes: - branch_routes[route_num] = {} - branch_routes[route_num][branch_num] = blossom - print(f" 分支路线: {region} (路线{route_num}, 分支{branch_num})") - except ValueError: - print(f" 警告:无法解析分支路线编号: {region}") - - print(f" 找到 {len(main_routes)} 个主路线,{len(branch_routes)} 个分支组") - # 辅助函数:查找路径文件 - def find_route_file(source_region, target_region): - # 从目标区域推断文件名 - result = None - print(f" 查找路径文件: {source_region} → {target_region}") - - for blossom in new_data["blossoms"]: - if blossom["region"] == target_region: - # 尝试通过目标区域构造文件名 - parts = target_region.split("-") - print(f" 目标区域部分: {parts}") - - if len(parts) == 2: # 主路线 - # 例如: 蒙德2-3 -> 蒙德2-xxx-3.json - pattern = f"-{parts[1]}.json" - print(f" 主路线模式: {pattern}") - for filename in available_routes.keys(): - if pattern in filename and parts[0] in filename: - result = available_routes[filename] - print(f" 找到匹配文件: {filename} -> {result}") - break - elif len(parts) == 3: # 分支路线 - # 例如: 蒙德2-4-1 -> 蒙德2-xxx-4-1.json - pattern = f"-{parts[1]}-{parts[2]}.json" - print(f" 分支路线模式: {pattern}") - for filename in available_routes.keys(): - if pattern in filename and parts[0] in filename: - result = available_routes[filename] - print(f" 找到匹配文件: {filename} -> {result}") - break - - if not result: - print(f" 警告:未找到匹配的路径文件") - print(f" 可用文件: {list(available_routes.keys())[:10]}...") # 只显示前10个 - break - return result# 1. 创建主路线到分支路线的连接 - for main_route_num, main_blossom in main_routes.items(): - # 找到下一个路线号,看是否有分支 - next_route_num = main_route_num + 1 - - if next_route_num in branch_routes: - # 连接到下一个路线号的所有分支 - for branch_num, branch_blossom in branch_routes[next_route_num].items(): - route_file = find_route_file(main_blossom["region"], branch_blossom["region"]) - - if route_file: - edge = { - "source": main_blossom["id"], - "target": branch_blossom["id"], - "route": route_file - } - sequential_edges.append(edge) - print(f" 主路线到分支: {main_blossom['region']} → {branch_blossom['region']}") - - # 2. 创建分支到下一个分支的连接(同序号优先) - for route_num, branches in branch_routes.items(): - next_route_num = route_num + 1 - - for branch_num, branch_blossom in branches.items(): - # 优先连接到同序号的下一个分支 - target_found = False - - # 第一优先级:同序号分支 (蒙德2-4-1 → 蒙德2-5-1) - if next_route_num in branch_routes and branch_num in branch_routes[next_route_num]: - target_blossom = branch_routes[next_route_num][branch_num] - route_file = find_route_file(branch_blossom["region"], target_blossom["region"]) - - if route_file: - edge = { - "source": branch_blossom["id"], - "target": target_blossom["id"], - "route": route_file - } - sequential_edges.append(edge) - print(f" 分支到同序号分支: {branch_blossom['region']} → {target_blossom['region']}") - target_found = True - - # 第二优先级:主路线 (蒙德2-4-1 → 蒙德2-5) - if not target_found and next_route_num in main_routes: - target_blossom = main_routes[next_route_num] - route_file = find_route_file(branch_blossom["region"], target_blossom["region"]) - - if route_file: - edge = { - "source": branch_blossom["id"], - "target": target_blossom["id"], - "route": route_file - } - sequential_edges.append(edge) - print(f" 分支到主路线: {branch_blossom['region']} → {target_blossom['region']}") - target_found = True - - # 如果没有找到目标,则为路线终点 - if not target_found: - print(f" 分支终点: {branch_blossom['region']} (无下一个目标)") - - # 3. 创建主路线到主路线的连接(当没有分支时) - sorted_main_routes = sorted(main_routes.keys()) - for i in range(len(sorted_main_routes) - 1): - current_route = sorted_main_routes[i] - next_route = sorted_main_routes[i + 1] - - # 只有在下一个路线没有分支时,才创建主路线到主路线的连接 - if next_route not in branch_routes: - source_blossom = main_routes[current_route] - target_blossom = main_routes[next_route] - route_file = find_route_file(source_blossom["region"], target_blossom["region"]) - - if route_file: - edge = { - "source": source_blossom["id"], - "target": target_blossom["id"], - "route": route_file - } - sequential_edges.append(edge) - print(f" 主路线连接: {source_blossom['region']} → {target_blossom['region']}") - - # 将新的顺序边添加到数据中 - new_data["edges"].extend(sequential_edges) - print(f"\n总共创建了 {len(sequential_edges)} 条顺序边") - - return len(sequential_edges) - -def test_filename_parsing(): - """测试文件名解析功能,确保能正确处理各种格式""" - test_files = [ - "蒙德1-风啸山岭-1.json", # 标准格式 - "璃月3-轻策庄-2.json", # 标准格式 - "蒙德2-清泉镇-4-1.json", # 特殊格式(双连字符数字) - "须弥2-须弥城-3-2.json", # 特殊格式 - "纳塔1-区域-5.5.json" # 小数点路线编号 - ] - - print("测试文件名解析结果:") - for filename in test_files: - result = parse_region_area_number(filename) - if len(result) == 5: # 特殊格式 - region_name, region_num, area, route_num, route_sub_num = result - print(f"文件: {filename} (特殊格式)") - print(f" 区域名称: {region_name}") - print(f" 区域编号: {region_num}") - print(f" 地区: {area}") - print(f" 路线编号: {route_num}") - print(f" 路线子编号: {route_sub_num}") - else: # 标准格式 - region_name, region_num, area, route_num = result - print(f"文件: {filename} (标准格式)") - print(f" 区域名称: {region_name}") - print(f" 区域编号: {region_num}") - print(f" 地区: {area}") - print(f" 路线编号: {route_num}") - # 测试格式化逻辑 - if region_name and region_num and route_num: - if len(result) == 5: # 特殊格式 - route_sub_num = result[4] - # 特殊格式显示为: 蒙德2-5-1 (区域名-区域编号-路线编号-路线子编号) - formatted = f"{region_name}{region_num}-{int(route_num)}-{int(route_sub_num)}" - else: # 标准格式 - # 标准格式显示为: 枫丹1-1 (区域名-区域编号-路线编号) - formatted = f"{region_name}{region_num}-{int(route_num)}" - print(f" 格式化区域: {formatted}") - else: - print(f" 解析失败") - print("") - - -if __name__ == "__main__": - # 测试文件名解析 - if len(sys.argv) > 1 and sys.argv[1] == "--test": - test_filename_parsing() - else: - generate_new_data_structure_from_pathing() - diff --git a/repo/js/AutoLeyLineOutcrop/orphan_handling.py b/repo/js/AutoLeyLineOutcrop/orphan_handling.py deleted file mode 100644 index 0eeaf8f3..00000000 --- a/repo/js/AutoLeyLineOutcrop/orphan_handling.py +++ /dev/null @@ -1,28 +0,0 @@ - if not region_edges: - print(f" 区域 {region} 没有现有路径,无法连接孤立目标点") - continue - - # 从每条边的路径中提取区域和编号 - route_info = [] - for edge in region_edges: - route = edge["route"] - file_name = os.path.basename(route) - result = parse_region_area_number(file_name) - if len(result) == 5: # 特殊格式 - region_name, region_num, area, route_num, route_sub_num = result - else: # 标准格式 - region_name, region_num, area, route_num = result - route_sub_num = None - - if region_name and region_num and area and route_num: - info = { - "edge": edge, - "region_name": region_name, - "region_num": region_num, - "area": area, - "route_num": route_num, - "file_name": file_name - } - if route_sub_num is not None: - info["route_sub_num"] = route_sub_num - route_info.append(info) diff --git a/repo/js/AutoLeyLineOutcrop/output.txt b/repo/js/AutoLeyLineOutcrop/output.txt deleted file mode 100644 index e5f6f6ed..00000000 --- a/repo/js/AutoLeyLineOutcrop/output.txt +++ /dev/null @@ -1,1370 +0,0 @@ -第一遍:读取路径文件并创建节点... - 创建传送点: ID=1, 区域=枫丹, 坐标=(4146.91, 2606.27) - 创建传送点: ID=2, 区域=枫丹, 坐标=(4375.5, 2280.05) - 创建传送点: ID=3, 区域=枫丹, 坐标=(4984.79, 4462.98) - 创建传送点: ID=4, 区域=枫丹, 坐标=(4498.18, 4710.79) - 创建传送点: ID=5, 区域=枫丹, 坐标=(4624.36, 4951.78) - 创建传送点: ID=6, 区域=枫丹, 坐标=(2873.54, 3512.04) - 创建传送点: ID=7, 区域=枫丹, 坐标=(3032.66, 3732.42) - 创建传送点: ID=8, 区域=枫丹, 坐标=(3917.29, 2576.43) - 创建传送点: ID=9, 区域=枫丹, 坐标=(4749.59, 2636.21) - 创建传送点: ID=10, 区域=枫丹, 坐标=(4689.61, 2429.43) - 创建传送点: ID=11, 区域=枫丹, 坐标=(4626.1, 2182.3) - 创建传送点: ID=12, 区域=璃月, 坐标=(207.48, 1573.01) - 创建传送点: ID=13, 区域=璃月, 坐标=(-321.55, 1473.33) - 创建传送点: ID=14, 区域=璃月, 坐标=(897.84, 583.5) - 创建传送点: ID=15, 区域=璃月, 坐标=(1045.53, 950.63) - 创建传送点: ID=16, 区域=璃月, 坐标=(341.33, 548.08) - 创建传送点: ID=17, 区域=璃月, 坐标=(839.82, 1532.39) - 创建传送点: ID=18, 区域=璃月, 坐标=(489.8, 1435.14) - 创建传送点: ID=19, 区域=璃月, 坐标=(253.05, 1284.9) - 创建传送点: ID=20, 区域=璃月, 坐标=(2257.04, 934.92) - 创建传送点: ID=21, 区域=璃月, 坐标=(1433.37, 1288.0) - 创建传送点: ID=22, 区域=璃月, 坐标=(-164.59, 1182.45) - 创建传送点: ID=23, 区域=璃月, 坐标=(-188.52, 972.43) - 创建传送点: ID=24, 区域=璃月, 坐标=(-57.41, 656.93) - 创建传送点: ID=25, 区域=璃月, 坐标=(26.02, -112.29) - 创建传送点: ID=26, 区域=璃月, 坐标=(173.88, 389.47) - 创建传送点: ID=27, 区域=璃月, 坐标=(710.68, -772.49) - 创建传送点: ID=28, 区域=璃月, 坐标=(978.65, -353.56) - 创建传送点: ID=29, 区域=璃月, 坐标=(611.74, -284.65) - 创建传送点: ID=30, 区域=璃月, 坐标=(837.46, 235.15) - 创建传送点: ID=31, 区域=璃月, 坐标=(876.75, 587.25) - 创建传送点: ID=32, 区域=璃月, 坐标=(1665.91, 386.6) - 创建传送点: ID=33, 区域=璃月, 坐标=(1152.67, 141.57) - 创建传送点: ID=34, 区域=璃月, 坐标=(1389.08, 516.44) - 创建传送点: ID=35, 区域=稻妻, 坐标=(-4217.89, -2397.87) - 创建传送点: ID=36, 区域=稻妻, 坐标=(-4408.91, -2395.34) - 创建传送点: ID=37, 区域=稻妻, 坐标=(-3016.79, -3623.7) - 创建传送点: ID=38, 区域=稻妻, 坐标=(-3233.21, -3534.22) - 创建传送点: ID=39, 区域=稻妻, 坐标=(-3393.16, -3555.99) - 创建传送点: ID=40, 区域=稻妻, 坐标=(-3437.06, -3319.78) - 创建传送点: ID=41, 区域=稻妻, 坐标=(-2224.14, -4004.16) - 创建传送点: ID=42, 区域=稻妻, 坐标=(-1058.01, -3948.66) - 创建传送点: ID=43, 区域=稻妻, 坐标=(-1315.93, -3774.25) - 创建传送点: ID=44, 区域=稻妻, 坐标=(-3891.55, -4389.92) - 创建传送点: ID=45, 区域=稻妻, 坐标=(-3684.76, -4278.4) - 创建传送点: ID=46, 区域=纳塔, 坐标=(7796.08, -1873.18) - 创建传送点: ID=47, 区域=纳塔, 坐标=(7857.47, -1751.25) - 创建传送点: ID=48, 区域=纳塔, 坐标=(8291.35, -2922.46) - 创建传送点: ID=49, 区域=纳塔, 坐标=(8744.65, -3009.56) - 创建传送点: ID=50, 区域=纳塔, 坐标=(8706.46, -1575.02) - 创建传送点: ID=51, 区域=纳塔, 坐标=(8670.84, -1269.72) - 创建传送点: ID=52, 区域=纳塔, 坐标=(8201.95, -2288.75) - 创建传送点: ID=53, 区域=纳塔, 坐标=(8372.19, -2196.26) - 创建传送点: ID=54, 区域=纳塔, 坐标=(9038.74, -2429.33) - 创建传送点: ID=55, 区域=纳塔, 坐标=(9812.76, -2852.58) - 创建传送点: ID=56, 区域=纳塔, 坐标=(9282.7, -2163.58) - 创建传送点: ID=57, 区域=纳塔, 坐标=(9989.5, -1607.82) - 创建传送点: ID=58, 区域=纳塔, 坐标=(9548.24, -1116.54) - 创建传送点: ID=59, 区域=纳塔, 坐标=(9719.22, -851.99) - 创建传送点: ID=60, 区域=纳塔, 坐标=(9839.57, -1290.01) - 创建传送点: ID=61, 区域=蒙德, 坐标=(-1166.84, 2132.83) - 创建传送点: ID=62, 区域=蒙德, 坐标=(-1266.59, 1933.52) - 创建传送点: ID=63, 区域=蒙德, 坐标=(-914.82, 1795.51) - 创建传送点: ID=64, 区域=蒙德, 坐标=(-663.61, 1709.65) - 创建传送点: ID=65, 区域=蒙德, 坐标=(-578.76, 1853.42) - 创建传送点: ID=66, 区域=蒙德, 坐标=(-251.66, 2256.55) - 创建传送点: ID=67, 区域=蒙德, 坐标=(-385.84, 2297.22) - 创建传送点: ID=68, 区域=蒙德, 坐标=(-440.09, 2580.75) - 创建传送点: ID=69, 区域=蒙德, 坐标=(177.18, 2647.07) - 创建传送点: ID=70, 区域=蒙德, 坐标=(265.6, 2915.02) - 创建传送点: ID=71, 区域=蒙德, 坐标=(-1505.87, 2296.26) - 创建传送点: ID=72, 区域=蒙德, 坐标=(-1330.15, 2563.86) - 创建传送点: ID=73, 区域=蒙德, 坐标=(-1273.84, 2721.72) - 创建传送点: ID=74, 区域=蒙德, 坐标=(-1629.44, 2834.36) - 创建传送点: ID=75, 区域=蒙德, 坐标=(-1867.21, 1331.21) - 创建传送点: ID=76, 区域=蒙德, 坐标=(-1432.63, 1464.61) - 创建传送点: ID=77, 区域=须弥, 坐标=(2342.31, -4.68) - 创建传送点: ID=78, 区域=须弥, 坐标=(6615.13, 724.95) - 创建传送点: ID=79, 区域=须弥, 坐标=(6339.59, 738.39) - 创建传送点: ID=80, 区域=须弥, 坐标=(2806.54, -1790.45) - 创建传送点: ID=81, 区域=须弥, 坐标=(2980.23, -1758.59) - 创建传送点: ID=82, 区域=须弥, 坐标=(3199.51, -911.7) - 创建传送点: ID=83, 区域=须弥, 坐标=(3252.87, -591.25) - 创建传送点: ID=84, 区域=须弥, 坐标=(3402.18, -1175.26) - 创建传送点: ID=85, 区域=须弥, 坐标=(3473.06, -1573.53) - 创建传送点: ID=86, 区域=须弥, 坐标=(3639.36, -1416.85) - 创建传送点: ID=87, 区域=须弥, 坐标=(4409.72, -1874.67) - 创建传送点: ID=88, 区域=须弥, 坐标=(4470.72, -2915.3) - 创建传送点: ID=89, 区域=须弥, 坐标=(4790.78, -3182.65) - 创建传送点: ID=90, 区域=须弥, 坐标=(4810.42, -2732.88) - 创建传送点: ID=91, 区域=须弥, 坐标=(5759.42, -1307.6) - 创建传送点: ID=92, 区域=须弥, 坐标=(4592.2, -647.56) - -第二遍:读取target文件并创建目标节点... - 创建目标点: ID=1000, 区域=枫丹1-1, 坐标=(4183.27, 2502.37) - 创建目标点: ID=1001, 区域=枫丹1-2, 坐标=(4190.03, 2426.41) - 创建目标点: ID=1002, 区域=枫丹1-3, 坐标=(4246.28, 2374.05) - 创建目标点: ID=1003, 区域=枫丹1-4, 坐标=(4299.75, 2232.59) - 创建目标点: ID=1004, 区域=枫丹1-5, 坐标=(4402.53, 2253.27) - 创建目标点: ID=1005, 区域=枫丹2-1, 坐标=(4962.82, 4395.81) - 创建目标点: ID=1006, 区域=枫丹2-2, 坐标=(4952.04, 4468.84) - 创建目标点: ID=1007, 区域=枫丹2-3, 坐标=(5043.36, 4479.99) - 创建目标点: ID=1008, 区域=枫丹2-4, 坐标=(5087.02, 4573.27) - 创建目标点: ID=1009, 区域=枫丹3-1, 坐标=(4556.1, 4762.42) - 创建目标点: ID=1010, 区域=枫丹3-2, 坐标=(4517.81, 4866.48) - 创建目标点: ID=1011, 区域=枫丹3-3, 坐标=(4578.63, 4913.28) - 创建目标点: ID=1012, 区域=枫丹3-4, 坐标=(4679.47, 4977.83) - 创建目标点: ID=1013, 区域=枫丹4-1, 坐标=(2932.47, 3583.9) - 创建目标点: ID=1014, 区域=枫丹4-2, 坐标=(3008.4, 3602.59) - 创建目标点: ID=1015, 区域=枫丹4-3, 坐标=(3077.19, 3602.84) - 创建目标点: ID=1016, 区域=枫丹4-4, 坐标=(3091.8, 3654.75) - 创建目标点: ID=1017, 区域=枫丹5-1, 坐标=(4098.63, 2584.16) - 创建目标点: ID=1018, 区域=枫丹5-2, 坐标=(4063.52, 2564.29) - 创建目标点: ID=1019, 区域=枫丹5-3, 坐标=(3999.66, 2613.18) - 创建目标点: ID=1020, 区域=枫丹5-4, 坐标=(3921.35, 2617.81) - 创建目标点: ID=1021, 区域=枫丹6-1, 坐标=(4760.8, 2574.52) - 创建目标点: ID=1022, 区域=枫丹6-2, 坐标=(4653.67, 2531.89) - 创建目标点: ID=1023, 区域=枫丹6-3, 坐标=(4568.49, 2433.23) - 创建目标点: ID=1024, 区域=枫丹6-4, 坐标=(4553.51, 2358.49) - 创建目标点: ID=1025, 区域=枫丹6-5, 坐标=(4607.46, 2316.58) - 创建目标点: ID=1026, 区域=枫丹6-6, 坐标=(4700.14, 2393.35) - 创建目标点: ID=1027, 区域=璃月1-1, 坐标=(73.73, 1496.59) - 创建目标点: ID=1028, 区域=璃月1-2, 坐标=(-12.62, 1566.51) - 创建目标点: ID=1029, 区域=璃月1-3, 坐标=(-81.76, 1534.73) - 创建目标点: ID=1030, 区域=璃月1-4, 坐标=(-28.76, 1417.37) - 创建目标点: ID=1031, 区域=璃月10-1, 坐标=(1046.34, 662.76) - 创建目标点: ID=1032, 区域=璃月10-2, 坐标=(892.5, 748.02) - 创建目标点: ID=1033, 区域=璃月10-3, 坐标=(594.3, 437.83) - 创建目标点: ID=1034, 区域=璃月10-4, 坐标=(683.19, 529.0) - 创建目标点: ID=1035, 区域=璃月10-5, 坐标=(455.4, 546.56) - 创建目标点: ID=1036, 区域=璃月11-1, 坐标=(802.19, 1634.03) - 创建目标点: ID=1037, 区域=璃月11-2, 坐标=(697.31, 1551.84) - 创建目标点: ID=1038, 区域=璃月11-3, 坐标=(646.5, 1421.98) - 创建目标点: ID=1039, 区域=璃月11-4, 坐标=(632.03, 1331.15) - 创建目标点: ID=1040, 区域=璃月11-5, 坐标=(558.31, 1437.82) - 创建目标点: ID=1041, 区域=璃月11-6, 坐标=(285.79, 1457.93) - 创建目标点: ID=1042, 区域=璃月13-1, 坐标=(2254.49, 970.92) - 创建目标点: ID=1043, 区域=璃月13-2, 坐标=(2252.54, 898.21) - 创建目标点: ID=1044, 区域=璃月13-3, 坐标=(2226.91, 863.09) - 创建目标点: ID=1045, 区域=璃月13-4, 坐标=(2028.69, 830.67) - 创建目标点: ID=1046, 区域=璃月14-1, 坐标=(1614.21, 1382.09) - 创建目标点: ID=1047, 区域=璃月14-2, 坐标=(1581.57, 1437.1) - 创建目标点: ID=1048, 区域=璃月14-3, 坐标=(1563.45, 1487.35) - 创建目标点: ID=1049, 区域=璃月14-4, 坐标=(1525.0, 1549.17) - 创建目标点: ID=1050, 区域=璃月2-1, 坐标=(-194.85, 1163.89) - 创建目标点: ID=1051, 区域=璃月2-2, 坐标=(32.81, 1118.31) - 创建目标点: ID=1052, 区域=璃月2-3, 坐标=(-24.14, 931.71) - 创建目标点: ID=1053, 区域=璃月2-4, 坐标=(-10.67, 683.67) - 创建目标点: ID=1054, 区域=璃月3-1, 坐标=(-55.27, 603.84) - 创建目标点: ID=1055, 区域=璃月3-2, 坐标=(139.9, 685.26) - 创建目标点: ID=1056, 区域=璃月3-3, 坐标=(284.12, 620.66) - 创建目标点: ID=1057, 区域=璃月3-4, 坐标=(276.12, 542.51) - 注意: 坐标 (456.0, 546.29) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1058, 区域=璃月3-5, 坐标=(456.0, 546.29) - 创建目标点: ID=1059, 区域=璃月4-1, 坐标=(-7.16, -48.77) - 创建目标点: ID=1060, 区域=璃月4-2, 坐标=(101.14, -2.97) - 创建目标点: ID=1061, 区域=璃月4-3, 坐标=(127.05, 113.87) - 创建目标点: ID=1062, 区域=璃月4-4, 坐标=(146.03, 220.07) - 创建目标点: ID=1063, 区域=璃月4-5, 坐标=(262.65, 357.85) - 注意: 坐标 (276.55, 543.11) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1064, 区域=璃月4-6, 坐标=(276.55, 543.11) - 注意: 坐标 (456.44, 546.35) 附近有另一个区域的节点,但将创建新节点 - 注意: 坐标 (456.44, 546.35) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1065, 区域=璃月4-7, 坐标=(456.44, 546.35) - 创建目标点: ID=1066, 区域=璃月5-1, 坐标=(773.08, -928.68) - 创建目标点: ID=1067, 区域=璃月5-2, 坐标=(885.79, -780.15) - 创建目标点: ID=1068, 区域=璃月5-3, 坐标=(1063.54, -727.34) - 创建目标点: ID=1069, 区域=璃月5-4-1, 坐标=(936.52, -489.9) - 创建目标点: ID=1070, 区域=璃月7-1, 坐标=(824.28, -325.68) - 创建目标点: ID=1071, 区域=璃月7-2, 坐标=(721.94, -106.43) - 创建目标点: ID=1072, 区域=璃月7-3, 坐标=(752.42, 3.88) - 创建目标点: ID=1073, 区域=璃月7-4, 坐标=(815.03, 136.35) - 注意: 坐标 (681.46, 528.76) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1074, 区域=璃月7-5, 坐标=(681.46, 528.76) - 注意: 坐标 (455.4, 546.56) 附近有另一个区域的节点,但将创建新节点 - 注意: 坐标 (455.4, 546.56) 附近有另一个区域的节点,但将创建新节点 - 注意: 坐标 (455.4, 546.56) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1075, 区域=璃月7-6, 坐标=(455.4, 546.56) - 创建目标点: ID=1076, 区域=璃月8-1, 坐标=(1627.15, 303.83) - 创建目标点: ID=1077, 区域=璃月8-2, 坐标=(1333.25, 266.26) - 创建目标点: ID=1078, 区域=璃月8-3, 坐标=(1160.17, 86.75) - 创建目标点: ID=1079, 区域=璃月8-4, 坐标=(972.68, 98.66) - 注意: 坐标 (815.31, 137.31) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1080, 区域=璃月8-5, 坐标=(815.31, 137.31) - 注意: 坐标 (683.33, 529.05) 附近有另一个区域的节点,但将创建新节点 - 注意: 坐标 (683.33, 529.05) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1081, 区域=璃月8-6, 坐标=(683.33, 529.05) - 注意: 坐标 (455.84, 546.39) 附近有另一个区域的节点,但将创建新节点 - 注意: 坐标 (455.84, 546.39) 附近有另一个区域的节点,但将创建新节点 - 注意: 坐标 (455.84, 546.39) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1082, 区域=璃月8-7, 坐标=(455.84, 546.39) - 创建目标点: ID=1083, 区域=璃月9-1, 坐标=(1484.37, 458.69) - 创建目标点: ID=1084, 区域=璃月9-2, 坐标=(1445.77, 577.83) - 创建目标点: ID=1085, 区域=璃月9-3-1, 坐标=(1561.48, 483.03) - 注意: 坐标 (1561.71, 483.58) 与已存在节点 '璃月9-3-1' 区域基本部分相同,视为同一节点 - 创建目标点: ID=1086, 区域=璃月9-4, 坐标=(1686.66, 567.55) - 创建目标点: ID=1087, 区域=稻妻1-1, 坐标=(-4309.58, -2288.5) - 创建目标点: ID=1088, 区域=稻妻1-2, 坐标=(-4401.19, -2226.96) - 创建目标点: ID=1089, 区域=稻妻1-3, 坐标=(-4509.57, -2332.11) - 创建目标点: ID=1090, 区域=稻妻1-4, 坐标=(-4549.96, -2399.98) - 创建目标点: ID=1091, 区域=稻妻2-1, 坐标=(-3007.64, -3515.28) - 创建目标点: ID=1092, 区域=稻妻2-2, 坐标=(-3153.03, -3485.5) - 创建目标点: ID=1093, 区域=稻妻2-3, 坐标=(-3328.99, -3561.28) - 创建目标点: ID=1094, 区域=稻妻2-4, 坐标=(-3429.72, -3419.55) - 创建目标点: ID=1095, 区域=稻妻2-5, 坐标=(-3340.38, -3237.16) - 创建目标点: ID=1096, 区域=稻妻3-1, 坐标=(-2270.07, -4068.21) - 创建目标点: ID=1097, 区域=稻妻3-2, 坐标=(-2280.61, -4171.18) - 创建目标点: ID=1098, 区域=稻妻3-3, 坐标=(-2169.62, -4076.36) - 创建目标点: ID=1099, 区域=稻妻3-4, 坐标=(-2211.44, -4033.62) - 创建目标点: ID=1100, 区域=稻妻4-1, 坐标=(-1120.06, -3962.66) - 创建目标点: ID=1101, 区域=稻妻4-2, 坐标=(-1190.51, -3902.08) - 创建目标点: ID=1102, 区域=稻妻4-3, 坐标=(-1254.7, -3839.91) - 创建目标点: ID=1103, 区域=稻妻4-4, 坐标=(-1322.41, -3815.69) - 创建目标点: ID=1104, 区域=稻妻5-1, 坐标=(-3908.27, -4290.55) - 创建目标点: ID=1105, 区域=稻妻5-2, 坐标=(-3850.61, -4241.9) - 创建目标点: ID=1106, 区域=稻妻5-3, 坐标=(-3763.54, -4259.14) - 创建目标点: ID=1107, 区域=稻妻5-4, 坐标=(-3703.34, -4343.16) - 创建目标点: ID=1108, 区域=稻妻5-5, 坐标=(-3671.61, -4414.03) - 创建目标点: ID=1109, 区域=纳塔1-1, 坐标=(7864.95, -1823.96) - 创建目标点: ID=1110, 区域=纳塔1-2, 坐标=(7945.72, -1744.08) - 创建目标点: ID=1111, 区域=纳塔1-3, 坐标=(7932.2, -1616.37) - 创建目标点: ID=1112, 区域=纳塔1-4, 坐标=(7853.72, -1554.26) - 创建目标点: ID=1113, 区域=纳塔10-1, 坐标=(8361.82, -2993.79) - 创建目标点: ID=1114, 区域=纳塔10-2, 坐标=(8496.07, -3018.4) - 创建目标点: ID=1115, 区域=纳塔10-3, 坐标=(8587.99, -3022.4) - 创建目标点: ID=1116, 区域=纳塔10-4, 坐标=(8879.8, -3059.26) - 创建目标点: ID=1117, 区域=纳塔2-1, 坐标=(8604.22, -1635.22) - 创建目标点: ID=1118, 区域=纳塔2-2, 坐标=(8657.57, -1501.26) - 创建目标点: ID=1119, 区域=纳塔2-3, 坐标=(8733.62, -1528.95) - 创建目标点: ID=1120, 区域=纳塔2-4, 坐标=(8588.9, -1373.62) - 创建目标点: ID=1121, 区域=纳塔3-1, 坐标=(8312.07, -2344.44) - 创建目标点: ID=1122, 区域=纳塔3-2, 坐标=(8429.86, -2328.47) - 创建目标点: ID=1123, 区域=纳塔3-3, 坐标=(8291.29, -2096.67) - 创建目标点: ID=1124, 区域=纳塔3-4, 坐标=(8088.21, -2053.56) - 创建目标点: ID=1125, 区域=纳塔4-1, 坐标=(9028.67, -2342.6) - 创建目标点: ID=1126, 区域=纳塔4-2, 坐标=(9090.71, -2407.11) - 创建目标点: ID=1127, 区域=纳塔5-1, 坐标=(9687.15, -2898.19) - 创建目标点: ID=1128, 区域=纳塔5-2, 坐标=(9754.7, -2904.43) - 创建目标点: ID=1129, 区域=纳塔5-3, 坐标=(9778.7, -2856.31) - 创建目标点: ID=1130, 区域=纳塔6-1, 坐标=(9231.08, -2154.74) - 创建目标点: ID=1131, 区域=纳塔6-2, 坐标=(9110.86, -2222.48) - 创建目标点: ID=1132, 区域=纳塔6-3, 坐标=(8945.55, -2138.43) - 创建目标点: ID=1133, 区域=纳塔6-4, 坐标=(8810.08, -2077.83) - 创建目标点: ID=1134, 区域=纳塔7-1, 坐标=(9999.51, -1570.23) - 创建目标点: ID=1135, 区域=纳塔7-2, 坐标=(9963.8, -1511.61) - 创建目标点: ID=1136, 区域=纳塔7-3, 坐标=(9907.78, -1424.0) - 创建目标点: ID=1137, 区域=纳塔8-1, 坐标=(9636.29, -1038.41) - 创建目标点: ID=1138, 区域=纳塔8-2, 坐标=(9517.92, -1029.8) - 创建目标点: ID=1139, 区域=纳塔8-3, 坐标=(9472.28, -771.8) - 创建目标点: ID=1140, 区域=纳塔9-1, 坐标=(9920.8, -1196.25) - 创建目标点: ID=1141, 区域=纳塔9-2, 坐标=(9888.22, -1046.55) - 创建目标点: ID=1142, 区域=纳塔9-3, 坐标=(9938.82, -933.87) - 创建目标点: ID=1143, 区域=纳塔9-4, 坐标=(9984.24, -876.43) - 创建目标点: ID=1144, 区域=蒙德1-1, 坐标=(-1298.03, 2172.37) - 创建目标点: ID=1145, 区域=蒙德1-2, 坐标=(-1223.18, 2032.04) - 创建目标点: ID=1146, 区域=蒙德1-3, 坐标=(-1113.87, 1971.9) - 创建目标点: ID=1147, 区域=蒙德1-4, 坐标=(-1041.91, 1927.07) - 创建目标点: ID=1148, 区域=蒙德1-5, 坐标=(-895.08, 1833.84) - 创建目标点: ID=1149, 区域=蒙德2-1, 坐标=(-717.83, 1802.77) - 创建目标点: ID=1150, 区域=蒙德2-2, 坐标=(-523.76, 1813.84) - 创建目标点: ID=1151, 区域=蒙德2-3, 坐标=(-420.36, 1998.11) - 创建目标点: ID=1152, 区域=蒙德2-4-1, 坐标=(-347.95, 1902.51) - 创建目标点: ID=1153, 区域=蒙德2-4-2, 坐标=(-319.46, 2156.93) - 注意: 坐标 (-319.46, 2156.93) 与已存在节点 '蒙德2-4-2' 区域基本部分相同,视为同一节点 - 注意: 坐标 (-319.57, 2156.48) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1154, 区域=蒙德2-5-1, 坐标=(-319.57, 2156.48) - 创建目标点: ID=1155, 区域=蒙德3-1, 坐标=(-281.79, 2310.78) - 创建目标点: ID=1156, 区域=蒙德3-2, 坐标=(-205.49, 2429.07) - 创建目标点: ID=1157, 区域=蒙德3-3, 坐标=(-327.03, 2410.43) - 创建目标点: ID=1158, 区域=蒙德3-4, 坐标=(-336.15, 2562.91) - 创建目标点: ID=1159, 区域=蒙德4-1, 坐标=(241.41, 2703.08) - 创建目标点: ID=1160, 区域=蒙德4-2, 坐标=(124.61, 2817.24) - 创建目标点: ID=1161, 区域=蒙德4-3, 坐标=(152.71, 2963.33) - 创建目标点: ID=1162, 区域=蒙德4-4, 坐标=(-27.99, 2919.59) - 创建目标点: ID=1163, 区域=蒙德5-1, 坐标=(-1453.46, 2282.88) - 创建目标点: ID=1164, 区域=蒙德5-2, 坐标=(-1367.78, 2411.31) - 创建目标点: ID=1165, 区域=蒙德5-3, 坐标=(-1474.91, 2520.0) - 创建目标点: ID=1166, 区域=蒙德5-4, 坐标=(-1394.83, 2569.65) - 创建目标点: ID=1167, 区域=蒙德5-5, 坐标=(-1316.21, 2734.67) - 创建目标点: ID=1168, 区域=蒙德6-1, 坐标=(-1512.81, 2774.26) - 创建目标点: ID=1169, 区域=蒙德6-2, 坐标=(-1518.71, 2877.4) - 创建目标点: ID=1170, 区域=蒙德6-3, 坐标=(-1603.95, 2865.65) - 创建目标点: ID=1171, 区域=蒙德6-4, 坐标=(-1710.73, 2983.29) - 创建目标点: ID=1172, 区域=蒙德7-1, 坐标=(-1660.63, 1392.87) - 创建目标点: ID=1173, 区域=蒙德7-2, 坐标=(-1517.07, 1513.97) - 创建目标点: ID=1174, 区域=蒙德7-3, 坐标=(-1331.96, 1560.15) - 创建目标点: ID=1175, 区域=蒙德7-4, 坐标=(-1318.63, 1692.63) - 创建目标点: ID=1176, 区域=蒙德7-5, 坐标=(-1138.22, 1789.79) - 注意: 坐标 (-895.08, 1833.84) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1177, 区域=蒙德7-6, 坐标=(-895.08, 1833.84) - 创建目标点: ID=1178, 区域=须弥1-1, 坐标=(2368.79, -92.11) - 创建目标点: ID=1179, 区域=须弥1-2, 坐标=(2317.29, -115.35) - 创建目标点: ID=1180, 区域=须弥1-3, 坐标=(2212.83, -83.02) - 创建目标点: ID=1181, 区域=须弥1-4, 坐标=(2233.8, -160.88) - 创建目标点: ID=1182, 区域=须弥1-5, 坐标=(2269.0, -251.14) - 创建目标点: ID=1183, 区域=须弥10-1, 坐标=(6501.08, 904.25) - 创建目标点: ID=1184, 区域=须弥10-2, 坐标=(6613.41, 784.42) - 创建目标点: ID=1185, 区域=须弥10-3, 坐标=(6692.66, 625.4) - 创建目标点: ID=1186, 区域=须弥10-4, 坐标=(6280.81, 616.8) - 创建目标点: ID=1187, 区域=须弥2-1, 坐标=(2910.46, -1818.57) - 创建目标点: ID=1188, 区域=须弥2-2, 坐标=(2980.38, -1758.57) - 创建目标点: ID=1189, 区域=须弥2-3, 坐标=(3013.06, -1700.54) - 创建目标点: ID=1190, 区域=须弥2-4, 坐标=(2981.92, -1641.54) - 创建目标点: ID=1191, 区域=须弥2-5, 坐标=(2963.07, -1586.92) - 创建目标点: ID=1192, 区域=须弥3-1, 坐标=(3195.78, -806.97) - 创建目标点: ID=1193, 区域=须弥3-2, 坐标=(3233.51, -740.65) - 创建目标点: ID=1194, 区域=须弥3-3, 坐标=(3324.5, -659.02) - 创建目标点: ID=1195, 区域=须弥3-4, 坐标=(3387.39, -664.21) - 创建目标点: ID=1196, 区域=须弥4-1, 坐标=(3381.91, -1231.97) - 创建目标点: ID=1197, 区域=须弥4-2, 坐标=(3355.82, -1318.18) - 创建目标点: ID=1198, 区域=须弥4-3, 坐标=(3466.17, -1318.08) - 创建目标点: ID=1199, 区域=须弥4-4, 坐标=(3504.37, -1500.13) - 创建目标点: ID=1200, 区域=须弥4-5, 坐标=(3721.99, -1507.71) - 创建目标点: ID=1201, 区域=须弥5-1, 坐标=(4345.77, -1793.67) - 创建目标点: ID=1202, 区域=须弥5-2, 坐标=(4257.86, -1903.31) - 创建目标点: ID=1203, 区域=须弥5-3, 坐标=(4144.29, -2014.19) - 注意: 坐标 (4144.18, -2014.48) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1204, 区域=须弥5-4, 坐标=(4144.18, -2014.48) - 创建目标点: ID=1205, 区域=须弥5-5, 坐标=(4211.01, -2165.65) - 创建目标点: ID=1206, 区域=须弥6-1, 坐标=(4552.75, -2945.07) - 创建目标点: ID=1207, 区域=须弥6-2, 坐标=(4696.5, -3055.9) - 创建目标点: ID=1208, 区域=须弥6-3, 坐标=(4886.54, -2940.45) - 创建目标点: ID=1209, 区域=须弥6-4, 坐标=(4756.03, -2742.32) - 创建目标点: ID=1210, 区域=须弥8-1, 坐标=(5758.76, -1154.57) - 创建目标点: ID=1211, 区域=须弥8-2, 坐标=(5887.09, -1120.65) - 创建目标点: ID=1212, 区域=须弥8-3, 坐标=(5902.11, -1008.25) - 创建目标点: ID=1213, 区域=须弥8-4, 坐标=(5928.09, -922.46) - 创建目标点: ID=1214, 区域=须弥9-1, 坐标=(4555.52, -569.96) - 创建目标点: ID=1215, 区域=须弥9-2, 坐标=(4573.81, -408.86) - 创建目标点: ID=1216, 区域=须弥9-3, 坐标=(4756.13, -221.43) - 创建目标点: ID=1217, 区域=须弥9-4, 坐标=(4862.07, -150.71) - -第三遍:创建边和索引... - 创建边: 1 -> 1000, 路径=assets/pathing/枫丹1-秋分山西侧-1.json - 创建边: 1 -> 1001, 路径=assets/pathing/枫丹1-秋分山西侧-2.json - 创建边: 2 -> 1002, 路径=assets/pathing/枫丹1-秋分山西侧-3.json - 创建边: 2 -> 1003, 路径=assets/pathing/枫丹1-秋分山西侧-4.json - 创建边: 2 -> 1004, 路径=assets/pathing/枫丹1-秋分山西侧-5.json - 创建边: 3 -> 1005, 路径=assets/pathing/枫丹2-芒索斯山东麓-1.json - 创建边: 3 -> 1006, 路径=assets/pathing/枫丹2-芒索斯山东麓-2.json - 创建边: 3 -> 1007, 路径=assets/pathing/枫丹2-芒索斯山东麓-3.json - 创建边: 3 -> 1008, 路径=assets/pathing/枫丹2-芒索斯山东麓-4.json - 创建边: 4 -> 1009, 路径=assets/pathing/枫丹3-新枫丹科学院-1.json - 创建边: 4 -> 1010, 路径=assets/pathing/枫丹3-新枫丹科学院-2.json - 创建边: 5 -> 1011, 路径=assets/pathing/枫丹3-新枫丹科学院-3.json - 创建边: 5 -> 1012, 路径=assets/pathing/枫丹3-新枫丹科学院-4.json - 创建边: 6 -> 1013, 路径=assets/pathing/枫丹4-柔灯港-1.json - 创建边: 7 -> 1014, 路径=assets/pathing/枫丹4-柔灯港-2.json - 创建边: 7 -> 1015, 路径=assets/pathing/枫丹4-柔灯港-3.json - 创建边: 7 -> 1016, 路径=assets/pathing/枫丹4-柔灯港-4.json - 创建边: 1 -> 1017, 路径=assets/pathing/枫丹5-秋分山东侧-1.json - 创建边: 1 -> 1018, 路径=assets/pathing/枫丹5-秋分山东侧-2.json - 创建边: 8 -> 1019, 路径=assets/pathing/枫丹5-秋分山东侧-3.json - 创建边: 8 -> 1020, 路径=assets/pathing/枫丹5-秋分山东侧-4.json - 创建边: 9 -> 1021, 路径=assets/pathing/枫丹6-厄里那斯-1.json - 创建边: 10 -> 1022, 路径=assets/pathing/枫丹6-厄里那斯-2.json - 创建边: 10 -> 1023, 路径=assets/pathing/枫丹6-厄里那斯-3.json - 创建边: 10 -> 1024, 路径=assets/pathing/枫丹6-厄里那斯-4.json - 创建边: 11 -> 1025, 路径=assets/pathing/枫丹6-厄里那斯-5.json - 创建边: 10 -> 1026, 路径=assets/pathing/枫丹6-厄里那斯-6.json - 创建边: 12 -> 1027, 路径=assets/pathing/璃月1-石门-1.json - 创建边: 13 -> 1028, 路径=assets/pathing/璃月1-石门-2.json - 创建边: 14 -> 1031, 路径=assets/pathing/璃月10-绝云间-1.json - 创建边: 15 -> 1032, 路径=assets/pathing/璃月10-绝云间-2.json - 创建边: 16 -> 1033, 路径=assets/pathing/璃月10-绝云间-3.json - 创建边: 16 -> 1075, 路径=assets/pathing/璃月10-绝云间-5.json - 创建边: 17 -> 1036, 路径=assets/pathing/璃月11-轻策庄-1.json - 创建边: 18 -> 1040, 路径=assets/pathing/璃月11-轻策庄-5.json - 创建边: 19 -> 1041, 路径=assets/pathing/璃月11-轻策庄-6.json - 创建边: 20 -> 1042, 路径=assets/pathing/璃月13-悬练山-1.json - 创建边: 20 -> 1043, 路径=assets/pathing/璃月13-悬练山-2.json - 创建边: 21 -> 1046, 路径=assets/pathing/璃月14-药蝶谷-1.json - 创建边: 22 -> 1050, 路径=assets/pathing/璃月2-地中之盐-1.json - 创建边: 22 -> 1051, 路径=assets/pathing/璃月2-地中之盐-2.json - 创建边: 23 -> 1052, 路径=assets/pathing/璃月2-地中之盐-3.json - 创建边: 24 -> 1053, 路径=assets/pathing/璃月2-地中之盐-4.json - 创建边: 24 -> 1054, 路径=assets/pathing/璃月3-瑶光滩-1.json - 创建边: 24 -> 1055, 路径=assets/pathing/璃月3-瑶光滩-2.json - 创建边: 16 -> 1056, 路径=assets/pathing/璃月3-瑶光滩-3.json - 创建边: 16 -> 1057, 路径=assets/pathing/璃月3-瑶光滩-4.json - 创建边: 16 -> 1075, 路径=assets/pathing/璃月3-瑶光滩-5.json - 创建边: 25 -> 1059, 路径=assets/pathing/璃月4-璃月港-1.json - 创建边: 26 -> 1063, 路径=assets/pathing/璃月4-璃月港-5.json - 创建边: 16 -> 1057, 路径=assets/pathing/璃月4-璃月港-6.json - 创建边: 16 -> 1075, 路径=assets/pathing/璃月4-璃月港-7.json - 创建边: 27 -> 1066, 路径=assets/pathing/璃月5-天衡山-1.json - 创建边: 27 -> 1067, 路径=assets/pathing/璃月5-天衡山-2.json - 创建边: 28 -> 1069, 路径=assets/pathing/璃月5-天衡山-4-1.json - 创建边: 28 -> 1070, 路径=assets/pathing/璃月7-遁玉陵-1.json - 创建边: 29 -> 1071, 路径=assets/pathing/璃月7-遁玉陵-2.json - 创建边: 30 -> 1073, 路径=assets/pathing/璃月7-遁玉陵-4.json - 创建边: 31 -> 1034, 路径=assets/pathing/璃月7-遁玉陵-5.json - 创建边: 16 -> 1075, 路径=assets/pathing/璃月7-遁玉陵-6.json - 创建边: 32 -> 1076, 路径=assets/pathing/璃月8-南天门南-1.json - 创建边: 33 -> 1077, 路径=assets/pathing/璃月8-南天门南-2.json - 创建边: 33 -> 1078, 路径=assets/pathing/璃月8-南天门南-3.json - 创建边: 33 -> 1079, 路径=assets/pathing/璃月8-南天门南-4.json - 创建边: 30 -> 1073, 路径=assets/pathing/璃月8-南天门南-5.json - 创建边: 14 -> 1034, 路径=assets/pathing/璃月8-南天门南-6.json - 创建边: 16 -> 1075, 路径=assets/pathing/璃月8-南天门南-7.json - 创建边: 34 -> 1083, 路径=assets/pathing/璃月9-南天门东-1.json - 创建边: 34 -> 1085, 路径=assets/pathing/璃月9-南天门东-3-1.json - 创建边: 34 -> 1085, 路径=assets/pathing/璃月9-南天门东-3-2.json - 创建边: 32 -> 1086, 路径=assets/pathing/璃月9-南天门东-4.json - 创建边: 35 -> 1087, 路径=assets/pathing/稻妻1-鸣神岛-1.json - 创建边: 35 -> 1088, 路径=assets/pathing/稻妻1-鸣神岛-2.json - 创建边: 36 -> 1089, 路径=assets/pathing/稻妻1-鸣神岛-3.json - 创建边: 36 -> 1090, 路径=assets/pathing/稻妻1-鸣神岛-4.json - 创建边: 37 -> 1091, 路径=assets/pathing/稻妻2-踏鞴砂-1.json - 创建边: 38 -> 1092, 路径=assets/pathing/稻妻2-踏鞴砂-2.json - 创建边: 39 -> 1093, 路径=assets/pathing/稻妻2-踏鞴砂-3.json - 创建边: 40 -> 1094, 路径=assets/pathing/稻妻2-踏鞴砂-4.json - 创建边: 40 -> 1095, 路径=assets/pathing/稻妻2-踏鞴砂-5.json - 创建边: 41 -> 1096, 路径=assets/pathing/稻妻3-八酝岛-1.json - 创建边: 41 -> 1098, 路径=assets/pathing/稻妻3-八酝岛-3.json - 创建边: 41 -> 1099, 路径=assets/pathing/稻妻3-八酝岛-4.json - 创建边: 42 -> 1100, 路径=assets/pathing/稻妻4-海祇岛-1.json - 创建边: 43 -> 1103, 路径=assets/pathing/稻妻4-海祇岛-4.json - 创建边: 44 -> 1104, 路径=assets/pathing/稻妻5-清籁岛-1.json - 创建边: 45 -> 1107, 路径=assets/pathing/稻妻5-清籁岛-4.json - 创建边: 46 -> 1109, 路径=assets/pathing/纳塔1-隆崛坡-1.json - 创建边: 47 -> 1110, 路径=assets/pathing/纳塔1-隆崛坡-2.json - 创建边: 47 -> 1111, 路径=assets/pathing/纳塔1-隆崛坡-3.json - 创建边: 48 -> 1113, 路径=assets/pathing/纳塔10-溶水域-1.json - 创建边: 49 -> 1116, 路径=assets/pathing/纳塔10-溶水域-4.json - 创建边: 50 -> 1117, 路径=assets/pathing/纳塔2-硫晶支脉-1.json - 创建边: 50 -> 1118, 路径=assets/pathing/纳塔2-硫晶支脉-2.json - 创建边: 50 -> 1119, 路径=assets/pathing/纳塔2-硫晶支脉-3.json - 创建边: 51 -> 1120, 路径=assets/pathing/纳塔2-硫晶支脉-4.json - 创建边: 52 -> 1121, 路径=assets/pathing/纳塔3-彩石顶-1.json - 创建边: 53 -> 1122, 路径=assets/pathing/纳塔3-彩石顶-2.json - 创建边: 53 -> 1123, 路径=assets/pathing/纳塔3-彩石顶-3.json - 创建边: 54 -> 1125, 路径=assets/pathing/纳塔4-溶水域-1.json - 创建边: 55 -> 1127, 路径=assets/pathing/纳塔5-安饶之野-1.json - 创建边: 55 -> 1128, 路径=assets/pathing/纳塔5-安饶之野-2.json - 创建边: 55 -> 1129, 路径=assets/pathing/纳塔5-安饶之野-3.json - 创建边: 56 -> 1130, 路径=assets/pathing/纳塔6-圣火竞技场-1.json - 创建边: 56 -> 1131, 路径=assets/pathing/纳塔6-圣火竞技场-2.json - 创建边: 57 -> 1134, 路径=assets/pathing/纳塔7-烟谜主-1.json - 创建边: 58 -> 1137, 路径=assets/pathing/纳塔8-花羽会-1.json - 创建边: 58 -> 1138, 路径=assets/pathing/纳塔8-花羽会-2.json - 创建边: 59 -> 1139, 路径=assets/pathing/纳塔8-花羽会-3.json - 创建边: 60 -> 1140, 路径=assets/pathing/纳塔9-翘枝崖-1.json - 创建边: 61 -> 1144, 路径=assets/pathing/蒙德1-风起地-1.json - 创建边: 62 -> 1145, 路径=assets/pathing/蒙德1-风起地-2.json - 创建边: 63 -> 1177, 路径=assets/pathing/蒙德1-风起地-5.json - 创建边: 64 -> 1149, 路径=assets/pathing/蒙德2-清泉镇-1.json - 创建边: 65 -> 1150, 路径=assets/pathing/蒙德2-清泉镇-2.json - 创建边: 66 -> 1153, 路径=assets/pathing/蒙德2-清泉镇-5-1.json - 创建边: 67 -> 1155, 路径=assets/pathing/蒙德3-奔狼领-1.json - 创建边: 68 -> 1158, 路径=assets/pathing/蒙德3-奔狼领-4.json - 创建边: 69 -> 1159, 路径=assets/pathing/蒙德4-风龙废墟-1.json - 创建边: 70 -> 1161, 路径=assets/pathing/蒙德4-风龙废墟-3.json - 创建边: 71 -> 1163, 路径=assets/pathing/蒙德5-千风神殿-1.json - 创建边: 72 -> 1166, 路径=assets/pathing/蒙德5-千风神殿-4.json - 创建边: 73 -> 1167, 路径=assets/pathing/蒙德5-千风神殿-5.json - 创建边: 73 -> 1168, 路径=assets/pathing/蒙德6-望风山地-1.json - 创建边: 74 -> 1170, 路径=assets/pathing/蒙德6-望风山地-3.json - 创建边: 75 -> 1172, 路径=assets/pathing/蒙德7-达达乌帕谷-1.json - 创建边: 76 -> 1173, 路径=assets/pathing/蒙德7-达达乌帕谷-2.json - 创建边: 76 -> 1174, 路径=assets/pathing/蒙德7-达达乌帕谷-3.json - 创建边: 63 -> 1177, 路径=assets/pathing/蒙德7-达达乌帕谷-6.json - 创建边: 77 -> 1178, 路径=assets/pathing/须弥1-无郁稠林-1.json - 创建边: 78 -> 1183, 路径=assets/pathing/须弥10-荼泥黑渊-1.json - 创建边: 78 -> 1184, 路径=assets/pathing/须弥10-荼泥黑渊-2.json - 创建边: 78 -> 1185, 路径=assets/pathing/须弥10-荼泥黑渊-3.json - 创建边: 79 -> 1186, 路径=assets/pathing/须弥10-荼泥黑渊-4.json - 创建边: 80 -> 1187, 路径=assets/pathing/须弥2-奥摩斯港西-1.json - 创建边: 81 -> 1189, 路径=assets/pathing/须弥2-奥摩斯港西-3.json - 创建边: 82 -> 1192, 路径=assets/pathing/须弥3-禅那园-1.json - 创建边: 83 -> 1194, 路径=assets/pathing/须弥3-禅那园-3.json - 创建边: 84 -> 1196, 路径=assets/pathing/须弥4-水天丛林-1.json - 创建边: 85 -> 1199, 路径=assets/pathing/须弥4-水天丛林-4.json - 创建边: 86 -> 1200, 路径=assets/pathing/须弥4-水天丛林-5.json - 创建边: 87 -> 1201, 路径=assets/pathing/须弥5-阿如村-1.json - 创建边: 88 -> 1206, 路径=assets/pathing/须弥6-荼诃落谷-1.json - 创建边: 89 -> 1207, 路径=assets/pathing/须弥6-荼诃落谷-2.json - 创建边: 90 -> 1209, 路径=assets/pathing/须弥6-荼诃落谷-4.json - 创建边: 91 -> 1210, 路径=assets/pathing/须弥8-折胫谷-1.json - 创建边: 92 -> 1214, 路径=assets/pathing/须弥9-镔铁沙丘-1.json - -检查目标点的连通性... - 警告: 目标点 ID=1029, 区域=璃月1-3, 坐标=(-81.76, 1534.73) 没有入边 - 警告: 目标点 ID=1030, 区域=璃月1-4, 坐标=(-28.76, 1417.37) 没有入边 - 警告: 目标点 ID=1035, 区域=璃月10-5, 坐标=(455.4, 546.56) 没有入边 - 警告: 目标点 ID=1037, 区域=璃月11-2, 坐标=(697.31, 1551.84) 没有入边 - 警告: 目标点 ID=1038, 区域=璃月11-3, 坐标=(646.5, 1421.98) 没有入边 - 警告: 目标点 ID=1039, 区域=璃月11-4, 坐标=(632.03, 1331.15) 没有入边 - 警告: 目标点 ID=1044, 区域=璃月13-3, 坐标=(2226.91, 863.09) 没有入边 - 警告: 目标点 ID=1045, 区域=璃月13-4, 坐标=(2028.69, 830.67) 没有入边 - 警告: 目标点 ID=1047, 区域=璃月14-2, 坐标=(1581.57, 1437.1) 没有入边 - 警告: 目标点 ID=1048, 区域=璃月14-3, 坐标=(1563.45, 1487.35) 没有入边 - 警告: 目标点 ID=1049, 区域=璃月14-4, 坐标=(1525.0, 1549.17) 没有入边 - 警告: 目标点 ID=1058, 区域=璃月3-5, 坐标=(456.0, 546.29) 没有入边 - 警告: 目标点 ID=1060, 区域=璃月4-2, 坐标=(101.14, -2.97) 没有入边 - 警告: 目标点 ID=1061, 区域=璃月4-3, 坐标=(127.05, 113.87) 没有入边 - 警告: 目标点 ID=1062, 区域=璃月4-4, 坐标=(146.03, 220.07) 没有入边 - 警告: 目标点 ID=1064, 区域=璃月4-6, 坐标=(276.55, 543.11) 没有入边 - 警告: 目标点 ID=1065, 区域=璃月4-7, 坐标=(456.44, 546.35) 没有入边 - 警告: 目标点 ID=1068, 区域=璃月5-3, 坐标=(1063.54, -727.34) 没有入边 - 警告: 目标点 ID=1072, 区域=璃月7-3, 坐标=(752.42, 3.88) 没有入边 - 警告: 目标点 ID=1074, 区域=璃月7-5, 坐标=(681.46, 528.76) 没有入边 - 警告: 目标点 ID=1080, 区域=璃月8-5, 坐标=(815.31, 137.31) 没有入边 - 警告: 目标点 ID=1081, 区域=璃月8-6, 坐标=(683.33, 529.05) 没有入边 - 警告: 目标点 ID=1082, 区域=璃月8-7, 坐标=(455.84, 546.39) 没有入边 - 警告: 目标点 ID=1084, 区域=璃月9-2, 坐标=(1445.77, 577.83) 没有入边 - 警告: 目标点 ID=1097, 区域=稻妻3-2, 坐标=(-2280.61, -4171.18) 没有入边 - 警告: 目标点 ID=1101, 区域=稻妻4-2, 坐标=(-1190.51, -3902.08) 没有入边 - 警告: 目标点 ID=1102, 区域=稻妻4-3, 坐标=(-1254.7, -3839.91) 没有入边 - 警告: 目标点 ID=1105, 区域=稻妻5-2, 坐标=(-3850.61, -4241.9) 没有入边 - 警告: 目标点 ID=1106, 区域=稻妻5-3, 坐标=(-3763.54, -4259.14) 没有入边 - 警告: 目标点 ID=1108, 区域=稻妻5-5, 坐标=(-3671.61, -4414.03) 没有入边 - 警告: 目标点 ID=1112, 区域=纳塔1-4, 坐标=(7853.72, -1554.26) 没有入边 - 警告: 目标点 ID=1114, 区域=纳塔10-2, 坐标=(8496.07, -3018.4) 没有入边 - 警告: 目标点 ID=1115, 区域=纳塔10-3, 坐标=(8587.99, -3022.4) 没有入边 - 警告: 目标点 ID=1124, 区域=纳塔3-4, 坐标=(8088.21, -2053.56) 没有入边 - 警告: 目标点 ID=1126, 区域=纳塔4-2, 坐标=(9090.71, -2407.11) 没有入边 - 警告: 目标点 ID=1132, 区域=纳塔6-3, 坐标=(8945.55, -2138.43) 没有入边 - 警告: 目标点 ID=1133, 区域=纳塔6-4, 坐标=(8810.08, -2077.83) 没有入边 - 警告: 目标点 ID=1135, 区域=纳塔7-2, 坐标=(9963.8, -1511.61) 没有入边 - 警告: 目标点 ID=1136, 区域=纳塔7-3, 坐标=(9907.78, -1424.0) 没有入边 - 警告: 目标点 ID=1141, 区域=纳塔9-2, 坐标=(9888.22, -1046.55) 没有入边 - 警告: 目标点 ID=1142, 区域=纳塔9-3, 坐标=(9938.82, -933.87) 没有入边 - 警告: 目标点 ID=1143, 区域=纳塔9-4, 坐标=(9984.24, -876.43) 没有入边 - 警告: 目标点 ID=1146, 区域=蒙德1-3, 坐标=(-1113.87, 1971.9) 没有入边 - 警告: 目标点 ID=1147, 区域=蒙德1-4, 坐标=(-1041.91, 1927.07) 没有入边 - 警告: 目标点 ID=1148, 区域=蒙德1-5, 坐标=(-895.08, 1833.84) 没有入边 - 警告: 目标点 ID=1151, 区域=蒙德2-3, 坐标=(-420.36, 1998.11) 没有入边 - 警告: 目标点 ID=1152, 区域=蒙德2-4-1, 坐标=(-347.95, 1902.51) 没有入边 - 警告: 目标点 ID=1154, 区域=蒙德2-5-1, 坐标=(-319.57, 2156.48) 没有入边 - 警告: 目标点 ID=1156, 区域=蒙德3-2, 坐标=(-205.49, 2429.07) 没有入边 - 警告: 目标点 ID=1157, 区域=蒙德3-3, 坐标=(-327.03, 2410.43) 没有入边 - 警告: 目标点 ID=1160, 区域=蒙德4-2, 坐标=(124.61, 2817.24) 没有入边 - 警告: 目标点 ID=1162, 区域=蒙德4-4, 坐标=(-27.99, 2919.59) 没有入边 - 警告: 目标点 ID=1164, 区域=蒙德5-2, 坐标=(-1367.78, 2411.31) 没有入边 - 警告: 目标点 ID=1165, 区域=蒙德5-3, 坐标=(-1474.91, 2520.0) 没有入边 - 警告: 目标点 ID=1169, 区域=蒙德6-2, 坐标=(-1518.71, 2877.4) 没有入边 - 警告: 目标点 ID=1171, 区域=蒙德6-4, 坐标=(-1710.73, 2983.29) 没有入边 - 警告: 目标点 ID=1175, 区域=蒙德7-4, 坐标=(-1318.63, 1692.63) 没有入边 - 警告: 目标点 ID=1176, 区域=蒙德7-5, 坐标=(-1138.22, 1789.79) 没有入边 - 警告: 目标点 ID=1179, 区域=须弥1-2, 坐标=(2317.29, -115.35) 没有入边 - 警告: 目标点 ID=1180, 区域=须弥1-3, 坐标=(2212.83, -83.02) 没有入边 - 警告: 目标点 ID=1181, 区域=须弥1-4, 坐标=(2233.8, -160.88) 没有入边 - 警告: 目标点 ID=1182, 区域=须弥1-5, 坐标=(2269.0, -251.14) 没有入边 - 警告: 目标点 ID=1188, 区域=须弥2-2, 坐标=(2980.38, -1758.57) 没有入边 - 警告: 目标点 ID=1190, 区域=须弥2-4, 坐标=(2981.92, -1641.54) 没有入边 - 警告: 目标点 ID=1191, 区域=须弥2-5, 坐标=(2963.07, -1586.92) 没有入边 - 警告: 目标点 ID=1193, 区域=须弥3-2, 坐标=(3233.51, -740.65) 没有入边 - 警告: 目标点 ID=1195, 区域=须弥3-4, 坐标=(3387.39, -664.21) 没有入边 - 警告: 目标点 ID=1197, 区域=须弥4-2, 坐标=(3355.82, -1318.18) 没有入边 - 警告: 目标点 ID=1198, 区域=须弥4-3, 坐标=(3466.17, -1318.08) 没有入边 - 警告: 目标点 ID=1202, 区域=须弥5-2, 坐标=(4257.86, -1903.31) 没有入边 - 警告: 目标点 ID=1203, 区域=须弥5-3, 坐标=(4144.29, -2014.19) 没有入边 - 警告: 目标点 ID=1204, 区域=须弥5-4, 坐标=(4144.18, -2014.48) 没有入边 - 警告: 目标点 ID=1205, 区域=须弥5-5, 坐标=(4211.01, -2165.65) 没有入边 - 警告: 目标点 ID=1208, 区域=须弥6-3, 坐标=(4886.54, -2940.45) 没有入边 - 警告: 目标点 ID=1211, 区域=须弥8-2, 坐标=(5887.09, -1120.65) 没有入边 - 警告: 目标点 ID=1212, 区域=须弥8-3, 坐标=(5902.11, -1008.25) 没有入边 - 警告: 目标点 ID=1213, 区域=须弥8-4, 坐标=(5928.09, -922.46) 没有入边 - 警告: 目标点 ID=1215, 区域=须弥9-2, 坐标=(4573.81, -408.86) 没有入边 - 警告: 目标点 ID=1216, 区域=须弥9-3, 坐标=(4756.13, -221.43) 没有入边 - 警告: 目标点 ID=1217, 区域=须弥9-4, 坐标=(4862.07, -150.71) 没有入边 - -尝试为 80 个孤立目标点寻找连续路径... - -处理区域 璃月1-3 的 1 个孤立目标点... - 区域 璃月1-3 没有现有路径,无法连接孤立目标点 - -处理区域 璃月1-4 的 1 个孤立目标点... - 区域 璃月1-4 没有现有路径,无法连接孤立目标点 - -处理区域 璃月10-5 的 1 个孤立目标点... - 区域 璃月10-5 没有现有路径,无法连接孤立目标点 - -处理区域 璃月11-2 的 1 个孤立目标点... - 区域 璃月11-2 没有现有路径,无法连接孤立目标点 - -处理区域 璃月11-3 的 1 个孤立目标点... - 区域 璃月11-3 没有现有路径,无法连接孤立目标点 - -处理区域 璃月11-4 的 1 个孤立目标点... - 区域 璃月11-4 没有现有路径,无法连接孤立目标点 - -处理区域 璃月13-3 的 1 个孤立目标点... - 区域 璃月13-3 没有现有路径,无法连接孤立目标点 - -处理区域 璃月13-4 的 1 个孤立目标点... - 区域 璃月13-4 没有现有路径,无法连接孤立目标点 - -处理区域 璃月14-2 的 1 个孤立目标点... - 区域 璃月14-2 没有现有路径,无法连接孤立目标点 - -处理区域 璃月14-3 的 1 个孤立目标点... - 区域 璃月14-3 没有现有路径,无法连接孤立目标点 - -处理区域 璃月14-4 的 1 个孤立目标点... - 区域 璃月14-4 没有现有路径,无法连接孤立目标点 - -处理区域 璃月3-5 的 1 个孤立目标点... - 区域 璃月3-5 没有现有路径,无法连接孤立目标点 - -处理区域 璃月4-2 的 1 个孤立目标点... - 区域 璃月4-2 没有现有路径,无法连接孤立目标点 - -处理区域 璃月4-3 的 1 个孤立目标点... - 区域 璃月4-3 没有现有路径,无法连接孤立目标点 - -处理区域 璃月4-4 的 1 个孤立目标点... - 区域 璃月4-4 没有现有路径,无法连接孤立目标点 - -处理区域 璃月4-6 的 1 个孤立目标点... - 区域 璃月4-6 没有现有路径,无法连接孤立目标点 - -处理区域 璃月4-7 的 1 个孤立目标点... - 区域 璃月4-7 没有现有路径,无法连接孤立目标点 - -处理区域 璃月5-3 的 1 个孤立目标点... - 区域 璃月5-3 没有现有路径,无法连接孤立目标点 - -处理区域 璃月7-3 的 1 个孤立目标点... - 区域 璃月7-3 没有现有路径,无法连接孤立目标点 - -处理区域 璃月7-5 的 1 个孤立目标点... - 区域 璃月7-5 没有现有路径,无法连接孤立目标点 - -处理区域 璃月8-5 的 1 个孤立目标点... - 区域 璃月8-5 没有现有路径,无法连接孤立目标点 - -处理区域 璃月8-6 的 1 个孤立目标点... - 区域 璃月8-6 没有现有路径,无法连接孤立目标点 - -处理区域 璃月8-7 的 1 个孤立目标点... - 区域 璃月8-7 没有现有路径,无法连接孤立目标点 - -处理区域 璃月9-2 的 1 个孤立目标点... - 区域 璃月9-2 没有现有路径,无法连接孤立目标点 - -处理区域 稻妻3-2 的 1 个孤立目标点... - 区域 稻妻3-2 没有现有路径,无法连接孤立目标点 - -处理区域 稻妻4-2 的 1 个孤立目标点... - 区域 稻妻4-2 没有现有路径,无法连接孤立目标点 - -处理区域 稻妻4-3 的 1 个孤立目标点... - 区域 稻妻4-3 没有现有路径,无法连接孤立目标点 - -处理区域 稻妻5-2 的 1 个孤立目标点... - 区域 稻妻5-2 没有现有路径,无法连接孤立目标点 - -处理区域 稻妻5-3 的 1 个孤立目标点... - 区域 稻妻5-3 没有现有路径,无法连接孤立目标点 - -处理区域 稻妻5-5 的 1 个孤立目标点... - 区域 稻妻5-5 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔1-4 的 1 个孤立目标点... - 区域 纳塔1-4 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔10-2 的 1 个孤立目标点... - 区域 纳塔10-2 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔10-3 的 1 个孤立目标点... - 区域 纳塔10-3 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔3-4 的 1 个孤立目标点... - 区域 纳塔3-4 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔4-2 的 1 个孤立目标点... - 区域 纳塔4-2 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔6-3 的 1 个孤立目标点... - 区域 纳塔6-3 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔6-4 的 1 个孤立目标点... - 区域 纳塔6-4 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔7-2 的 1 个孤立目标点... - 区域 纳塔7-2 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔7-3 的 1 个孤立目标点... - 区域 纳塔7-3 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔9-2 的 1 个孤立目标点... - 区域 纳塔9-2 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔9-3 的 1 个孤立目标点... - 区域 纳塔9-3 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔9-4 的 1 个孤立目标点... - 区域 纳塔9-4 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德1-3 的 1 个孤立目标点... - 区域 蒙德1-3 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德1-4 的 1 个孤立目标点... - 区域 蒙德1-4 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德1-5 的 1 个孤立目标点... - 区域 蒙德1-5 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德2-3 的 1 个孤立目标点... - 区域 蒙德2-3 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德2-4-1 的 1 个孤立目标点... - 区域 蒙德2-4-1 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德2-5-1 的 1 个孤立目标点... - 区域 蒙德2-5-1 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德3-2 的 1 个孤立目标点... - 区域 蒙德3-2 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德3-3 的 1 个孤立目标点... - 区域 蒙德3-3 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德4-2 的 1 个孤立目标点... - 区域 蒙德4-2 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德4-4 的 1 个孤立目标点... - 区域 蒙德4-4 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德5-2 的 1 个孤立目标点... - 区域 蒙德5-2 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德5-3 的 1 个孤立目标点... - 区域 蒙德5-3 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德6-2 的 1 个孤立目标点... - 区域 蒙德6-2 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德6-4 的 1 个孤立目标点... - 区域 蒙德6-4 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德7-4 的 1 个孤立目标点... - 区域 蒙德7-4 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德7-5 的 1 个孤立目标点... - 区域 蒙德7-5 没有现有路径,无法连接孤立目标点 - -处理区域 须弥1-2 的 1 个孤立目标点... - 区域 须弥1-2 没有现有路径,无法连接孤立目标点 - -处理区域 须弥1-3 的 1 个孤立目标点... - 区域 须弥1-3 没有现有路径,无法连接孤立目标点 - -处理区域 须弥1-4 的 1 个孤立目标点... - 区域 须弥1-4 没有现有路径,无法连接孤立目标点 - -处理区域 须弥1-5 的 1 个孤立目标点... - 区域 须弥1-5 没有现有路径,无法连接孤立目标点 - -处理区域 须弥2-2 的 1 个孤立目标点... - 区域 须弥2-2 没有现有路径,无法连接孤立目标点 - -处理区域 须弥2-4 的 1 个孤立目标点... - 区域 须弥2-4 没有现有路径,无法连接孤立目标点 - -处理区域 须弥2-5 的 1 个孤立目标点... - 区域 须弥2-5 没有现有路径,无法连接孤立目标点 - -处理区域 须弥3-2 的 1 个孤立目标点... - 区域 须弥3-2 没有现有路径,无法连接孤立目标点 - -处理区域 须弥3-4 的 1 个孤立目标点... - 区域 须弥3-4 没有现有路径,无法连接孤立目标点 - -处理区域 须弥4-2 的 1 个孤立目标点... - 区域 须弥4-2 没有现有路径,无法连接孤立目标点 - -处理区域 须弥4-3 的 1 个孤立目标点... - 区域 须弥4-3 没有现有路径,无法连接孤立目标点 - -处理区域 须弥5-2 的 1 个孤立目标点... - 区域 须弥5-2 没有现有路径,无法连接孤立目标点 - -处理区域 须弥5-3 的 1 个孤立目标点... - 区域 须弥5-3 没有现有路径,无法连接孤立目标点 - -处理区域 须弥5-4 的 1 个孤立目标点... - 区域 须弥5-4 没有现有路径,无法连接孤立目标点 - -处理区域 须弥5-5 的 1 个孤立目标点... - 区域 须弥5-5 没有现有路径,无法连接孤立目标点 - -处理区域 须弥6-3 的 1 个孤立目标点... - 区域 须弥6-3 没有现有路径,无法连接孤立目标点 - -处理区域 须弥8-2 的 1 个孤立目标点... - 区域 须弥8-2 没有现有路径,无法连接孤立目标点 - -处理区域 须弥8-3 的 1 个孤立目标点... - 区域 须弥8-3 没有现有路径,无法连接孤立目标点 - -处理区域 须弥8-4 的 1 个孤立目标点... - 区域 须弥8-4 没有现有路径,无法连接孤立目标点 - -处理区域 须弥9-2 的 1 个孤立目标点... - 区域 须弥9-2 没有现有路径,无法连接孤立目标点 - -处理区域 须弥9-3 的 1 个孤立目标点... - 区域 须弥9-3 没有现有路径,无法连接孤立目标点 - -处理区域 须弥9-4 的 1 个孤立目标点... - 区域 须弥9-4 没有现有路径,无法连接孤立目标点 - -按区域对节点进行排序... - -删除边数据中的位置信息... - -按照目标节点(target)的顺序排列边... - -创建节点到节点的顺序边... - -处理区域: 蒙德1 - 主路线: 蒙德1-1 (路线1) - 主路线: 蒙德1-2 (路线2) - 主路线: 蒙德1-3 (路线3) - 主路线: 蒙德1-4 (路线4) - 主路线: 蒙德1-5 (路线5) - 找到 5 个主路线,0 个分支组 - 主路线连接: 蒙德1-1 → 蒙德1-2 - 主路线连接: 蒙德1-2 → 蒙德1-3 - 主路线连接: 蒙德1-3 → 蒙德1-4 - 主路线连接: 蒙德1-4 → 蒙德1-5 - -处理区域: 蒙德2 - 主路线: 蒙德2-1 (路线1) - 主路线: 蒙德2-2 (路线2) - 主路线: 蒙德2-3 (路线3) - 分支路线: 蒙德2-4-1 (路线4, 分支1) - 分支路线: 蒙德2-4-2 (路线4, 分支2) - 分支路线: 蒙德2-5-1 (路线5, 分支1) - 找到 3 个主路线,2 个分支组 - 主路线到分支: 蒙德2-3 → 蒙德2-4-1 - 主路线到分支: 蒙德2-3 → 蒙德2-5-1 - 分支内部连接: 蒙德2-4-1 → 蒙德2-4-2 - 分支到分支: 蒙德2-4-2 → 蒙德2-5-1 - 主路线连接: 蒙德2-1 → 蒙德2-2 - 主路线连接: 蒙德2-2 → 蒙德2-3 - -处理区域: 蒙德3 - 主路线: 蒙德3-1 (路线1) - 主路线: 蒙德3-2 (路线2) - 主路线: 蒙德3-3 (路线3) - 主路线: 蒙德3-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 蒙德3-1 → 蒙德3-2 - 主路线连接: 蒙德3-2 → 蒙德3-3 - 主路线连接: 蒙德3-3 → 蒙德3-4 - -处理区域: 蒙德4 - 主路线: 蒙德4-1 (路线1) - 主路线: 蒙德4-2 (路线2) - 主路线: 蒙德4-3 (路线3) - 主路线: 蒙德4-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 蒙德4-1 → 蒙德4-2 - 主路线连接: 蒙德4-2 → 蒙德4-3 - 主路线连接: 蒙德4-3 → 蒙德4-4 - -处理区域: 蒙德5 - 主路线: 蒙德5-1 (路线1) - 主路线: 蒙德5-2 (路线2) - 主路线: 蒙德5-3 (路线3) - 主路线: 蒙德5-4 (路线4) - 主路线: 蒙德5-5 (路线5) - 找到 5 个主路线,0 个分支组 - 主路线连接: 蒙德5-1 → 蒙德5-2 - 主路线连接: 蒙德5-2 → 蒙德5-3 - 主路线连接: 蒙德5-3 → 蒙德5-4 - 主路线连接: 蒙德5-4 → 蒙德5-5 - -处理区域: 蒙德6 - 主路线: 蒙德6-1 (路线1) - 主路线: 蒙德6-2 (路线2) - 主路线: 蒙德6-3 (路线3) - 主路线: 蒙德6-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 蒙德6-1 → 蒙德6-2 - 主路线连接: 蒙德6-2 → 蒙德6-3 - 主路线连接: 蒙德6-3 → 蒙德6-4 - -处理区域: 蒙德7 - 主路线: 蒙德7-1 (路线1) - 主路线: 蒙德7-2 (路线2) - 主路线: 蒙德7-3 (路线3) - 主路线: 蒙德7-4 (路线4) - 主路线: 蒙德7-5 (路线5) - 主路线: 蒙德7-6 (路线6) - 找到 6 个主路线,0 个分支组 - 主路线连接: 蒙德7-1 → 蒙德7-2 - 主路线连接: 蒙德7-2 → 蒙德7-3 - 主路线连接: 蒙德7-3 → 蒙德7-4 - 主路线连接: 蒙德7-4 → 蒙德7-5 - 主路线连接: 蒙德7-5 → 蒙德7-6 - -处理区域: 璃月1 - 主路线: 璃月1-1 (路线1) - 主路线: 璃月1-2 (路线2) - 主路线: 璃月1-3 (路线3) - 主路线: 璃月1-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 璃月1-1 → 璃月1-2 - 主路线连接: 璃月1-2 → 璃月1-3 - 主路线连接: 璃月1-3 → 璃月1-4 - -处理区域: 璃月10 - 主路线: 璃月10-1 (路线1) - 主路线: 璃月10-2 (路线2) - 主路线: 璃月10-3 (路线3) - 主路线: 璃月10-4 (路线4) - 主路线: 璃月10-5 (路线5) - 找到 5 个主路线,0 个分支组 - 主路线连接: 璃月10-1 → 璃月10-2 - 主路线连接: 璃月10-2 → 璃月10-3 - 主路线连接: 璃月10-3 → 璃月10-4 - 主路线连接: 璃月10-4 → 璃月10-5 - -处理区域: 璃月11 - 主路线: 璃月11-1 (路线1) - 主路线: 璃月11-2 (路线2) - 主路线: 璃月11-3 (路线3) - 主路线: 璃月11-4 (路线4) - 主路线: 璃月11-5 (路线5) - 主路线: 璃月11-6 (路线6) - 找到 6 个主路线,0 个分支组 - 主路线连接: 璃月11-1 → 璃月11-2 - 主路线连接: 璃月11-2 → 璃月11-3 - 主路线连接: 璃月11-3 → 璃月11-4 - 主路线连接: 璃月11-4 → 璃月11-5 - 主路线连接: 璃月11-5 → 璃月11-6 - -处理区域: 璃月13 - 主路线: 璃月13-1 (路线1) - 主路线: 璃月13-2 (路线2) - 主路线: 璃月13-3 (路线3) - 主路线: 璃月13-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 璃月13-1 → 璃月13-2 - 主路线连接: 璃月13-2 → 璃月13-3 - 主路线连接: 璃月13-3 → 璃月13-4 - -处理区域: 璃月14 - 主路线: 璃月14-1 (路线1) - 主路线: 璃月14-2 (路线2) - 主路线: 璃月14-3 (路线3) - 主路线: 璃月14-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 璃月14-1 → 璃月14-2 - 主路线连接: 璃月14-2 → 璃月14-3 - 主路线连接: 璃月14-3 → 璃月14-4 - -处理区域: 璃月2 - 主路线: 璃月2-1 (路线1) - 主路线: 璃月2-2 (路线2) - 主路线: 璃月2-3 (路线3) - 主路线: 璃月2-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 璃月2-1 → 璃月2-2 - 主路线连接: 璃月2-2 → 璃月2-3 - 主路线连接: 璃月2-3 → 璃月2-4 - -处理区域: 璃月3 - 主路线: 璃月3-1 (路线1) - 主路线: 璃月3-2 (路线2) - 主路线: 璃月3-3 (路线3) - 主路线: 璃月3-4 (路线4) - 主路线: 璃月3-5 (路线5) - 找到 5 个主路线,0 个分支组 - 主路线连接: 璃月3-1 → 璃月3-2 - 主路线连接: 璃月3-2 → 璃月3-3 - 主路线连接: 璃月3-3 → 璃月3-4 - 主路线连接: 璃月3-4 → 璃月3-5 - -处理区域: 璃月4 - 主路线: 璃月4-1 (路线1) - 主路线: 璃月4-2 (路线2) - 主路线: 璃月4-3 (路线3) - 主路线: 璃月4-4 (路线4) - 主路线: 璃月4-5 (路线5) - 主路线: 璃月4-6 (路线6) - 主路线: 璃月4-7 (路线7) - 找到 7 个主路线,0 个分支组 - 主路线连接: 璃月4-1 → 璃月4-2 - 主路线连接: 璃月4-2 → 璃月4-3 - 主路线连接: 璃月4-3 → 璃月4-4 - 主路线连接: 璃月4-4 → 璃月4-5 - 主路线连接: 璃月4-5 → 璃月4-6 - 主路线连接: 璃月4-6 → 璃月4-7 - -处理区域: 璃月5 - 主路线: 璃月5-1 (路线1) - 主路线: 璃月5-2 (路线2) - 主路线: 璃月5-3 (路线3) - 分支路线: 璃月5-4-1 (路线4, 分支1) - 找到 3 个主路线,1 个分支组 - 主路线到分支: 璃月5-3 → 璃月5-4-1 - 主路线连接: 璃月5-1 → 璃月5-2 - 主路线连接: 璃月5-2 → 璃月5-3 - -处理区域: 璃月7 - 主路线: 璃月7-1 (路线1) - 主路线: 璃月7-2 (路线2) - 主路线: 璃月7-3 (路线3) - 主路线: 璃月7-4 (路线4) - 主路线: 璃月7-5 (路线5) - 主路线: 璃月7-6 (路线6) - 找到 6 个主路线,0 个分支组 - 主路线连接: 璃月7-1 → 璃月7-2 - 主路线连接: 璃月7-2 → 璃月7-3 - 主路线连接: 璃月7-3 → 璃月7-4 - 主路线连接: 璃月7-4 → 璃月7-5 - 主路线连接: 璃月7-5 → 璃月7-6 - -处理区域: 璃月8 - 主路线: 璃月8-1 (路线1) - 主路线: 璃月8-2 (路线2) - 主路线: 璃月8-3 (路线3) - 主路线: 璃月8-4 (路线4) - 主路线: 璃月8-5 (路线5) - 主路线: 璃月8-6 (路线6) - 主路线: 璃月8-7 (路线7) - 找到 7 个主路线,0 个分支组 - 主路线连接: 璃月8-1 → 璃月8-2 - 主路线连接: 璃月8-2 → 璃月8-3 - 主路线连接: 璃月8-3 → 璃月8-4 - 主路线连接: 璃月8-4 → 璃月8-5 - 主路线连接: 璃月8-5 → 璃月8-6 - 主路线连接: 璃月8-6 → 璃月8-7 - -处理区域: 璃月9 - 主路线: 璃月9-1 (路线1) - 主路线: 璃月9-2 (路线2) - 分支路线: 璃月9-3-1 (路线3, 分支1) - 主路线: 璃月9-4 (路线4) - 找到 3 个主路线,1 个分支组 - 主路线到分支: 璃月9-2 → 璃月9-3-1 - 分支到主路线: 璃月9-3-1 → 璃月9-4 - 主路线连接: 璃月9-1 → 璃月9-2 - 主路线连接: 璃月9-2 → 璃月9-4 - -处理区域: 稻妻1 - 主路线: 稻妻1-1 (路线1) - 主路线: 稻妻1-2 (路线2) - 主路线: 稻妻1-3 (路线3) - 主路线: 稻妻1-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 稻妻1-1 → 稻妻1-2 - 主路线连接: 稻妻1-2 → 稻妻1-3 - 主路线连接: 稻妻1-3 → 稻妻1-4 - -处理区域: 稻妻2 - 主路线: 稻妻2-1 (路线1) - 主路线: 稻妻2-2 (路线2) - 主路线: 稻妻2-3 (路线3) - 主路线: 稻妻2-4 (路线4) - 主路线: 稻妻2-5 (路线5) - 找到 5 个主路线,0 个分支组 - 主路线连接: 稻妻2-1 → 稻妻2-2 - 主路线连接: 稻妻2-2 → 稻妻2-3 - 主路线连接: 稻妻2-3 → 稻妻2-4 - 主路线连接: 稻妻2-4 → 稻妻2-5 - -处理区域: 稻妻3 - 主路线: 稻妻3-1 (路线1) - 主路线: 稻妻3-2 (路线2) - 主路线: 稻妻3-3 (路线3) - 主路线: 稻妻3-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 稻妻3-1 → 稻妻3-2 - 主路线连接: 稻妻3-2 → 稻妻3-3 - 主路线连接: 稻妻3-3 → 稻妻3-4 - -处理区域: 稻妻4 - 主路线: 稻妻4-1 (路线1) - 主路线: 稻妻4-2 (路线2) - 主路线: 稻妻4-3 (路线3) - 主路线: 稻妻4-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 稻妻4-1 → 稻妻4-2 - 主路线连接: 稻妻4-2 → 稻妻4-3 - 主路线连接: 稻妻4-3 → 稻妻4-4 - -处理区域: 稻妻5 - 主路线: 稻妻5-1 (路线1) - 主路线: 稻妻5-2 (路线2) - 主路线: 稻妻5-3 (路线3) - 主路线: 稻妻5-4 (路线4) - 主路线: 稻妻5-5 (路线5) - 找到 5 个主路线,0 个分支组 - 主路线连接: 稻妻5-1 → 稻妻5-2 - 主路线连接: 稻妻5-2 → 稻妻5-3 - 主路线连接: 稻妻5-3 → 稻妻5-4 - 主路线连接: 稻妻5-4 → 稻妻5-5 - -处理区域: 须弥1 - 主路线: 须弥1-1 (路线1) - 主路线: 须弥1-2 (路线2) - 主路线: 须弥1-3 (路线3) - 主路线: 须弥1-4 (路线4) - 主路线: 须弥1-5 (路线5) - 找到 5 个主路线,0 个分支组 - 主路线连接: 须弥1-1 → 须弥1-2 - 主路线连接: 须弥1-2 → 须弥1-3 - 主路线连接: 须弥1-3 → 须弥1-4 - 主路线连接: 须弥1-4 → 须弥1-5 - -处理区域: 须弥10 - 主路线: 须弥10-1 (路线1) - 主路线: 须弥10-2 (路线2) - 主路线: 须弥10-3 (路线3) - 主路线: 须弥10-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 须弥10-1 → 须弥10-2 - 主路线连接: 须弥10-2 → 须弥10-3 - 主路线连接: 须弥10-3 → 须弥10-4 - -处理区域: 须弥2 - 主路线: 须弥2-1 (路线1) - 主路线: 须弥2-2 (路线2) - 主路线: 须弥2-3 (路线3) - 主路线: 须弥2-4 (路线4) - 主路线: 须弥2-5 (路线5) - 找到 5 个主路线,0 个分支组 - 主路线连接: 须弥2-1 → 须弥2-2 - 主路线连接: 须弥2-2 → 须弥2-3 - 主路线连接: 须弥2-3 → 须弥2-4 - 主路线连接: 须弥2-4 → 须弥2-5 - -处理区域: 须弥3 - 主路线: 须弥3-1 (路线1) - 主路线: 须弥3-2 (路线2) - 主路线: 须弥3-3 (路线3) - 主路线: 须弥3-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 须弥3-1 → 须弥3-2 - 主路线连接: 须弥3-2 → 须弥3-3 - 主路线连接: 须弥3-3 → 须弥3-4 - -处理区域: 须弥4 - 主路线: 须弥4-1 (路线1) - 主路线: 须弥4-2 (路线2) - 主路线: 须弥4-3 (路线3) - 主路线: 须弥4-4 (路线4) - 主路线: 须弥4-5 (路线5) - 找到 5 个主路线,0 个分支组 - 主路线连接: 须弥4-1 → 须弥4-2 - 主路线连接: 须弥4-2 → 须弥4-3 - 主路线连接: 须弥4-3 → 须弥4-4 - 主路线连接: 须弥4-4 → 须弥4-5 - -处理区域: 须弥5 - 主路线: 须弥5-1 (路线1) - 主路线: 须弥5-2 (路线2) - 主路线: 须弥5-3 (路线3) - 主路线: 须弥5-4 (路线4) - 主路线: 须弥5-5 (路线5) - 找到 5 个主路线,0 个分支组 - 主路线连接: 须弥5-1 → 须弥5-2 - 主路线连接: 须弥5-2 → 须弥5-3 - 主路线连接: 须弥5-3 → 须弥5-4 - 主路线连接: 须弥5-4 → 须弥5-5 - -处理区域: 须弥6 - 主路线: 须弥6-1 (路线1) - 主路线: 须弥6-2 (路线2) - 主路线: 须弥6-3 (路线3) - 主路线: 须弥6-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 须弥6-1 → 须弥6-2 - 主路线连接: 须弥6-2 → 须弥6-3 - 主路线连接: 须弥6-3 → 须弥6-4 - -处理区域: 须弥8 - 主路线: 须弥8-1 (路线1) - 主路线: 须弥8-2 (路线2) - 主路线: 须弥8-3 (路线3) - 主路线: 须弥8-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 须弥8-1 → 须弥8-2 - 主路线连接: 须弥8-2 → 须弥8-3 - 主路线连接: 须弥8-3 → 须弥8-4 - -处理区域: 须弥9 - 主路线: 须弥9-1 (路线1) - 主路线: 须弥9-2 (路线2) - 主路线: 须弥9-3 (路线3) - 主路线: 须弥9-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 须弥9-1 → 须弥9-2 - 主路线连接: 须弥9-2 → 须弥9-3 - 主路线连接: 须弥9-3 → 须弥9-4 - -处理区域: 枫丹1 - 主路线: 枫丹1-1 (路线1) - 主路线: 枫丹1-2 (路线2) - 主路线: 枫丹1-3 (路线3) - 主路线: 枫丹1-4 (路线4) - 主路线: 枫丹1-5 (路线5) - 找到 5 个主路线,0 个分支组 - 主路线连接: 枫丹1-1 → 枫丹1-2 - 主路线连接: 枫丹1-2 → 枫丹1-3 - 主路线连接: 枫丹1-3 → 枫丹1-4 - 主路线连接: 枫丹1-4 → 枫丹1-5 - -处理区域: 枫丹2 - 主路线: 枫丹2-1 (路线1) - 主路线: 枫丹2-2 (路线2) - 主路线: 枫丹2-3 (路线3) - 主路线: 枫丹2-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 枫丹2-1 → 枫丹2-2 - 主路线连接: 枫丹2-2 → 枫丹2-3 - 主路线连接: 枫丹2-3 → 枫丹2-4 - -处理区域: 枫丹3 - 主路线: 枫丹3-1 (路线1) - 主路线: 枫丹3-2 (路线2) - 主路线: 枫丹3-3 (路线3) - 主路线: 枫丹3-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 枫丹3-1 → 枫丹3-2 - 主路线连接: 枫丹3-2 → 枫丹3-3 - 主路线连接: 枫丹3-3 → 枫丹3-4 - -处理区域: 枫丹4 - 主路线: 枫丹4-1 (路线1) - 主路线: 枫丹4-2 (路线2) - 主路线: 枫丹4-3 (路线3) - 主路线: 枫丹4-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 枫丹4-1 → 枫丹4-2 - 主路线连接: 枫丹4-2 → 枫丹4-3 - 主路线连接: 枫丹4-3 → 枫丹4-4 - -处理区域: 枫丹5 - 主路线: 枫丹5-1 (路线1) - 主路线: 枫丹5-2 (路线2) - 主路线: 枫丹5-3 (路线3) - 主路线: 枫丹5-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 枫丹5-1 → 枫丹5-2 - 主路线连接: 枫丹5-2 → 枫丹5-3 - 主路线连接: 枫丹5-3 → 枫丹5-4 - -处理区域: 枫丹6 - 主路线: 枫丹6-1 (路线1) - 主路线: 枫丹6-2 (路线2) - 主路线: 枫丹6-3 (路线3) - 主路线: 枫丹6-4 (路线4) - 主路线: 枫丹6-5 (路线5) - 主路线: 枫丹6-6 (路线6) - 找到 6 个主路线,0 个分支组 - 主路线连接: 枫丹6-1 → 枫丹6-2 - 主路线连接: 枫丹6-2 → 枫丹6-3 - 主路线连接: 枫丹6-3 → 枫丹6-4 - 主路线连接: 枫丹6-4 → 枫丹6-5 - 主路线连接: 枫丹6-5 → 枫丹6-6 - -处理区域: 纳塔1 - 主路线: 纳塔1-1 (路线1) - 主路线: 纳塔1-2 (路线2) - 主路线: 纳塔1-3 (路线3) - 主路线: 纳塔1-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 纳塔1-1 → 纳塔1-2 - 主路线连接: 纳塔1-2 → 纳塔1-3 - 主路线连接: 纳塔1-3 → 纳塔1-4 - -处理区域: 纳塔10 - 主路线: 纳塔10-1 (路线1) - 主路线: 纳塔10-2 (路线2) - 主路线: 纳塔10-3 (路线3) - 主路线: 纳塔10-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 纳塔10-1 → 纳塔10-2 - 主路线连接: 纳塔10-2 → 纳塔10-3 - 主路线连接: 纳塔10-3 → 纳塔10-4 - -处理区域: 纳塔2 - 主路线: 纳塔2-1 (路线1) - 主路线: 纳塔2-2 (路线2) - 主路线: 纳塔2-3 (路线3) - 主路线: 纳塔2-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 纳塔2-1 → 纳塔2-2 - 主路线连接: 纳塔2-2 → 纳塔2-3 - 主路线连接: 纳塔2-3 → 纳塔2-4 - -处理区域: 纳塔3 - 主路线: 纳塔3-1 (路线1) - 主路线: 纳塔3-2 (路线2) - 主路线: 纳塔3-3 (路线3) - 主路线: 纳塔3-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 纳塔3-1 → 纳塔3-2 - 主路线连接: 纳塔3-2 → 纳塔3-3 - 主路线连接: 纳塔3-3 → 纳塔3-4 - -处理区域: 纳塔4 - 主路线: 纳塔4-1 (路线1) - 主路线: 纳塔4-2 (路线2) - 找到 2 个主路线,0 个分支组 - 主路线连接: 纳塔4-1 → 纳塔4-2 - -处理区域: 纳塔5 - 主路线: 纳塔5-1 (路线1) - 主路线: 纳塔5-2 (路线2) - 主路线: 纳塔5-3 (路线3) - 找到 3 个主路线,0 个分支组 - 主路线连接: 纳塔5-1 → 纳塔5-2 - 主路线连接: 纳塔5-2 → 纳塔5-3 - -处理区域: 纳塔6 - 主路线: 纳塔6-1 (路线1) - 主路线: 纳塔6-2 (路线2) - 主路线: 纳塔6-3 (路线3) - 主路线: 纳塔6-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 纳塔6-1 → 纳塔6-2 - 主路线连接: 纳塔6-2 → 纳塔6-3 - 主路线连接: 纳塔6-3 → 纳塔6-4 - -处理区域: 纳塔7 - 主路线: 纳塔7-1 (路线1) - 主路线: 纳塔7-2 (路线2) - 主路线: 纳塔7-3 (路线3) - 找到 3 个主路线,0 个分支组 - 主路线连接: 纳塔7-1 → 纳塔7-2 - 主路线连接: 纳塔7-2 → 纳塔7-3 - -处理区域: 纳塔8 - 主路线: 纳塔8-1 (路线1) - 主路线: 纳塔8-2 (路线2) - 主路线: 纳塔8-3 (路线3) - 找到 3 个主路线,0 个分支组 - 主路线连接: 纳塔8-1 → 纳塔8-2 - 主路线连接: 纳塔8-2 → 纳塔8-3 - -处理区域: 纳塔9 - 主路线: 纳塔9-1 (路线1) - 主路线: 纳塔9-2 (路线2) - 主路线: 纳塔9-3 (路线3) - 主路线: 纳塔9-4 (路线4) - 找到 4 个主路线,0 个分支组 - 主路线连接: 纳塔9-1 → 纳塔9-2 - 主路线连接: 纳塔9-2 → 纳塔9-3 - 主路线连接: 纳塔9-3 → 纳塔9-4 - -总共创建了 171 条顺序边 - -重新排序所有边... - -已生成新的数据结构: C:\Users\root\Documents\BetterGI\bettergi-scripts-list\repo\js\AutoLeyLineOutcrop\LeyLineOutcropData.json -传送点数量: 92 -地脉花数量: 218 -总节点数量: 310 -传送点到地脉花边数量: 318 -节点间顺序边数量: 171 -总边数量: 318 -区域排序顺序: 蒙德, 璃月, 稻妻, 须弥, 枫丹, 纳塔 -Traceback (most recent call last): - File "C:\Users\root\Documents\BetterGI\bettergi-scripts-list\repo\js\AutoLeyLineOutcrop\generate_data_format.py", line 883, in - generate_new_data_structure_from_pathing() - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^ - File "C:\Users\root\Documents\BetterGI\bettergi-scripts-list\repo\js\AutoLeyLineOutcrop\generate_data_format.py", line 597, in generate_new_data_structure_from_pathing - print("\n\u2713 所有目标点都至少有一条入边") - ~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -UnicodeEncodeError: 'gbk' codec can't encode character '\u2713' in position 2: illegal multibyte sequence diff --git a/repo/js/AutoLeyLineOutcrop/output_new.txt b/repo/js/AutoLeyLineOutcrop/output_new.txt deleted file mode 100644 index bf0f450f..00000000 --- a/repo/js/AutoLeyLineOutcrop/output_new.txt +++ /dev/null @@ -1,1001 +0,0 @@ -第一遍:读取路径文件并创建节点... - 创建传送点: ID=1, 区域=枫丹, 坐标=(4146.91, 2606.27) - 创建传送点: ID=2, 区域=枫丹, 坐标=(4375.5, 2280.05) - 创建传送点: ID=3, 区域=枫丹, 坐标=(4984.79, 4462.98) - 创建传送点: ID=4, 区域=枫丹, 坐标=(4498.18, 4710.79) - 创建传送点: ID=5, 区域=枫丹, 坐标=(4624.36, 4951.78) - 创建传送点: ID=6, 区域=枫丹, 坐标=(2873.54, 3512.04) - 创建传送点: ID=7, 区域=枫丹, 坐标=(3032.66, 3732.42) - 创建传送点: ID=8, 区域=枫丹, 坐标=(3917.29, 2576.43) - 创建传送点: ID=9, 区域=枫丹, 坐标=(4749.59, 2636.21) - 创建传送点: ID=10, 区域=枫丹, 坐标=(4689.61, 2429.43) - 创建传送点: ID=11, 区域=枫丹, 坐标=(4626.1, 2182.3) - 创建传送点: ID=12, 区域=璃月, 坐标=(207.48, 1573.01) - 创建传送点: ID=13, 区域=璃月, 坐标=(-321.55, 1473.33) - 创建传送点: ID=14, 区域=璃月, 坐标=(897.84, 583.5) - 创建传送点: ID=15, 区域=璃月, 坐标=(1045.53, 950.63) - 创建传送点: ID=16, 区域=璃月, 坐标=(341.33, 548.08) - 创建传送点: ID=17, 区域=璃月, 坐标=(839.82, 1532.39) - 创建传送点: ID=18, 区域=璃月, 坐标=(489.8, 1435.14) - 创建传送点: ID=19, 区域=璃月, 坐标=(253.05, 1284.9) - 创建传送点: ID=20, 区域=璃月, 坐标=(2257.04, 934.92) - 创建传送点: ID=21, 区域=璃月, 坐标=(1433.37, 1288.0) - 创建传送点: ID=22, 区域=璃月, 坐标=(-164.59, 1182.45) - 创建传送点: ID=23, 区域=璃月, 坐标=(-188.52, 972.43) - 创建传送点: ID=24, 区域=璃月, 坐标=(-57.41, 656.93) - 创建传送点: ID=25, 区域=璃月, 坐标=(26.02, -112.29) - 创建传送点: ID=26, 区域=璃月, 坐标=(173.88, 389.47) - 创建传送点: ID=27, 区域=璃月, 坐标=(710.68, -772.49) - 创建传送点: ID=28, 区域=璃月, 坐标=(978.65, -353.56) - 创建传送点: ID=29, 区域=璃月, 坐标=(611.74, -284.65) - 创建传送点: ID=30, 区域=璃月, 坐标=(837.46, 235.15) - 创建传送点: ID=31, 区域=璃月, 坐标=(876.75, 587.25) - 创建传送点: ID=32, 区域=璃月, 坐标=(1665.91, 386.6) - 创建传送点: ID=33, 区域=璃月, 坐标=(1152.67, 141.57) - 创建传送点: ID=34, 区域=璃月, 坐标=(1389.08, 516.44) - 创建传送点: ID=35, 区域=稻妻, 坐标=(-4217.89, -2397.87) - 创建传送点: ID=36, 区域=稻妻, 坐标=(-4408.91, -2395.34) - 创建传送点: ID=37, 区域=稻妻, 坐标=(-3016.79, -3623.7) - 创建传送点: ID=38, 区域=稻妻, 坐标=(-3233.21, -3534.22) - 创建传送点: ID=39, 区域=稻妻, 坐标=(-3393.16, -3555.99) - 创建传送点: ID=40, 区域=稻妻, 坐标=(-3437.06, -3319.78) - 创建传送点: ID=41, 区域=稻妻, 坐标=(-2224.14, -4004.16) - 创建传送点: ID=42, 区域=稻妻, 坐标=(-1058.01, -3948.66) - 创建传送点: ID=43, 区域=稻妻, 坐标=(-1315.93, -3774.25) - 创建传送点: ID=44, 区域=稻妻, 坐标=(-3891.55, -4389.92) - 创建传送点: ID=45, 区域=稻妻, 坐标=(-3684.76, -4278.4) - 创建传送点: ID=46, 区域=纳塔, 坐标=(7796.08, -1873.18) - 创建传送点: ID=47, 区域=纳塔, 坐标=(7857.47, -1751.25) - 创建传送点: ID=48, 区域=纳塔, 坐标=(8291.35, -2922.46) - 创建传送点: ID=49, 区域=纳塔, 坐标=(8744.65, -3009.56) - 创建传送点: ID=50, 区域=纳塔, 坐标=(8706.46, -1575.02) - 创建传送点: ID=51, 区域=纳塔, 坐标=(8670.84, -1269.72) - 创建传送点: ID=52, 区域=纳塔, 坐标=(8201.95, -2288.75) - 创建传送点: ID=53, 区域=纳塔, 坐标=(8372.19, -2196.26) - 创建传送点: ID=54, 区域=纳塔, 坐标=(9038.74, -2429.33) - 创建传送点: ID=55, 区域=纳塔, 坐标=(9812.76, -2852.58) - 创建传送点: ID=56, 区域=纳塔, 坐标=(9282.7, -2163.58) - 创建传送点: ID=57, 区域=纳塔, 坐标=(9989.5, -1607.82) - 创建传送点: ID=58, 区域=纳塔, 坐标=(9548.24, -1116.54) - 创建传送点: ID=59, 区域=纳塔, 坐标=(9719.22, -851.99) - 创建传送点: ID=60, 区域=纳塔, 坐标=(9839.57, -1290.01) - 创建传送点: ID=61, 区域=蒙德, 坐标=(-1166.84, 2132.83) - 创建传送点: ID=62, 区域=蒙德, 坐标=(-1266.59, 1933.52) - 创建传送点: ID=63, 区域=蒙德, 坐标=(-914.82, 1795.51) - 创建传送点: ID=64, 区域=蒙德, 坐标=(-663.61, 1709.65) - 创建传送点: ID=65, 区域=蒙德, 坐标=(-578.76, 1853.42) - 创建传送点: ID=66, 区域=蒙德, 坐标=(-251.66, 2256.55) - 创建传送点: ID=67, 区域=蒙德, 坐标=(-385.84, 2297.22) - 创建传送点: ID=68, 区域=蒙德, 坐标=(-440.09, 2580.75) - 创建传送点: ID=69, 区域=蒙德, 坐标=(177.18, 2647.07) - 创建传送点: ID=70, 区域=蒙德, 坐标=(265.6, 2915.02) - 创建传送点: ID=71, 区域=蒙德, 坐标=(-1505.87, 2296.26) - 创建传送点: ID=72, 区域=蒙德, 坐标=(-1330.15, 2563.86) - 创建传送点: ID=73, 区域=蒙德, 坐标=(-1273.84, 2721.72) - 创建传送点: ID=74, 区域=蒙德, 坐标=(-1629.44, 2834.36) - 创建传送点: ID=75, 区域=蒙德, 坐标=(-1867.21, 1331.21) - 创建传送点: ID=76, 区域=蒙德, 坐标=(-1432.63, 1464.61) - 创建传送点: ID=77, 区域=须弥, 坐标=(2342.31, -4.68) - 创建传送点: ID=78, 区域=须弥, 坐标=(6615.13, 724.95) - 创建传送点: ID=79, 区域=须弥, 坐标=(6339.59, 738.39) - 创建传送点: ID=80, 区域=须弥, 坐标=(2806.54, -1790.45) - 创建传送点: ID=81, 区域=须弥, 坐标=(2980.23, -1758.59) - 创建传送点: ID=82, 区域=须弥, 坐标=(3199.51, -911.7) - 创建传送点: ID=83, 区域=须弥, 坐标=(3252.87, -591.25) - 创建传送点: ID=84, 区域=须弥, 坐标=(3402.18, -1175.26) - 创建传送点: ID=85, 区域=须弥, 坐标=(3473.06, -1573.53) - 创建传送点: ID=86, 区域=须弥, 坐标=(3639.36, -1416.85) - 创建传送点: ID=87, 区域=须弥, 坐标=(4409.72, -1874.67) - 创建传送点: ID=88, 区域=须弥, 坐标=(4470.72, -2915.3) - 创建传送点: ID=89, 区域=须弥, 坐标=(4790.78, -3182.65) - 创建传送点: ID=90, 区域=须弥, 坐标=(4810.42, -2732.88) - 创建传送点: ID=91, 区域=须弥, 坐标=(5759.42, -1307.6) - 创建传送点: ID=92, 区域=须弥, 坐标=(4592.2, -647.56) - -第二遍:读取target文件并创建目标节点... - 创建目标点: ID=1000, 区域=枫丹1-1, 坐标=(4183.27, 2502.37) - 创建目标点: ID=1001, 区域=枫丹1-2, 坐标=(4190.03, 2426.41) - 创建目标点: ID=1002, 区域=枫丹1-3, 坐标=(4246.28, 2374.05) - 创建目标点: ID=1003, 区域=枫丹1-4, 坐标=(4299.75, 2232.59) - 创建目标点: ID=1004, 区域=枫丹1-5, 坐标=(4402.53, 2253.27) - 创建目标点: ID=1005, 区域=枫丹2-1, 坐标=(4962.82, 4395.81) - 创建目标点: ID=1006, 区域=枫丹2-2, 坐标=(4952.04, 4468.84) - 创建目标点: ID=1007, 区域=枫丹2-3, 坐标=(5043.36, 4479.99) - 创建目标点: ID=1008, 区域=枫丹2-4, 坐标=(5087.02, 4573.27) - 创建目标点: ID=1009, 区域=枫丹3-1, 坐标=(4556.1, 4762.42) - 创建目标点: ID=1010, 区域=枫丹3-2, 坐标=(4517.81, 4866.48) - 创建目标点: ID=1011, 区域=枫丹3-3, 坐标=(4578.63, 4913.28) - 创建目标点: ID=1012, 区域=枫丹3-4, 坐标=(4679.47, 4977.83) - 创建目标点: ID=1013, 区域=枫丹4-1, 坐标=(2932.47, 3583.9) - 创建目标点: ID=1014, 区域=枫丹4-2, 坐标=(3008.4, 3602.59) - 创建目标点: ID=1015, 区域=枫丹4-3, 坐标=(3077.19, 3602.84) - 创建目标点: ID=1016, 区域=枫丹4-4, 坐标=(3091.8, 3654.75) - 创建目标点: ID=1017, 区域=枫丹5-1, 坐标=(4098.63, 2584.16) - 创建目标点: ID=1018, 区域=枫丹5-2, 坐标=(4063.52, 2564.29) - 创建目标点: ID=1019, 区域=枫丹5-3, 坐标=(3999.66, 2613.18) - 创建目标点: ID=1020, 区域=枫丹5-4, 坐标=(3921.35, 2617.81) - 创建目标点: ID=1021, 区域=枫丹6-1, 坐标=(4760.8, 2574.52) - 创建目标点: ID=1022, 区域=枫丹6-2, 坐标=(4653.67, 2531.89) - 创建目标点: ID=1023, 区域=枫丹6-3, 坐标=(4568.49, 2433.23) - 创建目标点: ID=1024, 区域=枫丹6-4, 坐标=(4553.51, 2358.49) - 创建目标点: ID=1025, 区域=枫丹6-5, 坐标=(4607.46, 2316.58) - 创建目标点: ID=1026, 区域=枫丹6-6, 坐标=(4700.14, 2393.35) - 创建目标点: ID=1027, 区域=璃月1-1, 坐标=(73.73, 1496.59) - 创建目标点: ID=1028, 区域=璃月1-2, 坐标=(-12.62, 1566.51) - 创建目标点: ID=1029, 区域=璃月1-3, 坐标=(-81.76, 1534.73) - 创建目标点: ID=1030, 区域=璃月1-4, 坐标=(-28.76, 1417.37) - 创建目标点: ID=1031, 区域=璃月10-1, 坐标=(1046.34, 662.76) - 创建目标点: ID=1032, 区域=璃月10-2, 坐标=(892.5, 748.02) - 创建目标点: ID=1033, 区域=璃月10-3, 坐标=(594.3, 437.83) - 创建目标点: ID=1034, 区域=璃月10-4, 坐标=(683.19, 529.0) - 创建目标点: ID=1035, 区域=璃月10-5, 坐标=(455.4, 546.56) - 创建目标点: ID=1036, 区域=璃月11-1, 坐标=(802.19, 1634.03) - 创建目标点: ID=1037, 区域=璃月11-2, 坐标=(697.31, 1551.84) - 创建目标点: ID=1038, 区域=璃月11-3, 坐标=(646.5, 1421.98) - 创建目标点: ID=1039, 区域=璃月11-4, 坐标=(632.03, 1331.15) - 创建目标点: ID=1040, 区域=璃月11-5, 坐标=(558.31, 1437.82) - 创建目标点: ID=1041, 区域=璃月11-6, 坐标=(285.79, 1457.93) - 创建目标点: ID=1042, 区域=璃月13-1, 坐标=(2254.49, 970.92) - 创建目标点: ID=1043, 区域=璃月13-2, 坐标=(2252.54, 898.21) - 创建目标点: ID=1044, 区域=璃月13-3, 坐标=(2226.91, 863.09) - 创建目标点: ID=1045, 区域=璃月13-4, 坐标=(2028.69, 830.67) - 创建目标点: ID=1046, 区域=璃月14-1, 坐标=(1614.21, 1382.09) - 创建目标点: ID=1047, 区域=璃月14-2, 坐标=(1581.57, 1437.1) - 创建目标点: ID=1048, 区域=璃月14-3, 坐标=(1563.45, 1487.35) - 创建目标点: ID=1049, 区域=璃月14-4, 坐标=(1525.0, 1549.17) - 创建目标点: ID=1050, 区域=璃月2-1, 坐标=(-194.85, 1163.89) - 创建目标点: ID=1051, 区域=璃月2-2, 坐标=(32.81, 1118.31) - 创建目标点: ID=1052, 区域=璃月2-3, 坐标=(-24.14, 931.71) - 创建目标点: ID=1053, 区域=璃月2-4, 坐标=(-10.67, 683.67) - 创建目标点: ID=1054, 区域=璃月3-1, 坐标=(-55.27, 603.84) - 创建目标点: ID=1055, 区域=璃月3-2, 坐标=(139.9, 685.26) - 创建目标点: ID=1056, 区域=璃月3-3, 坐标=(284.12, 620.66) - 创建目标点: ID=1057, 区域=璃月3-4, 坐标=(276.12, 542.51) - 注意: 坐标 (456.0, 546.29) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1058, 区域=璃月3-5, 坐标=(456.0, 546.29) - 创建目标点: ID=1059, 区域=璃月4-1, 坐标=(-7.16, -48.77) - 创建目标点: ID=1060, 区域=璃月4-2, 坐标=(101.14, -2.97) - 创建目标点: ID=1061, 区域=璃月4-3, 坐标=(127.05, 113.87) - 创建目标点: ID=1062, 区域=璃月4-4, 坐标=(146.03, 220.07) - 创建目标点: ID=1063, 区域=璃月4-5, 坐标=(262.65, 357.85) - 注意: 坐标 (276.55, 543.11) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1064, 区域=璃月4-6, 坐标=(276.55, 543.11) - 注意: 坐标 (456.44, 546.35) 附近有另一个区域的节点,但将创建新节点 - 注意: 坐标 (456.44, 546.35) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1065, 区域=璃月4-7, 坐标=(456.44, 546.35) - 创建目标点: ID=1066, 区域=璃月5-1, 坐标=(773.08, -928.68) - 创建目标点: ID=1067, 区域=璃月5-2, 坐标=(885.79, -780.15) - 创建目标点: ID=1068, 区域=璃月5-3, 坐标=(1063.54, -727.34) - 创建目标点: ID=1069, 区域=璃月5-4-1, 坐标=(936.52, -489.9) - 创建目标点: ID=1070, 区域=璃月7-1, 坐标=(824.28, -325.68) - 创建目标点: ID=1071, 区域=璃月7-2, 坐标=(721.94, -106.43) - 创建目标点: ID=1072, 区域=璃月7-3, 坐标=(752.42, 3.88) - 创建目标点: ID=1073, 区域=璃月7-4, 坐标=(815.03, 136.35) - 注意: 坐标 (681.46, 528.76) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1074, 区域=璃月7-5, 坐标=(681.46, 528.76) - 注意: 坐标 (455.4, 546.56) 附近有另一个区域的节点,但将创建新节点 - 注意: 坐标 (455.4, 546.56) 附近有另一个区域的节点,但将创建新节点 - 注意: 坐标 (455.4, 546.56) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1075, 区域=璃月7-6, 坐标=(455.4, 546.56) - 创建目标点: ID=1076, 区域=璃月8-1, 坐标=(1627.15, 303.83) - 创建目标点: ID=1077, 区域=璃月8-2, 坐标=(1333.25, 266.26) - 创建目标点: ID=1078, 区域=璃月8-3, 坐标=(1160.17, 86.75) - 创建目标点: ID=1079, 区域=璃月8-4, 坐标=(972.68, 98.66) - 注意: 坐标 (815.31, 137.31) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1080, 区域=璃月8-5, 坐标=(815.31, 137.31) - 注意: 坐标 (683.33, 529.05) 附近有另一个区域的节点,但将创建新节点 - 注意: 坐标 (683.33, 529.05) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1081, 区域=璃月8-6, 坐标=(683.33, 529.05) - 注意: 坐标 (455.84, 546.39) 附近有另一个区域的节点,但将创建新节点 - 注意: 坐标 (455.84, 546.39) 附近有另一个区域的节点,但将创建新节点 - 注意: 坐标 (455.84, 546.39) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1082, 区域=璃月8-7, 坐标=(455.84, 546.39) - 创建目标点: ID=1083, 区域=璃月9-1, 坐标=(1484.37, 458.69) - 创建目标点: ID=1084, 区域=璃月9-2, 坐标=(1445.77, 577.83) - 创建目标点: ID=1085, 区域=璃月9-3-1, 坐标=(1561.48, 483.03) - 注意: 坐标 (1561.71, 483.58) 与已存在节点 '璃月9-3-1' 区域基本部分相同,视为同一节点 - 创建目标点: ID=1086, 区域=璃月9-4, 坐标=(1686.66, 567.55) - 创建目标点: ID=1087, 区域=稻妻1-1, 坐标=(-4309.58, -2288.5) - 创建目标点: ID=1088, 区域=稻妻1-2, 坐标=(-4401.19, -2226.96) - 创建目标点: ID=1089, 区域=稻妻1-3, 坐标=(-4509.57, -2332.11) - 创建目标点: ID=1090, 区域=稻妻1-4, 坐标=(-4549.96, -2399.98) - 创建目标点: ID=1091, 区域=稻妻2-1, 坐标=(-3007.64, -3515.28) - 创建目标点: ID=1092, 区域=稻妻2-2, 坐标=(-3153.03, -3485.5) - 创建目标点: ID=1093, 区域=稻妻2-3, 坐标=(-3328.99, -3561.28) - 创建目标点: ID=1094, 区域=稻妻2-4, 坐标=(-3429.72, -3419.55) - 创建目标点: ID=1095, 区域=稻妻2-5, 坐标=(-3340.38, -3237.16) - 创建目标点: ID=1096, 区域=稻妻3-1, 坐标=(-2270.07, -4068.21) - 创建目标点: ID=1097, 区域=稻妻3-2, 坐标=(-2280.61, -4171.18) - 创建目标点: ID=1098, 区域=稻妻3-3, 坐标=(-2169.62, -4076.36) - 创建目标点: ID=1099, 区域=稻妻3-4, 坐标=(-2211.44, -4033.62) - 创建目标点: ID=1100, 区域=稻妻4-1, 坐标=(-1120.06, -3962.66) - 创建目标点: ID=1101, 区域=稻妻4-2, 坐标=(-1190.51, -3902.08) - 创建目标点: ID=1102, 区域=稻妻4-3, 坐标=(-1254.7, -3839.91) - 创建目标点: ID=1103, 区域=稻妻4-4, 坐标=(-1322.41, -3815.69) - 创建目标点: ID=1104, 区域=稻妻5-1, 坐标=(-3908.27, -4290.55) - 创建目标点: ID=1105, 区域=稻妻5-2, 坐标=(-3850.61, -4241.9) - 创建目标点: ID=1106, 区域=稻妻5-3, 坐标=(-3763.54, -4259.14) - 创建目标点: ID=1107, 区域=稻妻5-4, 坐标=(-3703.34, -4343.16) - 创建目标点: ID=1108, 区域=稻妻5-5, 坐标=(-3671.61, -4414.03) - 创建目标点: ID=1109, 区域=纳塔1-1, 坐标=(7864.95, -1823.96) - 创建目标点: ID=1110, 区域=纳塔1-2, 坐标=(7945.72, -1744.08) - 创建目标点: ID=1111, 区域=纳塔1-3, 坐标=(7932.2, -1616.37) - 创建目标点: ID=1112, 区域=纳塔1-4, 坐标=(7853.72, -1554.26) - 创建目标点: ID=1113, 区域=纳塔10-1, 坐标=(8361.82, -2993.79) - 创建目标点: ID=1114, 区域=纳塔10-2, 坐标=(8496.07, -3018.4) - 创建目标点: ID=1115, 区域=纳塔10-3, 坐标=(8587.99, -3022.4) - 创建目标点: ID=1116, 区域=纳塔10-4, 坐标=(8879.8, -3059.26) - 创建目标点: ID=1117, 区域=纳塔2-1, 坐标=(8604.22, -1635.22) - 创建目标点: ID=1118, 区域=纳塔2-2, 坐标=(8657.57, -1501.26) - 创建目标点: ID=1119, 区域=纳塔2-3, 坐标=(8733.62, -1528.95) - 创建目标点: ID=1120, 区域=纳塔2-4, 坐标=(8588.9, -1373.62) - 创建目标点: ID=1121, 区域=纳塔3-1, 坐标=(8312.07, -2344.44) - 创建目标点: ID=1122, 区域=纳塔3-2, 坐标=(8429.86, -2328.47) - 创建目标点: ID=1123, 区域=纳塔3-3, 坐标=(8291.29, -2096.67) - 创建目标点: ID=1124, 区域=纳塔3-4, 坐标=(8088.21, -2053.56) - 创建目标点: ID=1125, 区域=纳塔4-1, 坐标=(9028.67, -2342.6) - 创建目标点: ID=1126, 区域=纳塔4-2, 坐标=(9090.71, -2407.11) - 创建目标点: ID=1127, 区域=纳塔5-1, 坐标=(9687.15, -2898.19) - 创建目标点: ID=1128, 区域=纳塔5-2, 坐标=(9754.7, -2904.43) - 创建目标点: ID=1129, 区域=纳塔5-3, 坐标=(9778.7, -2856.31) - 创建目标点: ID=1130, 区域=纳塔6-1, 坐标=(9231.08, -2154.74) - 创建目标点: ID=1131, 区域=纳塔6-2, 坐标=(9110.86, -2222.48) - 创建目标点: ID=1132, 区域=纳塔6-3, 坐标=(8945.55, -2138.43) - 创建目标点: ID=1133, 区域=纳塔6-4, 坐标=(8810.08, -2077.83) - 创建目标点: ID=1134, 区域=纳塔7-1, 坐标=(9999.51, -1570.23) - 创建目标点: ID=1135, 区域=纳塔7-2, 坐标=(9963.8, -1511.61) - 创建目标点: ID=1136, 区域=纳塔7-3, 坐标=(9907.78, -1424.0) - 创建目标点: ID=1137, 区域=纳塔8-1, 坐标=(9636.29, -1038.41) - 创建目标点: ID=1138, 区域=纳塔8-2, 坐标=(9517.92, -1029.8) - 创建目标点: ID=1139, 区域=纳塔8-3, 坐标=(9472.28, -771.8) - 创建目标点: ID=1140, 区域=纳塔9-1, 坐标=(9920.8, -1196.25) - 创建目标点: ID=1141, 区域=纳塔9-2, 坐标=(9888.22, -1046.55) - 创建目标点: ID=1142, 区域=纳塔9-3, 坐标=(9938.82, -933.87) - 创建目标点: ID=1143, 区域=纳塔9-4, 坐标=(9984.24, -876.43) - 创建目标点: ID=1144, 区域=蒙德1-1, 坐标=(-1298.03, 2172.37) - 创建目标点: ID=1145, 区域=蒙德1-2, 坐标=(-1223.18, 2032.04) - 创建目标点: ID=1146, 区域=蒙德1-3, 坐标=(-1113.87, 1971.9) - 创建目标点: ID=1147, 区域=蒙德1-4, 坐标=(-1041.91, 1927.07) - 创建目标点: ID=1148, 区域=蒙德1-5, 坐标=(-895.08, 1833.84) - 创建目标点: ID=1149, 区域=蒙德2-1, 坐标=(-717.83, 1802.77) - 创建目标点: ID=1150, 区域=蒙德2-2, 坐标=(-523.76, 1813.84) - 创建目标点: ID=1151, 区域=蒙德2-3, 坐标=(-420.36, 1998.11) - 创建目标点: ID=1152, 区域=蒙德2-4-1, 坐标=(-347.95, 1902.51) - 创建目标点: ID=1153, 区域=蒙德2-4-2, 坐标=(-319.46, 2156.93) - 注意: 坐标 (-319.46, 2156.93) 与已存在节点 '蒙德2-4-2' 区域基本部分相同,视为同一节点 - 注意: 坐标 (-319.57, 2156.48) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1154, 区域=蒙德2-5-1, 坐标=(-319.57, 2156.48) - 创建目标点: ID=1155, 区域=蒙德3-1, 坐标=(-281.79, 2310.78) - 创建目标点: ID=1156, 区域=蒙德3-2, 坐标=(-205.49, 2429.07) - 创建目标点: ID=1157, 区域=蒙德3-3, 坐标=(-327.03, 2410.43) - 创建目标点: ID=1158, 区域=蒙德3-4, 坐标=(-336.15, 2562.91) - 创建目标点: ID=1159, 区域=蒙德4-1, 坐标=(241.41, 2703.08) - 创建目标点: ID=1160, 区域=蒙德4-2, 坐标=(124.61, 2817.24) - 创建目标点: ID=1161, 区域=蒙德4-3, 坐标=(152.71, 2963.33) - 创建目标点: ID=1162, 区域=蒙德4-4, 坐标=(-27.99, 2919.59) - 创建目标点: ID=1163, 区域=蒙德5-1, 坐标=(-1453.46, 2282.88) - 创建目标点: ID=1164, 区域=蒙德5-2, 坐标=(-1367.78, 2411.31) - 创建目标点: ID=1165, 区域=蒙德5-3, 坐标=(-1474.91, 2520.0) - 创建目标点: ID=1166, 区域=蒙德5-4, 坐标=(-1394.83, 2569.65) - 创建目标点: ID=1167, 区域=蒙德5-5, 坐标=(-1316.21, 2734.67) - 创建目标点: ID=1168, 区域=蒙德6-1, 坐标=(-1512.81, 2774.26) - 创建目标点: ID=1169, 区域=蒙德6-2, 坐标=(-1518.71, 2877.4) - 创建目标点: ID=1170, 区域=蒙德6-3, 坐标=(-1603.95, 2865.65) - 创建目标点: ID=1171, 区域=蒙德6-4, 坐标=(-1710.73, 2983.29) - 创建目标点: ID=1172, 区域=蒙德7-1, 坐标=(-1660.63, 1392.87) - 创建目标点: ID=1173, 区域=蒙德7-2, 坐标=(-1517.07, 1513.97) - 创建目标点: ID=1174, 区域=蒙德7-3, 坐标=(-1331.96, 1560.15) - 创建目标点: ID=1175, 区域=蒙德7-4, 坐标=(-1318.63, 1692.63) - 创建目标点: ID=1176, 区域=蒙德7-5, 坐标=(-1138.22, 1789.79) - 注意: 坐标 (-895.08, 1833.84) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1177, 区域=蒙德7-6, 坐标=(-895.08, 1833.84) - 创建目标点: ID=1178, 区域=须弥1-1, 坐标=(2368.79, -92.11) - 创建目标点: ID=1179, 区域=须弥1-2, 坐标=(2317.29, -115.35) - 创建目标点: ID=1180, 区域=须弥1-3, 坐标=(2212.83, -83.02) - 创建目标点: ID=1181, 区域=须弥1-4, 坐标=(2233.8, -160.88) - 创建目标点: ID=1182, 区域=须弥1-5, 坐标=(2269.0, -251.14) - 创建目标点: ID=1183, 区域=须弥10-1, 坐标=(6501.08, 904.25) - 创建目标点: ID=1184, 区域=须弥10-2, 坐标=(6613.41, 784.42) - 创建目标点: ID=1185, 区域=须弥10-3, 坐标=(6692.66, 625.4) - 创建目标点: ID=1186, 区域=须弥10-4, 坐标=(6280.81, 616.8) - 创建目标点: ID=1187, 区域=须弥2-1, 坐标=(2910.46, -1818.57) - 创建目标点: ID=1188, 区域=须弥2-2, 坐标=(2980.38, -1758.57) - 创建目标点: ID=1189, 区域=须弥2-3, 坐标=(3013.06, -1700.54) - 创建目标点: ID=1190, 区域=须弥2-4, 坐标=(2981.92, -1641.54) - 创建目标点: ID=1191, 区域=须弥2-5, 坐标=(2963.07, -1586.92) - 创建目标点: ID=1192, 区域=须弥3-1, 坐标=(3195.78, -806.97) - 创建目标点: ID=1193, 区域=须弥3-2, 坐标=(3233.51, -740.65) - 创建目标点: ID=1194, 区域=须弥3-3, 坐标=(3324.5, -659.02) - 创建目标点: ID=1195, 区域=须弥3-4, 坐标=(3387.39, -664.21) - 创建目标点: ID=1196, 区域=须弥4-1, 坐标=(3381.91, -1231.97) - 创建目标点: ID=1197, 区域=须弥4-2, 坐标=(3355.82, -1318.18) - 创建目标点: ID=1198, 区域=须弥4-3, 坐标=(3466.17, -1318.08) - 创建目标点: ID=1199, 区域=须弥4-4, 坐标=(3504.37, -1500.13) - 创建目标点: ID=1200, 区域=须弥4-5, 坐标=(3721.99, -1507.71) - 创建目标点: ID=1201, 区域=须弥5-1, 坐标=(4345.77, -1793.67) - 创建目标点: ID=1202, 区域=须弥5-2, 坐标=(4257.86, -1903.31) - 创建目标点: ID=1203, 区域=须弥5-3, 坐标=(4144.29, -2014.19) - 注意: 坐标 (4144.18, -2014.48) 附近有另一个区域的节点,但将创建新节点 - 创建目标点: ID=1204, 区域=须弥5-4, 坐标=(4144.18, -2014.48) - 创建目标点: ID=1205, 区域=须弥5-5, 坐标=(4211.01, -2165.65) - 创建目标点: ID=1206, 区域=须弥6-1, 坐标=(4552.75, -2945.07) - 创建目标点: ID=1207, 区域=须弥6-2, 坐标=(4696.5, -3055.9) - 创建目标点: ID=1208, 区域=须弥6-3, 坐标=(4886.54, -2940.45) - 创建目标点: ID=1209, 区域=须弥6-4, 坐标=(4756.03, -2742.32) - 创建目标点: ID=1210, 区域=须弥8-1, 坐标=(5758.76, -1154.57) - 创建目标点: ID=1211, 区域=须弥8-2, 坐标=(5887.09, -1120.65) - 创建目标点: ID=1212, 区域=须弥8-3, 坐标=(5902.11, -1008.25) - 创建目标点: ID=1213, 区域=须弥8-4, 坐标=(5928.09, -922.46) - 创建目标点: ID=1214, 区域=须弥9-1, 坐标=(4555.52, -569.96) - 创建目标点: ID=1215, 区域=须弥9-2, 坐标=(4573.81, -408.86) - 创建目标点: ID=1216, 区域=须弥9-3, 坐标=(4756.13, -221.43) - 创建目标点: ID=1217, 区域=须弥9-4, 坐标=(4862.07, -150.71) - -第三遍:创建边和索引... - 创建边: 1 -> 1000, 路径=assets/pathing/枫丹1-秋分山西侧-1.json - 创建边: 1 -> 1001, 路径=assets/pathing/枫丹1-秋分山西侧-2.json - 创建边: 2 -> 1002, 路径=assets/pathing/枫丹1-秋分山西侧-3.json - 创建边: 2 -> 1003, 路径=assets/pathing/枫丹1-秋分山西侧-4.json - 创建边: 2 -> 1004, 路径=assets/pathing/枫丹1-秋分山西侧-5.json - 创建边: 3 -> 1005, 路径=assets/pathing/枫丹2-芒索斯山东麓-1.json - 创建边: 3 -> 1006, 路径=assets/pathing/枫丹2-芒索斯山东麓-2.json - 创建边: 3 -> 1007, 路径=assets/pathing/枫丹2-芒索斯山东麓-3.json - 创建边: 3 -> 1008, 路径=assets/pathing/枫丹2-芒索斯山东麓-4.json - 创建边: 4 -> 1009, 路径=assets/pathing/枫丹3-新枫丹科学院-1.json - 创建边: 4 -> 1010, 路径=assets/pathing/枫丹3-新枫丹科学院-2.json - 创建边: 5 -> 1011, 路径=assets/pathing/枫丹3-新枫丹科学院-3.json - 创建边: 5 -> 1012, 路径=assets/pathing/枫丹3-新枫丹科学院-4.json - 创建边: 6 -> 1013, 路径=assets/pathing/枫丹4-柔灯港-1.json - 创建边: 7 -> 1014, 路径=assets/pathing/枫丹4-柔灯港-2.json - 创建边: 7 -> 1015, 路径=assets/pathing/枫丹4-柔灯港-3.json - 创建边: 7 -> 1016, 路径=assets/pathing/枫丹4-柔灯港-4.json - 创建边: 1 -> 1017, 路径=assets/pathing/枫丹5-秋分山东侧-1.json - 创建边: 1 -> 1018, 路径=assets/pathing/枫丹5-秋分山东侧-2.json - 创建边: 8 -> 1019, 路径=assets/pathing/枫丹5-秋分山东侧-3.json - 创建边: 8 -> 1020, 路径=assets/pathing/枫丹5-秋分山东侧-4.json - 创建边: 9 -> 1021, 路径=assets/pathing/枫丹6-厄里那斯-1.json - 创建边: 10 -> 1022, 路径=assets/pathing/枫丹6-厄里那斯-2.json - 创建边: 10 -> 1023, 路径=assets/pathing/枫丹6-厄里那斯-3.json - 创建边: 10 -> 1024, 路径=assets/pathing/枫丹6-厄里那斯-4.json - 创建边: 11 -> 1025, 路径=assets/pathing/枫丹6-厄里那斯-5.json - 创建边: 10 -> 1026, 路径=assets/pathing/枫丹6-厄里那斯-6.json - 创建边: 12 -> 1027, 路径=assets/pathing/璃月1-石门-1.json - 创建边: 13 -> 1028, 路径=assets/pathing/璃月1-石门-2.json - 创建边: 14 -> 1031, 路径=assets/pathing/璃月10-绝云间-1.json - 创建边: 15 -> 1032, 路径=assets/pathing/璃月10-绝云间-2.json - 创建边: 16 -> 1033, 路径=assets/pathing/璃月10-绝云间-3.json - 创建边: 16 -> 1075, 路径=assets/pathing/璃月10-绝云间-5.json - 创建边: 17 -> 1036, 路径=assets/pathing/璃月11-轻策庄-1.json - 创建边: 18 -> 1040, 路径=assets/pathing/璃月11-轻策庄-5.json - 创建边: 19 -> 1041, 路径=assets/pathing/璃月11-轻策庄-6.json - 创建边: 20 -> 1042, 路径=assets/pathing/璃月13-悬练山-1.json - 创建边: 20 -> 1043, 路径=assets/pathing/璃月13-悬练山-2.json - 创建边: 21 -> 1046, 路径=assets/pathing/璃月14-药蝶谷-1.json - 创建边: 22 -> 1050, 路径=assets/pathing/璃月2-地中之盐-1.json - 创建边: 22 -> 1051, 路径=assets/pathing/璃月2-地中之盐-2.json - 创建边: 23 -> 1052, 路径=assets/pathing/璃月2-地中之盐-3.json - 创建边: 24 -> 1053, 路径=assets/pathing/璃月2-地中之盐-4.json - 创建边: 24 -> 1054, 路径=assets/pathing/璃月3-瑶光滩-1.json - 创建边: 24 -> 1055, 路径=assets/pathing/璃月3-瑶光滩-2.json - 创建边: 16 -> 1056, 路径=assets/pathing/璃月3-瑶光滩-3.json - 创建边: 16 -> 1057, 路径=assets/pathing/璃月3-瑶光滩-4.json - 创建边: 16 -> 1075, 路径=assets/pathing/璃月3-瑶光滩-5.json - 创建边: 25 -> 1059, 路径=assets/pathing/璃月4-璃月港-1.json - 创建边: 26 -> 1063, 路径=assets/pathing/璃月4-璃月港-5.json - 创建边: 16 -> 1057, 路径=assets/pathing/璃月4-璃月港-6.json - 创建边: 16 -> 1075, 路径=assets/pathing/璃月4-璃月港-7.json - 创建边: 27 -> 1066, 路径=assets/pathing/璃月5-天衡山-1.json - 创建边: 27 -> 1067, 路径=assets/pathing/璃月5-天衡山-2.json - 创建边: 28 -> 1069, 路径=assets/pathing/璃月5-天衡山-4-1.json - 创建边: 28 -> 1070, 路径=assets/pathing/璃月7-遁玉陵-1.json - 创建边: 29 -> 1071, 路径=assets/pathing/璃月7-遁玉陵-2.json - 创建边: 30 -> 1073, 路径=assets/pathing/璃月7-遁玉陵-4.json - 创建边: 31 -> 1034, 路径=assets/pathing/璃月7-遁玉陵-5.json - 创建边: 16 -> 1075, 路径=assets/pathing/璃月7-遁玉陵-6.json - 创建边: 32 -> 1076, 路径=assets/pathing/璃月8-南天门南-1.json - 创建边: 33 -> 1077, 路径=assets/pathing/璃月8-南天门南-2.json - 创建边: 33 -> 1078, 路径=assets/pathing/璃月8-南天门南-3.json - 创建边: 33 -> 1079, 路径=assets/pathing/璃月8-南天门南-4.json - 创建边: 30 -> 1073, 路径=assets/pathing/璃月8-南天门南-5.json - 创建边: 14 -> 1034, 路径=assets/pathing/璃月8-南天门南-6.json - 创建边: 16 -> 1075, 路径=assets/pathing/璃月8-南天门南-7.json - 创建边: 34 -> 1083, 路径=assets/pathing/璃月9-南天门东-1.json - 创建边: 34 -> 1085, 路径=assets/pathing/璃月9-南天门东-3-1.json - 创建边: 34 -> 1085, 路径=assets/pathing/璃月9-南天门东-3-2.json - 创建边: 32 -> 1086, 路径=assets/pathing/璃月9-南天门东-4.json - 创建边: 35 -> 1087, 路径=assets/pathing/稻妻1-鸣神岛-1.json - 创建边: 35 -> 1088, 路径=assets/pathing/稻妻1-鸣神岛-2.json - 创建边: 36 -> 1089, 路径=assets/pathing/稻妻1-鸣神岛-3.json - 创建边: 36 -> 1090, 路径=assets/pathing/稻妻1-鸣神岛-4.json - 创建边: 37 -> 1091, 路径=assets/pathing/稻妻2-踏鞴砂-1.json - 创建边: 38 -> 1092, 路径=assets/pathing/稻妻2-踏鞴砂-2.json - 创建边: 39 -> 1093, 路径=assets/pathing/稻妻2-踏鞴砂-3.json - 创建边: 40 -> 1094, 路径=assets/pathing/稻妻2-踏鞴砂-4.json - 创建边: 40 -> 1095, 路径=assets/pathing/稻妻2-踏鞴砂-5.json - 创建边: 41 -> 1096, 路径=assets/pathing/稻妻3-八酝岛-1.json - 创建边: 41 -> 1098, 路径=assets/pathing/稻妻3-八酝岛-3.json - 创建边: 41 -> 1099, 路径=assets/pathing/稻妻3-八酝岛-4.json - 创建边: 42 -> 1100, 路径=assets/pathing/稻妻4-海祇岛-1.json - 创建边: 43 -> 1103, 路径=assets/pathing/稻妻4-海祇岛-4.json - 创建边: 44 -> 1104, 路径=assets/pathing/稻妻5-清籁岛-1.json - 创建边: 45 -> 1107, 路径=assets/pathing/稻妻5-清籁岛-4.json - 创建边: 46 -> 1109, 路径=assets/pathing/纳塔1-隆崛坡-1.json - 创建边: 47 -> 1110, 路径=assets/pathing/纳塔1-隆崛坡-2.json - 创建边: 47 -> 1111, 路径=assets/pathing/纳塔1-隆崛坡-3.json - 创建边: 48 -> 1113, 路径=assets/pathing/纳塔10-溶水域-1.json - 创建边: 49 -> 1116, 路径=assets/pathing/纳塔10-溶水域-4.json - 创建边: 50 -> 1117, 路径=assets/pathing/纳塔2-硫晶支脉-1.json - 创建边: 50 -> 1118, 路径=assets/pathing/纳塔2-硫晶支脉-2.json - 创建边: 50 -> 1119, 路径=assets/pathing/纳塔2-硫晶支脉-3.json - 创建边: 51 -> 1120, 路径=assets/pathing/纳塔2-硫晶支脉-4.json - 创建边: 52 -> 1121, 路径=assets/pathing/纳塔3-彩石顶-1.json - 创建边: 53 -> 1122, 路径=assets/pathing/纳塔3-彩石顶-2.json - 创建边: 53 -> 1123, 路径=assets/pathing/纳塔3-彩石顶-3.json - 创建边: 54 -> 1125, 路径=assets/pathing/纳塔4-溶水域-1.json - 创建边: 55 -> 1127, 路径=assets/pathing/纳塔5-安饶之野-1.json - 创建边: 55 -> 1128, 路径=assets/pathing/纳塔5-安饶之野-2.json - 创建边: 55 -> 1129, 路径=assets/pathing/纳塔5-安饶之野-3.json - 创建边: 56 -> 1130, 路径=assets/pathing/纳塔6-圣火竞技场-1.json - 创建边: 56 -> 1131, 路径=assets/pathing/纳塔6-圣火竞技场-2.json - 创建边: 57 -> 1134, 路径=assets/pathing/纳塔7-烟谜主-1.json - 创建边: 58 -> 1137, 路径=assets/pathing/纳塔8-花羽会-1.json - 创建边: 58 -> 1138, 路径=assets/pathing/纳塔8-花羽会-2.json - 创建边: 59 -> 1139, 路径=assets/pathing/纳塔8-花羽会-3.json - 创建边: 60 -> 1140, 路径=assets/pathing/纳塔9-翘枝崖-1.json - 创建边: 61 -> 1144, 路径=assets/pathing/蒙德1-风起地-1.json - 创建边: 62 -> 1145, 路径=assets/pathing/蒙德1-风起地-2.json - 创建边: 63 -> 1177, 路径=assets/pathing/蒙德1-风起地-5.json - 创建边: 64 -> 1149, 路径=assets/pathing/蒙德2-清泉镇-1.json - 创建边: 65 -> 1150, 路径=assets/pathing/蒙德2-清泉镇-2.json - 创建边: 66 -> 1153, 路径=assets/pathing/蒙德2-清泉镇-5-1.json - 创建边: 67 -> 1155, 路径=assets/pathing/蒙德3-奔狼领-1.json - 创建边: 68 -> 1158, 路径=assets/pathing/蒙德3-奔狼领-4.json - 创建边: 69 -> 1159, 路径=assets/pathing/蒙德4-风龙废墟-1.json - 创建边: 70 -> 1161, 路径=assets/pathing/蒙德4-风龙废墟-3.json - 创建边: 71 -> 1163, 路径=assets/pathing/蒙德5-千风神殿-1.json - 创建边: 72 -> 1166, 路径=assets/pathing/蒙德5-千风神殿-4.json - 创建边: 73 -> 1167, 路径=assets/pathing/蒙德5-千风神殿-5.json - 创建边: 73 -> 1168, 路径=assets/pathing/蒙德6-望风山地-1.json - 创建边: 74 -> 1170, 路径=assets/pathing/蒙德6-望风山地-3.json - 创建边: 75 -> 1172, 路径=assets/pathing/蒙德7-达达乌帕谷-1.json - 创建边: 76 -> 1173, 路径=assets/pathing/蒙德7-达达乌帕谷-2.json - 创建边: 76 -> 1174, 路径=assets/pathing/蒙德7-达达乌帕谷-3.json - 创建边: 63 -> 1177, 路径=assets/pathing/蒙德7-达达乌帕谷-6.json - 创建边: 77 -> 1178, 路径=assets/pathing/须弥1-无郁稠林-1.json - 创建边: 78 -> 1183, 路径=assets/pathing/须弥10-荼泥黑渊-1.json - 创建边: 78 -> 1184, 路径=assets/pathing/须弥10-荼泥黑渊-2.json - 创建边: 78 -> 1185, 路径=assets/pathing/须弥10-荼泥黑渊-3.json - 创建边: 79 -> 1186, 路径=assets/pathing/须弥10-荼泥黑渊-4.json - 创建边: 80 -> 1187, 路径=assets/pathing/须弥2-奥摩斯港西-1.json - 创建边: 81 -> 1189, 路径=assets/pathing/须弥2-奥摩斯港西-3.json - 创建边: 82 -> 1192, 路径=assets/pathing/须弥3-禅那园-1.json - 创建边: 83 -> 1194, 路径=assets/pathing/须弥3-禅那园-3.json - 创建边: 84 -> 1196, 路径=assets/pathing/须弥4-水天丛林-1.json - 创建边: 85 -> 1199, 路径=assets/pathing/须弥4-水天丛林-4.json - 创建边: 86 -> 1200, 路径=assets/pathing/须弥4-水天丛林-5.json - 创建边: 87 -> 1201, 路径=assets/pathing/须弥5-阿如村-1.json - 创建边: 88 -> 1206, 路径=assets/pathing/须弥6-荼诃落谷-1.json - 创建边: 89 -> 1207, 路径=assets/pathing/须弥6-荼诃落谷-2.json - 创建边: 90 -> 1209, 路径=assets/pathing/须弥6-荼诃落谷-4.json - 创建边: 91 -> 1210, 路径=assets/pathing/须弥8-折胫谷-1.json - 创建边: 92 -> 1214, 路径=assets/pathing/须弥9-镔铁沙丘-1.json - -检查目标点的连通性... - 警告: 目标点 ID=1029, 区域=璃月1-3, 坐标=(-81.76, 1534.73) 没有入边 - 警告: 目标点 ID=1030, 区域=璃月1-4, 坐标=(-28.76, 1417.37) 没有入边 - 警告: 目标点 ID=1035, 区域=璃月10-5, 坐标=(455.4, 546.56) 没有入边 - 警告: 目标点 ID=1037, 区域=璃月11-2, 坐标=(697.31, 1551.84) 没有入边 - 警告: 目标点 ID=1038, 区域=璃月11-3, 坐标=(646.5, 1421.98) 没有入边 - 警告: 目标点 ID=1039, 区域=璃月11-4, 坐标=(632.03, 1331.15) 没有入边 - 警告: 目标点 ID=1044, 区域=璃月13-3, 坐标=(2226.91, 863.09) 没有入边 - 警告: 目标点 ID=1045, 区域=璃月13-4, 坐标=(2028.69, 830.67) 没有入边 - 警告: 目标点 ID=1047, 区域=璃月14-2, 坐标=(1581.57, 1437.1) 没有入边 - 警告: 目标点 ID=1048, 区域=璃月14-3, 坐标=(1563.45, 1487.35) 没有入边 - 警告: 目标点 ID=1049, 区域=璃月14-4, 坐标=(1525.0, 1549.17) 没有入边 - 警告: 目标点 ID=1058, 区域=璃月3-5, 坐标=(456.0, 546.29) 没有入边 - 警告: 目标点 ID=1060, 区域=璃月4-2, 坐标=(101.14, -2.97) 没有入边 - 警告: 目标点 ID=1061, 区域=璃月4-3, 坐标=(127.05, 113.87) 没有入边 - 警告: 目标点 ID=1062, 区域=璃月4-4, 坐标=(146.03, 220.07) 没有入边 - 警告: 目标点 ID=1064, 区域=璃月4-6, 坐标=(276.55, 543.11) 没有入边 - 警告: 目标点 ID=1065, 区域=璃月4-7, 坐标=(456.44, 546.35) 没有入边 - 警告: 目标点 ID=1068, 区域=璃月5-3, 坐标=(1063.54, -727.34) 没有入边 - 警告: 目标点 ID=1072, 区域=璃月7-3, 坐标=(752.42, 3.88) 没有入边 - 警告: 目标点 ID=1074, 区域=璃月7-5, 坐标=(681.46, 528.76) 没有入边 - 警告: 目标点 ID=1080, 区域=璃月8-5, 坐标=(815.31, 137.31) 没有入边 - 警告: 目标点 ID=1081, 区域=璃月8-6, 坐标=(683.33, 529.05) 没有入边 - 警告: 目标点 ID=1082, 区域=璃月8-7, 坐标=(455.84, 546.39) 没有入边 - 警告: 目标点 ID=1084, 区域=璃月9-2, 坐标=(1445.77, 577.83) 没有入边 - 警告: 目标点 ID=1097, 区域=稻妻3-2, 坐标=(-2280.61, -4171.18) 没有入边 - 警告: 目标点 ID=1101, 区域=稻妻4-2, 坐标=(-1190.51, -3902.08) 没有入边 - 警告: 目标点 ID=1102, 区域=稻妻4-3, 坐标=(-1254.7, -3839.91) 没有入边 - 警告: 目标点 ID=1105, 区域=稻妻5-2, 坐标=(-3850.61, -4241.9) 没有入边 - 警告: 目标点 ID=1106, 区域=稻妻5-3, 坐标=(-3763.54, -4259.14) 没有入边 - 警告: 目标点 ID=1108, 区域=稻妻5-5, 坐标=(-3671.61, -4414.03) 没有入边 - 警告: 目标点 ID=1112, 区域=纳塔1-4, 坐标=(7853.72, -1554.26) 没有入边 - 警告: 目标点 ID=1114, 区域=纳塔10-2, 坐标=(8496.07, -3018.4) 没有入边 - 警告: 目标点 ID=1115, 区域=纳塔10-3, 坐标=(8587.99, -3022.4) 没有入边 - 警告: 目标点 ID=1124, 区域=纳塔3-4, 坐标=(8088.21, -2053.56) 没有入边 - 警告: 目标点 ID=1126, 区域=纳塔4-2, 坐标=(9090.71, -2407.11) 没有入边 - 警告: 目标点 ID=1132, 区域=纳塔6-3, 坐标=(8945.55, -2138.43) 没有入边 - 警告: 目标点 ID=1133, 区域=纳塔6-4, 坐标=(8810.08, -2077.83) 没有入边 - 警告: 目标点 ID=1135, 区域=纳塔7-2, 坐标=(9963.8, -1511.61) 没有入边 - 警告: 目标点 ID=1136, 区域=纳塔7-3, 坐标=(9907.78, -1424.0) 没有入边 - 警告: 目标点 ID=1141, 区域=纳塔9-2, 坐标=(9888.22, -1046.55) 没有入边 - 警告: 目标点 ID=1142, 区域=纳塔9-3, 坐标=(9938.82, -933.87) 没有入边 - 警告: 目标点 ID=1143, 区域=纳塔9-4, 坐标=(9984.24, -876.43) 没有入边 - 警告: 目标点 ID=1146, 区域=蒙德1-3, 坐标=(-1113.87, 1971.9) 没有入边 - 警告: 目标点 ID=1147, 区域=蒙德1-4, 坐标=(-1041.91, 1927.07) 没有入边 - 警告: 目标点 ID=1148, 区域=蒙德1-5, 坐标=(-895.08, 1833.84) 没有入边 - 警告: 目标点 ID=1151, 区域=蒙德2-3, 坐标=(-420.36, 1998.11) 没有入边 - 警告: 目标点 ID=1152, 区域=蒙德2-4-1, 坐标=(-347.95, 1902.51) 没有入边 - 警告: 目标点 ID=1154, 区域=蒙德2-5-1, 坐标=(-319.57, 2156.48) 没有入边 - 警告: 目标点 ID=1156, 区域=蒙德3-2, 坐标=(-205.49, 2429.07) 没有入边 - 警告: 目标点 ID=1157, 区域=蒙德3-3, 坐标=(-327.03, 2410.43) 没有入边 - 警告: 目标点 ID=1160, 区域=蒙德4-2, 坐标=(124.61, 2817.24) 没有入边 - 警告: 目标点 ID=1162, 区域=蒙德4-4, 坐标=(-27.99, 2919.59) 没有入边 - 警告: 目标点 ID=1164, 区域=蒙德5-2, 坐标=(-1367.78, 2411.31) 没有入边 - 警告: 目标点 ID=1165, 区域=蒙德5-3, 坐标=(-1474.91, 2520.0) 没有入边 - 警告: 目标点 ID=1169, 区域=蒙德6-2, 坐标=(-1518.71, 2877.4) 没有入边 - 警告: 目标点 ID=1171, 区域=蒙德6-4, 坐标=(-1710.73, 2983.29) 没有入边 - 警告: 目标点 ID=1175, 区域=蒙德7-4, 坐标=(-1318.63, 1692.63) 没有入边 - 警告: 目标点 ID=1176, 区域=蒙德7-5, 坐标=(-1138.22, 1789.79) 没有入边 - 警告: 目标点 ID=1179, 区域=须弥1-2, 坐标=(2317.29, -115.35) 没有入边 - 警告: 目标点 ID=1180, 区域=须弥1-3, 坐标=(2212.83, -83.02) 没有入边 - 警告: 目标点 ID=1181, 区域=须弥1-4, 坐标=(2233.8, -160.88) 没有入边 - 警告: 目标点 ID=1182, 区域=须弥1-5, 坐标=(2269.0, -251.14) 没有入边 - 警告: 目标点 ID=1188, 区域=须弥2-2, 坐标=(2980.38, -1758.57) 没有入边 - 警告: 目标点 ID=1190, 区域=须弥2-4, 坐标=(2981.92, -1641.54) 没有入边 - 警告: 目标点 ID=1191, 区域=须弥2-5, 坐标=(2963.07, -1586.92) 没有入边 - 警告: 目标点 ID=1193, 区域=须弥3-2, 坐标=(3233.51, -740.65) 没有入边 - 警告: 目标点 ID=1195, 区域=须弥3-4, 坐标=(3387.39, -664.21) 没有入边 - 警告: 目标点 ID=1197, 区域=须弥4-2, 坐标=(3355.82, -1318.18) 没有入边 - 警告: 目标点 ID=1198, 区域=须弥4-3, 坐标=(3466.17, -1318.08) 没有入边 - 警告: 目标点 ID=1202, 区域=须弥5-2, 坐标=(4257.86, -1903.31) 没有入边 - 警告: 目标点 ID=1203, 区域=须弥5-3, 坐标=(4144.29, -2014.19) 没有入边 - 警告: 目标点 ID=1204, 区域=须弥5-4, 坐标=(4144.18, -2014.48) 没有入边 - 警告: 目标点 ID=1205, 区域=须弥5-5, 坐标=(4211.01, -2165.65) 没有入边 - 警告: 目标点 ID=1208, 区域=须弥6-3, 坐标=(4886.54, -2940.45) 没有入边 - 警告: 目标点 ID=1211, 区域=须弥8-2, 坐标=(5887.09, -1120.65) 没有入边 - 警告: 目标点 ID=1212, 区域=须弥8-3, 坐标=(5902.11, -1008.25) 没有入边 - 警告: 目标点 ID=1213, 区域=须弥8-4, 坐标=(5928.09, -922.46) 没有入边 - 警告: 目标点 ID=1215, 区域=须弥9-2, 坐标=(4573.81, -408.86) 没有入边 - 警告: 目标点 ID=1216, 区域=须弥9-3, 坐标=(4756.13, -221.43) 没有入边 - 警告: 目标点 ID=1217, 区域=须弥9-4, 坐标=(4862.07, -150.71) 没有入边 - -尝试为 80 个孤立目标点寻找连续路径... - -处理区域 璃月1-3 的 1 个孤立目标点... - 区域 璃月1-3 没有现有路径,无法连接孤立目标点 - -处理区域 璃月1-4 的 1 个孤立目标点... - 区域 璃月1-4 没有现有路径,无法连接孤立目标点 - -处理区域 璃月10-5 的 1 个孤立目标点... - 区域 璃月10-5 没有现有路径,无法连接孤立目标点 - -处理区域 璃月11-2 的 1 个孤立目标点... - 区域 璃月11-2 没有现有路径,无法连接孤立目标点 - -处理区域 璃月11-3 的 1 个孤立目标点... - 区域 璃月11-3 没有现有路径,无法连接孤立目标点 - -处理区域 璃月11-4 的 1 个孤立目标点... - 区域 璃月11-4 没有现有路径,无法连接孤立目标点 - -处理区域 璃月13-3 的 1 个孤立目标点... - 区域 璃月13-3 没有现有路径,无法连接孤立目标点 - -处理区域 璃月13-4 的 1 个孤立目标点... - 区域 璃月13-4 没有现有路径,无法连接孤立目标点 - -处理区域 璃月14-2 的 1 个孤立目标点... - 区域 璃月14-2 没有现有路径,无法连接孤立目标点 - -处理区域 璃月14-3 的 1 个孤立目标点... - 区域 璃月14-3 没有现有路径,无法连接孤立目标点 - -处理区域 璃月14-4 的 1 个孤立目标点... - 区域 璃月14-4 没有现有路径,无法连接孤立目标点 - -处理区域 璃月3-5 的 1 个孤立目标点... - 区域 璃月3-5 没有现有路径,无法连接孤立目标点 - -处理区域 璃月4-2 的 1 个孤立目标点... - 区域 璃月4-2 没有现有路径,无法连接孤立目标点 - -处理区域 璃月4-3 的 1 个孤立目标点... - 区域 璃月4-3 没有现有路径,无法连接孤立目标点 - -处理区域 璃月4-4 的 1 个孤立目标点... - 区域 璃月4-4 没有现有路径,无法连接孤立目标点 - -处理区域 璃月4-6 的 1 个孤立目标点... - 区域 璃月4-6 没有现有路径,无法连接孤立目标点 - -处理区域 璃月4-7 的 1 个孤立目标点... - 区域 璃月4-7 没有现有路径,无法连接孤立目标点 - -处理区域 璃月5-3 的 1 个孤立目标点... - 区域 璃月5-3 没有现有路径,无法连接孤立目标点 - -处理区域 璃月7-3 的 1 个孤立目标点... - 区域 璃月7-3 没有现有路径,无法连接孤立目标点 - -处理区域 璃月7-5 的 1 个孤立目标点... - 区域 璃月7-5 没有现有路径,无法连接孤立目标点 - -处理区域 璃月8-5 的 1 个孤立目标点... - 区域 璃月8-5 没有现有路径,无法连接孤立目标点 - -处理区域 璃月8-6 的 1 个孤立目标点... - 区域 璃月8-6 没有现有路径,无法连接孤立目标点 - -处理区域 璃月8-7 的 1 个孤立目标点... - 区域 璃月8-7 没有现有路径,无法连接孤立目标点 - -处理区域 璃月9-2 的 1 个孤立目标点... - 区域 璃月9-2 没有现有路径,无法连接孤立目标点 - -处理区域 稻妻3-2 的 1 个孤立目标点... - 区域 稻妻3-2 没有现有路径,无法连接孤立目标点 - -处理区域 稻妻4-2 的 1 个孤立目标点... - 区域 稻妻4-2 没有现有路径,无法连接孤立目标点 - -处理区域 稻妻4-3 的 1 个孤立目标点... - 区域 稻妻4-3 没有现有路径,无法连接孤立目标点 - -处理区域 稻妻5-2 的 1 个孤立目标点... - 区域 稻妻5-2 没有现有路径,无法连接孤立目标点 - -处理区域 稻妻5-3 的 1 个孤立目标点... - 区域 稻妻5-3 没有现有路径,无法连接孤立目标点 - -处理区域 稻妻5-5 的 1 个孤立目标点... - 区域 稻妻5-5 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔1-4 的 1 个孤立目标点... - 区域 纳塔1-4 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔10-2 的 1 个孤立目标点... - 区域 纳塔10-2 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔10-3 的 1 个孤立目标点... - 区域 纳塔10-3 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔3-4 的 1 个孤立目标点... - 区域 纳塔3-4 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔4-2 的 1 个孤立目标点... - 区域 纳塔4-2 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔6-3 的 1 个孤立目标点... - 区域 纳塔6-3 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔6-4 的 1 个孤立目标点... - 区域 纳塔6-4 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔7-2 的 1 个孤立目标点... - 区域 纳塔7-2 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔7-3 的 1 个孤立目标点... - 区域 纳塔7-3 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔9-2 的 1 个孤立目标点... - 区域 纳塔9-2 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔9-3 的 1 个孤立目标点... - 区域 纳塔9-3 没有现有路径,无法连接孤立目标点 - -处理区域 纳塔9-4 的 1 个孤立目标点... - 区域 纳塔9-4 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德1-3 的 1 个孤立目标点... - 区域 蒙德1-3 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德1-4 的 1 个孤立目标点... - 区域 蒙德1-4 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德1-5 的 1 个孤立目标点... - 区域 蒙德1-5 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德2-3 的 1 个孤立目标点... - 区域 蒙德2-3 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德2-4-1 的 1 个孤立目标点... - 区域 蒙德2-4-1 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德2-5-1 的 1 个孤立目标点... - 区域 蒙德2-5-1 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德3-2 的 1 个孤立目标点... - 区域 蒙德3-2 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德3-3 的 1 个孤立目标点... - 区域 蒙德3-3 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德4-2 的 1 个孤立目标点... - 区域 蒙德4-2 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德4-4 的 1 个孤立目标点... - 区域 蒙德4-4 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德5-2 的 1 个孤立目标点... - 区域 蒙德5-2 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德5-3 的 1 个孤立目标点... - 区域 蒙德5-3 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德6-2 的 1 个孤立目标点... - 区域 蒙德6-2 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德6-4 的 1 个孤立目标点... - 区域 蒙德6-4 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德7-4 的 1 个孤立目标点... - 区域 蒙德7-4 没有现有路径,无法连接孤立目标点 - -处理区域 蒙德7-5 的 1 个孤立目标点... - 区域 蒙德7-5 没有现有路径,无法连接孤立目标点 - -处理区域 须弥1-2 的 1 个孤立目标点... - 区域 须弥1-2 没有现有路径,无法连接孤立目标点 - -处理区域 须弥1-3 的 1 个孤立目标点... - 区域 须弥1-3 没有现有路径,无法连接孤立目标点 - -处理区域 须弥1-4 的 1 个孤立目标点... - 区域 须弥1-4 没有现有路径,无法连接孤立目标点 - -处理区域 须弥1-5 的 1 个孤立目标点... - 区域 须弥1-5 没有现有路径,无法连接孤立目标点 - -处理区域 须弥2-2 的 1 个孤立目标点... - 区域 须弥2-2 没有现有路径,无法连接孤立目标点 - -处理区域 须弥2-4 的 1 个孤立目标点... - 区域 须弥2-4 没有现有路径,无法连接孤立目标点 - -处理区域 须弥2-5 的 1 个孤立目标点... - 区域 须弥2-5 没有现有路径,无法连接孤立目标点 - -处理区域 须弥3-2 的 1 个孤立目标点... - 区域 须弥3-2 没有现有路径,无法连接孤立目标点 - -处理区域 须弥3-4 的 1 个孤立目标点... - 区域 须弥3-4 没有现有路径,无法连接孤立目标点 - -处理区域 须弥4-2 的 1 个孤立目标点... - 区域 须弥4-2 没有现有路径,无法连接孤立目标点 - -处理区域 须弥4-3 的 1 个孤立目标点... - 区域 须弥4-3 没有现有路径,无法连接孤立目标点 - -处理区域 须弥5-2 的 1 个孤立目标点... - 区域 须弥5-2 没有现有路径,无法连接孤立目标点 - -处理区域 须弥5-3 的 1 个孤立目标点... - 区域 须弥5-3 没有现有路径,无法连接孤立目标点 - -处理区域 须弥5-4 的 1 个孤立目标点... - 区域 须弥5-4 没有现有路径,无法连接孤立目标点 - -处理区域 须弥5-5 的 1 个孤立目标点... - 区域 须弥5-5 没有现有路径,无法连接孤立目标点 - -处理区域 须弥6-3 的 1 个孤立目标点... - 区域 须弥6-3 没有现有路径,无法连接孤立目标点 - -处理区域 须弥8-2 的 1 个孤立目标点... - 区域 须弥8-2 没有现有路径,无法连接孤立目标点 - -处理区域 须弥8-3 的 1 个孤立目标点... - 区域 须弥8-3 没有现有路径,无法连接孤立目标点 - -处理区域 须弥8-4 的 1 个孤立目标点... - 区域 须弥8-4 没有现有路径,无法连接孤立目标点 - -处理区域 须弥9-2 的 1 个孤立目标点... - 区域 须弥9-2 没有现有路径,无法连接孤立目标点 - -处理区域 须弥9-3 的 1 个孤立目标点... - 区域 须弥9-3 没有现有路径,无法连接孤立目标点 - -处理区域 须弥9-4 的 1 个孤立目标点... - 区域 须弥9-4 没有现有路径,无法连接孤立目标点 - -按区域对节点进行排序... - -删除边数据中的位置信息... - -按照目标节点(target)的顺序排列边... - -创建节点到节点的顺序边... - 创建顺序边: 枫丹1-1 → 枫丹1-2, 路径=assets/pathing/枫丹1-秋分山西侧-2.json - 创建顺序边: 枫丹1-2 → 枫丹1-3, 路径=assets/pathing/枫丹1-秋分山西侧-3.json - 创建顺序边: 枫丹1-3 → 枫丹1-4, 路径=assets/pathing/枫丹1-秋分山西侧-4.json - 创建顺序边: 枫丹1-4 → 枫丹1-5, 路径=assets/pathing/枫丹1-秋分山西侧-5.json - 创建顺序边: 枫丹2-1 → 枫丹2-2, 路径=assets/pathing/枫丹2-芒索斯山东麓-2.json - 创建顺序边: 枫丹2-2 → 枫丹2-3, 路径=assets/pathing/枫丹2-芒索斯山东麓-3.json - 创建顺序边: 枫丹2-3 → 枫丹2-4, 路径=assets/pathing/枫丹2-芒索斯山东麓-4.json - 创建顺序边: 枫丹3-1 → 枫丹3-2, 路径=assets/pathing/枫丹3-新枫丹科学院-2.json - 创建顺序边: 枫丹3-2 → 枫丹3-3, 路径=assets/pathing/枫丹3-新枫丹科学院-3.json - 创建顺序边: 枫丹3-3 → 枫丹3-4, 路径=assets/pathing/枫丹3-新枫丹科学院-4.json - 创建顺序边: 枫丹4-1 → 枫丹4-2, 路径=assets/pathing/枫丹4-柔灯港-2.json - 创建顺序边: 枫丹4-2 → 枫丹4-3, 路径=assets/pathing/枫丹4-柔灯港-3.json - 创建顺序边: 枫丹4-3 → 枫丹4-4, 路径=assets/pathing/枫丹4-柔灯港-4.json - 创建顺序边: 枫丹5-1 → 枫丹5-2, 路径=assets/pathing/枫丹5-秋分山东侧-2.json - 创建顺序边: 枫丹5-2 → 枫丹5-3, 路径=assets/pathing/枫丹5-秋分山东侧-3.json - 创建顺序边: 枫丹5-3 → 枫丹5-4, 路径=assets/pathing/枫丹5-秋分山东侧-4.json - 创建顺序边: 枫丹6-1 → 枫丹6-2, 路径=assets/pathing/枫丹6-厄里那斯-2.json - 创建顺序边: 枫丹6-2 → 枫丹6-3, 路径=assets/pathing/枫丹6-厄里那斯-3.json - 创建顺序边: 枫丹6-3 → 枫丹6-4, 路径=assets/pathing/枫丹6-厄里那斯-4.json - 创建顺序边: 枫丹6-4 → 枫丹6-5, 路径=assets/pathing/枫丹6-厄里那斯-5.json - 创建顺序边: 枫丹6-5 → 枫丹6-6, 路径=assets/pathing/枫丹6-厄里那斯-6.json - 创建顺序边: 璃月1-1 → 璃月1-2, 路径=assets/pathing/璃月1-石门-2.json - 创建顺序边: 璃月1-2 → 璃月1-3, 路径=assets/pathing/璃月1-石门-3.json - 创建顺序边: 璃月1-3 → 璃月1-4, 路径=assets/pathing/璃月1-石门-4.json - 创建顺序边: 璃月10-1 → 璃月10-2, 路径=assets/pathing/璃月10-绝云间-2.json - 创建顺序边: 璃月10-2 → 璃月10-3, 路径=assets/pathing/璃月10-绝云间-3.json - 创建顺序边: 璃月10-3 → 璃月10-4, 路径=assets/pathing/璃月10-绝云间-4.json - 创建顺序边: 璃月10-4 → 璃月10-5, 路径=assets/pathing/璃月10-绝云间-5.json - 创建顺序边: 璃月11-1 → 璃月11-2, 路径=assets/pathing/璃月11-轻策庄-2.json - 创建顺序边: 璃月11-2 → 璃月11-3, 路径=assets/pathing/璃月11-轻策庄-3.json - 创建顺序边: 璃月11-3 → 璃月11-4, 路径=assets/pathing/璃月11-轻策庄-4.json - 创建顺序边: 璃月11-4 → 璃月11-5, 路径=assets/pathing/璃月11-轻策庄-5.json - 创建顺序边: 璃月11-5 → 璃月11-6, 路径=assets/pathing/璃月11-轻策庄-6.json - 创建顺序边: 璃月13-1 → 璃月13-2, 路径=assets/pathing/璃月13-悬练山-2.json - 创建顺序边: 璃月13-2 → 璃月13-3, 路径=assets/pathing/璃月13-悬练山-3.json - 创建顺序边: 璃月13-3 → 璃月13-4, 路径=assets/pathing/璃月13-悬练山-4.json - 创建顺序边: 璃月14-1 → 璃月14-2, 路径=assets/pathing/璃月14-药蝶谷-2.json - 创建顺序边: 璃月14-2 → 璃月14-3, 路径=assets/pathing/璃月14-药蝶谷-3.json - 创建顺序边: 璃月14-3 → 璃月14-4, 路径=assets/pathing/璃月14-药蝶谷-4.json - 创建顺序边: 璃月2-1 → 璃月2-2, 路径=assets/pathing/璃月2-地中之盐-2.json - 创建顺序边: 璃月2-2 → 璃月2-3, 路径=assets/pathing/璃月2-地中之盐-3.json - 创建顺序边: 璃月2-3 → 璃月2-4, 路径=assets/pathing/璃月2-地中之盐-4.json - 创建顺序边: 璃月3-1 → 璃月3-2, 路径=assets/pathing/璃月3-瑶光滩-2.json - 创建顺序边: 璃月3-2 → 璃月3-3, 路径=assets/pathing/璃月3-瑶光滩-3.json - 创建顺序边: 璃月3-3 → 璃月3-4, 路径=assets/pathing/璃月3-瑶光滩-4.json - 创建顺序边: 璃月3-4 → 璃月3-5, 路径=assets/pathing/璃月3-瑶光滩-5.json - 创建顺序边: 璃月4-1 → 璃月4-2, 路径=assets/pathing/璃月4-璃月港-2.json - 创建顺序边: 璃月4-2 → 璃月4-3, 路径=assets/pathing/璃月4-璃月港-3.json - 创建顺序边: 璃月4-3 → 璃月4-4, 路径=assets/pathing/璃月4-璃月港-4.json - 创建顺序边: 璃月4-4 → 璃月4-5, 路径=assets/pathing/璃月4-璃月港-5.json - 创建顺序边: 璃月4-5 → 璃月4-6, 路径=assets/pathing/璃月4-璃月港-6.json - 创建顺序边: 璃月4-6 → 璃月4-7, 路径=assets/pathing/璃月4-璃月港-7.json - 创建顺序边: 璃月5-1 → 璃月5-2, 路径=assets/pathing/璃月5-天衡山-2.json - 创建顺序边: 璃月5-2 → 璃月5-3, 路径=assets/pathing/璃月5-天衡山-3.json - 创建顺序边: 璃月5-3 → 璃月5-4-1, 路径=assets/pathing/璃月5-天衡山-4-1.json - 创建顺序边: 璃月7-1 → 璃月7-2, 路径=assets/pathing/璃月7-遁玉陵-2.json - 创建顺序边: 璃月7-2 → 璃月7-3, 路径=assets/pathing/璃月7-遁玉陵-3.json - 创建顺序边: 璃月7-3 → 璃月7-4, 路径=assets/pathing/璃月7-遁玉陵-4.json - 创建顺序边: 璃月7-4 → 璃月7-5, 路径=assets/pathing/璃月7-遁玉陵-5.json - 创建顺序边: 璃月7-5 → 璃月7-6, 路径=assets/pathing/璃月7-遁玉陵-6.json - 创建顺序边: 璃月8-1 → 璃月8-2, 路径=assets/pathing/璃月8-南天门南-2.json - 创建顺序边: 璃月8-2 → 璃月8-3, 路径=assets/pathing/璃月8-南天门南-3.json - 创建顺序边: 璃月8-3 → 璃月8-4, 路径=assets/pathing/璃月8-南天门南-4.json - 创建顺序边: 璃月8-4 → 璃月8-5, 路径=assets/pathing/璃月8-南天门南-5.json - 创建顺序边: 璃月8-5 → 璃月8-6, 路径=assets/pathing/璃月8-南天门南-6.json - 创建顺序边: 璃月8-6 → 璃月8-7, 路径=assets/pathing/璃月8-南天门南-7.json - 创建顺序边: 璃月9-1 → 璃月9-2, 路径=assets/pathing/璃月9-南天门东-2.json - 创建顺序边: 璃月9-2 → 璃月9-3-1, 路径=assets/pathing/璃月9-南天门东-3-1.json - 创建顺序边: 稻妻1-1 → 稻妻1-2, 路径=assets/pathing/稻妻1-鸣神岛-2.json - 创建顺序边: 稻妻1-2 → 稻妻1-3, 路径=assets/pathing/稻妻1-鸣神岛-3.json - 创建顺序边: 稻妻1-3 → 稻妻1-4, 路径=assets/pathing/稻妻1-鸣神岛-4.json - 创建顺序边: 稻妻2-1 → 稻妻2-2, 路径=assets/pathing/稻妻2-踏鞴砂-2.json - 创建顺序边: 稻妻2-2 → 稻妻2-3, 路径=assets/pathing/稻妻2-踏鞴砂-3.json - 创建顺序边: 稻妻2-3 → 稻妻2-4, 路径=assets/pathing/稻妻2-踏鞴砂-4.json - 创建顺序边: 稻妻2-4 → 稻妻2-5, 路径=assets/pathing/稻妻2-踏鞴砂-5.json - 创建顺序边: 稻妻3-1 → 稻妻3-2, 路径=assets/pathing/稻妻3-八酝岛-2.json - 创建顺序边: 稻妻3-2 → 稻妻3-3, 路径=assets/pathing/稻妻3-八酝岛-3.json - 创建顺序边: 稻妻3-3 → 稻妻3-4, 路径=assets/pathing/稻妻3-八酝岛-4.json - 创建顺序边: 稻妻4-1 → 稻妻4-2, 路径=assets/pathing/稻妻4-海祇岛-2.json - 创建顺序边: 稻妻4-2 → 稻妻4-3, 路径=assets/pathing/稻妻4-海祇岛-3.json - 创建顺序边: 稻妻4-3 → 稻妻4-4, 路径=assets/pathing/稻妻4-海祇岛-4.json - 创建顺序边: 稻妻5-1 → 稻妻5-2, 路径=assets/pathing/稻妻5-清籁岛-2.json - 创建顺序边: 稻妻5-2 → 稻妻5-3, 路径=assets/pathing/稻妻5-清籁岛-3.json - 创建顺序边: 稻妻5-3 → 稻妻5-4, 路径=assets/pathing/稻妻5-清籁岛-4.json - 创建顺序边: 稻妻5-4 → 稻妻5-5, 路径=assets/pathing/稻妻5-清籁岛-5.json - 创建顺序边: 纳塔1-1 → 纳塔1-2, 路径=assets/pathing/纳塔1-隆崛坡-2.json - 创建顺序边: 纳塔1-2 → 纳塔1-3, 路径=assets/pathing/纳塔1-隆崛坡-3.json - 创建顺序边: 纳塔1-3 → 纳塔1-4, 路径=assets/pathing/纳塔1-隆崛坡-4.json - 创建顺序边: 纳塔10-1 → 纳塔10-2, 路径=assets/pathing/纳塔10-溶水域-2.json - 创建顺序边: 纳塔10-2 → 纳塔10-3, 路径=assets/pathing/纳塔10-溶水域-3.json - 创建顺序边: 纳塔10-3 → 纳塔10-4, 路径=assets/pathing/纳塔10-溶水域-4.json - 创建顺序边: 纳塔2-1 → 纳塔2-2, 路径=assets/pathing/纳塔2-硫晶支脉-2.json - 创建顺序边: 纳塔2-2 → 纳塔2-3, 路径=assets/pathing/纳塔2-硫晶支脉-3.json - 创建顺序边: 纳塔2-3 → 纳塔2-4, 路径=assets/pathing/纳塔2-硫晶支脉-4.json - 创建顺序边: 纳塔3-1 → 纳塔3-2, 路径=assets/pathing/纳塔3-彩石顶-2.json - 创建顺序边: 纳塔3-2 → 纳塔3-3, 路径=assets/pathing/纳塔3-彩石顶-3.json - 创建顺序边: 纳塔3-3 → 纳塔3-4, 路径=assets/pathing/纳塔3-彩石顶-4.json - 创建顺序边: 纳塔4-1 → 纳塔4-2, 路径=assets/pathing/纳塔4-溶水域-2.json - 创建顺序边: 纳塔5-1 → 纳塔5-2, 路径=assets/pathing/纳塔5-安饶之野-2.json - 创建顺序边: 纳塔5-2 → 纳塔5-3, 路径=assets/pathing/纳塔5-安饶之野-3.json - 创建顺序边: 纳塔6-1 → 纳塔6-2, 路径=assets/pathing/纳塔6-圣火竞技场-2.json - 创建顺序边: 纳塔6-2 → 纳塔6-3, 路径=assets/pathing/纳塔6-圣火竞技场-3.json - 创建顺序边: 纳塔6-3 → 纳塔6-4, 路径=assets/pathing/纳塔6-圣火竞技场-4.json - 创建顺序边: 纳塔7-1 → 纳塔7-2, 路径=assets/pathing/纳塔7-烟谜主-2.json - 创建顺序边: 纳塔7-2 → 纳塔7-3, 路径=assets/pathing/纳塔7-烟谜主-3.json - 创建顺序边: 纳塔8-1 → 纳塔8-2, 路径=assets/pathing/纳塔8-花羽会-2.json - 创建顺序边: 纳塔8-2 → 纳塔8-3, 路径=assets/pathing/纳塔8-花羽会-3.json - 创建顺序边: 纳塔9-1 → 纳塔9-2, 路径=assets/pathing/纳塔9-翘枝崖-2.json - 创建顺序边: 纳塔9-2 → 纳塔9-3, 路径=assets/pathing/纳塔9-翘枝崖-3.json - 创建顺序边: 纳塔9-3 → 纳塔9-4, 路径=assets/pathing/纳塔9-翘枝崖-4.json - 创建顺序边: 蒙德1-1 → 蒙德1-2, 路径=assets/pathing/蒙德1-风起地-2.json - 创建顺序边: 蒙德1-2 → 蒙德1-3, 路径=assets/pathing/蒙德1-风起地-3.json - 创建顺序边: 蒙德1-3 → 蒙德1-4, 路径=assets/pathing/蒙德1-风起地-4.json - 创建顺序边: 蒙德1-4 → 蒙德1-5, 路径=assets/pathing/蒙德1-风起地-5.json - 创建顺序边: 蒙德2-1 → 蒙德2-2, 路径=assets/pathing/蒙德2-清泉镇-2.json - 创建顺序边: 蒙德2-2 → 蒙德2-3, 路径=assets/pathing/蒙德2-清泉镇-3.json - 创建顺序边: 蒙德2-3 → 蒙德2-4-1, 路径=assets/pathing/蒙德2-清泉镇-4-1.json - 创建顺序边: 蒙德2-4-1 → 蒙德2-4-2, 路径=assets/pathing/蒙德2-清泉镇-4-2.json - 创建顺序边: 蒙德3-1 → 蒙德3-2, 路径=assets/pathing/蒙德3-奔狼领-2.json - 创建顺序边: 蒙德3-2 → 蒙德3-3, 路径=assets/pathing/蒙德3-奔狼领-3.json - 创建顺序边: 蒙德3-3 → 蒙德3-4, 路径=assets/pathing/蒙德3-奔狼领-4.json - 创建顺序边: 蒙德4-1 → 蒙德4-2, 路径=assets/pathing/蒙德4-风龙废墟-2.json - 创建顺序边: 蒙德4-2 → 蒙德4-3, 路径=assets/pathing/蒙德4-风龙废墟-3.json - 创建顺序边: 蒙德4-3 → 蒙德4-4, 路径=assets/pathing/蒙德4-风龙废墟-4.json - 创建顺序边: 蒙德5-1 → 蒙德5-2, 路径=assets/pathing/蒙德5-千风神殿-2.json - 创建顺序边: 蒙德5-2 → 蒙德5-3, 路径=assets/pathing/蒙德5-千风神殿-3.json - 创建顺序边: 蒙德5-3 → 蒙德5-4, 路径=assets/pathing/蒙德5-千风神殿-4.json - 创建顺序边: 蒙德5-4 → 蒙德5-5, 路径=assets/pathing/蒙德5-千风神殿-5.json - 创建顺序边: 蒙德6-1 → 蒙德6-2, 路径=assets/pathing/蒙德6-望风山地-2.json - 创建顺序边: 蒙德6-2 → 蒙德6-3, 路径=assets/pathing/蒙德6-望风山地-3.json - 创建顺序边: 蒙德6-3 → 蒙德6-4, 路径=assets/pathing/蒙德6-望风山地-4.json - 创建顺序边: 蒙德7-1 → 蒙德7-2, 路径=assets/pathing/蒙德7-达达乌帕谷-2.json - 创建顺序边: 蒙德7-2 → 蒙德7-3, 路径=assets/pathing/蒙德7-达达乌帕谷-3.json - 创建顺序边: 蒙德7-3 → 蒙德7-4, 路径=assets/pathing/蒙德7-达达乌帕谷-4.json - 创建顺序边: 蒙德7-4 → 蒙德7-5, 路径=assets/pathing/蒙德7-达达乌帕谷-5.json - 创建顺序边: 蒙德7-5 → 蒙德7-6, 路径=assets/pathing/蒙德7-达达乌帕谷-6.json - 创建顺序边: 须弥1-1 → 须弥1-2, 路径=assets/pathing/须弥1-无郁稠林-2.json - 创建顺序边: 须弥1-2 → 须弥1-3, 路径=assets/pathing/须弥1-无郁稠林-3.json - 创建顺序边: 须弥1-3 → 须弥1-4, 路径=assets/pathing/须弥1-无郁稠林-4.json - 创建顺序边: 须弥1-4 → 须弥1-5, 路径=assets/pathing/须弥1-无郁稠林-5.json - 创建顺序边: 须弥10-1 → 须弥10-2, 路径=assets/pathing/须弥10-荼泥黑渊-2.json - 创建顺序边: 须弥10-2 → 须弥10-3, 路径=assets/pathing/须弥10-荼泥黑渊-3.json - 创建顺序边: 须弥10-3 → 须弥10-4, 路径=assets/pathing/须弥10-荼泥黑渊-4.json - 创建顺序边: 须弥2-1 → 须弥2-2, 路径=assets/pathing/须弥2-奥摩斯港西-2.json - 创建顺序边: 须弥2-2 → 须弥2-3, 路径=assets/pathing/须弥2-奥摩斯港西-3.json - 创建顺序边: 须弥2-3 → 须弥2-4, 路径=assets/pathing/须弥2-奥摩斯港西-4.json - 创建顺序边: 须弥2-4 → 须弥2-5, 路径=assets/pathing/须弥2-奥摩斯港西-5.json - 创建顺序边: 须弥3-1 → 须弥3-2, 路径=assets/pathing/须弥3-禅那园-2.json - 创建顺序边: 须弥3-2 → 须弥3-3, 路径=assets/pathing/须弥3-禅那园-3.json - 创建顺序边: 须弥3-3 → 须弥3-4, 路径=assets/pathing/须弥3-禅那园-4.json - 创建顺序边: 须弥4-1 → 须弥4-2, 路径=assets/pathing/须弥4-水天丛林-2.json - 创建顺序边: 须弥4-2 → 须弥4-3, 路径=assets/pathing/须弥4-水天丛林-3.json - 创建顺序边: 须弥4-3 → 须弥4-4, 路径=assets/pathing/须弥4-水天丛林-4.json - 创建顺序边: 须弥4-4 → 须弥4-5, 路径=assets/pathing/须弥4-水天丛林-5.json - 创建顺序边: 须弥5-1 → 须弥5-2, 路径=assets/pathing/须弥5-阿如村-2.json - 创建顺序边: 须弥5-2 → 须弥5-3, 路径=assets/pathing/须弥5-阿如村-3.json - 创建顺序边: 须弥5-3 → 须弥5-4, 路径=assets/pathing/须弥5-阿如村-4.json - 创建顺序边: 须弥5-4 → 须弥5-5, 路径=assets/pathing/须弥5-阿如村-5.json - 创建顺序边: 须弥6-1 → 须弥6-2, 路径=assets/pathing/须弥6-荼诃落谷-2.json - 创建顺序边: 须弥6-2 → 须弥6-3, 路径=assets/pathing/须弥6-荼诃落谷-3.json - 创建顺序边: 须弥6-3 → 须弥6-4, 路径=assets/pathing/须弥6-荼诃落谷-4.json - 创建顺序边: 须弥8-1 → 须弥8-2, 路径=assets/pathing/须弥8-折胫谷-2.json - 创建顺序边: 须弥8-2 → 须弥8-3, 路径=assets/pathing/须弥8-折胫谷-3.json - 创建顺序边: 须弥8-3 → 须弥8-4, 路径=assets/pathing/须弥8-折胫谷-4.json - 创建顺序边: 须弥9-1 → 须弥9-2, 路径=assets/pathing/须弥9-镔铁沙丘-2.json - 创建顺序边: 须弥9-2 → 须弥9-3, 路径=assets/pathing/须弥9-镔铁沙丘-3.json - 创建顺序边: 须弥9-3 → 须弥9-4, 路径=assets/pathing/须弥9-镔铁沙丘-4.json - -总共创建了 167 条顺序边 - -重新排序所有边... - -已生成新的数据结构: C:\Users\root\Documents\BetterGI\bettergi-scripts-list\repo\js\AutoLeyLineOutcrop\LeyLineOutcropData.json -传送点数量: 92 -地脉花数量: 218 -总节点数量: 310 -传送点到地脉花边数量: 314 -节点间顺序边数量: 167 -总边数量: 314 -区域排序顺序: 蒙德, 璃月, 稻妻, 须弥, 枫丹, 纳塔 - -注意: 仍有 1 个目标点没有入边 -这些目标点按区域排序如下: - - 蒙德区域的孤立目标点: - ID=1010, 区域=蒙德2-5-1, 坐标=(-319.57, 2156.48) - -请按照之前的建议手动创建连续编号的路径文件 diff --git a/repo/js/AutoLeyLineOutcrop/test_filename_parsing.py b/repo/js/AutoLeyLineOutcrop/test_filename_parsing.py deleted file mode 100644 index 422c2dbf..00000000 --- a/repo/js/AutoLeyLineOutcrop/test_filename_parsing.py +++ /dev/null @@ -1,58 +0,0 @@ -def test_filename_parsing(): - """测试文件名解析功能,确保能正确处理各种格式""" - test_files = [ - "蒙德1-风啸山岭-1.json", # 标准格式 - "璃月3-轻策庄-2.json", # 标准格式 - "蒙德2-清泉镇-4-1.json", # 特殊格式(双连字符数字) - "须弥2-须弥城-3-2.json", # 特殊格式 - "纳塔1-区域-5.5.json" # 小数点路线编号 - ] - - print("测试文件名解析结果:") - for filename in test_files: - result = parse_region_area_number(filename) - if len(result) == 5: # 特殊格式 - region_name, region_num, area, route_num, route_sub_num = result - print(f"文件: {filename} (特殊格式)") - print(f" 区域名称: {region_name}") - print(f" 区域编号: {region_num}") - print(f" 地区: {area}") - print(f" 路线编号: {route_num}") - print(f" 路线子编号: {route_sub_num}") - else: # 标准格式 - region_name, region_num, area, route_num = result - print(f"文件: {filename} (标准格式)") - print(f" 区域名称: {region_name}") - print(f" 区域编号: {region_num}") - print(f" 地区: {area}") - print(f" 路线编号: {route_num}") - - # 测试格式化逻辑 - if region_name and region_num and route_num: - if len(result) == 5: # 特殊格式 - route_sub_num = result[4] - if area and "-" in area: - # 特殊格式 - area_parts = area.split("-") - if len(area_parts) == 2: - formatted = f"{region_name}{region_num}-{area_parts[1]}-{int(route_num)}-{int(route_sub_num)}" - else: - formatted = f"{region_name}{region_num}-{area}-{int(route_num)}-{int(route_sub_num)}" - else: - # 非预期情况,但仍处理 - formatted = f"{region_name}{region_num}-{area}-{int(route_num)}-{int(route_sub_num)}" - else: # 标准格式 - if area and "-" in area: - # 特殊格式 - area_parts = area.split("-") - if len(area_parts) == 2: - formatted = f"{region_name}{region_num}-{area_parts[1]}-{int(route_num)}" - else: - formatted = f"{region_name}{region_num}-{int(route_num)}" - else: - # 标准格式 - formatted = f"{region_name}{region_num}-{int(route_num)}" - print(f" 格式化区域: {formatted}") - else: - print(f" 解析失败") - print("") diff --git a/repo/js/AutoLeyLineOutcrop/test_parsing.py b/repo/js/AutoLeyLineOutcrop/test_parsing.py deleted file mode 100644 index 422c2dbf..00000000 --- a/repo/js/AutoLeyLineOutcrop/test_parsing.py +++ /dev/null @@ -1,58 +0,0 @@ -def test_filename_parsing(): - """测试文件名解析功能,确保能正确处理各种格式""" - test_files = [ - "蒙德1-风啸山岭-1.json", # 标准格式 - "璃月3-轻策庄-2.json", # 标准格式 - "蒙德2-清泉镇-4-1.json", # 特殊格式(双连字符数字) - "须弥2-须弥城-3-2.json", # 特殊格式 - "纳塔1-区域-5.5.json" # 小数点路线编号 - ] - - print("测试文件名解析结果:") - for filename in test_files: - result = parse_region_area_number(filename) - if len(result) == 5: # 特殊格式 - region_name, region_num, area, route_num, route_sub_num = result - print(f"文件: {filename} (特殊格式)") - print(f" 区域名称: {region_name}") - print(f" 区域编号: {region_num}") - print(f" 地区: {area}") - print(f" 路线编号: {route_num}") - print(f" 路线子编号: {route_sub_num}") - else: # 标准格式 - region_name, region_num, area, route_num = result - print(f"文件: {filename} (标准格式)") - print(f" 区域名称: {region_name}") - print(f" 区域编号: {region_num}") - print(f" 地区: {area}") - print(f" 路线编号: {route_num}") - - # 测试格式化逻辑 - if region_name and region_num and route_num: - if len(result) == 5: # 特殊格式 - route_sub_num = result[4] - if area and "-" in area: - # 特殊格式 - area_parts = area.split("-") - if len(area_parts) == 2: - formatted = f"{region_name}{region_num}-{area_parts[1]}-{int(route_num)}-{int(route_sub_num)}" - else: - formatted = f"{region_name}{region_num}-{area}-{int(route_num)}-{int(route_sub_num)}" - else: - # 非预期情况,但仍处理 - formatted = f"{region_name}{region_num}-{area}-{int(route_num)}-{int(route_sub_num)}" - else: # 标准格式 - if area and "-" in area: - # 特殊格式 - area_parts = area.split("-") - if len(area_parts) == 2: - formatted = f"{region_name}{region_num}-{area_parts[1]}-{int(route_num)}" - else: - formatted = f"{region_name}{region_num}-{int(route_num)}" - else: - # 标准格式 - formatted = f"{region_name}{region_num}-{int(route_num)}" - print(f" 格式化区域: {formatted}") - else: - print(f" 解析失败") - print("")