魔兽世界服务端除了TrinityCore(以下简称TC)还有Azerothcore(以下简称AC),AC和TC的区别是TC走在时代的前沿,一直在更新迭代,以技术研究为目的,支持3.3.5端和最新的10.0官方端(巨龙崛起),但因为更新迭代快,副作用是可能带来更多的BUG,需要更新修复的频率比较高,这对需要稳定运行游戏的用户不够友好,AC则是从TC3.3.5分支出来的一个服务端,基于TC但不追求新内容,而以修BUG和稳定为首要目的,更适合开服游戏,所以目前多数服务器都是基于AC的。
先上图,看看最终架设后在个人电脑上的运行效果:




Azerothcore服务器的安装编译方式和TC基本一样,源码地址为:
https://github.com/azerothcore/azerothcore-wotlk
但和TC编译相比有二点需注意:
- OpenSSL不支付3.1以上的版本,所以请下载Win64OpenSSL-3_0_12版
- 数据库不需要单独下载,直接运行worldserver.exe会自动从下载的源码中安装数据库
有兴趣的可以在电脑上同时编译安装这二个版本,因为数据表名称不同,不会冲突。
这里是Windows系统下使用最新版源码编译安装教程,适合程序员或动手能力强的同学,如果你阅读本文感觉困难,还是用国内流传的各种一键端吧,一键端不是最新代码,可能有更多BUG,但安装简单。
准备工作
支持的Windows操作系统:Windows 10 1903 (19H1) 及其服务器版本(1903)及更高版本。
软件要求
- Boost ≥ 1.78(建议使用最新稳定版本)
- MySQL ≥ 5.7(强烈推荐使用 8.0 版本)
- OpenSSL ≥ 1.1.x(注意和TC不同,AC最高只能用3.0版本)
- CMake ≥ 3.18.4(建议使用最新稳定版本)
- MS Visual Studio(Community 版本)≥ 17.4(2022 年)(桌面版)(请勿使用预览版,需勾选
使用 C++ 的桌面开发
) - Git(服务端源码管理)
- HeidiSQL(数据库管理工具)
以上工具的安装和使用对有经验的程序员来说毫无压力,甚至不用教,大家点击软件名称可直接转跳官网下载,这里只列几个注意事项:
Boost
Boost推荐安装到默认位置(通常是 C:\local\boost_1_XX_0\),在“系统”变量中添加一个名为“BOOST_ROOT”的环境变量,其值为您的 Boost 安装目录,例如 "C:/local/boost_1_83_0"。重要的是使用斜杠 "/",而不是反斜杠 "\" 指向目录。(确保它没有尾随斜杠(路径的末尾)。

OpenSSL
下载64位版本,并根据您安装的 MySQL 版本,应选择不同的 OpenSSL 版本:
- 对于 MySQL 8.0.34 及更新版本,请使用 OpenSSL v3.0.12。
- 对于 MySQL 8.0 到 8.0.33,请使用 OpenSSL v1.1.1。
注意要安装非 "light" 版本的64位版本。

在安装 OpenSSL 时,在选择要复制 OpenSSL DLLs 的位置时,请选择 The OpenSSL binaries (/bin)
目录(而不是 "Windows 系统目录")。
MS Visual Studio
请直接安装2022 Community 版本最新正式版(不要安装预览版),勾选使用 C++ 的桌面开发
。

源码(AzerothCore)编译
AzerothCore不像TrinityCore 分为两个分支(分别是 3.3.5(巫妖王之怒)和 Master(巨龙崛起)),只有一个默认master分支,对应TC的 3.3.5 版本。
拉取源代码
使用git拉取源代码到本地:
git clone https://github.com/azerothcore/azerothcore-wotlk.git
因为源代码比较大,这对很多人是一个困难的工作,需要会魔法,这里如果卡住了且不会解决,请留言。


配置和使用 CMake 生成 Visual C++ 解决方案
- 点击“Browse Source...” -> 选择源目录(git clone的AC源码目录)
- 点击“Browse Build...” -> 选择构建目录(亲建一个目录用来编译程序)
- 点击“Configure”
- 确保“Use default native compilers”被勾选(默认应该已勾选)。
- 在下拉菜单中,选择在“所需软件”部分下载的编译器版本为"Visual Studio 17 2202"。
- 点击“Finish”。
- 确保“TOOLS_BUILD”选为all。这将编译稍后设置中需要的地图提取工具。
- 再次点击“Configure”。只要在日志窗口中有以红色输入的错误,您就需要检查您的参数并再次点击它。
- 点击“Generate”。这将安装所选的构建文件到您的Build文件夹中。
- 在CMake窗口中使用按钮[Open Project],直接在VS中打开解决方案。





编译源码
在 CMake 窗口中使用 [Open Project
] 按钮直接打开解决方案到 VS。
在顶部的菜单上,把 Debug
,修改为 Release
。

右键单击 ALL_BUILD
,然后选择 生成
。

编译时间因计算机而异,您可以预期它在 5 到 30 分钟之间。如果在编译过程中被要求“Reload build files”,请执行此操作。当构建完成时,您将找到类似于下面的消息(数字可能不同)。
========== Build: 22 succeeded, 0 failed, 0 up-to-date, 1 skipped ==========

你将在编译文件夹中找到新编译的二进制文件。这些文件最终将用于按照此说明运行服务器。

为了使核心正常运行,您需要以下文件:
- libmysql.dll
- legacy.dll
- libcrypto-3-x64.dll
- libssl-3-x64.dll
这4个DLL文件需要复制到编译的服务端程序目录中,文件所在目录如下:libmysql.dll
在 C:\Program Files\MySQL\MySQL Server 8.x\lib
中,其它3个在C:\Program Files\OpenSSL-Win64\bin
中。
请记得将configs
目录中的 worldserver.conf.dist
重命名为 worldserver.conf
,将 authserver.conf.dist
重命名为 authserver.conf
。
Windows 服务器设置
步骤 1
进入 服务端程序所在\bin\Release
文件夹,将下面信息框中显示的文件复制到您的World of Warcraft 根文件夹(Wow.exe 和 Data 文件夹所在位置)中:
mapextractor.exe
mmaps_generator.exe
vmap4extractor.exe
vmap4assembler.exe
3.3.5版中文客户端可以从这里下载:
- https://www.wowdl.net/client/World-of-Warcraft-3.3.5a.12340-zhCN (纯净版,缺少巫妖王之怒相关动画文件,可以从其它端中补)
- http://wow.gameivy.com/zhCN/WoW_v3.3.5_zhCN.zip(国服种子,BT下载)
- https://www.123pan.com/s/4dCeVv-DnQAA.html (非纯净版,但国内下载快一些)
步骤 2
进入AC源码 azerothcore-wotlk\apps\extractor
文件夹,将 extractor.bat
复制到您的 World of Warcraft 根文件夹中(与之前的文件一起)。

步骤 3
运行 "extractor.bat" 并选择您的提取选项。对于全新设置,应选择选项 4 - 提取全部。



这需要的时间取决于工具构建的模式和可用 CPU 核心的数量,对于完全提取,根据硬件不同,可能需要从不到 15 分钟到数小时的时间。
重要注意事项:
- dbc、maps 和 vmaps 是使服务器正常运行所必需的!
- 不要尝试停止 vmaps 提取过程。当它打印 "Press any key..." 时,表示完成。它将创建两个新文件夹:buildings 和 vmaps。buildings 文件夹在运行后完全无用,会自动删除。
- 如果出于任何原因,您手动运行文件(而不使用 extractor.bat),在第一个任务完成之前不要运行另一个任务,否则会出现错误。
- 如果在 vmap4extractor 完成之前停止,您需要在重新开始之前删除 Buildings 目录。
附加注意事项:mmaps 和 Cameras 不是启动服务器所必需的,但必须编辑配置以在没有它们的情况下启动。这绝对不是建议的做法,因为这会导致生物穿过墙壁和其他不受欢迎的问题。
步骤 4
将 vmaps、maps、dbc、cameras和mmaps文件夹移到与 AzerothCore 二进制文件worldserver.exe相同的目录中。您也可以将它们放在其他地方,并在 worldserver.conf 中指向那里。


数据库安装
在 MySQL 中创建数据库
要创建 AzerothCore 需要的 MySQL 数据库,您需要使用 mysql 客户端之一执行以下 MySQL 查询:
这个
create_mysql.sql
文件在azerothcore-wotlk\data\sql\create
目录中。
DROP USER IF EXISTS 'acore'@'localhost';
CREATE USER 'acore'@'localhost' IDENTIFIED BY 'acore' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0;
GRANT ALL PRIVILEGES ON * . * TO 'acore'@'localhost' WITH GRANT OPTION;
CREATE DATABASE `acore_world` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE `acore_characters` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE `acore_auth` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON `acore_world` . * TO 'acore'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `acore_characters` . * TO 'acore'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `acore_auth` . * TO 'acore'@'localhost' WITH GRANT OPTION;
在运行核心之前,您需要使用 MySQL 客户端或 MySQL CLI 使用一个 MySQL root 帐户运行其中一个文件(仅使用 MySQL root 导入其中一个文件,绝不要以 root 或管理员身份运行核心)。

提示:编辑这两个文件,将默认密码更改为其他内容以提高安全性(记得编辑配置文件以使用新密码)。
默认情况下,AzerothCore 需要运行以下三个数据库:
- acore_auth - 包含帐户数据 - 用户名、密码、GM 访问、领域信息等。
- acore_characters - 包含角色数据 - 创建的角色、库存、银行物品、拍卖行、工单等。
- acore_world - 包含游戏体验内容,如NPC、任务、物体等。

填充游戏数据库
和TrinityCOre不同,AC不需要下载数据库,直接启动游戏服务器,会自动从源码中读取SQL文件更新数据库。
启动 worldserver,当它询问是否要创建数据库时按 Enter 键。在完成此步骤之前,请不要启动您的 Authserver。
- 如果出现错误,您可能想要检查 worldserver.conf 中的 mysql 登录凭据并阅读错误消息,因为它可能会告诉您该怎么做。
- 您还可能已删除或移动了用于编译服务器的源文件夹。在这种情况下,您应该在 worldserver.conf 的“连接和目录”下设置名为 "SourceDirectory" 的设置,以指向您移动或下载的源文件夹。
服务器创建数据库后将查找 dbc 文件、maps、mmaps 和 vmaps,如果找不到,它将退出。
如果您在运行时更改了 reamlist 表,则需要重新启动服务器 authserver。

网络配置
注意:如果是纯单机运行,请跳过此部分。
Worldserver 和 Authserver 配置
对于几乎所有基本设置方案,应该保持默认的本地主机(127.0.0.1)IP设置不变。默认的绑定 IP(0.0.0.0)也应该保持不变。
以便来自互联网的客户端能够找到您的服务器,您必须从您的路由器/防火墙转发或打开端口 3724 和 8085,如果计划拥有不同版本的服务器,则需要为其他版本使用不同的 worldserver 端口。
Realmlist 表
您需要确保您的 authserver / bnetserver(6.x 及更高版本)应用程序将传入的连接定向到您的领域。打开 auth 数据库并找到 realmlist 表。您需要根据自己的需求编辑address
字段。
UPDATE realmlist SET address = '[your_ip]' WHERE id = 1;
启动服务器
运行 Authserver
运行 authserver 以启动您的服务器。
提示:authserver 允许您输入用户名/密码以连接到领域(游戏服务器)选择屏幕,而 worldserver 允许您连接到领域(游戏服务器)本身。一旦您进入游戏,如果您不希望其他人连接到服务器,可以安全地关闭 authserver。

创建登录账户
接下来,通过直接在 worldserver 窗口中输入 GM 命令 account create来创建您的登录账户。语法如下:(见下面的示例)
如果您希望将账户设置为 GM,则在 worldserver 窗口中输入以下命令:account set gmlevel $account #level #realmid,其中 $account 是要更改的账户名,#level 可以是 0-3,#realmid 是领域 ID。将 #level 设置为 "3" 是 GM 账户级别(更高的数字表示更多权限),而 "-1" 是领域 ID,表示 "所有领域"。
打开数据库管理工具中的 world 数据库,找到 command 表。该表显示了所有 GM 命令及其描述和使用它们所需的安全性(GM 级别)。在其他地方,您不会找到更准确的当前 GM 命令列表(假设您保持数据库更新)。对于给定命令的安全级别标识了该 GM 级别可以使用该命令,以及所有在它上面的 GM 级别。例如,如果一个命令的安全级别为 2,那么所有 GM 级别为 2、3 和 4 的账户都可以使用它。有关更详细的信息,请参阅 GM 命令页面。
最小化您的服务器并运行 WoW(除非您编辑了上面的 realmlist.wtf 的 patchlist 选项,否则不要使用启动器运行 WoW)。 使用您刚刚创建的用户名/密码登录。 AzerothCore 领域应该可以选择。登录,创建一个角色,您就完成了!

# 要创建您的账户:
输入:account create
示例:account create test test
# 要设置您的账户级别:
输入:account set gmlevel 3 -1
示例:account set gmlevel test 3 -1
# 登录到您的账户:
通过自定义客户端启动器登录(未提供):
用户名:test
密码:test
客户端设置
打开位于您的 World of Warcraft\Data\zhCN 文件夹内的 realmlist.wtf 文件。realmlist.wtf 文件中的 IP 应该与您在上面的 realmlist 表中输入的 IP 地址完全相同。
将第一行更改为:set realmlist 实际上在 realmlist 表中使用的 IP 地址
示例:set realmlist 127.0.0.1
(可选)如果您希望使用 WoW Launcher.exe 运行客户端,则必须将 set patchlist 更改为与您的 realmlist 相同的 IP/dns 名称。
或者直接在WTF目录下改Config.wtf
文件,参考如下:
SET locale "zhCN"
SET realmList "127.0.0.1"
SET hwDetect "0"
SET gxRefresh "144"
SET gxMultisampleQuality "0.000000"
SET gxFixLag "0"
SET videoOptionsVersion "3"
SET movie "0"
SET Gamma "1.000000"
SET readTOS "1"
SET readEULA "1"
SET showToolsUI "1"
SET Sound_OutputDriverName "System Default"
SET Sound_MusicVolume "0.40000000596046"
SET Sound_AmbienceVolume "0.60000002384186"
SET farclip "397"
SET specular "1"
SET groundEffectDensity "24"
SET projectedTextures "1"
SET mouseSpeed "1"
SET accounttype "LK"
SET Sound_EnableReverb "1"
SET Sound_EnableSoftwareHRTF "1"
SET Sound_EnableHardware "1"
SET realmName "Trinity"
SET gxResolution "3840x2160"
SET gameTip "1"
注意事项
可以编辑worldserver.conf
修改游戏的经验倍率等全局数据,以下是部分重要设置:
#
# CharactersPerAccount
# Description: Limit number of characters per account on all realms on this realmlist.
# Important: Number must be >= CharactersPerRealm
# Default: 50
CharactersPerAccount = 50
#
# CharactersPerRealm
# Description: Limit number of characters per account on this realm.
# Range: 1-10
# Default: 10 - (Client limitation)
CharactersPerRealm = 10
#
# HeroicCharactersPerRealm
# Description: Limit number of heroic class characters per account on this realm.
# Range: 1-10
# Default: 1
HeroicCharactersPerRealm = 1
#
# CharacterCreating.MinLevelForHeroicCharacter
# Description: Limit creating heroic characters only for account with another
# character of specific level (ignored for GM accounts)
# Default: 55 - (Enabled, Requires at least another level 55 character)
# 0 - (Disabled)
# 1 - (Enabled, Requires at least another level 1 character)
CharacterCreating.MinLevelForHeroicCharacter = 55
#
# StartPlayerLevel
# Description: Starting level for characters after creation.
# Range: 1-MaxPlayerLevel
# Default: 1
StartPlayerLevel = 1
#
# StartHeroicPlayerLevel
# Description: Staring level for heroic class characters after creation.
# Range: 1-MaxPlayerLevel
# Default: 55
StartHeroicPlayerLevel = 55
#
# SkipCinematics
# Description: Disable cinematic intro at first login after character creation.
# Prevents buggy intros in case of custom start location coordinates.
# Default: 0 - (Show intro for each new character)
# 1 - (Show intro only for first character of selected race)
# 2 - (Disable intro for all classes)
SkipCinematics = 0
#
# StartPlayerMoney
# Description: Amount of money (in Copper) that a character has after creation.
# Default: 0
# 100 - (1 Silver)
StartPlayerMoney = 0
#
# StartHeroicPlayerMoney
# Description: Amount of money (in Copper) that heroic class characters have after creation.
# Default: 2000
# 2000 - (20 Silver)
StartHeroicPlayerMoney = 2000
#
# PlayerStart.String
# Description: String to be displayed at first login of newly created characters.
# Default: "" - (Disabled)
PlayerStart.String = ""
#
# MaxPlayerLevel
# Description: Maximum level that can be reached by players.
# Important: Levels beyond 100 are not recommended at all.
# Range: 1-255
# Default: 80
MaxPlayerLevel = 80
#
# Rate.XP.Kill
# Rate.XP.Quest
# Rate.XP.Explore
# Rate.XP.Pet
# Description: Experience rates (outside battleground)
# Default: 1 - (Rate.XP.Kill)
# 1 - (Rate.XP.Quest)
# 1 - (Rate.XP.Quest.DF) - Dungeon Finder/LFG quests only.
# 1 - (Rate.XP.Explore)
# 1 - (Rate.XP.Pet)
Rate.XP.Kill = 1
Rate.XP.Quest = 1
Rate.XP.Quest.DF = 1
Rate.XP.Explore = 1
Rate.XP.Pet = 1
#
# Rate.Drop.Item.Poor
# Rate.Drop.Item.Normal
# Rate.Drop.Item.Uncommon
# Rate.Drop.Item.Rare
# Rate.Drop.Item.Epic
# Rate.Drop.Item.Legendary
# Rate.Drop.Item.Artifact
# Rate.Drop.Item.Referenced
# Rate.Drop.Money
# Description: Drop rates for money and items based on quality.
# Default: 1 - (Rate.Drop.Item.Poor)
# 1 - (Rate.Drop.Item.Normal)
# 1 - (Rate.Drop.Item.Uncommon)
# 1 - (Rate.Drop.Item.Rare)
# 1 - (Rate.Drop.Item.Epic)
# 1 - (Rate.Drop.Item.Legendary)
# 1 - (Rate.Drop.Item.Artifact)
# 1 - (Rate.Drop.Item.Referenced)
# 1 - (Rate.Drop.Money)
Rate.Drop.Item.Poor = 1
Rate.Drop.Item.Normal = 1
Rate.Drop.Item.Uncommon = 1
Rate.Drop.Item.Rare = 1
Rate.Drop.Item.Epic = 1
Rate.Drop.Item.Legendary = 1
Rate.Drop.Item.Artifact = 1
Rate.Drop.Item.Referenced = 1
Rate.Drop.Money = 1
GM指令
GM指令非常多,这里只列几个参考,更多可以在控制台中输入help查看。

.modify money 999999
.levelup 1
.bank
.saveall
.go xyz -4188 -12493 44.64 530
.server shutdown 10
.gm on 或 .gm off (注意开启GM模式后怪不会攻击你)
.gm fly on 或 .gm fly off (自由的飞翔吧)
登录游戏
双击Wow.exe启动你的客户端,输入账号密码即可进入游戏了。




最后,补充说明:服务端说是要求Windows Server 2019最新版(1903),但本人测试在个人电脑上编译好的服务端上传到我Windows Server 2019 (1809)上也可以正常运行并架设服务器。如果你有兴趣架设服务端可以在个人电脑编译配置好,打包上传到服务端,这样服务器上只用安装MySQL数据库并只需要建表运行服务端,而注册登录则可以使用以下项目:

这个项目支持多语言多版本,只用稍微配置一下即可,有兴趣的也可以直接看看本人架设的测试体验站(可以正常游戏):
增加机器人队友
最后补充一点,网络游戏当单机玩会感觉很寂寞孤单,而且副本单刷也很难,这时就可以增加机器人玩家的方案来解决,机器人玩家就是除了这个角色不是由真实玩家操作外,其它一切功能都和真人一样的玩家角色,可以做任务、加公会、可以PVP、可以达成成就……

因为本文已经很长了,所以机器人队友的介绍单独发文介绍,有兴趣的从以下地址传送: