aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Chat/Hyperlinks.cpp14
-rw-r--r--src/server/game/Chat/Hyperlinks.h2
-rw-r--r--src/server/game/Globals/ObjectMgr.h14
3 files changed, 21 insertions, 9 deletions
diff --git a/src/server/game/Chat/Hyperlinks.cpp b/src/server/game/Chat/Hyperlinks.cpp
index 387e723ce11..448ad0a4ea7 100644
--- a/src/server/game/Chat/Hyperlinks.cpp
+++ b/src/server/game/Chat/Hyperlinks.cpp
@@ -372,7 +372,7 @@ struct LinkValidator<LinkTags::item>
{
for (LocaleConstant i = LOCALE_enUS; i < TOTAL_LOCALES; i = LocaleConstant(i + 1))
{
- std::string name = itemTemplate->GetName(i);
+ std::string_view name = itemTemplate->GetName(i);
if (name.empty())
continue;
if (suffixStrings)
@@ -449,16 +449,20 @@ struct LinkValidator<LinkTags::quest>
{
static bool IsTextValid(QuestLinkData const& data, std::string_view text)
{
+ if (text == data.Quest->GetLogTitle())
+ return true;
+
QuestTemplateLocale const* locale = sObjectMgr->GetQuestLocale(data.Quest->GetQuestId());
if (!locale)
- return data.Quest->GetLogTitle().c_str() == text;
+ return false;
for (uint8 i = 0; i < TOTAL_LOCALES; ++i)
{
- std::string const& name = (i == DEFAULT_LOCALE) ? data.Quest->GetLogTitle() : locale->LogTitle[i];
- if (name.empty())
+ if (i == DEFAULT_LOCALE)
continue;
- if (text == name)
+
+ std::string_view name = ObjectMgr::GetLocaleString(locale->LogTitle, i);
+ if (!name.empty() && (text == name))
return true;
}
diff --git a/src/server/game/Chat/Hyperlinks.h b/src/server/game/Chat/Hyperlinks.h
index bbbe5eb9a7a..963262018d5 100644
--- a/src/server/game/Chat/Hyperlinks.h
+++ b/src/server/game/Chat/Hyperlinks.h
@@ -210,7 +210,7 @@ namespace Trinity::Hyperlinks
|* - this method SHOULD be constexpr *|
|* - returns identifier string for the link ("creature", "creature_entry", "item") *|
|* - MUST expose static ::StoreTo method, (storage&, std::string_view) *|
- |* - assign value_type& based on content of std::string_view *|
+ |* - assign storage& based on content of std::string_view *|
|* - return value indicates success/failure *|
|* - for integral/string types this can be achieved by extending base_tag *|
\****************************************************************************************/
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index 65956b83e87..e157a84c539 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -1059,6 +1059,7 @@ class PlayerDumpReader;
class TC_GAME_API ObjectMgr
{
friend class PlayerDumpReader;
+ friend class UnitTestDataLoader;
private:
ObjectMgr();
@@ -1684,10 +1685,17 @@ class TC_GAME_API ObjectMgr
GraveyardContainer GraveyardStore;
static void AddLocaleString(std::string&& value, LocaleConstant localeConstant, std::vector<std::string>& data);
- static inline void GetLocaleString(std::vector<std::string> const& data, LocaleConstant localeConstant, std::string& value)
+ static std::string_view GetLocaleString(std::vector<std::string> const& data, size_t locale)
{
- if (data.size() > size_t(localeConstant) && !data[localeConstant].empty())
- value = data[localeConstant];
+ if (locale < data.size())
+ return data[locale];
+ else
+ return {};
+ }
+ static void GetLocaleString(std::vector<std::string> const& data, LocaleConstant localeConstant, std::string& value)
+ {
+ if (std::string_view str = GetLocaleString(data, static_cast<size_t>(localeConstant)); !str.empty())
+ value.assign(str);
}
CharacterConversionMap FactionChangeAchievements;