这两个现象不是客户端卡,是服务端脚本在触发那一瞬间报错,客户端收不到正常回包就直接断开。点裁决能典当、点骨玉就退,说明问题固定在“赎回骨玉”这条分支;猪四雕像一点就退,说明那个坐标绑了地图事件或隐藏NPC脚本,执行到某行崩了。
一、先做的三件准备工作
1.整个MirServer目录先复制一份备份,尤其是Mir200\Envir和Mud2\DB。改坏了还能回滚。
2.启动顺序走全:DBServer→LoginSrv→RunGate/LoginGate/SelGate→M2Server。等M2控制台显示加载完成再进游戏。
3.打开M2的脚本错误日志。M2菜单“查看-调试信息”勾上“脚本错误”和“变量信息”;选项-参数设置-游戏日志里把“脚本运行日志”打开。然后进游戏复现一次:点骨玉赎回、点雕像。哪一行红字报错,直接记下来,后面全靠这个定位。
二、典当裁决点骨玉闪退的排查
典当系统一般是Market_Def里一个商人脚本,或者QuestDiary里的功能段。重点看赎回分支。
1.找典当NPC脚本
进Mir200\Envir\Market_Def,按文件名猜:典当、当铺、pawn、dangpu这类。Merchant.txt里也能反查NPC名对应的脚本文件。找到后看赎回骨玉那段,类似:
#IF
CHECKITEM当票xx1
#ACT
TAKE当票xx1
GIVE骨玉1
重点核对三件事:
骨玉这个名字必须和数据库完全一致。打开Mud2\DB\StdItems.DB(或Envir\StdItems.txt),抄“骨玉权杖”还是“骨玉”原样写,多一个空格都不行。
GIVE后面的物品在数据库里真实存在,idx没重复,stdmode字段没错乱。
如果脚本里写的是GIVE骨玉权杖,但数据库里叫骨玉,或者反过来,触发到这一行就中断,客户端表现就是闪退。
2.检查物品绑定状态
有些端把典当赎回设计成“先销毁当票,再发绑定骨玉”。如果骨玉在数据库里被标记了特殊绑定字段,或者脚本里用了Give绑定物品的扩展命令但引擎不认,也会崩。
临时绕开办法:把赎回分支注释掉(行首加分号),改成直接发非绑定骨玉:
;GIVE绑定骨玉1
GIVE骨玉1
重载NPC(M2里输入@reloadnpc),再点测试。
3.检查裁决当票的数据
点裁决能典当成功,说明典当进仓没问题;赎回崩,多半是“当票→骨玉”这步物品映射错了。看看当票物品在数据库里的Overlap/Need字段,以及脚本里TAKE的当票名是否和发出来的当票名一字不差。
4.编码问题
脚本文件用Notepad++打开,编码必须是ANSI(GBK)。如果是UTF-8带BOM,中文物品名会乱码,GIVE找不到物品直接报错退出。
三、猪四雕像点一下就退的排查
猪四一般是蜈蚣洞深层地图(如7层或幻境变体,地图号各端不同)。雕像不是普通怪物,是地图事件绑的触发点。
1.查MapEvent.txt
路径Mir200\Envir\MapEvent.txt。格式是:
地图号XY触发标识触发条件触发机率事件类型脚本标签
找到猪四地图号对应的雕像坐标,看它CALL的是哪个QFunction或QuestDiary里的标签。比如:
12123456-1:*01:@StatueEvent
然后去QFunction-0.txt或QuestDiary对应文件里找@StatueEvent这段。
2.常见崩点
@StatueEvent里GIVE了数据库不存在的物品
调用了MAPMOVE到一个MapInfo.txt里没有的地图号
用了当前引擎不认的命令(比如把GEE的SendCenterMsg塞进老GOM/HERO)
脚本里GOTO跳回自己,没退出条件,死循环拖垮M2
3.快速验证
把@StatueEvent这段整个注释掉,只留一句:
[@StatueEvent]
#ACT
SENDMSG6雕像触发正常
重载脚本(@reloadqm或重启M2),再点雕像。如果不退了,说明就是这段里的某行资源或命令出问题。然后逐行把功能加回来,加到哪行又开始退,就是哪行。
4.雕像其实是隐藏NPC的情况
有的端雕像是Market_Def里的Merchant,坐标写在Merchant.txt。如果NPC配置文件里Script字段指向的脚本文件不存在,或者坐标落在墙里,点击也会异常退出。核对:
Merchant.txt里NPC名和Market_Def文件名前缀一致
坐标在地图可站立格
脚本文件存在且编码ANSI
四、数据库层面的顺手检查
用DBC工具(老HERO/BLUE/LEG引擎)或数据库编辑器打开StdItems.DB:
骨玉、裁决、当票类物品的Name字段无前后空格
Idx没重复
Stdmode、Shape、DuraMax字段没填越界值
改完数据库必须完全关掉M2再重启,光重载脚本不刷库缓存
五、临时能玩下去的绕开方案
典当赎回先别用:把当票留着,直接用GM命令发骨玉:
@make骨玉1
或者脚本里加个备用商人,只做“当票换骨玉”的最简GIVE,不走原典当系统的复杂逻辑。
猪四雕像先禁触发:MapEvent.txt里那行前面加分号注释掉,重启M2。雕像变成纯装饰,不影响打怪升级,等找到正解再恢复。
六、排错顺序收一下
备份目录→开M2脚本日志→复现点骨玉和雕像→看红字报哪行→核对方块名/地图号/命令是否和数据库一致→注释掉可疑段逐行放开→编码转ANSI→重启M2测试。
这类问题九成以上集中在三处:物品名和数据库对不上、MapEvent/QFunction里调了不存在的资源、脚本编码或引擎命令不兼容。对着M2红字一行一行对,比换客户端有用得多。
别急着重下服务端。先按上面把两个触发点分别注释测试,定位到具体行再改,原端基本都能修好。
一、先做的三件准备工作
1.整个MirServer目录先复制一份备份,尤其是Mir200\Envir和Mud2\DB。改坏了还能回滚。
2.启动顺序走全:DBServer→LoginSrv→RunGate/LoginGate/SelGate→M2Server。等M2控制台显示加载完成再进游戏。
3.打开M2的脚本错误日志。M2菜单“查看-调试信息”勾上“脚本错误”和“变量信息”;选项-参数设置-游戏日志里把“脚本运行日志”打开。然后进游戏复现一次:点骨玉赎回、点雕像。哪一行红字报错,直接记下来,后面全靠这个定位。
二、典当裁决点骨玉闪退的排查
典当系统一般是Market_Def里一个商人脚本,或者QuestDiary里的功能段。重点看赎回分支。
1.找典当NPC脚本
进Mir200\Envir\Market_Def,按文件名猜:典当、当铺、pawn、dangpu这类。Merchant.txt里也能反查NPC名对应的脚本文件。找到后看赎回骨玉那段,类似:
#IF
CHECKITEM当票xx1
#ACT
TAKE当票xx1
GIVE骨玉1
重点核对三件事:
骨玉这个名字必须和数据库完全一致。打开Mud2\DB\StdItems.DB(或Envir\StdItems.txt),抄“骨玉权杖”还是“骨玉”原样写,多一个空格都不行。
GIVE后面的物品在数据库里真实存在,idx没重复,stdmode字段没错乱。
如果脚本里写的是GIVE骨玉权杖,但数据库里叫骨玉,或者反过来,触发到这一行就中断,客户端表现就是闪退。
2.检查物品绑定状态
有些端把典当赎回设计成“先销毁当票,再发绑定骨玉”。如果骨玉在数据库里被标记了特殊绑定字段,或者脚本里用了Give绑定物品的扩展命令但引擎不认,也会崩。
临时绕开办法:把赎回分支注释掉(行首加分号),改成直接发非绑定骨玉:
;GIVE绑定骨玉1
GIVE骨玉1
重载NPC(M2里输入@reloadnpc),再点测试。
3.检查裁决当票的数据
点裁决能典当成功,说明典当进仓没问题;赎回崩,多半是“当票→骨玉”这步物品映射错了。看看当票物品在数据库里的Overlap/Need字段,以及脚本里TAKE的当票名是否和发出来的当票名一字不差。
4.编码问题
脚本文件用Notepad++打开,编码必须是ANSI(GBK)。如果是UTF-8带BOM,中文物品名会乱码,GIVE找不到物品直接报错退出。
三、猪四雕像点一下就退的排查
猪四一般是蜈蚣洞深层地图(如7层或幻境变体,地图号各端不同)。雕像不是普通怪物,是地图事件绑的触发点。
1.查MapEvent.txt
路径Mir200\Envir\MapEvent.txt。格式是:
地图号XY触发标识触发条件触发机率事件类型脚本标签
找到猪四地图号对应的雕像坐标,看它CALL的是哪个QFunction或QuestDiary里的标签。比如:
12123456-1:*01:@StatueEvent
然后去QFunction-0.txt或QuestDiary对应文件里找@StatueEvent这段。
2.常见崩点
@StatueEvent里GIVE了数据库不存在的物品
调用了MAPMOVE到一个MapInfo.txt里没有的地图号
用了当前引擎不认的命令(比如把GEE的SendCenterMsg塞进老GOM/HERO)
脚本里GOTO跳回自己,没退出条件,死循环拖垮M2
3.快速验证
把@StatueEvent这段整个注释掉,只留一句:
[@StatueEvent]
#ACT
SENDMSG6雕像触发正常
重载脚本(@reloadqm或重启M2),再点雕像。如果不退了,说明就是这段里的某行资源或命令出问题。然后逐行把功能加回来,加到哪行又开始退,就是哪行。
4.雕像其实是隐藏NPC的情况
有的端雕像是Market_Def里的Merchant,坐标写在Merchant.txt。如果NPC配置文件里Script字段指向的脚本文件不存在,或者坐标落在墙里,点击也会异常退出。核对:
Merchant.txt里NPC名和Market_Def文件名前缀一致
坐标在地图可站立格
脚本文件存在且编码ANSI
四、数据库层面的顺手检查
用DBC工具(老HERO/BLUE/LEG引擎)或数据库编辑器打开StdItems.DB:
骨玉、裁决、当票类物品的Name字段无前后空格
Idx没重复
Stdmode、Shape、DuraMax字段没填越界值
改完数据库必须完全关掉M2再重启,光重载脚本不刷库缓存
五、临时能玩下去的绕开方案
典当赎回先别用:把当票留着,直接用GM命令发骨玉:
@make骨玉1
或者脚本里加个备用商人,只做“当票换骨玉”的最简GIVE,不走原典当系统的复杂逻辑。
猪四雕像先禁触发:MapEvent.txt里那行前面加分号注释掉,重启M2。雕像变成纯装饰,不影响打怪升级,等找到正解再恢复。
六、排错顺序收一下
备份目录→开M2脚本日志→复现点骨玉和雕像→看红字报哪行→核对方块名/地图号/命令是否和数据库一致→注释掉可疑段逐行放开→编码转ANSI→重启M2测试。
这类问题九成以上集中在三处:物品名和数据库对不上、MapEvent/QFunction里调了不存在的资源、脚本编码或引擎命令不兼容。对着M2红字一行一行对,比换客户端有用得多。
别急着重下服务端。先按上面把两个触发点分别注释测试,定位到具体行再改,原端基本都能修好。

