怎样从零开始编译一个魔兽世界服务端

Posted by xspio on 2018-05-25 16:43:08

这个教程教大家在 64 位 windows 系统下面,怎样从零开始编译一个魔兽世界的服务端(包括 3.3.5 和与官方同步的 7.x 版本),本教程以 7.x 版本为例

下图为 7.x 版本进入游戏后的画面(点击图片查看大图)

https://wx3.sinaimg.cn/large/802c6fe0gy1frnopwtaczj21hc0u0u0z.jpg

MaNGOS 芒果端,也就是 M 端,源码地址:https://github.com/mangos/MaNGOS ,MaNGOS 端所有版本 MaNGOS 官方都会编译好并在服务端源码的 releases 那里放出下载链接,所以大家都不用编译直接下载就可以使用了

教程里源码使用 TrinityCore,也就是T端,如果哪天T端也放出编译好的版本,那就不需要这个教程了,在这里告诉下大家,这些服务端源码都是免费的,编译好后也没有任何限制

有兴趣和能力的同学还可以往里面加一些自定义功能,比如传送啊、PlayerBot(也就是我们说的机器人)啊、自定义附魔啊等等(大部分你在外面看到的功能都已经有人写好了,你只要往服务端源码里加入再编译就行了)

其中 3.3.5 版本基本能实现官方 99% 的功能

7.x 版本则很多系统功能和副本脚本都不是很完善,但也是可玩的,特别是对一些喜欢尝新的同学来说

注:教程里使用的是 win10 64 位的系统,所以大部分的截图和环境设置都是以这个为准,如果你使用的是其他版本的系统,比如 win7,其实基本和 win10 是一致的,一样可以照着教程实现正常编译

系统需求:

CPU 处理器必须支持 SSE2 指令集(一般只要不是太旧的 CPU 都支持) 

Boost 1.65.1

MySQL ≥ 5.1.0

OpenSSL = 1.0.x 

CMake ≥ 3.8.2

MS Visual Studio (Community) ≥ 15 (2017)

Git https://gitforwindows.org (这个请自行安装)


下面开始上面环境的安装

Boost

下载:https://dl.bintray.com/boostorg/release/1.65.1/binaries/boost_1_65_1-msvc-14.1-64.exe

如上图安装到默认位置(一般是 C:\local\boost_1_65_1)

然后在系统中添加环境变量,如下图(点击图片看大图)

http://wx4.sinaimg.cn/large/802c6fe0gy1frlcdnj512j20x20lx0ul.jpg


MySql

编译用 MySql 下载:https://dev.mysql.com/downloads/mysql/5.6.html

下载 Windows (x86, 64-bit), ZIP Archive 这个免安装版本,解压到 D 盘根目录(例 D:\mysql-5.6.40-winx64)


运行用 MySql ,这个用来导入游戏数据库,服务端实际运行在这个数据库下面,编译时不用,后面导入游戏数据库和运行游戏服务端时才用到

这里提供一个绿色免安装的版本,和本站发布的版本里自带那个一样的

链接: https://pan.baidu.com/s/1XQ_NuCj8Vj8xikyUhlJVDw 密码: vunn

解压到(D:\MySql)后运行里面的 MySQL.bat 就行了,连接数据库用户名和密码如下

用户名:root

密码:ascent


OpenSSL

下载:http://slproweb.com/products/Win32OpenSSL.html

注意:下载 64 位的,版本号为 1.0.x 的版本,不要下载 1.1.x 的版本和名字里带 Light 的版本

比如现在下载的 Win64 OpenSSL v1.0.2o,有可能你下载的时候最后的版本字母 o 会不一样

安装的时候如果系统里没有 Microsoft Visual C++ 2008 Redistributable Package (x64)  会出错

VC ++ 2008 64位下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=15336

安装选项里如下图选择,其他的按默认就行了


CMake

下载:https://cmake.org/download/

在 Latest Release 下面找到 Windows win64-x64 Installer ,下载这个

安装的时候记得在生成桌面快捷方式上打勾,其他默认,如下图


MS Visual Studio (Community)

下载:https://www.visualstudio.com/zh-hans/

在下载 windows 版里面选择带 Community 的版本,只有这个是免费的,免费版功能和收费版是一样的

安装的时候注意选项如下图(点击图片放大)

勾选“使用 C ++ 的桌面开发”,如果是 windows 10 的系统,还要勾选右边那两个选项,其他的默认就行了

https://wx3.sinaimg.cn/large/802c6fe0gy1frm72vrytxj20sg0k0dgz.jpg


开始编译

到这里我们的编译环境就已经搭建好了,下面需要下载源码了

TrinityCore 下载地址:https://github.com/TrinityCore/TrinityCore

点击 Branches: master 这里可以切换版本分支,版本分支说明在上面源码下载链接的页面上有说,比如现在显示的是 TrinityCore Open Source MMO Framework (master = 7.3.5.26654, 3.3.5 = 3.3.5a.12340) ,说明 master 代表 7.x 版本,3.3.5 代表 3.3.5a.12340 版本(巫妖王之怒),你要编译哪个版本就切换到哪个版本的分支再下载


提醒:如果你编译的是最新 master 分支的版本,一定要先运行 魔兽世界 客户端,检查两个版本号是否对应,不相同就不要编译了,运行不会成功的

客户端版本查看,运行桌面的 魔兽世界 快捷方式,或者在 魔兽世界 文件夹里面运行 World of Warcraft Launcher ,会在上面显示版本信息,我这里显示的版本号也是 7.3.5.26654 ,说明服务端和客户端版本是匹配的,如果不匹配,那你可以更新 魔兽世界 到最新版本,或者等 TrinityCore 更新服务端源码到现在客户端相同版本后才可以编译,否则就不要编译了,编译好了也会因版本不对应而无法进入游戏


这里以 master 分支为例,点击右边的绿色按钮 Clone or download ,点击 Download ZIP 开始下载,下载好后把 TrinityCore-master.zip 解压到 D 盘根目录,重命名 TrinityCore-master 文件夹名称为 Trinity

在 D 盘根目录新建一个命名为 Build 空文件夹,用来放 CMake 生成的源码程序(后面编译好的服务端程序也在这里)

运行安装好的 CMake,刚刚新建了桌面快捷方式的话在桌面就可以直接找到了,没有的话在默认安装目录 C:\Program Files\CMake\bin 运行 cmake-gui.exe

如上图,点击 Browse Source... 选择源码文件夹 D:\Trinity ,点击 Browse Build... 选择 D:\Build 文件夹,然后点击 Configure

上图这里选择 Visual Studio 15 2017 Win64 这个选项,选好后点击 Finish

因为在教程里没有使用安装版的 MySql ,会出现下面错误,点击 OK

MySql 的库文件配置如下图所示(在 Value 这一列点击后输入框右边会出现“...”图标,点击进行选择)

如上图这样设置好 MySql 后,再次点击 Configure 按钮,当 CMake 消息框中出现 Configuring done 字样时,说明配置成功

这时再点击 Generate 按钮,CMake 消息框中出现 Generating done 字样,同时 Open Project 按钮变为可用,点击 Open Project 按钮

这样 CMake 会自动使用 VS 打开生成的源码,VS 刚打开的时候,VS 状态栏会提示“正在分析...”这样类似的字样,状态栏显示“就绪”说明 VS 分析完成了

现在我们点击 VS 菜单栏的“生成”菜单项,选择“配置管理器”如下图配置(点击图片看大图)

https://wx3.sinaimg.cn/large/802c6fe0gy1frmek48bucj20oh0gaq3v.jpg

上图“活动解决方案配置”这个选择“RelWithDebInfo”,“活动解决方案平台”选择“x64”,选择好后点击“关闭”

这里 VS 会再次扫描整个方案,等状态栏显示“就绪”后,在 VS 的“解决方案资源管理器”面板里面,右键 ALL_BUILD,选择“生成”

这个过程视每个人的电脑不同,所用时间也不尽相同,我电脑配置差,下去喝杯水先 

片刻后...

项目生成成功,在 VS 的“输出”框内显示如下类似信息

========== 生成: 成功 26 个,失败 0 个,最新 0 个,跳过 0 个 ==========

生成的文件在 D:\Build\bin\RelWithDebInfo 目录里面,至此源码编译就已经完成了


解压 DBC, Maps, VMaps 和 MMaps

在 D:\Build\bin\RelWithDebInfo 文件夹里面,拷贝下面4个文件到 魔兽世界 客户端里面

mapextractor.exe

mmaps_generator.exe

vmap4assembler.exe

vmap4extractor.exe

在 D:\Trinity\contrib 文件夹里面,拷贝 extractor.bat 到 魔兽世界 客户端里面

上面文件全部拷贝完成后,双击拷贝进 魔兽世界 客户端里面的 extractor.bat ,在弹出的对话框中输入数字 4 (解压全部)后敲“回车”键,提示你“This may take a few hours to complete. Please be patient.”意思是全部解压得花好些个小时,你得耐心一点,再次敲“回车”键后开始解压

解压文件可能要花 7 到 8 个小时,在这个过程中最好不要运行其他的程序或者说动电脑,让电脑自己安安静静完成解压

我晚上 10 点开始解压,睡一觉,明天一早应该就解压好了

睡觉中...

一早起床...

如上图中红线所示,花了 25356094 毫秒,我掐指一算,整整 7 个小时啊...

你会发现在魔兽世界客户端里面生成了 DBC , Maps , GT , VMaps 和 MMaps 这几个文件夹,说明已经解压好了

如果没有出现 GT 文件夹,请删除 DBC 和 Maps 文件夹并重新运行一次 extractor.bat ,选择 1

还有一个 buildings 文件夹,这个在生成成功后可以删除


服务端配置

在 D 盘根目录,新建一个 TrinityCore 的文件夹,把上面生成的 DBC , Maps , GT , VMaps 和 MMaps 这几个文件夹复制或者剪切到这里来

在编译好的 D:\Build\bin\RelWithDebInfo 文件夹里面,把下面的文件拷贝到 D:\TrinityCore 文件夹中

bnetserver.cert.pem

bnetserver.conf.dist

bnetserver.exe

bnetserver.key.pem

bnetserver.pdb

worldserver.conf.dist

worldserver.exe

worldserver.pdb

然后把 bnetserver.conf.dist 和 worldserver.conf.dist 文件名后面的 .dist 删除掉变成 bnetserver.conf 和 worldserver.conf

还有几个文件需要拷贝进来

在 D:\mysql-5.6.40-winx64\lib 文件夹里面,把 libmysql.dll 拷贝到 D:\TrinityCore 文件夹中

在 C:\OpenSSL-Win64 文件夹里面,把 libeay32.dll 和 ssleay32.dll 拷贝到 D:\TrinityCore 文件夹中


数据库配置

数据库的操作要在 MySql 运行中的状态下实现

之前 MySql 部分说过的 运行用 MySql 这个版本(不是编译用那个版本),运行里面的 MySQL.bat ,运行成功显示如下

如果在上面框里显示 MySQL could not be started 就说明运行没成功,如果你下过我上传的服务端版本,可以在里面找 closeAll.bat 这个 bat 工具,右键使用管理员权限运行一下再重新运行 MySQL.bat ,再不行你只能自行上网查找解决方法了,我建议你最好重装新系统,这样绝对不会出现运行不了的问题

下载创建数据库的 sql 文件:https://github.com/TrinityCore/TrinityCore/blob/master/sql/create/create_mysql.sql 打开这个页面,在 RAW 这个按钮上面鼠标右键,选择“链接另存为”,把 create_mysql.sql 保存到 D 盘根目录

MySql 运行成功后使用 Navicat 连接数据库,教程在此:https://www.xspio.com/魔兽世界物品道具制作修改所需工具下载

在 Navicat 里,新建一个 MySql 链接(用户名:root,密码:ascent),假设这个链接为 wow ,在右键菜单里选择“运行 SQL 文件...”,如下图

“文件”选择刚刚下载的 create_mysql.sql ,“编码”选择“UTF-8”,点击“开始”,成功后会添加 auth 、 characters 、 hotfixes 、 world 四个数据库,并添加数据库用户 trinity ,数据库到此就创建成功了


服务端数据库下载:https://github.com/TrinityCore/TrinityCore/releases

在上面这个下载页面可以看到, TDB 7xx.00 打头的是 7.x 服务端用的数据库, TDB 335.xx 这个是 3.3.5 版本用的数据库,我们编译的是 7.x 的服务端,那就下载 TDB_full_7xxx.7z 这个最新的数据库,下载好后解压到 D 盘根目录

在解压出来的 D:\TDB_full_7xxx 文件夹中,找到“TDB_world_xxx”和“TDB_hotfixes_xxx”两个文件,拷贝到 D:\TrinityCore 目录中去


服务端运行

在 D:\TrinityCore 目录,修改一个文件后,服务端就可以运行了

用编辑器打开 worldserver.conf ,编辑器可以使用 vscode  、 sublime 等等,最好不要用记事本打开

修改 DBC.Locale = 0 ,改成 DBC.Locale = 4 (这个是因为使用的是中文的游戏客户端)

修改 mmap.enablePathFinding = 0 ,改成 mmap.enablePathFinding = 1 (这个可以改善怪物的寻路,免得怪物飞天之类的发生)

修改好后现在运行 D:\TrinityCore 里面的 worldserver.exe ,程序会自动创建、导入并更新数据库,红线标明了正在导入的数据库,如下图(点击图片看大图)

https://wx4.sinaimg.cn/large/802c6fe0gy1frng21hbnyj20r70e874e.jpg

如果出现“无法启动此程序,因为计算机中丢失 xxxx ....”这样类似的错误信息,那就需要安装 vc++ 的运行库,最好把 vc++ 的所有版本都安装上

下载:https://www.xspio.com/魔兽世界服务端运行所需运行库下载(运行提示出错的请下载安装这些运行库)

在听到“滴”或者“嘟”的一声后,说明运行完成

现在创建账号,在 worldserver.exe 运行窗口的命令行下面敲“回车”键,出现 TC> 这样的标志,输入 bnetaccount create test@test test 命令后“回车”,创建账号名为 test@test 密码为 test 的账号,其中的 game account 1#1 的意思是新建的这个 test@test 在游戏数据库里使用 1#1 表示,然后我们把 test@test 这个账号升级为 GM 账号,输入命令 account set gmlevel 1#1 3 -1 ,成功,上面操作如下图所示(点击图片看大图)

https://wx4.sinaimg.cn/large/802c6fe0gy1frnnmslpvdj20r70e8mxe.jpg

然后再运行 bnetserver.exe (这个只在登录游戏账号的时候使用,进入游戏后可以关闭),至此服务端就运行成功了


登录游戏

用编辑器打开你的游戏客户端里面的 WTF\Config.wtf 文件,修改这行 SET portal "CN" 为 SET portal "127.0.0.1"

把 D:\Build\bin\RelWithDebInfo 里面的 connection_patcher.exe 和 刚刚放进 D:\TrinityCore 目录的 libeay32.dll 拷贝到游戏客户端里面,把 Wow-64.exe 拖到 connection_patcher.exe 图标上面放开,会生成 Wow-64_Patched.exe 文件,运行 Wow-64_Patched.exe 这个文件进入游戏,在游戏账号那里输入刚刚创建的 test@test ,密码输入 test 就成功连接了,如果弹出服务器选择框,选择 Trinity 就行了

游戏截图(点击图片看大图)

https://wx4.sinaimg.cn/large/802c6fe0gy1frnobrq4w3j21hc0u0qv8.jpg

gravatar头像 jing
2018-10-11 17:44:29
Detected 64-bit platform MSVC: 64-bit platform, enforced -D_WIN64 parameter MSVC: Enabled increased number of sections in object files MSVC: Overloaded standard names MSVC: Disabled NON-SECURE warnings MSVC: Disabled POSIX warnings MSVC: Disabled generic compiletime warnings cotire 1.7.10 loaded. Found MySQL library: E:/TC/TrinityBuilderV3/TrinityBuilder/Tools/database/MySQL-8.0.12-Win64/lib/libmysql.lib Found MySQL headers: E:/TC/TrinityBuilderV3/TrinityBuilder/Tools/database/MySQL-8.0.12-Win64/include Found MySQL executable: E:/TC/TrinityBuilderV3/TrinityBuilder/Tools/database/MySQL-8.0.12-Win64/bin/mysql.exe CMake Error at cmake/macros/FindGit.cmake:24 (message): Git was NOT FOUND on your system - did you forget to install a recent version, or setting the path to it? Observe that for revision hash/date to work you need at least version 1.7 Call Stack (most recent call first): CMakeLists.txt:70 (find_package) Configuring incomplete, errors occurred! See also "E:/TC/TrinityCore-bfa/build/CMakeFiles/CMakeOutput.log". 大佬,这是什么意思啊
2018-10-12 20:25:03
你电脑里东西太多了,你在干净的环境下使用吧
gravatar头像 jing
2018-10-11 17:44:29
Detected 64-bit platform MSVC: 64-bit platform, enforced -D_WIN64 parameter MSVC: Enabled increased number of sections in object files MSVC: Overloaded standard names MSVC: Disabled NON-SECURE warnings MSVC: Disabled POSIX warnings MSVC: Disabled generic compiletime warnings cotire 1.7.10 loaded. Found MySQL library: E:/TC/TrinityBuilderV3/TrinityBuilder/Tools/database/MySQL-8.0.12-Win64/lib/libmysql.lib Found MySQL headers: E:/TC/TrinityBuilderV3/TrinityBuilder/Tools/database/MySQL-8.0.12-Win64/include Found MySQL executable: E:/TC/TrinityBuilderV3/TrinityBuilder/Tools/database/MySQL-8.0.12-Win64/bin/mysql.exe CMake Error at cmake/macros/FindGit.cmake:24 (message): Git was NOT FOUND on your system - did you forget to install a recent version, or setting the path to it? Observe that for revision hash/date to work you need at least version 1.7 Call Stack (most recent call first): CMakeLists.txt:70 (find_package) Configuring incomplete, errors occurred! See also "E:/TC/TrinityCore-bfa/build/CMakeFiles/CMakeOutput.log". 大佬,这是什么意思啊
gravatar头像 lin
2018-08-21 10:36:02
您好,mysql的遊戲數據庫 https://pan.baidu.com/s/1XQ_NuCj8Vj8xikyUhlJVDw,已經沒辦法下載了,謝謝
lin
2018-08-21 10:49:24
我知道了是vpn的問題,謝謝
gravatar头像 Nicotine-2
2018-08-06 01:02:50
非常好的教程,简单易懂,膜拜~ 希望可以再出一个在服务端里编译加入机器人和其他传送之类的教程:D 让我们这些小白也可以自己动手装逼一回~~.
2018-08-07 10:30:35
BOT 源码在这里, https://github.com/ike3/mangosbot,如果自己不会加还是直接用现成的吧
gravatar头像 张于晏
2018-08-03 20:39:01
你好,很感谢你出这样的教学内容,但是我在编译时候还是出现了问题,mysql路径设置完成后继续编译,还是报和没设置路径时候一样的错误。 CMake Deprecation Warning at CMakeLists.txt:22 (cmake_policy): The OLD behavior for policy CMP0005 will be removed from a future version of CMake. The cmake-policies(7) manual explains that the OLD behaviors of all policies are deprecated and that a policy should be set to OLD only under specific short-term circumstances. Projects should be ported to the NEW behavior and not rely on setting a policy to OLD. CMake Deprecation Warning at CMakeLists.txt:24 (cmake_policy): The OLD behavior for policy CMP0043 will be removed from a future version of CMake. The cmake-policies(7) manual explains that the OLD behaviors of all policies are deprecated and that a policy should be set to OLD only under specific short-term circumstances. Projects should be ported to the NEW behavior and not rely on setting a policy to OLD. 我试着下载了gitforwindows,但是我是一路默认安装下去的 不知道会不会哪里出问题了
2018-08-04 16:07:35
在新安装系统上按教程从头来一遍,先把系统环境的问题排除掉
gravatar头像 Menethil
2018-06-28 07:35:45
我尝试用这个方法编译 Light Hope V10的源代码,编译出来只有2个EXE,mangosd 和 realmd,复制到Light Hope Repack目录下在本机能运行,在其他电脑就显示无法定位程序输入点,不知道怎么解决
2018-06-28 08:45:11
服务端的目录结构你在新机器上设置和编译的一样试试
gravatar头像 aaaaa
2018-06-23 22:10:57
你提供的那些rar文件解压密码是多少啊。。。
gravatar头像 爱如潮水
2018-06-06 00:17:49
你好,我编译时CMAKE总是有问题大概意思提示myaql位置无效,明明按照你的设置了,错误24,希望看到后能讲一下 谢谢
爱如潮水
2018-06-06 00:19:38
CMake Deprecation Warning at CMakeLists.txt:22 (cmake_policy): The OLD behavior for policy CMP0005 will be removed from a future version of CMake. The cmake-policies(7) manual explains that the OLD behaviors of all policies are deprecated and that a policy should be set to OLD only under specific short-term circumstances. Projects should be ported to the NEW behavior and not rely on setting a policy to OLD. Detected 64-bit platform MSVC: 64-bit platform, enforced -D_WIN64 parameter MSVC: Enabled increased number of sections in object files MSVC: Overloaded standard names MSVC: Disabled NON-SECURE warnings MSVC: Disabled POSIX warnings MSVC: Disabled generic compiletime warnings cotire 1.7.10 loaded. Found MySQL library: D:/mysql-5.6.40-winx64/lib/libmysql.lib Found MySQL headers: D:/mysql-5.6.40-winx64/include Found MySQL executable: D:/mysql-5.6.40-winx64/bin/mysql.exe CMake Error at cmake/macros/FindGit.cmake:24 (message): Git was NOT FOUND on your system - did you forget to install a recent version, or setting the path to it? Observe that for revision hash/date to work you need at least version 1.7 Call Stack (most recent call first): CMakeLists.txt:70 (find_package) Configuring incomplete, errors occurred! See also "D:/Build/CMakeFiles/CMakeOutput.log".
2018-06-06 09:29:23
忘了个东西,你下载 git 并安装,https://gitforwindows.org
爱如潮水
2018-06-06 09:51:22
是的,昨晚考虑到编译出来了,谢谢,还要麻烦你一下mysql这个东西怎么启动,卡在建立数据库这了。。。
×