diff options
author | Treeston <treeston.mmoc@gmail.com> | 2018-09-17 21:29:07 +0200 |
---|---|---|
committer | Treeston <treeston.mmoc@gmail.com> | 2018-09-17 21:29:07 +0200 |
commit | 2dc174029cb81150a7b033f2c062bfddfb9ff55a (patch) | |
tree | 19063f20ab811ef993b3355ce17b23f1ab7719b1 /src | |
parent | 152f3fc3e3f94a92f3648379ff037d4eabd479bb (diff) |
Core/Chat: Fix validation of tradeskill recipes that belong to multiple skill lines
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Chat/Hyperlinks.cpp | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/server/game/Chat/Hyperlinks.cpp b/src/server/game/Chat/Hyperlinks.cpp index c4ec7bb511b..b2cc0aa9ff9 100644 --- a/src/server/game/Chat/Hyperlinks.cpp +++ b/src/server/game/Chat/Hyperlinks.cpp @@ -219,22 +219,27 @@ struct LinkValidator<LinkTags::enchant> { static bool IsTextValid(SpellInfo const* info, char const* pos, size_t len) { + if (LinkValidator<LinkTags::spell>::IsTextValid(info, pos, len)) + return true; SkillLineAbilityMapBounds bounds = sSpellMgr->GetSkillLineAbilityMapBounds(info->Id); if (bounds.first == bounds.second) - return LinkValidator<LinkTags::spell>::IsTextValid(info, pos, len); - - SkillLineEntry const* skill = sSkillLineStore.LookupEntry(bounds.first->second->skillId); - if (!skill) return false; - for (uint8 i = 0; i < TOTAL_LOCALES; ++i) + for (auto pair = bounds.first; pair != bounds.second; ++pair) { - char const* skillName = skill->name[i]; - size_t skillLen = strlen(skillName); - if (len > skillLen + 2 && // or of form [Skill Name: Spell Name] - !strncmp(pos, skillName, skillLen) && !strncmp(pos + skillLen, ": ", 2) && - equal_with_len(info->SpellName[i], pos + (skillLen + 2), len - (skillLen + 2))) - return true; + SkillLineEntry const* skill = sSkillLineStore.LookupEntry(pair->second->skillId); + if (!skill) + return false; + + for (uint8 i = 0; i < TOTAL_LOCALES; ++i) + { + char const* skillName = skill->name[i]; + size_t skillLen = strlen(skillName); + if (len > skillLen + 2 && // or of form [Skill Name: Spell Name] + !strncmp(pos, skillName, skillLen) && !strncmp(pos + skillLen, ": ", 2) && + equal_with_len(info->SpellName[i], pos + (skillLen + 2), len - (skillLen + 2))) + return true; + } } return false; } |