开服或者自架传奇的时候,碰到QQ礼包脚本错误或者服务端脚本报错,是挺常见的情况。这类报错通常不会让你整个服崩掉,但会影响特定功能无法使用,比如领不了礼包、NPC点不开。下面把排查和修复的步骤按顺序列出来。
###先看报错内容定位问题位置
服务端启动时或者玩家触发某个NPC的时候,控制台窗口(一般是MirServer/Mir200的黑色窗口)会打印红色或黄色的报错信息。信息里通常会包含三个关键信息:
-脚本文件路径:比如`\Mir200\Envir\Market_Def\QQ礼包-3.txt`
-报错行数:比如`Line47`,指第47行
-错误类型:比如`Syntaxerror`(语法错误)或`Scriptfunctionnotfound`(脚本函数找不到)
用记事本打开对应的脚本文件,直接跳转到报错行数看那一行写了什么。
###QQ礼包脚本常见的几种报错和修法
**报错信息:脚本命令写错了**
比如把`GIVE`写成`GIVE`(多空格)、`CHECKLEVELEX`写成`CHECKLEVEL`漏了EX。这类错误属于拼写类,控制台会报“Unknownscriptcommand”或者“语法错误”。
修复办法是把脚本里的关键字对照引擎说明书逐字校对。HERO引擎的常用命令和GOM、GEE引擎不完全一样,不要混用。
**报错信息:变量类型不匹配**
比如脚本里写`MOVP010`是数字赋值,但后面用`P0`去做字符串判断;或者写`CHECK[999]1`的时候,`999`超出了引擎允许的变量范围。不同引擎允许的个人变量(比如P变量、D变量)编号范围不同,超出范围就报错。
修复办法是确认变量编号在引擎允许的范围内,数值和字符串类型的操作分开写。
**报错信息:文件或标签不存在**
比如脚本里写`GOTO@兑换礼包`,但整个文件里没有`@兑换礼包`这个标签;或者用`CALL`调用另一个文本文件时,那个文件路径不对或文件本身缺失。
修复办法是检查标签名是否拼写一致,大小写也要对上。CALL调用的文件路径要写成`\QuestDiary\功能脚本\礼包系统.txt`这种完整路径,不能只写文件名。
###检查编码格式和隐藏字符
服务端脚本文件如果编码不是ANSI,引擎读取的时候可能会把中文识别成乱码,从而导致语法报错。
用Notepad++打开脚本文件,查看右下角的编码格式。如果不是ANSI,在顶部菜单“编码”里转换成“ANSI编码”后保存。复制来的脚本经常附带UTF-8的BOM头,或者Windows/Unix换行符混用,这些都会导致引擎在解析行尾时出错。用Notepad++的“显示所有字符”功能,检查每行末尾是不是干净的CRLF(Windows换行),不要有混合的LF或多余空格。
###检查礼包脚本里的延时和间隔
有些礼包脚本用了`DELAYCALL`或者`GOTO`做循环判断,如果循环条件永远为真,就会陷入死循环触发引擎保护报错。
比如`[@检查条件]`标签里写`GOTO@检查条件`没有任何中断条件,引擎就会报“脚本死循环”错误。解决办法是在循环跳转前加一个计数器,比如`INCN01`然后判断`N0`小于10才跳转,否则跳出。
###替换脚本前先备份
修改任何脚本之前,把原文件复制一份到别的文件夹备份,改坏了还能还原。不要直接在服务端运行状态下修改脚本,改完之后在控制台输入`@reloadscript`重新加载脚本,或者直接重启整个服务端,让修改生效。如果改完还是报错,把报错行和上下十行一起截图发出来,方便别人帮你定位具体问题。
###先看报错内容定位问题位置
服务端启动时或者玩家触发某个NPC的时候,控制台窗口(一般是MirServer/Mir200的黑色窗口)会打印红色或黄色的报错信息。信息里通常会包含三个关键信息:
-脚本文件路径:比如`\Mir200\Envir\Market_Def\QQ礼包-3.txt`
-报错行数:比如`Line47`,指第47行
-错误类型:比如`Syntaxerror`(语法错误)或`Scriptfunctionnotfound`(脚本函数找不到)
用记事本打开对应的脚本文件,直接跳转到报错行数看那一行写了什么。
###QQ礼包脚本常见的几种报错和修法
**报错信息:脚本命令写错了**
比如把`GIVE`写成`GIVE`(多空格)、`CHECKLEVELEX`写成`CHECKLEVEL`漏了EX。这类错误属于拼写类,控制台会报“Unknownscriptcommand”或者“语法错误”。
修复办法是把脚本里的关键字对照引擎说明书逐字校对。HERO引擎的常用命令和GOM、GEE引擎不完全一样,不要混用。
**报错信息:变量类型不匹配**
比如脚本里写`MOVP010`是数字赋值,但后面用`P0`去做字符串判断;或者写`CHECK[999]1`的时候,`999`超出了引擎允许的变量范围。不同引擎允许的个人变量(比如P变量、D变量)编号范围不同,超出范围就报错。
修复办法是确认变量编号在引擎允许的范围内,数值和字符串类型的操作分开写。
**报错信息:文件或标签不存在**
比如脚本里写`GOTO@兑换礼包`,但整个文件里没有`@兑换礼包`这个标签;或者用`CALL`调用另一个文本文件时,那个文件路径不对或文件本身缺失。
修复办法是检查标签名是否拼写一致,大小写也要对上。CALL调用的文件路径要写成`\QuestDiary\功能脚本\礼包系统.txt`这种完整路径,不能只写文件名。
###检查编码格式和隐藏字符
服务端脚本文件如果编码不是ANSI,引擎读取的时候可能会把中文识别成乱码,从而导致语法报错。
用Notepad++打开脚本文件,查看右下角的编码格式。如果不是ANSI,在顶部菜单“编码”里转换成“ANSI编码”后保存。复制来的脚本经常附带UTF-8的BOM头,或者Windows/Unix换行符混用,这些都会导致引擎在解析行尾时出错。用Notepad++的“显示所有字符”功能,检查每行末尾是不是干净的CRLF(Windows换行),不要有混合的LF或多余空格。
###检查礼包脚本里的延时和间隔
有些礼包脚本用了`DELAYCALL`或者`GOTO`做循环判断,如果循环条件永远为真,就会陷入死循环触发引擎保护报错。
比如`[@检查条件]`标签里写`GOTO@检查条件`没有任何中断条件,引擎就会报“脚本死循环”错误。解决办法是在循环跳转前加一个计数器,比如`INCN01`然后判断`N0`小于10才跳转,否则跳出。
###替换脚本前先备份
修改任何脚本之前,把原文件复制一份到别的文件夹备份,改坏了还能还原。不要直接在服务端运行状态下修改脚本,改完之后在控制台输入`@reloadscript`重新加载脚本,或者直接重启整个服务端,让修改生效。如果改完还是报错,把报错行和上下十行一起截图发出来,方便别人帮你定位具体问题。

