魔兽世界单机版服务端编译和运行指南(AzerothCore)

vinci 发布于 13 天前 23 次阅读


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

先上图,看看最终架设后在个人电脑上的运行效果:

v2-e4050d51b7868fcd1203d936fd9ccd87_1440w
v2-5cc399b57aed8d100c140e1eb9a4dfa5_1440w
v2-75e71cd059ffd1a2f0535e4c0b489618_1440w
v2-fed89a2facf8ac19d0e790e81e9ab79e_1440w

Azerothcore服务器的安装编译方式和TC基本一样,源码地址为:

github.com/azerothcore/

但和TC编译相比有二点需注意:

  • OpenSSL不支付3.1以上的版本,所以请下载Win64OpenSSL-3_0_12版
  • 数据库不需要单独下载,直接运行worldserver.exe会自动从下载的源码中安装数据库

有兴趣的可以在电脑上同时编译安装这二个版本,因为数据表名称不同,不会冲突。

这里是Windows系统下使用最新版源码编译安装教程,适合程序员或动手能力强的同学,如果你阅读本文感觉困难,还是用国内流传的各种一键端吧,一键端不是最新代码,可能有更多BUG,但安装简单。

准备工作

azerothcore.org/wiki/wi

支持的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"。重要的是使用斜杠 "/",而不是反斜杠 "\" 指向目录。(确保它没有尾随斜杠(路径的末尾)。

v2-cd520793b2d8881dd4dc825b9b40487f_1440w

OpenSSL

下载64位版本,并根据您安装的 MySQL 版本,应选择不同的 OpenSSL 版本:

- 对于 MySQL 8.0.34 及更新版本,请使用 OpenSSL v3.0.12。

- 对于 MySQL 8.0 到 8.0.33,请使用 OpenSSL v1.1.1。

注意要安装非 "light" 版本的64位版本。

v2-3e435c44f9aca5669d8f40e9cda46433_1440w

在安装 OpenSSL 时,在选择要复制 OpenSSL DLLs 的位置时,请选择 The OpenSSL binaries (/bin) 目录(而不是 "Windows 系统目录")。

MS Visual Studio

请直接安装2022 Community 版本最新正式版(不要安装预览版),勾选使用 C++ 的桌面开发

v2-71495ced50b56e5666a74837a68500be_1440w

源码(AzerothCore)编译

azerothcore.org/wiki/wi

AzerothCore不像TrinityCore 分为两个分支(分别是 3.3.5(巫妖王之怒)和 Master(巨龙崛起)),只有一个默认master分支,对应TC的 3.3.5 版本

拉取源代码

使用git拉取源代码到本地:

git clone https://github.com/azerothcore/azerothcore-wotlk.git

因为源代码比较大,这对很多人是一个困难的工作,需要会魔法,这里如果卡住了且不会解决,请留言。

v2-9e01e9d8ab74460a39b09a4185872cbf_1440w
v2-660ac52be3371db0a4d496d9c02059a1_1440w

配置和使用 CMake 生成 Visual C++ 解决方案

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

编译源码

在 CMake 窗口中使用 [Open Project] 按钮直接打开解决方案到 VS。

在顶部的菜单上,把 Debug,修改为 Release

v2-968941b5ca239aa9927c9a9981c9ddb4_1440w

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

v2-5d9a479c00b35f2752875eaa1d5df498_1440w

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

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

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

v2-218109c9cb2222c763c005ae3b0de346_1440w

为了使核心正常运行,您需要以下文件:

  • 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 服务器设置

azerothcore.org/wiki/wi

步骤 1

进入 服务端程序所在\bin\Release文件夹,将下面信息框中显示的文件复制到您的World of Warcraft 根文件夹(Wow.exe 和 Data 文件夹所在位置)中:

mapextractor.exe
mmaps_generator.exe
vmap4extractor.exe
vmap4assembler.exe

3.3.5版中文客户端可以从这里下载:

步骤 2

进入AC源码 azerothcore-wotlk\apps\extractor 文件夹,将 extractor.bat 复制到您的 World of Warcraft 根文件夹中(与之前的文件一起)。

v2-f7465de3350296f9f6aec48885583503_1440w

步骤 3

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

v2-f445c982ef89baa8af616507c107b066_1440w
v2-cd02d38e50a571f097721064207be0eb_1440w
v2-990a9b88586a2c7a71d564f0bf8a4312_1440w

这需要的时间取决于工具构建的模式和可用 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 中指向那里。

v2-4a537135468d345f2cffd8d301728b14_1440w
v2-4e1a53e1b9274b40dec3e7aa4ab20031_1440w

数据库安装

azerothcore.org/wiki/da

在 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 或管理员身份运行核心)。

v2-1d068cf5b973cdc01512fdfec6077c54_1440w

提示:编辑这两个文件,将默认密码更改为其他内容以提高安全性(记得编辑配置文件以使用新密码)。

默认情况下,AzerothCore 需要运行以下三个数据库:

  • acore_auth - 包含帐户数据 - 用户名、密码、GM 访问、领域信息等。
  • acore_characters - 包含角色数据 - 创建的角色、库存、银行物品、拍卖行、工单等。
  • acore_world - 包含游戏体验内容,如NPC、任务、物体等。
v2-adac1e0d9653ae1f5d6ca537e3191c81_1440w

填充游戏数据库

和TrinityCOre不同,AC不需要下载数据库,直接启动游戏服务器,会自动从源码中读取SQL文件更新数据库。

启动 worldserver,当它询问是否要创建数据库时按 Enter 键。在完成此步骤之前,请不要启动您的 Authserver。

  • 如果出现错误,您可能想要检查 worldserver.conf 中的 mysql 登录凭据并阅读错误消息,因为它可能会告诉您该怎么做。
  • 您还可能已删除或移动了用于编译服务器的源文件夹。在这种情况下,您应该在 worldserver.conf 的“连接和目录”下设置名为 "SourceDirectory" 的设置,以指向您移动或下载的源文件夹。

服务器创建数据库后将查找 dbc 文件、maps、mmaps 和 vmaps,如果找不到,它将退出。

如果您在运行时更改了 reamlist 表,则需要重新启动服务器 authserver。

v2-6e7933e0eaa78bf2d8b8468fc8877be3_1440w

网络配置

azerothcore.org/wiki/ne

注意:如果是纯单机运行,请跳过此部分。

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;

启动服务器

azerothcore.org/wiki/fi

运行 Authserver

运行 authserver 以启动您的服务器。

提示:authserver 允许您输入用户名/密码以连接到领域(游戏服务器)选择屏幕,而 worldserver 允许您连接到领域(游戏服务器)本身。一旦您进入游戏,如果您不希望其他人连接到服务器,可以安全地关闭 authserver。

v2-85b09b19b1141eef3d9d289ee42c2625_1440w

创建登录账户

接下来,通过直接在 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 领域应该可以选择。登录,创建一个角色,您就完成了!

v2-e4325a352b80ec003b097fc093a172a6_1440w
# 要创建您的账户:
输入: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查看。

v2-22d098476826d486521cb7f1c263501e_1440w
.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启动你的客户端,输入账号密码即可进入游戏了。

v2-e66bc24cea1cf43e17ed5891f9bfcffc_1440w
v2-75e71cd059ffd1a2f0535e4c0b489618_1440w
v2-c21478be61b15b24908dc4c11c21667a_1440w
v2-988ef3eb518fc2b1d65e6582e977f725_1440w

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

v2-8290150e34e595c8923becb28862870d_1440w

这个项目支持多语言多版本,只用稍微配置一下即可,有兴趣的也可以直接看看本人架设的测试体验站(可以正常游戏):

增加机器人队友

最后补充一点,网络游戏当单机玩会感觉很寂寞孤单,而且副本单刷也很难,这时就可以增加机器人玩家的方案来解决,机器人玩家就是除了这个角色不是由真实玩家操作外,其它一切功能都和真人一样的玩家角色,可以做任务、加公会、可以PVP、可以达成成就……

v2-38415da7cc1a8ceb105c5a1a538f8715_1440w

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

v2-7ce85c101ff4f59771bb50c9d8af715a_180x120
原文:https://zhuanlan.zhihu.com/p/672284712
此作者没有提供个人介绍。
最后更新于 2025-05-19