From 2874119c6d37269cda9b119270e34381b43d4c95 Mon Sep 17 00:00:00 2001 From: Docker Build Date: Sat, 9 May 2026 13:38:27 -0400 Subject: [PATCH] Paragon: ship class-12 weapon/armor proficiencies as SQL migration Companion to 2026_05_10_00.sql. The spawn-data migration teaches the worldserver where Paragon characters spawn and what per-level base stats they have; this one teaches it which weapon/armor skill lines to grant at first character login. Without these rows a fresh Paragon character lands in their newbie zone with no weapon or armor proficiencies (auto-attack greys out on anything beyond a fist) -- the universal classMask=0 rows in playercreateinfo_skills only cover Defense, Unarmed, Cloth, languages, Mounts, and Companion Pets. Adds 20 rows in playercreateinfo_skills with classMask=2048 (class 12 only) for every weapon and armor proficiency: - Weapons: Swords, Axes, Bows, Guns, Maces, 2H Swords, Dual Wield, Staves, 2H Maces, 2H Axes, Daggers, Thrown, Crossbows, Wands, Polearms, Fist Weapons. - Armor: Plate Mail, Mail, Leather, Shield. (Cloth already granted via the classMask=0 universal row.) Idempotent: DELETE WHERE classMask=2048 then INSERT, so it replays cleanly on a partially-seeded DB (e.g. one where a contributor hand- patched these rows before the migration landed). Verified locally: applies cleanly twice in a row, worldserver restart now logs `>> Loaded 1391 Player Create Skills` (was 1371 pre-Paragon = +20 class-12 rows) and a freshly-rolled Draenei Paragon spawns with the full weapon/armor kit. CLIENT-PATCHES.md troubleshooting block updated to call out the "Paragon spawns naked / can't equip anything" failure mode and list all three migrations in the current rebuild recipe. Co-authored-by: Cursor --- .../fractured-dev-extras/CLIENT-PATCHES.md | 19 +++++-- .../sql/db-world/updates/2026_05_10_01.sql | 50 +++++++++++++++++++ 2 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 modules/mod-paragon/data/sql/db-world/updates/2026_05_10_01.sql diff --git a/contrib/fractured-dev-extras/CLIENT-PATCHES.md b/contrib/fractured-dev-extras/CLIENT-PATCHES.md index 685502e..ef284eb 100644 --- a/contrib/fractured-dev-extras/CLIENT-PATCHES.md +++ b/contrib/fractured-dev-extras/CLIENT-PATCHES.md @@ -54,8 +54,10 @@ 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** (sometimes shown as -"Error creating character") when you pick it: the worldserver is -missing one of two pieces of class-12 spawn data. Both ship as SQL +"Error creating character") when you pick it -- **or** the character +is created but spawns with no weapon / armor proficiencies (auto-attack +greys out, can't equip anything beyond a fist) -- the worldserver is +missing one of three pieces of class-12 data. All ship as SQL migrations under `modules/mod-paragon/data/sql/db-world/updates/` and are auto-applied by AzerothCore's DBUpdater on every `ac-db-import` run, but the SQL files are baked into the dbimport @@ -69,7 +71,7 @@ docker compose up -d ac-db-import docker compose restart ac-worldserver ``` -The two migrations: +The three migrations: - `2026_05_09_00.sql` -- DBC overlay rows for `chrclasses_dbc` and `skillraceclassinfo_dbc`. Without this the server can't even @@ -81,10 +83,17 @@ The two migrations: "invalid race/class pair" and the worldserver prints `class-N Level-L does not have stats data!` integrity warnings on load. +- `2026_05_10_01.sql` -- 20 `playercreateinfo_skills` rows + (`classMask = 2048` = class 12) granting every weapon / + armor proficiency at level 1. Without this a Paragon spawns with + only the universal `classMask = 0` skills (Defense, Unarmed, + Cloth, languages, Mounts) -- no Swords, no Mail, no Shield, etc. After the rebuild + restart, `ac-worldserver` should log -`>> Loaded 72 Player Create Definitions` (was 62 pre-Paragon) and -character creation succeeds for any DK-eligible race. +`>> Loaded 72 Player Create Definitions` (was 62 pre-Paragon), +`>> Loaded 1391 Player Create Skills` (was 1371), and character +creation succeeds for any DK-eligible race with a full weapon / +armor kit. If the client **logs in** successfully but **disconnects immediately** when entering the realm: the auth server is handing your client the diff --git a/modules/mod-paragon/data/sql/db-world/updates/2026_05_10_01.sql b/modules/mod-paragon/data/sql/db-world/updates/2026_05_10_01.sql new file mode 100644 index 0000000..ad3fbec --- /dev/null +++ b/modules/mod-paragon/data/sql/db-world/updates/2026_05_10_01.sql @@ -0,0 +1,50 @@ +-- mod-paragon: starter weapon / armor skills for class 12 (Paragon). +-- +-- Companion to 2026_05_10_00.sql. The spawn-data migration teaches +-- Player::Create *that* class 12 exists at a given race; this one +-- teaches it which weapon and armor skill lines to grant on first +-- character login. +-- +-- Without these rows a fresh Paragon character lands in their newbie +-- zone with **no** weapon or armor proficiencies (auto-attack greys +-- out the moment they equip anything beyond a fist). The classMask=0 +-- "all classes" rows in playercreateinfo_skills only cover Defense, +-- Unarmed, Cloth, the racial / language skills, Mounts and +-- Companion Pets -- which is exactly what bare-fisted, naked +-- characters look like. +-- +-- Paragon plays every class, so it grants every weapon / armor +-- proficiency at level 1. The skillline rows themselves are still +-- gated by skillraceclassinfo_dbc (handled in 2026_05_09_00.sql), +-- so the client/server agree on what's allowed. +-- +-- Idempotent: deletes any pre-existing classMask=2048 rows first +-- (class 12 owns this bitmask on Fractured) so the migration can +-- replay cleanly on a partially-seeded DB. + +DELETE FROM `playercreateinfo_skills` WHERE `classMask` = 2048; + +INSERT INTO `playercreateinfo_skills` + (`raceMask`, `classMask`, `skill`, `rank`, `comment`) VALUES + -- Weapon proficiencies + (0, 2048, 43, 0, 'Paragon - Swords'), + (0, 2048, 44, 0, 'Paragon - Axes'), + (0, 2048, 45, 0, 'Paragon - Bows'), + (0, 2048, 46, 0, 'Paragon - Guns'), + (0, 2048, 54, 0, 'Paragon - Maces'), + (0, 2048, 55, 0, 'Paragon - Two-Handed Swords'), + (0, 2048, 118, 0, 'Paragon - Dual Wield'), + (0, 2048, 136, 0, 'Paragon - Staves'), + (0, 2048, 160, 0, 'Paragon - Two-Handed Maces'), + (0, 2048, 172, 0, 'Paragon - Two-Handed Axes'), + (0, 2048, 173, 0, 'Paragon - Daggers'), + (0, 2048, 176, 0, 'Paragon - Thrown'), + (0, 2048, 226, 0, 'Paragon - Crossbows'), + (0, 2048, 228, 0, 'Paragon - Wands'), + (0, 2048, 229, 0, 'Paragon - Polearms'), + (0, 2048, 473, 0, 'Paragon - Fist Weapons'), + -- Armor proficiencies (Cloth is in a classMask=0 row already) + (0, 2048, 293, 0, 'Paragon - Plate Mail'), + (0, 2048, 413, 0, 'Paragon - Mail'), + (0, 2048, 414, 0, 'Paragon - Leather'), + (0, 2048, 433, 0, 'Paragon - Shield');