当前位置: 首页 > news >正文

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 文件夹下&#xff0c;打开 consumerBanking 文件夹。你将看到有一个 pom.xml 文件&#xff0c;代码如下&#xff1a; <project xmlns"http://maven.apa…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...