错误诊断:变量类型不匹配
根据报错信息,这是典型的变量名不合法或变量类型冲突。MOV指令将“法师”这个字符串赋值给了A551,但A开头的变量通常用作个人自定义变量。INC指令尝试将G507增加2,但G变量是全局变量,操作不当也会报错。
变量命名与使用规则
不同引擎的变量命名规范不同,但通用规则如下:
变量类型 通用格式 (HERO/GEE引擎) 使用范围 常见错误
个人变量 A (数字) 如 A1, A100 私人属性,同账号可共享 数字超出范围,混用字符串
个人临时变量 S (字符串) 如 S1, S10 临时存储,下线清空 与P、M等类型混淆
全局变量 G (数字) 如 G1, G200 全服唯一,用于活动开关 重复INC导致数值过大
行会变量 H (数字) 如 H1, H10 行会内部使用 与G变量冲突
核心规则:
• 变量名后必须接纯数字,如A100正确,A一百错误。
• 数字变量(A、G、H)只能赋值或计算数字,不能存放字符串。
• 字符串变量(S)可存文本,但不支持数学运算。
• 变量值在脚本引擎中有上限,INC G100 2可能因G100已达最大值而溢出。
修复方案:修正变量类型
假设你原脚本意图是:记录玩家职业,并对全服某个计数+2。
原错误脚本(示例):
#IF
CHECKJOB warrior
#ACT
MOV A551 战士
INC G507 2
修正后的正确脚本:
#IF
CHECKJOB warrior
#ACT
MOV S1 战士 ; 用S变量(字符串)存储职业名
INC G507 2 ; 检查G507是否已接近引擎上限(如1000万)
新增脚本的正确放置步骤
第一步:定位NPC脚本文件
脚本错误发生在竞价地图这个NPC。需找到其脚本文件:
1. 打开服务端Mir200\Envir\Merchant.txt,查找包含“竞价地图”的行。
2. 其最后一列(如.../竞价管理员 3 330 321 竞价地图-1)指明了脚本位置。
3. 前往Mir200\Envir\Npc_def\目录,找到对应文件(如竞价管理员-3.txt)。
第二步:编辑脚本并设置变量
用Notepad++打开文件(切勿用Windows记事本),在适当位置(如[@main]段下方)添加。例如,想实现“点击按钮记录职业并增加全服计数”:
[@main]
我是竞价管理员。\ \
<记录职业/@记录职业> \ \
[@记录职业]
#IF
CHECKJOB warrior
#ACT
MOV S1 战士
INC G507 2
SENDMSG 6 提示:您的职业[战士]已记录,全服计数+2。
BREAK
#IF
CHECKJOB wizard
#ACT
MOV S1 法师
INC G507 2
SENDMSG 6 提示:您的职业[法师]已记录,全服计数+2。
BREAK
#IF
CHECKJOB taoist
#ACT
MOV S1 道士
INC G507 2
SENDMSG 6 提示:您的职业[道士]已记录,全服计数+2。
BREAK
#ELSEACT
SENDMSG 6 提示:职业判定失败。
BREAK
第三步:变量初始化与边界检查
在QManage.txt的[@Login]段添加变量初始化,避免NULL错误:
[@Login]
#IF
EQUAL G507
#ACT
MOV G507 0
同时,在INC操作前增加上限检查:
#IF
SMALL G507 9999998
#ACT
INC G507 2
SENDMSG 6 增加成功,当前全服计数:<S$G507>。
#ELSEACT
SENDMSG 6 提示:全服计数已达上限,无法增加。
引擎兼容性排查
若上述修正后仍报错,需检查引擎差异:
• GEE引擎:支持INC G507 2,也支持MOV G507 2,但G变量默认需在QuestDiary\G变量目录下声明。
• GOM引擎:变量操作类似,但字符串需用S变量,如MOV S$职业 法师。
• V8M2引擎:需注意变量值范围,G变量建议在0-1000000之间。
验证与调试
1. 修改后,保存脚本文件(务必确认编码为ANSI)。
2. 重启M2Server,观察启动日志是否还有报错。
3. 在游戏中与NPC对话,点击测试按钮,看消息提示是否正常。
4. 可临时添加调试命令,如#ACT MOV S$测试 成功并在聊天框输出<S$测试>,验证脚本块是否被执行。
若遵循以上步骤,MOV和INC的变量错误基本可解决。关键在于:用S变量存文本,用G/A变量存数字,并在INC前检查数值边界。

