aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeader <keader.android@gmail.com>2019-07-24 08:31:34 -0300
committerGitHub <noreply@github.com>2019-07-24 08:31:34 -0300
commit4c2f7df4f39cd98eae21bc64ebac59e3d2eea577 (patch)
tree7a3bd80bea6bb037ad4c9f4e5920321a9459d578
parent8116c3cb663e880efb9ba80180c3f2b991661d94 (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.sql11
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp9
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);
}