diff options
-rw-r--r-- | sql/updates/world/master/2017_04_01_00_world.sql | 7 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_warlock.cpp | 87 |
2 files changed, 51 insertions, 43 deletions
diff --git a/sql/updates/world/master/2017_04_01_00_world.sql b/sql/updates/world/master/2017_04_01_00_world.sql new file mode 100644 index 00000000000..33b85a3f393 --- /dev/null +++ b/sql/updates/world/master/2017_04_01_00_world.sql @@ -0,0 +1,7 @@ +DELETE FROM `spell_areatrigger` WHERE `SpellMiscId`=5420 AND `AreaTriggerId`=10133; +INSERT INTO `spell_areatrigger` (`SpellMiscId`,`AreaTriggerId`,`MoveCurveId`,`ScaleCurveId`,`MorphCurveId`,`FacingCurveId`,`DecalPropertiesId`,`TimeToTarget`,`TimeToTargetScale`,`VerifiedBuild`) VALUES +(5420,10133,0,0,0,0,0,0,7177,23420); -- SpellId : 5740 + +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_warl_rain_of_fire'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(5740,'spell_warl_rain_of_fire'); diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index 6c71e07e7e2..345ace43ad8 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -26,10 +26,10 @@ #include "SpellScript.h" #include "SpellAuraEffects.h" #include "SpellAuras.h" +#include "AreaTriggerTemplate.h" enum WarlockSpells { - SPELL_WARLOCK_AFTERMATH_STUN = 85387, SPELL_WARLOCK_BANE_OF_DOOM_EFFECT = 18662, SPELL_WARLOCK_CREATE_HEALTHSTONE = 23517, SPELL_WARLOCK_CURSE_OF_DOOM_EFFECT = 18662, @@ -66,7 +66,8 @@ enum WarlockSpells SPELL_WARLOCK_LIFE_TAP_ENERGIZE_2 = 32553, SPELL_WARLOCK_NETHER_WARD = 91711, SPELL_WARLOCK_NETHER_TALENT = 91713, - SPELL_WARLOCK_RAIN_OF_FIRE = 42223, + SPELL_WARLOCK_RAIN_OF_FIRE = 5740, + SPELL_WARLOCK_RAIN_OF_FIRE_DAMAGE = 42223, SPELL_WARLOCK_SHADOW_TRANCE = 17941, SPELL_WARLOCK_SIPHON_LIFE_HEAL = 63106, SPELL_WARLOCK_SHADOW_WARD = 6229, @@ -91,46 +92,6 @@ enum MiscSpells SPELL_PRIEST_SHADOW_WORD_DEATH = 32409 }; -// -85113 - Aftermath -class spell_warl_aftermath : public SpellScriptLoader -{ - public: - spell_warl_aftermath() : SpellScriptLoader("spell_warl_aftermath") { } - - class spell_warl_aftermath_AuraScript : public AuraScript - { - PrepareAuraScript(spell_warl_aftermath_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_AFTERMATH_STUN)) - return false; - return true; - } - - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) - { - if (eventInfo.GetDamageInfo()->GetSpellInfo()->Id == SPELL_WARLOCK_RAIN_OF_FIRE) - { - PreventDefaultAction(); - - if (eventInfo.GetProcTarget() && roll_chance_i(aurEff->GetAmount())) - GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_WARLOCK_AFTERMATH_STUN, true, NULL, aurEff); - } - } - - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_warl_aftermath_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); - } - }; - - AuraScript* GetAuraScript() const override - { - return new spell_warl_aftermath_AuraScript(); - } -}; - // 710 - Banish class spell_warl_banish : public SpellScriptLoader { @@ -1438,9 +1399,48 @@ class spell_warl_unstable_affliction : public SpellScriptLoader } }; +// 5740 - Rain of Fire +/// Updated 7.1.5 +class spell_warl_rain_of_fire : public SpellScriptLoader +{ +public: + spell_warl_rain_of_fire() : SpellScriptLoader("spell_warl_rain_of_fire") { } + + class spell_warl_rain_of_fire_AuraScript : public AuraScript + { + PrepareAuraScript(spell_warl_rain_of_fire_AuraScript); + + void HandleDummyTick(AuraEffect const* /*aurEff*/) + { + std::vector<AreaTrigger*> rainOfFireAreaTriggers = GetTarget()->GetAreaTriggers(SPELL_WARLOCK_RAIN_OF_FIRE); + GuidUnorderedSet targetsInRainOfFire; + + for (AreaTrigger* rainOfFireAreaTrigger : rainOfFireAreaTriggers) + { + GuidUnorderedSet const& insideTargets = rainOfFireAreaTrigger->GetInsideUnits(); + targetsInRainOfFire.insert(insideTargets.begin(), insideTargets.end()); + } + + for (ObjectGuid insideTargetGuid : targetsInRainOfFire) + if (Unit* insideTarget = ObjectAccessor::GetUnit(*GetTarget(), insideTargetGuid)) + if (!GetTarget()->IsFriendlyTo(insideTarget)) + GetTarget()->CastSpell(insideTarget, SPELL_WARLOCK_RAIN_OF_FIRE_DAMAGE, true); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_warl_rain_of_fire_AuraScript::HandleDummyTick, EFFECT_3, SPELL_AURA_PERIODIC_DUMMY); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_warl_rain_of_fire_AuraScript(); + } +}; + void AddSC_warlock_spell_scripts() { - new spell_warl_aftermath(); new spell_warl_bane_of_doom(); new spell_warl_banish(); new spell_warl_conflagrate(); @@ -1471,4 +1471,5 @@ void AddSC_warlock_spell_scripts() new spell_warl_soul_swap_override(); new spell_warl_soulshatter(); new spell_warl_unstable_affliction(); + new spell_warl_rain_of_fire(); } |