TrinityCore魔兽世界(World of Warcraft)服务器的开源项目,并且该项目代码进行了广泛的优化、改善和清理。
前期按照官方手册按部就班的安装即可。
TrinityCore官网wiki:Trinitycore Wiki | TrinityCore MMo Project Wiki
github地址:GitHub - TrinityCore/TrinityCore: TrinityCore Open Source MMO Framework (master = 10.2.7.55165, 3.3.5 = 3.3.5a.12340, wotlk_classic = 3.4.3.54261, cata classic = 4.4.0.55141) gitcode镜像地址:GitCode - 全球开发者的开源社区,开源代码托管平台
TrinityCoreBot安装:https://skywalk.blog.csdn.net/article/details/136197893
TrinityCore免编译镜像安装:备份和镜像TrinityCore-CSDN博客
TrinityCore web管理安装:Nginx配置php起TrinityCore WoWSimpleRegistration服务-CSDN博客
TrinityCore 多区安装:TrinityCore多区realms配置-do multiple realms for TrinityCore-CSDN博客
TrinityCore GM常用命令:TrinityCore gm命令精选-CSDN博客
基本安装步骤
Ubunut服务器配置
需要Ubuntu22.04版本,并安装如下软件:
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
注意如果是非root账户,需要sudo
sudo apt-get update
sudo apt-get install git clang cmake make gcc g++ libmysqlclient-dev libssl-dev sudo libbz2-dev libreadline-dev libncurses-dev libboost-all-dev mysql-server p7zip
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/clang 100
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang 100
下载源码
cd ~/
git clone https://github.com/TrinityCore/TrinityCore
请注意要使用3.3.5 repo,也可以git clone的时候直接指定repo:
git clone -b 3.3.5 --depth 1 https://github.com/TrinityCore/TrinityCore
进入TrinityCore目录,使用git branch命令确认是3.3.5版本:
git branch
* 3.3.5
注意即时更新源码:
git pull origin 3.3.5
如果实在无法下载,可以使用gitcode的镜像试试:
git clone https://gitcode.com/gh_mirrors/tr/TrinityCore.git
如果要安装TrinityBots,那么需要在GitHub - trickerer/Trinity-Bots: NPCBots for TrinityCore and AzerothCore 3.3.5
下载文件NPCBots.patch,并把它cp到TrinityCore主目录
cp Trinity-Bots/NPCBots.patch TrinityCore/
并执行:
patch -p1 < NPCBots.patch
编译配置
cd TrinityCore
mkdir build
cd build
cmake ../ -DCMAKE_INSTALL_PREFIX=/home/wow/server
编译安装
make -j $(nproc)
make install
数据库导入
只需要导入一个,后面其它数据库会自动导入
To create the MySQL databases needed by Trinity, you need to execute one of the following MySQL queries with your mysql client:
可下载或者到项目TrinityCore/sql/create目录也能获取该文件。下载之后,进入mysql,然后导入:
source /home/wow/TrinityCore/TrinityCore-TDB335.22061/sql/create/create_mysql.sql
其实create_mysql.sql文件的内容是:
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 utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE `characters` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE `auth` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_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;
配置服务器
下载或创建地图
下载程序需要的地图等文件,可以从这里下载: https://tc.arctium.io
下载3.3.5a版本的,下载后解压,带目录拷贝到server/data目录
配置config文件
将server/etc目录里两个配置文件的dist后缀去掉
server/etc$ ls
bnetserver.conf bnetserver.conf.dist worldserver.conf worldserver.conf.dist
修改worldserver.conf文件的内容
团队副本不需要团队
# Instance.IgnoreRaid
# Description: Ignore raid group requirement when entering instances.
# Default: 0 - (Disabled)
# 1 - (Enabled)
# Instance.IgnoreRaid = 0
Instance.IgnoreRaid = 1
数据地址用绝对路径
# DataDir
# Description: Data directory setting.
# Important: DataDir needs to be quoted, as the string might contain space characters.
# Example: "@prefix@/share/trinitycore"
# Default: "."
# DataDir = "."
DataDir = "/home/wow/server/data"
若安装了bot,可以设置最多可带bot人数
# NpcBot.MaxBots
# Description: Maximum number of bots allowed for players per level bracket:
# 0-9, 10-19, 20,29, ... , 70-79, 80+.
# Default: 1,1,1,1,1,1,1,1,1 - (1 for all levels)
# 0,1,2,3,4,5,6,7,8 - (1 per 10 levels)
# Max: 39
NpcBot.MaxBots = 1,2,3,4,5,6,7,8,9
启动服务器
先启动验证服务器,再启动世界服务器
./authserver
./worldserver
创建账户
服务启动后,在服务器命令行里创建账户
比如创建一个test账户:
.account create test test
这个账户的密码也是test
设置账户的gm等级:
.account set gmlevel test 3 -1
这样就把test这个账户设为gm等级3,-1则表示所有的区生效。
注意几点:
- 1 需要配置Ubuntu22.04版本的服务器或者Debian11 服务器。
- 2 需要使用git clone 从官网下载代码。如果不好下载的话,可以加上--depth 参数,如:
git clone -b 3.3.5 --depth 10 https://github.com/TrinityCore/TrinityCore.git
- 3 数据库只需要导入一个:
source /home/wow/TrinityCore/TrinityCore-TDB335.22061/sql/create/create_mysql.sql
后面的数据库不需要手工导入,只要启动worldserver,就会自动导入。
- 4 最后卡在登录服务器界面,原来需要修改ip地址:
对服务器和客户端不在同一台机器的情况,需要修改服务器的ip地址,从127.0.0.1修改成服务器地址。
mysql> use auth;
Database changed
mysql> select id,name,address,localaddress,gamebuild from realmlist;
+----+---------+-----------+--------------+-----------+
| id | name | address | localaddress | gamebuild |
+----+---------+-----------+--------------+-----------+
| 1 | Trinity | 127.0.0.1 | 127.0.0.1 | 12340 |
+----+---------+-----------+--------------+-----------+
1 row in set (0.00 sec)
mysql> UPDATE realmlist SET address = '192.168.0.12' WHERE address = '127.0.0.1';
Query OK, 1 row affected (0.15 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select id,name,address,localaddress,gamebuild from realmlist;
+----+---------+--------------+--------------+-----------+
| id | name | address | localaddress | gamebuild |
+----+---------+--------------+--------------+-----------+
| 1 | Trinity | 192.168.0.12 | 127.0.0.1 | 12340 |
+----+---------+--------------+--------------+-----------+
1 row in set (0.00 sec)
总算连上了!
也可以通过id来修改:
update realmlist set address = "xx.xx.xx.xx" where id = 1 ;
服务器放置在公网上
如果公网ip是:194.36.209.246
那么执行下面语句:
mysql> use auth;
Database changed
mysql> select id,name,address,localaddress,gamebuild from realmlist;
+----+---------+-----------+--------------+-----------+
| id | name | address | localaddress | gamebuild |
+----+---------+-----------+--------------+-----------+
| 1 | Trinity | 192.168.0.1 | 127.0.0.1 | 12340 |
+----+---------+-----------+--------------+-----------+
1 row in set (0.00 sec)
mysql> UPDATE realmlist SET address = '194.36.209.246' WHERE address = '192.168.0.12';
Query OK, 1 row affected (0.15 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select id,name,address,localaddress,gamebuild from realmlist;
+----+---------+----------------+--------------+-----------+
| id | name | address | localaddress | gamebuild |
+----+---------+----------------+--------------+-----------+
| 1 | Trinity | 194.36.209.246 | 127.0.0.1 | 12340 |
+----+---------+----------------+--------------+-----------+
1 row in set (0.00 sec)
这样网上都可以登录这台机器了。
但是这样局域网就无法登录了。可以这样解决:
再添加一个表:
INSERT INTO realmlist (name, address, localaddress, gamebuild) VALUES ('NewRealm', '192.168.0.12', '127.0.0.2', 12345);
UPDATE realmlist SET flag = 0 WHERE flag = 2;
没找到这个realm,看来需要把server那边做全套才行。
尝试这样,使用域名
UPDATE realmlist SET address = 'wow.airoot.org' WHERE address = '194.36.209.246';
Query OK, 1 row affected (0.28 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from realmlist;
+----+----------+----------------+--------------+-----------------+------+------+------+----------+----------------------+------------+-----------+
| id | name | address | localAddress | localSubnetMask | port | icon | flag | timezone | allowedSecurityLevel | population | gamebuild |
+----+----------+----------------+--------------+-----------------+------+------+------+----------+----------------------+------------+-----------+
| 1 | Trinity | wow.airoot.org | 127.0.0.1 | 255.255.255.0 | 8085 | 0 | 0 | 1 | 0 | 0 | 12340 |
| 2 | NewRealm | 192.168.0.12 | 127.0.0.2 | 255.255.255.0 | 8085 | 0 | 0 | 0 | 0 | 0 | 12345 |
+----+----------+----------------+--------------+-----------------+------+------+------+----------+----------------------+------------+-----------+
用域名的时候在外网测试,只能用户登录,无法连上realm 。于是只好又把address改成公网ip 由于公网太慢,所以要改回局域网: UPDATE realmlist SET address = '192.168.0.12' WHERE address = '194.36.209.246'; |
最终的结果就是:
将address设为公网ip,不管局域网还是外网,都用这个公网ip登陆。
后续:
准备用freebsd编译它!但是还没有成功。
调试
数据调试
数据这里也有波折,先记录下:
删除:
sudo apt remove mysql-server*
安装:
sudo apt install mariadb-server-10.6
数据库那块,默认的用户名和密码是tirnity trinity
这里走了很长时间的弯路。
报错Map file './maps/0004331.map' does not exist!
VMap data directory is: ./vmaps
Map file './maps/0004331.map' does not exist!
Please place MAP-files (*.map) in the appropriate directory (./maps/), or correct the DataDir setting in your worldserver.conf file.
Unable to load critical files - server shutting down !!!
网上有issue:Map 0000_43_31.map is missing · Issue #19791 · TrinityCore/TrinityCore · GitHub
还是有人说数据路径要用绝对路径,于是
编辑文件server/etc/worldserver.conf,使用绝对路径
# DataDir = "."
DataDir = "/home/wow/server/data"
问题解决。