M2Server启动或运行中弹出脚本错误,是架设过程中最常见的故障。错误信息通常包含脚本文件路径、出错行号和具体命令,按照提示逐项排查即可定位根源。以下按错误类型分类说明排查与修复方法。
一、脚本文件加载失败
错误提示格式通常为“load fail: 路径\文件名.txt”,或控制台直接显示“找不到脚本文件”。这类问题出在文件读取环节,与脚本内容本身无关。
最常见的原因是文件缺失。服务端版本在打包或传输过程中,部分脚本文件被删除,而NPC配置文件或主脚本中仍然保留着对该文件的调用。M2Server加载到调用语句时找不到目标文件,就会报错。打开提示中的完整路径,确认文件是否存在。如果不存在,从服务端原始压缩包或同版本备份中复制该文件到对应目录。如果该功能不需要,也可以删除调用它的代码或NPC配置条目。
路径拼写不一致同样会导致加载失败。脚本中写的调用路径与实际文件存放路径存在大小写差异、文件夹名多字少字、斜杠方向错误,引擎都无法识别。部分老版本引擎对中文路径支持较差,文件夹名含中文时可能出现读取异常,建议将路径中的中文改为英文,并同步修改脚本中的调用路径。
文件编码也是常见诱因。M2Server的脚本文件只认ANSI编码,如果用UTF-8或UTF-8 with BOM保存,引擎读取时会出现乱码或直接报加载失败。用记事本打开脚本,另存为时编码选择ANSI,覆盖原文件即可。
二、脚本命令错误
错误提示会精确指出文件名和行号,例如“SetOnTimer 第15行:新人接待员-0.txt”。这类问题出在脚本命令本身,需要对照引擎命令手册逐条核对。
命令参数数量或格式错误最为普遍。以SetOnTimer为例,正确格式为“SetOnTimer 定时器编号 间隔时间 执行命令”,间隔时间不能为1毫秒,且必须指定要执行的命令标签。脚本中写成“SetOnTimer 1 1”缺少执行命令参数,引擎无法解析。打开报错行,对照手册补齐参数。
命令拼写错误同样常见。脚本命令必须使用英文半角符号,中文逗号、中文括号、中文引号都会导致解析失败。检查报错行及上下三到五行,确认所有符号均为半角。IF语句缺少对应的ENDIF、FOR循环缺少ENDFOR、命令关键字拼写错误,都会触发此类报错。
引擎版本不兼容也需要留意。部分命令在新版引擎中已被重命名或移除,旧脚本中的命令在新引擎上无法执行。例如老版本Hero引擎的定时命令与GOM引擎的SetOnTimer存在差异,需查阅当前所用引擎的命令手册,将不兼容的命令替换为等效写法。
三、变量相关错误
错误变量信息通常表现为“变量未定义”“变量类型不匹配”“变量赋值失败”等提示。M2Server中的变量分为数字型、字符型和自定义变量,各有固定的使用规范。
变量未定义是最常见的变量错误。脚本中调用了某个变量,但该变量在使用前没有被赋值或声明。数字型变量如P0到P99、G0到G99,可以直接用MOV命令赋值后使用;字符型变量如S0到S99、A0到A99,同样需要先赋值。自定义变量需要在脚本开头用VAR命令声明,或通过CALCVAR命令创建。打开报错脚本,找到提示中的变量名,确认其是否在调用前完成了定义。
变量类型不匹配也会触发报错。数字型变量只能赋值数字,字符型变量只能赋值文本。将数字赋给字符型变量或将文本赋给数字型变量,引擎无法解析。修改赋值语句,确保变量类型与赋值内容一致。
变量作用域错误容易被忽略。局部变量仅在当前脚本段内有效,跨脚本调用局部变量会提示未定义。需要跨脚本传递的数据,应使用全局变量或在变量管理文件中注册。
四、语法格式错误
语法错误不一定会给出明确的错误提示,有时表现为脚本功能异常或M2Server卡顿。常见问题集中在符号和结构两个层面。
符号方面,脚本命令之间必须用空格分隔,多参数命令的参数之间也必须有空格。“MOVD”写成“MOV D”或“GIVE裁决1”写成“GIVE 裁决 1”,都会导致解析失败。括号和引号必须成对闭合,字符串缺少结束引号、条件判断缺少右括号,都会中断脚本执行。
结构方面,IF条件判断后必须跟#ACT或#SAY,不能直接再跟IF或空行。GOTO跳转的目标标签必须在同一脚本文件中存在,标签名以@开头且必须唯一。循环语句必须包含退出条件,否则会造成死循环,M2Server的脚本死循环数达到上限后会触发报错。
五、物品数据库与脚本的匹配问题
脚本中调用物品时,物品名称必须与StdItems.DB中的标准名称完全一致。脚本写“GIVE 裁决 1”,但数据库中物品名为“裁决之杖”,引擎找不到“裁决”就会报物品不存在。打开StdItems.DB,确认物品的准确名称,复制到脚本中替换。
装备属性字段不匹配也会导致脚本报错。脚本中检测“Luck”字段,但数据库中的字段名为“幸运”,或者脚本使用的属性编号与数据库的Looks字段不对应,都会触发错误。核对脚本中所有装备相关的名称和字段与数据库实际结构是否一致。
六、排查流程与操作建议
遇到脚本错误时,先不要关闭报错窗口,记录下文件名和行号。打开M2Server控制台的日志面板,开启脚本错误日志功能,日志文件通常位于MirServer\Log目录下,错误信息会详细记录触发时间和具体位置。
用Notepad++打开报错的脚本文件,跳转到对应行,先检查符号是否为英文半角,再对照引擎命令手册核对命令格式和参数。如果单行看不出问题,检查上下三到五行的脚本结构是否完整。
修改脚本前务必备份原文件,避免改错后无法恢复。修改后重启M2Server测试,确认报错是否消失。如果报错消失但功能异常,说明脚本逻辑仍有问题,需要进一步检查变量赋值和条件判断。
对于不熟悉脚本编写的用户,可以使用文本替换专家批量查找和替换脚本中的路径或命令,减少逐行修改的工作量。但替换前要确认替换范围,避免误改其他内容。
服务端的整体安装路径建议使用纯英文,避免中文和空格。路径含中文时,部分引擎的文件读取会不稳定,脚本加载失败的几率明显增加。
标签不存在是跳转类错误的核心原因。脚本中使用了GOTO @某标签,但文件中没有对应的[@某标签]定义,引擎会提示标签未找到。补上缺失的标签,或修正GOTO的目标名称。
变量未初始化就参与计算,会导致计算结果异常或脚本中断。在脚本的登录触发段或功能入口处,先用MOV命令给变量赋初始值,再进行后续运算。全局变量需要在变量管理文件中注册后才能跨脚本使用。
脚本命令与引擎版本不匹配时,不要强行修改命令格式,应先确认当前引擎支持哪些命令。从引擎自带的帮助文档或命令手册中查找等效命令,替换后测试。
传奇M2Server脚本错误排查修复完整指南
来源:
作者:
点击:

