diff options
author | Treeston <treeston.mmoc@gmail.com> | 2020-09-02 22:01:51 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-02-04 23:49:59 +0100 |
commit | 0d54a5ecb4490408f4fa0c63b825f60d4b55531c (patch) | |
tree | c86b73af6d58d17ac78feee5f3aa27a8f7a94e4a /src/server/game/Chat/Hyperlinks.cpp | |
parent | f7c65960a5816aeaf687202e6526b59cd2bf27f3 (diff) |
Core/Misc: Add support for custom link colors. Clean-up hyperlink validation, no more long-ass defines. Remove UI.ShowQuestLevelsInDialogs.
(cherry picked from commit eaf8fa75a1c76131ecbf2585db6d6236b7334b8e)
Diffstat (limited to 'src/server/game/Chat/Hyperlinks.cpp')
-rw-r--r-- | src/server/game/Chat/Hyperlinks.cpp | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/src/server/game/Chat/Hyperlinks.cpp b/src/server/game/Chat/Hyperlinks.cpp index 448ad0a4ea7..2d1711f8a21 100644 --- a/src/server/game/Chat/Hyperlinks.cpp +++ b/src/server/game/Chat/Hyperlinks.cpp @@ -449,6 +449,9 @@ struct LinkValidator<LinkTags::quest> { static bool IsTextValid(QuestLinkData const& data, std::string_view text) { + if (text.empty()) + return false; + if (text == data.Quest->GetLogTitle()) return true; @@ -629,25 +632,32 @@ struct LinkValidator<LinkTags::worldmap> } }; -#define TryValidateAs(tagname) \ -{ \ - static_assert(LinkTags::tagname::tag() == #tagname); \ - if (info.tag == LinkTags::tagname::tag()) \ - { \ - advstd::remove_cvref_t<typename LinkTags::tagname::value_type> t; \ - if (!LinkTags::tagname::StoreTo(t, info.data)) \ - return false; \ - if (!LinkValidator<LinkTags::tagname>::IsColorValid(t, info.color)) \ - return false; \ - if (sWorld->getIntConfig(CONFIG_CHAT_STRICT_LINK_CHECKING_SEVERITY)) \ - if (!LinkValidator<LinkTags::tagname>::IsTextValid(t, info.text)) \ - return false; \ - return true; \ - } \ +template <typename TAG> +static bool ValidateAs(HyperlinkInfo const& info) +{ + std::decay_t<typename TAG::value_type> t; + if (!TAG::StoreTo(t, info.data)) + return false; + + int32 const severity = static_cast<int32>(sWorld->getIntConfig(CONFIG_CHAT_STRICT_LINK_CHECKING_SEVERITY)); + if (severity >= 0) + { + if (!LinkValidator<TAG>::IsColorValid(t, info.color)) + return false; + if (severity >= 1) + { + if (!LinkValidator<TAG>::IsTextValid(t, info.text)) + return false; + } + } + return true; } +#define TryValidateAs(T) do { if (info.tag == T::tag()) return ValidateAs<T>(info); } while (0) + static bool ValidateLinkInfo(HyperlinkInfo const& info) { + using namespace LinkTags; TryValidateAs(achievement); TryValidateAs(apower); TryValidateAs(azessence); |