diff --git a/contrib/fractured-dev-extras/CLIENT-PATCHES.md b/contrib/fractured-dev-extras/CLIENT-PATCHES.md index a8d09bb..ec91dfe 100644 --- a/contrib/fractured-dev-extras/CLIENT-PATCHES.md +++ b/contrib/fractured-dev-extras/CLIENT-PATCHES.md @@ -52,6 +52,90 @@ worldserver image is older than commit `4d2a80d` (the `character_paragon_panel_spell_revoked` migration). Pull both ends to the same release tag and rebuild the worldserver image. +If the **client** shows the Paragon class on the create screen but the +server replies **Character Creation Failed** when you pick it: the +worldserver's on-disk DBC set still does not define class **12** +(`ChrClasses.dbc`). SQL migrations alone cannot fix that when +`chrclasses_dbc` in MySQL is empty (normal for stock AC — AzerothCore +loads `.dbc` files from `data/dbc/` and only *merges* optional DB rows +on top). See **Worldserver DBC sync** below. + +--- + +## Worldserver DBC sync (required for Paragon character create) + +The Fractured **client** learns about Paragon from `patch-enUS-4.MPQ` +(DBC + GlueXML). The **worldserver** never reads your MPQs — it reads +plain `.dbc` files under its `DataDir` (`.../data/dbc/` by default). + +Stock Docker installs populate `data/dbc/` from a vanilla 3.3.5a +extract (`ac-client-data-init` in `docker-compose.yml`). That tree has +no `ChrClasses` row for id **12**, so `CharacterHandler` rejects the +create with `CHAR_CREATE_FAILED` and logs: + +`Class (12) not found in DBC while creating new char ... wrong DBC files or cheater?` + +**Fix:** merge every `.dbc` that ships inside `patch-enUS-4.MPQ` under +`DBFilesClient/` (or the archive's `dbc/` root — same layout depending +on tool) into the server's `data/dbc/` directory, then restart +**only** `ac-worldserver`. Copy the **whole** set from the MPQ, not +just `ChrClasses.dbc`, so dependent stores (`CharBaseInfo`, +`SkillRaceClassInfo`, `TalentTab`, `PowerDisplay`, etc.) stay consistent +with the client patch. + +### Extract from the MPQ (any OS) + +Use Ladik's MPQ Editor, `mpqcli`, or any StormLib tool. You want every +`*.dbc` that Fractured added or changed in that patch, staged into a +host folder (example: `./paragon-dbc-extract/`). + +### Docker: write into the named volume + +Compose uses `${DOCKER_VOL_DATA:-ac-client-data}` (see +`docker-compose.yml`). Discover the real volume name: + +```bash +docker volume ls | grep -i client-data +``` + +Copy extracted `.dbc` files into the volume's `dbc/` subdirectory. +Example (Linux / macOS — adjust volume name and host path): + +```bash +docker run --rm \ + -v ac-client-data:/data \ + -v "$PWD/paragon-dbc-extract:/patch:ro" \ + alpine sh -c 'cp -f /patch/*.dbc /data/dbc/' +docker compose restart ac-worldserver +``` + +Windows PowerShell (same idea; escape backticks if you wrap lines): + +```powershell +docker run --rm ` + -v ac-client-data:/data ` + -v ${PWD}\paragon-dbc-extract:/patch:ro ` + alpine sh -c "cp -f /patch/*.dbc /data/dbc/" +docker compose restart ac-worldserver +``` + +If your compose **project** name prefixes the volume (e.g. +`fractured_ac-client-data`), use that full name from `docker volume ls`. + +### Native install (no Docker) + +Copy the same extracted `.dbc` files into: + +`/data/dbc/` + +then restart `worldserver`. + +### Verify + +After restart, search startup logs for errors mentioning `ChrClasses` or +`dbc`. On failure you would still see the `Class (12) not found` line at +create time — if that disappears, the DBC merge worked. + --- ## Building the patches yourself