diff options
| author | Shauren <shauren.trinity@gmail.com> | 2020-05-19 00:04:23 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2020-05-19 00:04:23 +0200 |
| commit | 4acae3992bfecf85d68c0860007f7c538ca45a90 (patch) | |
| tree | efc6fc10aa6932c2f6059d426be4ddea7262c83a /src/server/game/Entities | |
| parent | 7a68001452f6eb83df3889a4ef90a7c317ec0eec (diff) | |
Core/Players: Only restore spells learned as quest rewards if they have the right AcquireMethod in SkillLineAbility.db2
Closes #24645
Diffstat (limited to 'src/server/game/Entities')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index cd60f5da86b..c2e5e8b02e1 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -24499,12 +24499,18 @@ void Player::LearnQuestRewardedSpells(Quest const* quest) uint32 learned_0 = effect->TriggerSpell; if (!HasSpell(learned_0)) { - SpellInfo const* learnedInfo = sSpellMgr->GetSpellInfo(learned_0); - if (!learnedInfo) - return; + found = false; + SkillLineAbilityMapBounds skills = sSpellMgr->GetSkillLineAbilityMapBounds(learned_0); + for (auto skillItr = skills.first; skillItr != skills.second; ++skillItr) + { + if (skillItr->second->AcquireMethod == SKILL_LINE_ABILITY_REWARDED_FROM_QUEST) + { + found = true; + break; + } + } - // profession specialization can be re-learned from npc - if (learnedInfo->GetEffect(EFFECT_0)->Effect == SPELL_EFFECT_TRADE_SKILL && learnedInfo->GetEffect(EFFECT_1)->Effect == 0 && !learnedInfo->SpellLevel) + if (!found) return; } |
