diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Chat/HyperlinkTags.cpp | 20 | ||||
-rw-r--r-- | src/server/game/Chat/Hyperlinks.h | 7 |
2 files changed, 21 insertions, 6 deletions
diff --git a/src/server/game/Chat/HyperlinkTags.cpp b/src/server/game/Chat/HyperlinkTags.cpp index f9d2bb4c645..d9e4fb0aedb 100644 --- a/src/server/game/Chat/HyperlinkTags.cpp +++ b/src/server/game/Chat/HyperlinkTags.cpp @@ -62,9 +62,23 @@ bool Trinity::Hyperlinks::LinkTags::achievement::StoreTo(AchievementLinkData& va if (!t.TryConsumeTo(achievementId)) return false; val.Achievement = sAchievementMgr->GetAchievement(achievementId); - return val.Achievement && t.TryConsumeTo(val.CharacterId) && t.TryConsumeTo(val.IsFinished) && - t.TryConsumeTo(val.Month) && t.TryConsumeTo(val.Day) && t.TryConsumeTo(val.Year) && t.TryConsumeTo(val.Criteria[0]) && - t.TryConsumeTo(val.Criteria[1]) && t.TryConsumeTo(val.Criteria[2]) && t.TryConsumeTo(val.Criteria[3]) && t.IsEmpty(); + if (!(val.Achievement && t.TryConsumeTo(val.CharacterId) && t.TryConsumeTo(val.IsFinished) && + t.TryConsumeTo(val.Month) && t.TryConsumeTo(val.Day))) + return false; + int8 year; + if (!t.TryConsumeTo(year)) + return false; + if (val.IsFinished) // if finished, year must be >= 0 + { + if (year < 0) + return false; + val.Year = static_cast<uint8>(year); + } + else + val.Year = 0; + + return (t.TryConsumeTo(val.Criteria[0]) && + t.TryConsumeTo(val.Criteria[1]) && t.TryConsumeTo(val.Criteria[2]) && t.TryConsumeTo(val.Criteria[3]) && t.IsEmpty()); } bool Trinity::Hyperlinks::LinkTags::enchant::StoreTo(SpellInfo const*& val, std::string_view text) diff --git a/src/server/game/Chat/Hyperlinks.h b/src/server/game/Chat/Hyperlinks.h index 7d83592bdf9..e21177f0848 100644 --- a/src/server/game/Chat/Hyperlinks.h +++ b/src/server/game/Chat/Hyperlinks.h @@ -20,6 +20,7 @@ #include "ObjectGuid.h" #include "StringConvert.h" +#include <array> #include <string> #include <string_view> #include <type_traits> @@ -41,10 +42,10 @@ namespace Trinity::Hyperlinks AchievementEntry const* Achievement; ObjectGuid::LowType CharacterId; bool IsFinished; - uint16 Year; + uint8 Year; uint8 Month; uint8 Day; - uint32 Criteria[4]; + std::array<uint32, 4> Criteria; }; struct GlyphLinkData @@ -57,7 +58,7 @@ namespace Trinity::Hyperlinks { ItemTemplate const* Item; uint32 EnchantId; - uint32 GemEnchantId[3]; + std::array<uint32, 3> GemEnchantId; int32 RandomPropertyId; int32 RandomPropertySeed; uint8 RenderLevel; |