〇、前言

9年前,也就是2016年,我曾经写过一篇 3.3.5 版本服务器搭建指南,当时是基于 TrinityCore 开源项目做的。
魔兽世界模拟器经过了这么多年的发展,无论是在修复程度、扩展性、易用性等等方面都有了长足的进步,鉴于之前的文章已经并不能指导目前服务器搭建,那么有必要再新写一篇了。
本次搭建指南基于 AzerothCore 项目,AzerothCore 与 TrinityCore 一样,一脉传承于 创始项目 MaNGOS ,他们的演进关系如下:

MaNGOS -> TrinityCore -> SunwellCore -> AzerothCore

一、AzerothCore 介绍

AzerothCore 是一个 blizzlike 项目,blizzlike 指除原始版本BUG外,其他内容修复与暴雪原版内容一致,并不提供魔改内容,blizzlike 便于我们体验原汁原味的魔兽世界游戏内容。

那么 AzerothCore 就不能支持自定义内容了吗?并不是这样,AzerothCore 通过高度模块化的设计思想,允许开发人员扩展和自定义游戏功能、内容模块。这里我们介绍几个常用的模块:

  • Eluna Lua 引擎:一个嵌入到服务器端的 lua 语言引擎,通过该引擎可以自定义任务、技能、单位、装备等等你能想到的一切内容而不需要学习C/C++编程。
  • Playerbots :机器人仿真模块,提供极具真实性的机器人行为,在野外、副本、战场进行真实的互动,甚至一起升级做任务。
  • 幻化:提供一个幻化NPC,可以进行装备幻化。
  • AHBot:设置一个账号和其中的角色,拍卖行机器人会在拍卖行买卖物品参与市场的销售和竞价。
  • AutoBalance : 自动平衡模块,根据玩家数量动态调整精英怪物 和 Boss 的生命值、法力值和伤害。
  • Individual Player Progression:个人玩家进度模块,玩家必须完成每个等级才能访问下一等级的内容。根据游戏进度模拟各个资料片不同时期开放的游戏内容,删除新资料片开放后原有内容被压缩的追赶机制,每个新角色都是一次新鲜的体验。
  • Solo Dungeon Finder:单人副本查询器,允许玩家单独使用副本查询器,也可以以少于 5 名玩家的组队使用,配合自动平衡模块便于玩家在单人游玩且不使用仿真机器人时完成日常任务。

还有很多模块,不再一一列举。

二、前期准备工作

操作系统:Windows 10 或更高版本
Boost:版本≥ 1.78
MySQL:版本≥ 8.0(推荐 8.4)
OpenSSL:版本≥ 3.x.x
CMake:版本≥ 3.27
Microsoft Visual Studio (社区版):版本≥ 17 (2022)(需安装桌面开发工具,勿使用预览版)

2.1 Git 安装

下载独立 Git 安装程序
在安装 Git 时,调整您的 PATH 环境变量,选择 “Git from the command line and also from 3rd-party software”。(从命令行以及第三方软件中使用 Git)

2.2 GitHub 桌面版

打开 GitHub Desktop 下载页面,按照步骤完成安装。

2.3 安装编译器/集成开发环境(IDE)

下载并安装 Visual Studio Community 2022 (ver 17)
安装 C++ 编译器。
选择 桌面 C++ 开发,路径为 工作负载 -> 桌面与移动开发。

image

2.4 安装 MySQL

  • 进入MySQL Server Community Edition 页面选择 Windows MSI Installer 版本。
  • 滑动到页面底部,点击 “No thanks, just take me to the downloads!” 开始下载。
  • 安装完成前,确保勾选 “Launch the MySQL Instance Configuration Wizard”,然后点击完成。
  • 在配置向导中,大部分默认选项即可使用,但请记住您设置的用户名和密码(例如:用户名 root,密码 yourpassword),稍后导入 SQL 文件时会用到。
  • 测试 MySQL 是否安装成功
    • 按下 CTRL+ALT+DEL 打开任务管理器。
    • 选择 服务 标签页,在服务列表中应看到名为 “MySQL” 的服务,状态为 “运行中”。
  • 添加 MySQL 到系统环境变量
    • 打开 控制面板 -> 系统。
    • 进入 高级系统设置。
    • 点击 环境变量。
    • 在 系统变量 中找到 Path,点击编辑。
    • 添加 MySQL 的安装路径,例如:C:\Program Files\MySQL\MySQL Server 8.0\bin\

找到 MySQL 开发文件。开发文件随 MySQL Server 一起提供,通常位于 MySQL\MySQL Server 8.0\libMySQL\MySQL Server 8.4\lib 文件夹中。

2.5 选择数据库管理工具

  1. 测试数据库连接。打开您选择的数据库管理工具创建一个新的连接/会话
  2. 如果 MySQL 安装在本机,主机名/地址填写 127.0.0.1localhost,然后输入您的账号信息(如 root 和密码)。连接成功后即可管理您的数据库。

2.6 安装 CMake

  1. 打开官网 CMake 下载页面,下载并安装最新稳定版(windows-x86_64.msi 文件)。注意:不要选择 RC(候选版)版本
  2. 推荐以 64 位模式进行编译。

2.7 安装 OpenSSL

打开官网OpenSSL下载页面,下载 OpenSSL 的 64 位版本(非精简版 “light”)。例如:Win64 OpenSSL v3.0.7。

提示: 如果安装过程中提示 “缺少 Microsoft Visual C++ … Redistributable”,请先下载并安装 Microsoft Visual C++ 2017/2019/2022 Redistributable Package (x64) (Direct Download)

提示: 安装时选择将 OpenSSL DLL 文件复制到 OpenSSL 的二进制文件目录 (/bin),不要选择 Windows 系统目录,以便后续步骤中易于找到这些文件。

2.8 安装 Boost

  1. 打开官网 Boost 下载预构建 Windows 二进制文件(适用于 Visual Studio 2022 的 64 位版本)。
  2. 在系统变量中添加一个名为 BOOST_ROOT 的环境变量,值为 Boost 的安装目录,例如:C:/local/boost_1_81_0。请确保路径使用正斜杠 /,而不是反斜杠 \。路径结尾不要添加额外的斜杠 /。如果仍然遇到问题,可以在 用户变量 中也添加相同的环境变量。
    image-1736937786360

注意:请注意,此图片显示的版本号为 1_72_0 在您的设置中请使用您实际的版本号。

三、编译源码

3.1 拉取代码

  1. 创建用于存放源码文件的目录。本指南中我们使用 C:\Azerothcore 作为示例路径。
  2. 打开 GitHub Desktop
  3. 点击左上角的 File -> Clone repository…
  4. 选择 URL 选项。
  5. 填写以下信息:

Repository URL or GitHub username and repository: https://github.com/azerothcore/azerothcore-wotlk
Local path: C:\Azerothcore

点击 Clone。几分钟后,AzerothCore 的源码文件将被克隆到 C:\Azerothcore

3.2 使用 CMake 配置并生成 Visual C++

  1. 创建 Build 目录
    在开始之前,创建一个新的目录用于存放编译文件。本指南中我们使用 C:\Build 作为示例路径。

  2. 打开 CMake

    • 点击 Browse Source…,选择源码目录(C:\Azerothcore)。
    • 点击 Browse Build…,选择 Build 目录(C:\Build)。
    • 点击 Configure
  3. 选择编译器

    • 在下拉菜单中,选择您在“系统要求”部分中安装的编译器版本。
    • 如果您使用 64 位编译,请确保选择 Win64 版本。
    • 勾选 Use default native compilers
    • 点击 Finish
  4. 设置编译参数

    • 确保 TOOLS_BUILD 被设置为 all,这将编译后续需要用到的提取工具。
    • 再次点击 Configure。如果日志窗口中有红色的错误信息,请检查您的参数并重新运行配置。
  5. 生成编译文件

    • 点击 Generate。这将生成所选的编译文件,并将其安装到 C:\Build 文件夹中。

注意:如果在 CMake 中遇到错误,请参考官方文档中的 常见错误 部分。

3.3 编译源码

  1. 在 CMake 中点击 Open Project,直接用 Visual Studio 打开 AzerothCore.sln 文件。

  2. 在顶部菜单中,点击 Build 并选择 Configuration Manager,按以下方式设置:

    • Active Solution Configuration: RelWithDebInfo
    • Active Solution Platform: x64
    • 点击 Close(设置会自动保存)。
  3. 右键单击右侧侧栏中的 Solution Explorer 中的 ALL_BUILD,选择 Clean

  4. 再次右键单击 ALL_BUILD,选择 Build(快捷键:Ctrl + Shift + B)。
    注意:如果您的 GUI 中未显示 Solution Explorer,可以点击 Build 菜单,选择 Clean Solution 后再选择 Build

编译时间:不同设备的编译时间有所不同,通常在 5 至 30 分钟之间。

提示:如果在编译过程中或之后提示“重新加载构建文件”,请执行该操作。

编译完成后,输出窗口将显示类似以下的信息:

========== Build: 22 succeeded, 0 failed, 0 up-to-date, 1 skipped ==========

您可以在以下目录找到新编译的二进制文件:C:\Build\bin\RelWithDebInfoC:\Build\bin\Debug

这些文件将在安装指南的最后用于运行您的服务器,如下所示:

`\configs\`  
`authserver.exe`  
`authserver.pbd`  
`worldserver.exe`  
`worldserver.pdb`  
`libmysql.dll`  
`legacy.dll`  
`libcrypto-3-x64.dll`  
`libssl-3-x64.dll`  

有四个 DLL 文件需要手动添加到此文件夹中,您需要从以下目录中复制它们:

libmysql.dllC:\Program Files\MySQL\MySQL Server 8.x\lib

  • 注意:您的 libmysql.dll 版本需要与当前使用的 MySQL Server 版本匹配。如果更新 MySQL Server,您需要重新编译核心并复制新的 DLL 文件。

legacy.dll, libcrypto-3-x64.dll, libssl-3-x64.dllC:\OpenSSL-Win64\bin

configs 文件夹中,您应能找到以下文件

`authserver.conf.dist`  
`worldserver.conf.dist`

关于编译日志与报告

如果您使用 DebugRelWithDebInfo 配置进行编译,则会生成 .pdb 文件。
推荐使用至少 RelWithDebInfo 配置来编译核心,以便生成正确的崩溃日志。

重要:如果需要报告崩溃日志,必须使用 DebugRelWithDebInfo 配置进行编译。

四、服务端配置

4.1 目录

  • 数据文件 - 必需
  • 提取工具 - 必需
  • 配置文件:Worldserver 和 Authserver - 必需

现在您已编译源码,您需要通过下载或提取的方式添加一些必要文件。

某些文件是可选的,但强烈推荐:

目录 说明
dbc 必需
maps 必需
vmaps 强烈推荐
mmaps 强烈推荐
cameras 推荐

4.2 数据文件

如果您打算使用 enUS 客户端,可以下载以下数据文件。如果您使用中文的客户端,则需要自行提取数据。

下载上述文件,在构建目录中创建一个名为 Data 的新文件夹。例如,Windows: C:\Build\bin\RelWithDebInfo\Data 或 Linux: $HOME/azerothcore/data/。将压缩文件中的文件解压到 Data 文件夹中,并编辑 DataDir 配置选项以指定您的文件夹位置。

4.3 提取数据文件

(如果您决定使用英文版并且已下载上述文件,则可跳过 4.3 步骤)

如果您决定使用中文版,请继续查阅 4.3 步骤

提取 DBC、Maps、VMaps 和 MMaps

  1. 进入构建目录 (C:\Build\bin\RelWithDebInfo\),并将以下文件复制到您的魔兽世界文件夹(wow.exe 所在位置):

    • mapextractor.exe
    • mmaps_generator.exe
    • vmap4extractor.exe
    • vmap4assembler.exe
  2. 进入 C:\Azerothcore\apps\extractor,将 extractor.bat 复制到您的魔兽世界文件夹,与前面的文件放在一起。

  3. 在您的魔兽世界目录中创建 mmapsvmaps 文件夹。

  4. 运行 extractor.bat 并选择提取选项。

重要注意事项:

  • dbcmapsvmaps 是确保服务器正常运行所需的!
  • 请勿尝试停止 vmaps 提取过程。完成时会显示“Press any key…”,并创建两个新文件夹:buildingsvmapsbuildings 文件夹在运行后完全无用,可以安全删除。
  • 在第一个任务完成之前,请勿运行另一个任务,否则会出现错误。
  • 如果提前停止 vmap4extractor,需要删除 Buildings 目录后再重新开始。
  • 可选但强烈推荐:提取 mmaps。提取过程中请勿尝试停止。
  1. C:\Build\bin\RelWithDebInfo 中创建一个名为 Data 的新文件夹。

  2. vmapsmapsdbccameras 移动到 Data 文件夹中。或者,您可以通过更改 worldserver.conf 文件中的 DataDir 值来指定一个不同的目录。

AzerothCore 并不能识别其他项目例如 TrinityCore 或 SunwellCore 提取的数据,使用其他项目的数据文件 AzerothCore 将无法正常工作!

完成后,您可能会收到以下可以安全忽略的消息:

Processing Map 724
[################################################################]
Extracting GameObject models...Extracting World\Wmo\Band\Final_Stage.wmo
No such file.
Couldn't open RootWmo!!!
Done!

Extract V4.00 2012_02. Work complete. No errors.

排除故障

  • “无法打开 wmo_list.txt!没有提取任何东西。”

请先运行 Mapextractor.exe,然后再运行 makevmaps_simple.bat

4.4 配置文件:Worldserver 和 Authserver

每次重新编译核心时,都会创建一个 .dist 配置文件,其中存储了所有默认选项。此文件没有实际用途,除了分发核心中的所有选项。

创建配置文件

  1. 转到您的 configs 文件夹。例如:D:\build\bin\RelWithDebInfo\configs
  2. 去掉 worldserver.conf.distauthserver.conf.dist 文件名末尾的 .dist 部分。您将得到 worldserver.confauthserver.conf

打开这些 .conf 文件,向下滚动至 LoginDatabaseInfoWorldDatabaseInfoCharacterDatabaseInfo,输入 MySQL 登录信息,以便服务器可以访问您的数据库。

在新编译的配置中,默认值如下:

LoginDatabaseInfo     = "127.0.0.1;3306;acore;acore;acore_auth"         → worldserver.conf / authserver.conf
WorldDatabaseInfo     = "127.0.0.1;3306;acore;acore;acore_world"        → worldserver.conf
CharacterDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_characters"   → worldserver.conf

该部分配置遵循以下格式:

Variablename = "MySQLIP;Port;Username;Password;database"

您需要验证以下步骤:

  • 如果 AzerothCore 运行在本机不对外发布,主机名(127.0.0.1)可以保持不变。否则,修改 acore_auth 库中 realmlist 表中的 address 字段为你的公网IP地址,如下图所示:。
    image-1736997388707

  • 端口(3306)为默认配置值。如果您更改了 MySQL 设置中的默认端口,则必须相应更改。用户名和密码可以是变量。您可以选择:

    • 使用默认的 acore / acore 用户名和密码对。
    • 在您喜欢的数据库管理工具的用户管理器中创建一个唯一的登录,并授予其必要的权限(SELECTINSERTUPDATEDELETE 权限足够,且更安全)。

更新 DataDir

worldserver.conf 文件中找到 DataDir 选项。

将其编辑为您的文件夹路径。例如:C:\Build\bin\RelWithDebInfo\Data

提示:对于大多数 worldserver.conf 设置更改,您可以在游戏中简单输入 .reload config 即可立即查看更改,而无需重启服务器。

警告:本指南作者绝不赞助或支持非法的公共服务器。如果您使用这些项目运行非法公共服务器而不是用于测试和学习,那是您个人的选择。

五、数据库配置

5.1 创建数据库和用户

首先,您需要创建 acore 用户。需要在 MySQL 客户端或 MySQL 命令行界面 (CLI) 中运行以下脚本。运行脚本时需使用 MySQL 的 root 用户。

脚本链接:create_mysql.sql

重要提示:仅使用 MySQL root 用户运行上述脚本,切勿以 root 或管理员身份运行核心服务程序!
提示:您可以修改正在创建的用户的密码以提高安全性。

5.2 初始化数据库

SQL脚本

所有SQL脚本都位于 $(相对于源码根目录)的 \data\sql\create\ 文件夹中。

  • create_mysql.sql:包含用于创建 acore 用户和数据库的SQL脚本。
  • drop_mysql.sql:用于删除 acore 用户并删除所有数据库的SQL脚本。

其他SQL脚本

启动服务端时会自动化执行,无需手动操作。

基础文件

所有基础文件都位于 $\data\sql\base\ 文件夹中。

这些文件包含最新压缩更新文件中的所有数据。

来自此目录的文件会通过 自动数据库更新器 自动导入。

更新文件

所有更新文件都位于 $\data\sql\updates\ 文件夹中。

这些文件包含所有已提交的更新。

来自此目录的文件会通过 自动数据库更新器 自动导入。

待处理更新文件

所有待处理的更新文件都位于 $\data\sql\updates\pending_db_* 文件夹中。

所有您在 AzerothCore 上进行的 SQL 更改(例如修复问题)都应存储在此处。

您可以通过运行 create_sql.sh 脚本来创建待处理更新文件。

自定义文件

所有自定义文件都位于 $\data\sql\custom\ 文件夹中。

您对数据库的所有自定义更新都应存储在此目录中的 SQL 文件中,以确保在更新服务器时不会丢失这些更改。

来自此目录的文件会通过 自动数据库更新器 自动导入。

5.3 更新数据库

Authserver 和 Worldserver 会在启动时检查并应用所有需要的数据库文件。

要编辑自动数据库更新器,您可以在 authserver.confworldserver.conf 中的 UPDATE SETTINGS 下找到所需设置。

  1. 启动 Authserver.exe,在您创建的 Build 文件夹中,路径为 \bin\RelWithDebInfo\bin\Debug
  2. 在相同位置启动 Worldserver.exe

如果在控制台中看到以下消息,请按 Enter 键以创建和填充数据库:

Database "acore_auth" does not exist
Do you want to create it? [yes (default) / no]:

六、网络配置(可选步骤)

本章节提供局域网或互联网使用时所需要的网络配置。通常,对于简单的本地测试不需要进行该配置。

6.1 Worldserver 和 Authserver 配置

对于几乎所有的基本设置方案,默认的本地主机 (127.0.0.1) IP 设置应保持不变。默认的 bindip (0.0.0.0) 也应保持不变。

6.2 为互联网连接设置认证数据库的 realmlist

如果需要让互联网用户找到您的服务器,必须使用您的公网 IP。您需要在路由器/防火墙中转发或开放端口 3724(认证服务器)和 8085(世界服务器),使用 TCP 协议。

Realmlist 表

确保您的认证服务器应用程序将传入连接正确引导到您的领域。

使用您选择的数据库管理工具(如 SQLYog 或 HeidiSQL),或使用 MySQL 命令行接口 (CLI)。

如果您需要从外部计算机连接到数据库,请阅读 这里,而不是对 MySQL 服务器开放端口。

打开 acore_auth 数据库,找到 realmlist 表。根据需要编辑 address 字段:

  • 局域网 IP (192.168.x.x) - 如果您在不同的计算机上安装了 AzerothCore,但所有计算机都在同一网络(路由器)上,请使用该计算机的局域网 IP。
  • 127.0.0.1 - 也称为“localhost”。如果您在运行 WoW 的同一台计算机上安装了 AzerothCore,并且只有您自己连接,请保持此设置不变。
  • 公网 IP 地址 - 如果您希望其他人连接到您的服务器,请使用外部 IP。访问 whatismyip.com 找到您的公网 IP 地址。
    如果您从家庭网络托管,可能需要设置端口转发,具体内容不在本指南范围内。portforward.com 有适用于大多数路由器的指南,您的互联网服务提供商也可以提供帮助。
  • 域名 - (例如 mydomain.comwarcraft.mydomain.com) 如果您希望其他人通过此域名连接到服务器,可以避免跟踪动态 IP 地址的麻烦。
    类似于公网 IP 地址,如果从家庭网络托管,可能需要设置端口转发。此外,您需要将 DNS 配置为指向服务器的公网 IP 地址,配置 DNS 不在本指南范围内,您的域名注册商或动态 DNS 提供商应提供相关文档。

注意:如果使用 HeidiSQL,编辑值时确保在 “Data” 选项卡中。

6.3 MySQL CLI 命令(如果使用了 HeidiSQL 等 MySQL 管理工具则不需要此步骤)

$ sudo mysql

看到提示符变为 mysql> 后,输入:

use acore_auth;

[your_ip] 替换为您选择使用的 IP:

UPDATE realmlist SET address = '[your_ip]' WHERE id = 1;

退出:

exit

七、启动服务器

在您的构建文件夹中运行 authserverworldserver

警告:除非您非常确定自己知道如何操作,否则切勿直接在数据库中创建帐户!

接下来,通过在 worldserver 窗口中直接输入 GM 命令 account create 来创建您的登录帐户。语法如下(请参见下方示例)。

如果您希望将帐户设置为 GM(游戏管理员),请在 worldserver 窗口中输入:

account set gmlevel $account #level #realmid

其中 $account 是要更改的帐户名称,#level 可以是 0-4,#realmid 是服务器 ID。设置 #level 为 “3” 是 GM 帐户级别(数字越高,权限越大),“-1” 代表“所有服务器”。

提示:打开您的 acore_world 数据库并找到 command 表。这将显示 GM 命令、描述和安全级别的完整列表。假设您保持数据库和核心更新,这将始终是您能找到的最新列表。

八、更新(可选步骤)

8.1 保持源码更新

  1. 打开 GitExtensions 中的 AzerothCore 仓库。
  2. 点击蓝色向下箭头(Pull - 合并)。这将同步您的本地仓库到 azerothcore-wotlk 仓库的最新提交。
  3. 重新运行 CMake 的 Configure 和 Generate,以更新您的解决方案 (.sln) 文件。
  4. 参照第三章节重新编译源码。

8.2 保持数据库更新

默认情况下,Worldserver 和 Authserver 会检查并执行配置中指定数据库中的所有新SQL脚本。

  1. 启动 worldserver.exe
  2. 要编辑自动数据库更新器的设置,您可以在 authserver.confworldserver.conf 中的 UPDATE SETTINGS 下找到必要的设置。(非必要)

九、客户端配置运行

本指南不提供客户端下载,您需要自行在网上找到一个干净的 3.3.5a 客户端(国服为13930,台服为12340)。

  • 打开 WoW\Data 文件夹中的 realmlist.wtf 文件。其中的 IP 地址应与您之前在 realmlist 表中输入的 IP 地址完全一致。

    • 将第一行更改为以下格式:
    set realmlist <realmlist 表中使用的 IP 地址>
    
    • 示例
    set realmlist 127.0.0.1
    

    运行 wow.exe ,使用您刚创建的用户名和密码登录。创建一个角色,就完成了!

  • (可选)如果您希望通过 WoW Launcher.exe 启动客户端,则必须将 set patchlist 更改为与 realmlist 相同的 IP 或域名。

注意:不要使用 localhost 作为地址。如果需要连接到本地主机,请使用 127.0.0.1

十、模块安装(可选步骤)

添加模块是可选的步骤,可以用来改变 AzerothCore 默认提供的类暴雪游戏体验。

10.1 安装模块

  1. 查找模块
    AzerothCore模块目录 中找到您需要的模块。

  2. 克隆仓库(以下两种方法二选一)

    • 使用 Git 克隆仓库,方法与最初克隆 AzerothCore 的核心安装相同。仓库应被克隆到 \modules\ 目录中。例如:E:\AzerothCore\modules\

    • 从目录中下载 ZIP 文件并将其解压到 \modules\ 目录中。例如:E:\AzerothCore\modules\mod-anticheat

注意:如果您的模块带有后缀(例如 -master),需要将其移除才能正常使用!

10.2 重新编译源码

为了使模块正常工作,您需要重新编译源代码。有关如何重新编译的详细指南,请再次阅读第三章节。

  • 重新配置并重新生成 CMake。
    • 为确保模块正确安装,您可以在 CMake 日志中查看 * Modules configuration (static)。
  • 重建核心。

您的 Worldserver 将自动运行模块提供的任何 SQL 脚本。

始终检查模块的 README 文件,以了解模块正常运行所需的任何手动步骤。

10.3 常见错误

  • 编译时出现错误 "error LINK2019: unresolved external symbol “void __cdcel Addmod_module_masterScripts(void)”

    • 解决方法:从模块目录名称中移除 -master
  • 模块在游戏中无法正常工作

    • 解决方法:您可以使用 .server debug 命令查看所有已加载的模块。
    • 始终查看模块的 README 文件以获取该模块的确切安装步骤。