diff options
author | Treeston <treeston.mmoc@gmail.com> | 2020-08-30 14:20:20 +0200 |
---|---|---|
committer | Treeston <treeston.mmoc@gmail.com> | 2020-08-30 14:20:20 +0200 |
commit | fdcb1c8b2e142acc012f2ecb2ece082302e8fb15 (patch) | |
tree | 67da07e3bb19a08276df6558a2784f9d27ab631c /src | |
parent | 944f49d61355926e0d9e5c2d16eb4ad1af03d13c (diff) |
Core/Chat: Correct Hyperlink validation for incomplete achievements.
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; |