aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-05-19 00:04:23 +0200
committerShauren <shauren.trinity@gmail.com>2020-05-19 00:04:23 +0200
commit4acae3992bfecf85d68c0860007f7c538ca45a90 (patch)
treeefc6fc10aa6932c2f6059d426be4ddea7262c83a /src/server/game/Entities
parent7a68001452f6eb83df3889a4ef90a7c317ec0eec (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.cpp16
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;
}