diff options
author | Keader <keader.android@gmail.com> | 2019-07-24 08:31:34 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-24 08:31:34 -0300 |
commit | 4c2f7df4f39cd98eae21bc64ebac59e3d2eea577 (patch) | |
tree | 7a3bd80bea6bb037ad4c9f4e5920321a9459d578 | |
parent | 8116c3cb663e880efb9ba80180c3f2b991661d94 (diff) |
Core/Spells: Added spellgroup support to HandleModCastingSpeed (#23592)
And fixed stack of Power Infusion, Bloodlust, Icy veins and Heroism.
-rw-r--r-- | sql/updates/world/3.3.5/2019_07_24_00_world.sql | 11 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 9 |
2 files changed, 19 insertions, 1 deletions
diff --git a/sql/updates/world/3.3.5/2019_07_24_00_world.sql b/sql/updates/world/3.3.5/2019_07_24_00_world.sql new file mode 100644 index 00000000000..97d47fd919c --- /dev/null +++ b/sql/updates/world/3.3.5/2019_07_24_00_world.sql @@ -0,0 +1,11 @@ +-- Heroism/Bloodlust should not stack with Power Infusion +DELETE FROM `spell_group` WHERE `id`=1122; +INSERT INTO `spell_group` (`id`, `spell_id`) VALUES +(1122,32182), +(1122,2825), +(1122,10060), +(1122,12472); + +DELETE FROM `spell_group_stack_rules` WHERE `group_id`=1122; +INSERT INTO `spell_group_stack_rules` (`group_id`, `stack_rule`) VALUES +(1122,4); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index ccfc442725f..d643235ed26 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -3168,7 +3168,7 @@ void AuraEffect::HandleAuraModSchoolImmunity(AuraApplication const* aurApp, uint target->GetThreatManager().EvaluateSuppressed(); } else - { + { // do not remove unit flag if there are more than this auraEffect of that kind on unit if (target->HasAuraType(GetAuraType())) return; @@ -3901,6 +3901,13 @@ void AuraEffect::HandleModCastingSpeed(AuraApplication const* aurApp, uint8 mode return; } + int32 spellGroupVal = target->GetHighestExclusiveSameEffectSpellGroupValue(this, GetAuraType()); + if (abs(spellGroupVal) >= abs(GetAmount())) + return; + + if (spellGroupVal) + target->ApplyCastTimePercentMod(float(spellGroupVal), !apply); + target->ApplyCastTimePercentMod((float)GetAmount(), apply); } |