fix(world): reconstruction données d'entraînement métiers (lots 5-6)
Lot 5 : 103 maîtres de métier sans aucune donnée (alchimie, forge, enchantement, joaillerie, cuir, couture, calligraphie, premiers soins, pêche, herboristerie, minage, dépeçage, archéologie, cuisine) reçoivent la liste de sorts canonique de leur profession via référence-donneur npc_trainer (feuilles pures existantes). + option gossip sur menus dédiés. Lot 6 : profession Ingénierie entièrement reconstruite depuis TDB735 officiel (TrainerId 407, 222 recettes skill 202) -> donneur 3290, 38 maîtres d'ingénierie référencent -3290, + options gossip. Données legacy npc_trainer = effet au prochain restart (LoadTrainerSpell au boot). Options gossip rechargées à chaud. Rollbacks fournis. Maîtres de CLASSE intacts (Legion : sorts appris au niveau). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -0,0 +1,19 @@
|
||||
-- ============================================================================
|
||||
-- ROLLBACK — Lot 6 Ingénierie (trainers_engineering_lot6_20260618)
|
||||
-- Base : dc_world | Date : 2026-06-18
|
||||
-- A) recettes du donneur 3290 ; B) références -3290 ; C) options gossip.
|
||||
-- (3290 n'avait aucune ligne npc_trainer avant ce lot.)
|
||||
-- ============================================================================
|
||||
|
||||
SET NAMES utf8;
|
||||
|
||||
-- A) recettes donneur
|
||||
DELETE FROM npc_trainer WHERE ID = 3290 AND SpellID > 0;
|
||||
-- B) références
|
||||
DELETE FROM npc_trainer WHERE SpellID = -3290;
|
||||
-- C) options gossip (menus dédiés ingénierie)
|
||||
DELETE FROM gossip_menu_option
|
||||
WHERE OptionType = 5 AND OptionNpcFlag = 16 AND OptionText = 'Je voudrais m''entraîner.'
|
||||
AND (MenuId, OptionIndex) IN (
|
||||
(1465,0),(1467,0),(1468,1),(1469,0),(4136,0),(4137,0),(4147,0)
|
||||
);
|
||||
@@ -0,0 +1,111 @@
|
||||
-- ============================================================================
|
||||
-- La Légion de Sylvania — Lot 5 : données d'entraînement pour les maîtres de
|
||||
-- métier « sans données » (hors Ingénierie, traitée séparément lot 6).
|
||||
-- Base : dc_world (LIVE) | Date : 2026-06-18
|
||||
-- ----------------------------------------------------------------------------
|
||||
-- CONTEXTE
|
||||
-- ~103 maîtres de métier spawnés n'avaient AUCUNE donnée d'entraînement (ni
|
||||
-- schéma moderne `trainer`, ni legacy `npc_trainer`) -> fenêtre vide même
|
||||
-- quand l'option de gossip existait. Le contenu manque à la source TC
|
||||
-- (TDB735 officiel n'a que 93 trainers modernes et pas de npc_trainer).
|
||||
-- MAIS chaque profession dispose déjà, dans ce monde, d'un maître COMPLET
|
||||
-- (donneur « feuille pure ») dont on réutilise la liste de sorts.
|
||||
--
|
||||
-- Découverte : le menu 0 est le menu universel auto-généré ; il contient
|
||||
-- déjà l'option « Train me! » (OptionType=5, OptionNpcFlag=16). Donc tout
|
||||
-- trainer à gossip_menu_id=0 propose déjà l'entraînement DÈS qu'il a des
|
||||
-- données. Seuls les menus DÉDIÉS (<>0) ont besoin d'une option explicite.
|
||||
-- ----------------------------------------------------------------------------
|
||||
-- DONNEURS feuilles pures (entry -> nb sorts) :
|
||||
-- Alchimie 1215(143) Forge 7230(248) Enchantement 1317(193)
|
||||
-- Joaillerie 65098(290) Cuir 1385(278) Couture 57405(235)
|
||||
-- Calligraphie 92195(148) Premiers soins 126022(36) Pêche 1680(17)
|
||||
-- Herboristerie 1218(8) Minage 93189(36) Dépeçage 1292(8)
|
||||
-- Archéologie 93538(10) Cuisine 93536(52)
|
||||
-- Réutilisation via le mécanisme natif npc_trainer (SpellID négatif =
|
||||
-- « hérite de tous les sorts du donneur », cf ObjectMgr::LoadTrainerSpell).
|
||||
-- PÉRIMÈTRE : professions hors Ingénierie. Maîtres de CLASSE intacts
|
||||
-- (en Legion les sorts de classe s'apprennent au niveau, pas d'un PNJ).
|
||||
-- EFFET : restart world OU `.reload npc_trainer`(si dispo) + `.reload
|
||||
-- gossip_menu_option`. ROLLBACK : ..._lot5_ROLLBACK.sql
|
||||
-- ============================================================================
|
||||
|
||||
SET NAMES utf8;
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- PART A — Données : 1 ligne de référence-donneur par maître de métier vide.
|
||||
-- ---------------------------------------------------------------------------
|
||||
INSERT INTO npc_trainer (ID, SpellID, MoneyCost, ReqSkillLine, ReqSkillRank, ReqLevel, `Index`)
|
||||
SELECT ct.entry,
|
||||
-(CASE
|
||||
WHEN ct.subname LIKE '%Alchem%' THEN 1215
|
||||
WHEN ct.subname LIKE '%Blacksmith%' THEN 7230
|
||||
WHEN ct.subname LIKE '%Enchant%' THEN 1317
|
||||
WHEN ct.subname LIKE '%Jewelcraft%' THEN 65098
|
||||
WHEN ct.subname LIKE '%Leatherwork%' OR ct.subname LIKE '%Tanner%' THEN 1385
|
||||
WHEN ct.subname LIKE '%Tailor%' THEN 57405
|
||||
WHEN ct.subname LIKE '%Inscription%' THEN 92195
|
||||
WHEN ct.subname LIKE '%First Aid%' THEN 126022
|
||||
WHEN ct.subname LIKE '%Fish%' OR ct.subname LIKE '%Angler%' THEN 1680
|
||||
WHEN ct.subname LIKE '%Herbal%' THEN 1218
|
||||
WHEN ct.subname LIKE '%Mining%' THEN 93189
|
||||
WHEN ct.subname LIKE '%Skinning%' THEN 1292
|
||||
WHEN ct.subname LIKE '%Archaeology%' THEN 93538
|
||||
WHEN ct.subname LIKE '%Cook%' OR ct.subname LIKE '%Chef%' OR ct.subname LIKE '%Brewmaster%' OR ct.subname LIKE '%Noodle%' OR ct.subname LIKE '%Wok%' THEN 93536
|
||||
ELSE NULL END), 0, 0, 0, 0, 0
|
||||
FROM creature_template ct JOIN creature c ON c.id=ct.entry
|
||||
WHERE (ct.npcflag&16)>0 AND (ct.npcflag&32)=0
|
||||
AND ct.subname NOT LIKE '%Engineer%'
|
||||
AND NOT EXISTS(SELECT 1 FROM creature_default_trainer cdt WHERE cdt.CreatureId=ct.entry)
|
||||
AND NOT EXISTS(SELECT 1 FROM npc_trainer nt WHERE nt.ID=ct.entry)
|
||||
AND NOT EXISTS(SELECT 1 FROM gossip_menu_option g JOIN gossip_menu_option_trainer t
|
||||
ON t.MenuId=g.MenuId AND t.OptionIndex=g.OptionIndex
|
||||
WHERE g.MenuId=ct.gossip_menu_id AND g.OptionType=5)
|
||||
AND (CASE
|
||||
WHEN ct.subname LIKE '%Alchem%' THEN 1215
|
||||
WHEN ct.subname LIKE '%Blacksmith%' THEN 7230
|
||||
WHEN ct.subname LIKE '%Enchant%' THEN 1317
|
||||
WHEN ct.subname LIKE '%Jewelcraft%' THEN 65098
|
||||
WHEN ct.subname LIKE '%Leatherwork%' OR ct.subname LIKE '%Tanner%' THEN 1385
|
||||
WHEN ct.subname LIKE '%Tailor%' THEN 57405
|
||||
WHEN ct.subname LIKE '%Inscription%' THEN 92195
|
||||
WHEN ct.subname LIKE '%First Aid%' THEN 126022
|
||||
WHEN ct.subname LIKE '%Fish%' OR ct.subname LIKE '%Angler%' THEN 1680
|
||||
WHEN ct.subname LIKE '%Herbal%' THEN 1218
|
||||
WHEN ct.subname LIKE '%Mining%' THEN 93189
|
||||
WHEN ct.subname LIKE '%Skinning%' THEN 1292
|
||||
WHEN ct.subname LIKE '%Archaeology%' THEN 93538
|
||||
WHEN ct.subname LIKE '%Cook%' OR ct.subname LIKE '%Chef%' OR ct.subname LIKE '%Brewmaster%' OR ct.subname LIKE '%Noodle%' OR ct.subname LIKE '%Wok%' THEN 93536
|
||||
ELSE NULL END) IS NOT NULL
|
||||
GROUP BY ct.entry;
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- PART B — Option « s'entraîner » sur les MENUS DÉDIÉS (<>0) des maîtres de
|
||||
-- métier gossip-flaggés qui n'en ont pas. (menu 0 jamais touché.)
|
||||
-- OptionNpcFlag=16 -> visible uniquement pour les dresseurs. TrainerId=0 ->
|
||||
-- fallback legacy. OptionIndex = MAX+1 par menu. À exécuter APRÈS Part A.
|
||||
-- ---------------------------------------------------------------------------
|
||||
INSERT INTO gossip_menu_option
|
||||
(MenuId, OptionIndex, OptionIcon, OptionText, OptionBroadcastTextId, OptionType, OptionNpcFlag, VerifiedBuild)
|
||||
SELECT m.MenuId, m.maxidx+1, 3, 'Je voudrais m''entraîner.', 0, 5, 16, 26972
|
||||
FROM (
|
||||
SELECT ct.gossip_menu_id AS MenuId, COALESCE(MAX(g.OptionIndex),-1) AS maxidx
|
||||
FROM creature_template ct JOIN creature c ON c.id=ct.entry
|
||||
LEFT JOIN gossip_menu_option g ON g.MenuId=ct.gossip_menu_id
|
||||
WHERE (ct.npcflag&16)>0 AND (ct.npcflag&32)=0 AND (ct.npcflag&1)>0
|
||||
AND ct.gossip_menu_id<>0
|
||||
AND ct.subname NOT LIKE '%Engineer%'
|
||||
AND EXISTS(SELECT 1 FROM npc_trainer nt WHERE nt.ID=ct.entry)
|
||||
AND NOT EXISTS(SELECT 1 FROM gossip_menu_option g2 WHERE g2.MenuId=ct.gossip_menu_id AND g2.OptionType=5)
|
||||
AND (CASE
|
||||
WHEN ct.subname LIKE '%Alchem%' THEN 1 WHEN ct.subname LIKE '%Blacksmith%' THEN 1
|
||||
WHEN ct.subname LIKE '%Enchant%' THEN 1 WHEN ct.subname LIKE '%Jewelcraft%' THEN 1
|
||||
WHEN ct.subname LIKE '%Leatherwork%' OR ct.subname LIKE '%Tanner%' THEN 1
|
||||
WHEN ct.subname LIKE '%Tailor%' THEN 1 WHEN ct.subname LIKE '%Inscription%' THEN 1
|
||||
WHEN ct.subname LIKE '%First Aid%' THEN 1 WHEN ct.subname LIKE '%Fish%' OR ct.subname LIKE '%Angler%' THEN 1
|
||||
WHEN ct.subname LIKE '%Herbal%' THEN 1 WHEN ct.subname LIKE '%Mining%' THEN 1
|
||||
WHEN ct.subname LIKE '%Skinning%' THEN 1 WHEN ct.subname LIKE '%Archaeology%' THEN 1
|
||||
WHEN ct.subname LIKE '%Cook%' OR ct.subname LIKE '%Chef%' OR ct.subname LIKE '%Brewmaster%' OR ct.subname LIKE '%Noodle%' OR ct.subname LIKE '%Wok%' THEN 1
|
||||
ELSE NULL END) IS NOT NULL
|
||||
GROUP BY ct.gossip_menu_id
|
||||
) m;
|
||||
@@ -0,0 +1,34 @@
|
||||
-- ============================================================================
|
||||
-- ROLLBACK — Lot 5 (trainers_profession_data_lot5_20260618)
|
||||
-- Base : dc_world | Date : 2026-06-18
|
||||
-- Supprime UNIQUEMENT ce que le lot 5 a inséré :
|
||||
-- A) les lignes de référence-donneur (SpellID<0) des 103 maîtres concernés
|
||||
-- (ces entrées n'avaient AUCUNE ligne npc_trainer auparavant) ;
|
||||
-- B) les 33 options de gossip trainer ajoutées sur les menus dédiés.
|
||||
-- Puis restart world OU reload des tables.
|
||||
-- ============================================================================
|
||||
|
||||
SET NAMES utf8;
|
||||
|
||||
-- A) données
|
||||
DELETE FROM npc_trainer WHERE SpellID < 0 AND ID IN (
|
||||
223,1246,1383,1386,2798,3007,3008,3009,3069,3549,3605,3607,3703,3964,3965,4213,
|
||||
4605,4609,5695,6288,6387,7871,7949,8153,10266,10276,10277,10278,11044,11047,
|
||||
11049,11065,11067,11071,11074,11081,11083,11084,12025,14740,16367,16634,16643,
|
||||
16671,16687,16688,16703,16723,16725,16727,16740,16741,16744,16745,17424,18018,
|
||||
18748,18754,18771,18773,18774,18776,18802,19052,19180,19184,19248,19249,19250,
|
||||
19478,19539,19774,19775,19777,19778,21087,26956,26960,26974,26975,26986,26996,
|
||||
27023,27029,30715,33639,33641,33674,33678,33683,43431,47573,47574,47578,51997,
|
||||
53409,53415,62327,66353,66354,66357,66358,66360
|
||||
);
|
||||
|
||||
-- B) options de gossip (menus dédiés)
|
||||
DELETE FROM gossip_menu_option
|
||||
WHERE OptionType = 5 AND OptionNpcFlag = 16 AND OptionText = 'Je voudrais m''entraîner.'
|
||||
AND (MenuId, OptionIndex) IN (
|
||||
(2742,0),(2747,0),(2748,0),(2761,0),(2782,0),(4116,0),(4119,0),(4134,1),
|
||||
(4154,0),(4157,0),(4158,0),(4164,1),(4170,0),(4181,0),(4187,0),(4204,0),
|
||||
(4207,0),(4842,0),(6087,2),(7455,1),(8379,0),(8381,0),(8434,1),(8828,0),
|
||||
(8863,0),(10350,2),(13291,1),(14582,1),(14624,1),(14628,2),(15098,1),
|
||||
(15099,1),(15100,1)
|
||||
);
|
||||
Reference in New Issue
Block a user