C++游戏后端开发(魔兽世界,MMO,TrinityCore源码拆解) 教程

基于魔兽开源后端框架 TrinityCore 的技术拆解课程
一、TrinityCore CMake项目构建
1.1 CMake的使用
-
什么是CMake , CMake 的工作流程
-
CMakeLists.txt的编写规则
-
静态库生成以及链接
-
动态库生成以及链接
-
嵌套CMake
1.2 Windows和Linux下编
-
译调试环境搭建
-
cmake和graphviz生成目标依赖图
-
linux vscode编程环境搭建
-
cmake和clangd实现精准跳转
-
C/C++插件实现调试
-
vs2019 windows下编译调试搭建
二、TrinityCore 数据库模块
2.1 连接池设计概要
-
什么是连接池
-
为什么需要复用连接
-
为什么固定连接数
-
主要应用场景
2.2 同步连接池实现
-
同步连接池的线程模型
-
同步连接池接口封装
-
同步连接池接口使用
-
同步连接池应用场景
2.3 异步连接池实现
-
异步连接池的线程模型
-
异步连接池接[口封装
-
异步连接池接口使用
-
异步连接池应用场景
2.4 事务处理
-
什么是事务
-
什么情况下讨论事务
-
事务操作
-
TrinityCore 中事务处理封装
-
TrinityCore 中事务处理案例
2.5 数据库模块实践
-
剥离可复用数据库模块
-
应用同步连接池案例
-
异步连接池-单SQL语句的使用
-
异步连接池-多SQL语句chain式应用
-
异步连接池多SQL语句holder式应用
-
异步连接池多SQL语句transaction式应用
三、TrinityCore 日志模块
3.1 日志模块概要
-
日志模块的作用
-
日志模式核心抽象: logger和appender
-
logger规则:继承关系、日志级别、以及appender列表
-
appender如何定义日志打印目的地
3.2 日志模块实现
-
日志模块单例构建
-
采用宏定义定制日志使用接口
-
如何扩展appender
-
appender中设计模式模板模式
-
同步日志方式实现
-
异步日志方式实现
-
异步日志线程模型
3.3 日志模块实践
-
剥离可复用日志模块
-
为什么推荐使用异步日志
-
异步日志日志安全分析及测试
四、TrinityCore 网络模块
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职责与实现
-
手撕多线程模式下网络模块的应用
五、TrinityCore 地图模块
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利用导航网格做寻路
-
寻路接口封装以及应用
六、TrinityCore 战斗模块专栏
6.1 技能设计
-
技能设计概述
-
技能数据库表设计(配置)
-
技能触发:距离、冷却时间、消耗等
-
技能效果:伤害计算、增益效果等
-
技能释放流程
6.2 AI设计
-
AI设计概述
-
基于行为树的AI设计
-
AI类继承层次关系;
-
AI攻击目标选择
-
AI攻击方式选择
-
AI移动方式选择
-
AI基于事件的驱动机制
6.3 怪物管理
-
怪物数据库设计(配置)-属性和行为
-
怪物刷新规则设计-时间间隔以及范围
-
怪物属性、技能、掉落、AI
6.4 战场副本设计
-
创建和咖载battlegrounds场景地图数据
-
battlegrounds规则实现
-
battlegrounds队伍匹配、队伍平衡以及角色分配
-
battlegrounds奖励系统和排名机制
七、TrinityCore mmorpg核心功能与玩法
7.1 任务系统设计
-
任务系统数据库设计(配置)
-
玩家数据库状态存储
-
任务类型设计
-
任务触发机制
7.2 背包设计
-
背包数据结构设计以及数据库表设计
-
背包容量控制
-
背包格子管理
-
背包交互功能实现
7.3 工会系统设计
-
数据库表结构设计
-
工会创建逻辑实现
-
工会成员管理
-
工会资源管理及分配机制
-
工会活动与事件
-
工会排名实现
-
工会权限控制
八、语言专栏
8.1 lua程序设计
-
lua基础
-
lua错误处理
-
lua编译与预编译
-
lua模块与包
-
元表与元方法
-
环境
-
lua/c接口编程
8.2 C++新特性
-
智能指针 shared_ptr, unique_ptr
-
函数对象以及闭包
-
右值引用
-
原子操作与锁: atomic、mutex、 condition_variable
-
多线程环境队列设计: MPSCQueue、ProducerConsumerQueue
8.3 C++设计模式
-
单例模式
-
工厂模式
-
模板模式
-
访问者模式
-
责任链模式
适宜工程师人群
-
从事游戏后端岗位开发,但没有时间系统学习的在职工程师
-
从事嵌入式方向开发,想转入游戏后端开发的在职工程师
-
从事Qt/MFC等桌面开发的, 薪资多年涨幅不大的在职工程师
-
从事C/C++后台开发,想往游戏服务器方向发展的在职工程师
-
自己研究学习速度较慢,不能系统构建游戏开发知识体系的开发人员
-
计算机相关专业想从事游戏开发的在校生(本科及以上学历)
60+小时课程
C++游戏后端开发(魔兽世界,MMO,TrinityCore源码拆解) 教程
基于魔兽开源后端框架 TrinityCore 的技术拆解课程;课程涉及 MMORPG 核心模块实现(高性能网络模块、数据库模块、日志模块、地图模块、以及战斗模块等),同时也包括 MMORPG 核心玩法实现(任务、背包、工会、以及副本等)。通过课程学习,将掌握 MMORPG 核心开发技能。
相关文章:
C++游戏后端开发(魔兽世界,MMO,TrinityCore源码拆解) 教程
基于魔兽开源后端框架 TrinityCore 的技术拆解课程 一、TrinityCore CMake项目构建 1.1 CMake的使用 什么是CMake , CMake 的工作流程 CMakeLists.txt的编写规则 静态库生成以及链接 动态库生成以及链接 嵌套CMake 1.2 Windows和Linux下编 译调试环境搭建 cmake和grap…...
MySQL 之 死锁日志的查看和分析
MySQL死锁日志的查看和分析 查看死锁日志,优化sql和索引,加速数据库数据操作...
Docker运行docker中指定一个jar
目标: 在正在运行的一个docker容器中,容器的名字为 testimg,运行我们容器文件中我们放的一个jar包。例如:xiaobai.jar,并且在群晖的定时任务中,每分钟运行一次。 解决问题方案: 在群晖定时任务中运行指定…...
nodejs+vue家教管理系统
目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1nodejs简介 4 2.2 express框架介绍 6 2.3 B/S结构 4 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性…...
vuex入门
文章目录 一、vuex简介1.1 概述1.2 核心 二、使用2.1 安装2.2 创建store模块2.3 在src/store/index.js中写入内容2.4.在src/main.js中导入并使用store实例2.5.在views新建vuex目录,添加Page1.vue和Page2.vue文件2.6.配置路由2.7.在LeftNav.vue添加内容 三、存取值3.1 state直接…...
交叉熵Loss多分类问题实战(手写数字)
1、import所需要的torch库和包 2、加载mnist手写数字数据集,划分训练集和测试集,转化数据格式,batch_size设置为200 3、定义三层线性网络参数w,b,设置求导信息 4、初始化参数,这一步比较关键,…...
如何看待Unity新的收费模式?(InsCode AI 创作助手)
Unity引擎是目前全球最受欢迎的3D游戏和应用开发引擎之一,按照Unity公司自己的说法,全球1000款畅销移动游戏中70%以上都使用了Unity引擎。如果统计全平台(包括PC、主机和移动设备)的情况,非官方数据是,超过…...
Android Studio git 取消本地 commit(未Push)
操作比较简单 1.选中项目然后依次选择:Git->Repository->Reset HEAD 2.然后再to Commit中输入HEAD^,表示退回到上一个版本。...
ViewModifier/视图修饰符, ButtonStyle/按钮样式 的使用
1. ViewModifier 视图修饰符 1.1 创建默认按钮视图修饰符 ViewModifierBootcamp.swift import SwiftUI/// 默认按钮修饰符 struct DefaultButtonViewModifier: ViewModifier{let bcakgroundColor: Colorfunc body(content: Content) -> some View {content.foregroundColor…...
科技资讯|微软AR眼镜新专利曝光,可拆卸电池解决续航焦虑
微软正在深入研究增强现实(AR)领域,最近申请了一项“热插拔电池”相关专利。该专利于 2023 年 10 月 5 日发布,描述了采用模块化设计的 AR 眼镜,热插拔电池放置在了镜腿部分,可以直接拿下替换,对…...
idea系列---【上一次打开springboot项目还好好的,现在打开突然无法启动了】
问题 昨天走的时候项目还能正常启动,今天来了之后突然报下面的错误: Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.7.1, expected version is 1.1.16. 解决方案 点击 idea: Bui…...
查询资源消耗
import subprocess def get_cpu_usage(pid, duration): output subprocess.check_output([‘pidstat’, ‘-d’, ‘-p’, str(pid), ‘1’, str(duration)]).decode(‘utf-8’) lines output.strip().split(’\n’) cpu_usage [] for line in lines[4:]: fields line.spli…...
conda: error: argument COMMAND: invalid choice: ‘activate‘
参考:https://github.com/conda/conda/issues/13022 输入后重启terminal即可...
新鲜速递:Spring Cloud Alibaba环境在Spring Boot 3时代的快速搭建
了解 首先,Spring Cloud Alibaba使用的是Nacos作为服务注册和服务发现的中间件。 能力在提供者那里,而消费者只需知道提供者提供哪些服务,而无需关心提供者在哪里,实际调用过程如下图 准备工作 1、需要下载并安装Nacos最新版…...
网络-网络状态网络速度
文章目录 前言一、网络状态二、网络速度 前言 本文主要记录如何监听网络状态和网络速度。 一、网络状态 获取当前网络状态: navigator.onLine // true:在线 false:离线监听事件:online(联网) 和 offline(断网) windo…...
ACL访问控制列表的解析和配置
ACL的解析 个人简介 ACL - Access Control List 访问控制列表 策略 ------行为 允许/拒绝 ACL --包含两种 标准ACL 扩展ACL 标准ACL:只能针对源IP地址做限制 针对路由条目的限制 -路由策略 思科编号:1-99之间或1300-1999 扩展ACL:针对…...
记一次使用vue-markdown在vue中解析markdown格式文件,并自动生成目录大纲
先上效果图 如图所示,在网页中,能直接解析markdown文档,并且生成目录大纲,也支持点击目录标题跳转到对应栏目中,下面就来讲讲是如何实现此功能的。 1、下载vue-markdown yarn add vue-markdown 2、在页面中渲染markdo…...
力扣每日一题35:搜索插入的位置
题目描述: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5…...
Iptabels的相关描述理解防火墙的必读文章
Iptabels是与Linux内核集成的包过滤防火墙系统,几乎所有的linux发行版本都会包含Iptables的功能。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则Iptables有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。…...
Maven 构建项目测试
在上一章节中我们学会了如何使用 Maven 创建 Java 应用。接下来我们要学习如何构建和测试这个项目。 进入 C:/MVN 文件夹下,打开 consumerBanking 文件夹。你将看到有一个 pom.xml 文件,代码如下: <project xmlns"http://maven.apa…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
