diff options
author | Shauren <shauren.trinity@gmail.com> | 2025-06-26 15:37:57 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2025-06-26 15:37:57 +0200 |
commit | f84cd43b36c557aff5673ded28d2c557bacddb98 (patch) | |
tree | 47bd83eb57b913be8a0dbec48173a49df1e7c4ed | |
parent | db4af7ca4cd105b5a1dd1493fb1740cdd27329bb (diff) |
Core/Chat: Fixed chat language translations for messages containing item links using new 11.1.5 color format
-rw-r--r-- | src/server/game/Chat/LanguageMgr.cpp | 21 |
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) |