From c09646fdf0cbad71fbf1ff5935288b26feddfb9b Mon Sep 17 00:00:00 2001 From: Docker Build Date: Fri, 8 May 2026 00:08:47 -0400 Subject: [PATCH] Add BUILD-NATIVE.md for non-Docker compile workflow Co-authored-by: Cursor --- BUILD-NATIVE.md | 279 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 279 insertions(+) create mode 100644 BUILD-NATIVE.md diff --git a/BUILD-NATIVE.md b/BUILD-NATIVE.md new file mode 100644 index 0000000..64bff57 --- /dev/null +++ b/BUILD-NATIVE.md @@ -0,0 +1,279 @@ +# 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.