aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Chat/LanguageMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Chat/LanguageMgr.cpp')
-rw-r--r--src/server/game/Chat/LanguageMgr.cpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/server/game/Chat/LanguageMgr.cpp b/src/server/game/Chat/LanguageMgr.cpp
index aae7e3cffc4..534ea1bfc85 100644
--- a/src/server/game/Chat/LanguageMgr.cpp
+++ b/src/server/game/Chat/LanguageMgr.cpp
@@ -131,7 +131,13 @@ namespace
case 'c':
case 'C':
// skip color
- i += 9;
+ if (i + 2 >= source.length())
+ break;
+
+ if (source[i + 2] == 'n')
+ i = source.find(':', i); // numeric color id
+ else
+ i += 9;
break;
case 'r':
++i;
@@ -174,12 +180,17 @@ namespace
WStrToUtf8(wstrText, text);
}
- static char upper_backslash(char c)
+ constexpr char upper_backslash(char c)
{
- return c == '/' ? '\\' : char(toupper(c));
+ if (c == '/')
+ return '\\';
+ if (c >= 'a' && c <= 'z')
+ return char('A' + char(c - 'a'));
+ else
+ return c;
}
- static uint32 const sstr_hashtable[16] =
+ constexpr std::array<uint32, 16> sstr_hashtable =
{
0x486E26EE, 0xDCAA16B3, 0xE1918EEF, 0x202DAFDB,
0x341C7DC7, 0x1C365303, 0x40EF2D37, 0x65FD5E49,
@@ -187,7 +198,7 @@ namespace
0xE3061AE7, 0xA39B0FA1, 0x9797F25F, 0xE4444563,
};
- uint32 SStrHash(std::string_view string, bool caseInsensitive, uint32 seed = 0x7FED7FED)
+ constexpr uint32 SStrHash(std::string_view string, bool caseInsensitive, uint32 seed = 0x7FED7FED)
{
uint32 shift = 0xEEEEEEEE;
for (char c : string)