Files
Docker Build ecd8eacb1f chore(conf): revert seed defaults to stock so fresh installs auto-connect
The previous seed pinned auth/realmlist to production values
(`hsrwow.net` + RealmServerPort 47497), which silently bricked every
fresh local install: after auth login the realm hand-off pointed
clients at our public host, where their local credentials don't
exist, and they were dropped within a frame.

Seed now matches stock AzerothCore for solo dev:
- realmlist.address  = 127.0.0.1   (was hsrwow.net)
- RealmServerPort    = 3724        (was 47497)

Production owners apply both overrides post-dbimport via a one-shot
SQL UPDATE + an authserver.conf edit. Documented end-to-end in
contrib/fractured-dev-extras/BUILD-NATIVE.md (new "Production
deployment overrides" section) and the disconnect-after-login
symptom is called out in CLIENT-PATCHES.md.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 12:44:45 -04:00

10 KiB

Fractured — Native Build Guide

This is a fork of AzerothCore with a custom CLASS_PARAGON (id 12), the mod-paragon server module, and mod-ale (LuaJIT scripting) vendored in-tree. This document covers building the server natively (no Docker). For the Docker workflow, see docker-compose.yml plus docker-compose.override.yml at the repo root.

The upstream AzerothCore wiki is the authoritative reference for OS prerequisites; everything here is just the deltas you need on top of it.


Fractured client + network defaults

Stock-friendly defaults for fresh local installs. A git clone -> docker compose up (or native install) lets a single developer log in from the same machine without any post-install config tweaks.

  • authserver.conf -> RealmServerPort = 3724 (stock WoW). A patched Wow.exe with set realmlist 127.0.0.1 (no port) reaches the auth handshake.
  • realmlist table -> port is the world port (default 8085, matches WorldServerPort in worldserver.conf.dist). Auth tells the client to handshake to this port for the world hand-off.
  • realmlist table -> address defaults to 127.0.0.1 in the base SQL. The auth server hands this address to clients after login, so 127.0.0.1 means "talk to the world server on the same machine auth is running on" -- correct for solo dev. Override on production deploys, see Production deployment overrides below.

Production deployment overrides

Production Fractured runs on a remote VPS at hsrwow.net with auth bound to a non-stock port (47497 -- 3724 was unavailable on that host). Apply the overrides once per fresh dbimport on the production box.

-- Run against acore_auth on the production database after first dbimport:
UPDATE realmlist
   SET address = 'hsrwow.net',
       port    = 8085          -- world port; leave at 8085 unless changed
 WHERE id = 1;

Edit the production authserver.conf (NOT authserver.conf.dist) to bind the auth listener to the production port:

RealmServerPort = 47497

Restart the auth server. Production clients connect with:

set realmlist hsrwow.net:47497

The Fractured-patched 3.3.5 client supports the host:port syntax; stock 3.3.5 clients do not, so any contributor distributing the client bundle for production must include the patched Wow.exe from the GitHub release.


What you get when you build this fork

  • Worldserver with CLASS_PARAGON and Paragon-aware DK rune / sticky combo-point logic linked into core.
  • modules/mod-paragon (statically linked): Paragon player hooks, AE/TE currency, gametables, .paragon chat commands.
  • modules/mod-ale (statically linked): the ALE Lua scripting engine, which fetches LuaJIT at configure time. Requires -DLUA_VERSION.
  • Tools (mapextractor, vmap4_*, mmaps_generator) for client data.

1. Install prerequisites

Linux (Ubuntu 22.04 / Debian 12)

sudo apt update
sudo apt install -y \
    git cmake make gcc g++ clang \
    libmariadb-dev-compat libmariadb-dev default-libmysqlclient-dev \
    libssl-dev libbz2-dev libreadline-dev libncurses-dev \
    libboost-all-dev \
    mariadb-server p7zip-full

If you prefer MySQL 8 over MariaDB, install mysql-server instead and keep default-libmysqlclient-dev.

Windows 10 / 11

Install (any recent versions):

  • Visual Studio 2022 with the Desktop development with C++ workload (MSVC v143 toolset, Windows 10/11 SDK).
  • Git for Windows.
  • CMake 3.16+ (the GUI is fine).
  • MySQL Server 8 or MariaDB 10.x with the C connector development headers (the MySQL Installer's "Connector C" component).
  • OpenSSL 3.x (e.g. the Shining Light Win64 build — pick the full installer, not "Light"). Set the OPENSSL_ROOT_DIR env var to its install path if CMake can't find it.
  • Boost ≥ 1.74 prebuilt for MSVC (e.g. from https://sourceforge.net/projects/boost/files/boost-binaries/). Set BOOST_ROOT to its install path so CMake can locate it.
  • 7-Zip for extracting client data archives.

macOS

Use Homebrew:

brew install cmake boost openssl@3 mysql readline ncurses p7zip

2. Clone the repo

git clone https://github.com/Dawnforger/Fractured.git
cd Fractured

The mod-paragon and mod-ale modules are already in modules/; no extra git clone needed.


3. Configure with CMake

mod-ale requires you to pick a Lua version at configure time. Use LuaJIT to match what the team's Docker image uses:

Linux / macOS

mkdir -p build
cd build

cmake .. \
    -DCMAKE_INSTALL_PREFIX=$HOME/azeroth-server \
    -DCMAKE_C_COMPILER=clang   \
    -DCMAKE_CXX_COMPILER=clang++ \
    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    -DLUA_VERSION=luajit \
    -DTOOLS_BUILD=all \
    -DSCRIPTS=static \
    -DMODULES=static \
    -DWITH_WARNINGS=ON

GCC works too (drop the CMAKE_*_COMPILER lines or set them to gcc/g++).

Windows (CMake GUI)

  1. Source code → repo root (Fractured/).
  2. Build the binariesFractured/build.
  3. Configure → choose Visual Studio 17 2022 generator, x64.
  4. After the first configure pass fails or warns about Lua, set:
    • LUA_VERSION = luajit
    • CMAKE_INSTALL_PREFIX = e.g. C:/azeroth-server
    • BOOST_ROOT (if not already detected)
    • OPENSSL_ROOT_DIR (if not already detected)
    • MYSQL_INCLUDE_DIR / MYSQL_LIBRARY if MySQL wasn't auto-found
  5. Configure until clean, then Generate, then Open Project.

Important flags

Flag Recommended Why
LUA_VERSION luajit Required by mod-ale; matches team Docker image.
MODULES static Statically links mod-paragon and mod-ale into the worldserver.
SCRIPTS static Default; static script linkage.
TOOLS_BUILD all Builds map/mmap/vmap extractors. Set to none once you have client data.
CMAKE_BUILD_TYPE RelWithDebInfo Default for production-quality builds with usable backtraces. Use Debug only when stepping through code.

4. Compile

Linux / macOS

make -j$(nproc)        # or: -j$(sysctl -n hw.ncpu) on macOS
make install

Windows

In Visual Studio, set the configuration to RelWithDebInfo / x64, then:

  1. Build ALL_BUILD.
  2. Build INSTALL.

Or from a Developer PowerShell for VS 2022 in the build directory:

cmake --build . --config RelWithDebInfo
cmake --install . --config RelWithDebInfo

If the build OOMs on a low-RAM machine, pass -j 4 (or fewer) to make / cmake --build. The Docker image hard-caps -j 4 for the same reason.


5. Set up databases

The standard AzerothCore three-database layout (acore_auth, acore_world, acore_characters) applies unchanged. Follow:

https://www.azerothcore.org/wiki/database-installation

Easiest path: run the worldserver once with empty databases and let AC_FORCE_CREATE_DB=1 populate them, or use dbimport from the install dir.

The Fractured-specific SQL (mod-paragon) lives under modules/mod-paragon/data/sql/db-{world,characters}/base/ — that's the AzerothCore-standard module layout, which means AC's built-in DBUpdater picks it up automatically on every worldserver / dbimport start. New SQL files are applied; previously-applied ones are skipped via the hash recorded in acore_world.updates / acore_characters.updates. No manual mysql < ... steps required for deploys.

Modify-and-redeploy works the same way: change the file, push, pull on the VPS, and the next dbimport run sees the new hash and re-applies.


6. Configure the server

After make install, your install prefix has the layout:

<INSTALL_PREFIX>/
  bin/         worldserver, authserver, *extractor tools
  etc/         worldserver.conf.dist, modules/*.conf.dist
  data/        client data (you provide)
  logs/
  1. Copy each *.conf.dist to *.conf next to it (or in etc/modules/).
  2. Set the *DatabaseInfo lines in worldserver.conf and authserver.conf to point at your DB.
  3. In etc/modules/mod_paragon.conf, review the Paragon-specific options (sticky combo points, multi-resource, Ability/Talent Essence settings).
  4. In etc/modules/mod_ale.conf, set ALE.Enabled = 1 and (optionally) ALE.ScriptPath if you want a custom Lua scripts folder.

7. Extract client data

Same as upstream AzerothCore. Run the extractors against your 3.3.5a client directory once and copy the results into <INSTALL_PREFIX>/data/:

cd <wow-3.3.5a-client>/
<INSTALL_PREFIX>/bin/mapextractor
<INSTALL_PREFIX>/bin/vmap4_extractor
<INSTALL_PREFIX>/bin/vmap4_assembler  Buildings vmaps
<INSTALL_PREFIX>/bin/mmaps_generator
mv dbc maps vmaps mmaps Cameras  <INSTALL_PREFIX>/data/

You can also share data between teammates — these directories are client-only and don't depend on the build.


8. Run

cd <INSTALL_PREFIX>/bin
./authserver &
./worldserver

On Windows, run authserver.exe and worldserver.exe from a console window so you can see startup output.


9. Updating from origin

cd Fractured
git pull
cd build
cmake ..   # only needed if CMakeLists.txt changed
make -j$(nproc)
make install

If a pull touches modules/*/sql/, re-apply those SQL files against the relevant database.


Troubleshooting

  • Could NOT find Lua at CMake time: you forgot -DLUA_VERSION=luajit.
  • fatal error: 'mysql.h' file not found on Linux: install default-libmysqlclient-dev (or libmariadb-dev).
  • Could NOT find Boost on Windows: set the BOOST_ROOT env var (or the BOOST_ROOT CMake cache var) to your prebuilt Boost install.
  • Worldserver crashes on a Paragon character: confirm the mod-paragon SQL has been applied to both acore_world and acore_characters. Missing character_paragon_currency is the most common cause.
  • Action buttons grey out for rune spells on Paragon: this fork expects the matching client UI patch (patch-enUS-5.MPQ). The server build is correct as-is; the visual issue is client-side.