From a043d539f016e8552ca6b7ea68ff162e15abf2b1 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 8 Feb 2015 16:23:31 +0100 Subject: Core/Spells: Implemented SpellLearnSpell.db2 for auto learning linked spells --- src/server/game/Entities/Player/Player.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'src/server/game/Entities') diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index a26a728de81..559e40137c3 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -3658,13 +3658,16 @@ bool Player::AddSpell(uint32 spellId, bool active, bool learning, bool dependent for (SpellLearnSpellMap::const_iterator itr2 = spell_bounds.first; itr2 != spell_bounds.second; ++itr2) { - if (!itr2->second.autoLearned) + if (!itr2->second.AutoLearned) { - if (!IsInWorld() || !itr2->second.active) // at spells loading, no output, but allow save - AddSpell(itr2->second.spell, itr2->second.active, true, true, false); + if (!IsInWorld() || !itr2->second.Active) // at spells loading, no output, but allow save + AddSpell(itr2->second.Spell, itr2->second.Active, true, true, false); else // at normal learning - LearnSpell(itr2->second.spell, true); + LearnSpell(itr2->second.Spell, true); } + + if (itr2->second.OverridesSpell && itr2->second.Active) + AddOverrideSpell(itr2->second.OverridesSpell, itr2->second.Spell); } if (!GetSession()->PlayerLoading()) @@ -3873,7 +3876,11 @@ void Player::RemoveSpell(uint32 spell_id, bool disabled, bool learn_low_rank) SpellLearnSpellMapBounds spell_bounds = sSpellMgr->GetSpellLearnSpellMapBounds(spell_id); for (SpellLearnSpellMap::const_iterator itr2 = spell_bounds.first; itr2 != spell_bounds.second; ++itr2) - RemoveSpell(itr2->second.spell, disabled); + { + RemoveSpell(itr2->second.Spell, disabled); + if (itr2->second.OverridesSpell) + RemoveOverrideSpell(itr2->second.OverridesSpell, itr2->second.Spell); + } // activate lesser rank in spellbook/action bar, and cast it if need bool prev_activate = false; -- cgit v1.2.3