传奇M2脚本报错361:最高属性NPC点击无响应修复

来源: 作者: 点击:
日志中频繁刷新的 TNormNpc::GetValValueA nCMD=361 异常,直接导致游戏内“最高攻击”、“最高魔法”等NPC选项点击无反应。此问题并非脚本语法错误,而是引擎全局变量缺失或脚本逻辑与引擎不兼容。道术能看而其他选项报错,说明脚本调用了引擎未定义的变量。

一、报错根源分析

错误日志显示脚本试图获取 <$HIGHDCINFO>(最高攻击)和 <$HIGHMCINFO>(最高魔法)变量的值,但引擎返回异常(nCMD=361通常表示“获取变量值”操作失败)。核心原因如下:

1. 变量未定义:老版本引擎或部分改版引擎不支持 <$HIGHDCINFO> 和 <$HIGHMCINFO> 这两个全局统计变量,仅支持 <$HIGHSCINFO>(最高道术)。脚本强行调用不存在的数据,触发M2保护机制并报错。
2. 数据为空:服务器内无在线玩家,或所有玩家攻击/魔法力均为0,导致统计函数无法返回有效值,脚本逻辑中断。

二、修复方案:修改NPC脚本

最彻底的解决方法是重写NPC脚本,移除对未定义变量的直接调用。不要试图修复引擎,而是修改脚本以适应你的引擎版本。

步骤1:定位报错脚本
进入服务端 MirServer\Mir200\Envir\Market_Def 目录,根据NPC名称找到对应的 .txt 脚本文件(如 风云排行榜-3.txt)。

步骤2:替换脚本内容(关键)
找到 [@最高攻击] 和 [@最高魔法] 标签,将原有代码替换为以下兼容性写法。此写法先检测变量是否存在,若不存在则显示“暂无数据”。
[@最高攻击]
#IF
CHECKVARLIST ..\QuestDiary\全局变量.txt <$HIGHDCINFO>
#ACT
messagebox ↓↓↓↓↓↓↓↓当前在线最高攻击力人物↓↓↓↓↓↓↓↓\<$HIGHDCINFO>
break
#ELSESAY
暂无最高攻击力人物数据。\
<关闭/@exit>

[@最高魔法]
#IF
CHECKVARLIST ..\QuestDiary\全局变量.txt <$HIGHMCINFO>
#ACT
messagebox ↓↓↓↓↓↓↓↓当前在线最高魔法力人物↓↓↓↓↓↓↓↓\<$HIGHMCINFO>
break
#ELSESAY
暂无最高魔法力人物数据。\
<关闭/@exit>


步骤3:降级方案(如果上述仍报错)
如果替换后M2仍报361错误,说明你的引擎完全不具备统计最高攻击/魔法的功能。必须彻底删除相关变量,改用普通文本提示。
[@最高攻击]
#ACT
messagebox 本服暂未开放最高攻击查询。\
break

[@最高魔法]
#ACT
messagebox 本服暂未开放最高魔法查询。\
break


三、临时应急处理

如果无法立即修改脚本,可通过以下操作暂时屏蔽报错:

1. 清空统计:在游戏中确保至少有1个攻击力不为0的玩家在线,避免统计函数因空值报错。
2. 禁用NPC:在 MerChant.txt 中暂时注释或删除该排行榜NPC,阻止玩家点击触发报错。
3. 重启M2:修改脚本后,必须在M2Server界面点击“重读NPC”或直接重启M2,修改才能生效。

四、深度排查建议

若必须使用“最高属性”功能,需确认引擎版本:
• GOM/GEE引擎:通常完整支持 <$HIGHDCINFO> 系列变量。报错可能是插件冲突或脚本格式错误(如多余空格)。

* Hero/翎风引擎:部分老版本不支持,需升级引擎或使用自定义全局变量(G0-G999)配合定时器自行统计。

总结:此错误是“脚本功能超出引擎能力”导致的。最稳妥的解决方法是删除或注释掉脚本中调用 <$HIGHDCINFO> 和 <$HIGHMCINFO> 的代码段,改用静态文本或关闭该查询功能。