C++游戏后端开发-魔兽世界,MMO,TrinityCore源码拆解-v6.4.7
零声教育 Mark 老师
2024-04-22
零声教育 C++ 游戏后端开发课程 基于魔兽开源后端框架 TrinityCore 的技术拆解课程 TrinityCore CMake 项目构建 TrinityCore 数据库模块 TrinityCore 网络模块 零声服务 1.2 Windows 和 Linux 下编 译调试环境搭建 1.1 CMake 的使用 2.1 连接池设计概要 2.3 异步连接池实现 4.2 reactor 网络模型编程 01. 什么是 CMake,CMake 的工作流程 02. 为什么需要复用连接 03. 为什么固定连接数 04. 主要应用场景 01. 异步连接池的线程模型 02. 异步连接池接口封装 04. 异步连接池应用场景 01. 什么是连接池 03. 异步连接池接口使用 6.1 适宜工程师人群 6.2 授课方式 02. CMakeLists.txt 的编写规则 03. 静态库生成以及链接 04. 动态库生成以及链接 05. 嵌套 CMake 01. cmake 和 graphviz 生成目标依赖图 02. linux vscode 编程环境搭建 03. cmake 和 clangd 实现精准跳转 04. C/C++ 插件实现调试 05. vs2019 windows 下编译调试搭建 2.2 同步连接池实现 01. 同步连接池的线程模型 02. 同步连接池接口封装 03. 同步连接池接口使用 04. 同步连接池应用场景 2.5 数据库模块实践 01. 剥离可复用数据库模块 02. 应用同步连接池案例 03. 异步连接池-单SQL语句的使用 04. 异步连接池-多SQL语句chain式应用 05. 异步连接池-多SQL语句holder式应用 06. 异步连接池-多SQL语句transaction式应用 01. 什么是 reactor? 02. reactor 构成部分 TrinityCore 地图模块 5.1 地图模块概要 01. 哪些功能模块需要用到地图模块 02. 地图模块的功能构成 04. 网络数据驱动地图模块 05. 定时更新驱动地图模块 01. 从事游戏后端岗位开发,但没有时间系统学习的在职工程师 02. 从事嵌入式方向开发,想转入游戏后端开发的在职工程师 03. 从事Qt/MFC等桌面开发的,薪资多年涨幅不大的在职工程师 05. 从事C/C++后台开发,想往游戏服务器方向发展的在职工程师 06. 自己研究学习速度较慢,不能系统构建游戏开发知识体系的开发人员 07. 计算机相关专业想从事游戏开发的在校生(本科及以上学历) 01. 60+小时课程 02. 老师答疑 工作问题 课程问题 03. 班主任督学 作业统计 博客统计 6.4 学习方法 01. 先对着思维导图看整体知识点构成 02. 提出疑问,带着问题看视频 03. 梳理知识点在代码中的体现 04. 课程与工作相结合,重新思考需求功能 05. 不理解的技术点 跟老师沟通 07. 整理知识点到博客,配合思维导图用于将来复习 6.3 面试跳槽 01. 简历梳理 技术点凸显 项目技术梳理 02. 模拟面试 技术表述 项目重点 03. 薪资谈判 福利争取 公司背调 04. offer选择 职业规划 技术前景 4.1 阻塞 io 网络模型编程 01.什么是阻塞 io 网络模型 02. 阻塞 io 解决连接建立的问题 03. 阻塞 io 解决连接断开的问题 04. 阻塞 io 解决数据接收的问题 05. 阻塞 io 解决数据发送的问题 4.3 windows iocp 网络编程 01. 什么是完成端口 02. 重叠 io的作用 4.4 boost.asio 网络编程 4.5 网络缓冲区设计 02. 读缓冲区的工作原理 01. 为什么需要在用户层实现网络缓冲区 TrinityCore 日志模块 3.1 日志模块概要 3.2 日志模块实现 01. 日志模块的作用 02. 日志模式核心抽象:logger 和 appender 04. appender 如何定义日志打印目的地 01. 日志模块单例构建 02. 采用宏定义定制日志使用接口 03. 如何扩展 appender 04. appender 中设计模式-模板模式 05. 同步日志方式实现 06. 异步日志方式实现 4.6 网络模块实践 2.4 事务处理 什么是事务 什么情况下讨论事务 事务操作 TrinityCore 中事务处理封装 TrinityCore 中事务处理案例 03. logger 规则:继承关系、日志级别、以及 appender列表 07. 异步日志线程模型 3.3 日志模块实践 01. 剥离可复用日志模块 02. 为什么推荐使用异步日志 03. 异步日志日志安全分析及测试 06. 阻塞 io 解决网络问题的弊端 03. reactor 解决连接建立的问题 04. reactor 解决连接断开的问题 05. reactor 解决数据接收的问题 06. reactor 解决数据发送的问题 07. reactor 解决网络问题的特征:io 同步,事件异步 03. iocp 解决连接建立的问题 04. iocp 解决连接断开的问题 05. iocp 解决数据接收的问题 06. iocp 解决数据发送的问题 07. iocp 编程步骤 08. iocp 与 reactor 在编程处理 io 时的差异 01. boost.asio 跨平台网络库 02. cmake 如何在项目中引入 boost.asio 03. boost.asio 中核心命名空间 04. boost.asio 中核心对象:io_context、socket、endpoint 05. boost.asio 中异步 io 接口 06. asio 解决连接建立的问题 07. asio 解决连接断开的问题 08. asio 解决数据接收的问题 09. asio 解决数据发送的问题 03. 写缓冲区的工作原理 04. 手撕缓冲区实现 01. 剥离可复用网络模块 02. AsyncAcceptor 职责与实现 03. NetworkThread 职责与实现 04. Socket 职责与实现 05. 手撕多线程模式下网络模块的应用 5.2 地图模块 AOI 核心算法 03. 地图对象抽象:map、area、grid、cell 01. AOI 有哪些实现方式 02. AOI 静态数据工具生成 03. AOI 静态数据数据划分 04. AOI 静态数据组织方式 05. AOI 动态数据组织方式 06. AOI 动态数据驱动方式 07. AOI 地图数据加载 08. grid 网格状态机以及状态转换 09. AOI地图数据卸载 10. 采用访问者模式实现地图数据与算法的隔离 5.3 AABB 算法实现碰撞检测 01. 轴对称边界盒算法-AABB算法 02. TrinityCore 中 AABB 算法实现 03. AABB 算法优化 04. 碰撞检测接口封装以及应用 5.4 A* 寻路算法 01. A* 寻路算法概述 02. recast-detour 开源库 03. recast 根据模型生成导航数据 04. detour 利用导航网格做寻路 05. 寻路接口封装以及应用 TrinityCore 技能模块专栏 01. lua 基础 02. lua 错误处理 03. lua 编译与预编译 04. lua 模块与包 05. 元表与元方法 06. 环境 07. lua/c 接口编程 TrinityCore 语言以及面试专栏 8.1 lua 程序设计 8.2 c++ 新特性 6.1 技能模块概述 02. 技能数据库表设计(配置) 01. 技能设计概述 06. 跟着老师手撕代码实现 01. 智能指针 shared_ptr, unique_ptr 02. 函数对象以及闭包 04. 原子变量与锁:atomic、mutex、condition_variable 03. 右值引用 8.3 c++ 设计模式 05. 多线程环境队列设计:MPSCQueue、ProducerConsumerQueue 01. 单例模式 02. 工厂模式 03. 模板模式 04. 访问者模式 05. 责任链模式 03. 技能编辑器 WDBXEditor 使用 04. 技能模块处理客户命令输入流程 6.2 技能模块依赖 01. 技能定时器封装实现 02. 技能定时器数据结构选择 03. 技能定时器延时任务检测机制 04. GM 系统实现:console、SOAP、RA、ClientChat 6.3 技能模块设计实现 01. 如何实现易扩展、可复用、易配置的技能模块 02. 完整技能流程:是否释放、对谁释放、效果咋样 03. 工具介绍:WDBX、WoWSpellEditor、Navicat 04. 技能数据信息存储:配置、数据库、登录加载 05. 技能对象生命周期管理 06. 技能模块代码组织-Spells 以及 Auras 的管理 6.4 具体技能设计实现 01. 暴风雪技能实现:DynamicObject,周期性触发 02. 背刺技能实现:效果多阶段处理 03. 造食术技能实现:技能引导以及 item 绑定技能 04. 基础营火技能实现:GameObject 以及链式技能关联 TrinityCore AI 模块专栏 7.1 AI 模块概述 01. AI 本质:感知事件,针对目标,做出反馈 02. 主流实现方式:状态机和行为树 03. AI 实现层次:稳定和变化 04. 基类 CreatureAI 的抽象:主动策略以及被动事件抽象 7.2 野怪 AI 设计(稳定) 01. 野怪选择 AI:配置逻辑关系 02. 野怪 AI 权重设置 04. 野怪 AI 如何实现主动攻击 03. SelectAI 接口实现 AI 选择 7.3 ScriptedAI 设计(变化) 7.4 SmartAI 设计(变化) 01. 配置选择 ScriptedAI 05. 具体 AI 案例实现:幼狼 AI 02. ScriptedAI 封装抽象:攻击、移动、仇恨、 目标选择、召唤等 03. ScriptedAI 相关 GM 命令 05. 奥特兰克山谷 BossAI 实现 04. ScriptedAI 事件机制实现 01. SAI 概述:数据表逻辑关系、文档 02. SAI 研究工具介绍:WoWDatabaseEditor 03. 编写研究 SAI 数据库视图 04. SAI 代码封装 05. SAI 案例1:血量百分比事件处理 06. SAI 案例2:进入战斗以及条件模块实现 07. SAI 案例3:AI 对象间的交互 08. SAI 案例4:SAI 状态机实现 09. SAI 案例5:延迟动作列表实现剧情演绎 10. SAI 案例6:AI 交互以及延迟动作列表综合应用 TrinityCore 战场副本专栏 8.1 战场副本概述 01. 战场副本类型总结 02. 战场副本数据库表设计 03. 战场副本代码结构:战场管理、匹配队列、 积分结算、游戏帧逻辑、命令驱动等 04. Battleground 基类封装抽象:战场阶段、战场骨架、 重要事件等 05. 基于模板方法构建不同类型战场副本 8.2 战歌峡谷实现 01. 战歌峡谷玩法演示介绍 02. 研究依赖 GM 指令 03. 基于模板方法:骨架实现 04. 战旗的夺旗、掉落、状态切换等实现 05. 战场资源 Buff 实现 06. 基于模板方法:子流程(事件)扩展 8.3 阿拉希盆地实现 8.4 奥特兰克山谷实现 01. 阿拉希盆地玩法演示介绍 02. 研究依赖 GM 指令 03. 资源占领逻辑实现 04. 资源定时更新积分逻辑实现 05. 基本模板方法:骨架更新以及子流程扩展 01. 奥特兰克山谷玩法演示介绍 02. 增援值、boss击杀、哨塔、墓地逻辑实现 03. 矿洞占领实现:怪物击杀,占领后增援值更新 04. 基本模板方法:骨架更新以及子流程扩展 8.5 风暴之眼实现 01. 风暴之眼玩法演示介绍 02. 塔楼占领逻辑实现:塔楼双方阵营人数差 03. 夺旗玩法实现:区域触发,旗帜状态机变更 04. 结算逻辑实现:资源点数 05. 基本模板方法:骨架更新以及子流程扩展 8.6 远古海滩实现 8.7 征服之岛实现 01. 远古海滩玩法演示介绍 02. 两轮攻防实现:状态机 03. 泰坦圣物逻辑实现:GameObject 事件机制 04. 城门逻辑实现:GameObject 的 damaged 和 destroyed事件 05. 攻城车实现:Creature 以及 CreatureAI 06. 基本模板方法:骨架更新以及子流程扩展 01. 征服之岛玩法演示介绍 02. 援兵数逻辑实现:PVP 以及据点占领 03. Boss 以及 BossAI 实现 04. 城门逻辑实现:GameObject 以及区域触发原理 05. 基本模板方法:骨架更新以及子流程扩展 8.4 简历书写以及面试准备 01. 个人技能分层梳理 02. 项目经验技术点梳理 03. 针对 TrinityCore 模拟面试 04. 技术表达建议 05. 面试复盘