diff options
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 65 |
1 files changed, 21 insertions, 44 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index a7822903214..c33c494954a 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -53,6 +53,7 @@ #include "QueryPackets.h" #include "QuestDef.h" #include "Random.h" +#include "Realm.h" #include "ReputationMgr.h" #include "ScriptMgr.h" #include "ScriptReloadMgr.h" @@ -8593,41 +8594,12 @@ bool ObjectMgr::IsReservedName(std::string_view name) const return _reservedNamesStore.find(wstr) != _reservedNamesStore.end(); } -enum LanguageType +static EnumFlag<CfgCategoriesCharsets> GetRealmLanguageType(bool create) { - LT_BASIC_LATIN = 0x0000, - LT_EXTENDEN_LATIN = 0x0001, - LT_CYRILLIC = 0x0002, - LT_EAST_ASIA = 0x0004, - LT_ANY = 0xFFFF -}; + if (Cfg_CategoriesEntry const* category = sCfgCategoriesStore.LookupEntry(realm.Timezone)) + return create ? category->GetCreateCharsetMask() : category->GetExistingCharsetMask(); -static LanguageType GetRealmLanguageType(bool create) -{ - switch (sWorld->getIntConfig(CONFIG_REALM_ZONE)) - { - case REALM_ZONE_UNKNOWN: // any language - case REALM_ZONE_DEVELOPMENT: - case REALM_ZONE_TEST_SERVER: - case REALM_ZONE_QA_SERVER: - return LT_ANY; - case REALM_ZONE_UNITED_STATES: // extended-Latin - case REALM_ZONE_OCEANIC: - case REALM_ZONE_LATIN_AMERICA: - case REALM_ZONE_ENGLISH: - case REALM_ZONE_GERMAN: - case REALM_ZONE_FRENCH: - case REALM_ZONE_SPANISH: - return LT_EXTENDEN_LATIN; - case REALM_ZONE_KOREA: // East-Asian - case REALM_ZONE_TAIWAN: - case REALM_ZONE_CHINA: - return LT_EAST_ASIA; - case REALM_ZONE_RUSSIAN: // Cyrillic - return LT_CYRILLIC; - default: - return create ? LT_BASIC_LATIN : LT_ANY; // basic-Latin at create, any at login - } + return create ? CfgCategoriesCharsets::English : CfgCategoriesCharsets::Any; // basic-Latin at create, any at login } bool isValidString(const std::wstring& wstr, uint32 strictMask, bool numericOrSpace, bool create = false) @@ -8638,23 +8610,28 @@ bool isValidString(const std::wstring& wstr, uint32 strictMask, bool numericOrSp return true; if (isCyrillicString(wstr, numericOrSpace)) return true; - if (isEastAsianString(wstr, numericOrSpace)) + if (isKoreanString(wstr, numericOrSpace)) + return true; + if (isChineseString(wstr, numericOrSpace)) return true; return false; } if (strictMask & 0x2) // realm zone specific { - LanguageType lt = GetRealmLanguageType(create); - if (lt & LT_EXTENDEN_LATIN) - if (isExtendedLatinString(wstr, numericOrSpace)) - return true; - if (lt & LT_CYRILLIC) - if (isCyrillicString(wstr, numericOrSpace)) - return true; - if (lt & LT_EAST_ASIA) - if (isEastAsianString(wstr, numericOrSpace)) - return true; + EnumFlag<CfgCategoriesCharsets> lt = GetRealmLanguageType(create); + if (lt == CfgCategoriesCharsets::Any) + return true; + if (lt.HasFlag(CfgCategoriesCharsets::Latin1) && isExtendedLatinString(wstr, numericOrSpace)) + return true; + if (lt.HasFlag(CfgCategoriesCharsets::English) && isBasicLatinString(wstr, numericOrSpace)) + return true; + if (lt.HasFlag(CfgCategoriesCharsets::Russian) && isCyrillicString(wstr, numericOrSpace)) + return true; + if (lt.HasFlag(CfgCategoriesCharsets::Korean) && isKoreanString(wstr, numericOrSpace)) + return true; + if (lt.HasFlag(CfgCategoriesCharsets::Chinese) && isChineseString(wstr, numericOrSpace)) + return true; } if (strictMask & 0x1) // basic Latin |