From 4bb9823456b8cd938ae9befabd6b85d1b0754b91 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Tue, 14 Jul 2020 17:11:56 -0400 Subject: [PATCH] Core/Misc: Changed GetLocaleByName to return invalid value on invalid input instead of LOCALE_enUS Port From (https://github.com/TrinityCore/TrinityCore/commit/79cd94d26df33a332586b2aa72a99b123199c88f) --- .../Networking/Services/Authentication.cs | 2 +- Source/Framework/Constants/SharedConst.cs | 5 ++++ .../Game/Achievements/AchievementManager.cs | 2 +- Source/Game/Globals/ObjectManager.cs | 26 +++++++++---------- Source/Game/Text/CreatureTextManager.cs | 2 +- 5 files changed, 21 insertions(+), 16 deletions(-) diff --git a/Source/BNetServer/Networking/Services/Authentication.cs b/Source/BNetServer/Networking/Services/Authentication.cs index 88a6ade59..548ae0ce5 100644 --- a/Source/BNetServer/Networking/Services/Authentication.cs +++ b/Source/BNetServer/Networking/Services/Authentication.cs @@ -30,7 +30,7 @@ namespace BNetServer.Networking return BattlenetRpcErrorCode.BadPlatform; } - if (logonRequest.Locale.ToEnum() == Locale.enUS && logonRequest.Locale != "enUS") + if (!SharedConst.IsValidLocale(logonRequest.Locale.ToEnum())) { Log.outDebug(LogFilter.Session, $"Battlenet.LogonRequest: {GetClientInfo()} attempted to log in with unsupported locale (using {logonRequest.Locale})!"); return BattlenetRpcErrorCode.BadLocale; diff --git a/Source/Framework/Constants/SharedConst.cs b/Source/Framework/Constants/SharedConst.cs index 61df16896..2f8da3847 100644 --- a/Source/Framework/Constants/SharedConst.cs +++ b/Source/Framework/Constants/SharedConst.cs @@ -370,6 +370,11 @@ namespace Framework.Constants } return SkillType.None; } + + public static bool IsValidLocale(Locale locale) + { + return locale < Locale.Total && locale != Locale.None; + } } public enum Locale diff --git a/Source/Game/Achievements/AchievementManager.cs b/Source/Game/Achievements/AchievementManager.cs index 3b96bc0e7..9780fb2f8 100644 --- a/Source/Game/Achievements/AchievementManager.cs +++ b/Source/Game/Achievements/AchievementManager.cs @@ -1328,7 +1328,7 @@ namespace Game.Achievements AchievementRewardLocale data = new AchievementRewardLocale(); Locale locale = localeName.ToEnum(); - if (locale == Locale.enUS) + if (!SharedConst.IsValidLocale(locale) || locale == Locale.enUS) continue; ObjectManager.AddLocaleString(result.Read(2), locale, data.Subject); diff --git a/Source/Game/Globals/ObjectManager.cs b/Source/Game/Globals/ObjectManager.cs index 484aebae6..b1fcd4e6b 100644 --- a/Source/Game/Globals/ObjectManager.cs +++ b/Source/Game/Globals/ObjectManager.cs @@ -3060,7 +3060,7 @@ namespace Game string localeName = trainerLocalesResult.Read(1); Locale locale = localeName.ToEnum(); - if (locale == Locale.enUS) + if (!SharedConst.IsValidLocale(locale) || locale == Locale.enUS) continue; Trainer trainer = _trainers.LookupByKey(trainerId); @@ -7884,7 +7884,7 @@ namespace Game uint id = result.Read(0); string localeName = result.Read(1); Locale locale = localeName.ToEnum(); - if (locale == Locale.enUS) + if (!SharedConst.IsValidLocale(locale) || locale == Locale.enUS) continue; if (!_creatureLocaleStorage.ContainsKey(id)) @@ -7916,7 +7916,7 @@ namespace Game uint id = result.Read(0); string localeName = result.Read(1); Locale locale = localeName.ToEnum(); - if (locale == Locale.enUS) + if (!SharedConst.IsValidLocale(locale) || locale == Locale.enUS) continue; if (!_gameObjectLocaleStorage.ContainsKey(id)) @@ -7947,7 +7947,7 @@ namespace Game uint id = result.Read(0); string localeName = result.Read(1); Locale locale = localeName.ToEnum(); - if (locale == Locale.enUS) + if (!SharedConst.IsValidLocale(locale) || locale == Locale.enUS) continue; if (!_questTemplateLocaleStorage.ContainsKey(id)) @@ -7982,7 +7982,7 @@ namespace Game uint id = result.Read(0); string localeName = result.Read(1); Locale locale = localeName.ToEnum(); - if (locale == Locale.enUS) + if (!SharedConst.IsValidLocale(locale) || locale == Locale.enUS) continue; if (!_questObjectivesLocaleStorage.ContainsKey(id)) @@ -8035,7 +8035,7 @@ namespace Game string localeName = result.Read(2); Locale locale = localeName.ToEnum(); - if (locale == Locale.enUS) + if (!SharedConst.IsValidLocale(locale) || locale == Locale.enUS) continue; if (!_questGreetingLocaleStorage[type].ContainsKey(id)) @@ -8064,7 +8064,7 @@ namespace Game uint id = result.Read(0); string localeName = result.Read(1); Locale locale = localeName.ToEnum(); - if (locale == Locale.enUS) + if (!SharedConst.IsValidLocale(locale) || locale == Locale.enUS) continue; if (!_questOfferRewardLocaleStorage.ContainsKey(id)) @@ -8091,7 +8091,7 @@ namespace Game uint id = result.Read(0); string localeName = result.Read(1); Locale locale = localeName.ToEnum(); - if (locale == Locale.enUS) + if (!SharedConst.IsValidLocale(locale) || locale == Locale.enUS) continue; if (!_questRequestItemsLocaleStorage.ContainsKey(id)) @@ -8121,7 +8121,7 @@ namespace Game string localeName = result.Read(2); Locale locale = localeName.ToEnum(); - if (locale == Locale.enUS) + if (!SharedConst.IsValidLocale(locale) || locale == Locale.enUS) continue; GossipMenuItemsLocale data = new GossipMenuItemsLocale(); @@ -8150,7 +8150,7 @@ namespace Game uint id = result.Read(0); string localeName = result.Read(1); Locale locale = localeName.ToEnum(); - if (locale == Locale.enUS) + if (!SharedConst.IsValidLocale(locale) || locale == Locale.enUS) continue; if (!_pageTextLocaleStorage.ContainsKey(id)) @@ -8178,7 +8178,7 @@ namespace Game uint id = result.Read(0); string localeName = result.Read(1); Locale locale = localeName.ToEnum(); - if (locale == Locale.enUS) + if (!SharedConst.IsValidLocale(locale) || locale == Locale.enUS) continue; if (!_pointOfInterestLocaleStorage.ContainsKey(id)) @@ -9172,7 +9172,7 @@ namespace Game int choiceId = result.Read(0); string localeName = result.Read(1); Locale locale = localeName.ToEnum(); - if (locale == Locale.enUS) + if (!SharedConst.IsValidLocale(locale) || locale == Locale.enUS) continue; if (GetPlayerChoice(choiceId) == null) @@ -9204,7 +9204,7 @@ namespace Game int responseId = result.Read(1); string localeName = result.Read(2); Locale locale = localeName.ToEnum(); - if (locale == Locale.enUS) + if (!SharedConst.IsValidLocale(locale) || locale == Locale.enUS) continue; var playerChoiceLocale = _playerChoiceLocales.LookupByKey(choiceId); diff --git a/Source/Game/Text/CreatureTextManager.cs b/Source/Game/Text/CreatureTextManager.cs index 5ef33e747..a7818e07a 100644 --- a/Source/Game/Text/CreatureTextManager.cs +++ b/Source/Game/Text/CreatureTextManager.cs @@ -143,7 +143,7 @@ namespace Game uint id = result.Read(2); string localeName = result.Read(3); Locale locale = localeName.ToEnum(); - if (locale == Locale.enUS) + if (!SharedConst.IsValidLocale(locale) || locale == Locale.enUS) continue; var key = new CreatureTextId(creatureId, groupId, id);