After the closure of the official World of Warcraft server in China, many long-time players felt a sense of loss. World of Warcraft has been part of their lives for over a decade, and this closure effectively closed the door to Azeroth.
When God closes a door, we can open a window ourselves. With the shutdown of the official servers, more players are eager to set up their own servers and become server administrators. This guide will share how to set up a World of Warcraft server.
To build a commercial server, you need the World of Warcraft server and client. If you lack technical skills, you can hire someone to assist with setup and debugging or learn from experts.
World of Warcraft Server Options
There are multiple versions available:
- 60-level Classic Era
- 70-level The Burning Crusade
- 80-level Wrath of the Lich King
- 85-level Cataclysm
- 90-level Mists of Pandaria
- 100-level Warlords of Draenor
- 110-level Legion
- 120-level Battle for Azeroth
Choose your preferred version or one that is popular among players.
Server Requirements
Player experience and game smoothness depend on the server. World of Warcraft does not have high server requirements. CPUs like Intel E5 or Core i9 series with 16 cores can meet the needs. In addition to the CPU, consider server bandwidth and defense. Bandwidth determines how many players can be online simultaneously. There are shared and dedicated bandwidth options.
Game development often faces attacks from competitors or attack groups. Choosing a server with low defense could result in connectivity issues, directly affecting player experience. High-defense servers are essential.
Defense comes in two forms: single-machine defense and cluster defense. Single-machine defense protects one server. Cluster defense uses a group of firewalls to protect multiple servers. If an attack exceeds the cluster's capacity, all servers in the cluster may crash. Different data centers offer varying levels of protection and after-sales service. Server performance can be tested for initial assessment.
Setting Up a World of Warcraft Server on Debian
Preparation
Install Dependencies
apt-get update
apt-get install git clang cmake make gcc g++
update-alternatives --install /usr/bin/cc cc /usr/bin/clang 100
update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang 100
Boost dependencies
apt-get install -y libboost-all-dev \
libboost-system-dev \
libboost-filesystem-dev \
libboost-program-options-dev \
libboost-iostreams-dev
MariaDB server
apt-get install libmariadbclient-dev
zlib
apt-get install zlib1g-dev
OpenSSL
apt-get install libssl-dev
Readline
apt-get install libreadline-dev
MySQL
apt-get install -y libmysqlclient-dev
Create a wow user
Username: wow
adduser wow
su wow
If using Windows Subsystem for Linux, set the default user.
In Windows command line, run:
cd %HOMEPATH%\AppData\Local\Microsoft\WindowsApps
Find the debian.exe file (ubuntu.exe if using Ubuntu)
debian.exe config --default-user wow
After setting, entering the subsystem will use the wow user.
Directory Setup
Execute as wow user
su wow
cd ~
Since it is an online game, both client and server files are needed. Create corresponding directories for later operations.
TrinityCore source code directory
mkdir /home/wow/TrinityCore
Server directory, containing etc, bin, and data subdirectories
mkdir /home/wow/server3.5.5
Client directory, used to store client versions and extract client data
mkdir /home/wow/client12340
Download Files
Server Download
Release TDB 335.22061 · TrinityCore/TrinityCore · GitHub
cd /home/wow/TrinityCore
wget https://github.com/TrinityCore/TrinityCore/archive/refs/tags/TDB335.22061.zip
Unzip:
unzip TDB335.22061.zip
Client Download
Client version: 3.3.5 (12340)
Download and extract, then upload the files to the Linux server.
Compile Server
Switch to wow user
su wow
cd /home/wow/TrinityCore/TrinityCore-TDB335.22061
Build the project:
mkdir build
cd build
cmake ../ -DCMAKE_INSTALL_PREFIX=/home/wow/server3.5.5
# This step may take time; use nohup or screen
make -j$(nproc) install
After compilation, the /home/wow/server3.5.5 directory will contain bin, etc, and data.
bin contains the executable files. data will hold the extracted map data from the client. etc contains configuration files.
Note: Check these directories for later use.
Modify Configuration Files
Copy worldserver.conf.dist and authserver.conf.dist, then remove .dist from the names.
cp /home/wow/server3.5.5/etc/worldserver.conf.dist worldserver.conf
cp /home/wow/server3.5.5/etc/authserver.conf.dist authserver.conf
Modify DataDir = "." to DataDir = "../data" in worldserver.conf.
Note: You can use a relative path "../data" or an absolute path "/home/wow/server3.5.5/data".
Extract Client Data
DBC and Maps Files
Copy the downloaded client to the designated client directory /home/wow/client12340 and navigate to it.
cd /home/wow/client12340
Run the following command to extract client data:
/home/wow/server3.5.5/bin/mapextractor
mkdir /home/wow/server3.5.5/data
cp -r dbc maps /home/wow/server3.5.5/data
Visual Maps (vmaps)
cd /home/wow/client12340
/home/wow/server3.5.5/bin/vmap4extractor
mkdir vmaps
/home/wow/server3.5.5/bin/vmap4assembler Buildings vmaps
cp -r vmaps /home/wow/server3.5.5/data
Movement Maps (mmaps)
cd /home/wow/client12340
mkdir mmaps
/home/wow/server3.5.5/bin/mmaps_generator
cp -r mmaps /home/wow/server3.5.5/data
Copy map data to the data directory:
cp -r dbc maps /home/wow/server3.5.5/data
cp -r vmaps /home/wow/server3.5.5/data
cp -r mmaps /home/wow/server3.5.5/data
Database
Use root to start the database. We already installed mariadb-server during the environment setup (you can also use mysql).
Start Database
systemctl enable mysql
systemctl restart mysql
Initialize Database
mysql_secure_installation
# Enter current password for root (enter for none):
# Change the root password? [Y/n]
Y
# Enter password twice
# Remove anonymous users? [Y/n]
Y
# Disallow root login remotely? [Y/n]
# Remove test database and access to it? [Y/n]
Y
# Reload privilege tables now? [Y/n]
Y
Login to Database
mysql -u root
Successful login shows:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.1.29-MariaDB-6 Ubuntu 18.04
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
Import Data
1. Create Database
Source /home/wow/TrinityCore/TrinityCore-TDB335.22061/sql/create/create_mysql.sql
Show all databases:
show databases
+--------------------+ | Database | +--------------------+ | auth | | characters | | information_schema | | mysql | | performance_schema | | world | +--------------------+
2. Create Tables use auth;
Source /home/wow/TrinityCore/TrinityCore-TDB335.22061/sql/base/auth_database.sql
use characters;
Source /home/wow/TrinityCore/TrinityCore-TDB335.22061/sql/base/characters_database.sql
Load Map Data
Create a data directory to store map data:
mkdir /home/wow/server3.5.5/data
Configure Network
Connect to the database and run the following SQL to open the auth database and check the realmlist table:
use auth;
select id, name, address, localaddress, gamebuild from realmlist;
address is the current IP and the client connection IP. By default, it is 127.0.0.1 when running locally. When deploying to a server, change it to the server IP.
port is the external port and the client connection port. Ensure this port is open.
localaddress is the internal IP.
gamebuild is the client version number, which depends on the client version used (12340 or 13930).
Start Server
Run authserver (the authentication service, where account logins are verified before requesting the worldserver):
/home/wow/server3.5.5/bin/authserver
# or
/home/wow/server3.5.5/bin/authserver -c /home/wow/server3.5.5/etc/authserver.conf
A successful startup displays:
Connected to MySQL database at 127.0.0.1
DatabasePool 'auth' opened successfully. 2 total connections running.
Started auth database connection pool.
Loading IP Location Database...
Added realm "Trinity" at 127.0.0.1:8085.
Run worldserver:
/home/wow/server3.5.5/bin/worldserver
If you followed the steps correctly, the output might indicate a missing file:
TDB_full_world_335.22061_2022_06_01.sql!!!
File "TDB_full_world_335.22061_2022_06_01.sql" is missing,
download it from "https://github.com/TrinityCore/TrinityCore/releases"
uncompress it and place the file "TDB_full_world_335.22061_2022_06_01.sql"
in the directory "/home/rendu".
Based on the message from the worldserver, download the file from the provided link.
World initialized in 11 minutes 39 seconds
Starting up anti-freeze thread (60 seconds max stuck time)...
TrinityCore rev. fc56410b6e0d 2021-02-19 00:42:06 +0200 (3.3.5 branch) (Unix, RelWithDebInfo, Static) (worldserver-daemon) ready...
TC>
Seeing the above output means the worldserver started successfully.
Add Account
Create a username idc02 with password idc02 using the following command format:
account create <user> <pass>
TC>TC> account create idc02 idc02
Upgrade to GM
You can set the gmlevel of idc02 to 3 to upgrade to a GM account. Run the following in the worldserver command line:
TC> account set gmlevel idc02 3 -1
Login to Game
Open the cliant directory, find wow.exe, and create a wow.bat in the same directory with the following content:
On a local setup, fill in 127.0.0.1. For a remote server, use the server IP, which should match the address in realmlist.
echo y | rd /s "Cache"
echo SET realmlist "103.219.39.*" > Data\zhTW\realmlist.wtf
echo SET realmlist "103.219.39.*" > Data\enTW\realmlist.wtf
echo SET realmlist "103.219.39.*" > Data\zhCN\realmlist.wtf
echo SET realmlist "103.219.39.*" > Data\enCN\realmlist.wtf
echo SET realmlist "103.219.39.*" > Data\enUS\realmlist.wtf
echo SET realmlist "103.219.39.*" > realmlist.wtf
start Wow.exe
goto end
Run the script, and the client configuration will be complete. You can now enter the game.
The BaoTa panel is convenient for managing the system.
Here is the installation script for the BaoTa Linux panel.
CentOS:
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 1ba5f33df
Ubuntu/Debian:
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh 1ba5f33df
Install only the panel without any web services.
In the panel, set the API interface: Panel Settings -> API Interface, enable the interface, and save the API key, add the server IP to the whitelist
Open the following ports:
1001: Server connection port 1002: User login port 1003: MySQL database port 1004: SOAP port