From fd030069f79adeb420564386f48198e50e4d37f8 Mon Sep 17 00:00:00 2001 From: Wyrserth <43747507+Wyrserth@users.noreply.github.com> Date: Fri, 17 May 2019 12:08:20 +0200 Subject: Core/Spell: add proper cooldowns to some spells used by vehicles (#23260) * Core/Spell: add proper cooldowns to some spells used by vehicles, thanks to jackpoz and sirikfoll. * Add Wing Buffet and Stampy's Stompy-Stomp. * Add Tag Greater Felfire Diemetradon and Touch of Darkness. * Rename 9999_99_99_99_world.sql to 2019_05_17_00_world.sql (cherry picked from commit 4d04344b414adc965bd2760d3f30338bcce70431) --- src/server/game/Spells/SpellMgr.cpp | 49 +++++++++++++++++++++++++++++ src/server/scripts/Spells/spell_generic.cpp | 26 +++++++++++++++ 2 files changed, 75 insertions(+) (limited to 'src') 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); -- cgit v1.2.3