传奇外网架设疑难杂症全解析:引擎选择到脚本调试实战链路

来源: 作者: 点击:
一、引擎选型与版本边界判定
HERO/M2 系(HeroM2、BLUE、LEGEND、3K)走 DBC2000 + HeroDB,老版本脚本兼容好、插件多,适合复古单职业、合击;GOM/GEE 系内置数据库环境或走 SQLite/MySQL,原生吃 PAK/Resources 分层补丁、微端机制完整,适合新界面、单文件大补丁、外网分发;GOM 与 GEE 的 Pak.txt、ResInfo.txt、登录器配置器格式不互通,版本包别混用,混用直接黑屏或 M2 报非法资源。云服务器优先选 Windows Server 2012R2 以上,家庭宽带需确认 WAN 口是否为真公网 IP(ip138 查到的 IP 必须等于路由器 WAN 口,10.x / 100.64.x 开头是大内网,必须找运营商换公网或走穿透)。

二、目录规范与 DBC/HeroDB 绑定
服务端解压到磁盘根目录全英文路径(D:\Mirserver),禁中文、禁空格、禁过长嵌套。HERO 系装 DBC2000 → 控制面板 BDE Administrator → Object → New → 别名 HeroDB(必须大写此拼写)→ 路径指 D:\Mirserver\Mud2\DB → 保存。路径错、别名拼错、PDOXUSRS.NET 被占用都会让 M2 启动报 Database Error。GOM/GEE 新版一键端大多已集成库环境,但仍要核对 Mir200\Mud2\DB 是否存在 StdItems.db、Magic.db、Monster.db,缺失则角色/物品/怪物全空。

三、公网 IP、动态 IP 与网关绑定规则
引擎配置向导里:外网 IP 填公网 IP;若是家庭动态 IP 必须勾“动态 IP 模式”;网关绑定地址填 0.0.0.0(不允许只绑内网,否则外网握手失败)。BLUE/HERO 老引擎改 !Setup.txt、LoginGate.ini、!ServerInfo.txt、DBServer\!AddrTable.txt,格式:
测试一区 192.168.1.100 113.x.x.x:7100
!ServerInfo.txt:127.0.0.1 192.168.1.100 113.x.x.x:7100
漏改 AddrTable 典型症状:能出登录器、输账号后卡“正在进入游戏”或直接回登录界面。

四、端口矩阵与映射/安全组放行
核心端口清单(必须内外一致):
• 7000 LoginGate 登录端口

• 7100 SelGate/角色选择网关

• 7200/7201/7202 GameGate 游戏网关

- 8000/8008 微端网关与 UpdateServer
• 443/80 列表文件 HTTP 托管(可选)

路由器 → 虚拟服务器/端口转发 → 外部端口=内部端口=上述值,内部 IP 填服务端内网 IP,协议 TCP(微端可补 UDP)。云服务器还要在控制台安全组加入站规则 7000-7300、8000-8010 放行 0.0.0.0/0,只开系统防火墙不放安全组一样不通。CMD 用 netstat -ano | findstr :7000 查占用,PID 杀重复 M2/网关进程。

五、启动顺序与进程联动
严格顺序:DBC2000 服务 → LoginGate → SelGate → GameGate → DBServer → LoginSrv → M2Server →(外网带微端)UpdateServer → MirUpdateGate。M2 日志无红色报错、GameGate 显示“连接到 M2 成功”、UpdateGate 亮灯才算链路通。先起 M2 后起网关会触发 IP 不匹配、角色网关读不到在线列表。

六、微端与 Pak.txt 路径对齐(外网黑屏头号原因)
UpdateServer 基本设置:客户端路径 = 配套客户端根目录(E:\Legend of mir);Resources 目录名 = 补丁文件夹名(Resources / Patch),必须和登录器配置器、Pak.txt 内写法完全一致。Pak.txt 里所有本地路径全文替换成客户端绝对路径(如 E:\Legend of mir\Data),拷贝进 UpdateServer 目录;明文密码填版本 PAK 密码,密文自动生成,登录器配置器里更新密码必须同值。Resources 分层结构:客户端根\Resources\Data\*.pak 对应服务端补丁,缺一层就黑屏。微端网关配置:微端地址填 UpdateServer 所在 IP,端口填 UpdateServer 端口,线路列表必须含“默认”。

七、登录器与列表文件发布
列表文件(123.txt / ServerList.txt)格式:
测试一区 113.x.x.x 7000 0
或 GEE 格式:服务器名113.x.x.x:7000
113.x.x.x:8000
上传到可公网访问的 HTTP 空间,浏览器直接打开能看到文本;登录器配置器填列表 URL,勾纯微端模式时删掉“客户端搜索条件”里的检测目录/文件。生成 GameLogin.exe 给玩家,玩家本地客户端版本必须与服务端匹配(如 1.76 配 16 周年客户端),否则进图花屏。

八、脚本调试与 M2 报错定位
进游戏后 NPC 不对话、任务不触发、拾取无反应 → 看 M2 控制台红色 Script Error,定位 Mir200\Envir\MapQuest_def\ 或 QuestDiary\ 对应行号:
- “Undefined variable” → 变量未声明(A..Z / G.. 前缀用错)
• “Script dead loop” → 死循环(#IF 后无 #ACT/#ELSEACT,或 WHILE 无限)

- “Cannot find label @xxx” → [@xxx] 标签拼错或脚本未重载
• “Item not found” → CheckItem/GiveItem 物品名与 StdItems.DB 不一致

改完脚本点 M2 → 控制 → 重新加载 → 重新加载脚本,不必重启全服。MapInfo.txt 地图号与 Mir200\Map\*.map 文件名不一致会导致进图直接掉线回城。

九、外网典型故障速查表
- 登录器列表空白:列表 URL 不通、HTTP 头非 text/plain、域名 DNS 未生效
• 输账号回登录界面:AddrTable.txt / !ServerInfo.txt 未填公网 IP、7100 未映射

- 进游戏黑屏能跑:Resources 目录名错、Pak.txt 路径未改、PAK 密码错、微端未起
• 卡“正在连接服务器”:7000 未放行、网关绑了 127.0.0.1、云安全组没开

• M2 闪退:VC++ 运行库缺、HeroDB 指向错、Mir200 授权文件缺失、路径含中文

- 外网能进内网不能进或反之:网关绑定 0.0.0.0 没勾、动态 IP 模式未开导致回包发向内网
• 攻城/沙城逻辑错:CastleMapList.txt 地图号与 MapInfo 不一致、SabukW.txt 未重载

- 跨运营商卡顿:单线宽带无 BGP,换云 BGP 机房或让玩家走加速节点

十、家用动态 IP 与 DDNS 处理
光猫重启后公网 IP 变化,登录器列表写死 IP 次日失效。处理方式:路由器挂 DDNS(花生壳/阿里云解析),登录器列表填域名;或引擎勾动态 IP 模式 + 列表地址走 HTTP 动态生成;纯好友联机可用 ZeroTier / 内网穿透替代端口映射,但延迟随节点波动。DMZ 主机方案仅限临时测试,长期开着等于裸奔全部端口给公网。

整套外网链路串起来就是:选引擎 → 根目录英文 + HeroDB/DBC → 配公网 IP 与 0.0.0.0 绑定 → 映射 7000/7100/7200/8000 并放安全组 → 按顺序起网关与 M2 → UpdateServer 载 Pak.txt + Resources → 登录器列表走 HTTP → 玩家端版本匹配。任意一层 IP、端口、路径、密码四要素不一致,表现层就是黑屏、回登录、卡连接三种表象,反查按网关日志 → M2 日志 → Pak.txt → 列表文件顺序走一遍即可定位。