aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2016-10-02 15:49:29 -0300
committerariel- <ariel-@users.noreply.github.com>2016-10-02 15:49:29 -0300
commit405167dafd4e08d2f4ae92f73ce55dcd7e7d97a9 (patch)
treeb95a935f2727262788097ffa654fe8e15f1ddb73 /src
parent64ab5779e1d83f275d7aca9891cafa73bfc4f02c (diff)
Core/Spell: Add Dual Wield skill dependency to Dual Wield effect, should remove the skill properly when unlearning spell.
Closes #17196
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Spells/SpellMgr.cpp37
-rw-r--r--src/server/game/Spells/SpellMgr.h2
2 files changed, 24 insertions, 15 deletions
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index ef159673a22..54684f78186 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -1487,29 +1487,38 @@ 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 (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
{
- if (entry->Effects[i].Effect == SPELL_EFFECT_SKILL)
+ SpellLearnSkillNode dbc_node;
+ switch (entry->Effects[i].Effect)
{
- SpellLearnSkillNode dbc_node;
- dbc_node.skill = entry->Effects[i].MiscValue;
- dbc_node.step = entry->Effects[i].CalcValue();
- if (dbc_node.skill != SKILL_RIDING)
+ case SPELL_EFFECT_SKILL:
+ dbc_node.skill = entry->Effects[i].MiscValue;
+ dbc_node.step = entry->Effects[i].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 23329c1ff1e..5e3193ccd52 100644
--- a/src/server/game/Spells/SpellMgr.h
+++ b/src/server/game/Spells/SpellMgr.h
@@ -545,7 +545,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
{