传奇#call跳转失效全排查:路径、编码与引擎差异

来源: 作者: 点击:
一、路径与文件基础检查

1. 路径分隔符与大小写
不同引擎对路径格式要求严格。GOM、GEE、996引擎通常要求使用正斜杠 / 且区分大小写;HERO引擎部分版本仅支持反斜杠 \。若路径中包含中文或空格,极易导致解析失败。

2. 文件物理存在性
#call 指令是硬链接,文件不存在则直接静默失败。需手动进入服务器目录 Mir200\Envir\QuestDiary 逐级核对文件夹和文件名,确认目标 .txt 文件真实存在。

3. 标签名匹配
被调用脚本内必须存在严格对应的标签段。例如调用 @MAIN,脚本内必须是 [@MAIN],多一个空格或少一个括号都会导致跳转无效。

二、脚本语法格式修正(分引擎)

1. GOM / GEE / 996 引擎(主流)
• 外部调用:#CALL [\功能系统\奖励.txt] @发放

- 注意:路径以 QuestDiary 为根目录,开头用 \,标签前加 @。若使用 Script 目录,格式为 #CALL [Script\奖励.txt]。

2. HERO / BLUE 引擎(老版本)
• 外部调用:#CALL \功能系统\奖励.txt @发放

- 内部跳转:#CALL @内部标签
• 差异:老引擎常省略中括号 [],且路径分隔符必须为 \。

3. 常见错误写法对比
错误写法 问题 修正

#CALL [奖励.txt] 缺少标签名 #CALL [奖励.txt] @MAIN

#CALL [\功能\奖励] 缺少文件后缀 #CALL [\功能\奖励.txt] @MAIN

#CALL [奖励.txt] [@MAIN] 标签格式错误 #CALL [奖励.txt] @MAIN

三、编码格式与重载流程

1. 强制ANSI编码
脚本文件(.txt)必须保存为 ANSI 编码。若使用 UTF-8 或带 BOM 的格式,引擎读取时会出现乱码或直接报错,导致 #call 无法解析。

2. 正确的重载姿势
修改脚本后,必须在 M2Server → 管理 → 脚本管理 中执行“重载NPC脚本”或“重载全部脚本”。仅刷新网页或重启游戏客户端无效。

四、高级排查:日志与变量冲突

1. 查看引擎日志
打开 MirServer\Log\ 目录下的 ScriptError.log 或 M2 控制台日志。若看到 File not found 或 Label not found 报错,直接按日志提示的路径修正。

2. 变量与逻辑拦截
检查 #call 语句上方的 #IF 条件是否过于严苛(如检测不存在的变量),导致 #ACT 未能触发。可在 #call 前加一行 SENDMSG 6 测试点 确认是否执行到该行。

3. 循环调用死锁
避免在 QManage.txt 或 QFunction.txt 中通过 #call 形成 A→B→A 的无限循环,部分引擎会强制中断此类逻辑。

五、特殊引擎差异说明

• GOM引擎:若路径正确仍无效,尝试在路径前加 Script 前缀,如 #CALL [Script\文件.txt]。

• GEE引擎:支持相对路径,如 #CALL [..\QuestDiary\文件.txt] @MAIN。

• BLUE引擎:对标签名大小写极其敏感,@Main 和 @MAIN 被视为两个不同标签。

若以上步骤仍无法解决,请提供具体的 #call 代码行及引擎版本,以便进一步定位是语法兼容还是目录权限问题。