diff options
-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; |