diff options
-rw-r--r-- | sql/updates/world/master/2017_03_18_03_world.sql | 5 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_druid.cpp | 1515 |
2 files changed, 612 insertions, 908 deletions
diff --git a/sql/updates/world/master/2017_03_18_03_world.sql b/sql/updates/world/master/2017_03_18_03_world.sql new file mode 100644 index 00000000000..28248359eca --- /dev/null +++ b/sql/updates/world/master/2017_03_18_03_world.sql @@ -0,0 +1,5 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_dru_eclipse_lunar','spell_dru_eclipse_solar','spell_dru_eclipse_energize','spell_dru_glyph_of_innervate','spell_dru_glyph_of_starfire','spell_dru_glyph_of_starfire_proc','spell_dru_insect_swarm','spell_dru_typhoon'); +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_dru_moonfire','spell_dru_sunfire'); +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(8921,'spell_dru_moonfire'), +(93402,'spell_dru_sunfire'); diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index 1c030039c6b..37bafe3da48 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -30,15 +30,6 @@ enum DruidSpells { - SPELL_DRUID_WRATH = 5176, - SPELL_DRUID_STARFIRE = 2912, - SPELL_DRUID_STARSURGE = 78674, - SPELL_DRUID_ECLIPSE_GENERAL_ENERGIZE = 89265, - SPELL_DRUID_STARSURGE_ENERGIZE = 86605, - SPELL_DRUID_LUNAR_ECLIPSE_MARKER = 67484, // Will make the yellow arrow on eclipse bar point to the blue side (lunar) - SPELL_DRUID_SOLAR_ECLIPSE_MARKER = 67483, // Will make the yellow arrow on eclipse bar point to the yellow side (solar) - SPELL_DRUID_SOLAR_ECLIPSE = 48517, - SPELL_DRUID_LUNAR_ECLIPSE = 48518, SPELL_DRUID_FERAL_CHARGE_BEAR = 16979, SPELL_DRUID_FERAL_CHARGE_CAT = 49376, SPELL_DRUID_FORMS_TRINKET_BEAR = 37340, @@ -46,205 +37,79 @@ enum DruidSpells SPELL_DRUID_FORMS_TRINKET_MOONKIN = 37343, SPELL_DRUID_FORMS_TRINKET_NONE = 37344, SPELL_DRUID_FORMS_TRINKET_TREE = 37342, - SPELL_DRUID_GLYPH_OF_INNERVATE = 54833, - SPELL_DRUID_GLYPH_OF_STARFIRE = 54846, - SPELL_DRUID_GLYPH_OF_TYPHOON = 62135, SPELL_DRUID_IDOL_OF_FERAL_SHADOWS = 34241, SPELL_DRUID_IDOL_OF_WORSHIP = 60774, - SPELL_DRUID_INCREASED_MOONFIRE_DURATION = 38414, - SPELL_DRUID_ITEM_T8_BALANCE_RELIC = 64950, SPELL_DRUID_LIFEBLOOM_ENERGIZE = 64372, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL = 33778, SPELL_DRUID_LIVING_SEED_HEAL = 48503, SPELL_DRUID_LIVING_SEED_PROC = 48504, - SPELL_DRUID_NATURES_GRACE = 16880, - SPELL_DRUID_NATURES_GRACE_TRIGGER = 16886, - SPELL_DRUID_SURVIVAL_INSTINCTS = 50322, + SPELL_DRUID_MOONFIRE_DAMAGE = 164812, SPELL_DRUID_SAVAGE_ROAR = 62071, SPELL_DRUID_STAMPEDE_BAER_RANK_1 = 81016, SPELL_DRUID_STAMPEDE_CAT_RANK_1 = 81021, - SPELL_DRUID_STAMPEDE_CAT_STATE = 109881 + SPELL_DRUID_STAMPEDE_CAT_STATE = 109881, + SPELL_DRUID_SUNFIRE_DAMAGE = 164815, + SPELL_DRUID_SURVIVAL_INSTINCTS = 50322 }; // 1850 - Dash class spell_dru_dash : public SpellScriptLoader { - public: - spell_dru_dash() : SpellScriptLoader("spell_dru_dash") { } - - class spell_dru_dash_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dru_dash_AuraScript); - - void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) - { - // do not set speed if not in cat form - if (GetUnitOwner()->GetShapeshiftForm() != FORM_CAT_FORM) - amount = 0; - } +public: + spell_dru_dash() : SpellScriptLoader("spell_dru_dash") { } - void Register() override - { - DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_dash_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_INCREASE_SPEED); - } - }; + class spell_dru_dash_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_dash_AuraScript); - AuraScript* GetAuraScript() const override + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) { - return new spell_dru_dash_AuraScript(); + // do not set speed if not in cat form + if (GetUnitOwner()->GetShapeshiftForm() != FORM_CAT_FORM) + amount = 0; } -}; - -// 48517 - Eclipse (Solar) -// 48518 - Eclipse (Lunar) -class spell_dru_eclipse : public SpellScriptLoader -{ - public: - spell_dru_eclipse(char const* scriptName) : SpellScriptLoader(scriptName) { } - - class spell_dru_eclipse_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dru_eclipse_AuraScript); - bool Validate(SpellInfo const* /*spellInfo*/) override - { - if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_NATURES_GRACE) || - !sSpellMgr->GetSpellInfo(SPELL_DRUID_NATURES_GRACE_TRIGGER)) - return false; - return true; - } - - bool Load() override - { - return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER; - } - - void ApplyEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - Unit* caster = GetCaster(); - if (!caster) - return; - - if (caster->GetAuraOfRankedSpell(SPELL_DRUID_NATURES_GRACE)) - caster->GetSpellHistory()->ResetCooldown(SPELL_DRUID_NATURES_GRACE_TRIGGER, true); - } - - void Register() override - { - OnEffectApply += AuraEffectApplyFn(spell_dru_eclipse_AuraScript::ApplyEffect, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, AURA_EFFECT_HANDLE_REAL); - } - }; - - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_dru_eclipse_AuraScript(); + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_dash_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_INCREASE_SPEED); } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_dru_dash_AuraScript(); + } }; -// 2912, 5176, 78674 - Starfire, Wrath, and Starsurge -class spell_dru_eclipse_energize : public SpellScriptLoader +// -33943 - Flight Form +class spell_dru_flight_form : public SpellScriptLoader { - public: - spell_dru_eclipse_energize() : SpellScriptLoader("spell_dru_eclipse_energize") { } - - class spell_dru_eclipse_energize_SpellScript : public SpellScript - { - PrepareSpellScript(spell_dru_eclipse_energize_SpellScript); - - bool Load() override - { - if (GetCaster()->GetTypeId() != TYPEID_PLAYER) - return false; - - if (GetCaster()->ToPlayer()->getClass() != CLASS_DRUID) - return false; - - return true; - } - - void HandleEnergize(SpellEffIndex /*effIndex*/) - { - Player* caster = GetCaster()->ToPlayer(); - - // No boomy, no deal. - if (caster->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) != TALENT_SPEC_DRUID_BALANCE) - return; +public: + spell_dru_flight_form() : SpellScriptLoader("spell_dru_flight_form") { } - switch (GetSpellInfo()->Id) - { - case SPELL_DRUID_WRATH: - { - int32 energizeAmount = -GetEffectValue(); // -13 - // If we are set to fill the lunar side or we've just logged in with 0 power.. - if ((!caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE_MARKER) && caster->HasAura(SPELL_DRUID_LUNAR_ECLIPSE_MARKER)) - || caster->GetPower(POWER_LUNAR_POWER) == 0) - { - caster->CastCustomSpell(caster, SPELL_DRUID_ECLIPSE_GENERAL_ENERGIZE, &energizeAmount, 0, 0, true); - // If the energize was due to 0 power, cast the eclipse marker aura - if (!caster->HasAura(SPELL_DRUID_LUNAR_ECLIPSE_MARKER)) - caster->CastSpell(caster, SPELL_DRUID_LUNAR_ECLIPSE_MARKER, true); - } - // The energizing effect brought us out of the solar eclipse, remove the aura - if (caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE) && caster->GetPower(POWER_LUNAR_POWER) <= 0) - caster->RemoveAurasDueToSpell(SPELL_DRUID_SOLAR_ECLIPSE); - break; - } - case SPELL_DRUID_STARFIRE: - { - int32 energizeAmount = GetEffectValue(); // 20 - // If we are set to fill the solar side or we've just logged in with 0 power.. - if ((!caster->HasAura(SPELL_DRUID_LUNAR_ECLIPSE_MARKER) && caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE_MARKER)) - || caster->GetPower(POWER_LUNAR_POWER) == 0) - { - caster->CastCustomSpell(caster, SPELL_DRUID_ECLIPSE_GENERAL_ENERGIZE, &energizeAmount, 0, 0, true); - // If the energize was due to 0 power, cast the eclipse marker aura - if (!caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE_MARKER)) - caster->CastSpell(caster, SPELL_DRUID_SOLAR_ECLIPSE_MARKER, true); - } - // The energizing effect brought us out of the lunar eclipse, remove the aura - if (caster->HasAura(SPELL_DRUID_LUNAR_ECLIPSE) && caster->GetPower(POWER_LUNAR_POWER) >= 0) - caster->RemoveAura(SPELL_DRUID_LUNAR_ECLIPSE); - break; - } - case SPELL_DRUID_STARSURGE: - { - // If we are set to fill the solar side or we've just logged in with 0 power (confirmed with sniffs) - if ((!caster->HasAura(SPELL_DRUID_LUNAR_ECLIPSE_MARKER) && caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE_MARKER)) - || caster->GetPower(POWER_LUNAR_POWER) == 0) - { - int32 energizeAmount = GetEffectValue(); // 15 - caster->CastCustomSpell(caster, SPELL_DRUID_STARSURGE_ENERGIZE, &energizeAmount, 0, 0, true); + class spell_dru_flight_form_SpellScript : public SpellScript + { + PrepareSpellScript(spell_dru_flight_form_SpellScript); - // If the energize was due to 0 power, cast the eclipse marker aura - if (!caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE_MARKER)) - caster->CastSpell(caster, SPELL_DRUID_SOLAR_ECLIPSE_MARKER, true); - } - else if (!caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE_MARKER) && caster->HasAura(SPELL_DRUID_LUNAR_ECLIPSE_MARKER)) - { - int32 energizeAmount = -GetEffectValue(); // -15 - caster->CastCustomSpell(caster, SPELL_DRUID_STARSURGE_ENERGIZE, &energizeAmount, 0, 0, true); - } - // The energizing effect brought us out of the lunar eclipse, remove the aura - if (caster->HasAura(SPELL_DRUID_LUNAR_ECLIPSE) && caster->GetPower(POWER_LUNAR_POWER) >= 0) - caster->RemoveAura(SPELL_DRUID_LUNAR_ECLIPSE); - // The energizing effect brought us out of the solar eclipse, remove the aura - else if (caster->HasAura(SPELL_DRUID_SOLAR_ECLIPSE) && caster->GetPower(POWER_LUNAR_POWER) <= 0) - caster->RemoveAura(SPELL_DRUID_SOLAR_ECLIPSE); - break; - } - } - } + SpellCastResult CheckCast() + { + Unit* caster = GetCaster(); + if (caster->IsInDisallowedMountForm()) + return SPELL_FAILED_NOT_SHAPESHIFT; - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_dru_eclipse_energize_SpellScript::HandleEnergize, EFFECT_1, SPELL_EFFECT_DUMMY); - } - }; + return SPELL_CAST_OK; + } - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_dru_eclipse_energize_SpellScript; + OnCheckCast += SpellCheckCastFn(spell_dru_flight_form_SpellScript::CheckCast); } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_dru_flight_form_SpellScript(); + } }; // 37336 - Druid Forms Trinket @@ -332,993 +197,827 @@ public: } }; -// 54832 - Glyph of Innervate -class spell_dru_glyph_of_innervate : public SpellScriptLoader -{ - public: - spell_dru_glyph_of_innervate() : SpellScriptLoader("spell_dru_glyph_of_innervate") { } - - class spell_dru_glyph_of_innervate_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dru_glyph_of_innervate_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_GLYPH_OF_INNERVATE)) - return false; - return true; - } - - bool CheckProc(ProcEventInfo& eventInfo) - { - // Not proc from self Innervate - return GetTarget() != eventInfo.GetProcTarget(); - } - - void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) - { - PreventDefaultAction(); - GetTarget()->CastSpell(GetTarget(), SPELL_DRUID_GLYPH_OF_INNERVATE, true, NULL, aurEff); - } - - void Register() override - { - DoCheckProc += AuraCheckProcFn(spell_dru_glyph_of_innervate_AuraScript::CheckProc); - OnEffectProc += AuraEffectProcFn(spell_dru_glyph_of_innervate_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; - - AuraScript* GetAuraScript() const override - { - return new spell_dru_glyph_of_innervate_AuraScript(); - } -}; - -// 54846 - Glyph of Starfire -class spell_dru_glyph_of_starfire : public SpellScriptLoader -{ - public: - spell_dru_glyph_of_starfire() : SpellScriptLoader("spell_dru_glyph_of_starfire") { } - - class spell_dru_glyph_of_starfire_SpellScript : public SpellScript - { - PrepareSpellScript(spell_dru_glyph_of_starfire_SpellScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_INCREASED_MOONFIRE_DURATION)) - return false; - return true; - } - - void HandleScriptEffect(SpellEffIndex /*effIndex*/) - { - Unit* caster = GetCaster(); - if (Unit* unitTarget = GetHitUnit()) - if (AuraEffect const* aurEff = unitTarget->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_DRUID, flag128(0x2, 0, 0), caster->GetGUID())) - { - Aura* aura = aurEff->GetBase(); - - uint32 countMin = aura->GetMaxDuration(); - uint32 countMax = aura->GetSpellInfo()->GetMaxDuration() + 9000; - if (caster->HasAura(SPELL_DRUID_INCREASED_MOONFIRE_DURATION)) - countMax += 3000; - - if (countMin < countMax) - { - aura->SetDuration(uint32(aura->GetDuration() + 3000)); - aura->SetMaxDuration(countMin + 3000); - } - } - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_dru_glyph_of_starfire_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const override - { - return new spell_dru_glyph_of_starfire_SpellScript(); - } -}; - -// 54845 - Glyph of Starfire -class spell_dru_glyph_of_starfire_proc : public SpellScriptLoader -{ - public: - spell_dru_glyph_of_starfire_proc() : SpellScriptLoader("spell_dru_glyph_of_starfire_proc") { } - - class spell_dru_glyph_of_starfire_proc_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dru_glyph_of_starfire_proc_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_GLYPH_OF_STARFIRE)) - return false; - return true; - } - - void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); - GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_DRUID_GLYPH_OF_STARFIRE, true, NULL, aurEff); - } - - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_dru_glyph_of_starfire_proc_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; - - AuraScript* GetAuraScript() const override - { - return new spell_dru_glyph_of_starfire_proc_AuraScript(); - } -}; - // 34246 - Idol of the Emerald Queen // 60779 - Idol of Lush Moss class spell_dru_idol_lifebloom : public SpellScriptLoader { - public: - spell_dru_idol_lifebloom() : SpellScriptLoader("spell_dru_idol_lifebloom") { } - - class spell_dru_idol_lifebloom_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dru_idol_lifebloom_AuraScript); +public: + spell_dru_idol_lifebloom() : SpellScriptLoader("spell_dru_idol_lifebloom") { } - void HandleEffectCalcSpellMod(AuraEffect const* aurEff, SpellModifier*& spellMod) - { - if (!spellMod) - { - spellMod = new SpellModifier(GetAura()); - spellMod->op = SPELLMOD_DOT; - spellMod->type = SPELLMOD_FLAT; - spellMod->spellId = GetId(); - spellMod->mask = GetSpellInfo()->GetEffect(aurEff->GetEffIndex())->SpellClassMask; - } - spellMod->value = aurEff->GetAmount() / 7; - } + class spell_dru_idol_lifebloom_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_idol_lifebloom_AuraScript); - void Register() override + void HandleEffectCalcSpellMod(AuraEffect const* aurEff, SpellModifier*& spellMod) + { + if (!spellMod) { - DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_dru_idol_lifebloom_AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY); + spellMod = new SpellModifier(GetAura()); + spellMod->op = SPELLMOD_DOT; + spellMod->type = SPELLMOD_FLAT; + spellMod->spellId = GetId(); + spellMod->mask = GetSpellInfo()->GetEffect(aurEff->GetEffIndex())->SpellClassMask; } - }; + spellMod->value = aurEff->GetAmount() / 7; + } - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_dru_idol_lifebloom_AuraScript(); + DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_dru_idol_lifebloom_AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY); } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_dru_idol_lifebloom_AuraScript(); + } }; // 29166 - Innervate class spell_dru_innervate : public SpellScriptLoader { - public: - spell_dru_innervate() : SpellScriptLoader("spell_dru_innervate") { } - - class spell_dru_innervate_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dru_innervate_AuraScript); - - void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/) - { - if (Unit* caster = GetCaster()) - amount = int32(CalculatePct(caster->GetCreatePowers(POWER_MANA), amount) / aurEff->GetTotalTicks()); - else - amount = 0; - } +public: + spell_dru_innervate() : SpellScriptLoader("spell_dru_innervate") { } - void Register() override - { - DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_innervate_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_ENERGIZE); - } - }; + class spell_dru_innervate_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_innervate_AuraScript); - AuraScript* GetAuraScript() const override + void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/) { - return new spell_dru_innervate_AuraScript(); + if (Unit* caster = GetCaster()) + amount = int32(CalculatePct(caster->GetCreatePowers(POWER_MANA), amount) / aurEff->GetTotalTicks()); + else + amount = 0; } -}; - -// 5570 - Insect Swarm -class spell_dru_insect_swarm : public SpellScriptLoader -{ - public: - spell_dru_insect_swarm() : SpellScriptLoader("spell_dru_insect_swarm") { } - - class spell_dru_insect_swarm_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dru_insect_swarm_AuraScript); - void CalculateAmount(AuraEffect const* aurEff, int32 & amount, bool & /*canBeRecalculated*/) - { - if (Unit* caster = GetCaster()) - if (AuraEffect const* relicAurEff = caster->GetAuraEffect(SPELL_DRUID_ITEM_T8_BALANCE_RELIC, EFFECT_0)) - amount += relicAurEff->GetAmount() / aurEff->GetTotalTicks(); - } - - void Register() override - { - DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_insect_swarm_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); - } - }; - - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_dru_insect_swarm_AuraScript(); + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_innervate_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_ENERGIZE); } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_dru_innervate_AuraScript(); + } }; // 33763 - Lifebloom class spell_dru_lifebloom : public SpellScriptLoader { - public: - spell_dru_lifebloom() : SpellScriptLoader("spell_dru_lifebloom") { } +public: + spell_dru_lifebloom() : SpellScriptLoader("spell_dru_lifebloom") { } - class spell_dru_lifebloom_AuraScript : public AuraScript + class spell_dru_lifebloom_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_lifebloom_AuraScript); + + bool Validate(SpellInfo const* /*spell*/) override { - PrepareAuraScript(spell_dru_lifebloom_AuraScript); + if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIFEBLOOM_FINAL_HEAL)) + return false; + if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIFEBLOOM_ENERGIZE)) + return false; + return true; + } - bool Validate(SpellInfo const* /*spell*/) override - { - if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIFEBLOOM_FINAL_HEAL)) - return false; - if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIFEBLOOM_ENERGIZE)) - return false; - return true; - } + void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + // Final heal only on duration end + if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE) + return; - void AfterRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + // final heal + int32 stack = GetStackAmount(); + int32 healAmount = aurEff->GetAmount(); + if (Unit* caster = GetCaster()) { - // Final heal only on duration end - if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE) - return; + healAmount = caster->SpellHealingBonusDone(GetTarget(), GetSpellInfo(), healAmount, HEAL, aurEff->GetSpellEffectInfo(), stack); + healAmount = GetTarget()->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, aurEff->GetSpellEffectInfo(), stack); - // final heal - int32 stack = GetStackAmount(); - int32 healAmount = aurEff->GetAmount(); - if (Unit* caster = GetCaster()) - { - healAmount = caster->SpellHealingBonusDone(GetTarget(), GetSpellInfo(), healAmount, HEAL, aurEff->GetSpellEffectInfo(), stack); - healAmount = GetTarget()->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, aurEff->GetSpellEffectInfo(), stack); - - GetTarget()->CastCustomSpell(GetTarget(), SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, aurEff, GetCasterGUID()); + GetTarget()->CastCustomSpell(GetTarget(), SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, nullptr, nullptr, true, nullptr, aurEff, GetCasterGUID()); - // restore mana - std::vector<SpellInfo::CostData> costs = GetSpellInfo()->CalcPowerCost(caster, GetSpellInfo()->GetSchoolMask()); - auto m = std::find_if(costs.begin(), costs.end(), [](SpellInfo::CostData const& cost) { return cost.Power == POWER_MANA; }); - if (m != costs.end()) - { - int32 returnMana = m->Amount * stack / 2; - caster->CastCustomSpell(caster, SPELL_DRUID_LIFEBLOOM_ENERGIZE, &returnMana, NULL, NULL, true, NULL, aurEff, GetCasterGUID()); - } - return; + // restore mana + std::vector<SpellInfo::CostData> costs = GetSpellInfo()->CalcPowerCost(caster, GetSpellInfo()->GetSchoolMask()); + auto m = std::find_if(costs.begin(), costs.end(), [](SpellInfo::CostData const& cost) { return cost.Power == POWER_MANA; }); + if (m != costs.end()) + { + int32 returnMana = m->Amount * stack / 2; + caster->CastCustomSpell(caster, SPELL_DRUID_LIFEBLOOM_ENERGIZE, &returnMana, nullptr, nullptr, true, nullptr, aurEff, GetCasterGUID()); } - - GetTarget()->CastCustomSpell(GetTarget(), SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, aurEff, GetCasterGUID()); + return; } - void HandleDispel(DispelInfo* dispelInfo) + GetTarget()->CastCustomSpell(GetTarget(), SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, nullptr, nullptr, true, nullptr, aurEff, GetCasterGUID()); + } + + void HandleDispel(DispelInfo* dispelInfo) + { + if (Unit* target = GetUnitOwner()) { - if (Unit* target = GetUnitOwner()) + if (AuraEffect const* aurEff = GetEffect(EFFECT_1)) { - if (AuraEffect const* aurEff = GetEffect(EFFECT_1)) + // final heal + int32 healAmount = aurEff->GetAmount(); + if (Unit* caster = GetCaster()) { - // final heal - int32 healAmount = aurEff->GetAmount(); - if (Unit* caster = GetCaster()) + healAmount = caster->SpellHealingBonusDone(target, GetSpellInfo(), healAmount, HEAL, aurEff->GetSpellEffectInfo(), dispelInfo->GetRemovedCharges()); + healAmount = target->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, aurEff->GetSpellEffectInfo(), dispelInfo->GetRemovedCharges()); + target->CastCustomSpell(target, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, nullptr, nullptr, true, nullptr, nullptr, GetCasterGUID()); + + // restore mana + std::vector<SpellInfo::CostData> costs = GetSpellInfo()->CalcPowerCost(caster, GetSpellInfo()->GetSchoolMask()); + auto m = std::find_if(costs.begin(), costs.end(), [](SpellInfo::CostData const& cost) { return cost.Power == POWER_MANA; }); + if (m != costs.end()) { - healAmount = caster->SpellHealingBonusDone(target, GetSpellInfo(), healAmount, HEAL, aurEff->GetSpellEffectInfo(), dispelInfo->GetRemovedCharges()); - healAmount = target->SpellHealingBonusTaken(caster, GetSpellInfo(), healAmount, HEAL, aurEff->GetSpellEffectInfo(), dispelInfo->GetRemovedCharges()); - target->CastCustomSpell(target, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, NULL, GetCasterGUID()); - - // restore mana - std::vector<SpellInfo::CostData> costs = GetSpellInfo()->CalcPowerCost(caster, GetSpellInfo()->GetSchoolMask()); - auto m = std::find_if(costs.begin(), costs.end(), [](SpellInfo::CostData const& cost) { return cost.Power == POWER_MANA; }); - if (m != costs.end()) - { - int32 returnMana = m->Amount * dispelInfo->GetRemovedCharges() / 2; - caster->CastCustomSpell(caster, SPELL_DRUID_LIFEBLOOM_ENERGIZE, &returnMana, NULL, NULL, true, NULL, NULL, GetCasterGUID()); - } - return; + int32 returnMana = m->Amount * dispelInfo->GetRemovedCharges() / 2; + caster->CastCustomSpell(caster, SPELL_DRUID_LIFEBLOOM_ENERGIZE, &returnMana, nullptr, nullptr, true, nullptr, nullptr, GetCasterGUID()); } - - target->CastCustomSpell(target, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, NULL, NULL, true, NULL, NULL, GetCasterGUID()); + return; } - } - } - void Register() override - { - AfterEffectRemove += AuraEffectRemoveFn(spell_dru_lifebloom_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - AfterDispel += AuraDispelFn(spell_dru_lifebloom_AuraScript::HandleDispel); + target->CastCustomSpell(target, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL, &healAmount, nullptr, nullptr, true, nullptr, nullptr, GetCasterGUID()); + } } - }; + } - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_dru_lifebloom_AuraScript(); + AfterEffectRemove += AuraEffectRemoveFn(spell_dru_lifebloom_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + AfterDispel += AuraDispelFn(spell_dru_lifebloom_AuraScript::HandleDispel); } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_dru_lifebloom_AuraScript(); + } }; // -48496 - Living Seed class spell_dru_living_seed : public SpellScriptLoader { - public: - spell_dru_living_seed() : SpellScriptLoader("spell_dru_living_seed") { } - - class spell_dru_living_seed_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dru_living_seed_AuraScript); +public: + spell_dru_living_seed() : SpellScriptLoader("spell_dru_living_seed") { } - bool Validate(SpellInfo const* /*spellInfo*/) override - { - if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIVING_SEED_PROC)) - return false; - return true; - } + class spell_dru_living_seed_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_living_seed_AuraScript); - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); - int32 amount = CalculatePct(eventInfo.GetHealInfo()->GetHeal(), aurEff->GetAmount()); - GetTarget()->CastCustomSpell(SPELL_DRUID_LIVING_SEED_PROC, SPELLVALUE_BASE_POINT0, amount, eventInfo.GetProcTarget(), true, NULL, aurEff); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIVING_SEED_PROC)) + return false; + return true; + } - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_dru_living_seed_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + int32 amount = CalculatePct(eventInfo.GetHealInfo()->GetHeal(), aurEff->GetAmount()); + GetTarget()->CastCustomSpell(SPELL_DRUID_LIVING_SEED_PROC, SPELLVALUE_BASE_POINT0, amount, eventInfo.GetProcTarget(), true, nullptr, aurEff); + } - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_dru_living_seed_AuraScript(); + OnEffectProc += AuraEffectProcFn(spell_dru_living_seed_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_dru_living_seed_AuraScript(); + } }; // 48504 - Living Seed (Proc) class spell_dru_living_seed_proc : public SpellScriptLoader { - public: - spell_dru_living_seed_proc() : SpellScriptLoader("spell_dru_living_seed_proc") { } +public: + spell_dru_living_seed_proc() : SpellScriptLoader("spell_dru_living_seed_proc") { } + + class spell_dru_living_seed_proc_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_living_seed_proc_AuraScript); - class spell_dru_living_seed_proc_AuraScript : public AuraScript + bool Validate(SpellInfo const* /*spellInfo*/) override { - PrepareAuraScript(spell_dru_living_seed_proc_AuraScript); + if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIVING_SEED_HEAL)) + return false; + return true; + } - bool Validate(SpellInfo const* /*spellInfo*/) override - { - if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIVING_SEED_HEAL)) - return false; - return true; - } + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + GetTarget()->CastCustomSpell(SPELL_DRUID_LIVING_SEED_HEAL, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, nullptr, aurEff); + } - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) - { - PreventDefaultAction(); - GetTarget()->CastCustomSpell(SPELL_DRUID_LIVING_SEED_HEAL, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, NULL, aurEff); - } + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_dru_living_seed_proc_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_dru_living_seed_proc_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; + AuraScript* GetAuraScript() const override + { + return new spell_dru_living_seed_proc_AuraScript(); + } +}; + +// 8921 - Moonfire +class spell_dru_moonfire : public SpellScriptLoader +{ +public: + spell_dru_moonfire() : SpellScriptLoader("spell_dru_moonfire") { } - AuraScript* GetAuraScript() const override + class spell_dru_moonfire_SpellScript : public SpellScript + { + PrepareSpellScript(spell_dru_moonfire_SpellScript); + + void HandleOnHit(SpellEffIndex /*effIndex*/) { - return new spell_dru_living_seed_proc_AuraScript(); + GetCaster()->CastSpell(GetHitUnit(), SPELL_DRUID_MOONFIRE_DAMAGE, true); } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_dru_moonfire_SpellScript::HandleOnHit, EFFECT_0, SPELL_EFFECT_DUMMY); + } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_dru_moonfire_SpellScript(); + } }; // -16972 - Predatory Strikes class spell_dru_predatory_strikes : public SpellScriptLoader { - public: - spell_dru_predatory_strikes() : SpellScriptLoader("spell_dru_predatory_strikes") { } - - class spell_dru_predatory_strikes_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dru_predatory_strikes_AuraScript); +public: + spell_dru_predatory_strikes() : SpellScriptLoader("spell_dru_predatory_strikes") { } - void UpdateAmount(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - if (Player* target = GetTarget()->ToPlayer()) - target->UpdateAttackPowerAndDamage(); - } + class spell_dru_predatory_strikes_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_predatory_strikes_AuraScript); - void Register() override - { - AfterEffectApply += AuraEffectApplyFn(spell_dru_predatory_strikes_AuraScript::UpdateAmount, EFFECT_ALL, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); - AfterEffectRemove += AuraEffectRemoveFn(spell_dru_predatory_strikes_AuraScript::UpdateAmount, EFFECT_ALL, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); - } - }; + void UpdateAmount(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Player* target = GetTarget()->ToPlayer()) + target->UpdateAttackPowerAndDamage(); + } - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_dru_predatory_strikes_AuraScript(); + AfterEffectApply += AuraEffectApplyFn(spell_dru_predatory_strikes_AuraScript::UpdateAmount, EFFECT_ALL, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); + AfterEffectRemove += AuraEffectRemoveFn(spell_dru_predatory_strikes_AuraScript::UpdateAmount, EFFECT_ALL, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_dru_predatory_strikes_AuraScript(); + } }; // 1079 - Rip class spell_dru_rip : public SpellScriptLoader { - public: - spell_dru_rip() : SpellScriptLoader("spell_dru_rip") { } +public: + spell_dru_rip() : SpellScriptLoader("spell_dru_rip") { } - class spell_dru_rip_AuraScript : public AuraScript + class spell_dru_rip_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_rip_AuraScript); + + bool Load() override { - PrepareAuraScript(spell_dru_rip_AuraScript); + Unit* caster = GetCaster(); + return caster && caster->GetTypeId() == TYPEID_PLAYER; + } - bool Load() override - { - Unit* caster = GetCaster(); - return caster && caster->GetTypeId() == TYPEID_PLAYER; - } + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated) + { + canBeRecalculated = false; - void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated) + if (Unit* caster = GetCaster()) { - canBeRecalculated = false; - - if (Unit* caster = GetCaster()) - { - // 0.01 * $AP * cp - uint32 cp = caster->ToPlayer()->GetComboPoints(); - - // Idol of Feral Shadows. Can't be handled as SpellMod due its dependency from CPs - if (AuraEffect const* auraEffIdolOfFeralShadows = caster->GetAuraEffect(SPELL_DRUID_IDOL_OF_FERAL_SHADOWS, EFFECT_0)) - amount += cp * auraEffIdolOfFeralShadows->GetAmount(); - // Idol of Worship. Can't be handled as SpellMod due its dependency from CPs - else if (AuraEffect const* auraEffIdolOfWorship = caster->GetAuraEffect(SPELL_DRUID_IDOL_OF_WORSHIP, EFFECT_0)) - amount += cp * auraEffIdolOfWorship->GetAmount(); + // 0.01 * $AP * cp + uint32 cp = caster->ToPlayer()->GetComboPoints(); - amount += int32(CalculatePct(caster->GetTotalAttackPowerValue(BASE_ATTACK), cp)); - } - } + // Idol of Feral Shadows. Can't be handled as SpellMod due its dependency from CPs + if (AuraEffect const* auraEffIdolOfFeralShadows = caster->GetAuraEffect(SPELL_DRUID_IDOL_OF_FERAL_SHADOWS, EFFECT_0)) + amount += cp * auraEffIdolOfFeralShadows->GetAmount(); + // Idol of Worship. Can't be handled as SpellMod due its dependency from CPs + else if (AuraEffect const* auraEffIdolOfWorship = caster->GetAuraEffect(SPELL_DRUID_IDOL_OF_WORSHIP, EFFECT_0)) + amount += cp * auraEffIdolOfWorship->GetAmount(); - void Register() override - { - DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_rip_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); + amount += int32(CalculatePct(caster->GetTotalAttackPowerValue(BASE_ATTACK), cp)); } - }; + } - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_dru_rip_AuraScript(); + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_rip_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_dru_rip_AuraScript(); + } }; // 62606 - Savage Defense class spell_dru_savage_defense : public SpellScriptLoader { - public: - spell_dru_savage_defense() : SpellScriptLoader("spell_dru_savage_defense") { } - - class spell_dru_savage_defense_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dru_savage_defense_AuraScript); +public: + spell_dru_savage_defense() : SpellScriptLoader("spell_dru_savage_defense") { } - public: - spell_dru_savage_defense_AuraScript() - { - absorbPct = 0; - } + class spell_dru_savage_defense_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_savage_defense_AuraScript); - private: - uint32 absorbPct; + public: + spell_dru_savage_defense_AuraScript() + { + absorbPct = 0; + } - bool Load() override - { - absorbPct = GetSpellInfo()->GetEffect(EFFECT_0)->CalcValue(GetCaster()); - return true; - } + private: + uint32 absorbPct; - void CalculateAmount(AuraEffect const* /*aurEff*/, int32 & amount, bool & /*canBeRecalculated*/) - { - // Set absorbtion amount to unlimited - amount = -1; - } + bool Load() override + { + absorbPct = GetSpellInfo()->GetEffect(EFFECT_0)->CalcValue(GetCaster()); + return true; + } - void Absorb(AuraEffect* aurEff, DamageInfo & /*dmgInfo*/, uint32 & absorbAmount) - { - absorbAmount = uint32(CalculatePct(GetTarget()->GetTotalAttackPowerValue(BASE_ATTACK), absorbPct)); - aurEff->SetAmount(0); - } + void CalculateAmount(AuraEffect const* /*aurEff*/, int32 & amount, bool & /*canBeRecalculated*/) + { + // Set absorbtion amount to unlimited + amount = -1; + } - void Register() override - { - DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_savage_defense_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); - OnEffectAbsorb += AuraEffectAbsorbFn(spell_dru_savage_defense_AuraScript::Absorb, EFFECT_0); - } - }; + void Absorb(AuraEffect* aurEff, DamageInfo & /*dmgInfo*/, uint32 & absorbAmount) + { + absorbAmount = uint32(CalculatePct(GetTarget()->GetTotalAttackPowerValue(BASE_ATTACK), absorbPct)); + aurEff->SetAmount(0); + } - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_dru_savage_defense_AuraScript(); + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_savage_defense_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); + OnEffectAbsorb += AuraEffectAbsorbFn(spell_dru_savage_defense_AuraScript::Absorb, EFFECT_0); } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_dru_savage_defense_AuraScript(); + } }; // 52610 - Savage Roar class spell_dru_savage_roar : public SpellScriptLoader { - public: - spell_dru_savage_roar() : SpellScriptLoader("spell_dru_savage_roar") { } - - class spell_dru_savage_roar_SpellScript : public SpellScript - { - PrepareSpellScript(spell_dru_savage_roar_SpellScript); - - SpellCastResult CheckCast() - { - Unit* caster = GetCaster(); - if (caster->GetShapeshiftForm() != FORM_CAT_FORM) - return SPELL_FAILED_ONLY_SHAPESHIFT; - - return SPELL_CAST_OK; - } +public: + spell_dru_savage_roar() : SpellScriptLoader("spell_dru_savage_roar") { } - void Register() override - { - OnCheckCast += SpellCheckCastFn(spell_dru_savage_roar_SpellScript::CheckCast); - } - }; + class spell_dru_savage_roar_SpellScript : public SpellScript + { + PrepareSpellScript(spell_dru_savage_roar_SpellScript); - class spell_dru_savage_roar_AuraScript : public AuraScript + SpellCastResult CheckCast() { - PrepareAuraScript(spell_dru_savage_roar_AuraScript); + Unit* caster = GetCaster(); + if (caster->GetShapeshiftForm() != FORM_CAT_FORM) + return SPELL_FAILED_ONLY_SHAPESHIFT; - bool Validate(SpellInfo const* /*spellInfo*/) override - { - if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_SAVAGE_ROAR)) - return false; - return true; - } - - void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) - { - Unit* target = GetTarget(); - target->CastSpell(target, SPELL_DRUID_SAVAGE_ROAR, true, NULL, aurEff, GetCasterGUID()); - } + return SPELL_CAST_OK; + } - void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_SAVAGE_ROAR); - } + void Register() override + { + OnCheckCast += SpellCheckCastFn(spell_dru_savage_roar_SpellScript::CheckCast); + } + }; - void Register() override - { - AfterEffectApply += AuraEffectApplyFn(spell_dru_savage_roar_AuraScript::AfterApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - AfterEffectRemove += AuraEffectRemoveFn(spell_dru_savage_roar_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); - } - }; + class spell_dru_savage_roar_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_savage_roar_AuraScript); - SpellScript* GetSpellScript() const override + bool Validate(SpellInfo const* /*spellInfo*/) override { - return new spell_dru_savage_roar_SpellScript(); + if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_SAVAGE_ROAR)) + return false; + return true; } - AuraScript* GetAuraScript() const override + void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) { - return new spell_dru_savage_roar_AuraScript(); + Unit* target = GetTarget(); + target->CastSpell(target, SPELL_DRUID_SAVAGE_ROAR, true, nullptr, aurEff, GetCasterGUID()); } -}; -// 50286 - Starfall (Dummy) -class spell_dru_starfall_dummy : public SpellScriptLoader -{ - public: - spell_dru_starfall_dummy() : SpellScriptLoader("spell_dru_starfall_dummy") { } - - class spell_dru_starfall_dummy_SpellScript : public SpellScript + void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - PrepareSpellScript(spell_dru_starfall_dummy_SpellScript); - - void FilterTargets(std::list<WorldObject*>& targets) - { - Trinity::Containers::RandomResizeList(targets, 2); - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - Unit* caster = GetCaster(); - // Shapeshifting into an animal form or mounting cancels the effect - if (caster->GetCreatureType() == CREATURE_TYPE_BEAST || caster->IsMounted()) - { - if (SpellInfo const* spellInfo = GetTriggeringSpell()) - caster->RemoveAurasDueToSpell(spellInfo->Id); - return; - } - - // Any effect which causes you to lose control of your character will supress the starfall effect. - if (caster->HasUnitState(UNIT_STATE_CONTROLLED)) - return; - - caster->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true); - } - - void Register() override - { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_starfall_dummy_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); - OnEffectHitTarget += SpellEffectFn(spell_dru_starfall_dummy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } - }; + GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_SAVAGE_ROAR); + } - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_dru_starfall_dummy_SpellScript(); + AfterEffectApply += AuraEffectApplyFn(spell_dru_savage_roar_AuraScript::AfterApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_dru_savage_roar_AuraScript::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_dru_savage_roar_SpellScript(); + } + + AuraScript* GetAuraScript() const override + { + return new spell_dru_savage_roar_AuraScript(); + } }; // -78892 - Stampede class spell_dru_stampede : public SpellScriptLoader { - public: - spell_dru_stampede() : SpellScriptLoader("spell_dru_stampede") { } - - class spell_dru_stampede_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dru_stampede_AuraScript); +public: + spell_dru_stampede() : SpellScriptLoader("spell_dru_stampede") { } - bool Validate(SpellInfo const* /*spellInfo*/) override - { - if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_STAMPEDE_BAER_RANK_1) || - !sSpellMgr->GetSpellInfo(SPELL_DRUID_STAMPEDE_CAT_RANK_1) || - !sSpellMgr->GetSpellInfo(SPELL_DRUID_STAMPEDE_CAT_STATE) || - !sSpellMgr->GetSpellInfo(SPELL_DRUID_FERAL_CHARGE_CAT) || - !sSpellMgr->GetSpellInfo(SPELL_DRUID_FERAL_CHARGE_BEAR)) - return false; - return true; - } + class spell_dru_stampede_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_stampede_AuraScript); - void HandleEffectCatProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); - if (GetTarget()->GetShapeshiftForm() != FORM_CAT_FORM || eventInfo.GetDamageInfo()->GetSpellInfo()->Id != SPELL_DRUID_FERAL_CHARGE_CAT) - return; + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_STAMPEDE_BAER_RANK_1) || + !sSpellMgr->GetSpellInfo(SPELL_DRUID_STAMPEDE_CAT_RANK_1) || + !sSpellMgr->GetSpellInfo(SPELL_DRUID_STAMPEDE_CAT_STATE) || + !sSpellMgr->GetSpellInfo(SPELL_DRUID_FERAL_CHARGE_CAT) || + !sSpellMgr->GetSpellInfo(SPELL_DRUID_FERAL_CHARGE_BEAR)) + return false; + return true; + } - GetTarget()->CastSpell(GetTarget(), sSpellMgr->GetSpellWithRank(SPELL_DRUID_STAMPEDE_CAT_RANK_1, GetSpellInfo()->GetRank()), true, NULL, aurEff); - GetTarget()->CastSpell(GetTarget(), SPELL_DRUID_STAMPEDE_CAT_STATE, true, NULL, aurEff); - } + void HandleEffectCatProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + if (GetTarget()->GetShapeshiftForm() != FORM_CAT_FORM || eventInfo.GetDamageInfo()->GetSpellInfo()->Id != SPELL_DRUID_FERAL_CHARGE_CAT) + return; - void HandleEffectBearProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); - if (GetTarget()->GetShapeshiftForm() != FORM_BEAR_FORM || eventInfo.GetDamageInfo()->GetSpellInfo()->Id != SPELL_DRUID_FERAL_CHARGE_BEAR) - return; + GetTarget()->CastSpell(GetTarget(), sSpellMgr->GetSpellWithRank(SPELL_DRUID_STAMPEDE_CAT_RANK_1, GetSpellInfo()->GetRank()), true, nullptr, aurEff); + GetTarget()->CastSpell(GetTarget(), SPELL_DRUID_STAMPEDE_CAT_STATE, true, nullptr, aurEff); + } - GetTarget()->CastSpell(GetTarget(), sSpellMgr->GetSpellWithRank(SPELL_DRUID_STAMPEDE_BAER_RANK_1, GetSpellInfo()->GetRank()), true, NULL, aurEff); - } + void HandleEffectBearProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + if (GetTarget()->GetShapeshiftForm() != FORM_BEAR_FORM || eventInfo.GetDamageInfo()->GetSpellInfo()->Id != SPELL_DRUID_FERAL_CHARGE_BEAR) + return; - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_dru_stampede_AuraScript::HandleEffectCatProc, EFFECT_0, SPELL_AURA_DUMMY); - OnEffectProc += AuraEffectProcFn(spell_dru_stampede_AuraScript::HandleEffectBearProc, EFFECT_1, SPELL_AURA_DUMMY); - } - }; + GetTarget()->CastSpell(GetTarget(), sSpellMgr->GetSpellWithRank(SPELL_DRUID_STAMPEDE_BAER_RANK_1, GetSpellInfo()->GetRank()), true, nullptr, aurEff); + } - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_dru_stampede_AuraScript(); + OnEffectProc += AuraEffectProcFn(spell_dru_stampede_AuraScript::HandleEffectCatProc, EFFECT_0, SPELL_AURA_DUMMY); + OnEffectProc += AuraEffectProcFn(spell_dru_stampede_AuraScript::HandleEffectBearProc, EFFECT_1, SPELL_AURA_DUMMY); } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_dru_stampede_AuraScript(); + } }; -// 61336 - Survival Instincts -class spell_dru_survival_instincts : public SpellScriptLoader +// 50286 - Starfall (Dummy) +class spell_dru_starfall_dummy : public SpellScriptLoader { - public: - spell_dru_survival_instincts() : SpellScriptLoader("spell_dru_survival_instincts") { } +public: + spell_dru_starfall_dummy() : SpellScriptLoader("spell_dru_starfall_dummy") { } - class spell_dru_survival_instincts_SpellScript : public SpellScript + class spell_dru_starfall_dummy_SpellScript : public SpellScript + { + PrepareSpellScript(spell_dru_starfall_dummy_SpellScript); + + void FilterTargets(std::list<WorldObject*>& targets) { - PrepareSpellScript(spell_dru_survival_instincts_SpellScript); + Trinity::Containers::RandomResizeList(targets, 2); + } - SpellCastResult CheckCast() + void HandleDummy(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + // Shapeshifting into an animal form or mounting cancels the effect + if (caster->GetCreatureType() == CREATURE_TYPE_BEAST || caster->IsMounted()) { - Unit* caster = GetCaster(); - if (!caster->IsInFeralForm()) - return SPELL_FAILED_ONLY_SHAPESHIFT; - - return SPELL_CAST_OK; + if (SpellInfo const* spellInfo = GetTriggeringSpell()) + caster->RemoveAurasDueToSpell(spellInfo->Id); + return; } - void Register() override - { - OnCheckCast += SpellCheckCastFn(spell_dru_survival_instincts_SpellScript::CheckCast); - } - }; + // Any effect which causes you to lose control of your character will supress the starfall effect. + if (caster->HasUnitState(UNIT_STATE_CONTROLLED)) + return; + + caster->CastSpell(GetHitUnit(), uint32(GetEffectValue()), true); + } - class spell_dru_survival_instincts_AuraScript : public AuraScript + void Register() override { - PrepareAuraScript(spell_dru_survival_instincts_AuraScript); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_starfall_dummy_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); + OnEffectHitTarget += SpellEffectFn(spell_dru_starfall_dummy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } + }; - bool Validate(SpellInfo const* /*spell*/) override - { - if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_SURVIVAL_INSTINCTS)) - return false; - return true; - } + SpellScript* GetSpellScript() const override + { + return new spell_dru_starfall_dummy_SpellScript(); + } +}; - void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) - { - Unit* target = GetTarget(); - int32 bp0 = target->CountPctFromMaxHealth(aurEff->GetAmount()); - target->CastCustomSpell(target, SPELL_DRUID_SURVIVAL_INSTINCTS, &bp0, NULL, NULL, true); - } +// 93402 - Sunfire +class spell_dru_sunfire : public SpellScriptLoader +{ +public: + spell_dru_sunfire() : SpellScriptLoader("spell_dru_sunfire") { } - void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_SURVIVAL_INSTINCTS); - } + class spell_dru_sunfire_SpellScript : public SpellScript + { + PrepareSpellScript(spell_dru_sunfire_SpellScript); - void Register() override - { - AfterEffectApply += AuraEffectApplyFn(spell_dru_survival_instincts_AuraScript::AfterApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); - AfterEffectRemove += AuraEffectRemoveFn(spell_dru_survival_instincts_AuraScript::AfterRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); - } - }; - SpellScript* GetSpellScript() const override + void HandleOnHit(SpellEffIndex /*effIndex*/) { - return new spell_dru_survival_instincts_SpellScript(); + GetCaster()->CastSpell(GetHitUnit(), SPELL_DRUID_SUNFIRE_DAMAGE, true); } - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_dru_survival_instincts_AuraScript(); + OnEffectHitTarget += SpellEffectFn(spell_dru_sunfire_SpellScript::HandleOnHit, EFFECT_0, SPELL_EFFECT_DUMMY); } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_dru_sunfire_SpellScript(); + } }; -// 40121 - Swift Flight Form (Passive) -class spell_dru_swift_flight_passive : public SpellScriptLoader +// 61336 - Survival Instincts +class spell_dru_survival_instincts : public SpellScriptLoader { - public: - spell_dru_swift_flight_passive() : SpellScriptLoader("spell_dru_swift_flight_passive") { } - - class spell_dru_swift_flight_passive_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dru_swift_flight_passive_AuraScript); +public: + spell_dru_survival_instincts() : SpellScriptLoader("spell_dru_survival_instincts") { } - bool Load() override - { - return GetCaster()->GetTypeId() == TYPEID_PLAYER; - } + class spell_dru_survival_instincts_SpellScript : public SpellScript + { + PrepareSpellScript(spell_dru_survival_instincts_SpellScript); - void CalculateAmount(AuraEffect const* /*aurEff*/, int32 & amount, bool & /*canBeRecalculated*/) - { - if (Player* caster = GetCaster()->ToPlayer()) - if (caster->GetSkillValue(SKILL_RIDING) >= 375) - amount = 310; - } + SpellCastResult CheckCast() + { + Unit* caster = GetCaster(); + if (!caster->IsInFeralForm()) + return SPELL_FAILED_ONLY_SHAPESHIFT; - void Register() override - { - DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_swift_flight_passive_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_INCREASE_VEHICLE_FLIGHT_SPEED); - } - }; + return SPELL_CAST_OK; + } - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_dru_swift_flight_passive_AuraScript(); + OnCheckCast += SpellCheckCastFn(spell_dru_survival_instincts_SpellScript::CheckCast); } -}; + }; -// -33943 - Flight Form -class spell_dru_flight_form : public SpellScriptLoader -{ - public: - spell_dru_flight_form() : SpellScriptLoader("spell_dru_flight_form") { } + class spell_dru_survival_instincts_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_survival_instincts_AuraScript); - class spell_dru_flight_form_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spell*/) override { - PrepareSpellScript(spell_dru_flight_form_SpellScript); - - SpellCastResult CheckCast() - { - Unit* caster = GetCaster(); - if (caster->IsInDisallowedMountForm()) - return SPELL_FAILED_NOT_SHAPESHIFT; + if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_SURVIVAL_INSTINCTS)) + return false; + return true; + } - return SPELL_CAST_OK; - } + void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + int32 bp0 = target->CountPctFromMaxHealth(aurEff->GetAmount()); + target->CastCustomSpell(target, SPELL_DRUID_SURVIVAL_INSTINCTS, &bp0, nullptr, nullptr, true); + } - void Register() override - { - OnCheckCast += SpellCheckCastFn(spell_dru_flight_form_SpellScript::CheckCast); - } - }; + void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_SURVIVAL_INSTINCTS); + } - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_dru_flight_form_SpellScript(); + AfterEffectApply += AuraEffectApplyFn(spell_dru_survival_instincts_AuraScript::AfterApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); + AfterEffectRemove += AuraEffectRemoveFn(spell_dru_survival_instincts_AuraScript::AfterRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_dru_survival_instincts_SpellScript(); + } + + AuraScript* GetAuraScript() const override + { + return new spell_dru_survival_instincts_AuraScript(); + } }; -// 61391 - Typhoon -class spell_dru_typhoon : public SpellScriptLoader +// 40121 - Swift Flight Form (Passive) +class spell_dru_swift_flight_passive : public SpellScriptLoader { - public: - spell_dru_typhoon() : SpellScriptLoader("spell_dru_typhoon") { } +public: + spell_dru_swift_flight_passive() : SpellScriptLoader("spell_dru_swift_flight_passive") { } - class spell_dru_typhoon_SpellScript : public SpellScript - { - PrepareSpellScript(spell_dru_typhoon_SpellScript); + class spell_dru_swift_flight_passive_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_swift_flight_passive_AuraScript); - void HandleKnockBack(SpellEffIndex effIndex) - { - // Glyph of Typhoon - if (GetCaster()->HasAura(SPELL_DRUID_GLYPH_OF_TYPHOON)) - PreventHitDefaultEffect(effIndex); - } + bool Load() override + { + return GetCaster()->GetTypeId() == TYPEID_PLAYER; + } - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_dru_typhoon_SpellScript::HandleKnockBack, EFFECT_0, SPELL_EFFECT_KNOCK_BACK); - } - }; + void CalculateAmount(AuraEffect const* /*aurEff*/, int32 & amount, bool & /*canBeRecalculated*/) + { + if (Player* caster = GetCaster()->ToPlayer()) + if (caster->GetSkillValue(SKILL_RIDING) >= 375) + amount = 310; + } - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_dru_typhoon_SpellScript(); + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_swift_flight_passive_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_INCREASE_VEHICLE_FLIGHT_SPEED); } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_dru_swift_flight_passive_AuraScript(); + } }; // 70691 - Item T10 Restoration 4P Bonus class spell_dru_t10_restoration_4p_bonus : public SpellScriptLoader { - public: - spell_dru_t10_restoration_4p_bonus() : SpellScriptLoader("spell_dru_t10_restoration_4p_bonus") { } +public: + spell_dru_t10_restoration_4p_bonus() : SpellScriptLoader("spell_dru_t10_restoration_4p_bonus") { } + + class spell_dru_t10_restoration_4p_bonus_SpellScript : public SpellScript + { + PrepareSpellScript(spell_dru_t10_restoration_4p_bonus_SpellScript); - class spell_dru_t10_restoration_4p_bonus_SpellScript : public SpellScript + bool Load() override { - PrepareSpellScript(spell_dru_t10_restoration_4p_bonus_SpellScript); + return GetCaster()->GetTypeId() == TYPEID_PLAYER; + } - bool Load() override + void FilterTargets(std::list<WorldObject*>& targets) + { + if (!GetCaster()->ToPlayer()->GetGroup()) { - return GetCaster()->GetTypeId() == TYPEID_PLAYER; + targets.clear(); + targets.push_back(GetCaster()); } - - void FilterTargets(std::list<WorldObject*>& targets) + else { - if (!GetCaster()->ToPlayer()->GetGroup()) - { - targets.clear(); - targets.push_back(GetCaster()); - } - else - { - targets.remove(GetExplTargetUnit()); - std::list<Unit*> tempTargets; - for (std::list<WorldObject*>::const_iterator itr = targets.begin(); itr != targets.end(); ++itr) - if ((*itr)->GetTypeId() == TYPEID_PLAYER && GetCaster()->IsInRaidWith((*itr)->ToUnit())) - tempTargets.push_back((*itr)->ToUnit()); - - if (tempTargets.empty()) - { - targets.clear(); - FinishCast(SPELL_FAILED_DONT_REPORT); - return; - } + targets.remove(GetExplTargetUnit()); + std::list<Unit*> tempTargets; + for (std::list<WorldObject*>::const_iterator itr = targets.begin(); itr != targets.end(); ++itr) + if ((*itr)->GetTypeId() == TYPEID_PLAYER && GetCaster()->IsInRaidWith((*itr)->ToUnit())) + tempTargets.push_back((*itr)->ToUnit()); - Unit* target = Trinity::Containers::SelectRandomContainerElement(tempTargets); + if (tempTargets.empty()) + { targets.clear(); - targets.push_back(target); + FinishCast(SPELL_FAILED_DONT_REPORT); + return; } - } - void Register() override - { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_t10_restoration_4p_bonus_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY); + Unit* target = Trinity::Containers::SelectRandomContainerElement(tempTargets); + targets.clear(); + targets.push_back(target); } - }; + } - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_dru_t10_restoration_4p_bonus_SpellScript(); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_t10_restoration_4p_bonus_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY); } + }; + + SpellScript* GetSpellScript() const override + { + return new spell_dru_t10_restoration_4p_bonus_SpellScript(); + } }; class RaidCheck { - public: - explicit RaidCheck(Unit const* caster) : _caster(caster) { } +public: + explicit RaidCheck(Unit const* caster) : _caster(caster) { } - bool operator()(WorldObject* obj) const - { - if (Unit* target = obj->ToUnit()) - return !_caster->IsInRaidWith(target); + bool operator()(WorldObject* obj) const + { + if (Unit* target = obj->ToUnit()) + return !_caster->IsInRaidWith(target); - return true; - } + return true; + } - private: - Unit const* _caster; +private: + Unit const* _caster; }; // 48438 - Wild Growth class spell_dru_wild_growth : public SpellScriptLoader { - public: - spell_dru_wild_growth() : SpellScriptLoader("spell_dru_wild_growth") { } - - class spell_dru_wild_growth_SpellScript : public SpellScript - { - PrepareSpellScript(spell_dru_wild_growth_SpellScript); - - bool Validate(SpellInfo const* spellInfo) override - { - if (spellInfo->GetEffect(EFFECT_2)->IsEffect() || spellInfo->GetEffect(EFFECT_2)->CalcValue() <= 0) - return false; - return true; - } +public: + spell_dru_wild_growth() : SpellScriptLoader("spell_dru_wild_growth") { } - void FilterTargets(std::list<WorldObject*>& targets) - { - targets.remove_if(RaidCheck(GetCaster())); + class spell_dru_wild_growth_SpellScript : public SpellScript + { + PrepareSpellScript(spell_dru_wild_growth_SpellScript); - uint32 const maxTargets = uint32(GetSpellInfo()->GetEffect(EFFECT_2)->CalcValue(GetCaster())); + bool Validate(SpellInfo const* spellInfo) override + { + SpellEffectInfo const* effect2 = spellInfo->GetEffect(EFFECT_2); + if (!effect2 || effect2->IsEffect() || effect2->CalcValue() <= 0) + return false; + return true; + } - if (targets.size() > maxTargets) - { - targets.sort(Trinity::HealthPctOrderPred()); - targets.resize(maxTargets); - } + void FilterTargets(std::list<WorldObject*>& targets) + { + targets.remove_if(RaidCheck(GetCaster())); - _targets = targets; - } + uint32 const maxTargets = uint32(GetSpellInfo()->GetEffect(EFFECT_2)->CalcValue(GetCaster())); - void SetTargets(std::list<WorldObject*>& targets) + if (targets.size() > maxTargets) { - targets = _targets; + targets.sort(Trinity::HealthPctOrderPred()); + targets.resize(maxTargets); } - void Register() override - { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_wild_growth_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY); - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_wild_growth_SpellScript::SetTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ALLY); - } + _targets = targets; + } - private: - std::list<WorldObject*> _targets; - }; + void SetTargets(std::list<WorldObject*>& targets) + { + targets = _targets; + } - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_dru_wild_growth_SpellScript(); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_wild_growth_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_wild_growth_SpellScript::SetTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ALLY); } + + private: + std::list<WorldObject*> _targets; + }; + + SpellScript* GetSpellScript() const override + { + return new spell_dru_wild_growth_SpellScript(); + } }; void AddSC_druid_spell_scripts() { new spell_dru_dash(); - new spell_dru_eclipse("spell_dru_eclipse_lunar"); - new spell_dru_eclipse("spell_dru_eclipse_solar"); - new spell_dru_eclipse_energize(); + new spell_dru_flight_form(); new spell_dru_forms_trinket(); - new spell_dru_glyph_of_innervate(); - new spell_dru_glyph_of_starfire(); - new spell_dru_glyph_of_starfire_proc(); new spell_dru_idol_lifebloom(); new spell_dru_innervate(); - new spell_dru_insect_swarm(); new spell_dru_lifebloom(); new spell_dru_living_seed(); new spell_dru_living_seed_proc(); + new spell_dru_moonfire(); new spell_dru_predatory_strikes(); new spell_dru_rip(); new spell_dru_savage_defense(); new spell_dru_savage_roar(); - new spell_dru_starfall_dummy(); new spell_dru_stampede(); + new spell_dru_starfall_dummy(); + new spell_dru_sunfire(); new spell_dru_survival_instincts(); new spell_dru_swift_flight_passive(); - new spell_dru_flight_form(); - new spell_dru_typhoon(); new spell_dru_t10_restoration_4p_bonus(); new spell_dru_wild_growth(); } |