游戏开发-如何搭建一个WOW魔兽世界后端服务器
一、魔兽世界后端搭建前置知识
1. lua程序设计
- lua基础
- lua错误处理
- lua编译与预编译
- lua模块与包
- 元表与元方法
- 环境
- lua/c接口编程
2. C++新特性
- 智能指针 shared_ptr, unique_ptr
- 函数对象以及闭包
- 右值引用
- 原子操作与锁: atomic、mutex、 condition_variable
- 多线程环境队列设计: MPSCQueue、ProducerConsumerQueue
3.C++设计模式
- 单例模式
- 工厂模式
- 模板模式
- 访问者模式
- 责任链模式
二、TrinityCore
1.CMake项目构建
1.1 CMake的使用
- 什么是CMake , CMake 的工作流程
- CMakeLists.txt的编写规则
- 静态库生成以及链接
- 动态库生成以及链接
- 嵌套CMake
1.2 Windows和Linux下编
- 译调试环境搭建
- cmake和graphviz生成目标依赖图
- linux vscode编程环境搭建
- cmake和clangd实现精准跳转
- C/C++插件实现调试
- vs2019 windows下编译调试搭建
2.数据库模块
2.1 连接池设计概要
- 什么是连接池
- 为什么需要复用连接
- 为什么固定连接数
- 主要应用场景
2.2 同步连接池实现
- 同步连接池的线程模型
- 同步连接池接口封装
- 同步连接池接口使用
- 同步连接池应用场景
2.3 异步连接池实现
- 异步连接池的线程模型
- 异步连接池接[口封装
- 异步连接池接口使用
- 异步连接池应用场景
2.4 事务处理
- 什么是事务
- 什么情况下讨论事务
- 事务操作
- TrinityCore 中事务处理封装
- TrinityCore 中事务处理案例
2.5 数据库模块实践
- 剥离可复用数据库模块
- 应用同步连接池案例
- 异步连接池-单SQL语句的使用
- 异步连接池-多SQL语句chain式应用
- 异步连接池多SQL语句holder式应用
- 异步连接池多SQL语句transaction式应用
3.日志模块
3.1 日志模块概要
- 日志模块的作用
- 日志模式核心抽象: logger和appender
- logger规则:继承关系、日志级别、以圾appender列表
- appender如何定义日志打印目的地
3.2 日志模块实现
- 日志模块单例构建
- 采用宏定义定制日志使用接口
- 如何扩展appender
- appender中设计模式模板模式
- 同步日志方式实现
- 异步日志方式实现
- 异步日志线程模型
3.3 日志模块实践
- 剥离可复用日志模块
- 为什么推荐使用异步日志
- 异步日志日志安全分析及测试
4.网络模块
4.1 阻塞io网络模型编程
- 什么是阻塞io网络模型
- 阻塞io解决连接建立的问题
- 阻塞io解决连接断开的问题
- 阻塞io解决数据接收的问题
- 阻塞io解决数据发送的问题
- 阻塞io解决网络问题的弊端
4.2 reactor网络模型编程
- 什么是reactor ?
- reactor构成部分
- reactor解决连接建立的问题
- reactor解决连接断开的问题
- reactor解决数据接收的问题
- reactor解决数据发送的问题
- reactor解决网络问题的特征: io同步, 事件异步
4.3 windows iocp网络编程
- 什么是完成端口
- 重叠io的作用
- iocp解决连接建立的问题
- iocp解决连接断开的问题
- iocp解决数据接收的问题
- iocp解决数据发送的问题
- iocp编程步骤
- iocp与reactor在编程处理io时的差异
4.4 boost.asio网络编程
- boostasio跨平台网络库
- cmake如何在项目中弓入boost.asio
- boost.asio中核心命名空间
- boost.asio中核心对象: io_ context, socket、 endpoint
- boost.asio中异步io接口
- asio解决连接建立的问题
- asio解决连接断开的问题
- asio解决数据接收的问题
- asio解决数据发送的问题
4.5 网络缓冲区设计
- 为什么需要在用户层实现网络缓冲区
- 读缓冲区的工作原理
- 写缓冲区的工作原理
- 手撕缓冲区实现
4.6 网络模块实践
- 剥离可复用网络模块
- AsyncAcceptor职责与实现
- NetworkThread职责与实现
- Socket职责与实现
- 手撕多线程模式下网络模块的应用
5.地图模块
5.1 地图模块概要
- 哪些功能模块需要用到地图模块
- 地图模块的功能构成
- 地图对象抽象: map、area、 grid、 cell
- 网络数据驱动地图模块
- 定时更新驱动地图模块
5.2 地图模块AOI核心算法
- AOI有哪些实现方式
- AOI静态数据工具生成
- AOI静态数据数据划分
- AOI静态数据组织方式
- AOI动态数据组织方式
- AOI动态数据驱动方式
- AOI地图数据加载
- grid网格状态机以及状态转换
- AOI地图数据卸载
- 采用访问者模式实现地图数据与算法的隔离
5.3 AABB算法实现碰撞检测
- 轴对称边界盒算法AABB算法
- TrinityCore中AABB算法实现
- AABB算法优化
- 碰撞检测接C口封装以及应用
5.4 A*寻路算法
- A*寻路算法概述
- recast-detour开源库
- recast根据模型生成导航数据
- detour利用导航网格做寻路
- 寻路接口封装以及应用
6.战斗模块
6.1 技能设计
- 技能设计概述
- 技能数据库表设计(配置)
- 技能触发:距离、冷却时间、消耗等
- 技能效果:伤害计算、增益效果等
- 技能释放流程
6.2 AI设计
- AI设计概述
- 基于行为树的AI设计
- AI类继承层次关系;
- AI攻击目标选择
- AI攻击方式选择
- AI移动方式选择
- AI基于事件的驱动机制
6.3 怪物管理
- 怪物数据库设计(配置)-属性和行为
- 怪物刷新规则设计-时间间隔以及范围
- 怪物属性、技能、掉落、AI
6.4 战场副本设计
- 创建和咖载battlegrounds场景地图数据
- battlegrounds规则实现
- battlegrounds队伍匹配、队伍平衡以及角色分配
- battlegrounds奖励系统和排名机制
7.mmorpg核心功能与玩法
7.1 任务系统设计
- 任务系统数据库设计(配置)
- 玩家数据库状态存储
- 任务类型设计
- 任务触发机制
7.2 背包设计
- 背包数据结构设计以及数据库表设计
- 背包容量控制
- 背包格子管理
- 背包交互功能实现
7.3 工会系统设计
- 数据库表结构设计
- 工会创建逻辑实现
- 工会成员管理
- 工会资源管理及分配机制
- 工会活动与事件
- 工会排名实现
- 工会权限控制
三、项目实际展示效果体验(【24届校招】c++选手上岸资料包)
1.客户端下载
魔兽3.3.5a(Windows PC版本)
2.项目详细学习路线
3.游戏体验
- 下载游戏客户端
- 在本网页右上角,注册账号
- zip 解压客户端,运行批处理程序,进入游戏