diff options
-rw-r--r-- | sql/updates/world/6.x/2016_05_01_00_world.sql | 36 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_shaman.cpp | 765 |
2 files changed, 323 insertions, 478 deletions
diff --git a/sql/updates/world/6.x/2016_05_01_00_world.sql b/sql/updates/world/6.x/2016_05_01_00_world.sql new file mode 100644 index 00000000000..b5af5b75596 --- /dev/null +++ b/sql/updates/world/6.x/2016_05_01_00_world.sql @@ -0,0 +1,36 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_ancestral_awakening'; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_ancestral_awakening_proc'; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_earthbind_totem'; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_earthen_power'; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_feedback'; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_flame_shock'; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_mana_tide_totem'; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_rolling_thunder'; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_telluric_currents'; + +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_flametongue'; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_fulmination'; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_healing_stream_totem'; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_healing_stream_totem_heal'; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_lava_lash_spread_flame_shock'; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_lava_surge'; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_nature_guardian'; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_tidal_waves'; +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_windfury'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(10400,'spell_sha_flametongue'), +(88766,'spell_sha_fulmination'), +(5394,'spell_sha_healing_stream_totem'), +(52042,'spell_sha_healing_stream_totem_heal'), +(105792,'spell_sha_lava_lash_spread_flame_shock'), +(77756,'spell_sha_lava_surge'), +(30884,'spell_sha_nature_guardian'), +(51564,'spell_sha_tidal_waves'), +(33757,'spell_sha_windfury'); + +DELETE FROM `spell_proc_event` WHERE `entry` IN (77756,88766,33757,10400); +INSERT INTO `spell_proc_event` (`entry`,`procFlags`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`) VALUES +(77756,0x00040000,0x00000000,0x00000000,0x00000000,0x00000000), +(88766,0x00000000,0x00000003,0x00001000,0x00000000,0x00000004), +(33757,0x00400000,0x00000000,0x00000000,0x00000000,0x00000000), +(10400,0x00800000,0x00000000,0x00000000,0x00000000,0x00000000); diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index fcbea19661d..ad7adf38821 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -31,139 +31,44 @@ enum ShamanSpells { - SPELL_SHAMAN_ANCESTRAL_AWAKENING = 52759, - SPELL_SHAMAN_ANCESTRAL_AWAKENING_PROC = 52752, - SPELL_SHAMAN_BIND_SIGHT = 6277, SPELL_SHAMAN_EARTH_SHIELD_HEAL = 379, SPELL_SHAMAN_ELEMENTAL_MASTERY = 16166, SPELL_SHAMAN_EXHAUSTION = 57723, - SPELL_SHAMAN_FIRE_NOVA_TRIGGERED_R1 = 8349, + SPELL_SHAMAN_FIRE_NOVA_TRIGGERED = 8349, SPELL_SHAMAN_FLAME_SHOCK = 8050, - SPELL_SHAMAN_FOCUSED_INSIGHT = 77800, - SPELL_SHAMAN_GLYPH_OF_EARTH_SHIELD = 63279, + SPELL_SHAMAN_FLAMETONGUE_ATTACK = 10444, SPELL_SHAMAN_GLYPH_OF_HEALING_STREAM_TOTEM = 55456, + SPELL_SHAMAN_GLYPH_OF_HEALING_STREAM_TOTEM_TRIGGERED = 119523, SPELL_SHAMAN_GLYPH_OF_HEALING_WAVE = 55533, - SPELL_SHAMAN_GLYPH_OF_MANA_TIDE = 55441, + SPELL_SHAMAN_GLYPH_OF_LAVA_LASH = 55444, SPELL_SHAMAN_GLYPH_OF_THUNDERSTORM = 62132, - SPELL_SHAMAN_LAVA_BURST = 51505, - SPELL_SHAMAN_LAVA_FLOWS_R1 = 51480, - SPELL_SHAMAN_LAVA_FLOWS_TRIGGERED_R1 = 65264, - SPELL_SHAMAN_LAVA_SURGE = 77762, + SPELL_SHAMAN_HEALING_STREAM_DUMMY = 98856, + SPELL_SHAMAN_HIGH_TIDE = 157154, + SPELL_SHAMAN_IMPROVED_LIGHTNING_SHIELD = 157774, SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD = 23552, SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD_DAMAGE = 27635, SPELL_SHAMAN_ITEM_MANA_SURGE = 23571, + SPELL_SHAMAN_LAVA_BURST = 51505, + SPELL_SHAMAN_LAVA_LASH_SPREAD_FLAME_SHOCK = 105792, + SPELL_SHAMAN_LAVA_SURGE = 77762, SPELL_SHAMAN_LIGHTNING_SHIELD = 324, SPELL_SHAMAN_NATURE_GUARDIAN = 31616, + SPELL_SHAMAN_RIPTIDE = 61295, + SPELL_SHAMAN_RUSHING_STREAMS = 147074, SPELL_SHAMAN_SATED = 57724, - SPELL_SHAMAN_STORM_EARTH_AND_FIRE = 51483, - SPELL_SHAMAN_TELLURIC_CURRENTS = 82987, - SPELL_SHAMAN_TOTEM_EARTHBIND_EARTHGRAB = 64695, - SPELL_SHAMAN_TOTEM_EARTHBIND_TOTEM = 6474, - SPELL_SHAMAN_TOTEM_EARTHEN_POWER = 59566, SPELL_SHAMAN_TOTEM_HEALING_STREAM_HEAL = 52042, SPELL_SHAMAN_TIDAL_WAVES = 53390, - SPELL_PET_NETHERWINDS_FATIGUED = 160455 -}; - -enum ShamanSpellIcons -{ - SHAMAN_ICON_ID_SOOTHING_RAIN = 2011, - SHAMAN_ICON_ID_SHAMAN_LAVA_FLOW = 3087 + SPELL_SHAMAN_WINDFURY_ATTACK = 25504 }; enum MiscSpells { SPELL_HUNTER_INSANITY = 95809, - SPELL_MAGE_TEMPORAL_DISPLACEMENT = 80354 -}; - -// -51556 - Ancestral Awakening -class spell_sha_ancestral_awakening : public SpellScriptLoader -{ - public: - spell_sha_ancestral_awakening() : SpellScriptLoader("spell_sha_ancestral_awakening") { } - - class spell_sha_ancestral_awakening_AuraScript : public AuraScript - { - PrepareAuraScript(spell_sha_ancestral_awakening_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_TIDAL_WAVES)) - return false; - return true; - } - - void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); - int32 heal = int32(CalculatePct(eventInfo.GetHealInfo()->GetHeal(), aurEff->GetAmount())); - - GetTarget()->CastCustomSpell(SPELL_SHAMAN_ANCESTRAL_AWAKENING, SPELLVALUE_BASE_POINT0, heal, (Unit*)NULL, true, NULL, aurEff); - } - - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_sha_ancestral_awakening_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; - - AuraScript* GetAuraScript() const override - { - return new spell_sha_ancestral_awakening_AuraScript(); - } -}; - -// 52759 - Ancestral Awakening -/// Updated 4.3.4 -class spell_sha_ancestral_awakening_proc : public SpellScriptLoader -{ - public: - spell_sha_ancestral_awakening_proc() : SpellScriptLoader("spell_sha_ancestral_awakening_proc") { } - - class spell_sha_ancestral_awakening_proc_SpellScript : public SpellScript - { - PrepareSpellScript(spell_sha_ancestral_awakening_proc_SpellScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ANCESTRAL_AWAKENING_PROC)) - return false; - return true; - } - - void FilterTargets(std::list<WorldObject*>& targets) - { - if (targets.size() < 2) - return; - - targets.sort(Trinity::HealthPctOrderPred()); - - WorldObject* target = targets.front(); - targets.clear(); - targets.push_back(target); - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - GetCaster()->CastCustomSpell(SPELL_SHAMAN_ANCESTRAL_AWAKENING_PROC, SPELLVALUE_BASE_POINT0, GetEffectValue(), GetHitUnit(), true); - } - - void Register() override - { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_ancestral_awakening_proc_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_RAID); - OnEffectHitTarget += SpellEffectFn(spell_sha_ancestral_awakening_proc_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } - }; - - SpellScript* GetSpellScript() const override - { - return new spell_sha_ancestral_awakening_proc_SpellScript(); - } + SPELL_MAGE_TEMPORAL_DISPLACEMENT = 80354, + SPELL_PET_NETHERWINDS_FATIGUED = 160455 }; // 2825 - Bloodlust -/// Updated 4.3.4 class spell_sha_bloodlust : public SpellScriptLoader { public: @@ -200,7 +105,6 @@ class spell_sha_bloodlust : public SpellScriptLoader { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_bloodlust_SpellScript::RemoveInvalidTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_RAID); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_bloodlust_SpellScript::RemoveInvalidTargets, EFFECT_1, TARGET_UNIT_CASTER_AREA_RAID); - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_bloodlust_SpellScript::RemoveInvalidTargets, EFFECT_2, TARGET_UNIT_CASTER_AREA_RAID); AfterHit += SpellHitFn(spell_sha_bloodlust_SpellScript::ApplyDebuff); } }; @@ -212,7 +116,6 @@ class spell_sha_bloodlust : public SpellScriptLoader }; // 1064 - Chain Heal -/// Updated 4.3.4 class spell_sha_chain_heal : public SpellScriptLoader { public: @@ -222,45 +125,58 @@ class spell_sha_chain_heal : public SpellScriptLoader { PrepareSpellScript(spell_sha_chain_heal_SpellScript); - public: - spell_sha_chain_heal_SpellScript() + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_HIGH_TIDE)) + return false; + return true; + } + + void CatchInitialTarget(WorldObject*& target) { - firstHeal = true; - riptide = false; - amount = 0; + _primaryTarget = target; } - private: - void HandleHeal(SpellEffIndex /*effIndex*/) + void SelectAdditionalTargets(std::list<WorldObject*>& targets) { - if (firstHeal) - { - // Check if the target has Riptide - if (AuraEffect* aurEff = GetHitUnit()->GetAuraEffect(SPELL_AURA_PERIODIC_HEAL, SPELLFAMILY_SHAMAN, flag128(0, 0, 0x10), GetCaster()->GetGUID())) - { - riptide = true; - amount = aurEff->GetSpellInfo()->GetEffect(DIFFICULTY_NONE, EFFECT_2)->CalcValue(); - // Consume it - GetHitUnit()->RemoveAura(aurEff->GetBase()); - } - firstHeal = false; - } - // Riptide increases the Chain Heal effect by 25% - if (riptide) - { - uint32 bonus = CalculatePct(GetHitHeal(), amount); - SetHitHeal(GetHitHeal() + bonus); - } + Unit* caster = GetCaster(); + AuraEffect const* highTide = caster->GetAuraEffect(SPELL_SHAMAN_HIGH_TIDE, EFFECT_1); + if (!highTide) + return; + + static float const range = 25.0f; + SpellImplicitTargetInfo targetInfo(TARGET_UNIT_TARGET_CHAINHEAL_ALLY); + ConditionContainer* conditions = GetSpellInfo()->GetEffect(EFFECT_0)->ImplicitTargetConditions; + + uint32 containerTypeMask = GetSpell()->GetSearcherTypeMask(targetInfo.GetObjectType(), conditions); + if (!containerTypeMask) + return; + + std::list<WorldObject*> chainTargets; + Trinity::WorldObjectSpellAreaTargetCheck check(range, _primaryTarget, caster, caster, GetSpellInfo(), targetInfo.GetCheckType(), conditions); + Trinity::WorldObjectListSearcher<Trinity::WorldObjectSpellAreaTargetCheck> searcher(caster, chainTargets, check, containerTypeMask); + caster->GetMap()->VisitAll(_primaryTarget->GetPositionX(), _primaryTarget->GetPositionY(), range, searcher); + + chainTargets.remove_if(Trinity::UnitAuraCheck(false, SPELL_SHAMAN_RIPTIDE, caster->GetGUID())); + if (chainTargets.empty()) + return; + + chainTargets.sort(); + targets.sort(); + + std::list<WorldObject*> extraTargets; + std::set_difference(chainTargets.begin(), chainTargets.end(), targets.begin(), targets.end(), std::back_inserter(extraTargets)); + Trinity::Containers::RandomResizeList(extraTargets, uint32(highTide->GetAmount())); + targets.splice(targets.end(), extraTargets); } + WorldObject* _primaryTarget = nullptr; + void Register() override { - OnEffectHitTarget += SpellEffectFn(spell_sha_chain_heal_SpellScript::HandleHeal, EFFECT_0, SPELL_EFFECT_HEAL); + OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_sha_chain_heal_SpellScript::CatchInitialTarget, EFFECT_0, TARGET_UNIT_TARGET_CHAINHEAL_ALLY); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_chain_heal_SpellScript::SelectAdditionalTargets, EFFECT_0, TARGET_UNIT_TARGET_CHAINHEAL_ALLY); } - - bool firstHeal; - bool riptide; - uint32 amount; }; SpellScript* GetSpellScript() const override @@ -281,8 +197,7 @@ class spell_sha_earth_shield : public SpellScriptLoader bool Validate(SpellInfo const* /*spellInfo*/) override { - if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_EARTH_SHIELD_HEAL) || - !sSpellMgr->GetSpellInfo(SPELL_SHAMAN_GLYPH_OF_EARTH_SHIELD)) + if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_EARTH_SHIELD_HEAL)) return false; return true; } @@ -300,12 +215,6 @@ class spell_sha_earth_shield : public SpellScriptLoader // (100 / ((-1) * modifier)) * 100 = (-1) * 100 * 100 / modifier = -10000 / modifier if (int32 modifier = GetUnitOwner()->GetMaxNegativeAuraModifier(SPELL_AURA_MOD_HEALING_PCT)) ApplyPct(amount, -10000.0f / float(modifier)); - - // Glyph of Earth Shield - //! WORKAROUND - //! this glyph is a proc - if (AuraEffect* glyph = caster->GetAuraEffect(SPELL_SHAMAN_GLYPH_OF_EARTH_SHIELD, EFFECT_0)) - AddPct(amount, glyph->GetAmount()); } } @@ -343,224 +252,118 @@ class spell_sha_earth_shield : public SpellScriptLoader } }; -// 6474 - Earthbind Totem - Fix Talent:Earthen Power, Earth's Grasp -/// Updated 4.3.4 -class spell_sha_earthbind_totem : public SpellScriptLoader +// 1535 Fire Nova +class spell_sha_fire_nova : public SpellScriptLoader { public: - spell_sha_earthbind_totem() : SpellScriptLoader("spell_sha_earthbind_totem") { } + spell_sha_fire_nova() : SpellScriptLoader("spell_sha_fire_nova") { } - class spell_sha_earthbind_totem_AuraScript : public AuraScript + class spell_sha_fire_nova_SpellScript : public SpellScript { - PrepareAuraScript(spell_sha_earthbind_totem_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_TOTEM_EARTHBIND_TOTEM) || - !sSpellMgr->GetSpellInfo(SPELL_SHAMAN_TOTEM_EARTHEN_POWER)) - return false; - return true; - } - - void HandleEffectPeriodic(AuraEffect const* /*aurEff*/) - { - if (!GetCaster()) - return; - if (Player* owner = GetCaster()->GetCharmerOrOwnerPlayerOrPlayerItself()) - if (AuraEffect* aur = owner->GetDummyAuraEffect(SPELLFAMILY_SHAMAN, 2289, 0)) - if (roll_chance_i(aur->GetBaseAmount())) - GetTarget()->CastSpell((Unit*)NULL, SPELL_SHAMAN_TOTEM_EARTHEN_POWER, true); - } + PrepareSpellScript(spell_sha_fire_nova_SpellScript); - void Apply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + void HandleDummy(SpellEffIndex /*effIndex*/) { - if (!GetCaster()) - return; - Player* owner = GetCaster()->GetCharmerOrOwnerPlayerOrPlayerItself(); - if (!owner) - return; - // Earth's Grasp - if (AuraEffect* aurEff = owner->GetAuraEffectOfRankedSpell(SPELL_SHAMAN_STORM_EARTH_AND_FIRE, EFFECT_1)) - { - if (roll_chance_i(aurEff->GetAmount())) - GetCaster()->CastSpell(GetCaster(), SPELL_SHAMAN_TOTEM_EARTHBIND_EARTHGRAB, false); - } + if (Unit* target = GetHitUnit()) + if (target->HasAura(SPELL_SHAMAN_FLAME_SHOCK)) + GetCaster()->CastSpell(target, SPELL_SHAMAN_FIRE_NOVA_TRIGGERED, true); } void Register() override { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_sha_earthbind_totem_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); - OnEffectApply += AuraEffectApplyFn(spell_sha_earthbind_totem_AuraScript::Apply, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); + OnEffectHitTarget += SpellEffectFn(spell_sha_fire_nova_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; - AuraScript* GetAuraScript() const override + SpellScript* GetSpellScript() const override { - return new spell_sha_earthbind_totem_AuraScript(); + return new spell_sha_fire_nova_SpellScript(); } }; -class EarthenPowerTargetSelector +// 10400 - Flametongue +class spell_sha_flametongue : public SpellScriptLoader { - public: - EarthenPowerTargetSelector() { } - - bool operator() (WorldObject* target) - { - if (!target->ToUnit()) - return true; +public: + spell_sha_flametongue() : SpellScriptLoader("spell_sha_flametongue") { } - if (!target->ToUnit()->HasAuraWithMechanic(1 << MECHANIC_SNARE)) - return true; + class spell_sha_flametongue_AuraScript : public AuraScript + { + PrepareAuraScript(spell_sha_flametongue_AuraScript); - return false; + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_FLAMETONGUE_ATTACK)) + return false; + return true; } -}; -// 59566 - Earthen Power -class spell_sha_earthen_power : public SpellScriptLoader -{ - public: - spell_sha_earthen_power() : SpellScriptLoader("spell_sha_earthen_power") { } - - class spell_sha_earthen_power_SpellScript : public SpellScript + void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { - PrepareSpellScript(spell_sha_earthen_power_SpellScript); - - void FilterTargets(std::list<WorldObject*>& unitList) - { - unitList.remove_if(EarthenPowerTargetSelector()); - } + PreventDefaultAction(); - void Register() override - { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_earthen_power_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); - } - }; + Unit* attacker = eventInfo.GetActor(); + int32 damage = int32(attacker->GetTotalAttackPowerValue(BASE_ATTACK) * 0.075f / 2600 * attacker->GetAttackTime(BASE_ATTACK)); + attacker->CastCustomSpell(SPELL_SHAMAN_FLAMETONGUE_ATTACK, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetActionTarget(), TRIGGERED_FULL_MASK, nullptr, aurEff); + } - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_sha_earthen_power_SpellScript(); + OnEffectProc += AuraEffectProcFn(spell_sha_flametongue_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY); } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_sha_flametongue_AuraScript(); + } }; -// 86185 Feedback -class spell_sha_feedback : public SpellScriptLoader +// 88766 - Fulmination +class spell_sha_fulmination : public SpellScriptLoader { public: - spell_sha_feedback() : SpellScriptLoader("spell_sha_feedback") { } + spell_sha_fulmination() : SpellScriptLoader("spell_sha_fulmination") { } - class spell_sha_feedback_AuraScript : public AuraScript + class spell_sha_fulmination_AuraScript : public AuraScript { - PrepareAuraScript(spell_sha_feedback_AuraScript); + PrepareAuraScript(spell_sha_fulmination_AuraScript); bool Validate(SpellInfo const* /*spellInfo*/) override { - if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ELEMENTAL_MASTERY)) + if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_LIGHTNING_SHIELD)) return false; return true; } - void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) - { - PreventDefaultAction(); // will prevent default effect execution - if (Player* target = GetTarget()->ToPlayer()) - target->GetSpellHistory()->ModifyCooldown(SPELL_SHAMAN_ELEMENTAL_MASTERY, aurEff->GetBaseAmount()); - } - - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_sha_feedback_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; - - AuraScript* GetAuraScript() const override - { - return new spell_sha_feedback_AuraScript(); - } -}; - -// 1535 Fire Nova -/// Updated 4.3.4 -class spell_sha_fire_nova : public SpellScriptLoader -{ - public: - spell_sha_fire_nova() : SpellScriptLoader("spell_sha_fire_nova") { } - - class spell_sha_fire_nova_SpellScript : public SpellScript - { - PrepareSpellScript(spell_sha_fire_nova_SpellScript); - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - Unit* caster = GetCaster(); - if (Unit* target = GetHitUnit()) - { - if (target->HasAura(SPELL_SHAMAN_FLAME_SHOCK)) - { - caster->CastSpell(target, SPELL_SHAMAN_FIRE_NOVA_TRIGGERED_R1, true); - target->RemoveAurasDueToSpell(SPELL_SHAMAN_FLAME_SHOCK); - } - } - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_sha_fire_nova_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } - }; - - SpellScript* GetSpellScript() const override - { - return new spell_sha_fire_nova_SpellScript(); - } -}; - -// 8050 -Flame Shock -/// Updated 4.3.4 -class spell_sha_flame_shock : public SpellScriptLoader -{ - public: - spell_sha_flame_shock() : SpellScriptLoader("spell_sha_flame_shock") { } - - class spell_sha_flame_shock_AuraScript : public AuraScript - { - PrepareAuraScript(spell_sha_flame_shock_AuraScript); - - bool Validate(SpellInfo const* /*spell*/) override + bool CheckProc(ProcEventInfo& eventInfo) { - if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_LAVA_FLOWS_R1) || - !sSpellMgr->GetSpellInfo(SPELL_SHAMAN_LAVA_FLOWS_TRIGGERED_R1)) + // Lava Burst cannot trigger Fulmination without Improved Lightning Shield + if ((eventInfo.GetSpellInfo()->SpellFamilyFlags[1] & 0x00001000) && !eventInfo.GetActor()->HasAura(SPELL_SHAMAN_IMPROVED_LIGHTNING_SHIELD)) return false; - return true; + + return eventInfo.GetActor()->HasAura(SPELL_SHAMAN_LIGHTNING_SHIELD); } - void HandleDispel(DispelInfo* /*dispelInfo*/) + void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) { - if (Unit* caster = GetCaster()) + if (Aura* aura = eventInfo.GetActor()->GetAura(SPELL_SHAMAN_LIGHTNING_SHIELD)) { - // Lava Flows - if (AuraEffect const* aurEff = caster->GetDummyAuraEffect(SPELLFAMILY_SHAMAN, SHAMAN_ICON_ID_SHAMAN_LAVA_FLOW, EFFECT_0)) - { - if (SpellInfo const* firstRankSpellInfo = sSpellMgr->GetSpellInfo(SPELL_SHAMAN_LAVA_FLOWS_R1)) - if (!aurEff->GetSpellInfo()->IsRankOf(firstRankSpellInfo)) - return; - - int32 basepoints = aurEff->GetAmount(); - caster->CastCustomSpell(caster, SPELL_SHAMAN_LAVA_FLOWS_TRIGGERED_R1, &basepoints, NULL, NULL, true); - } + aura->SetCharges(std::min<uint8>(aura->GetCharges() + 1, uint8(aurEff->GetAmount()))); + aura->RefreshDuration(); } } void Register() override { - AfterDispel += AuraDispelFn(spell_sha_flame_shock_AuraScript::HandleDispel); + DoCheckProc += AuraCheckProcFn(spell_sha_fulmination_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_sha_fulmination_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY); } }; AuraScript* GetAuraScript() const override { - return new spell_sha_flame_shock_AuraScript(); + return new spell_sha_fulmination_AuraScript(); } }; @@ -608,58 +411,99 @@ class spell_sha_glyph_of_healing_wave : public SpellScriptLoader } }; -// 52041 - Healing Stream Totem -/// Updated 4.3.4 +// 5394 - Healing Stream Totem class spell_sha_healing_stream_totem : public SpellScriptLoader { public: spell_sha_healing_stream_totem() : SpellScriptLoader("spell_sha_healing_stream_totem") { } - class spell_sha_healing_stream_totem_SpellScript : public SpellScript + class spell_sha_healing_stream_totem_AuraScript : public AuraScript { - PrepareSpellScript(spell_sha_healing_stream_totem_SpellScript); + PrepareAuraScript(spell_sha_healing_stream_totem_AuraScript); bool Validate(SpellInfo const* /*spellInfo*/) override { return sSpellMgr->GetSpellInfo(SPELL_SHAMAN_TOTEM_HEALING_STREAM_HEAL) != nullptr; } - void HandleDummy(SpellEffIndex effIndex) + void HandleDummy(AuraEffect const* aurEff) { - int32 damage = GetEffectValue(); - SpellInfo const* triggeringSpell = GetTriggeringSpell(); - if (Unit* target = GetHitUnit()) + if (Creature* waterTotem = GetTarget()->GetMap()->GetCreature(GetTarget()->m_SummonSlot[3])) + waterTotem->CastSpell((Unit*)nullptr, SPELL_SHAMAN_TOTEM_HEALING_STREAM_HEAL, TRIGGERED_FULL_MASK, nullptr, aurEff, GetTarget()->GetGUID()); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_sha_healing_stream_totem_AuraScript::HandleDummy, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_sha_healing_stream_totem_AuraScript(); + } +}; + +// 52042 - Healing Stream Totem +class spell_sha_healing_stream_totem_heal : public SpellScriptLoader +{ + public: + spell_sha_healing_stream_totem_heal() : SpellScriptLoader("spell_sha_healing_stream_totem_heal") { } + + class spell_sha_healing_stream_totem_heal_SpellScript : public SpellScript + { + PrepareSpellScript(spell_sha_healing_stream_totem_heal_SpellScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_RUSHING_STREAMS) || + !sSpellMgr->GetSpellInfo(SPELL_SHAMAN_GLYPH_OF_HEALING_STREAM_TOTEM) || + !sSpellMgr->GetSpellInfo(SPELL_SHAMAN_GLYPH_OF_HEALING_STREAM_TOTEM_TRIGGERED) || + !sSpellMgr->GetSpellInfo(SPELL_SHAMAN_HEALING_STREAM_DUMMY)) + return false; + + return true; + } + + void SelectTargets(std::list<WorldObject*>& targets) + { + uint32 targetLimit = 1; + if (GetOriginalCaster()->HasAura(SPELL_SHAMAN_RUSHING_STREAMS)) + targetLimit = 2; + + targets.remove_if([](WorldObject* target) { - if (Unit* owner = GetCaster()->GetOwner()) - { - if (triggeringSpell) - damage = int32(owner->SpellHealingBonusDone(target, triggeringSpell, damage, HEAL, triggeringSpell->GetEffect(target, effIndex))); + return !target->ToUnit() || target->ToUnit()->IsFullHealth(); + }); - // Soothing Rains - if (AuraEffect* dummy = owner->GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_SHAMAN, SHAMAN_ICON_ID_SOOTHING_RAIN, EFFECT_0)) - AddPct(damage, dummy->GetAmount()); + Trinity::Containers::RandomResizeList(targets, targetLimit); - if (triggeringSpell) - damage = int32(target->SpellHealingBonusTaken(owner, triggeringSpell, damage, HEAL, triggeringSpell->GetEffect(target, effIndex))); - } - GetCaster()->CastCustomSpell(target, SPELL_SHAMAN_TOTEM_HEALING_STREAM_HEAL, &damage, 0, 0, true, 0, 0, GetOriginalCaster()->GetGUID()); - } + if (targets.empty()) + targets.push_back(GetOriginalCaster()); } - void Register() override + void HandleEffect(SpellEffIndex /*effIndex*/) + { + if (GetOriginalCaster()->HasAura(SPELL_SHAMAN_GLYPH_OF_HEALING_STREAM_TOTEM)) + GetCaster()->CastSpell(GetHitUnit(), SPELL_SHAMAN_GLYPH_OF_HEALING_STREAM_TOTEM_TRIGGERED, TRIGGERED_FULL_MASK); + + GetCaster()->CastSpell(GetHitUnit(), SPELL_SHAMAN_HEALING_STREAM_DUMMY, TRIGGERED_FULL_MASK); + } + + void Register() { - OnEffectHitTarget += SpellEffectFn(spell_sha_healing_stream_totem_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_healing_stream_totem_heal_SpellScript::SelectTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY); + OnEffectHitTarget += SpellEffectFn(spell_sha_healing_stream_totem_heal_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_HEAL); } }; SpellScript* GetSpellScript() const override { - return new spell_sha_healing_stream_totem_SpellScript(); + return new spell_sha_healing_stream_totem_heal_SpellScript(); } }; // 32182 - Heroism -/// Updated 4.3.4 class spell_sha_heroism : public SpellScriptLoader { public: @@ -696,7 +540,6 @@ class spell_sha_heroism : public SpellScriptLoader { OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_heroism_SpellScript::RemoveInvalidTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_RAID); OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_heroism_SpellScript::RemoveInvalidTargets, EFFECT_1, TARGET_UNIT_CASTER_AREA_RAID); - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_heroism_SpellScript::RemoveInvalidTargets, EFFECT_2, TARGET_UNIT_CASTER_AREA_RAID); AfterHit += SpellHitFn(spell_sha_heroism_SpellScript::ApplyDebuff); } }; @@ -754,7 +597,7 @@ class spell_sha_item_lightning_shield_trigger : public SpellScriptLoader bool Validate(SpellInfo const* /*spellInfo*/) override { - if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ITEM_MANA_SURGE)) + if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_ITEM_LIGHTNING_SHIELD_DAMAGE)) return false; return true; } @@ -856,7 +699,6 @@ class spell_sha_item_t10_elemental_2p_bonus : public SpellScriptLoader }; // 60103 - Lava Lash -/// Updated 4.3.4 class spell_sha_lava_lash : public SpellScriptLoader { public: @@ -873,33 +715,73 @@ class spell_sha_lava_lash : public SpellScriptLoader void HandleDummy(SpellEffIndex /*effIndex*/) { - if (Player* caster = GetCaster()->ToPlayer()) + if (GetCaster()->HasAura(SPELL_SHAMAN_GLYPH_OF_LAVA_LASH)) + return; + + GetCaster()->CastCustomSpell(SPELL_SHAMAN_LAVA_LASH_SPREAD_FLAME_SHOCK, SPELLVALUE_MAX_TARGETS, GetEffectValue(), GetHitUnit(), TRIGGERED_FULL_MASK); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_sha_lava_lash_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_WEAPON_PERCENT_DAMAGE); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_sha_lava_lash_SpellScript(); + } +}; + +// 105792 - Lava Lash +class spell_sha_lava_lash_spread_flame_shock : public SpellScriptLoader +{ + public: + spell_sha_lava_lash_spread_flame_shock() : SpellScriptLoader("spell_sha_lava_lash_spread_flame_shock") { } + + class spell_sha_lava_lash_spread_flame_shock_SpellScript : public SpellScript + { + PrepareSpellScript(spell_sha_lava_lash_spread_flame_shock_SpellScript); + + bool Load() override + { + return GetCaster()->GetTypeId() == TYPEID_PLAYER; + } + + void FilterTargets(std::list<WorldObject*>& targets) + { + targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_SHAMAN_FLAME_SHOCK, GetCaster()->GetGUID())); + } + + void HandleScript(SpellEffIndex /*effIndex*/) + { + if (Unit* mainTarget = GetExplTargetUnit()) { - int32 damage = GetEffectValue(); - int32 hitDamage = GetHitDamage(); - if (caster->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND)) + if (Aura* flameShock = mainTarget->GetAura(SPELL_SHAMAN_FLAME_SHOCK, GetCaster()->GetGUID())) { - // Damage is increased by 25% if your off-hand weapon is enchanted with Flametongue. - if (caster->GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_SHAMAN, flag128(0x200000, 0, 0))) - AddPct(hitDamage, damage); - SetHitDamage(hitDamage); + if (Aura* newAura = GetCaster()->AddAura(SPELL_SHAMAN_FLAME_SHOCK, GetHitUnit())) + { + newAura->SetDuration(flameShock->GetDuration()); + newAura->SetMaxDuration(flameShock->GetDuration()); + } } } } void Register() override { - OnEffectHitTarget += SpellEffectFn(spell_sha_lava_lash_SpellScript::HandleDummy, EFFECT_1, SPELL_EFFECT_DUMMY); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_sha_lava_lash_spread_flame_shock_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ENEMY); + OnEffectHitTarget += SpellEffectFn(spell_sha_lava_lash_spread_flame_shock_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } - }; SpellScript* GetSpellScript() const override { - return new spell_sha_lava_lash_SpellScript(); + return new spell_sha_lava_lash_spread_flame_shock_SpellScript(); } }; +// 77756 - Lava Surge class spell_sha_lava_surge : public SpellScriptLoader { public: @@ -934,6 +816,7 @@ class spell_sha_lava_surge : public SpellScriptLoader } }; +// 77762 - Lava Surge class spell_sha_lava_surge_proc : public SpellScriptLoader { public: @@ -955,16 +838,15 @@ class spell_sha_lava_surge_proc : public SpellScriptLoader return GetCaster()->GetTypeId() == TYPEID_PLAYER; } - void HandleDummy(SpellEffIndex /*effIndex*/) + void ResetCooldown() { - GetCaster()->GetSpellHistory()->ResetCooldown(SPELL_SHAMAN_LAVA_BURST, true); + GetCaster()->GetSpellHistory()->RestoreCharge(sSpellMgr->AssertSpellInfo(SPELL_SHAMAN_LAVA_BURST)->ChargeCategoryEntry); } void Register() override { - OnEffectHitTarget += SpellEffectFn(spell_sha_lava_surge_proc_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + AfterHit += SpellHitFn(spell_sha_lava_surge_proc_SpellScript::ResetCooldown); } - }; SpellScript* GetSpellScript() const override @@ -973,38 +855,7 @@ class spell_sha_lava_surge_proc : public SpellScriptLoader } }; -// 16191 - Mana Tide -/// Updated 4.3.4 -class spell_sha_mana_tide_totem : public SpellScriptLoader -{ - public: - spell_sha_mana_tide_totem() : SpellScriptLoader("spell_sha_mana_tide_totem") { } - - class spell_sha_mana_tide_totem_AuraScript : public AuraScript - { - PrepareAuraScript(spell_sha_mana_tide_totem_AuraScript); - - void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/) - { - ///@TODO: Exclude the "short term" buffs from the stat value - if (Unit* caster = GetCaster()) - if (Unit* owner = caster->GetOwner()) - amount = CalculatePct(owner->GetStat(STAT_SPIRIT), aurEff->GetAmount()); - } - - void Register() override - { - DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_sha_mana_tide_totem_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_STAT); - } - }; - - AuraScript* GetAuraScript() const override - { - return new spell_sha_mana_tide_totem_AuraScript(); - } -}; - -// -30881 - Nature's Guardian +// 30884 - Nature's Guardian class spell_sha_nature_guardian : public SpellScriptLoader { public: @@ -1014,19 +865,20 @@ class spell_sha_nature_guardian : public SpellScriptLoader { PrepareAuraScript(spell_sha_nature_guardian_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) override + bool Validate(SpellInfo const* spellInfo) override { if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_NATURE_GUARDIAN)) return false; + if (!spellInfo->GetEffect(EFFECT_1)) + return false; return true; } bool CheckProc(ProcEventInfo& eventInfo) { //! HACK due to currenct proc system implementation - if (Player* player = GetTarget()->ToPlayer()) - if (player->GetSpellHistory()->HasCooldown(GetSpellInfo()->Id)) - return false; + if (GetTarget()->GetSpellHistory()->HasCooldown(GetSpellInfo()->Id)) + return false; return GetTarget()->HealthBelowPctDamaged(30, eventInfo.GetDamageInfo()->GetDamage()); } @@ -1041,8 +893,7 @@ class spell_sha_nature_guardian : public SpellScriptLoader if (eventInfo.GetProcTarget() && eventInfo.GetProcTarget()->IsAlive()) eventInfo.GetProcTarget()->getThreatManager().modifyThreatPercent(GetTarget(), -10); - if (Player* player = GetTarget()->ToPlayer()) - player->GetSpellHistory()->AddCooldown(GetSpellInfo()->Id, 0, std::chrono::seconds(aurEff->GetSpellInfo()->GetEffect(EFFECT_1)->CalcValue())); + GetTarget()->GetSpellHistory()->AddCooldown(GetSpellInfo()->Id, 0, std::chrono::seconds(aurEff->GetSpellInfo()->GetEffect(EFFECT_1)->CalcValue())); } void Register() override @@ -1058,81 +909,6 @@ class spell_sha_nature_guardian : public SpellScriptLoader } }; -// 88756 - Rolling Thunder -class spell_sha_rolling_thunder : public SpellScriptLoader -{ - public: - spell_sha_rolling_thunder() : SpellScriptLoader("spell_sha_rolling_thunder") { } - - class spell_sha_rolling_thunder_AuraScript : public AuraScript - { - PrepareAuraScript(spell_sha_rolling_thunder_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_LIGHTNING_SHIELD)) - return false; - return true; - } - - void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) - { - if (Aura* aura = GetTarget()->GetAura(SPELL_SHAMAN_LIGHTNING_SHIELD)) - { - aura->SetCharges(std::min(aura->GetCharges() + 1, aurEff->GetAmount())); - aura->RefreshDuration(); - } - } - - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_sha_rolling_thunder_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); - } - }; - - AuraScript* GetAuraScript() const override - { - return new spell_sha_rolling_thunder_AuraScript(); - } -}; - -// 82984 - Telluric Currents -class spell_sha_telluric_currents : public SpellScriptLoader -{ - public: - spell_sha_telluric_currents() : SpellScriptLoader("spell_sha_telluric_currents") { } - - class spell_sha_telluric_currents_AuraScript : public AuraScript - { - PrepareAuraScript(spell_sha_telluric_currents_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_TELLURIC_CURRENTS)) - return false; - return true; - } - - void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); - int32 basePoints0 = CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount()); - - GetTarget()->CastCustomSpell(GetTarget(), SPELL_SHAMAN_TELLURIC_CURRENTS, &basePoints0, NULL, NULL, true); - } - - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_sha_telluric_currents_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; - - AuraScript* GetAuraScript() const override - { - return new spell_sha_telluric_currents_AuraScript(); - } -}; - // 51490 - Thunderstorm class spell_sha_thunderstorm : public SpellScriptLoader { @@ -1152,7 +928,7 @@ class spell_sha_thunderstorm : public SpellScriptLoader void Register() override { - OnEffectHitTarget += SpellEffectFn(spell_sha_thunderstorm_SpellScript::HandleKnockBack, EFFECT_2, SPELL_EFFECT_KNOCK_BACK); + OnEffectHitTarget += SpellEffectFn(spell_sha_thunderstorm_SpellScript::HandleKnockBack, EFFECT_1, SPELL_EFFECT_KNOCK_BACK); } }; @@ -1162,7 +938,7 @@ class spell_sha_thunderstorm : public SpellScriptLoader } }; -// 51562 - Tidal Waves +// 51564 - Tidal Waves class spell_sha_tidal_waves : public SpellScriptLoader { public: @@ -1200,32 +976,65 @@ class spell_sha_tidal_waves : public SpellScriptLoader } }; +// 33757 - Windfury +class spell_sha_windfury : public SpellScriptLoader +{ +public: + spell_sha_windfury() : SpellScriptLoader("spell_sha_windfury") { } + + class spell_sha_windfury_AuraScript : public AuraScript + { + PrepareAuraScript(spell_sha_windfury_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_WINDFURY_ATTACK)) + return false; + return true; + } + + void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + + for (uint32 i = 0; i < 3; ++i) + eventInfo.GetActor()->CastSpell(eventInfo.GetProcTarget(), SPELL_SHAMAN_WINDFURY_ATTACK, true, nullptr, aurEff); + } + + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_sha_windfury_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_sha_windfury_AuraScript(); + } +}; + void AddSC_shaman_spell_scripts() { - new spell_sha_ancestral_awakening(); - new spell_sha_ancestral_awakening_proc(); new spell_sha_bloodlust(); new spell_sha_chain_heal(); new spell_sha_earth_shield(); - new spell_sha_earthbind_totem(); - new spell_sha_earthen_power(); - new spell_sha_feedback(); new spell_sha_fire_nova(); - new spell_sha_flame_shock(); + new spell_sha_flametongue(); + new spell_sha_fulmination(); new spell_sha_glyph_of_healing_wave(); new spell_sha_healing_stream_totem(); + new spell_sha_healing_stream_totem_heal(); new spell_sha_heroism(); new spell_sha_item_lightning_shield(); new spell_sha_item_lightning_shield_trigger(); new spell_sha_item_mana_surge(); new spell_sha_item_t10_elemental_2p_bonus(); new spell_sha_lava_lash(); + new spell_sha_lava_lash_spread_flame_shock(); new spell_sha_lava_surge(); new spell_sha_lava_surge_proc(); - new spell_sha_mana_tide_totem(); new spell_sha_nature_guardian(); - new spell_sha_rolling_thunder(); - new spell_sha_telluric_currents(); new spell_sha_thunderstorm(); new spell_sha_tidal_waves(); + new spell_sha_windfury(); } |