传奇脚本< HIGHMCINFO>调用异常解决方法

来源: 作者: 点击:
一、错误现象与日志分析

进入游戏后点击NPC菜单中的“最高攻击”“最高魔法”选项无响应,仅“最高道术”可正常显示。服务端日志反复报错:
[Exception] TNormNpc::GetValValueA nCMD=361 sParam1=↓↓↓↓↓↓↓↓当前在线最高攻击力人物↓↓↓↓↓↓↓↓\
[Exception] TMerchant::UserSelect... Data: @最高攻击

同类错误出现在(魔法)调用时,而(道术)正常。表明系统无法解析和这两个变量。

二、根本原因

该问题源于服务端核心程序(M2Server.exe)版本过旧或未完整支持高版本变量标签。(物理攻击)、(魔法力)、(道术力)属于后期扩展的全局变量,用于动态获取当前在线角色的最高属性信息。部分早期引擎或精简版M2仅实现了,缺失对DC/MC变量的处理逻辑,导致调用时触发nCMD=361异常(变量解析失败)。

三、解决方案

方案1:替换支持全变量的M2Server核心

下载完整版或高兼容性M2Server.exe(需与当前服务端架构匹配,如Hero、QF、Asm等);
停止服务端,备份原M2Server.exe;
将新M2Server.exe放入D:MirServerMir200目录覆盖;
重启服务端,测试变量是否生效。

方案2:改用替代脚本逻辑(无需更换M2)

若无法更换核心,可通过自定义脚本模拟最高属性查询。以“最高攻击”为例:

在QuestDiary目录新建文件夹最高属性,创建最高攻击.txt:
[@main]
IF
CHECKONLINECOUNT > 0
ACT
MOV S0 0
MOV S1 ""
KILLMONEXPRATE
; 遍历所有在线玩家(需服务端支持#FORPLAYER)
FORPLAYER
{
#IF
CHECKHUM
#ACT
MOV S2
; 比较攻击力(取AC+DC)
CALC S3 +
#IF
LARGE S3 S0
#ACT
MOV S0 S3
MOV S1
}
SAY
当前在线最高攻击力人物:()\

修改NPC脚本,将原调用改为#CALL:
[@最高攻击]
CALL [..QuestDiary最高属性最高攻击.txt] @main

同理创建最高魔法.txt(使用)和最高道术.txt(使用)。

注意:#FORPLAYER指令并非所有引擎支持。若不支持,此方案无效,必须采用方案1。

方案3:检查变量书写格式

确认脚本中变量书写无多余符号。正确格式为:

常见错误包括:
多空格:
拼写错误:(数字0代替字母O)
使用中文括号:()

四、验证步骤

替换M2或修改脚本后,重启M2Server;
登录多个角色,确保有战士(高DC)、法师(高MC)、道士(高SC)在线;
点击NPC对应选项,观察是否正常显示角色名与数值;
查看服务端日志,确认不再出现nCMD=361异常。

五、补充说明

返回格式通常为“角色名(攻击力)”,如“战神(850)”;
若服务端使用数据库存储角色数据,需确保M2能实时读取最新属性;
部分版本变量名为、,需查阅所用引擎文档确认。

优先尝试方案1,因方案2依赖高级脚本指令,兼容性有限。核心程序更新后,三个最高属性功能应同时恢复正常。