OpenMir2 是用 .NET 技术栈重写的热血传奇 1.76 服务端,不再依赖 DBC2000 / HeroDB,改用 MySQL(或 MongoDB)做账号与角色存储,架构拆成 DBSrv、LoginSrv、GameSrv(即传统 M2Server)、LoginGate、SelGate、GameGate 多个独立进程,单机本机跑通只需锁 127.0.0.1。下面按真部署顺序拆,命令可直接抄。
一、系统与环境准备
• Windows 10/11 或 Linux(Ubuntu 20.04+)
• .NET 6.0 / .NET 8 SDK(运行时不够,必须装 SDK 才能编译)
- MySQL 5.7 / 8.0 社区版,启用 InnoDB,3306 端口通
• Git、Visual Studio 2022 / Rider / VS Code
• 客户端:热血传奇 1.76 纯净版(官方 13 周年也行),装到纯英文路径如 D:\Legend176
- VC++ 运行库合集、DirectX9 补装,防客户端黑屏
二、拉源码与目录结构
git clone https://gitcode.com/gh_mirrors/op/OpenMir2
cd OpenMir2
推荐部署目录布局(对照传统 MirServer):
MirServer/
├── DBServer/ (DBSrv.exe + appsettings.json)
├── LoginSrv/
├── LoginGate/
├── SelGate/
├── Mir200/ (GameSrv.exe + Envir/ + Map/ + Scripts/)
└── RunGate/ (GameGate.exe)
基础游戏数据(地图、NPC、物品、脚本)从 https://github.com/mirbeta/MirServer 拉,解压进 Mir200/Envir/ 再起 GameSrv。
三、还原依赖与编译
Visual Studio 打开 OpenMir2.sln → 右键解决方案“还原 NuGet 包” → 生成整解决方案;
命令行等价:
dotnet restore OpenMir2.sln
dotnet build OpenMir2.sln -c Release
编译产物在各 src/xxx/bin/Release/net6.0/ 下,得到 DBSrv、LoginSrv、GameSrv、LoginGate、SelGate、GameGate 六个可执行体。
四、MySQL 初始化(关键一步)
mysql -u root -p
CREATE DATABASE mir2 DEFAULT CHARSET utf8mb4;
USE mir2;
SOURCE sql/mir2_db.sql;
SOURCE sql/mir2_account.sql;
SOURCE sql/mir2_data.sql;
三脚本顺序不能乱:先结构、再账号、再物品怪物基础数据。
五、改连接字符串
编辑 src/DBSrv/appsettings.json:
{
"ConnectionStrings": {
"Default": "server=localhost;port=3306;database=mir2;uid=root;pwd=你的密码"
},
"StorageType": "MySQL"
}
LoginSrv / GameSrv / 各 Gate 的 appsettings.json 里上游地址全锁 127.0.0.1,端口默认:
• LoginGate 7000
• SelGate 7100
- GameGate 7200
• DBSrv 内部 5100/5101/5102,LoginSrv 5500,GameSrv 5600
六、启动顺序(严格依赖,错序必崩)
每个服务开独立终端 / 窗口:
dotnet src/DBSrv/bin/Release/net6.0/DBSrv.dll
dotnet src/LoginSrv/bin/Release/net6.0/LoginSrv.dll
dotnet src/GameSrv/bin/Release/net6.0/GameSrv.dll
dotnet src/LoginGate/bin/Release/net6.0/LoginGate.dll
dotnet src/SelGate/bin/Release/net6.0/SelGate.dll
dotnet src/GameGate/bin/Release/net6.0/GameGate.dll
看到 “Database service started” / “Game server initialized” / “GameGate listening on 7000” 即正常。
七、客户端与登录器对接
1.76 原版客户端根目录改 Mir2.ini:
ServerAddr=127.0.0.1
ServerPort=7000
或用列表文件 ServerList.txt:
OpenMir2单机|127.0.0.1|7000|0|1.76|0|0
配套登录器(开源端可用 mirbeta/MirClient 编译,或拿 1.76 通用登录器配本地列表)指向 127.0.0.1:7000。首次进游戏账号在登录界面直接注册,写库走 DBSrv → MySQL。
八、基础参数与 GM 调整
改 src/GameSrv/appsettings.json 或 Mir200/Envir 下脚本:
• 经验倍率 ExpRate
• 爆率 ItemDrop.ini
- 地图 Maps/*.map 引用
• NPC 脚本 Scripts/ 目录
• 管理员权限:角色名写进 GameSrv 管理员列表,游戏内 @level / @make 调数据
九、高频故障排查
- 启动报无法连库:MySQL 没起、appsettings 密码错、mir2 库没建、3306 被防火墙拦
• 客户端卡登录界面:LoginGate / SelGate 没起、Mir2.ini 端口写错、列表 IP 非 127.0.0.1
- 进图黑屏:Mir200/Envir、Map、Data 补丁没放全,客户端版本非 1.76
• 端口冲突 10048:上轮进程没退干净,netstat -ano | findstr 7000 杀掉重起
- GameSrv 起不来:Envir 脚本有语法错,看控制台行号;MapDir / GuildDir 路径权限不足
• Linux 部署:用 dotnet xxx.dll & 或 systemd 托管,防火墙放行 7000/7100/7200/3306
十、单机与外网切换
纯本机玩:所有 IP 写 127.0.0.1,防火墙可全关。换局域网 / 公网:把各 appsettings 及登录器列表改成机器 IP,路由器做 7000/7100/7200 TCP 映射,MySQL 若远程需开 root 白名单或新建限定 IP 账号。OpenMir2 因逻辑层与网关分离,外网只需暴露三个 Gate,DBSrv / GameSrv 放内网即可。
OpenMir2开源传奇服务器从环境准备到单机进游戏完整实战搭建
来源:
作者:
点击:

