单机传奇买东西卡死:脚本死循环与数据库修复

来源: 作者: 点击:
单机传奇一买东西就卡死,本质是脚本逻辑死循环或数据库读写异常。这不是电脑配置问题,而是服务端脚本与数据文件不匹配导致的逻辑阻塞。

一、首要排查:脚本死循环与NPC配置

1. 检查M2报错信息
启动服务端,打开M2Server(Mir200目录下),观察控制台是否有红色报错。若出现“脚本死循环”或“Buy命令错误”,说明NPC脚本逻辑有问题。
- 修复死循环:编辑 Mir200\!Setup.txt,找到 ScriptGotoCountLimit=,将数值从默认的10改为1000或10000,重启M2。此操作放宽脚本循环上限,防止因计数溢出导致的卡死。
- 检查NPC脚本:进入 Mir200\Envir\Market_Def,找到对应的商店NPC文件(如盟重省/药店老板-3.txt)。检查Buy命令后的物品编号是否在数据库中真实存在,若物品ID错误或格式不对(如多写了空格),会导致交易中断。

2. 核对Shop.txt物品列表
打开 Mir200\Envir\Market_Def\Shop.txt,这是所有商店的货源文件。检查卡死的商店条目,确认物品ID没有超出数据库范围,且价格字段(PRICE)不为0或空。错误的物品配置会导致引擎无法完成交易计算。

二、核心修复:数据库与文件完整性

1. 重启DBServer并检查连接
买东西是高频的数据库(DBServer)写操作。如果DBServer进程异常或连接超时,游戏主线程会一直等待响应,导致界面卡死。
- 操作步骤:关闭所有服务端程序,单独运行 DBServer\DBServer.exe,观察是否报错。若闪退,说明数据库配置文件损坏。检查 DBServer\DBConfig.ini 中的 MaxConnect(单机建议设为5)和 TimeOut(建议1000ms),保存后重启。
- 替换数据库文件:若买特定物品(如屠龙、特戒)才卡死,可能是物品数据库损坏。从版本备份中复制 DBServer\FDB\Item.FDB 文件进行覆盖替换。

2. 客户端补丁与资源匹配
“卡死”有时是假象,实为客户端缺少物品素材导致界面渲染崩溃。
- 症状:打开商铺界面卡死、背包透明、物品图标显示为空白。
• 解决:确认使用的是版本配套的客户端(如十周年客户端),并将服务端提供的补丁文件(Data文件夹)完整覆盖到客户端根目录。删除客户端 Config\Cache.ini 强制刷新缓存。

三、进阶排查:脚本逻辑与引擎兼容性

1. 检查QF脚本触发
买东西可能触发了 QFunction-0.txt 中的 [@BuyItem] 段。如果这段脚本里有错误的GOTO跳转或调用了一个不存在的文件(如 #CALL [\回收\买药.txt]),脚本会卡在等待状态。暂时注释掉(行首加英文分号;)相关的触发脚本进行测试。

2. 引擎与插件兼容
GOM引擎若加载了不兼容的插件(如ESP、PG),在处理交易时可能会引发冲突。尝试在M2的“插件管理”中暂时禁用所有插件,或更换为纯净版的GOM引擎(如20221101版)。

四、极速解决流程

1. 修改Setup.txt:将 ScriptGotoCountLimit=10 改为 =10000。
2. 重启DBServer:关闭并重新启动数据库进程,确保其稳定运行。
3. 检查Shop.txt:核对卡死商店的物品ID,删除明显错误的行。
4. 替换客户端:若上述无效,换用纯净的十周年客户端并打上完整补丁。
5. 重载脚本:在M2控制台点击“管理”→“重新加载所有脚本”。

若仅单机测试,最彻底的方案是换一个无BUG的纯净版本重新架设,避免在残缺脚本上耗费时间。