Core/Chat: Some fixes to talent hyperlink verification. Closes #22685.

This commit is contained in:
Treeston
2018-10-19 16:57:23 +02:00
parent d6d2c4efb9
commit d5993bf8e0
2 changed files with 7 additions and 3 deletions

View File

@@ -122,11 +122,15 @@ bool Trinity::Hyperlinks::LinkTags::talent::StoreTo(TalentLinkData& val, char co
{
HyperlinkDataTokenizer t(pos, len);
uint32 talentId;
if (!(t.TryConsumeTo(talentId) && t.TryConsumeTo(val.Rank) && t.IsEmpty()))
int8 rank; // talent links contain <learned rank>-1, we store <learned rank>
if (!(t.TryConsumeTo(talentId) && t.TryConsumeTo(rank) && t.IsEmpty()))
return false;
if (rank < -1 || rank > 4)
return false;
val.Rank = rank+1;
if (!(val.Talent = sTalentStore.LookupEntry(talentId)))
return false;
if (!val.Talent->RankID[val.Rank-1])
if (val.Rank > 0 && !val.Talent->RankID[val.Rank - 1])
return false;
return true;
}

View File

@@ -271,7 +271,7 @@ struct LinkValidator<LinkTags::talent>
{
static bool IsTextValid(TalentLinkData const& data, char const* pos, size_t len)
{
if (SpellInfo const* info = sSpellMgr->GetSpellInfo(data.Talent->RankID[data.Rank-1]))
if (SpellInfo const* info = sSpellMgr->GetSpellInfo(data.Talent->RankID[0]))
return LinkValidator<LinkTags::spell>::IsTextValid(info, pos, len);
return false;
}