# Fractured — Native Build Guide This is a fork of [AzerothCore](https://www.azerothcore.org/) 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. - Linux: - Windows: - macOS: --- ## 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) ```bash 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](https://slproweb.com/products/Win32OpenSSL.html) 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 ). Set `BOOST_ROOT` to its install path so CMake can locate it. - **7-Zip** for extracting client data archives. ### macOS Use Homebrew: ```bash brew install cmake boost openssl@3 mysql readline ncurses p7zip ``` --- ## 2. Clone the repo ```bash 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 ```bash 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 binaries** → `Fractured/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 ```bash 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: ```powershell 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: 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. Then layer the Fractured-specific SQL on top: ```bash cd /modules/mod-paragon/sql # world DB mysql -u acore -p acore_world < world/base/paragon_gametables.sql mysql -u acore -p acore_world < world/base/paragon_spell_ae_cost.sql mysql -u acore -p acore_world < world/base/player_class_stats_paragon_basemana.sql # characters DB mysql -u acore -p acore_characters < characters/base/character_paragon_currency.sql ``` Re-run any module-specific SQL whenever you pull updates that touch `modules/*/sql/`. --- ## 6. Configure the server After `make install`, your install prefix has the layout: ``` / 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 `/data/`: ```bash cd / /bin/mapextractor /bin/vmap4_extractor /bin/vmap4_assembler Buildings vmaps /bin/mmaps_generator mv dbc maps vmaps mmaps Cameras /data/ ``` You can also share data between teammates — these directories are client-only and don't depend on the build. --- ## 8. Run ```bash cd /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` ```bash 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.