User Tools

Site Tools


servers:games:trinitycore_3.3.5

This is an old revision of the document!


Information

Prerequisites

Notes

  • :!: As of 2022/09/30, these notes were tested on F36 up until the systemd scripts; TODO: fix them
  • :!: Do not use Warmane's WotLK client for content extraction nor to play with as it's modified and fails if authserver.conf/StrictVersionCheck = 1

Create Group and User

sudo groupadd 'trinity' && sudo useradd -c 'TrinityCore system account' -d '/var/lib/trinity' -g 'trinity' -m -r 'trinity'

Dependencies

Packages

sudo dnf install bzip2-devel clang cmake git mariadb-devel boost-devel readline-devel

Firewall

  • 3724/tcp is loginserver and needs forwarded from the router also for WAN
  • 8085/tcp is worldserver and needs forwarded from the router also for WAN
  • 3443/tcp is Remote Console
  • 7878/tcp is SOAP
sudo firewall-cmd --add-port='3724'/'tcp' --permanent && sudo firewall-cmd --reload
sudo firewall-cmd --add-port='8085'/'tcp' --permanent && sudo firewall-cmd --reload
sudo firewall-cmd --add-port='3443'/'tcp' --permanent && sudo firewall-cmd --reload
sudo firewall-cmd --add-port='7878'/'tcp' --permanent && sudo firewall-cmd --reload

Download Source

sudo su 'trinity' -s '/usr/bin/bash'
cd ~ && mkdir -p ~/'Projects' && rm -Rf ~/'Projects/trinity-335/src' && git clone --branch '3.3.5' --depth '1' --recurse-submodules 'https://github.com/TrinityCore/TrinityCore.git' ~/'Projects/trinity-335/src' && sync
exit

Databases

Initial

  • This creates the authserver, characters, and worldserver databases
sudo mysql
CREATE DATABASE authserver;
GRANT ALL PRIVILEGES ON authserver.* to 'authserver'@'localhost' IDENTIFIED BY 'x';
CREATE DATABASE characters;
GRANT ALL PRIVILEGES ON characters.* to 'characters'@'localhost' IDENTIFIED BY 'x';
CREATE DATABASE worldserver;
GRANT ALL PRIVILEGES ON worldserver.* to 'worldserver'@'localhost' IDENTIFIED BY 'x';
FLUSH PRIVILEGES;
EXIT

TDB

sudo su 'trinity' -s '/usr/bin/bash'
rm -Rf '/tmp/TDB' '/tmp/TDB/TDB335.7z' && mkdir -p '/tmp/TDB' && cd ~ && wget -O '/tmp/TDB/TDB335.7z' 'https://github.com/TrinityCore/TrinityCore/releases/download/TDB335.22101/TDB_full_world_335.22101_2022_10_17.7z' && 7za x '/tmp/TDB/TDB335.7z' -o'/tmp/TDB' && mv '/tmp/TDB/TDB_full_world_335'*'.sql' ~/'Projects/trinity-335/run/bin' && rm -Rf '/tmp/TDB' && sync

Compile

  • :!: This wipes out the run folder, so ideally any extracted content and the full TDB shouldn't be moved there until after this initial compile
sudo su 'trinity' -s '/usr/bin/bash'
rm -Rf ~/'Projects/trinity-335/build' ~/'Projects/trinity-335/run' && mkdir -p ~/'Projects/trinity-335/build' ~/'Projects/trinity-335/run' && cd ~/'Projects/trinity-335/build' && CC='/usr/bin/clang' CXX='/usr/bin/clang++' cmake ~/'Projects/trinity-335/src' -DCMAKE_INSTALL_PREFIX=~/'Projects/trinity-335/run' -DTOOLS='1' && sync && make --jobs=$(nproc) install && sync
exit

Extractors

  • Copies mapextractor, vmap4extractor, vmap4assembler, and mmaps_generator to /tmp/trinity-extractors
mkdir -p '/tmp/trinity-extractors' && sudo cp '/var/lib/trinity/Projects/trinity-335/run/bin/mapextractor' '/var/lib/trinity/Projects/trinity-335/run/bin/vmap4extractor' '/var/lib/trinity/Projects/trinity-335/run/bin/vmap4assembler' '/var/lib/trinity/Projects/trinity-335/run/bin/mmaps_generator' '/tmp/trinity-extractors' && sudo chown -R $USER:$USER '/tmp/trinity-extractors' && sync

Content

Transfer Extractors to Client

  • :!: Run on the machine doing the content extraction
  • See WoW 3.3.5 installation notes
mkdir -p '/tmp/trinity-extractors' && scp espionage724@192.168.1.152:'/tmp/trinity-extractors/'* '/tmp/trinity-extractors' && mv '/tmp/trinity-extractors/'* ~/'Wine Prefixes/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft' && sync

Dependencies

  • :!: Run on the machine doing the content extraction
sudo dnf install 'boost'

Extract and Generate Content

DBCs, Maps, and Cameras

  • :!: Run on the machine doing the content extraction
cd ~/'Wine Prefixes/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft' && ./'mapextractor' -f '0'  && sync

VMaps

Extract

  • :!: Run on the machine doing the content extraction
cd ~/'Wine Prefixes/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft' && ./'vmap4extractor' -l && sync

Assemble

  • :!: Run on the machine doing the content extraction
cd ~/'Wine Prefixes/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft' && mkdir -p 'vmaps' && ./'vmap4assembler' 'Buildings' 'vmaps' && sync

MMaps

  • :!: Run on the machine doing the content extraction
cd ~/'Wine Prefixes/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft' && mkdir -p 'mmaps' && ./'mmaps_generator' --bigBaseUnit 'true' --threads $(nproc) && sync

Archive Content

  • Should be around 1.5GB
  • :!: Run on the machine that did the content extraction
cd ~/'Wine Prefixes/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft' && tar -cvzf ~/'Downloads/WotLK-content-'$(date +%Y-%m-%d)'.tar.gz' 'dbc' 'maps' 'vmaps' 'mmaps' 'Cameras' && cd ~ && sync

Transfer Content to Server

  • Should be around 3.6GB
  • :!: Run on the machine that did the content extraction
cd ~/'Wine Prefixes/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft' && scp -r 'dbc' 'maps' 'vmaps' 'mmaps' 'Cameras' espionage724@192.168.1.152:~

Cleanup on Client

  • :!: Run on the machine that did the content extraction
cd ~/'Wine Prefixes/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft' && rm -Rf 'Buildings' 'Cameras' 'dbc' 'maps' 'vmaps' 'mmaps' && cd ~/'Downloads' && rm -f 'mapextractor' 'vmap4extractor' 'vmap4assembler' 'mmaps_generator' && sync

Move Content on Server

  • Moves the dbc, maps, vmaps, mmaps, and Cameras folders from the main user's ~ into the bin folder
  • :!: Run on the machine that is running the server
ls ~/'dbc' ~/'maps' ~/'vmaps' ~/'mmaps' ~/'Cameras' > '/dev/null' && sudo rm -Rf '/var/lib/trinity/Projects/trinity-335/run/bin/dbc' '/var/lib/trinity/Projects/trinity-335/run/bin/maps' '/var/lib/trinity/Projects/trinity-335/run/bin/vmaps' '/var/lib/trinity/Projects/trinity-335/run/bin/mmaps' '/var/lib/trinity/Projects/trinity-335/run/bin/Cameras' && cd ~ && sudo mv 'dbc' 'maps' 'vmaps' 'mmaps' 'Cameras' '/var/lib/trinity/Projects/trinity-335/run/bin' && sudo chown -R 'trinity':'trinity' '/var/lib/trinity/Projects/trinity-335/run/bin/dbc' '/var/lib/trinity/Projects/trinity-335/run/bin/maps' '/var/lib/trinity/Projects/trinity-335/run/bin/vmaps' '/var/lib/trinity/Projects/trinity-335/run/bin/mmaps' '/var/lib/trinity/Projects/trinity-335/run/bin/Cameras' && sync
sudo restorecon -F -I -R '/var/lib/trinity/Projects/trinity-335' && sync

Settings

authserver

Copy

sudo su 'trinity' -s '/usr/bin/bash'
cp ~/'Projects/trinity-335/run/etc/authserver.conf.dist' ~/'Projects/trinity-335/run/etc/authserver.conf'

Settings

sudo su 'trinity' -s '/usr/bin/bash'
nano ~/'Projects/trinity-335/run/etc/authserver.conf'
WrongPass.MaxCount = 5
WrongPass.BanTime = 0

StrictVersionCheck = 1

LoginDatabaseInfo = ".;/var/lib/mysql/mysql.sock;authserver;x;authserver"

Updates.EnableDatabases = 1

Updates.CleanDeadRefMaxCount = -1

worldserver

Copy

sudo su 'trinity' -s '/usr/bin/bash'
cp ~/'Projects/trinity-335/run/etc/worldserver.conf.dist' ~/'Projects/trinity-335/run/etc/worldserver.conf'

Settings

sudo su 'trinity' -s '/usr/bin/bash'
nano ~/'Projects/trinity-335/run/etc/worldserver.conf'
LoginDatabaseInfo     = ".;/var/lib/mysql/mysql.sock;authserver;x;authserver"
WorldDatabaseInfo     = ".;/var/lib/mysql/mysql.sock;worldserver;x;worldserver"
CharacterDatabaseInfo = ".;/var/lib/mysql/mysql.sock;characters;x;characters"

MaxCoreStuckTime = 10

CleanCharacterDB = 1
PersistentCharacterCleanFlags = 14

RealmZone = 2
StrictPlayerNames = 1
StrictCharterNames = 1
StrictPetNames = 1

DBC.Locale = 0  

Instance.IgnoreRaid = 1

Quests.LowLevelHideDiff = -1

Motd = "Welcome to the Realm of Espionage World of Warcraft server!"
Server.LoginInfo = 1
BirthdayTime = 1170471600

Updates.CleanDeadRefMaxCount = -1

Warden.Enabled = 0

PreserveCustomChannels = 0

Ra.Enable = 1

PacketSpoof.Policy = 0

Production

Warden.Enabled = 1
Warden.ClientCheckFailAction = 2

SOAP.Enabled = 1
SOAP.IP = "0.0.0.0"

PreventRenameCharacterOnCustomization = 1

PacketSpoof.Policy = 2
PacketSpoof.BanMode = 2

AntiCheat.PendingMoveChangesTimeoutTime = 3000

Create GM Account

  • Starting the worldserver by itself and first is intentional
sudo su 'trinity' -s '/usr/bin/bash'
cd ~/'Projects/trinity-335/run/bin' && ~/'Projects/trinity-335/run/bin/worldserver'
account create Espionage724 x
account set gmlevel Espionage724 3 -1
server shutdown 1

Other Settings

Disable Console

Config

  • This prevents the system log from having unnecessary console spam
  • :!: To be done after creating the initial GM account
  • Any additional console use should come from telnet from a remote machine on the local network
  • :!: Credentials for the remote console are the same as the GM account created above
sudo su 'trinity' -s '/usr/bin/bash'
nano ~/'Projects/trinity-335/run/etc/worldserver.conf'
Console.Enable = 0

telnet

telnet '192.168.1.152' '3443'
server shutdown 1

Realm Information

  • To be done after databases are initialized
  • Applies to the first realm
  • :!: If running a LAN server, change wow.realmofespionage.xyz to LAN IP
sudo mysql
UPDATE `authserver`.`realmlist` SET `name` = 'RoE (WotLK)', `address` = 'wow.realmofespionage.xyz' WHERE `realmlist`.`id` = 1;

Two-Factor Authentication

  • To be done after databases are initialized
  • Applies to the first account
  • :!: token_key must contain and not exceed 16 characters and can only contain characters A-Z and numbers 2-7 6)
  • Add key to Authenticator app
  • Authenticator will be prompted from the game client on each log-in
mysql -u root -p
UPDATE `authserver`.`account` SET `token_key` = 'x' WHERE `account`.`id` = 1

SOAP

  • TODO: Re-figure out how SOAP works

Services

authserver

Service

sudo -e '/etc/systemd/system/tc-335-auth.service' && sudo systemctl daemon-reload && sudo systemctl enable 'tc-335-auth'
[Unit]
Description=TrinityCore 3.3.5 authserver
Wants=network-online.target
After=network-online.target mysqld.service

[Service]
Type=simple
User=trinity
Group=trinity
WorkingDirectory=/var/lib/trinity/Projects/trinity-335/run/bin
ExecStart='/var/lib/trinity/Projects/trinity-335/run/bin/authserver' -c '/var/lib/trinity/Projects/trinity-335/run/etc/authserver.conf'
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

SELinux

  • :!: May have to re-run this series of commands over-time
sudo setenforce 0
sudo systemctl start 'tc-335-auth' && sudo systemctl status 'tc-335-auth' -l
mkdir -p ~/'policies' && cd ~/'policies' && sudo grep 'authserver' '/var/log/audit/audit.log' | sudo audit2allow -M 'authserver' && sudo semodule -i 'authserver.pp' && cd ~
sudo setenforce 1
nano ~/'policies/authserver.te'

worldserver

  • :!: Make sure worldserver's Console is disabled before starting the worldserver service (see configuration)

Service

sudo -e '/etc/systemd/system/tc-335-world.service' && sudo systemctl daemon-reload && sudo systemctl enable 'tc-335-world'
[Unit]
Description=TrinityCore 3.3.5 worldserver
Wants=network-online.target
After=network-online.target mysqld.service

[Service]
Type=simple
User=trinity
Group=trinity
WorkingDirectory=/var/lib/trinity/Projects/trinity-335/run/bin
ExecStart='/var/lib/trinity/Projects/trinity-335/run/bin/worldserver' -c '/var/lib/trinity/Projects/trinity-335/run/etc/worldserver.conf'
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

SELinux

  • :!: May have to re-run this series of commands over-time
sudo setenforce 0
sudo systemctl start 'tc-335-world' && sudo systemctl status 'tc-335-world' -l
mkdir -p ~/'policies' && cd ~/'policies' && sudo grep 'worldserver' '/var/log/audit/audit.log' | sudo audit2allow -M 'worldserver' && sudo semodule -i 'worldserver.pp' && cd ~
sudo setenforce 1
nano ~/'policies/worldserver.te'

Information

  • :!: Explanation of the update process and following services
  1. Pull-in updated sources and compile TC (1:00)
  2. Stop TC auth and world services (3:00)
  3. Install updated-compiled TC (3:02:30)
  4. Start TC auth and world services (3:05)

Updater

Service

  • :!: Change make --jobs=2 as-needed
sudo -e '/etc/systemd/system/tc-335-up.service'
[Service]
User=trinity
Group=trinity
Type=oneshot
WorkingDirectory=/var/lib/trinity/Projects/trinity-335/build
Environment='CC=/usr/bin/clang'
Environment='CXX=/usr/bin/clang++'
ExecStartPre='/usr/bin/make' clean
ExecStartPre='/usr/bin/git' -C '/var/lib/trinity/Projects/trinity-335/src' pull origin '3.3.5'
ExecStartPre='/usr/bin/sync'
ExecStart='/usr/bin/cmake' '/var/lib/trinity/Projects/trinity-335/src' -DCMAKE_INSTALL_PREFIX='/var/lib/trinity/Projects/trinity-335/run' -DTOOLS='1'
ExecStart='/usr/bin/make' --jobs='2'
ExecStartPost='/usr/bin/sync'

Timer

  • Every day at 01:00:00
sudo -e '/etc/systemd/system/tc-335-up.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'tc-335-up.timer' --now
[Unit]
Description=TrinityCore 3.3.5 Git Updater and Compiler
Wants=network-online.target
After=network-online.target

[Timer]
OnCalendar=*-*-* 01:00:00
Persistent=true

[Install]
WantedBy=timers.target

Stopper

Service

sudo -e '/etc/systemd/system/tc-335-stop.service'
[Service]
Type=oneshot
ExecStart='/usr/bin/systemctl' stop 'tc-335-auth'
ExecStart='/usr/bin/systemctl' stop 'tc-335-world'
ExecStartPost='/usr/bin/sync'

Timer

  • Every day at 03:00:00
sudo -e '/etc/systemd/system/tc-335-stop.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'tc-335-stop.timer' --now
[Unit]
Description=TrinityCore 3.3.5 Services Stopper
Wants=network-online.target mysqld.service
After=network-online.target

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target

Post-updater

Service

sudo -e '/etc/systemd/system/tc-335-up-post.service'
[Service]
User=trinity
Group=trinity
Type=oneshot
WorkingDirectory=/var/lib/trinity/Projects/trinity-335/build
ExecStart='/usr/bin/make' install
ExecStartPost='/usr/bin/sync'

Timer

  • Every day at 03:02:30
sudo -e '/etc/systemd/system/tc-335-up-post.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'tc-335-up-post.timer' --now
[Unit]
Description=TrinityCore 3.3.5 Post-Updater
Wants=network-online.target
After=network-online.target

[Timer]
OnCalendar=*-*-* 03:02:30
Persistent=true

[Install]
WantedBy=timers.target

Restarter

Service

sudo -e '/etc/systemd/system/tc-335-restart.service'
[Service]
Type=oneshot
ExecStart='/usr/bin/systemctl' start 'tc-335-auth'
ExecStart='/usr/bin/systemctl' start 'tc-335-world'
ExecStartPost='/usr/bin/sync'

Timer

  • Every day at 03:05:00
sudo -e '/etc/systemd/system/tc-335-restart.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'tc-335-restart.timer' --now
[Unit]
Description=TrinityCore 3.3.5 Services Restarter
Wants=network-online.target mysqld.service
After=network-online.target

[Timer]
OnCalendar=*-*-* 03:05:00
Persistent=true

[Install]
WantedBy=timers.target

Database Backup

  • This backs up an archive to the local disk
  • :!: Everything below this line may need re-factored and isn't tested with the updated notes as of 2019/02/19

authserver

Database Auth

sudo -H -u 'mysql' -e '/var/lib/mysql/auth/authserver' && sudo chmod '600' '/var/lib/mysql/auth/authserver'
[mysqldump]
user=authserver
password=x

Service

mkdir -p ~/'backups' && sudo -H -u 'mysql' mkdir -p '/var/lib/mysql/tmp' && sudo -e '/etc/systemd/system/authserver-db.service' && sudo sed -i 's/'CHANGEME'/'$USER'/g' '/etc/systemd/system/authserver-db.service'
[Service]
Type=oneshot
WorkingDirectory=/var/lib/mysql/tmp
ExecStartPre='/usr/bin/mysqldump' --defaults-extra-file='/var/lib/mysql/auth/authserver' --single-transaction 'authserver' -r '/var/lib/mysql/tmp/authserver.sql'
ExecStart='/usr/bin/gzip' -f '/var/lib/mysql/tmp/authserver.sql'
ExecStart='/usr/bin/bash' -c '"/usr/bin/mv" "/var/lib/mysql/tmp/authserver.sql.gz" "/home/CHANGEME/backups/authserver-database-auto-"$$(date +%%Y-%%m-%%d)".sql.gz"'
ExecStartPost='/usr/bin/sync'

Timer

  • This happens daily
sudo -e '/etc/systemd/system/authserver-db.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'authserver-db.timer' --now && sudo systemctl start 'authserver-db' && sudo systemctl status 'authserver-db' -l
[Unit]
Description=TrinityCore (authserver) Database Backup
After=mysqld.service

[Timer]
OnCalendar=*-*-* 03:40:00
Persistent=true

[Install]
WantedBy=timers.target

characters

Database Auth

sudo -H -u 'mysql' -e '/var/lib/mysql/auth/characters' && sudo chmod '600' '/var/lib/mysql/auth/characters'
[mysqldump]
user=characters
password=x

Service

mkdir -p ~/'backups' && sudo -H -u 'mysql' mkdir -p '/var/lib/mysql/tmp' && sudo -e '/etc/systemd/system/characters-db.service' && sudo sed -i 's/'CHANGEME'/'$USER'/g' '/etc/systemd/system/characters-db.service'
[Service]
Type=oneshot
WorkingDirectory=/var/lib/mysql/tmp
ExecStartPre='/usr/bin/mysqldump' --defaults-extra-file='/var/lib/mysql/auth/characters' --single-transaction 'characters' -r '/var/lib/mysql/tmp/characters.sql'
ExecStart='/usr/bin/gzip' -f '/var/lib/mysql/tmp/characters.sql'
ExecStart='/usr/bin/bash' -c '"/usr/bin/mv" "/var/lib/mysql/tmp/characters.sql.gz" "/home/CHANGEME/backups/characters-database-auto-"$$(date +%%Y-%%m-%%d)".sql.gz"'
ExecStartPost='/usr/bin/sync'

Timer

  • This happens daily
sudo -e '/etc/systemd/system/characters-db.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'characters-db.timer' --now && sudo systemctl start 'characters-db' && sudo systemctl status 'characters-db' -l
[Unit]
Description=TrinityCore (characters) Database Backup
After=mysqld.service

[Timer]
OnCalendar=*-*-* 03:41:00
Persistent=true

[Install]
WantedBy=timers.target

Backup

  • Create backup archive on server and transfer to client computer

Server

Stop Services

sudo systemctl stop authserver worldserver

Backup Database

mysqldump -u 'root' -p --defaults-extra-file='/var/lib/mysql/auth/authserver' --single-transaction 'authserver' -r ~/'authserver-database-manual-'$(date +%Y-%m-%d)'.sql' && sync
mysqldump -u 'root' -p --defaults-extra-file='/var/lib/mysql/auth/characters' --single-transaction 'characters' -r ~/'characters-database-manual-'$(date +%Y-%m-%d)'.sql' && sync

Start Services

sudo systemctl start authserver worldserver

Client

Transfer Files To Client

scp espionage724@192.168.1.152:~/'authserver-database-'*'.sql' espionage724@192.168.1.152:~/'characters-database-'*'.sql' ~/'Downloads' && sync

Restore

Client

Uncompress Database

  • This is only needed if restoring an automated database backup 7)
gunzip ~/'Downloads/authserver-database-'*'.sql.gz'
gunzip ~/'Downloads/characters-database-'*'.sql.gz'

Transfer Files To Server

scp ~/'Downloads/authserver-database-'*'.sql' ~/'Downloads/characters-database-'*'.sql' espionage724@192.168.1.152:~

Remove Files

rm -f ~/'Downloads/authserver-database-'*'.sql' ~/'Downloads/characters-database-'*'.sql' && sync

Server

Stop Services

sudo systemctl stop authserver worldserver

Drop Previous Database

mysql -u 'root' -p
DROP DATABASE authserver;
DROP DATABASE characters;
FLUSH TABLES;

Re-create Databases

mysql -u 'root' -p
CREATE DATABASE authserver;
CREATE DATABASE characters;

Restore Database

mysql -u 'root' -p 'authserver' < ~/'authserver-database-'*'.sql' && sync
mysql -u 'root' -p 'characters' < ~/'characters-database-'*'.sql' && sync

Reapply Permissions

mysql -u 'root' -p
GRANT ALL PRIVILEGES ON authserver.* to 'authserver'@'localhost' IDENTIFIED BY 'x';
GRANT ALL PRIVILEGES ON characters.* to 'characters'@'localhost' IDENTIFIED BY 'x';
FLUSH PRIVILEGES;

Start Services

sudo systemctl start authserver worldserver

Remove Backups

  • Verify that TrinityCore works before running
rm ~/'authserver-database-'*'.sql' ~/'characters-database-'*'.sql' && sync
3)
WoW realmlist.wtf
4)
required for content extraction, and since the core and tools are compiled on Linux, the extraction tools will also require a Linux OS to run on
5)
the compile command below wipes out the run folder if it exists before compiling
6)
in other words, token_key requires a 16-character Base32 string
7)
manual doesn't gzip
/var/www/wiki/data/attic/servers/games/trinitycore_3.3.5.1669402411.txt.gz · Last modified: 2022/11/25 13:53 by Sean Rhone