自从魔兽世界开始转为月卡时,老高就基本AFK了。。。直到偶然听到歌单里的灰熊丘陵、风暴群山的BGM,又一次的手痒了,不过这次我们不冲点卡,我们以学习的态度搭建一个专属自己的魔兽世界服务器!

感谢TrinityCore项目,你们懂得!

说明

本文只针对3.3.5版本,master版本请参考官方文档。

老高的运行环境是 Debian 9,当然会docker的同学可以随意选择系统。 硬件配置

  • i3
  • 8g
  • 200G ssd

编译TrinityCore是一个比较漫长的过程,需要投入一定的时间和精力才能完成!

安装步骤基本都是参考Installation Guide - TrinityCore - TrinityCore Collaboration Platform这个页面,英文水平好的同学可以直接参考。

关于版本

在TrinityCore中我们能看到master版本和3.3.5两个版本,他们有什么不同呢?其实很简单。

  • master是最新的wow服务器版本,理论上可以用当前的国服的客户端直接登陆,只需要做一些轻微的改动,但是由于比较新的缘故,bug也会很多,而基本上每次bug修复都需要重新编译整个服务器,所以官方不推荐使用master分支的代码。
  • 3.3.5 官方推荐版本,虽然BUGFiX的提交也不少,但是提交的基本都是SQL,所以稳妥起见还是老老实实用这个版本吧!

关于Windows系统

由于老高多余的服务器刚好跑了OMV,基于Debian9,所以就顺势用了这个机子。win上的编译可能会麻烦一些,如果有需求,后期再上教程!

准备工作

依赖安装

apt-get update
apt-get install git clang cmake make gcc g++ libmariadbclient-dev libssl-dev libbz2-dev libreadline-dev libncurses-dev libboost-all-dev mariadb-server p7zip default-libmysqlclient-dev
update-alternatives --install /usr/bin/cc cc /usr/bin/clang 100
update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang 100

创建用户

用户名为wow

adduser wow
su - wow

约定目录

以下是老高的建议目录

# 以wow权限执行
su - wow
# TrinityCore 目录
mkdir /home/wow/TrinityCore

# 服务器目录,最终包含etc,bin,data三个子目录
mkdir /home/wow/server355

# 客户端目录
mkdir /home/wow/client

下载工作

既然是网络游戏,那就一定需要C端和S端,即客户端和服务器端,需要注意的是:

  1. 必须需要下载的必须是3.3.5(12340)的版本,其他版本可能会出现无法验证游戏版本,这可能是由于档案已经被破坏或是其他的问题,可能需要通过改源码重新编译的手段才能完成登录!所以一定不要下错版本了!
  2. S端优先下载,下载完后先编译

S端

# 以wow用户执行
git clone -b 3.3.5 git://github.com/TrinityCore/TrinityCore.git /home/wow/TrinityCore

C端

客户端版本:3.3.5(12340)

百度盘下载很慢,需要自己想办法,下载解压后,需要把完成后把文件上传到Linux服务器上,用于后续步骤。

编译服务端

权限建议: wow

编译期间可以先跳过提取客户端信息,阅读准备数据库章节!

cd /home/wow/TrinityCore
mkdir build
cd build
cmake ../ -DCMAKE_INSTALL_PREFIX=/home/wow/server355
# 此步骤可能时间比较长,可以用nohup或者screen执行
make -j $(nproc) install

# 终于,你编译好了服务端,胜利不远了!

编译完成后,/home/wow/server355目录下会出现 etc和bin目录

# ls /home/wow/server355/bin
-rwxr-xr-x 1 wow  wow   25104168 Jul 26 00:17 authserver
-rwxr-xr-x 1 wow  wow    3361976 Jul 26 00:17 mapextractor
-rwxr-xr-x 1 wow  wow   19130160 Jul 26 00:17 mmaps_generator
-rwxr-xr-x 1 wow  wow   10167776 Jul 26 00:17 vmap4assembler
-rwxr-xr-x 1 wow  wow    8489448 Jul 26 00:17 vmap4extractor
-rwxr-xr-x 1 wow  wow  587311088 Jul 26 00:36 worldserver

# ls /home/wow/server355/bin
-rw-r--r-- 1 wow wow  13K Jul 25 23:42 authserver.conf.dist
drwxr-xr-x 2 wow wow 156K Jul 27 00:15 maps
drwxr-xr-x 2 wow wow 132K Jul 27 00:15 mmaps
drwxr-xr-x 2 wow wow 536K Jul 27 00:15 vmaps
-rw-r--r-- 1 wow wow 133K Jul 26 00:16 worldserver.conf.dist

我们顺手把worldserver.conf.distauthserver.conf.dist复制一份,然后修改worldserver.confDataDir = "."DataDir = "../data",修改方法在此不赘述,可以用vi命令,也可以在win下改好放上去。

cp /home/wow/server355/bin/worldserver.conf.dist worldserver.conf
cp /home/wow/server355/bin/authserver.conf.dist authserver.conf

提取客户端信息

权限建议: wow

此步骤依赖:

  1. 客户端文件
  2. 编译好的TrinityCore

DBC and Maps files

cd /home/wow/client
/home/wow/server355/bin/mapextractor
mkdir /home/wow/server355/data
  
cp -r dbc maps /home/wow/server355/data

Visual Maps (aka vmaps)

cd /home/wow/client
/home/wow/server355/bin/vmap4extractor
mkdir vmaps
/home/wow/server355/bin/vmap4assembler Buildings vmaps
cp -r vmaps /home/wow/server355/data

Movement Maps (aka mmaps)

cd /home/wow/client
mkdir mmaps
/home/wow/server355/bin/mmaps_generator
cp -r mmaps /home/wow/server355/data

好了,终于胜利就在前方!

准备数据库

数据库存放了游戏的各种信息,所以在启动服务器钱,我们需要把数据库搭建好!由于在依赖处理步骤中我们已经安装了mariadb-server,所以现在我们只需要运行它即可!

此节需要root权限

运行数据库

systemctl enable mysql
systemctl restart mysql

如果没有报错,我们接着执行初始化脚本,这里我们需要为root用户提供一个密码,这里假设为 laogaoniubi

初始化

权限建议: root

mysql_secure_installation

# Enter current password for root (enter for none):
输入回车

# Change the root password? [Y/n]
Y

# 输入两次 laogaoniubi

# Remove anonymous users? [Y/n]
Y

# Disallow root login remotely? [Y/n]
# Y表示让root用户远程登录,N表示可以远程登录,老高推荐董数据库的同学选Y,觉得自己搞不定或者搞不懂的请选N
Y

Remove test database and access to it? [Y/n]
Y

Reload privilege tables now? [Y/n]
Y

至此,我们已经成功初始化数据库,并且成功将root用户的密码设置为laogaoniubi!

导入数据

第一步是把数据库建立起来,我们需要执行以下sql,sql的路径位于源码的TrinityCore/sql/create/create_mysql.sql

GRANT USAGE ON * . * TO 'trinity'@'localhost' IDENTIFIED BY 'trinity' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 ;

CREATE DATABASE `world` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE DATABASE `characters` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE DATABASE `auth` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

GRANT ALL PRIVILEGES ON `world` . * TO 'trinity'@'localhost' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON `characters` . * TO 'trinity'@'localhost' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON `auth` . * TO 'trinity'@'localhost' WITH GRANT OPTION;

执行方法参考:

# 登录 mysql后执行

source /home/wow/TrinityCore/sql/create/create_mysql.sql

至此,数据库初始化完毕

数据库你都能搞定,是个人才!要不要加个好友认识一下?

配置网络

让我们打开数据库auth,查看一下表realmlist,让我们把address字段改为服务器的IP,老高的服务器IP为192.168.111.111

(`id`, `name`, `address`, `localAddress`, `localSubnetMask`, `port`, `icon`, `flag`, `timezone`, `allowedSecurityLevel`, `population`, `gamebuild`) VALUES ('1', 'Trinity', '192.168.111.116', '192.168.111.111', '255.255.255.0', '8085', '0', '0', '1', '0', '0', '12340');

最后的服务配置

权限: wow

不要急,胜利已经是你的了!

之前的准备工作在这一步汇总,到收获的季节了!

authserver

可以公开的情报:authserver即认证服务,我们登陆账户都是到这里认证后才会请求worldserver,也就是说authserver只有在登陆的时候才起作用,登录后这个进程就可以关闭了!

我们先运行authserver看看

/home/wow/server355/bin/authserver
# or
/home/wow/server355/bin/authserver -c /home/wow/server355/etc/authserver.conf

以下输出即为成功,很不错!

DatabasePool 'auth' opened successfully. 2 total connections running.
Started auth database connection pool.
Loading IP Location Database...
Added realm "Trinity" at 192.168.111.111:8085.

worldserver

/home/wow/server355/bin/worldserver

以下输出即为。。。什么!竟然又报错了!看来之前少下载了一个文件,名字叫TDB_full_world_335.19071_2019_07_15.sql,这个文件在哪里下载呢?

下载传送门,请对号入座

下载下来的文件后缀为7z,我们需要先解压,得到sql文件后直接放在/home/wow/server355/bin/worldserver的同级目录即可!

再一次,我们运行worldserver,如果得到以下输出,那么恭喜你,你已经沐浴到胜利的阳光了!

World initialized in 0 minutes 8 seconds
TrinityCore rev. 7e10438b2759 2019-07-25 17:00:03 +0200 (3.3.5 branch) (Unix, RelWithDebInfo, Static) (worldserver-daemon) ready...
TC>TC>

添加账号

上一节我们终于进入了worldserver,下面我们给我们的主角创建一个NO1的账号,使用以下命令格式

account create  
World initialized in 0 minutes 8 seconds
TrinityCore rev. 7e10438b2759 2019-07-25 17:00:03 +0200 (3.3.5 branch) (Unix, RelWithDebInfo, Static) (worldserver-daemon) ready...
# 这里我们创建了一个用户名为test,密码也为test的账户
TC>TC> account create test test
# 紧接着我们把test账户升级为gm,豪嘛!这老NB了!
TC>TC> account set gmlevel test 3 -1

登录

让我们回到Windows的怀抱,跑到wow客户端下,把下面的代码保存为wow.bat并执行,别管360的提醒,直接允许。

echo y | rd /s "Cache"
echo SET realmlist "192.168.111.111" > Data\zhTW\realmlist.wtf
echo SET realmlist "192.168.111.111" > Data\enTW\realmlist.wtf
echo SET realmlist "192.168.111.111" > Data\zhCN\realmlist.wtf
echo SET realmlist "192.168.111.111" > Data\enCN\realmlist.wtf
echo SET realmlist "192.168.111.111" > Data\enUS\realmlist.wtf
echo SET realmlist "192.168.111.111" > realmlist.wtf
start Wow.exe
goto end

wow_login

幽灵虎。。。

ghost_tiger

参考

标签: none

已有 27 条评论

  1. Lai Lai

    不好意思,這些指令有辦法在mac上執行嗎?
    我自己是用mac系統,但沒有架設過server的經驗
    謝謝

    1. Lai Lai

      自己回自己一下
      最新版的mac OS 12.6 可以build success
      但舊版的10.14.6反而會失敗
      會出現錯誤
      不過目前還不知道要怎麼解

      "_OSSL_PROVIDER_set_default_search_path", referenced from:
      OpenSSLCrypto::threadsCleanup() in libcommon.a(OpenSSLCrypto.o)
      "_OSSL_PROVIDER_unload", referenced from:
      OpenSSLCrypto::threadsCleanup() in libcommon.a(OpenSSLCrypto.o)
      "_OpenSSL_version", referenced from:
      main::$_1::__invoke() in Main.o
      ld: symbol(s) not found for architecture x86_64
      clang: error: linker command failed with exit code 1 (use -v to see invocation)

      ** BUILD FAILED **

      The following build commands failed:
      Ld build/src/server/authserver/Release/authserver normal x86_64
      (1 failure)

    2. 可以用docker编译

  2. zhmtao zhmtao

    楼主,我已经架设完毕,内网可以正常玩,外网开了3724和8085 登录时候用户名密码验证完毕,选了服务,然后就卡在“正在登录服务器” 这是还有端口没开么?应该怎么查找呀

    1. jjjun jjjun

      我也一样啊,然后我在数据库里面把address改成0.0.0.0,登录倒很快,但选择服务器之后马上就没结果,还是选择服务器的界面

  3. Allen Allen

    您好 我在執行 這兩行指令都出現以下訊息 請問哪裡出錯了
    /home/wow/server355/bin/authserver
    /home/wow/server355/bin/worldserver

    Using configuration file /home/wow/server355/etc/authserver.conf.
    Using SSL version: OpenSSL 1.1.1f 31 Mar 2020 (library: OpenSSL 1.1.1f 31 Mar 2020)
    Using Boost version: 1.71.0
    Automatic database updates are disabled for all databases!
    Opening DatabasePool 'auth'. Asynchronous connections: 1, synchronous connections: 1.
    Could not connect to MySQL database at 127.0.0.1: Access denied for user 'trinity'@'localhost' (using password: YES)

    DatabasePool Login NOT opened. There were errors opening the MySQL connections. Check your SQLDriverLogFile for specific errors. Read wiki at http://www.trinitycore.info/display/tc/TrinityCore+Home

  4. 省

    您好,跟着您的教程一切顺利,但是到运行worldserver的步骤,提示 Syntax error: "(" unexpected,请问这是我编译时有问题吗?还是运行环境有问题

  5. sangooer sangooer

    数据库初始化后,只有三个空的库,库里没有表啊,我怎么去改库auth里的realmlist的address字段啊?

  6. Blowfish Blowfish

    我参考 老高 和 极光飞羽@CCF 的教程,搞了一个master分支部署8.3.0.34220版本的服务的帖子,有兴趣的可以参考一下:
    https://www.cnblogs.com/z16166/p/12927380.html

  7. HHT HHT

    登陆成功后提示无法验证游戏的版本是什么回事。。。

  8. blq blq

    你好,服务器需要开放那几个端口?

    1. jiguang jiguang

      开放8085端口

  9. 小矮 小矮

    我服务器都没有问题,启动都正常,客户端是 12340,
    启动器:
    echo y | rd /s "Cache"
    echo SET realmlist "192.168.1.224" > Data\zhTW\realmlist.wtf
    echo SET realmlist "192.168.1.224" > Data\enTW\realmlist.wtf
    echo SET realmlist "192.168.1.224" > Data\zhCN\realmlist.wtf
    echo SET realmlist "192.168.1.224" > Data\enCN\realmlist.wtf
    echo SET realmlist "192.168.1.224" > Data\enUS\realmlist.wtf
    echo SET realmlist "192.168.1.224" > realmlist.wtf
    start Wow.exe
    goto end

    但是就是提示连接不上服务器
    服务器安装在虚拟机里面,

  10. 老高NB 老高NB

    老高,百度盘的解压密码是多少?

    1. www.xspio.com
      参考链接里面有
      https://xspio.com/%E9%AD%94%E5%85%BD%E4%B8%96%E7%95%8C%E5%AE%98%E6%96%B9%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%B8%8B%E8%BD%BD

  11. 123123 123123

    老高你好 ,我今天到了最后一步 下载了TDB_full_world_335.19071_2019_07_15.sql 运行worldserver 的时候还是报错了 报错内容是

    Loaded 0 trinity strings. DB table `trinity_string` is empty. You have imported an incorrect database for more info search for TCE00003 on forum.

    我该咋办,小白一个,Google 了很久,也不是很明白,最后一步卡在这里很难受,老高你知道咋办嘛

    1. 是不是版本没有对上?

  12. 123123 123123

    是我傻了 打扰了 我看到了

  13. 123123 123123

    那个解压密码是多少啊? 谢谢

  14. jaime jaime

    请问百度盘下载的 World of Warcraft TW3.3.5(12340)免安装版,解压密码是啥啊,12340解不出来呢

  15. Lbw Lbw

    您好,编译了Trinity Core之后,/etc和/bin文件夹下都没有maps那些东西,怎么办?

    1. 不在/etc和/bin,是相对目录的etc和bin,能理解吗?

  16. 还能这样要玩儿,厉害了!

  17. 很好玩,可以怀念下。

    1. blq blq

      到了启动 worldserver 的那一步,提示:
      缺少/home/wow/server355/data/dbc四个文件:
      DestructibleModelData.dbc
      PvpDifficulty.dbc
      QuestXP.dbc
      QuestFactionReward.dbc

      请问怎么办?

添加新评论