传奇M2server脚本错误显示变量信息排查指南

来源: 作者: 点击:
M2server运行时若提示“错误变量信息”或脚本执行异常,通常源于QFunction.txt、QManage.txt等脚本文件中变量使用不当、语法格式错误或引擎兼容性问题。需从变量定义、调用逻辑和文件结构三方面逐项核查。

一、变量命名与作用域错误
非法字符:变量名仅支持字母、数字、下划线,禁止使用中文、空格或符号(如$血量、Var-1)。正确示例:HPLAYER_HP。
作用域混淆:
A0-A9为角色临时变量,重启失效;
G0-G9为队伍共享变量;
S0-S99为服务器全局变量。
若在组队脚本中误用A0代替G0,会导致成员间数据不同步。
未初始化直接比较:
#IF
LARGEA0100;若A0未赋值,默认为0,但部分引擎视为无效

应先设默认值:MOVA00。

二、脚本语法格式问题
标签缺失或重复:每个[@Label]必须唯一,且#ACT/#SAY指令需严格对齐。例如:
[@OnKillMob]
#IF
CHECKITEM101
#ACT
GIVE201

若#ACT前多出空格或缺少#IF,M2server将报“脚本错误”。
括号与引号不匹配:字符串参数必须用双引号包裹,如:
SENDMSG5"任务完成"

单引号或无引号会触发解析失败。
指令拼写错误:如MOVA0100(缺空格)应为MOVA0100;SENDMSG(漏字母)应为SENDMSG。

三、引擎版本兼容性冲突
高版本指令用于旧引擎:如Hero引擎支持CALC运算,但早期C2引擎仅支持ADD/SUB。
变量范围超限:部分引擎限制S变量最大为S49,若使用S50则报错。
事件标签不支持:如[@OnMapEnterEx]仅在特定版本可用,旧版需改用[@OnMapEnter]。

四、文件编码与换行符异常
脚本文件必须保存为ANSI编码(简体中文系统下即GBK),UTF-8会导致中文注释乱码并引发解析中断。
换行符需为Windows格式(CRLF),Linux格式(LF)可能使部分引擎跳过指令。可用Notepad++转换:菜单栏“编辑”→“文档格式”→“转换为Windows格式”。

五、调试定位具体错误行
查看M2server控制台输出,错误信息通常包含文件名及近似行号,如:
ErrorinQFunction.txtline142:Invalidvariable'H%'

在可疑代码段前后插入测试消息:
#ACT
SENDMSG7"Debug:BeforeMOVA0"
MOVA0100
SENDMSG7"Debug:AfterMOVA0"

通过客户端是否收到消息判断执行断点。
逐段注释代码(在行首加;),缩小错误范围。

六、常见错误示例与修正
错误1:#IFEQUALA0(缺少比较值)
修正:#IFEQUALA01
错误2:GIVE"命运之书"1(物品需用Idx)
修正:GIVE01
错误3:[@Main]标签后直接写SENDMSG(缺少#ACT)
修正:
[@Main]
#ACT
SENDMSG5"欢迎"


确保所有脚本文件通过文本编辑器(非Word)编写,避免隐藏格式符。修改后重启M2server使变更生效,切勿热加载未验证脚本。
[顶部]