架设传奇时弹出一堆红色报错,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)>`,但没有提前用`VARIntegerHUMANXXX`定义过。
2.个人变量(HUMAN)和全局变量(GLOBAL)搞混了。
3.字符型变量(S)和数字型变量(N、P)混用。
**解决方法**:
-个人变量(HUMAN)必须先在登录脚本里用`VAR`定义,然后用`LOADVAR`加载。检查`QManage.txt`的`[@Login]`段里有没有定义你用的变量。
-如果变量是临时用的,用`P0-P99`(数字临时变量)或`S0-S99`(字符临时变量),这些不需要定义,随用随取。
-检查赋值类型:数字变量不能直接存文字,比如`MOVN1你好`是错的,应该用`MOVS1你好`。
**第六步:死循环错误的排查与修正**
死循环报错通常是脚本里互相跳转,跳不出来了。
**典型报错**:`[脚本死循环]NPC:QFunction位置:0(0:0)命令:GOTO@XXX1秒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.继续把有错误的一半再切一半,反复几次,就能精确锁定到出错的那一行或那几行。
锁定具体行后,把那行代码删掉,手打重新输入一遍(不要复制粘贴,防止复制了看不见的乱码),通常就能解决。
**第一步:先看报错信息,判断是哪类脚本错误**
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)>`,但没有提前用`VARIntegerHUMANXXX`定义过。
2.个人变量(HUMAN)和全局变量(GLOBAL)搞混了。
3.字符型变量(S)和数字型变量(N、P)混用。
**解决方法**:
-个人变量(HUMAN)必须先在登录脚本里用`VAR`定义,然后用`LOADVAR`加载。检查`QManage.txt`的`[@Login]`段里有没有定义你用的变量。
-如果变量是临时用的,用`P0-P99`(数字临时变量)或`S0-S99`(字符临时变量),这些不需要定义,随用随取。
-检查赋值类型:数字变量不能直接存文字,比如`MOVN1你好`是错的,应该用`MOVS1你好`。
**第六步:死循环错误的排查与修正**
死循环报错通常是脚本里互相跳转,跳不出来了。
**典型报错**:`[脚本死循环]NPC:QFunction位置:0(0:0)命令:GOTO@XXX1秒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.继续把有错误的一半再切一半,反复几次,就能精确锁定到出错的那一行或那几行。
锁定具体行后,把那行代码删掉,手打重新输入一遍(不要复制粘贴,防止复制了看不见的乱码),通常就能解决。

