OpenMir2是基于C#开发的开源传奇2游戏服务器框架,项目源自对网络泄露Delphi代码的翻译与重构,托管在GitHub公共存储库。这套框架采用现代分布式架构设计,将传统单体服务拆解为多个独立模块,支持1.10至1.76版本的核心游戏功能。下面从环境准备、源码编译、数据库配置到服务启动,按操作顺序拆解整个部署流程。
###环境准备与源码获取
部署OpenMir2之前,需要在本地搭建开发环境。推荐使用VisualStudio2022或VisualStudioCode作为集成开发环境,安装.NETCoreSDK6.0及以上版本,数据库选用MySQL8.0,版本控制工具使用Git。
通过Git将项目源码克隆到本地工作目录:
```
gitclonehttps://github.com/mirbeta/OpenMir2.git
cdOpenMir2
```
项目采用模块化架构,主要目录结构包含src/目录存放核心服务代码,sql/目录存放数据库初始化脚本,OpenMir2.sln为VisualStudio解决方案文件。使用VisualStudio打开解决方案文件后,系统会自动还原NuGet依赖包,也可通过命令行手动执行还原与编译:
```
dotnetrestoreOpenMir2.sln
dotnetbuildOpenMir2.sln-cRelease
```
编译成功后,各服务模块的可执行文件生成在对应项目的bin/Release/net6.0/目录下。
###数据库配置与初始化
OpenMir2采用分层存储设计,通过DBSrv模块作为数据访问层,使用ADO.NET连接MySQL数据库处理所有数据持久化操作。数据库配置分为两个步骤:执行初始化脚本和修改连接参数。
进入项目根目录下的sql文件夹,按顺序执行三个SQL脚本:
```
mysql-uroot-p
CREATEDATABASEmir2;
USEmir2;
SOURCEsql/mir2_db.sql;--创建数据库结构
SOURCEsql/mir2_account.sql;--初始化账号系统
SOURCEsql/mir2_data.sql;--导入游戏基础数据
```
脚本执行顺序不能颠倒,mir2_db.sql定义玩家数据、物品信息等核心表结构,mir2_account.sql创建默认管理员账号和测试账号,mir2_data.sql导入物品、怪物等基础游戏数据。
数据库脚本执行完成后,编辑src/DBSrv/appsettings.json文件,配置数据库连接字符串:
```json
{
"ConnectionStrings":{
"Default":"server=localhost;port=3306;database=mir2;uid=root;pwd=yourpassword;charset=utf8mb4;AllowUserVariables=True"
}
"DbType":"MySql"
"PoolSize":20
"ConnectTimeout":30
}
```
server和port参数根据实际数据库地址调整,uid和pwd替换为正确的数据库用户名和密码。添加AllowUserVariables=True参数可避免存储过程中变量使用问题。
###服务模块启动顺序
OpenMir2采用微服务架构,各服务模块独立运行并通过内部网络通信协同工作。服务之间存在依赖关系,必须按照正确的顺序依次启动,否则客户端无法正常连接。
**启动顺序如下**:
1.**DBSrv(数据库服务)**:负责玩家数据、游戏状态的持久化存储与读取。这是最底层的服务,必须先启动。
2.**LoginSrv(登录认证服务)**:处理账号注册、登录验证、服务器选择等认证功能。
3.**GameSrv(游戏逻辑服务)**:游戏核心引擎,负责战斗计算、技能释放、玩家移动、NPC交互等核心逻辑。
4.**GameGate(游戏网关)**:负责将玩家数据转发至游戏引擎,玩家交互的数据都经过此服务。
5.**SelGate(角色选择网关)**:负责角色查询、创建、删除等操作,由DBSrv处理。此服务未启动时,客户端登录后无法获取角色数据。
6.**LoginGate(登录网关)**:负责将登录数据转发至LoginSrv处理。此服务未启动时,客户端无法连接到游戏。
在独立终端窗口中启动各服务,以确认每个模块的运行状态:
```
#启动数据库服务
cdsrc/DBSrv/bin/Release/net6.0
./DBSrv
#控制台显示"Databaseconnectionestablished"表示成功
#启动登录服务
cdsrc/LoginSrv/bin/Release/net6.0
./LoginSrv
#启动游戏逻辑服务
cdsrc/GameSrv/bin/Release/net6.0
./GameSrv
#依次启动三个网关
cdsrc/GameGate/bin/Release/net6.0
./GameGate
cdsrc/SelGate/bin/Release/net6.0
./SelGate
cdsrc/LoginGate/bin/Release/net6.0
./LoginGate
```
所有服务启动成功后,客户端即可通过配置的IP和端口连接服务器进行测试。
###游戏参数调整
部署完成后,可以通过修改配置文件调整游戏规则,实现个性化定制。核心参数集中在src/GameSrv/appsettings.json文件中:
-**经验倍率(ExpRate)**:调整玩家打怪获得的经验倍数
-**物品掉落概率(DropRate)**:调整怪物掉落物品的概率
-**最大在线人数(MaxOnline)**:限制服务器同时在线玩家数量
-**PK惩罚开关(PKPenalty)**:控制是否开启PK惩罚机制
-**多开限制(AllowMultiClient)**:控制是否允许同一设备登录多个账号
怪物刷新配置和地图设置分别在对应的配置目录中调整。OpenMir2还支持插件机制,可以在src/Modules/目录下创建新的模块项目,实现功能扩展。
###常见问题排查
服务启动失败时,首先检查数据库连接配置是否正确,确认端口未被占用。客户端连接不上服务器时,验证LoginGate和GameGate服务状态,检查防火墙设置是否拦截了服务端口。编译报错时,确认.NETCoreSDK版本符合6.0及以上要求,并确保NuGet包已完整还原。
###环境准备与源码获取
部署OpenMir2之前,需要在本地搭建开发环境。推荐使用VisualStudio2022或VisualStudioCode作为集成开发环境,安装.NETCoreSDK6.0及以上版本,数据库选用MySQL8.0,版本控制工具使用Git。
通过Git将项目源码克隆到本地工作目录:
```
gitclonehttps://github.com/mirbeta/OpenMir2.git
cdOpenMir2
```
项目采用模块化架构,主要目录结构包含src/目录存放核心服务代码,sql/目录存放数据库初始化脚本,OpenMir2.sln为VisualStudio解决方案文件。使用VisualStudio打开解决方案文件后,系统会自动还原NuGet依赖包,也可通过命令行手动执行还原与编译:
```
dotnetrestoreOpenMir2.sln
dotnetbuildOpenMir2.sln-cRelease
```
编译成功后,各服务模块的可执行文件生成在对应项目的bin/Release/net6.0/目录下。
###数据库配置与初始化
OpenMir2采用分层存储设计,通过DBSrv模块作为数据访问层,使用ADO.NET连接MySQL数据库处理所有数据持久化操作。数据库配置分为两个步骤:执行初始化脚本和修改连接参数。
进入项目根目录下的sql文件夹,按顺序执行三个SQL脚本:
```
mysql-uroot-p
CREATEDATABASEmir2;
USEmir2;
SOURCEsql/mir2_db.sql;--创建数据库结构
SOURCEsql/mir2_account.sql;--初始化账号系统
SOURCEsql/mir2_data.sql;--导入游戏基础数据
```
脚本执行顺序不能颠倒,mir2_db.sql定义玩家数据、物品信息等核心表结构,mir2_account.sql创建默认管理员账号和测试账号,mir2_data.sql导入物品、怪物等基础游戏数据。
数据库脚本执行完成后,编辑src/DBSrv/appsettings.json文件,配置数据库连接字符串:
```json
{
"ConnectionStrings":{
"Default":"server=localhost;port=3306;database=mir2;uid=root;pwd=yourpassword;charset=utf8mb4;AllowUserVariables=True"
}
"DbType":"MySql"
"PoolSize":20
"ConnectTimeout":30
}
```
server和port参数根据实际数据库地址调整,uid和pwd替换为正确的数据库用户名和密码。添加AllowUserVariables=True参数可避免存储过程中变量使用问题。
###服务模块启动顺序
OpenMir2采用微服务架构,各服务模块独立运行并通过内部网络通信协同工作。服务之间存在依赖关系,必须按照正确的顺序依次启动,否则客户端无法正常连接。
**启动顺序如下**:
1.**DBSrv(数据库服务)**:负责玩家数据、游戏状态的持久化存储与读取。这是最底层的服务,必须先启动。
2.**LoginSrv(登录认证服务)**:处理账号注册、登录验证、服务器选择等认证功能。
3.**GameSrv(游戏逻辑服务)**:游戏核心引擎,负责战斗计算、技能释放、玩家移动、NPC交互等核心逻辑。
4.**GameGate(游戏网关)**:负责将玩家数据转发至游戏引擎,玩家交互的数据都经过此服务。
5.**SelGate(角色选择网关)**:负责角色查询、创建、删除等操作,由DBSrv处理。此服务未启动时,客户端登录后无法获取角色数据。
6.**LoginGate(登录网关)**:负责将登录数据转发至LoginSrv处理。此服务未启动时,客户端无法连接到游戏。
在独立终端窗口中启动各服务,以确认每个模块的运行状态:
```
#启动数据库服务
cdsrc/DBSrv/bin/Release/net6.0
./DBSrv
#控制台显示"Databaseconnectionestablished"表示成功
#启动登录服务
cdsrc/LoginSrv/bin/Release/net6.0
./LoginSrv
#启动游戏逻辑服务
cdsrc/GameSrv/bin/Release/net6.0
./GameSrv
#依次启动三个网关
cdsrc/GameGate/bin/Release/net6.0
./GameGate
cdsrc/SelGate/bin/Release/net6.0
./SelGate
cdsrc/LoginGate/bin/Release/net6.0
./LoginGate
```
所有服务启动成功后,客户端即可通过配置的IP和端口连接服务器进行测试。
###游戏参数调整
部署完成后,可以通过修改配置文件调整游戏规则,实现个性化定制。核心参数集中在src/GameSrv/appsettings.json文件中:
-**经验倍率(ExpRate)**:调整玩家打怪获得的经验倍数
-**物品掉落概率(DropRate)**:调整怪物掉落物品的概率
-**最大在线人数(MaxOnline)**:限制服务器同时在线玩家数量
-**PK惩罚开关(PKPenalty)**:控制是否开启PK惩罚机制
-**多开限制(AllowMultiClient)**:控制是否允许同一设备登录多个账号
怪物刷新配置和地图设置分别在对应的配置目录中调整。OpenMir2还支持插件机制,可以在src/Modules/目录下创建新的模块项目,实现功能扩展。
###常见问题排查
服务启动失败时,首先检查数据库连接配置是否正确,确认端口未被占用。客户端连接不上服务器时,验证LoginGate和GameGate服务状态,检查防火墙设置是否拦截了服务端口。编译报错时,确认.NETCoreSDK版本符合6.0及以上要求,并确保NuGet包已完整还原。

