From 33fbd7c7736bfe061a10e529a73e243074c90fa8 Mon Sep 17 00:00:00 2001 From: ariel- Date: Fri, 15 Dec 2017 19:58:12 -0300 Subject: Core/Scripts: fix drink auras (cherry picked from commit 5fc4d36a1fd8214a0b52ba571b2e1b9c6afef79a) --- src/server/scripts/Spells/spell_generic.cpp | 40 +++++++++++++++++++---------- 1 file changed, 26 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 0f32bd7278d..44ffcc694d2 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -227,27 +227,38 @@ class spell_gen_arena_drink : public AuraScript return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER; } - void CalcPeriodic(AuraEffect const* aurEff, bool& isPeriodic, int32& /*amplitude*/) + bool Validate(SpellInfo const* spellInfo) override + { + if (!spellInfo->GetEffect(EFFECT_0)->IsAura() || spellInfo->GetEffect(EFFECT_0)->ApplyAuraName != SPELL_AURA_MOD_POWER_REGEN) + { + TC_LOG_ERROR("spells", "Aura %d structure has been changed - first aura is no longer SPELL_AURA_MOD_POWER_REGEN", GetId()); + return false; + } + + return true; + } + + void CalcPeriodic(AuraEffect const* /*aurEff*/, bool& isPeriodic, int32& /*amplitude*/) { // Get SPELL_AURA_MOD_POWER_REGEN aura from spell AuraEffect* regen = GetAura()->GetEffect(EFFECT_0); if (!regen) return; - if (regen->GetAuraType() != SPELL_AURA_MOD_POWER_REGEN) - { + // default case - not in arena + if (!GetCaster()->ToPlayer()->InArena()) isPeriodic = false; - TC_LOG_ERROR("spells", "Aura %d structure has been changed - first aura is no longer SPELL_AURA_MOD_POWER_REGEN", GetId()); - } - else - { - // default case - not in arena - if (!GetCaster()->ToPlayer()->InArena()) - { - regen->ChangeAmount(aurEff->GetAmount()); - isPeriodic = false; - } - } + } + + void CalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + AuraEffect* regen = GetAura()->GetEffect(EFFECT_0); + if (!regen) + return; + + // default case - not in arena + if (!GetCaster()->ToPlayer()->InArena()) + regen->ChangeAmount(amount); } void UpdatePeriodic(AuraEffect* aurEff) @@ -287,6 +298,7 @@ class spell_gen_arena_drink : public AuraScript void Register() override { DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_gen_arena_drink::CalcPeriodic, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY); + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_arena_drink::CalcAmount, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY); OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_gen_arena_drink::UpdatePeriodic, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY); } }; -- cgit v1.2.3