0%

Linux编译并配置运行魔兽世界服务端

国内有很多收费的或埋了后门的一键windows服务端,如果自己玩单机就无所谓了。但作为一个软件从业者,对于看不见代码的程序天生有种不信任感。所以打算自己基于源码编译个端。

对于当前比较流行架构都尝试了下(mangos\Cmangos\TrinityCore\sunwellcore\Azerthcore),最终选择了Azerthcore

先说下系统配置:
1.Ubuntu 16.04
2.电脑配置:[双核、4G内存]

对,就这俩个硬要求,让我坑了好一阵。起初一直是用的ubuntu14.04,编译各种报错,cmake太低、g++太低。这两狗东西在14.04上各种升级失败。拉到,直接重装了个16.04,整个世界都明亮了。
关于电脑配置其实是废话,相信大部分都比我这老爷机配置高。但希望没有和我一样,希望在VPS直接编译或运行服务端的同志。VPS上内存超过1G的,我只能说您是土豪,我们不是朋友。

上面ok,设置系统环境,安装些需要的包(为避免权限问题,我们以root执行以下命令),期间会帮你装mysql,要你输入密码,如果你打算在这台机器上跑服务端就安装设置下,如果不是你可以把下面的【mysql-server】去掉:

1
2
$sudo apt-get install git cmake make gcc g++ clang libmysqlclient-dev libssl-dev libbz2-dev libreadline-dev libncurses-dev mysql-server
$sudo apt-get install libace-6.* libace-dev

linux这点比windows强N倍。

下面找个你觉得合适的地方下源码:

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

到这里其实你已经可以开始编译了,但这样编译出来的端是没有幻化师,因为官方原版3.3.5时还没幻化师这个玩意。所以我们还需加个幻化师分支进去源码。

1
2
$cd azerothcore/modules
$git clone https://github.com/azerothcore/mod-transmog.git

ok了,源码全拉完了,保证你当前在源码根目录,开始编译核心。

1
2
3
$cd ..
$mkdir build
$cd build

这里我对下面的命令说明下,【/home/youruser/azeroth-server/】这个是你编译出来的核心要放的位置,别用我这个,自己在home的user下面建个azeroth-server。【-DTOOLS=0】是设置不编译地图提取工具,地图是很恶心的东西。全部提取要几十个小时,而且很容易出错。后面我会放出的提取好的地图文件,至少省你1天的爬坑时间。

1
$cmake ../ -DCMAKE_INSTALL_PREFIX=/home/youruser/azeroth-server/ -DTOOLS=0 -DSCRIPTS=1

上面一步如果没出现问题,继续下面的,我是双核所以【-j 2】,你要是更多就填几,不知道或者单核就【-j】,这一步比较耗时,但能看到进度,看机器的性能,还是能接受的。

1
2
$make -j 2
$make install

##############################如果到现在还没有出现奇怪的错误,那么恭喜你的服务端核心已经编译好了,下面是服务端的配置#######################################

1
2
3
$cd /home/youruser/azeroth-server/etc
$cp authserver.conf.dist authserver.conf
$cp worldserver.conf.dist worldserver.conf

分别编辑【authserver.conf】、【worldserver.conf】把里面的数据连接的设置,设置你可用的数据库。

1
2
3
4
5
$LoginDatabaseInfo = "127.0.0.1;3306;root;your_password;auth"

$WorldDatabaseInfo = "127.0.0.1;3306;root;your_password;world"

$CharacterDatabaseInfo = "127.0.0.1;3306;root;your_password;characters"

设置【worldserver.conf】中的data文件位置。

1
$DataDir = "./data"

在azeroth-server文件夹下面新建个data文件夹。

1
2
$cd ..
$mkdir data

下载坑爹的地图的文件,放到data文件夹。
mapsdbcvmapsmmaps

#######################################至此服务端的配置就好了,下面是数据的配置#####################################

连接你的数据库,最好和服务端放一台机子上,不然读写起来很慢容易超时报错。
新建三个database:

1
2
3
4
5
$mysql -u root -p
$你的密码
>CREATE DATABASE world;
>CREATE DATABASE characters;
>CREATE DATABASE auth;

这里说下个题外的话,在linux命令行操作我们的数据很麻烦,最好开个远程用户,后面就可以在Navicat这样的可视化工具里操作数据了,如果上面的窗口还在你可以继续下面的操作:

1
2
3
>GRANT ALL PRIVILEGES ON *.* TO '你要开启远程的账号'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION;
>FLUSH PRIVILEGES;
>quit;

下面要往我们的数据库塞游戏数据了,进入源码根目录操作sql。

1
2
$cd azerothcore/bin/db_assembler/
$./db_assembler.sh

在当前的目录下会生成已output文件夹【/bin/db_assembler/output】,进去填数据吧,每个数据都要按照这个顺序填【base -> updates -> custom】,期间可能要报错,可以先忽略最后看。
数据的导入命令如下:

1
2
$mysql -u root -p world < world_base.sql
...

就那几个sql,我就不一个个打了。

########################################如果没有红字,那你的英文原版数据库就已经配置好了,下面是运行了######################

到你之前放服务端的目录中的bin文件夹。【/home/youruser/azeroth-server/bin】,【ll】看下如果没权限执行给他俩加权限,暴力点的。

1
2
$chmod 777 worldserver
$chmod 777 authserver

保证你mysql服务起来了,然后执行。

1
$./authserver

再开个shell窗口。

1
$./worldserver

如果你没看到进程结束的报错,那么你的服务端已经起来了。

下面修改下auth中realmist表中的address字段为你的机器ip就可局域网登录你3.3.5魔兽了,如果需要外网给你给朋友们一起上,你需要有个固定IP,不做作为咱小百姓是不能有如此神物的,但通过动态域名解析也可以突破运营商的枷锁的,具体可以看我的另一篇文章《python实现运营商动态IP的域名解析

到此我们的已经能进游戏了,但新建账号啥的还只能在服务器的shell窗口里进行。我们需要有个界面去链接数据库给玩家新建账号,这个我后面再写个建站的帖子,大家可以看下 我的网站 参考下。