From 2dc174029cb81150a7b033f2c062bfddfb9ff55a Mon Sep 17 00:00:00 2001 From: Treeston Date: Mon, 17 Sep 2018 21:29:07 +0200 Subject: Core/Chat: Fix validation of tradeskill recipes that belong to multiple skill lines --- src/server/game/Chat/Hyperlinks.cpp | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) (limited to 'src') 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 { static bool IsTextValid(SpellInfo const* info, char const* pos, size_t len) { + if (LinkValidator::IsTextValid(info, pos, len)) + return true; SkillLineAbilityMapBounds bounds = sSpellMgr->GetSkillLineAbilityMapBounds(info->Id); if (bounds.first == bounds.second) - return LinkValidator::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; } -- cgit v1.2.3