====== Information ======
* TrinityCore ((https://www.trinitycore.org))
* 3.3.5 ((https://github.com/TrinityCore/TrinityCore/tree/3.3.5))
* These notes provide a local singleplayer server for World of Warcraft 3.3.5 on Linux (see [[servers;windows;games;trinitycore_3.3.5_localhost|these notes]] for Windows)
* For a traditional dedicated server see [[servers;linux;games;trinitycore_3.3.5_localhost|these notes]]
===== Prerequisites =====
* [[linux;distros;fedora_workstation_gnome|Fedora Workstation (GNOME)]]
* [[servers;linux;mysql|MySQL]] (([[https://github.com/TrinityCore/TrinityCore/pull/29960|#29960]] and [[https://github.com/TrinityCore/TrinityCore/pull/30255|#30255]] about MariaDB compatibility))
* [[games;linux;wine;world_of_warcraft_3.3.5|World of Warcraft 3.3.5 (Linux)]]
===== Resources =====
* [[https://trinitycore.org/|TrinityCore]]
* [[https://trinitycore.info/|TrinityCore MMo Project Wiki]]
====== Dependencies ======
****
sudo dnf install bzip2-devel gcc-c++ cmake git-core boost boost-devel readline-devel zlib-ng-compat-devel openssl-devel mysql-devel
====== Download Source ======
****
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
====== Databases ======
mysql --user='root' --password
CREATE DATABASE authserver;
CREATE DATABASE characters;
CREATE DATABASE worldserver;
CREATE USER 'authserver'@'localhost' IDENTIFIED BY 'x';
CREATE USER 'characters'@'localhost' IDENTIFIED BY 'x';
CREATE USER 'worldserver'@'localhost' IDENTIFIED BY 'x';
GRANT ALL PRIVILEGES ON authserver.* to 'authserver'@'localhost';
GRANT ALL PRIVILEGES ON characters.* to 'characters'@'localhost';
GRANT ALL PRIVILEGES ON worldserver.* to 'worldserver'@'localhost';
FLUSH PRIVILEGES;
EXIT
====== Initial Compile ======
* 2024/06/02: Takes about 11 minutes on i5-8400H
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' && cmake ~/'Projects/trinity-335/src' -DCMAKE_INSTALL_PREFIX=~/'Projects/trinity-335/run' -DCMAKE_BUILD_TYPE='Release' -DTOOLS='1' && sync && make --jobs=$(nproc) install && sync
====== Update ======
* https://github.com/TrinityCore/TrinityCore/commits/3.3.5/
git -C ~/'Projects/trinity-335/src' pull origin '3.3.5' && cd ~/'Projects/trinity-335/build' && cmake ~/'Projects/trinity-335/src' -DCMAKE_INSTALL_PREFIX=~/'Projects/trinity-335/run' -DCMAKE_BUILD_TYPE='Release' -DTOOLS='1' && sync && make --jobs=$(nproc) install && sync
====== Content ======
* Expects [[games;linux;wine;world_of_warcraft_3.3.5|World of Warcraft 3.3.5]]
===== DBCs, Maps, and Cameras =====
* 2024/06/02: Takes about 30 seconds on i5-8400H ((''dbc'' folder is 86 MB, ''maps'' folder is 531 MB, ''Cameras'' folder is 34 KB))
cp --force ~/'Projects/trinity-335/run/bin/mapextractor' ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && cd ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && rm -Rf 'dbc' 'maps' 'Cameras' && ./'mapextractor' -f '0' && sync
===== VMaps =====
==== Extract ====
* 2024/06/02: Takes about 45 seconds on i5-8400H ((''vmaps'' folder is 1.23 GB))
cp --force ~/'Projects/trinity-335/run/bin/vmap4extractor' ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && cd ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && rm -Rf 'Buildings' && ./'vmap4extractor' -l && sync
==== Assemble ====
* 2024/06/02: Takes about 11 seconds on i5-8400H ((''vmaps'' folder is 1.23 GB))
cp --force ~/'Projects/trinity-335/run/bin/vmap4assembler' ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && cd ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && rm -Rf 'vmaps' && mkdir -p 'vmaps' && ./'vmap4assembler' 'Buildings' 'vmaps' && sync
===== MMaps =====
* :!: 2024/08/08: Takes about 32 minutes on i5-8400H ((''mmaps'' folder is 1.5 GB))
cp --force ~/'Projects/trinity-335/run/bin/mmaps_generator' ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && cd ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && rm -Rf 'mmaps' && mkdir -p 'mmaps' && ./'mmaps_generator' --bigBaseUnit 'true' --threads $(nproc) && sync
===== Move Files =====
****
cd ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && mv --force 'dbc' 'maps' 'Cameras' 'vmaps' 'mmaps' ~/'Projects/trinity-335/run/bin' && rm -f 'mapextractor' 'vmap4extractor' 'vmap4assembler' 'mmaps_generator' && cd ~ && sync
==== Check Files ====
* ''~/Projects/trinity-335/run/bin'' needs ''Cameras'', ''dbc'', ''maps'', ''mmaps'', and ''vmaps'' folders
ls --directory ~/'Projects/trinity-335/run/bin/dbc' ~/'Projects/trinity-335/run/bin/maps' ~/'Projects/trinity-335/run/bin/Cameras' ~/'Projects/trinity-335/run/bin/vmaps' ~/'Projects/trinity-335/run/bin/mmaps'
gio open ~/'Projects/trinity-335/run/bin/'
===== Clean-up =====
cd ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && rm -Rf 'Buildings' 'mapextractor' 'vmap4extractor' 'vmap4assembler' 'mmaps_generator' 'WoWDL.lnk' && cd ~ && sync
gio open ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/'
===== World Database =====
==== TDB ====
* https://github.com/TrinityCore/TrinityCore/releases
* Download the latest ''TDB 335'' ''.7z'' with a web browser
* Expects something like ''TDB_full_world_335.24081_2024_08_17.7z'' in ''~/Downloads''
rm -Rf ~/'Projects/trinity-335/run/bin/TDB_full_world_335.'*'.sql' && cd ~/'Projects/trinity-335/run/bin' && 7za x ~/'Downloads/TDB_full_world_335.'*'.7z' && cd ~
====== Settings ======
===== authserver =====
* Last commit: [[https://github.com/TrinityCore/TrinityCore/commit/68bf7e6d12e1689d688db32c05066b8832922c67|Jul 28, 2021]] ''68bf7e6''
* [[https://github.com/TrinityCore/TrinityCore/commits/3.3.5/src/server/authserver/authserver.conf.dist|New commits check]]
* [[https://github.com/TrinityCore/TrinityCore/blob/3.3.5/src/server/authserver/authserver.conf.dist|Upstream authserver.conf.dist]] ([[https://raw.githubusercontent.com/TrinityCore/TrinityCore/3.3.5/src/server/authserver/authserver.conf.dist|raw]])
* Last updated: 2024/08/25
cp ~/'Projects/trinity-335/run/etc/authserver.conf.dist' ~/'Projects/trinity-335/run/etc/authserver.conf'
mkdir -p ~/'Projects/trinity-335/authserver.conf.d' && nano ~/'Projects/trinity-335/authserver.conf.d/localhost-authserver.conf'
[authserver]
LoginDatabaseInfo = ".;/var/lib/mysql/mysql.sock;authserver;x;authserver"
Updates.EnableDatabases = 1
===== worldserver =====
* Last commit: [[https://github.com/TrinityCore/TrinityCore/commit/e11613eeb5dcad16f5908c9c7dd8109baabe9272|Feb 16, 2023]] ''e11613e''
* [[https://github.com/TrinityCore/TrinityCore/commits/3.3.5/src/server/worldserver/worldserver.conf.dist|New commits check]]
* [[https://github.com/TrinityCore/TrinityCore/blob/3.3.5/src/server/worldserver/worldserver.conf.dist|Upstream worldserver.conf.dist]] ([[https://raw.githubusercontent.com/TrinityCore/TrinityCore/3.3.5/src/server/worldserver/worldserver.conf.dist|raw]])
* Last updated: 2024/08/25
cp ~/'Projects/trinity-335/run/etc/worldserver.conf.dist' ~/'Projects/trinity-335/run/etc/worldserver.conf'
mkdir -p ~/'Projects/trinity-335/worldserver.conf.d' && nano ~/'Projects/trinity-335/worldserver.conf.d/localhost-worldserver.conf'
[worldserver]
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"
Quests.LowLevelHideDiff = -1
Quests.HighLevelHideDiff = -1
Motd = "Welcome to your localhost server!"
Server.LoginInfo = 1
====== Launch ======
* 2 separate Terminal windows
cd ~/'Projects/trinity-335/run/bin' && ~/'Projects/trinity-335/run/bin/authserver' --config-dir ~/'Projects/trinity-335/authserver.conf.d'
cd ~/'Projects/trinity-335/run/bin' && ~/'Projects/trinity-335/run/bin/worldserver' --config-dir ~/'Projects/trinity-335/worldserver.conf.d'
===== Script =====
* This is attached to the [[games;linux;wine;world_of_warcraft_3.3.5#desktop_launcher|WoW 3.3.5 desktop launcher]] Server action
mkdir -p ~/'Projects/trinity-335/scripts' && nano ~/'Projects/trinity-335/scripts/tc-335-server-start.sh' && chmod +x ~/'Projects/trinity-335/scripts/tc-335-server-start.sh'
#!/bin/bash
cd ~/'Projects/trinity-335/run/bin'
ptyxis --standalone --title='WoW 3.3.5 localhost authserver' -- ~/'Projects/trinity-335/run/bin/authserver' --config-dir ~/'Projects/trinity-335/authserver.conf.d' &
ptyxis --standalone --title='WoW 3.3.5 localhost worldserver' -- ~/'Projects/trinity-335/run/bin/worldserver' --config-dir ~/'Projects/trinity-335/worldserver.conf.d'
# End
~/'Projects/trinity-335/scripts/tc-335-server-start.sh'
====== Create GM Account ======
* ''worldserver''
* Change ''x'' to password
account create Espionage724 x
account set gmlevel Espionage724 3 -1
server shutdown 1
====== Character Data ======
===== Backup =====
* Dumps ''authserver'' and ''characters'' MySQL databases as ''.sql'' in ''~/Downloads''
==== Commands ====
=== authserver ===
****
cd ~/'Downloads' && mysqldump --user='root' --password --opt --result-file='localserver-authserver-database-'$(date +%Y-%m-%d-%s)'.sql' 'authserver'
=== characters ===
****
cd ~/'Downloads' && mysqldump --user='root' --password --opt --result-file='localserver-characters-database-'$(date +%Y-%m-%d-%s)'.sql' 'characters'
==== Script ====
* This is attached to the [[games;linux;wine;world_of_warcraft_3.3.5#desktop_launcher|WoW 3.3.5 desktop launcher]] Saves action
mkdir -p ~/'Projects/trinity-335/scripts' && nano ~/'Projects/trinity-335/scripts/tc-335-save-backup.sh' && chmod +x ~/'Projects/trinity-335/scripts/tc-335-save-backup.sh'
#!/bin/bash
cd ~/'Downloads'
mysqldump --user='root' --password --opt --result-file='localserver-authserver-database-'$(date +%Y-%m-%d-%s)'.sql' 'authserver'
mysqldump --user='root' --password --opt --result-file='localserver-characters-database-'$(date +%Y-%m-%d-%s)'.sql' 'characters'
sync
read -n '1' -s -r -p 'localserver databases have been dumped to Downloads. Press any key to exit.'
# End
~/'Projects/trinity-335/scripts/tc-335-save-backup.sh'
===== Restore =====
==== authserver ====
ls ~/'Downloads/localserver-authserver-database-'*'.sql' && mysql --user='root' --password --execute='DROP DATABASE authserver'
mysql --user='root' --password --execute='CREATE DATABASE authserver'
mysql --user='root' --password 'authserver' < ~/'Downloads/localserver-authserver-database-'*'.sql'
==== characters ====
ls ~/'Downloads/localserver-characters-database-'*'.sql' && mysql --user='root' --password --execute='DROP DATABASE characters'
mysql --user='root' --password --execute='CREATE DATABASE characters'
mysql --user='root' --password 'characters' < ~/'Downloads/localserver-characters-database-'*'.sql'
==== Reapply Permissions ====
mysql --user='root' --password
CREATE USER 'authserver'@'localhost' IDENTIFIED BY 'x';
CREATE USER 'characters'@'localhost' IDENTIFIED BY 'x';
GRANT ALL PRIVILEGES ON authserver.* to 'authserver'@'localhost';
GRANT ALL PRIVILEGES ON characters.* to 'characters'@'localhost';
FLUSH PRIVILEGES;
EXIT