这两个现象不是客户端卡,是服务端脚本在触发那一瞬间报错,客户端收不到正常回包就直接断开。点裁决能典当、点骨玉就退,说明问题固定在“赎回骨玉”这条分支;猪四雕像一点就退,说明那个坐标绑了地图事件或隐藏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 当票xx 1
#ACT
TAKE 当票xx 1
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。格式是:
地图号 X Y 触发标识 触发条件 触发机率 事件类型 脚本标签
找到猪四地图号对应的雕像坐标,看它 CALL 的是哪个 QFunction 或 QuestDiary 里的标签。比如:
12 123 456 -1:* 0 1:@StatueEvent
然后去 QFunction-0.txt 或 QuestDiary 对应文件里找 @StatueEvent 这段。
2. 常见崩点
@StatueEvent 里 GIVE 了数据库不存在的物品
调用了 MAPMOVE 到一个 MapInfo.txt 里没有的地图号
用了当前引擎不认的命令(比如把 GEE 的 SendCenterMsg 塞进老 GOM/HERO)
脚本里 GOTO 跳回自己,没退出条件,死循环拖垮 M2
3. 快速验证
把 @StatueEvent 这段整个注释掉,只留一句:
[@StatueEvent]
#ACT
SENDMSG 6 雕像触发正常
重载脚本(@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 红字一行一行对,比换客户端有用得多。
别急着重下服务端。先按上面把两个触发点分别注释测试,定位到具体行再改,原端基本都能修好。

