Paragon: ship class-12 starter spawn data so character creation works on fresh installs
Companion to 2026_05_09_00.sql (DBC overlay). The DBC overlay teaches
the world server that class 12 (Paragon) exists; this migration
teaches it WHERE class-12 characters spawn, what action bar they boot
with, and what per-level base stats Player::InitStatsForLevel uses.
Without these rows, contributors hit:
- Player::Create -> "invalid race/class pair (R/12) - refusing"
and the client shows "Error creating character".
- WorldServer load -> "class-12 Level-L does not have stats data!"
integrity warnings.
Tables touched (idempotent: DELETE WHERE class=12 then INSERT):
- playercreateinfo : 10 rows, every DK-eligible race spawning
in their racial newbie zone (Northshire,
Valley of Trials, Ammen Vale, ...).
NOT Acherus -- Paragon is from-level-1.
- playercreateinfo_action : 46 rows, default action bar layout
per race (attack 6603, eat 78, racial,
etc.).
- player_class_stats : 80 rows, per-level base HP/Mana/STR/AGI/
STA/INT/SPI. Curve mirrors Warrior to
level 60, Paladin-style HP inflation
past 60 to keep Paragon competitive
in Wrath content.
Tables intentionally untouched: playercreateinfo_item is empty for
class 12 (Paragon ships no per-class starting items, only racial
kit), and the mask-based playercreateinfo_skills/_cast_spell/
_spell_custom rows already cover class 12 via their classMask=0
"all classes" entries.
Verified locally: applies cleanly twice in a row (idempotent),
worldserver restart now logs `>> Loaded 72 Player Create Definitions`
(was 62 pre-Paragon = +10 races for class 12) and creates a Draenei
Paragon without rejection.
CLIENT-PATCHES.md troubleshooting block updated to merge the two
"Character Creation Failed" modes (DBC overlay missing + spawn data
missing) into a single fix recipe. Existing contributors with a
pre-built dbimport image need
`docker compose build ac-db-import ac-worldserver` before this
migration is visible to DBUpdater; fresh clones get it on first
`docker compose up`.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,179 @@
|
||||
-- mod-paragon: starter spawn data for class 12 (Paragon).
|
||||
--
|
||||
-- Companion to 2026_05_09_00.sql. The DBC overlay teaches the world
|
||||
-- server that class 12 exists; this migration teaches it WHERE
|
||||
-- characters of that class spawn, what action bar they boot with,
|
||||
-- and what per-level base stats to integrity-check against.
|
||||
--
|
||||
-- Without these rows, character creation fails inside Player::Create:
|
||||
--
|
||||
-- PlayerInfo const* info = sObjectMgr->GetPlayerInfo(race, class);
|
||||
-- if (!info) {
|
||||
-- LOG_ERROR("entities.player",
|
||||
-- "Player::Create: ... invalid race/class pair ({}/{})"
|
||||
-- " - refusing to do so.", ..., race, class);
|
||||
-- return false; // -> client sees "Error creating character"
|
||||
-- }
|
||||
--
|
||||
-- and on world load the player_class_stats integrity check trips:
|
||||
--
|
||||
-- "Class N Level L does not have stats data!"
|
||||
--
|
||||
-- Tables touched:
|
||||
-- - playercreateinfo : (race, class=12) -> map/zone/x/y/z
|
||||
-- Race-specific starting zones (Paragon
|
||||
-- spawns in each race's standard newbie
|
||||
-- area, NOT Acherus, since it is a
|
||||
-- from-level-1 class).
|
||||
-- - playercreateinfo_action : (race, class=12, button) -> action,type
|
||||
-- Default action bar layout per race.
|
||||
-- - player_class_stats : (class=12, level 1..80) -> base stats
|
||||
-- Per-level HP/Mana/STR/AGI/STA/INT/SPI
|
||||
-- used by Player::InitStatsForLevel.
|
||||
--
|
||||
-- Tables intentionally NOT touched here:
|
||||
-- - playercreateinfo_item : Paragon ships no per-class starting
|
||||
-- items; gear comes from the racial
|
||||
-- kit only.
|
||||
-- - playercreateinfo_skills / _cast_spell / _spell_custom :
|
||||
-- These are mask-based. Class-12 baseline
|
||||
-- weapon/defense skills come through
|
||||
-- classMask=0 ("all classes") rows that
|
||||
-- already cover Paragon. The DBC overlay
|
||||
-- in 2026_05_09_00.sql opens
|
||||
-- SkillRaceClassInfo for class 12.
|
||||
|
||||
-- Idempotent: blow away any pre-existing class-12 rows first so this
|
||||
-- migration can be replayed cleanly on a partially-seeded DB (e.g.
|
||||
-- after a contributor manually patched their local DB before this
|
||||
-- migration landed).
|
||||
DELETE FROM `playercreateinfo` WHERE `class` = 12;
|
||||
DELETE FROM `playercreateinfo_action` WHERE `class` = 12;
|
||||
DELETE FROM `player_class_stats` WHERE `Class` = 12;
|
||||
|
||||
-- ---------------------------------------------------------------
|
||||
-- playercreateinfo (10 rows: every DK-eligible race, racial start)
|
||||
-- ---------------------------------------------------------------
|
||||
INSERT INTO `playercreateinfo` (`race`, `class`, `map`, `zone`, `position_x`, `position_y`, `position_z`, `orientation`) VALUES
|
||||
( 1, 12, 0, 12, -8949.95, -132.493, 83.5312, 0 ), -- Human -> Northshire, Elwynn Forest
|
||||
( 2, 12, 1, 14, -618.518, -4251.67, 38.718, 0 ), -- Orc -> Valley of Trials, Durotar
|
||||
( 3, 12, 0, 1, -6240.32, 331.033, 382.758, 6.17716 ), -- Dwarf -> Coldridge Valley, Dun Morogh
|
||||
( 4, 12, 1, 141, 10311.3, 832.463, 1326.41, 5.69632 ), -- Night Elf -> Shadowglen, Teldrassil
|
||||
( 5, 12, 0, 85, 1676.71, 1678.31, 121.67, 2.70526 ), -- Undead -> Deathknell, Tirisfal
|
||||
( 6, 12, 1, 215, -2917.58, -257.98, 52.9968, 0 ), -- Tauren -> Camp Narache, Mulgore
|
||||
( 7, 12, 0, 1, -6240.32, 331.033, 382.758, 0 ), -- Gnome -> Coldridge Valley (shared)
|
||||
( 8, 12, 1, 14, -618.518, -4251.67, 38.718, 0 ), -- Troll -> Valley of Trials (shared)
|
||||
(10, 12, 530, 3431, 10349.6, -6357.29, 33.4026, 5.31605 ), -- Blood Elf -> Sunstrider Isle, Eversong
|
||||
(11, 12, 530, 3526, -3961.64,-13931.2, 100.615, 2.08364 ); -- Draenei -> Ammen Vale, Azuremyst Isle
|
||||
|
||||
-- ---------------------------------------------------------------
|
||||
-- playercreateinfo_action (46 rows)
|
||||
-- Buttons: 72=Attack(6603), 73=Eat(78), 74=racial, 75=race-extra,
|
||||
-- 82=Skinning(59752, Tauren only), 84=Attack, 96=Attack
|
||||
-- ---------------------------------------------------------------
|
||||
INSERT INTO `playercreateinfo_action` (`race`, `class`, `button`, `action`, `type`) VALUES
|
||||
( 1, 12, 72, 6603, 0), ( 1, 12, 73, 78, 0), ( 1, 12, 82, 59752, 0),
|
||||
( 1, 12, 84, 6603, 0), ( 1, 12, 96, 6603, 0),
|
||||
( 2, 12, 72, 6603, 0), ( 2, 12, 73, 78, 0), ( 2, 12, 74, 20572, 0),
|
||||
( 2, 12, 84, 6603, 0), ( 2, 12, 96, 6603, 0),
|
||||
( 3, 12, 72, 6603, 0), ( 3, 12, 73, 78, 0), ( 3, 12, 74, 20594, 0),
|
||||
( 3, 12, 75, 2481, 0), ( 3, 12, 84, 6603, 0), ( 3, 12, 96, 6603, 0),
|
||||
( 4, 12, 72, 6603, 0), ( 4, 12, 73, 78, 0), ( 4, 12, 74, 58984, 0),
|
||||
( 4, 12, 84, 6603, 0), ( 4, 12, 96, 6603, 0),
|
||||
( 5, 12, 72, 6603, 0), ( 5, 12, 73, 78, 0), ( 5, 12, 74, 20577, 0),
|
||||
( 5, 12, 84, 6603, 0), ( 5, 12, 96, 6603, 0),
|
||||
( 6, 12, 72, 6603, 0), ( 6, 12, 73, 78, 0), ( 6, 12, 74, 20549, 0),
|
||||
( 6, 12, 84, 6603, 0), ( 6, 12, 96, 6603, 0),
|
||||
( 7, 12, 72, 6603, 0), ( 7, 12, 73, 78, 0), ( 7, 12, 84, 6603, 0),
|
||||
( 7, 12, 96, 6603, 0),
|
||||
( 8, 12, 72, 6603, 0), ( 8, 12, 73, 78, 0), ( 8, 12, 74, 2764, 0),
|
||||
( 8, 12, 75, 26297, 0), ( 8, 12, 84, 6603, 0), ( 8, 12, 96, 6603, 0),
|
||||
(11, 12, 72, 6603, 0), (11, 12, 73, 78, 0), (11, 12, 74, 28880, 0),
|
||||
(11, 12, 84, 6603, 0), (11, 12, 96, 6603, 0);
|
||||
|
||||
-- ---------------------------------------------------------------
|
||||
-- player_class_stats (80 rows: levels 1..80 per-class base stats)
|
||||
-- Curve mirrors Warrior baseline -> Paladin past 60 (vehicle-style HP
|
||||
-- inflation past 60 to keep Paragon competitive in Wrath content).
|
||||
-- ---------------------------------------------------------------
|
||||
INSERT INTO `player_class_stats` (`Class`, `Level`, `BaseHP`, `BaseMana`, `Strength`, `Agility`, `Stamina`, `Intellect`, `Spirit`) VALUES
|
||||
(12, 1, 20, 60, 23, 20, 22, 20, 20),
|
||||
(12, 2, 29, 66, 24, 21, 23, 20, 20),
|
||||
(12, 3, 38, 73, 25, 21, 24, 20, 21),
|
||||
(12, 4, 47, 81, 26, 22, 25, 20, 21),
|
||||
(12, 5, 56, 90, 28, 23, 26, 20, 21),
|
||||
(12, 6, 65, 100, 29, 24, 27, 21, 21),
|
||||
(12, 7, 74, 111, 30, 24, 28, 21, 22),
|
||||
(12, 8, 83, 123, 31, 25, 29, 21, 22),
|
||||
(12, 9, 92, 136, 32, 26, 30, 21, 22),
|
||||
(12, 10, 97, 150, 33, 26, 31, 21, 23),
|
||||
(12, 11, 103, 165, 35, 27, 33, 21, 23),
|
||||
(12, 12, 109, 182, 36, 28, 34, 21, 23),
|
||||
(12, 13, 118, 200, 37, 29, 35, 21, 24),
|
||||
(12, 14, 128, 219, 39, 30, 36, 22, 24),
|
||||
(12, 15, 139, 239, 40, 30, 37, 22, 24),
|
||||
(12, 16, 151, 260, 41, 31, 38, 22, 25),
|
||||
(12, 17, 154, 282, 42, 32, 40, 22, 25),
|
||||
(12, 18, 168, 305, 44, 33, 41, 22, 25),
|
||||
(12, 19, 183, 329, 45, 34, 42, 22, 26),
|
||||
(12, 20, 199, 354, 47, 35, 43, 22, 26),
|
||||
(12, 21, 206, 380, 48, 35, 45, 23, 26),
|
||||
(12, 22, 224, 392, 49, 36, 46, 23, 27),
|
||||
(12, 23, 243, 420, 51, 37, 47, 23, 27),
|
||||
(12, 24, 253, 449, 52, 38, 49, 23, 28),
|
||||
(12, 25, 274, 479, 54, 39, 50, 23, 28),
|
||||
(12, 26, 296, 509, 55, 40, 51, 23, 28),
|
||||
(12, 27, 309, 524, 57, 41, 53, 23, 29),
|
||||
(12, 28, 333, 554, 58, 42, 54, 24, 29),
|
||||
(12, 29, 348, 584, 60, 43, 56, 24, 30),
|
||||
(12, 30, 374, 614, 62, 44, 57, 24, 30),
|
||||
(12, 31, 401, 629, 63, 45, 58, 24, 30),
|
||||
(12, 32, 419, 659, 65, 46, 60, 24, 31),
|
||||
(12, 33, 448, 689, 66, 47, 61, 24, 31),
|
||||
(12, 34, 468, 704, 68, 48, 63, 25, 32),
|
||||
(12, 35, 499, 734, 70, 49, 64, 25, 32),
|
||||
(12, 36, 521, 749, 72, 50, 66, 25, 33),
|
||||
(12, 37, 545, 779, 73, 51, 68, 25, 33),
|
||||
(12, 38, 581, 809, 75, 52, 69, 25, 33),
|
||||
(12, 39, 609, 824, 77, 53, 71, 26, 34),
|
||||
(12, 40, 649, 854, 79, 54, 72, 26, 34),
|
||||
(12, 41, 681, 869, 80, 56, 74, 26, 35),
|
||||
(12, 42, 715, 899, 82, 57, 76, 26, 35),
|
||||
(12, 43, 761, 914, 84, 58, 77, 26, 36),
|
||||
(12, 44, 799, 944, 86, 59, 79, 26, 36),
|
||||
(12, 45, 839, 959, 88, 60, 81, 27, 37),
|
||||
(12, 46, 881, 989, 90, 61, 83, 27, 37),
|
||||
(12, 47, 935, 1004, 92, 63, 84, 27, 38),
|
||||
(12, 48, 981, 1019, 94, 64, 86, 27, 38),
|
||||
(12, 49, 1029, 1049, 96, 65, 88, 28, 39),
|
||||
(12, 50, 1079, 1064, 98, 66, 90, 28, 39),
|
||||
(12, 51, 1131, 1079, 100, 68, 92, 28, 40),
|
||||
(12, 52, 1185, 1109, 102, 69, 94, 28, 40),
|
||||
(12, 53, 1241, 1124, 104, 70, 96, 28, 41),
|
||||
(12, 54, 1299, 1139, 106, 72, 98, 29, 42),
|
||||
(12, 55, 1359, 1154, 109, 73, 100, 29, 42),
|
||||
(12, 56, 1421, 1169, 111, 74, 102, 29, 43),
|
||||
(12, 57, 1485, 1199, 113, 76, 104, 29, 43),
|
||||
(12, 58, 1551, 1214, 115, 77, 106, 30, 44),
|
||||
(12, 59, 1619, 1229, 118, 79, 108, 30, 44),
|
||||
(12, 60, 1689, 1244, 120, 80, 110, 30, 45),
|
||||
(12, 61, 1902, 1357, 122, 81, 112, 30, 46),
|
||||
(12, 62, 2129, 1469, 125, 83, 114, 30, 46),
|
||||
(12, 63, 2357, 1582, 127, 84, 117, 31, 47),
|
||||
(12, 64, 2612, 1694, 130, 86, 119, 31, 47),
|
||||
(12, 65, 2883, 1807, 132, 88, 121, 31, 48),
|
||||
(12, 66, 3169, 1919, 135, 89, 123, 32, 49),
|
||||
(12, 67, 3455, 2032, 137, 91, 126, 32, 49),
|
||||
(12, 68, 3774, 2145, 140, 92, 128, 32, 50),
|
||||
(12, 69, 4109, 2257, 142, 94, 130, 32, 51),
|
||||
(12, 70, 4444, 2370, 145, 96, 133, 33, 51),
|
||||
(12, 71, 4720, 2482, 148, 97, 135, 33, 52),
|
||||
(12, 72, 5013, 2595, 150, 99, 138, 33, 53),
|
||||
(12, 73, 5325, 2708, 153, 101, 140, 33, 54),
|
||||
(12, 74, 5656, 2820, 156, 102, 143, 34, 54),
|
||||
(12, 75, 6008, 2933, 159, 104, 145, 34, 55),
|
||||
(12, 76, 6381, 3045, 162, 106, 148, 34, 56),
|
||||
(12, 77, 6778, 3158, 165, 108, 151, 35, 57),
|
||||
(12, 78, 7198, 3270, 168, 109, 153, 35, 57),
|
||||
(12, 79, 7646, 3383, 171, 111, 156, 35, 58),
|
||||
(12, 80, 8121, 3496, 174, 113, 159, 36, 59);
|
||||
Reference in New Issue
Block a user