一、 错误定位与变量含义解析
报错信息解读
第一条错误信息表明,NPC“竞价地图”在执行 MOV 命令时出现问题。该NPC位于地图编号3(坐标330:321)。脚本试图将一个文本字符串“法师”赋值给变量 A551,但变量类型或上下文不匹配导致失败。
第二条错误信息是 INC 命令错误。脚本试图将个人变量 G507 的数值增加 2,但变量可能未被正确定义或初始化。
脚本变量命名规则
• A变量:全局变量,用于全服范围记录数据。命名格式为字母A+数字(如A551)。
• G变量:个人变量,与角色绑定,随角色保存。命名格式为字母G+数字(如G507)。
• S变量:脚本内部使用的临时变量,重启后清零。
二、 变量初始化与脚本执行流程修正
变量初始化检查
在使用变量前,必须先进行初始化定义。查找 QuestDiary 文件夹下的变量初始化文件(如 变量初始化.txt 或 #AutoRunNPC.txt)。在其中加入以下行,确保变量在服务器启动时被正确创建:
[@AutoRun]
#IF
#ACT
MOV A551
MOV G507
这将变量 A551 和 G507 初始化为空或0。重启服务器后变量生效。
MOV命令正确用法
MOV 命令用于给变量赋值。你的脚本意图是给A551赋值为“法师”,但必须确认该变量是用于存储字符串。在脚本中应写为:
[@主流程]
#IF
#ACT
MOV A551 法师
SENDMSG 6 已将A551设为:<$STR(A551)>
如果A551是数值变量,则不能赋值为“法师”,需改为数字。
INC命令使用前提
INC 命令用于数字变量自增。变量G507必须是已存在的数字变量。在增加前,必须先通过 MOV 或 CALCVAR 命令为其赋予初始数值。正确脚本段落如下:
[@增加数值]
#IF
#ACT
MOV G507 0 ; 确保G507有初始值
INC G507 2
SENDMSG 6 当前G507的值为:<$STR(G507)>
如果变量未初始化或类型错误,INC 命令会报错。
三、 文件位置与调用关系
NPC脚本存放位置
NPC脚本文件位于 MirServer\Mir200\Envir\Market_Def 文件夹。根据报错信息,你需要找到名为“竞价地图-3.txt”的文件(其中“3”是地图编号)。用记事本打开,查找包含 MOV A551 法师 和 INC G507 2 的命令行。
脚本调用顺序检查
在脚本中,变量的使用必须遵循“先定义,后使用”的原则。检查脚本逻辑,确保在 INC G507 2 之前,G507已经被 MOV 命令赋予了初始数值。错误的顺序是常见报错原因。
修改脚本示例
假设你的原脚本段落有误,修正后应如下所示:
; 原错误写法
MOV A551 法师
INC G507 2
; 修正后写法
MOV A551 法师
MOV G507 0
INC G507 2
; 或者,如果G507已有值,则直接INC
; MOV A551 法师
; INC G507 2
修改完成后,保存文件。然后,在M2Server引擎的管理界面,依次点击“控制→重新加载→NPC脚本”,使修改立即生效,无需重启服务器。
四、 高级调试与验证
输出变量值验证
在脚本中,在 MOV 和 INC 命令后添加提示信息,查看变量实际值:
#ACT
MOV A551 法师
SENDMSG 6 A551赋值成功,值为:<$STR(A551)>
MOV G507 0
INC G507 2
SENDMSG 6 G507增加成功,值为:<$STR(G507)>
发送到聊天框的信息可验证脚本是否按预期执行。
变量文件检查
检查文件 MirServer\Mir200\GlobalVal.ini(全局变量)和角色数据文件,确认变量A551和G507的实际存储值是否与脚本预期一致。若文件内变量值为乱码或格式错误,需手动清理。
脚本语法全面检查
使用M2Server自带的“脚本错误检查”功能(通常在“管理→文件管理”中),可批量扫描 Market_Def 和 QuestDiary 文件夹下的所有脚本,提前发现语法、参数和变量错误。
五、 常见错误与解决方案对照表
错误现象 根本原因 解决方案
变量不存在 未在启动脚本中初始化 在 #AutoRunNPC.txt 中初始化变量
赋值类型不匹配 给数值变量赋字符串值 修改变量值为数字,或修改变量用途
变量值未刷新 脚本执行后未重载 在M2中重载NPC脚本
脚本逻辑错误 顺序或条件判断有误 逐段检查 #IF 和 #ACT 语句
若问题仍未解决,请提供完整的脚本段落,以便进一步分析条件判断、跳转命令与变量的相互作用。

