diff options
-rw-r--r-- | src/server/scripts/Spells/spell_druid.cpp | 245 |
1 files changed, 101 insertions, 144 deletions
diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index 4094e99b187..a5ba07e3ccc 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -1030,66 +1030,50 @@ public: }; // 52610 - Savage Roar -class spell_dru_savage_roar : public SpellScriptLoader +class spell_dru_savage_roar : public SpellScript { -public: - spell_dru_savage_roar() : SpellScriptLoader("spell_dru_savage_roar") { } + PrepareSpellScript(spell_dru_savage_roar); - class spell_dru_savage_roar_SpellScript : public SpellScript + SpellCastResult CheckCast() { - 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; - } + Unit* caster = GetCaster(); + if (caster->GetShapeshiftForm() != FORM_CAT_FORM) + return SPELL_FAILED_ONLY_SHAPESHIFT; - void Register() override - { - OnCheckCast += SpellCheckCastFn(spell_dru_savage_roar_SpellScript::CheckCast); - } - }; + return SPELL_CAST_OK; + } - class spell_dru_savage_roar_AuraScript : public AuraScript + void Register() override { - PrepareAuraScript(spell_dru_savage_roar_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_DRUID_SAVAGE_ROAR }); - } + OnCheckCast += SpellCheckCastFn(spell_dru_savage_roar::CheckCast); + } +}; - void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) - { - Unit* target = GetTarget(); - target->CastSpell(target, SPELL_DRUID_SAVAGE_ROAR, CastSpellExtraArgs(aurEff) - .SetOriginalCaster(GetCasterGUID())); - } +class spell_dru_savage_roar_aura : public AuraScript +{ + PrepareAuraScript(spell_dru_savage_roar_aura); - void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_SAVAGE_ROAR); - } + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo({ SPELL_DRUID_SAVAGE_ROAR }); + } - 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); - } - }; + void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + target->CastSpell(target, SPELL_DRUID_SAVAGE_ROAR, CastSpellExtraArgs(aurEff) + .SetOriginalCaster(GetCasterGUID())); + } - SpellScript* GetSpellScript() const override + void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - return new spell_dru_savage_roar_SpellScript(); + GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_SAVAGE_ROAR); } - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_dru_savage_roar_AuraScript(); + AfterEffectApply += AuraEffectApplyFn(spell_dru_savage_roar_aura::AfterApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + AfterEffectRemove += AuraEffectRemoveFn(spell_dru_savage_roar_aura::AfterRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; @@ -1251,43 +1235,32 @@ public: }; // 61336 - Survival Instincts -class spell_dru_survival_instincts : public SpellScriptLoader +class spell_dru_survival_instincts : public AuraScript { -public: - spell_dru_survival_instincts() : SpellScriptLoader("spell_dru_survival_instincts") { } + PrepareAuraScript(spell_dru_survival_instincts); - class spell_dru_survival_instincts_AuraScript : public AuraScript + bool Validate(SpellInfo const* /*spell*/) override { - PrepareAuraScript(spell_dru_survival_instincts_AuraScript); - - bool Validate(SpellInfo const* /*spell*/) override - { - return ValidateSpellInfo({ SPELL_DRUID_SURVIVAL_INSTINCTS }); - } - - void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) - { - Unit* target = GetTarget(); - CastSpellExtraArgs args(aurEff); - args.AddSpellMod(SPELLVALUE_BASE_POINT0, target->CountPctFromMaxHealth(aurEff->GetAmount())); - target->CastSpell(target, SPELL_DRUID_SURVIVAL_INSTINCTS, args); - } + return ValidateSpellInfo({ SPELL_DRUID_SURVIVAL_INSTINCTS }); + } - void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_SURVIVAL_INSTINCTS); - } + void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + CastSpellExtraArgs args(aurEff); + args.AddSpellMod(SPELLVALUE_BASE_POINT0, target->CountPctFromMaxHealth(aurEff->GetAmount())); + target->CastSpell(target, SPELL_DRUID_SURVIVAL_INSTINCTS, args); + } - 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); - } - }; + void AfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_SURVIVAL_INSTINCTS); + } - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_dru_survival_instincts_AuraScript(); + AfterEffectApply += AuraEffectApplyFn(spell_dru_survival_instincts::AfterApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); + AfterEffectRemove += AuraEffectRemoveFn(spell_dru_survival_instincts::AfterRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK); } }; @@ -1852,93 +1825,77 @@ class spell_dru_tiger_dash_aura : public AuraScript }; // 48438 - Wild Growth -class spell_dru_wild_growth : public SpellScriptLoader +class spell_dru_wild_growth : public SpellScript { -public: - spell_dru_wild_growth() : SpellScriptLoader("spell_dru_wild_growth") { } + PrepareSpellScript(spell_dru_wild_growth); - class spell_dru_wild_growth_SpellScript : public SpellScript + bool Validate(SpellInfo const* spellInfo) override { - PrepareSpellScript(spell_dru_wild_growth_SpellScript); - - bool Validate(SpellInfo const* spellInfo) override - { - if (spellInfo->GetEffects().size() <= EFFECT_2 || spellInfo->GetEffect(EFFECT_2).IsEffect() || spellInfo->GetEffect(EFFECT_2).CalcValue() <= 0) - return false; - return true; - } - - void FilterTargets(std::list<WorldObject*>& targets) - { - targets.remove_if(RaidCheck(GetCaster())); - - uint32 const maxTargets = uint32(GetEffectInfo(EFFECT_2).CalcValue(GetCaster())); + if (spellInfo->GetEffects().size() <= EFFECT_2 || spellInfo->GetEffect(EFFECT_2).IsEffect() || spellInfo->GetEffect(EFFECT_2).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(GetEffectInfo(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; + } - std::list<WorldObject*> _targets; - }; + void SetTargets(std::list<WorldObject*>& targets) + { + targets = _targets; + } - class spell_dru_wild_growth_AuraScript : public AuraScript + void Register() override { - PrepareAuraScript(spell_dru_wild_growth_AuraScript); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_wild_growth::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_wild_growth::SetTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ALLY); + } - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_DRUID_RESTORATION_T10_2P_BONUS }); - } + std::list<WorldObject*> _targets; +}; - void HandleTickUpdate(AuraEffect* aurEff) - { - Unit* caster = GetCaster(); - if (!caster) - return; +class spell_dru_wild_growth_aura : public AuraScript +{ + PrepareAuraScript(spell_dru_wild_growth_aura); - // calculate from base damage, not from aurEff->GetAmount() (already modified) - float damage = caster->CalculateSpellDamage(GetUnitOwner(), aurEff->GetSpellEffectInfo()); + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DRUID_RESTORATION_T10_2P_BONUS }); + } - // Wild Growth = first tick gains a 6% bonus, reduced by 2% each tick - float reduction = 2.f; - if (AuraEffect* bonus = caster->GetAuraEffect(SPELL_DRUID_RESTORATION_T10_2P_BONUS, EFFECT_0)) - reduction -= CalculatePct(reduction, bonus->GetAmount()); - reduction *= (aurEff->GetTickNumber() - 1); + void HandleTickUpdate(AuraEffect* aurEff) + { + Unit* caster = GetCaster(); + if (!caster) + return; - AddPct(damage, 6.f - reduction); - aurEff->SetAmount(int32(damage)); - } + // calculate from base damage, not from aurEff->GetAmount() (already modified) + float damage = caster->CalculateSpellDamage(GetUnitOwner(), aurEff->GetSpellEffectInfo()); - void Register() override - { - OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_dru_wild_growth_AuraScript::HandleTickUpdate, EFFECT_0, SPELL_AURA_PERIODIC_HEAL); - } - }; + // Wild Growth = first tick gains a 6% bonus, reduced by 2% each tick + float reduction = 2.f; + if (AuraEffect* bonus = caster->GetAuraEffect(SPELL_DRUID_RESTORATION_T10_2P_BONUS, EFFECT_0)) + reduction -= CalculatePct(reduction, bonus->GetAmount()); + reduction *= (aurEff->GetTickNumber() - 1); - SpellScript* GetSpellScript() const override - { - return new spell_dru_wild_growth_SpellScript(); + AddPct(damage, 6.f - reduction); + aurEff->SetAmount(int32(damage)); } - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_dru_wild_growth_AuraScript(); + OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_dru_wild_growth_aura::HandleTickUpdate, EFFECT_0, SPELL_AURA_PERIODIC_HEAL); } }; @@ -1971,13 +1928,13 @@ void AddSC_druid_spell_scripts() new spell_dru_predatory_strikes(); RegisterSpellScript(spell_dru_prowl); new spell_dru_rip(); - new spell_dru_savage_roar(); + RegisterSpellAndAuraScriptPair(spell_dru_savage_roar, spell_dru_savage_roar_aura); RegisterSpellScript(spell_dru_skull_bash); new spell_dru_stampede(); RegisterSpellScript(spell_dru_stampeding_roar); new spell_dru_starfall_dummy(); new spell_dru_sunfire(); - new spell_dru_survival_instincts(); + RegisterAuraScript(spell_dru_survival_instincts); new spell_dru_swift_flight_passive(); new spell_dru_t3_6p_bonus(); new spell_dru_t3_8p_bonus(); @@ -1990,5 +1947,5 @@ void AddSC_druid_spell_scripts() new spell_dru_travel_form(); new spell_dru_travel_form_dummy(); RegisterSpellAndAuraScriptPair(spell_dru_tiger_dash, spell_dru_tiger_dash_aura); - new spell_dru_wild_growth(); + RegisterSpellAndAuraScriptPair(spell_dru_wild_growth, spell_dru_wild_growth_aura); } |