diff options
-rw-r--r-- | sql/updates/world/2014_01_29_01_world_spell_script_names_434.sql | 4 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_hunter.cpp | 58 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_mage.cpp | 56 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_shaman.cpp | 16 |
4 files changed, 127 insertions, 7 deletions
diff --git a/sql/updates/world/2014_01_29_01_world_spell_script_names_434.sql b/sql/updates/world/2014_01_29_01_world_spell_script_names_434.sql new file mode 100644 index 00000000000..7fe4b70bc38 --- /dev/null +++ b/sql/updates/world/2014_01_29_01_world_spell_script_names_434.sql @@ -0,0 +1,4 @@ +DELETE FROM `spell_script_names` WHERE `spell_id` IN (90355,80353); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(90355,'spell_hun_ancient_hysteria'), +(80353,'spell_mage_time_warp'); diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index b1f8b536c98..c924b460cc0 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -37,6 +37,7 @@ enum HunterSpells SPELL_HUNTER_FIRE = 82926, SPELL_HUNTER_GENERIC_ENERGIZE_FOCUS = 91954, SPELL_HUNTER_IMPROVED_MEND_PET = 24406, + SPELL_HUNTER_INSANITY = 95809, SPELL_HUNTER_INVIGORATION_TRIGGERED = 53398, SPELL_HUNTER_LOCK_AND_LOAD = 56453, SPELL_HUNTER_MASTERS_CALL_TRIGGERED = 62305, @@ -52,8 +53,62 @@ enum HunterSpells SPELL_HUNTER_SNIPER_TRAINING_R1 = 53302, SPELL_HUNTER_SNIPER_TRAINING_BUFF_R1 = 64418, SPELL_HUNTER_STEADY_SHOT_FOCUS = 77443, - SPELL_HUNTER_THRILL_OF_THE_HUNT = 34720, + SPELL_HUNTER_THRILL_OF_THE_HUNT = 34720 +}; + +enum MiscSpells +{ SPELL_DRAENEI_GIFT_OF_THE_NAARU = 59543, + SPELL_MAGE_TEMPORAL_DISPLACEMENT = 80354, + SPELL_SHAMAN_EXHAUSTION = 57723, + SPELL_SHAMAN_SATED = 57724 +}; + +// 90355 - Ancient Hysteria +class spell_hun_ancient_hysteria : public SpellScriptLoader +{ + public: + spell_hun_ancient_hysteria() : SpellScriptLoader("spell_hun_ancient_hysteria") { } + + class spell_hun_ancient_hysteria_SpellScript : public SpellScript + { + PrepareSpellScript(spell_hun_ancient_hysteria_SpellScript); + + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + { + if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_INSANITY) + || !sSpellMgr->GetSpellInfo(SPELL_MAGE_TEMPORAL_DISPLACEMENT) + || !sSpellMgr->GetSpellInfo(SPELL_SHAMAN_EXHAUSTION) + || !sSpellMgr->GetSpellInfo(SPELL_SHAMAN_SATED)) + return false; + return true; + } + + void RemoveInvalidTargets(std::list<WorldObject*>& targets) + { + targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_HUNTER_INSANITY)); + targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_MAGE_TEMPORAL_DISPLACEMENT)); + targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_SHAMAN_EXHAUSTION)); + targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_SHAMAN_SATED)); + } + + void ApplyDebuff() + { + if (Unit* target = GetHitUnit()) + target->CastSpell(target, SPELL_HUNTER_INSANITY, true); + } + + void Register() OVERRIDE + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_hun_ancient_hysteria_SpellScript::RemoveInvalidTargets, EFFECT_ALL, TARGET_UNIT_CASTER_AREA_RAID); + AfterHit += SpellHitFn(spell_hun_ancient_hysteria_SpellScript::ApplyDebuff); + } + }; + + SpellScript* GetSpellScript() const OVERRIDE + { + return new spell_hun_ancient_hysteria_SpellScript(); + } }; // 53209 - Chimera Shot @@ -1027,6 +1082,7 @@ class spell_hun_tnt : public SpellScriptLoader void AddSC_hunter_spell_scripts() { + new spell_hun_ancient_hysteria(); new spell_hun_chimera_shot(); new spell_hun_cobra_shot(); new spell_hun_disengage(); diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index 83f594fd7b1..76b177b8018 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -81,7 +81,8 @@ enum MageSpells SPELL_MAGE_RING_OF_FROST_FREEZE = 82691, SPELL_MAGE_RING_OF_FROST_DUMMY = 91264, - SPELL_MAGE_FINGERS_OF_FROST = 44544 + SPELL_MAGE_FINGERS_OF_FROST = 44544, + SPELL_MAGE_TEMPORAL_DISPLACEMENT = 80354, }; enum MageIcons @@ -95,7 +96,10 @@ enum MageIcons enum MiscSpells { - SPELL_PRIEST_SHADOW_WORD_DEATH = 32409 + SPELL_HUNTER_INSANITY = 95809, + SPELL_PRIEST_SHADOW_WORD_DEATH = 32409, + SPELL_SHAMAN_EXHAUSTION = 57723, + SPELL_SHAMAN_SATED = 57724 }; // -31571 - Arcane Potency @@ -1349,6 +1353,53 @@ class spell_mage_ring_of_frost_freeze : public SpellScriptLoader } }; +// 80353 - Time Warp +class spell_mage_time_warp : public SpellScriptLoader +{ + public: + spell_mage_time_warp() : SpellScriptLoader("spell_mage_time_warp") { } + + class spell_mage_time_warp_SpellScript : public SpellScript + { + PrepareSpellScript(spell_mage_time_warp_SpellScript); + + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + { + if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_TEMPORAL_DISPLACEMENT) + || !sSpellMgr->GetSpellInfo(SPELL_HUNTER_INSANITY) + || !sSpellMgr->GetSpellInfo(SPELL_SHAMAN_EXHAUSTION) + || !sSpellMgr->GetSpellInfo(SPELL_SHAMAN_SATED)) + return false; + return true; + } + + void RemoveInvalidTargets(std::list<WorldObject*>& targets) + { + targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_MAGE_TEMPORAL_DISPLACEMENT)); + targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_HUNTER_INSANITY)); + targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_SHAMAN_EXHAUSTION)); + targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_SHAMAN_SATED)); + } + + void ApplyDebuff() + { + if (Unit* target = GetHitUnit()) + target->CastSpell(target, SPELL_MAGE_TEMPORAL_DISPLACEMENT, true); + } + + void Register() OVERRIDE + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mage_time_warp_SpellScript::RemoveInvalidTargets, EFFECT_ALL, TARGET_UNIT_CASTER_AREA_RAID); + AfterHit += SpellHitFn(spell_mage_time_warp_SpellScript::ApplyDebuff); + } + }; + + SpellScript* GetSpellScript() const OVERRIDE + { + return new spell_mage_time_warp_SpellScript(); + } +}; + // 33395 Water Elemental's Freeze /// Updated 4.3.4 class spell_mage_water_elemental_freeze : public SpellScriptLoader @@ -1432,5 +1483,6 @@ void AddSC_mage_spell_scripts() new spell_mage_replenish_mana(); new spell_mage_ring_of_frost(); new spell_mage_ring_of_frost_freeze(); + new spell_mage_time_warp(); new spell_mage_water_elemental_freeze(); } diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index c3ea8ca2d62..3dbda3489f9 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -30,8 +30,6 @@ enum ShamanSpells { - SPELL_HUNTER_INSANITY = 95809, - SPELL_MAGE_TEMPORAL_DISPLACEMENT = 80354, SPELL_SHAMAN_ANCESTRAL_AWAKENING = 52759, SPELL_SHAMAN_ANCESTRAL_AWAKENING_PROC = 52752, SPELL_SHAMAN_BIND_SIGHT = 6277, @@ -71,6 +69,12 @@ enum ShamanSpellIcons SHAMAN_ICON_ID_SHAMAN_LAVA_FLOW = 3087 }; +enum MiscSpells +{ + SPELL_HUNTER_INSANITY = 95809, + SPELL_MAGE_TEMPORAL_DISPLACEMENT = 80354 +}; + // -51556 - Ancestral Awakening class spell_sha_ancestral_awakening : public SpellScriptLoader { @@ -169,7 +173,9 @@ class spell_sha_bloodlust : public SpellScriptLoader bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE { - if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_SATED)) + if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_SATED) + || !sSpellMgr->GetSpellInfo(SPELL_HUNTER_INSANITY) + || !sSpellMgr->GetSpellInfo(SPELL_MAGE_TEMPORAL_DISPLACEMENT)) return false; return true; } @@ -692,7 +698,9 @@ class spell_sha_heroism : public SpellScriptLoader bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE { - if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_EXHAUSTION)) + if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_EXHAUSTION) + || !sSpellMgr->GetSpellInfo(SPELL_HUNTER_INSANITY) + || !sSpellMgr->GetSpellInfo(SPELL_MAGE_TEMPORAL_DISPLACEMENT)) return false; return true; } |