World of Warcraft single-player

August 25, 2017    Article    782 words    4 mins read

To run the Blizzard World of Warcraft - WoTLK (Wrath of the Lich King) 3.3.5 client on your macOS computer and play “single-player”, you will need a running WoW server, the WoW client and a database server (MySQL). Everything else will be downloaded and installed from the Internet. To download the WoW WoTLK client for macOS, start by searching your neighbourhood’s torrent website (hint, thepiratebay.se).

Playing “single-player” can be lots of fun, basically you can explore the world at your pace, do quests, gather achievements, etc, the only part you will be missing is the other players in game. Dungeons and raids (level appropriate) might be hard if not impossible either.

Compile and install the server

Firstly, you will need the server component, in this case, provided by TrinityCore.

Make sure you have Homebrew installed, if not, follow the documentation.

$ brew update
$ brew install mysql openssl readline cmake boost zlib
$ brew link zlib --force

Install Apple Xcode using the Apple App Store, after that install all required components:

$ xcodeselect --install

Clone the TrinityCore repository somewhere, checkout the 3.3.5 branch (Wrath of the Lich King expansion, final patch 3.3.5).

$ git clone https://github.com/TrinityCore/TrinityCore.git
$ cd TrinityCore
$ git checkout 3.3.5
$ mkdir build && cd build

Generate the Xcode project files:

$ cmake ../ \
    -GXcode \
    -DMYSQL_ADD_INCLUDE_PATH=/usr/local/include \
    -DMYSQL_LIBRARY=/usr/local/opt/mysql/lib/libmysqlclient.dylib \
    -DREADLINE_INCLUDE_DIR=/usr/local/opt/readline/include \
    -DREADLINE_LIBRARY=/usr/local/opt/readline/lib/libreadline.dylib \
    -DBOOST_INCLUDEDIR=/usr/local/include \
    -DBOOST_LIBRARYDIR=/usr/local/lib \
    -DOPENSSL_INCLUDE_DIR=/usr/local/opt/openssl/include \
    -DOPENSSL_SSL_LIBRARIES=/usr/local/opt/openssl/lib/libssl.dylib \
    -DOPENSSL_CRYPTO_LIBRARIES=/usr/local/opt/openssl/lib/libcrypto.dylib \
    -DZLIB_ROOT=/usr/local/opt/zlib \
    -DTOOLS=1 \
    -DCMAKE_INSTALL_PREFIX=/usr/local/TrinityCore \
    -DWITH_WARNINGS=1

You can alter the /usr/local/TrinityCore path if you want the server installed in a different directory. The paths are hardcoded due to Homebrew, if you’re self-compiling the prerequisites, adjust the paths accordingly. After that, build the Release binaries using Xcode:

$ xcodebuild -target install -config Release

There should be several executables in the /usr/local/TrinityCore directory, most important are authserver and worldserver. The Authentication Server is the component responsable with the account login and the World Server is … creating the World of Warcraft … world.

Extracting maps, mmaps and vmaps

Note the path where your World of Warcraft client is, in my case it’s /Volumes/External/Applications/WoW (yes, it’s an external drive). Change it to the path to your WoW client in the first line below:

$ cd /Volumes/External/Applications/WoW
$ /usr/local/TrinityCore/bin/mapextractor
$ cp -R dbc maps /usr/local/TrinityCore/data/
$ /usr/local/TrinityCore/bin/vmap4extractor
$ /usr/local/TrinityCore/bin/vmap4assembler Buildings vmaps
$ cp -R vmaps /usr/local/TrinityCore/data/
$ /usr/local/TrinityCore/bin/mmaps_generator
$ cp -R mmaps /usr/local/TrinityCore/data/

Configuration

Start the MySQL server you installed earlier:

$ mysql.server start

Rename the two files inside the /usr/local/TrinityCore/etc/ directory, removing the dist part. For example, authserver.conf.dist should become authserver.conf; same thing for worldserver.conf.dist.

Open both .conf files and change the MySQL login data for the TrinityCore servers to your existing setup. The important lines are:

LoginDatabaseInfo = "127.0.0.1;3306;trinity;trinity;auth"

inside the authserver.conf file and:

LoginDatabaseInfo = "127.0.0.1;3306;trinity;trinity;auth"
WorldDatabaseInfo = "127.0.0.1;3306;trinity;trinity;world"
CharacterDatabaseInfo = "127.0.0.1;3306;trinity;trinity;characters"

inside the worldserver.conf file. First trinity is the MySQL username, second on is the password. Change them.

Also, inside the worldserver.conf file, search for the DataDir = "." line and replace it with DataDir = "../data".

Download the TDB_full archive from the TrinityCore repository (make sure you download the 3.3.5 one), currently the latest is 63_2017_04_18. Uncompress the .7z archive and copy the .sql file to the bin directory, where authserver and worldserver are. On the first startup of the worldserver, it will pick up the SQL file and import it; you can delete it afterwards.

Start the authserver and worldserver:

$ ./authserver &
$ ./worldserver

Notice the & at the end of the authserver line, it specifies that the server should be launched in the background. We’re doing that because we don’t need to interact with the authserver; the worldserver is not launched into the background (for now) because we need to create the first account, and that is done by typing some commands into the worldserver console. You can launch the worldserver in the background after you created the first account by appending the & at the end of the line:

$ ./worldserver &

Create your first account

Type inside the worldserver console:

account create <USERNAME> <PASS>

For example:

account create sizeofcat _boom_

The username and password are the bits you need to connect using your WoW client. There is one more step before, though, open the realmlist.wtf file that should be inside the Data\enUS directory of your WoW client and replace its contents with the line below, instructing the client to connect to the local (127.0.0.1) servers.

set realmlist 127.0.0.1

Now you can open your World of Warcraft.app and authenticate with the newly-created username and password.

Basically, every time you want to play you will need to make sure the MySQL, auth and world servers are up and running.