前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从零开始编译wow私服

从零开始编译wow私服

作者头像
老高的技术博客
发布2022-12-28 12:50:34
2.7K1
发布2022-12-28 12:50:34
举报

自从魔兽世界开始转为月卡时,老高就基本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上的编译可能会麻烦一些,如果有需求,后期再上教程!

准备工作

依赖安装

代码语言:javascript
复制
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

代码语言:javascript
复制
adduser wow
su - wow

约定目录

以下是老高的建议目录

代码语言:javascript
复制
# 以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端

代码语言:javascript
复制
# 以wow用户执行
git clone -b 3.3.5 git://github.com/TrinityCore/TrinityCore.git /home/wow/TrinityCore

C端

客户端版本:3.3.5(12340)

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

编译服务端

权限建议: wow

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

代码语言:javascript
复制
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目录

代码语言:javascript
复制
# 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下改好放上去。

代码语言:javascript
复制
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

代码语言:javascript
复制
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)

代码语言:javascript
复制
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)

代码语言:javascript
复制
cd /home/wow/client
mkdir mmaps
/home/wow/server355/bin/mmaps_generator
cp -r mmaps /home/wow/server355/data

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

准备数据库

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

此节需要root权限

运行数据库

代码语言:javascript
复制
systemctl enable mysql
systemctl restart mysql

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

初始化

权限建议: root

代码语言:javascript
复制
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

代码语言:javascript
复制
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;

执行方法参考:

代码语言:javascript
复制
# 登录 mysql后执行

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

至此,数据库初始化完毕

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

配置网络

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

代码语言:javascript
复制
(`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看看

代码语言:javascript
复制
/home/wow/server355/bin/authserver
# or
/home/wow/server355/bin/authserver -c /home/wow/server355/etc/authserver.conf

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

代码语言:javascript
复制
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

代码语言:javascript
复制
/home/wow/server355/bin/worldserver

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

下载传送门,请对号入座

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

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

代码语言:javascript
复制
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的账号,使用以下命令格式

代码语言:javascript
复制
account create <user> <pass>
代码语言:javascript
复制
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的提醒,直接允许。

代码语言:javascript
复制
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
wow_login

幽灵虎。。。

ghost_tiger
ghost_tiger

参考

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
    • 关于版本
      • 关于Windows系统
      • 准备工作
        • 依赖安装
          • 创建用户
            • 约定目录
            • 下载工作
              • S端
                • C端
                • 编译服务端
                • 提取客户端信息
                  • DBC and Maps files
                    • Visual Maps (aka vmaps)
                      • Movement Maps (aka mmaps)
                      • 准备数据库
                        • 运行数据库
                          • 初始化
                            • 导入数据
                            • 配置网络
                            • 最后的服务配置
                              • authserver
                              • 我们先运行authserver看看
                                • worldserver
                                  • 添加账号
                                    • 登录
                                      • 参考
                                      相关产品与服务
                                      数据库
                                      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                                      领券
                                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档