MaNGOS(Massive Network Game Object Server)是一个开源的魔兽世界服务器模拟器项目,主要用于搭建和运行私服或单机版魔兽世界服务器。了解 MaNGOS 的历史背景,有助于理解其发展脉络及社区生态。
MaNGOS 大芒果历史背景
1. 项目起源
- MaNGOS 项目最初于2005年由一群热爱魔兽世界的开发者发起,目的是创建一个完全开源的服务器模拟器,使玩家能够在没有暴雪官方服务器的情况下运行魔兽世界。
- “MaNGOS”名称寓意为“大芒果”,是 Massive Network Game Object Server 的缩写,强调其网络游戏对象管理功能。
2. 发展历程
- 早期版本:以模仿魔兽世界经典(Classic)版本为主,提供基础的游戏逻辑和网络通讯支持。
- 内容扩展:随着游戏版本更新,MaNGOS项目不断完善,对应魔兽世界的多个资料片内容陆续加入,比如燃烧的远征(TBC)、巫妖王之怒(WotLK)等。
- 分支出现:由于项目规模扩大,出现了多个分支,如 TrinityCore(专注WotLK内容)、CMaNGOS(经典版本支持)等,社区活跃且贡献持续。
3. 作用与意义
- MaNGOS 为研究魔兽世界服务器架构、游戏机制提供了良好的实验平台。
- 支持单机模式,方便开发者学习服务器端开发与网络游戏架构。
- 促进开源游戏服务器的发展,形成了庞大的开发者社区。
4. 技术栈
- 主要使用 C++ 编写,采用 MySQL 作为数据库存储游戏数据。
- 实现了复杂的游戏逻辑,包括副本、任务、战斗系统、NPC行为等。
- 支持多平台部署,包括 Windows 和 Linux。
如果你需要,我可以帮你写接下来 MaNGOS 环境搭建教程、源码结构解析、常见问题处理、单机运行配置等系列内容。告诉我!
MaNGOS单机学习系列续篇来了!下面是【MaNGOS环境搭建及源码结构解析】的基础介绍,帮你快速入门。
MaNGOS环境搭建教程(基础版)
1. 环境准备
- 操作系统:推荐使用Linux(Ubuntu 20.04+),也支持Windows
- 依赖软件:
- Git
- CMake(3.16+)
- GCC / Clang 编译器
- MySQL 5.7+ 或 MariaDB
- Boost库
- OpenSSL
- 其他如zlib等依赖
2. 获取源码
git clone https://github.com/mangos/mangos.git
cd mangos
3. 编译步骤(以Linux为例)
mkdir build && cd build
cmake ../ -DCMAKE_INSTALL_PREFIX=/usr/local/mangos
make -j$(nproc)
sudo make install
4. 配置数据库
- 安装MySQL/MariaDB服务并启动
- 创建数据库:
CREATE DATABASE mangos;
CREATE DATABASE mangos_auth;
CREATE DATABASE mangos_characters;
- 导入SQL脚本(位于源码目录sql文件夹):
mysql -u root -p mangos < /path/to/sql/base/*.sql
mysql -u root -p mangos_auth < /path/to/sql/auth/*.sql
mysql -u root -p mangos_characters < /path/to/sql/characters/*.sql
5. 修改配置文件
- 修改
mangosd.conf
和authserver.conf
,配置数据库连接等参数 - 配置监听端口、日志等级等
6. 运行服务器
./authserver
./mangosd
MaNGOS源码结构简要解析
mangos/
├── src/ # 核心源码目录
│ ├── game/ # 游戏服务器代码
│ ├── auth/ # 认证服务器代码
│ ├── shared/ # 共享代码和通用工具
│ ├── scripts/ # 游戏内脚本逻辑(任务、NPC行为等)
│ └── ... # 其他模块
├── sql/ # 数据库结构和数据初始化脚本
├── tools/ # 工具程序(地图生成、导出工具等)
├── cmake/ # 构建系统配置
├── docs/ # 文档
└── README.md
- auth/: 处理玩家登录、账号验证、票据管理等。
- game/: 处理游戏逻辑、地图管理、战斗系统、任务和副本。
- shared/: 一些公共库,比如网络、数据库接口、通用数据结构。
- scripts/: Lua或其他脚本,控制游戏内动态事件。
好的!下面给你写一个MaNGOS核心模块的深度剖析示例,重点介绍关键源码文件和它们的职责,以及它们之间的调用关系,帮助你理解服务器内部运作。
MaNGOS核心源码模块深度剖析
1. auth模块(认证服务器)
- 目录:
src/auth/
- 主要文件:
AuthSocket.cpp
:处理客户端认证连接请求,管理握手和验证流程。AccountMgr.cpp
:管理用户账户信息,包括登录、密码验证和权限。RealmList.cpp
:提供服务器列表给客户端,管理多世界连接。
- 工作流程:
- 客户端连接
authserver
,建立TCP连接。 AuthSocket
进行握手,验证客户端。- 验证成功后返回游戏服务器信息,客户端连接游戏服务器。
- 客户端连接
2. game模块(游戏服务器)
- 目录:
src/game/
- 主要文件:
World.cpp
:核心世界管理器,控制游戏主循环,调度事件。Player.cpp
:玩家对象,管理玩家状态、数据、动作。Map.cpp
&MapManager.cpp
:地图系统,处理地图加载、玩家定位、事件触发。Creature.cpp
:NPC和怪物实体管理。Spell.cpp
:技能系统实现,处理施法逻辑和效果。Object.cpp
:游戏中所有对象的基类,包括玩家、NPC、物品等。Battleground.cpp
:战场相关逻辑管理。Database/DBCStores.cpp
:加载游戏数据文件,提供数据支持。
- 工作流程:
- 服务器启动后,
World
开始循环处理玩家请求和游戏事件。 - 玩家通过网络请求操作,调用
Player
对应方法。 - NPC、怪物通过
Creature
管理,参与战斗、AI行为。 - 任务、事件通过脚本系统触发,
Scripts
目录中Lua或C++实现。 - 技能和战斗逻辑由
Spell
模块完成,事件驱动模型。
- 服务器启动后,
3. shared模块(公共组件)
- 目录:
src/shared/
- 主要文件:
Database/DatabaseEnv.cpp
:数据库访问接口封装。Log/Log.cpp
:日志系统。Network/Socket.cpp
:网络通信封装,TCP连接管理。Utilities/Threading.cpp
:多线程辅助,任务队列。WorldPacket.cpp
:客户端和服务器之间数据包封装与解析。
- 作用:
提供跨模块共享的基础设施,确保游戏和认证服务器可以复用网络、数据库、线程池等功能。
4. scripts模块(游戏内逻辑脚本)
- 目录:
src/scripts/
- 主要内容:
- 任务触发条件
- NPC行为脚本
- 事件、成就、怪物AI
- 工作方式:
- 采用C++编写,支持注册脚本接口。
- 动态加载,允许自定义游戏行为和内容扩展。
简单示意图
客户端 <---> authserver (认证) <---> game server (游戏逻辑)
↑
数据库 MySQL
小结
auth
负责安全登录认证game
负责游戏核心玩法和世界模拟shared
封装了通用功能scripts
提供灵活的游戏内容扩展能力
发表回复