基于TrinityCore编译魔兽世界服务端

1.环境安装

官方文档TrinityCore

1.Debian
1
2
3
4
apt-get update
apt-get install git clang cmake make gcc g++ libmariadb-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
2.Ubuntu
1
2
3
4
apt-get update
apt-get install git clang cmake make gcc g++ libmysqlclient-dev libssl-dev libbz2-dev libreadline-dev libncurses-dev libboost-all-dev mysql-server p7zip
update-alternatives --install /usr/bin/cc cc /usr/bin/clang 100
update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang 100
3.下载源码
1
git clone -b 3.3.5 git://github.com/TrinityCore/TrinityCore.git

内网

1
git clone -b 3.3.5 https://git.tnxw.com/Ming/TrinityCore.git

2.编译安装

1.创建目录
1
2
3
cd TrinityCore
mkdir build
cd build
2.准备编译
1
cmake ../ -DCMAKE_INSTALL_PREFIX=/root/server -DTOOLS=1
3.编译服务端

有2种方式来编译。

  • 第一种是傻瓜式,直接开始编译,这种速度一般。

    1
    make&&make install
  • 第二种是利用全核心CPU make -j 线程数 install 这里线程数要改成自己CPU的线程数,这样可以全核心进行编译。

    1
    make -j 8
    1
    make install

3.提取数据

1.上传客户端

注意:以下3步前后顺序不可逆,必须按顺序提取。如一步失败,需要删除这步产生的文件重头提取,否则会进入0%死循环。

2.提取地图
1
2
cd /root/wow	#wow为客户端名称
/root/server/bin/mapextractor
  • 完成之后依次输入命令

    1
    2
    mkdir /root/server/data
    cp -r dbc maps /root/server/data
  • 接着输入提取命令

    1
    /root/server/bin/vmap4extractor
  • 完成之后依次输入,开始编译地图

    1
    2
    mkdir vmaps
    /roo/server/bin/vmap4assembler Buildings vmaps
  • 编译完成之后输入

    1
    cp -r vmaps /root/server/data
  • 然后接着输入命令

    1
    2
    mkdir mmaps
    /root/server/bin/mmaps_generator

    注意:这次提取是整个大地图提取,时间很长视机器情况。

  • 提取完成之后输入

    1
    cp -r mmaps /root/server/data

    这步结束之后,可以通过sftp软件进去把/root/server/data里的文件打包下载到本地备份,不然以后丢失损坏还要再来一次。

4.修改配置文件

  • 移除etc目录下文件名中的.dist

  • 最后成这样authserver.conf dbimport.conf worldserver.conf

  • 修改authserver.conf dbimport.conf worldserver.conf,中的数据库地址和密码。

    1
    127.0.0.1;3306;trinity;trinity;trinity_auth
    1. 127.0.0.1:数据库地址
    2. 3306:端口
    3. trinity:第一个为用户名,第二个为用户密码
    4. trinity_auth:数据库名
  • 修改Data路径

    DataDir = "." #此字段仅worldserver.conf有,将.更改为你的data文件夹路径

5.设置数据库

1.登录数据库
1
mysql -uroot -p
1
2
3
4
5
6
7
8
CREATE USER 'trinity'@'localhost' IDENTIFIED BY 'trinity' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0;
GRANT USAGE ON * . * TO 'trinity'@'localhost';
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;
  • 自动创建

    1
    2
    mysql -uroot -p
    source /root/azerothcore-wotlk/data/sql/create/create_mysql.sql
2.下载数据库
  • 接着访问TrinityCore

  • 压缩包解压后可以得到一个几百兆的sql文件,这就是魔兽世界里的数据了,然后把刚才解压的sql文件上传到/root/server/bin

3.启动服务
1
2
cd /root/server/bin
./worldserver

当显示 ready.. 时表示服务端已经启动了,数据库也导入完毕了。

4.关闭服务端

进入数据库,点击auth数据库,点击realmlist表,双击修改address地址为本机IP。

6.开启服务端

1.启动认证
1
2
cd /root/server/bin
./authserver

重新打开一个终端,之前开启的窗口不要关闭

2.启动服务端
1
2
cd /root/server/bin
./worldserver
3.创建账号
1
account create admin admin

创建一个账号 admin,密码 admin,这里服务端就开启完毕了。

7.客户端配置

打开本地的wow游戏目录,在根目录新建一个 wow.bat 文件,并在里面输入

1
2
3
4
5
6
7
8
echo y | rd /s "Cache"
echo SET realmlist "127.0.0.1" > Data\zhTW\realmlist.wtf
echo SET realmlist "127.0.0.1" > Data\zhCN\realmlist.wtf
echo SET realmlist "127.0.0.1" > Data\enCN\realmlist.wtf
echo SET realmlist "127.0.0.1" > Data\enUS\realmlist.wtf
echo SET realmlist "127.0.0.1" > realmlist.wtf
start wow.exe
goto end

这里的127.0.0.1就是本机的IP

8.自动运行

给Debian增加一个自动启动来自动运行服务,由于Debian默认没有启动rc.local文件,所以我们要自己来写一下。

1.创建服务
1
vi /etc/rc.local

然后输入内容

1
2
3
4
5
#!/bin/sh -e
sleep 5
nohup /root/server/bin/authserver > /dev/null 2>wow_auth.log &
nohup /root/server/bin/worldserver > /dev/null 2>wow_world.log &
exit 0
2.设置权限
1
chmod 777 /etc/rc.local

然后修改worldserver.conf文件里的DataDir 为 “/root/server/data”的绝对路径,否则启动会失败

1
DataDir = "/root/server/data"

然后修改worldserver.conf文件里的 Console.Enable 为 “0” 否则后台运行会占用100%CPU

1
Console.Enable=0
3.最后启动服务
1
2
systemctl enable rc.local
systemctl start rc.local

这样重启之后就会自动打开服务了


基于TrinityCore编译魔兽世界服务端
https://kuan.pages.dev/article/752edc47.html
作者
IKun
发布于
2023年2月23日
许可协议