aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTraesh <Traesh@users.noreply.github.com>2017-04-01 21:44:03 +0200
committerShauren <shauren.trinity@gmail.com>2017-04-01 21:44:03 +0200
commit8ae2374765b3b55d6402c2632faf55d166f8903c (patch)
tree539bd54910172e831346dea080a102d5a8a16a54
parentfae7ce4930a27664dfa06fe3e0ae0e9ca2215672 (diff)
Scripts/Spells: Warlock Rain of Fire (#19345)
-rw-r--r--sql/updates/world/master/2017_04_01_00_world.sql7
-rw-r--r--src/server/scripts/Spells/spell_warlock.cpp87
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();
}