From 02aaa3d17f71a87f706bf145fe6bff28abf12ac4 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sun, 21 Nov 2021 03:44:44 +0100 Subject: [PATCH] =?UTF-8?q?fix(Core/Spell):=20Add=20Dual=20Wield=20skill?= =?UTF-8?q?=20dependency=20to=20Dual=20Wield=20effect,=20sho=E2=80=A6=20(#?= =?UTF-8?q?9162)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Core/Spell: Add Dual Wield skill dependency to Dual Wield effect, should remove the skill properly when unlearning spell. Source: TrinityCore. Fixes #8882 --- src/server/game/Spells/SpellMgr.cpp | 37 ++++++++++++++++++++--------- src/server/game/Spells/SpellMgr.h | 2 +- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 87cad2f70..dce743b12 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -1473,20 +1473,35 @@ void SpellMgr::LoadSpellLearnSkills() 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[spell] = dbc_node; + ++dbc_count; + break; } } diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h index 9d9e71f65..e1ee3ac22 100644 --- a/src/server/game/Spells/SpellMgr.h +++ b/src/server/game/Spells/SpellMgr.h @@ -562,7 +562,7 @@ struct SpellLearnSkillNode uint16 maxvalue; // 0 - max skill value for player level }; -typedef std::map SpellLearnSkillMap; +typedef std::unordered_map SpellLearnSkillMap; typedef std::multimap SkillLineAbilityMap; typedef std::pair SkillLineAbilityMapBounds;