799b5a303e
Le client 7.3.5 embarque 88k traductions frFR officielles mais TC lit creature_text_locale (11 lignes) et gossip_menu_option_locale (18 lignes). Pont via BroadcastTextId : +12 288 dialogues de creatures et +5 605 options de gossip en francais, serveur entier. Recharge a chaud, aucun restart. Decouvert en testant l Ile Vagabonde (dialogues d ambiance en anglais).
36 lines
2.0 KiB
SQL
36 lines
2.0 KiB
SQL
-- =====================================================================
|
|
-- PONT DE TRADUCTIONS : broadcast_text_locale -> tables locale de TC
|
|
--
|
|
-- Constat : le client 7.3.5 embarque 88 288 traductions frFR officielles
|
|
-- (dc_hotfixes.broadcast_text_locale), mais TrinityCore lit les dialogues
|
|
-- de créatures dans dc_world.creature_text_locale (11 lignes !) et les
|
|
-- options de gossip dans gossip_menu_option_locale (18 lignes). Résultat :
|
|
-- tous les dialogues scriptés et menus s'affichaient en anglais alors que
|
|
-- les traductions officielles étaient déjà sur le serveur.
|
|
--
|
|
-- Ce patch construit le pont via les BroadcastTextId (déjà renseignés sur
|
|
-- 13 459 creature_text et 6 310 gossip_menu_option) :
|
|
-- +12 288 dialogues de créatures en frFR (91 % du serveur)
|
|
-- +5 605 options de gossip en frFR
|
|
-- Rejouable sans risque (INSERT IGNORE). Rechargeable à chaud :
|
|
-- reload locales_creature_text / reload locales_gossip_menu_option
|
|
-- =====================================================================
|
|
|
|
INSERT IGNORE INTO `creature_text_locale` (CreatureID, GroupID, ID, Locale, Text)
|
|
SELECT ct.CreatureID, ct.GroupID, ct.ID, 'frFR',
|
|
CASE WHEN bt.Text1 IS NOT NULL AND bt.Text1 <> '' AND ct.Text = bt.Text1
|
|
THEN COALESCE(NULLIF(l.Text1_lang, ''), NULLIF(l.Text_lang, ''))
|
|
ELSE COALESCE(NULLIF(l.Text_lang, ''), NULLIF(l.Text1_lang, '')) END AS fr
|
|
FROM `creature_text` ct
|
|
JOIN `dc_hotfixes`.`broadcast_text` bt ON bt.ID = ct.BroadcastTextId
|
|
JOIN `dc_hotfixes`.`broadcast_text_locale` l ON l.ID = ct.BroadcastTextId AND l.locale = 'frFR'
|
|
WHERE ct.BroadcastTextId > 0
|
|
HAVING fr IS NOT NULL;
|
|
|
|
INSERT IGNORE INTO `gossip_menu_option_locale` (MenuId, OptionIndex, Locale, OptionText, BoxText)
|
|
SELECT g.MenuId, g.OptionIndex, 'frFR',
|
|
COALESCE(NULLIF(lo.Text_lang, ''), NULLIF(lo.Text1_lang, '')), ''
|
|
FROM `gossip_menu_option` g
|
|
JOIN `dc_hotfixes`.`broadcast_text_locale` lo ON lo.ID = g.OptionBroadcastTextId AND lo.locale = 'frFR'
|
|
WHERE g.OptionBroadcastTextId > 0;
|