diff options
author | ariel- <ariel-@users.noreply.github.com> | 2016-10-02 15:49:29 -0300 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2017-03-05 01:06:40 +0100 |
commit | 062ca4ac69140b74c3034e60c671c7d418dea188 (patch) | |
tree | 76ce4be260994a6fc20a32c520e39c949e9d6500 /src | |
parent | bbdf89e694efc81a283fcaf7b5c3feea9157c0d1 (diff) |
Core/Spell: Add Dual Wield skill dependency to Dual Wield effect, should remove the skill properly when unlearning spell.
Closes #17196
(cherry picked from commit 405167dafd4e08d2f4ae92f73ce55dcd7e7d97a9)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 40 | ||||
-rw-r--r-- | src/server/game/Spells/SpellMgr.h | 2 |
2 files changed, 27 insertions, 15 deletions
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 1b5b481f458..3686d41178f 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -1401,29 +1401,41 @@ void SpellMgr::LoadSpellLearnSkills() // search auto-learned skills and add its to map also for use in unlearn spells/talents uint32 dbc_count = 0; - for (uint32 spell = 0; spell < GetSpellInfoStoreSize(); ++spell) + for (SpellInfo const* entry : mSpellInfoMap) { - SpellInfo const* entry = GetSpellInfo(spell); - if (!entry) continue; for (SpellEffectInfo const* effect : entry->GetEffectsForDifficulty(DIFFICULTY_NONE)) { - if (effect && effect->Effect == SPELL_EFFECT_SKILL) + if (!effect) + continue; + + SpellLearnSkillNode dbc_node; + switch (effect->Effect) { - SpellLearnSkillNode dbc_node; - dbc_node.skill = uint16(effect->MiscValue); - dbc_node.step = uint16(effect->CalcValue()); - if (dbc_node.skill != SKILL_RIDING) + case SPELL_EFFECT_SKILL: + dbc_node.skill = uint16(effect->MiscValue); + dbc_node.step = uint16(effect->CalcValue()); + if (dbc_node.skill != SKILL_RIDING) + dbc_node.value = 1; + else + dbc_node.value = dbc_node.step * 75; + dbc_node.maxvalue = dbc_node.step * 75; + break; + case SPELL_EFFECT_DUAL_WIELD: + dbc_node.skill = SKILL_DUAL_WIELD; + dbc_node.step = 1; dbc_node.value = 1; - else - dbc_node.value = dbc_node.step * 75; - dbc_node.maxvalue = dbc_node.step * 75; - mSpellLearnSkills[spell] = dbc_node; - ++dbc_count; - break; + dbc_node.maxvalue = 1; + break; + default: + continue; } + + mSpellLearnSkills[entry->Id] = dbc_node; + ++dbc_count; + break; } } diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h index 6eb0f0c03c9..77220b378c4 100644 --- a/src/server/game/Spells/SpellMgr.h +++ b/src/server/game/Spells/SpellMgr.h @@ -552,7 +552,7 @@ struct SpellLearnSkillNode uint16 maxvalue; // 0 - max skill value for player level }; -typedef std::map<uint32, SpellLearnSkillNode> SpellLearnSkillMap; +typedef std::unordered_map<uint32, SpellLearnSkillNode> SpellLearnSkillMap; struct SpellLearnSpellNode { |