From 5a45a36d9ee7224f1dd43f03db3e66b56307890f Mon Sep 17 00:00:00 2001 From: bridge Date: Sun, 19 Oct 2025 12:25:19 +0800 Subject: [PATCH] fix bug --- src/classes/action/move_to_region.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/classes/action/move_to_region.py b/src/classes/action/move_to_region.py index 3949ae3..b181dbb 100644 --- a/src/classes/action/move_to_region.py +++ b/src/classes/action/move_to_region.py @@ -3,6 +3,7 @@ from __future__ import annotations from src.classes.action import DefineAction, ActualActionMixin from src.classes.event import Event from src.classes.region import Region +from src.classes.sect import sects_by_name from src.classes.action import Move from src.classes.action_runtime import ActionResult, ActionStatus from src.classes.action.move_helper import clamp_manhattan_with_diagonal_priority @@ -62,6 +63,15 @@ class MoveToRegion(DefineAction, ActualActionMixin): if len(candidates) == 1: return by_name[candidates[0]] + # 4) 兜底:若传入为宗门名,则解析为其总部区域 + sect = sects_by_name.get(region_name) or (sects_by_name.get(normalized) if normalized and normalized != region_name else None) + if sect is not None: + # 若区域名表未命中,尝试在已注册的宗门总部区域中按 sect_name 匹配(唯一时返回) + sect_regions = getattr(self.world.map, "sect_regions", {}) or {} + matched = [r for r in sect_regions.values() if getattr(r, "sect_name", None) == sect.name] + if len(matched) == 1: + return matched[0] + # 失败:抛出明确错误提示 if candidates: sample = ", ".join(candidates[:5]) @@ -88,7 +98,13 @@ class MoveToRegion(DefineAction, ActualActionMixin): Move(self.avatar, self.world).execute(dx, dy) def can_start(self, region: Region | str | None = None) -> bool: - return True + if region is None: + return False + try: + self._resolve_region(region) + return True + except (ValueError, TypeError): + return False def start(self, region: Region | str) -> Event: r = self._resolve_region(region)