aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Spells/SpellMgr.cpp49
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp26
2 files changed, 75 insertions, 0 deletions
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index 98b0d414f95..42108d396c6 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -3924,6 +3924,55 @@ void SpellMgr::LoadSpellInfoCorrections()
});
});
+ // Tag Greater Felfire Diemetradon
+ ApplySpellFix({ 37851 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RecoveryTime = 3000;
+ });
+
+ // Jormungar Strike
+ ApplySpellFix({ 56513 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RecoveryTime = 2000;
+ });
+
+ ApplySpellFix({
+ 54997, // Cast Net (tooltip says 10s but sniffs say 6s)
+ 56524 // Acid Breath
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RecoveryTime = 6000;
+ });
+
+ ApplySpellFix({
+ 47911, // EMP
+ 48620, // Wing Buffet
+ 51752 // Stampy's Stompy-Stomp
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RecoveryTime = 10000;
+ });
+
+ ApplySpellFix({
+ 37727, // Touch of Darkness
+ 54996 // Ice Slick (tooltip says 20s but sniffs say 12s)
+ }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RecoveryTime = 12000;
+ });
+
+ // Signal Helmet to Attack
+ ApplySpellFix({ 51748 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RecoveryTime = 15000;
+ });
+
+ // Charge
+ ApplySpellFix({ 51756 }, [](SpellInfo* spellInfo)
+ {
+ spellInfo->RecoveryTime = 20000;
+ });
+
//
// VIOLET HOLD SPELLS
//
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 4d4d760fd68..8195b315a57 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -40,6 +40,7 @@
#include "SpellAuraEffects.h"
#include "SpellHistory.h"
#include "SpellMgr.h"
+#include "SpellPackets.h"
#include "SpellScript.h"
#include "Vehicle.h"
@@ -4182,6 +4183,30 @@ class spell_freezing_circle : public SpellScript
}
};
+// Used for some spells cast by vehicles or charmed creatures that do not send a cooldown event on their own
+class spell_gen_charmed_unit_spell_cooldown : public SpellScript
+{
+ PrepareSpellScript(spell_gen_charmed_unit_spell_cooldown);
+
+ void HandleCast()
+ {
+ Unit* caster = GetCaster();
+ if (Player* owner = caster->GetCharmerOrOwnerPlayerOrPlayerItself())
+ {
+ WorldPackets::Spells::SpellCooldown spellCooldown;
+ spellCooldown.Caster = owner->GetGUID();
+ spellCooldown.Flags = SPELL_COOLDOWN_FLAG_NONE;
+ spellCooldown.SpellCooldowns.emplace_back(GetSpellInfo()->Id, GetSpellInfo()->RecoveryTime);
+ owner->SendDirectMessage(spellCooldown.Write());
+ }
+ }
+
+ void Register() override
+ {
+ OnCast += SpellCastFn(spell_gen_charmed_unit_spell_cooldown::HandleCast);
+ }
+};
+
// 169869 - Transformation Sickness
class spell_gen_decimatus_transformation_sickness : public SpellScript
{
@@ -4551,6 +4576,7 @@ void AddSC_generic_spell_scripts()
RegisterAuraScript(spell_corrupting_plague_aura);
RegisterAuraScript(spell_gen_vehicle_control_link);
RegisterSpellScript(spell_freezing_circle);
+ RegisterSpellScript(spell_gen_charmed_unit_spell_cooldown);
RegisterSpellScript(spell_gen_decimatus_transformation_sickness);
RegisterSpellScript(spell_gen_anetheron_summon_towering_infernal);
RegisterSpellAndAuraScriptPair(spell_gen_mark_of_kazrogal_hellfire, spell_gen_mark_of_kazrogal_hellfire_aura);