From 2830420cf5bd3d29c77ab15cf137b52975662195 Mon Sep 17 00:00:00 2001 From: SylvaniaCore deploy Date: Tue, 11 Aug 2026 08:33:19 +0000 Subject: [PATCH] Fix traductions FR serveur-wide : reparer m_availableDbcLocaleMask Le masque des locales disponibles etait initialise a 0 et JAMAIS renseigne (cablage perdu dans ce fork custom) -> World::GetAvailableDbcLocale() retombait toujours sur enUS -> GetSessionDbcLocale() forcait enUS -> les hotfix de broadcast_text (dialogues PNJ, corps de gossip) etaient pousses en ANGLAIS par-dessus les donnees FR natives du client. Fix : DB2Manager::LoadStores expose le masque reel des locales (fichiers disque + locales chargees depuis la base hotfix quand DB2.Hotfix.LoadAllLocales est actif, broadcast_text_locale faisant foi), branche dans World apres LoadStores. Necessite aussi DB2.Hotfix.LoadAllLocales=1 dans worldserver.conf. Valide en jeu : tous les dialogues PNJ de l Ile Vagabonde passent en francais. Portee : serveur entier (tout texte resolu via le systeme de hotfix). --- src/server/game/DataStores/DB2Stores.cpp | 20 ++++++++++++++++++++ src/server/game/DataStores/DB2Stores.h | 2 ++ src/server/game/World/World.cpp | 1 + 3 files changed, 23 insertions(+) diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index f3e9199..e103c8c 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -1341,6 +1341,26 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) exit(1); } + // Masque des locales reellement disponibles (fichiers disque + locales chargees + // depuis la base hotfix quand DB2.Hotfix.LoadAllLocales est actif). Sans ca, + // m_availableDbcLocaleMask restait a 0 -> GetSessionDbcLocale forcait enUS et les + // hotfix de broadcast_text etaient pousses en anglais par-dessus les donnees FR + // du client. [fix Sylvania] + availableDb2Locales |= (1 << LOCALE_enUS); + if (sConfigMgr->GetBoolDefault("DB2.Hotfix.LoadAllLocales", false)) + { + if (QueryResult localesResult = HotfixDatabase.Query("SELECT DISTINCT locale FROM broadcast_text_locale")) + { + do + { + LocaleConstant lc = GetLocaleByName((*localesResult)[0].GetString()); + if (lc != LOCALE_none) + availableDb2Locales |= (1 << lc); + } while (localesResult->NextRow()); + } + } + _availableLocalesMask = availableDb2Locales; + TC_LOG_INFO("server.loading", ">> Initialized " SZFMTD " DB2 data stores in %u ms", _stores.size(), GetMSTimeDiffToNow(oldMSTime)); } diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h index 0f9b3ca..fc43030 100644 --- a/src/server/game/DataStores/DB2Stores.h +++ b/src/server/game/DataStores/DB2Stores.h @@ -292,6 +292,8 @@ public: static DB2Manager& Instance(); void LoadStores(std::string const& dataPath, uint32 defaultLocale); + uint32 GetAvailableLocalesMask() const { return _availableLocalesMask; } + uint32 _availableLocalesMask = (1 << LOCALE_enUS); DB2StorageBase const* GetStorage(uint32 type) const; void LoadHotfixData(); diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 8fee49e..5304ad8 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1835,6 +1835,7 @@ void World::SetInitialWorldSettings() TC_LOG_INFO("server.loading", "Initialize data stores..."); ///- Load DB2s sDB2Manager.LoadStores(m_dataPath, m_defaultDbcLocale); + m_availableDbcLocaleMask = sDB2Manager.GetAvailableLocalesMask(); // [fix Sylvania] cf DB2Stores TC_LOG_INFO("misc", "Loading hotfix blobs..."); sDB2Manager.LoadHotfixBlob(); TC_LOG_INFO("misc", "Loading hotfix info...");