传奇HERO引擎自定义变量无效与M2报错全排查指南

来源: 作者: 点击:
一、 核心原因:未在M2中“声明”变量

HERO引擎的自定义变量(非P、G等系统变量)必须先声明后使用。直接写脚本调用会导致M2报“未定义”错误。

1. 声明位置:必须在 Mir200\Envir\MapQuest_Def\QManage.txt 的 [@Login] 段(个人变量)或 [@Startup] 段(全局变量)中预先定义。
2. 正确格式:
[@Login]
#ACT
VAR Integer HUMAN 我的变量 ;声明个人数字变量
VAR String HUMAN 我的名字 ;声明个人字符变量
LOADVAR HUMAN 我的变量 ..\QuestDiary\数据\变量保存.txt ;读取存档

未执行上述 VAR 命令直接使用 CHECKVAR 或 CALCVAR,M2 必报错。

二、 命名规则与语法避坑

1. 严禁使用保留前缀:变量名绝对不能以 P、G、A、I、M、N、S、D、U、T 开头。这些是引擎内置变量,自定义变量使用它们会导致内存冲突或报错。
2. 大小写敏感:HERO引擎脚本指令通常强制大写。若使用小写指令(如 checkvar)或大小写混用,M2可能报语法错误。
3. 字符限制:变量名尽量使用中文或字母,避免特殊符号(如 $、&),且长度不宜过长(建议15字符内)。

三、 M2功能开关与配置检查

变量无效(不报错但数值不变)通常是因为M2的变量功能未开启或数据库未保存。
1. 开启功能:打开 M2Server → “选项” → “参数设置” → “变量设置”。必须勾选 “启用用户自定义变量” 和 “启用全局自定义变量”。修改后必须重启M2,仅点“重读”无效。
2. 保存机制:自定义变量需配合 SAVEVAR 命令手动存档。若脚本中漏写 SAVEVAR,下线后数据会丢失,表现为“变量无效”。
[@Main]
#ACT
CALCVAR HUMAN 我的变量 + 1
SAVEVAR HUMAN 我的变量 ..\QuestDiary\数据\变量保存.txt ;必须保存


四、 报错信息速查与修复

M2报错关键词 原因分析 解决方案

Undefined Variable 变量未声明 在 QManage.txt 的 [@Login] 中添加 VAR 声明语句

Type Mismatch 类型不匹配 检查 VAR 声明的是 Integer(数字)还是 String(文本),运算时不能混用

Syntax Error 语法错误 检查指令是否全大写,变量名是否含非法字符或保留字

无报错但数据归零 未保存/未读取 登录脚本补 LOADVAR,修改脚本后补 SAVEVAR

五、 完整脚本示例(可直接套用)

目标:实现上线读取历史计数,点击NPC计数+1并保存。
1. 声明变量(QManage.txt):
[@Login]
#ACT
VAR Integer HUMAN 点击次数
LOADVAR HUMAN 点击次数 ..\QuestDiary\玩家数据\点击记录.txt

2. 使用变量(NPC脚本):
[@Main]
你已经点击了:<$HUMAN(点击次数)> 次。\
<点击我/@增加>\
[@增加]
#ACT
CALCVAR HUMAN 点击次数 + 1
SAVEVAR HUMAN 点击次数 ..\QuestDiary\玩家数据\点击记录.txt
SENDMSG 6 点击次数+1,当前为:<$HUMAN(点击次数)>


最后步骤:修改完脚本后,关闭M2Server并重新启动,否则变量声明可能不加载。