Core/Realms: Replaced hardcoded realm category list with Cfg_Categories.db2

Port From (https://github.com/TrinityCore/TrinityCore/commit/e161874695c5506bfa3cbcddf944d68b11cbc124)
This commit is contained in:
hondacrx
2024-02-01 09:43:05 -05:00
parent 6bab5cefc7
commit b48f777dc6
9 changed files with 103 additions and 119 deletions
+53 -65
View File
@@ -47,6 +47,7 @@ namespace Game
name = new string(charArray);
return true;
}
public static ExtendedPlayerName ExtractExtendedPlayerName(string name)
{
int pos = name.IndexOf('-');
@@ -55,32 +56,14 @@ namespace Game
else
return new ExtendedPlayerName(name, "");
}
static LanguageType GetRealmLanguageType(bool create)
static CfgCategoriesCharsets GetRealmLanguageType(bool create)
{
switch ((RealmZones)WorldConfig.GetIntValue(WorldCfg.RealmZone))
{
case RealmZones.Unknown: // any language
case RealmZones.Development:
case RealmZones.TestServer:
case RealmZones.QaServer:
return LanguageType.Any;
case RealmZones.UnitedStates: // extended-Latin
case RealmZones.Oceanic:
case RealmZones.LatinAmerica:
case RealmZones.English:
case RealmZones.German:
case RealmZones.French:
case RealmZones.Spanish:
return LanguageType.ExtendenLatin;
case RealmZones.Korea: // East-Asian
case RealmZones.Taiwan:
case RealmZones.China:
return LanguageType.EastAsia;
case RealmZones.Russian: // Cyrillic
return LanguageType.Cyrillic;
default:
return create ? LanguageType.BasicLatin : LanguageType.Any; // basic-Latin at create, any at login
}
Cfg_CategoriesRecord category = CliDB.CfgCategoriesStorage.LookupByKey(Global.WorldMgr.GetRealm().Timezone);
if (category != null)
return create ? category.GetCreateCharsetMask() : category.GetExistingCharsetMask();
return create ? CfgCategoriesCharsets.English : CfgCategoriesCharsets.Any; // basic-Latin at create, any at login
}
public static CreatureModel ChooseDisplayId(CreatureTemplate cinfo, CreatureData data = null)
@@ -175,44 +158,43 @@ namespace Game
{
if (strictMask == 0) // any language, ignore realm
{
if (IsCultureString(LanguageType.BasicLatin, str, numericOrSpace))
if (IsCultureString(CfgCategoriesCharsets.Latin1, str, numericOrSpace))
return true;
if (IsCultureString(LanguageType.ExtendenLatin, str, numericOrSpace))
if (IsCultureString(CfgCategoriesCharsets.Russian, str, numericOrSpace))
return true;
if (IsCultureString(LanguageType.Cyrillic, str, numericOrSpace))
if (IsCultureString(CfgCategoriesCharsets.Korean, str, numericOrSpace))
return true;
if (IsCultureString(LanguageType.EastAsia, str, numericOrSpace))
if (IsCultureString(CfgCategoriesCharsets.Chinese, str, numericOrSpace))
return true;
return false;
}
if (Convert.ToBoolean(strictMask & 0x2)) // realm zone specific
{
LanguageType lt = GetRealmLanguageType(create);
if (lt.HasAnyFlag(LanguageType.ExtendenLatin))
{
if (IsCultureString(LanguageType.BasicLatin, str, numericOrSpace))
return true;
if (IsCultureString(LanguageType.ExtendenLatin, str, numericOrSpace))
return true;
}
if (lt.HasAnyFlag(LanguageType.Cyrillic))
if (IsCultureString(LanguageType.Cyrillic, str, numericOrSpace))
return true;
if (lt.HasAnyFlag(LanguageType.EastAsia))
if (IsCultureString(LanguageType.EastAsia, str, numericOrSpace))
return true;
CfgCategoriesCharsets lt = GetRealmLanguageType(create);
if (lt == CfgCategoriesCharsets.Any)
return true;
if (lt.HasFlag(CfgCategoriesCharsets.Latin1) && IsCultureString(CfgCategoriesCharsets.Latin1, str, numericOrSpace))
return true;
if (lt.HasFlag(CfgCategoriesCharsets.English) && IsCultureString(CfgCategoriesCharsets.English, str, numericOrSpace))
return true;
if (lt.HasFlag(CfgCategoriesCharsets.Russian) && IsCultureString(CfgCategoriesCharsets.Russian, str, numericOrSpace))
return true;
if (lt.HasFlag(CfgCategoriesCharsets.Korean) && IsCultureString(CfgCategoriesCharsets.Korean, str, numericOrSpace))
return true;
if (lt.HasFlag(CfgCategoriesCharsets.Chinese) && IsCultureString(CfgCategoriesCharsets.Chinese, str, numericOrSpace))
return true;
}
if (Convert.ToBoolean(strictMask & 0x1)) // basic Latin
{
if (IsCultureString(LanguageType.BasicLatin, str, numericOrSpace))
if (IsCultureString(CfgCategoriesCharsets.English, str, numericOrSpace))
return true;
}
return false;
}
static bool IsCultureString(LanguageType culture, string str, bool numericOrSpace)
static bool IsCultureString(CfgCategoriesCharsets culture, string str, bool numericOrSpace)
{
foreach (var wchar in str)
{
@@ -221,13 +203,17 @@ namespace Game
switch (culture)
{
case LanguageType.BasicLatin:
case CfgCategoriesCharsets.English:
if (wchar >= 'a' && wchar <= 'z') // LATIN SMALL LETTER A - LATIN SMALL LETTER Z
return true;
if (wchar >= 'A' && wchar <= 'Z') // LATIN CAPITAL LETTER A - LATIN CAPITAL LETTER Z
return true;
break;
case CfgCategoriesCharsets.Latin1:
if (wchar >= 'a' && wchar <= 'z') // LATIN SMALL LETTER A - LATIN SMALL LETTER Z
return true;
if (wchar >= 'A' && wchar <= 'Z') // LATIN CAPITAL LETTER A - LATIN CAPITAL LETTER Z
return true;
return false;
case LanguageType.ExtendenLatin:
if (wchar >= 0x00C0 && wchar <= 0x00D6) // LATIN CAPITAL LETTER A WITH GRAVE - LATIN CAPITAL LETTER O WITH DIAERESIS
return true;
if (wchar >= 0x00D8 && wchar <= 0x00DE) // LATIN CAPITAL LETTER O WITH STROKE - LATIN CAPITAL LETTER THORN
@@ -242,31 +228,33 @@ namespace Game
return true;
if (wchar == 0x1E9E) // LATIN CAPITAL LETTER SHARP S
return true;
return false;
case LanguageType.Cyrillic:
break;
case CfgCategoriesCharsets.Russian:
if (wchar >= 0x0410 && wchar <= 0x044F) // CYRILLIC CAPITAL LETTER A - CYRILLIC SMALL LETTER YA
return true;
if (wchar == 0x0401 || wchar == 0x0451) // CYRILLIC CAPITAL LETTER IO, CYRILLIC SMALL LETTER IO
return true;
return false;
case LanguageType.EastAsia:
break;
case CfgCategoriesCharsets.Korean:
if (wchar >= 0x1100 && wchar <= 0x11F9) // Hangul Jamo
return true;
if (wchar >= 0x3041 && wchar <= 0x30FF) // Hiragana + Katakana
return true;
if (wchar >= 0x3131 && wchar <= 0x318E) // Hangul Compatibility Jamo
return true;
if (wchar >= 0x31F0 && wchar <= 0x31FF) // Katakana Phonetic Ext.
return true;
if (wchar >= 0x3400 && wchar <= 0x4DB5) // CJK Ideographs Ext. A
return true;
if (wchar >= 0x4E00 && wchar <= 0x9FC3) // Unified CJK Ideographs
return true;
if (wchar >= 0xAC00 && wchar <= 0xD7A3) // Hangul Syllables
return true;
if (wchar >= 0xFF01 && wchar <= 0xFFEE) // Halfwidth forms
return true;
return false;
break;
case CfgCategoriesCharsets.Chinese:
if (wchar >= 0x4E00 && wchar <= 0x9FFF) // Unified CJK Ideographs
return true;
if (wchar >= 0x3400 && wchar <= 0x4DBF) // CJK Ideographs Ext. A
return true;
if (wchar >= 0x3100 && wchar <= 0x312C) // Bopomofo
return true;
if (wchar >= 0xF900 && wchar <= 0xFAFF) // CJK Compatibility Ideographs
return true;
break;
}
}
@@ -1455,7 +1443,7 @@ namespace Game
Log.outError(LogFilter.Sql, $"Table `spell_scripts` - spell {spellId} effect {spellEffIndex} is not SPELL_EFFECT_SCRIPT_EFFECT or SPELL_EFFECT_DUMMY");
}
}
void LoadEventSet()
{
_eventStorage.Clear();
@@ -5253,7 +5241,7 @@ namespace Game
{
return _creatureTemplateSparringStorage.LookupByKey(entry);
}
public CreatureMovementData GetCreatureMovementOverride(ulong spawnId)
{
return creatureMovementOverrides.LookupByKey(spawnId);
@@ -8232,7 +8220,7 @@ namespace Game
return null;
}
//Spells /Skills / Phases
public void LoadPhases()
{
@@ -10319,7 +10307,7 @@ namespace Game
return 0;
}
public uint GetMaxLevelForExpansion(Expansion expansion)
{
switch (expansion)