Core/Chat: Correct Hyperlink validation for incomplete achievements.

This commit is contained in:
Treeston
2020-08-30 14:20:20 +02:00
parent 944f49d613
commit fdcb1c8b2e
2 changed files with 21 additions and 6 deletions

View File

@@ -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)

View File

@@ -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;