aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Globals/ObjectMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp65
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