当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

OpenMir2开源传奇服务器从环境准备到单机进游戏完整实战搭建

热度:
OpenMir2是用.NET技术栈重写的热血传奇1.76服务端,不再依赖DBC2000/HeroDB,改用MySQL(或MongoDB)做账号与角色存储,架构拆成DBSrv、LoginSrv、GameSrv(即传统M2Server)、LoginGate、SelGate、GameGate多个独立进程,单机本机跑通只需锁127.0.0.1。下面按真部署顺序拆,命令可直接抄。

一、系统与环境准备
•Windows10/11或Linux(Ubuntu20.04+)

•.NET6.0/.NET8SDK(运行时不够,必须装SDK才能编译)

-MySQL5.7/8.0社区版,启用InnoDB,3306端口通
•Git、VisualStudio2022/Rider/VSCode

•客户端:热血传奇1.76纯净版(官方13周年也行),装到纯英文路径如D:\Legend176

-VC++运行库合集、DirectX9补装,防客户端黑屏

二、拉源码与目录结构
gitclonehttps://gitcode.com/gh_mirrors/op/OpenMir2
cdOpenMir2

推荐部署目录布局(对照传统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。

三、还原依赖与编译
VisualStudio打开OpenMir2.sln→右键解决方案“还原NuGet包”→生成整解决方案;
命令行等价:
dotnetrestoreOpenMir2.sln
dotnetbuildOpenMir2.sln-cRelease

编译产物在各src/xxx/bin/Release/net6.0/下,得到DBSrv、LoginSrv、GameSrv、LoginGate、SelGate、GameGate六个可执行体。

四、MySQL初始化(关键一步)
mysql-uroot-p
CREATEDATABASEmir2DEFAULTCHARSETutf8mb4;
USEmir2;
SOURCEsql/mir2_db.sql;
SOURCEsql/mir2_account.sql;
SOURCEsql/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,端口默认:
•LoginGate7000

•SelGate7100

-GameGate7200
•DBSrv内部5100/5101/5102,LoginSrv5500,GameSrv5600

六、启动顺序(严格依赖,错序必崩)
每个服务开独立终端/窗口:
dotnetsrc/DBSrv/bin/Release/net6.0/DBSrv.dll
dotnetsrc/LoginSrv/bin/Release/net6.0/LoginSrv.dll
dotnetsrc/GameSrv/bin/Release/net6.0/GameSrv.dll
dotnetsrc/LoginGate/bin/Release/net6.0/LoginGate.dll
dotnetsrc/SelGate/bin/Release/net6.0/SelGate.dll
dotnetsrc/GameGate/bin/Release/net6.0/GameGate.dll

看到“Databaseservicestarted”/“Gameserverinitialized”/“GameGatelisteningon7000”即正常。

七、客户端与登录器对接
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|findstr7000杀掉重起

-GameSrv起不来:Envir脚本有语法错,看控制台行号;MapDir/GuildDir路径权限不足
•Linux部署:用dotnetxxx.dll&或systemd托管,防火墙放行7000/7100/7200/3306

十、单机与外网切换
纯本机玩:所有IP写127.0.0.1,防火墙可全关。换局域网/公网:把各appsettings及登录器列表改成机器IP,路由器做7000/7100/7200TCP映射,MySQL若远程需开root白名单或新建限定IP账号。OpenMir2因逻辑层与网关分离,外网只需暴露三个Gate,DBSrv/GameSrv放内网即可。
[顶部]