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...");