当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

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

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

一、服务端脚本报错:先看M2日志拿行号
表现通常是M2控制台刷红字、NPC点开空白、登录触发断链、杀怪不爆、地图卡死。日志路径Mir200\Log\下看M2Server-日期.log、ScriptError.log、ErrorLog.txt。
红字里必带三样:出错文件(如Market_Def\盟重省-回收员.txt、QuestDiary\QFunction-0.txt)、行号(Line105)、错误描述(Unknowncommand/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盘ProgramFiles被系统拦写权限,都会报“脚本错误”。
处理:路径统一反斜杠;服务端放D/E盘纯英文路径;文件夹给当前用户完全控制权限;杀软加白名单。

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

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

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

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