架设传奇时弹出一堆红色报错,M2启动到一半卡住,或者进游戏点NPC没反应,这些都是脚本错误闹的。脚本错误说白了就是引擎读不懂你写的指令,或者路径指向了不存在的地方。下面把脚本错误分成几大类,每类怎么认、怎么修,按顺序给你排清楚。
**第一步:先看报错信息,判断是哪类脚本错误**
M2控制台或者登录器弹窗报错,通常会给出关键信息。常见的有这几种格式:
- `脚本错误: [@Main] 第10行 格式不对`
- `脚本加载失败:文件未找到 .\QuestDiary\数据\XXX.txt`
- `功能脚本错误:命令 NOT 不能使用`
- `变量未定义:HUMAN 未定义`
这些报错分别对应:**格式错误、路径错误、命令错误、变量错误**。下面按这四类逐个拆解法。
**第二步:格式错误的排查与修正**
格式错误是最常见的,通常是因为多空格、少空格、标点符号用了中文全角。
**典型报错**:`脚本错误: [@Main] 第10行 格式不对`
**问题根源**:
1. 脚本里的命令和参数之间必须有空格,比如 `#IF` 下一行必须空一格再写 `CHECKLEVELEX > 0`。
2. 标点符号必须用英文半角,比如逗号 `,` 不能用 `,`。
3. 段头 `[@MAIN]` 必须顶格写,前面不能有空格。
**解决方法**:
- 用Notepad++打开脚本文件,开启“显示所有字符”功能(视图 -> 显示符号 -> 显示空格与制表符)。这时候能看到哪些地方多了空格,哪些地方用了中文标点。
- 把中文逗号、括号全部替换成英文的。查找 `,` 替换成 `,`,查找 `“` 替换成 `"`。
- 确保每个命令和参数之间只有一个空格,不要有两个连续空格。
**第三步:路径错误的排查与修正**
路径错误通常是脚本里写的文件夹或文件不存在,或者路径分隔符用错了。
**典型报错**:`脚本加载失败:文件未找到 .\QuestDiary\数据\XXX.txt`
**问题根源**:
1. 路径里的文件夹名字写错了,比如 `QuestDiary` 写成 `QuestDairy`。
2. 路径分隔符不对,有的引擎认 `\`,有的认 `/`,有的必须用双反斜杠 `\\`。
3. 文件夹根本不存在,没有手动创建。
**解决方法**:
- 打开你的服务端根目录,按报错给的路径一级一级点进去,看能不能找到那个文件。找不到,就说明路径错了或者文件缺失。
- 如果是路径写错了,把脚本里的路径改成正确的。
- 如果是文件夹不存在,手动创建对应文件夹。如果文件也不存在,去别的版本里复制一个空的同名文件过来,或者自己新建一个TXT文件改名。
- 注意路径开头的 `.\` 代表服务端根目录,`..\` 代表上一级目录,不要搞混。
**第四步:命令错误的排查与修正**
命令错误是写了引擎不认识的指令,或者指令用错了地方。
**典型报错**:`功能脚本错误:命令 NOT 不能使用`
**问题根源**:
1. 命令拼写错了,比如 `MOV` 写成 `MOVE`。
2. 命令在当前引擎版本里不存在,比如GOM引擎的某些命令在LEG引擎里不能用。
3. 命令用错了对象,比如用 `HUMANHP` 去扣怪物血,应该用 `M.HUMANHP`。
**解决方法**:
- 确认你用的引擎是什么版本(GOM、GEE、LEG、HERO等),去网上搜这个引擎的命令大全,对照着看报错的命令是不是支持。
- 检查命令拼写,特别注意大小写?传奇脚本命令一般不分大小写,但拼错肯定不行。
- 如果是扣血类命令,区分清楚 `HUMANHP`(扣玩家)、`M.HUMANHP`(扣怪物)、`CHANGEHP`(通用)。
**第五步:变量错误的排查与修正**
变量错误通常是用了没定义的变量,或者变量类型用错了。
**典型报错**:`变量未定义:HUMAN 未定义`
**问题根源**:
1. 在脚本里直接用 `<$HUMAN(XXX)>`,但没有提前用 `VAR Integer HUMAN XXX` 定义过。
2. 个人变量(HUMAN)和全局变量(GLOBAL)搞混了。
3. 字符型变量(S)和数字型变量(N、P)混用。
**解决方法**:
- 个人变量(HUMAN)必须先在登录脚本里用 `VAR` 定义,然后用 `LOADVAR` 加载。检查 `QManage.txt` 的 `[@Login]` 段里有没有定义你用的变量。
- 如果变量是临时用的,用 `P0-P99`(数字临时变量)或 `S0-S99`(字符临时变量),这些不需要定义,随用随取。
- 检查赋值类型:数字变量不能直接存文字,比如 `MOV N1 你好` 是错的,应该用 `MOV S1 你好`。
**第六步:死循环错误的排查与修正**
死循环报错通常是脚本里互相跳转,跳不出来了。
**典型报错**:`[脚本死循环] NPC:QFunction 位置:0(0:0) 命令:GOTO @XXX 1秒1次`
**问题根源**:
1. 两个段互相 `goto`,A跳B,B跳A,形成死循环。
2. 触发段里执行了会再次触发本段的操作,比如在 `[@GetExp]` 里加经验,又触发了 `[@GetExp]`。
3. 没有用 `break` 或 `return` 中断流程。
**解决方法**:
- 检查所有 `goto` 跳转,确保每条跳转链路最后都能用 `break` 结束,不会跳回来。
- 在触发段(如 `[@Attack]`、`[@GetExp]`)里,不要做可能再次触发本段的事。如果必须做,用 `DELAYGOTO` 延迟执行,或者用标识位控制只执行一次。
- 在M2上打开“脚本死循环检测”功能,设置合理的检测次数(比如100次/秒),避免误报。
**第七步:编码错误的排查与修正**
编码错误比较隐蔽,脚本看起来没错,但引擎就是读不了。
**典型现象**:脚本文件用记事本打开一切正常,但M2加载时报一堆乱码或格式错误。
**问题根源**:脚本文件保存时用了带BOM的UTF-8编码,或者用了ANSI以外的编码,老引擎只认ANSI。
**解决方法**:
- 用Notepad++打开脚本文件,看右下角显示的是什么编码。如果是“UTF-8-BOM”,点“编码” -> “转为ANSI编码” -> 保存。
- 如果是“UTF-8无BOM”,也建议转为ANSI,兼容性最好。
- 批量转换时,可以用Notepad++的“在文件中查找”功能,把所有脚本文件一次性转码。
**第八步:加载顺序错误的排查与修正**
有些脚本需要特定的加载顺序,比如先定义变量再使用,先加载文件再读取。
**典型现象**:进游戏点NPC没反应,或者NPC说的话不对。
**问题根源**:
1. 在 `QManage.txt` 里,`[@Login]` 段放在其他段后面,导致登录时没执行变量定义。
2. 在 `Market_Def` 文件夹里,NPC脚本文件名和游戏里实际调用的对不上。
3. 脚本里用 `#INCLUDE` 引用了其他文件,但被引用的文件路径不对。
**解决方法**:
- 确保 `QManage.txt` 里 `[@Login]` 段在最前面,或者至少在其他需要用到变量的段之前。
- 检查NPC脚本文件名,必须和游戏里设置的“NPC脚本名”一致。比如游戏里填的是“土城药店”,那脚本文件就要叫 `土城药店-0.txt`。
- 检查 `#INCLUDE` 路径,用绝对路径或相对于 `Envir` 的相对路径,确保被引用的文件存在。
**第九步:终极排查方法——二分法定位错误行**
如果报错说第X行有错误,但你去那一行看半天看不出问题,可以用二分法:
1. 把报错段落的代码复制出来。
2. 从中间切一刀,注释掉一半代码(在每行前面加 `;` 注释掉)。
3. 保存脚本,重新加载,看还报不报错。
4. 如果不报了,说明错误在被注释掉的那一半里;如果还报,说明错误在另一半里。
5. 继续把有错误的一半再切一半,反复几次,就能精确锁定到出错的那一行或那几行。
锁定具体行后,把那行代码删掉,手打重新输入一遍(不要复制粘贴,防止复制了看不见的乱码),通常就能解决。

