从零开始编译一个基于 AzerothCore 的《魔兽世界》模拟器服务端

Jamfer
首先必须说明,目前比较知名的两款WOW模拟器,AzerothCore 和 TrinityCore 都只是「模拟器」而已,存在很多BUG(虽然一直在修复),拿来研究学习自娱自乐就好,切勿用于商业行为。



下面的教程以 AzerothCore 为例来记录如何在 64 位 Windows10 系统下,下载、编译、运行这款模拟器。
注:AzerothCore 是基于 3.3.5 版本的《魔兽世界》的。

我用到的软件


MySQL 5.6.48
OpenSSL 1.1.1g
CMake 3.17.2
Visual Studio 2017
Git 2.26.2

软件下载


1.MySQL 5.6.48 的安装请参考:/post/176,操作数据库的软件我用的是 Navicat for MySQL。

2.OpenSSL 1.1.1g
OpenSSL 的下载地址在:http://slproweb.com/products/Win32OpenSSL.html,不要下载名字里带 Light 的版本,我这里把 32 位和 64 位都下载安装了一遍,安装的时候如果系统里没有 Microsoft Visual C++ 的话会报错。

3.CMake
CMake 的下载地址在:https://cmake.org/download/,找到 Windows win64-x64 Installer 的安装版下载安装即可,注意如果你的系统里有低版本要先卸载。

4.Visual Studio 2017
VS 的下载地址在:https://visualstudio.microsoft.com/zh-hans/downloads/,选择社区(Community)的版本,这个是免费的。
另外我从 VS 2015 到 2019 全部都试过了,最终发现 2017 最稳定好用,当然也可能是我自己的问题,你可以试试 2019,下面的教程以 VS 2017 为例。

5.Git 的 Win 版下载地址在:https://git-scm.com/download/win,下载安装即可,没啥好说的

编译教程


1.第一步新建两个文件夹 \az 和 \build 后面会用到,我都放到 D 盘根目录下了。

2.先到 AZ 的官方 github 下载最新的代码 https://github.com/azerothcore/azerothcore-wotlk,分支(branches)选择默认的 master 就可以了。然后可以直接点击 Download ZIP 下载下来(当然,你也可以用 git clone,一样的,我是懒得给 git 挂代理了)。然后把下载下来的代码解压到 D:\az 文件夹里。

3.运行刚才安装好的 CMake,在 Where is the source code 这里选择 D:/az。下面一栏选择 D:/build,然后点击 Configure 前两项分别选择 VS 2017 和 x64,其他默认即可。


之后会看到 Configuring done 的字样就表示完成了。


4.这时候选择 Generate 之后是 Open Project,就自动打开 VS 2017 了。右侧栏选择 ALL_BUILD 右键 -> 生成。然后静静等待完成即可。

是不是觉得太简单了,接下来才是重点,一般这种情况下会遇到几个问题,我逐一说明:

1.首先是 Cmake 生成的过程中可能会遇到 Mysql 报错,提示找不到 Mysql(因为我们的 Mysql 是绿色安装的),这里需要设置 MYSQL_INCLUDE_DIR = /MySQL文件夹/include 和 MYSQL_LIBRARY = /MySQL文件夹/lib/libmysql.lib。

2.如果在 VS 2017 build 过程中报错,提示 D:\az\src\server\worldserver\Master.cpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。这种情况下用代码编辑器(例如 sublime)分别打开 D:\az\src\server\worldserver\Master.cpp 和 D:\az\src\server\authserver\Main.cpp 删掉其中用字符代码构成的那一段包含在 sLog->outString(); 里的 AZEROTHCORE。



然后重新生成一遍,直到最后出现:「失败 0 个,跳过 0 个」。的字样,说明成功了,编译工作到此结束。

配置文件


打开编译完成的文件夹,我的是在 D:\az\build\bin\Debug。
可以删掉所有的 .ilk 文件和 ace.pdb 文件,一共6个。
然后复制 authserver.conf.dist 一份重命名为 authserver.conf,复制 worldserver.conf.dist 一份重命名为 worldserver.conf(注:不要删除 .dist 文件)
到 MySQL 安装目录下的 lib 文件夹下复制 libmysql.dll 到编译完成的文件夹中(\Debug)。
到 OpenSSL 安装目录(C:\Program Files\OpenSSL-Win64)下复制 libcrypto-1_1-x64.dll 和 libssl-1_1-x64.dll 到编译完成的文件夹中。
分别打开 authserver.conf 和 worldserver.conf 找到 LoginDatabaseInfo 的部分根据你的实际情况配置数据库,格式是:IP:端口;用户名;密码;数据库。
LoginDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_auth"
WorldDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_world"
CharacterDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_characters"

还是上面两个文件,分别找到 LogsDir = 和 DataDir = 的部分改为:
DataDir = "data"
LogsDir = "logs"


下载数据包


在编译完成的文件夹中新建两个文件夹,分别是 data 和 logs。
接下来我们要提取 data 数据包。
你可以使用「AzerothCore 提取器」从您自己的 WOW 客户端提取客户端数据(很花时间)。也可以直接下载现成的,下载地址是:https://github.com/wowgaming/client-data/releases/tag/v7,下载 data.zip 完毕后解压缩到 data 文件夹里,一共是四个文件夹,分别是 \dbc \maps \mmaps \vmaps。

数据库配置


首先要把 Mysql 设为系统环境变量,这部分可以参考这里的教程:https://www.azerothcore.org/wiki/Environment-Variable

用 Navicat 打开本地的 Mysql,新建三个数据库,分别是 acore_auth、acore_characters 和 acore_world。

打开文件夹 D:\az,空白处右键选择 Git Bash Here,运行命令 bash apps/db_assembler/db_assembler.sh,然后输入数字5,选择 import-all: Assemble & Import all。



之后程序会自动导入数据到数据库里。过程中可能需要你输入一次数据库的用户名和密码,当出现 「===== DONE =====」字样的时候说明导入成功了,可以在 Navicat 里查看三个数据库是否有一堆数据表出现。

启动服务器


首先启动 authserver.exe
之后启动 worldserver.exe
等待所有内容加载完毕,在 worldserver 的窗口中输入「.account create 帐号 密码」来创建一个账号

客户端登录


首先到:https://pan.baidu.com/s/147ZHRA5huvWcYTqpd04cJg 下载 3.3.5(13930) 中文版的客户端(ejxc)。
但是你还需要两个东西才能登录本地服务端,首先是需要把客户端的版本改为 12340,然后还有需要一个登录器。这两样东西同样可以在上面的链接里下载到,都丢进客户端根目录下并且覆盖掉 exe 文件就行了(记得备份)。
最后,运行 bat 登录器启动客户端,输入账号密码就可以进入游戏了。