-- Расы, классы (Mobius ClassId), стартовая экипировка и скиллы для создания персонажа. INSERT INTO ref_races (race_id, code, name_en, name_ru, spawn_x, spawn_y, spawn_z, spawn_heading) VALUES (0, 'HUMAN', 'Human', 'Человек', -82698, 243547, -3731, 0), (1, 'ELF', 'Elf', 'Эльф', 45953, 42000, -3504, 0), (2, 'DARK_ELF', 'Dark Elf', 'Тёмный эльф', 28377, 10916, -4224, 0), (3, 'ORC', 'Orc', 'Орк', -44884, -115346, -240, 0), (4, 'DWARF', 'Dwarf', 'Гном', 116551, -182493, -1520, 0), (5, 'KAMAEL', 'Kamael', 'Камаэль', -118070, 45942, 420, 0), (6, 'ERTHEIA', 'Ertheia', 'Эртея', 207559, 86429, -1000, 0) ON CONFLICT (race_id) DO UPDATE SET name_en = EXCLUDED.name_en, name_ru = EXCLUDED.name_ru, spawn_x = EXCLUDED.spawn_x, spawn_y = EXCLUDED.spawn_y, spawn_z = EXCLUDED.spawn_z; -- parent_id NULL = базовый класс на экране создания INSERT INTO ref_classes (class_id, code, name_en, name_ru, race_id, parent_id, class_level, is_mage, is_summoner, can_create, sex_restrict) VALUES (0, 'FIGHTER', 'Human Fighter', 'Воин (чел.)', 0, NULL, 0, FALSE, FALSE, TRUE, 0), (10, 'MAGE', 'Human Mystic', 'Мистик (чел.)', 0, NULL, 0, TRUE, FALSE, TRUE, 0), (18, 'ELVEN_FIGHTER', 'Elven Fighter', 'Воин (эльф)', 1, NULL, 0, FALSE, FALSE, TRUE, 0), (25, 'ELVEN_MAGE', 'Elven Mystic', 'Мистик (эльф)', 1, NULL, 0, TRUE, FALSE, TRUE, 0), (31, 'DARK_FIGHTER', 'Dark Fighter', 'Воин (т.эльф)', 2, NULL, 0, FALSE, FALSE, TRUE, 0), (38, 'DARK_MAGE', 'Dark Mystic', 'Мистик (т.эльф)', 2, NULL, 0, TRUE, FALSE, TRUE, 0), (44, 'ORC_FIGHTER', 'Orc Fighter', 'Воин (орк)', 3, NULL, 0, FALSE, FALSE, TRUE, 0), (49, 'ORC_MAGE', 'Orc Shaman', 'Шаман (орк)', 3, NULL, 0, FALSE, FALSE, TRUE, 0), (53, 'DWARVEN_FIGHTER', 'Dwarven Fighter', 'Воин (гном)', 4, NULL, 0, FALSE, FALSE, TRUE, 0), (123, 'MALE_SOLDIER', 'Male Soldier', 'Солдат (М)', 5, NULL, 0, FALSE, FALSE, TRUE, 1), (124, 'FEMALE_SOLDIER', 'Female Soldier', 'Солдат (Ж)', 5, NULL, 0, FALSE, FALSE, TRUE, 2), (182, 'ERTHEIA_FIGHTER', 'Ertheia Fighter', 'Воин (эртея)', 6, NULL, 0, FALSE, FALSE, TRUE, 0), (183, 'ERTHEIA_WIZARD', 'Ertheia Wizard', 'Маг (эртея)', 6, NULL, 0, TRUE, FALSE, TRUE, 0) ON CONFLICT (class_id) DO UPDATE SET name_ru = EXCLUDED.name_ru, can_create = EXCLUDED.can_create; -- Первые профессии (не на экране создания, но нужны в справочнике / class_list) INSERT INTO ref_classes (class_id, code, name_en, name_ru, race_id, parent_id, class_level, is_mage, is_summoner, can_create, sex_restrict) VALUES (1, 'WARRIOR', 'Warrior', 'Воитель', 0, 0, 1, FALSE, FALSE, FALSE, 0), (4, 'KNIGHT', 'Human Knight', 'Рыцарь', 0, 0, 1, FALSE, FALSE, FALSE, 0), (7, 'ROGUE', 'Rogue', 'Разбойник', 0, 0, 1, FALSE, FALSE, FALSE, 0), (11, 'WIZARD', 'Wizard', 'Маг', 0, 10, 1, TRUE, FALSE, FALSE, 0), (15, 'CLERIC', 'Cleric', 'Клерик', 0, 10, 1, TRUE, FALSE, FALSE, 0), (19, 'ELVEN_KNIGHT', 'Elven Knight', 'Светлый рыцарь', 1, 18, 1, FALSE, FALSE, FALSE, 0), (22, 'ELVEN_SCOUT', 'Elven Scout', 'Разведчик', 1, 18, 1, FALSE, FALSE, FALSE, 0), (26, 'ELVEN_WIZARD', 'Elven Wizard', 'Маг эльфов', 1, 25, 1, TRUE, FALSE, FALSE, 0), (29, 'ORACLE', 'Oracle', 'Оракул', 1, 25, 1, TRUE, FALSE, FALSE, 0), (32, 'PALUS_KNIGHT', 'Palus Knight', 'Тёмный рыцарь', 2, 31, 1, FALSE, FALSE, FALSE, 0), (35, 'ASSASSIN', 'Assassin', 'Убийца', 2, 31, 1, FALSE, FALSE, FALSE, 0), (39, 'DARK_WIZARD', 'Dark Wizard', 'Тёмный маг', 2, 38, 1, TRUE, FALSE, FALSE, 0), (42, 'SHILLIEN_ORACLE', 'Shillien Oracle', 'Оракул Шилен', 2, 38, 1, TRUE, FALSE, FALSE, 0), (45, 'ORC_RAIDER', 'Orc Raider', 'Налётчик', 3, 44, 1, FALSE, FALSE, FALSE, 0), (47, 'ORC_MONK', 'Orc Monk', 'Монах', 3, 44, 1, FALSE, FALSE, FALSE, 0), (50, 'ORC_SHAMAN', 'Orc Shaman', 'Шаман', 3, 49, 1, TRUE, FALSE, FALSE, 0), (54, 'SCAVENGER', 'Scavenger', 'Собиратель', 4, 53, 1, FALSE, FALSE, FALSE, 0), (56, 'ARTISAN', 'Artisan', 'Ремесленник', 4, 53, 1, FALSE, FALSE, FALSE, 0), (125, 'TROOPER', 'Trooper', 'Трупер', 5, 123, 1, FALSE, FALSE, FALSE, 1), (126, 'WARDER', 'Warder', 'Вардер', 5, 124, 1, FALSE, FALSE, FALSE, 2), (184, 'MARAUDER', 'Marauder', 'Мародёр', 6, 182, 1, FALSE, FALSE, FALSE, 0), (185, 'CLOUD_BREAKER', 'Cloud Breaker', 'Прорицатель', 6, 183, 1, TRUE, FALSE, FALSE, 0) ON CONFLICT (class_id) DO NOTHING; -- class_list (L2J): все зарегистрированные class_id INSERT INTO class_list (id, class_name) SELECT class_id, code FROM ref_classes ON CONFLICT (id) DO UPDATE SET class_name = EXCLUDED.class_name; -- Стартовая экипировка (упрощённо; уточните item_id под ваш datapack Samurai Crow) -- paperdoll: 0=под оружием, 6=оружие, 10=голова, 11=перчатки, 12=грудь, 13=ноги, 14=обувь INSERT INTO starter_equipment (class_id, sex, item_id, amount, equipped, paperdoll_slot) VALUES (0, 0, 2369, 1, TRUE, 6), (0, 0, 1146, 1, TRUE, 12), (0, 0, 1147, 1, TRUE, 13), (0, 0, 1123, 1, TRUE, 14), (10, 0, 6, 1, TRUE, 6), (10, 0, 425, 1, TRUE, 12), (10, 0, 461, 1, TRUE, 13), (10, 0, 1123, 1, TRUE, 14), (18, 0, 2369, 1, TRUE, 6), (18, 0, 1146, 1, TRUE, 12), (18, 0, 1147, 1, TRUE, 13), (18, 0, 1123, 1, TRUE, 14), (25, 0, 6, 1, TRUE, 6), (25, 0, 425, 1, TRUE, 12), (25, 0, 461, 1, TRUE, 13), (25, 0, 1123, 1, TRUE, 14), (31, 0, 2369, 1, TRUE, 6), (31, 0, 1146, 1, TRUE, 12), (31, 0, 1147, 1, TRUE, 13), (31, 0, 1123, 1, TRUE, 14), (38, 0, 6, 1, TRUE, 6), (38, 0, 425, 1, TRUE, 12), (38, 0, 461, 1, TRUE, 13), (38, 0, 1123, 1, TRUE, 14), (44, 0, 2369, 1, TRUE, 6), (44, 0, 1146, 1, TRUE, 12), (44, 0, 1147, 1, TRUE, 13), (44, 0, 1123, 1, TRUE, 14), (49, 0, 6, 1, TRUE, 6), (49, 0, 425, 1, TRUE, 12), (49, 0, 461, 1, TRUE, 13), (49, 0, 1123, 1, TRUE, 14), (53, 0, 2369, 1, TRUE, 6), (53, 0, 1146, 1, TRUE, 12), (53, 0, 1147, 1, TRUE, 13), (53, 0, 1123, 1, TRUE, 14), (123, 1, 2369, 1, TRUE, 6), (123, 1, 1146, 1, TRUE, 12), (123, 1, 1147, 1, TRUE, 13), (123, 1, 1123, 1, TRUE, 14), (124, 2, 2369, 1, TRUE, 6), (124, 2, 1146, 1, TRUE, 12), (124, 2, 1147, 1, TRUE, 13), (124, 2, 1123, 1, TRUE, 14), (182, 0, 2369, 1, TRUE, 6), (182, 0, 1146, 1, TRUE, 12), (182, 0, 1147, 1, TRUE, 13), (182, 0, 1123, 1, TRUE, 14), (183, 0, 6, 1, TRUE, 6), (183, 0, 425, 1, TRUE, 12), (183, 0, 461, 1, TRUE, 13), (183, 0, 1123, 1, TRUE, 14) ON CONFLICT (class_id, sex, item_id) DO NOTHING; -- Стартовые умения (уровень 1) INSERT INTO starter_skills (class_id, skill_id, skill_level) VALUES (0, 3, 1), (10, 1177, 1), (18, 3, 1), (25, 1177, 1), (31, 3, 1), (38, 1177, 1), (44, 3, 1), (49, 1001, 1), (53, 3, 1), (123, 3, 1), (124, 3, 1), (182, 3, 1), (183, 1177, 1) ON CONFLICT DO NOTHING; -- lvlupgain: базовые приросты для creatable классов (уровни 1–20) INSERT INTO lvlupgain (class_id, level, hp_gain, mp_gain, cp_gain) SELECT c.class_id, lv.lvl, CASE WHEN c.is_mage THEN 8.0 ELSE 12.0 END, CASE WHEN c.is_mage THEN 6.0 ELSE 2.0 END, CASE WHEN c.is_mage THEN 6.0 ELSE 10.0 END FROM ref_classes c CROSS JOIN generate_series(1, 20) AS lv(lvl) WHERE c.can_create ON CONFLICT DO NOTHING; -- Метаданные для админки / отладки INSERT INTO global_data (var, value) VALUES ('essence_creatable_classes', '0,10,18,25,31,38,44,49,53,123,124,182,183'), ('essence_races_enabled', '0,1,2,3,4,5,6') ON CONFLICT (var) DO UPDATE SET value = EXCLUDED.value;