diff options
author | Treeston <treeston.mmoc@gmail.com> | 2020-08-30 14:20:20 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-02-04 21:27:25 +0100 |
commit | 03fd9b038e81aa3c92c05005c36855266886b037 (patch) | |
tree | ad40e93074f00f1a9016dd389b0b13784946fef3 | |
parent | a65e7e0213c3bc5683e3255cc91eb424f0d79dc9 (diff) |
Core/Chat: Correct Hyperlink validation for incomplete achievements.
(cherry picked from commit fdcb1c8b2e142acc012f2ecb2ece082302e8fb15)
-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 f0d36065170..990e416bff5 100644 --- a/src/server/game/Chat/HyperlinkTags.cpp +++ b/src/server/game/Chat/HyperlinkTags.cpp @@ -75,9 +75,23 @@ bool Trinity::Hyperlinks::LinkTags::achievement::StoreTo(AchievementLinkData& va if (!t.TryConsumeTo(achievementId)) return false; val.Achievement = sAchievementStore.LookupEntry(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::apower::StoreTo(ArtifactPowerLinkData& val, std::string_view text) diff --git a/src/server/game/Chat/Hyperlinks.h b/src/server/game/Chat/Hyperlinks.h index dfc3f656ccf..9973318d549 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> @@ -60,10 +61,10 @@ namespace Trinity::Hyperlinks AchievementEntry const* Achievement; ObjectGuid CharacterId; bool IsFinished; - uint16 Year; + uint8 Year; uint8 Month; uint8 Day; - uint32 Criteria[4]; + std::array<uint32, 4> Criteria; }; struct ArtifactPowerLinkData @@ -128,7 +129,7 @@ namespace Trinity::Hyperlinks { ItemTemplate const* Item; uint32 EnchantId; - uint32 GemItemId[3]; + std::array<uint32, 3> GemItemId; uint8 RenderLevel; uint32 RenderSpecialization; uint8 Context; |