传奇服务端NPC与挂机脚本报错排查修复完整流程

来源: 作者: 点击:
脚本错误分两端:服务端引擎脚本(M2/NPC/任务/机器人)和客户端挂机脚本(按键精灵类)。两端排错方式完全不一样,先分清是哪边报错再动手。

一、服务端脚本报错:先看M2日志拿行号
表现通常是M2控制台刷红字、NPC点开空白、登录触发断链、杀怪不爆、地图卡死。日志路径 Mir200\Log\ 下看 M2Server-日期.log、ScriptError.log、ErrorLog.txt。
红字里必带三样:出错文件(如 Market_Def\盟重省-回收员.txt、QuestDiary\QFunction-0.txt)、行号(Line 105)、错误描述(Unknown command / Missing ')' / 标签不存在 / 物品不存在)。
用Notepad++打开对应文件,Ctrl+G跳行,只改这一行,改完重载NPC或重启M2测试,别一次性改一片。

二、高频语法错误(占八成)
1. #IF/#ACT/#SAY/#ENDIF 不闭合,#IF后面没条件直接断。
2. [@标签] 没顶格,前面有空格或Tab,跳转找不到目标。
3. GOTO @xxx 或 CALL [路径]@标签,目标文件里没有对应标签。
4. 物品名和Item.DB不一致,比如脚本写“强效疗伤药”,库里叫“疗伤药(强效)”,报“道具不存在”。
5. 地图编号、职业判断、变量名写错,SET/MOV 格式不对(SET [变量] 值,空格分隔)。
6. 注释用了 // 或 / /,引擎只认 ; 开头。
7. 文件存成UTF-8带BOM,中文解析乱码,必须转ANSI/GBK。
8. 特殊符号(全角括号、表情、引号)混进脚本,解析直接中断。

三、死循环与触发递归
现象:M2报“脚本死循环”“GOTO超过上限”,CPU飙高,玩家点NPC卡住。
常见写法:
[@Main] 里无条件 GOTO @Main
回收脚本不先CHECKITEM就一直GOTO检测
QFunction里@GetExp触发后又CALL回自身触发源
修法:GOTO前加#IF判断;循环入口先检物品/变量,不满足BREAK;加计数器INCD0到上限强制跳出;触发类标签只赋值不递归调用。

四、引擎适配错(GOM/GEE/BLUE/HERO)
跨引擎抄脚本必踩坑:
GOM:SendMsg 用 MSG,通用命令多
GEE:Sendmsg改 SendCenterMsg,SetAutoPick改 AutoPickItem
BLUE:文件名固定(MonDie.txt、AutoHelp.txt),不能乱命名
HERO:TAKEITEM 要写 TAKE
先确认M2主程序版本(帮助-关于,或Enviro下Version.ini/GomVer.ini),按本引擎命令表改,别混用。

五、路径与权限类假报错
CALL路径用反斜杠不统一、文件实际是.ini没后缀、Mir200放C盘Program Files被系统拦写权限,都会报“脚本错误”。
处理:路径统一反斜杠;服务端放D/E盘纯英文路径;文件夹给当前用户完全控制权限;杀软加白名单。

六、客户端挂机脚本(按键精灵)报错
表现:启动无反应、中途停、坐标点歪、识别不到血条蓝条、窗口绑不上。
排错顺序:
1. 单窗口单脚本,别多开叠加挂同一脚本,句柄冲突。
2. 游戏窗口标题别改,按键精灵绑定当前窗口句柄。
3. 变量先 Dim 声明再用,For/If/子程序首尾闭合。
4. 绝对坐标换相对坐标,用抓抓工具重采颜色,加容差。
5. 关键操作前加 Delay 300~500,确保窗口焦点 SetForegroundWindow,不然指令发太快客户端不收。
6. 在每段逻辑后加 TracePrint 打调试信息,看停在哪一步。
7. 旧版按键源码在新版软件跑,批量替换旧语法,或装对应老版本按键精灵。

七、改版修复纪律
每次只改一处,改完重载或重启测一次。先修日志里第一个报错,后面往往是连锁,修完可能自动消失。改前备份原文件,别拿整包覆盖,容易把没错的也冲掉。

八、快速自检清单
启动阶段报错:查编码、路径、CALL文件是否存在、引擎命令是否匹配
运行中NPC报错:查标签闭合、物品名、地图号、变量作用域
触发即崩:查QFunction/QManage递归、穿戴触发EquipCheck.txt
挂机失灵:查窗口句柄、坐标采样、延迟、变量声明
宝箱/怪物不爆:查MonItems下掉落脚本文件名与格式

按这个顺序走,不用盲替换文件,绝大多数脚本错误半小时内能定位到行。