一、 路径与语法:最常见的三大硬伤
CALL 指令对格式极其敏感,绝大多数“跳转不了”源于路径或符号错误。
1. 路径分隔符混淆
◦ 错误:Windows 习惯使用反斜杠 \,但在 GOM、GEE 等主流引擎中,脚本路径必须使用正斜杠 /。
- 修正:将 #CALL[\Quest\奖励.txt]@MAIN 改为 #CALL[/Quest/奖励.txt]@MAIN。HERO 引擎部分版本可用 . 代替目录,如 #CALL[.\奖励.txt]。
2. 标签名缺失或错误
◦ #CALL 必须指定目标文件中的具体标签段(如 @MAIN)。若只写文件名,引擎不知跳转到何处。
- 修正:确保指令格式为 #CALL[/路径/文件.txt]@标签名。检查标签名是否拼写错误,例如脚本内是 [@MAIN],调用时写了 @main(大小写需完全一致)。
3. 文件编码与空格
◦ 被调用的外部 .txt 脚本若保存为 UTF-8 编码,或文件路径包含空格,会导致引擎无法识别。
- 修正:用记事本打开脚本文件,另存为时选择 ANSI 编码。路径和文件名避免使用空格,可用下划线连接。
二、 引擎差异:GOM/GEE 与 HERO 的特殊规则
不同引擎的 #CALL 逻辑差异巨大,套用模板会导致直接失效。
引擎类型 调用格式示例 关键区别
GOM / GEE #CALL [Script/任务.txt] @开始 路径通常以 Script/ 开头,支持相对路径,标签需加 []。
HERO #CALL [.\QuestDiary\任务.txt] @开始 路径支持 .\ 表示当前目录,部分版本可用 / 或 \。
BLUE #CALL \QuestDiary\任务.txt 部分老版本不支持带参数跳转,需直接调用文件入口。
GEE 引擎特有格式:部分版本要求“脚本名+标签名”格式,如 #CALL 任务.txt[@开始],若写成 #CALL [任务.txt]@开始 会无法跳转。
三、 文件与权限:路径不存在与脚本死循环
1. 绝对路径与相对路径
◦ 开发时若使用了绝对路径(如 D:\MirServer\...),迁移服务器后路径变化会导致 #CALL 失效。
◦ 修正:统一改为相对路径。默认根目录为 Mir200\Envir\QuestDiary。例如,文件在 QuestDiary\NPC\功能.txt,调用路径写 /NPC/功能.txt。
2. 脚本死循环拦截
◦ 若脚本中存在 #CALL 与 GOTO 互相嵌套,或循环次数超过 M2 限制,M2 会报“脚本死循环”并强制终止执行,表现为跳转失败。
◦ 修正:检查 !Setup.txt 中的 ScriptGotoCountLimit 参数,或在循环中加入 DelayGoto 延时,避免无限循环。
四、 实战修复:从报错日志到验证步骤
1. 查看 M2 报错日志
◦ 打开 M2Server → 查看 → 脚本错误日志。若看到 FileNotFound 或 Cannot find label,直接按日志提示的路径修正文件或标签名。
2. 分段验证法
◦ Step1:先在同一脚本内测试 #CALL [@内部标签](如支持),确认基础指令有效。
◦ Step2:调用一个最简单的测试文件(如 test.txt),内容仅一行 [@TEST]#SAY 测试成功。
◦ Step3:逐步将路径改为目标路径,每次修改后使用 M2 的 重新加载脚本 功能测试。
3. HERO 引擎变量冲突
◦ 若 #CALL 不执行且无报错,检查脚本顶部是否定义了与系统冲突的自定义变量。HERO 引擎部分版本对自定义变量支持较差,建议改用 N 系列数字变量(如 N1、N2)。
最后确认:修改脚本后,必须完全重启 M2Server 或执行 @reloadscript 重载脚本,仅小退游戏无法刷新引擎缓存。

