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

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

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

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

/storage/postimg/ZEpga4TU3Q9ayaYmwiBId1MBGffOEXkHRFLbFo1a.jpeg

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)

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

/storage/postimg/5uCrj6m5u4fqxz6llANS7J54kYrOhi4mqmrvNohk.jpeg


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 的系统,还要勾选右边那两个选项,其他的默认就行了

/storage/postimg/2dp95YfRpzycB1Rh4lgF0R03pbofmjDLgqJmPC4l.jpeg


开始编译

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

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 菜单栏的“生成”菜单项,选择“配置管理器”如下图配置(点击图片看大图)

/storage/postimg/c2RMAFGhPVmC2tIbNr3efrAZAEGvgHefgjVpJGCt.jpeg

上图“活动解决方案配置”这个选择“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 文件夹(3.3.5 版本没有这个,只要能成功生成 VMaps 和 MMaps 就行了),请删除 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 ,程序会自动创建、导入并更新数据库,红线标明了正在导入的数据库,如下图(点击图片看大图)

/storage/postimg/ghA2bKmrQvaYNLzeAor1SLf7ssPO8Pk05AoJcH9s.jpeg

如果出现“无法启动此程序,因为计算机中丢失 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 ,成功,上面操作如下图所示(点击图片看大图)

/storage/postimg/nAEYltgbuM80904D1lm8E5EKmRKmHPrvwFJK4zpF.jpeg

然后再运行 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 就行了

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

/storage/postimg/61j1t1570JS78J4IG3MjejqOCA3sSLDy.jpg

gravatar头像 往事
2020-05-24 20:01:33
请问大大,你这个教程适用于AZ端源码不?
KK
2020-05-24 20:12:00
同时追问一下,这个教程适用S端不
gravatar头像 黛~~~
2020-05-08 11:36:07
小白 大神收徒弟吗
2020-05-02 20:44:04
T端直接支持中文的么?看你的这个是中文的。
2020-05-04 14:48:28
有中文的
gravatar头像 阿飞阿飞阿飞
2020-03-30 14:51:31
大佬你好,请教一个问题,编译成功以后,从装了系统,然后不能运行了,把vs,cmk什么的都从装一遍才能运行,请问解决办法,我看你发布的服务端,下载以后就可以直接运行,望解答
2020-03-30 15:10:52
运行库
gravatar头像 阿飞阿飞
2020-03-16 12:41:31
每次编译有时候是4个失败,有时候2个
2020-03-16 22:36:05
源码更新后有可能出现这种情况,等更新修正这些问题就好了,没问题就用没问题的就好了,不用时时更新
阿飞阿飞
2020-03-18 21:10:42
好的 感谢大哥百忙之中回复,感谢感谢
球球爸爸
2020-03-24 12:37:08
用vs2017就没有了,你一定用的是2019
gravatar头像 阿飞阿飞
2020-03-16 12:33:40
大哥 我想请问一下,编译335的时候 按照教程 VS里面生成有时候成功了,没有0失败, 有时候又有4个失败的,没有动过源码的情况都是这样
gravatar头像 球球爸爸
2020-02-28 11:38:29
大神你好,按照你的教程成功的编译好了服务器,也可以正常进入游戏了,希望你出一个手把手教你做传送宝石的教程,万分感谢
球球爸爸
2020-02-28 11:42:06
以前玩过一个叫空穴来枫编译的548端,他里面的就有传送宝石,任务完成,基维斯,脱战等等,在背包里的物品,右键点击就可以使用,希望得到你的回复
球球爸爸
2020-02-28 15:14:56
我在网上下载了‘WOW-超级传送宝石[传送地址很多]’可是不会用啊,应该是c++脚本吧,请问如何使用
2020-02-28 21:52:33
教程现在没时间做
球球爸爸
2020-02-29 11:07:38
期待您的更新
gravatar头像 塔琳托娅
2020-02-22 10:32:42
你好,最近出不了门,按照您的教程编译了335服务端,用到的工具,Git-2.25.1-64-bit Win64OpenSSL-1_0_2u cmake-3.17.0-rc1-win64-x64 boost_1_66_0-msvc-14.1-64 vs_community2017 编译成功了,客户端用的是台服12340,成功进入游戏,发现任务名称是英文,任务介绍中文,您的回复中说到“使用我发布版本里面的中文数据,导入就好了”,继续下载了您发布的Single-Player-Project-TC-R2-(3.3.5a)单人带机器人-V10-版本,导出quest_template文件,导入我的数据库,还是不行,任务名称还是英文的,请问做做,能和你编译的一样,任务名称是中文的
2020-02-22 12:47:43
数据库和配置都参考下我发布的,然后清除下客户端缓存
塔琳托娅
2020-02-22 13:58:16
十分遗憾,还是不行,下了几版汉化sql,直接导致worldserver闪退,虽然不耽误使用,有强迫症的人哈
塔琳托娅
2020-02-24 07:24:02
用本站下载的台服绿色客户端,经过反复的实验,套用无数个数据库,终于发现,只有血精灵和德莱尼的新手任务不是中文的,其他种族任务都是中文,得出结论,版主大神的图片一点问题没有,人族,哈哈
球球爸爸
2020-02-28 11:47:29
导入quest_zhua.sql这个版本的数据库,和新编译的335配套,使用血精灵和德莱尼任务也完全汉化了,实在不行,最后的办法就是,用中文修改任务名称和介绍,可以批量处理的,不是很麻烦
2020-02-28 21:58:13
汉化大部分任务都是我十多年前从网上数据库抓下来的,我故意放了一些恶搞的错误在里面,通过这个可以知道网上版本好多用的我的数据库,还有就是任务是抓的台版数据库,所以和国服会有些出入,可惜台版数据库的那个网站不在了,想去补充也没办法了
gravatar头像 包包
2020-02-06 22:21:56
根据大神的教程,编译3.3.5成功并进入了游戏! 但是任务内容是英语,其他都是中文,请教还要改哪里吗?
包包
2020-02-07 13:03:37
看您图片里任务说明是中文,我的是英语。
2020-02-07 16:12:05
使用我发布版本里面的中文数据,导入就好了
包包
2020-02-08 22:27:29
请问具体导入哪个库?库的名字是?
gggg
2020-02-16 11:32:18
我卡在cha
ggg
2020-02-16 11:33:50
CMake,我卡在这儿,不成功,求指教!
包包
2020-02-17 15:25:14
绝大多数是环境问题。站长已经写的很清楚了。手把手辅导。。你如果还有问题,建议你重装win系统,再部署环境,从头来一遍!
gravatar头像 HolyDeus
2020-01-23 16:58:59
大佬你好,我按您的教程编译azerothcore,一直卡在vs生成那一步,永远成功14失败2,错误也每次不一,请问是否方便留个邮箱或者别的联系方式帮我看下错误原因?我想自己写脚本自己修端,还望大佬不吝赐教,万分感谢
2020-01-24 23:01:06
你把 C++ 的基础过一下,你都打算自己写这些了,基础不能少,有基础了这些都不是问题
gravatar头像 yhx123456
2020-01-19 17:15:52
大佬你好,请问下现在有支持1.12.3的TrinityCore版本吗,GitHub上我看最老的是3.3.5
2020-01-19 22:42:43
有现成的 MaNGOS 端可用,修复 99%
阿达
2020-02-11 09:26:06
能给个芒果的链接吗
gravatar头像 三叶草
2020-01-10 20:26:08
你好,我的服务器在debian9上编译成功了,但一个人玩很寂寞.能说说怎么添加机器人吗?
2020-01-19 22:41:53
加 bot 代码进去,不过 bot 代码得修改下,已经很久没更新了
2019-11-23 09:32:06
worldserver.exe不支持国服提取的vmaps,白下了50多G的8.3版本。。。白提取了一夜,大家不要像我这样了。。 server.log如下: VMap data directory is: ./vmaps VMap file './vmaps/0000.vmtree' does not exist Please place VMAP files (*.vmtree and *.vmtile) in the vmap directory (./vmaps/), or correct the DataDir setting in your worldserver.conf file. Unable to load critical files - server shutting down !!!
2019-12-03 16:56:57
这个我在教程里写了的,源码那看具体支持的版本
Lyuxi
2020-01-02 11:02:00
你最后怎么解决的。哪里下载的最新端
11
2020-04-17 10:09:25
官方文档里有写,把server的配置文件的 DataDir 从"." 改成 "../data"
2019-11-22 16:31:59
你好,我最新下的是8.XX版本的源码,源码生成的程序不再包含connection_patcher.exe工具,是否不需要了?由于客户端60多G,我还没下完,请大神指点迷津!
2019-12-03 16:53:58
对的,现在版本不需要这个,以后会不会变你关注下源码页面
gravatar头像 爱好者
2019-10-27 10:15:17
你好 希望有时间写一份azerothcore的编译教程,最近编译一直没成功过,始终都是字符错误
2019-10-28 12:30:31
其实过程基本一样,我写教程不如你自己多学点编程知识,因为就算这次我教你怎么编译,下次源码一更新,你一样又不会了
gravatar头像 pengge
2019-09-15 19:17:26
请问如何导入中文数据库?
2019-09-04 23:21:49
感谢大佬的教程,跟着编译了个60版本的,可是一个人玩似乎少了些什么。我部署到了外网,无聊的可以一起串串门。http://wow.orion-c.top
gravatar头像 www4144
2019-07-18 00:04:40
大大你好,MySql,下载第一个解压后找不到MySql启动项,第二个没密码无法解压,求指导
2019-11-22 16:34:49
密码 www.xspio.com
gravatar头像 www4144
2019-07-17 23:11:13
大大你好,萌新求助,MySql下载那个绿色的需要解压密码,密码是啥啊
gravatar头像 tdzj
2019-07-12 10:42:40
提取地图的时候说丢失ace.dll怎么破
×