Core/Scripts: moved Wild Growth calculation to script and fixed formula

Thanks ccrs for the formula
This commit is contained in:
ariel-
2017-06-02 14:12:53 -03:00
parent 9c24ec5c96
commit 96ee23487f
2 changed files with 41 additions and 15 deletions

View File

@@ -5869,19 +5869,6 @@ void AuraEffect::HandlePeriodicHealAurasTick(Unit* target, Unit* caster) const
}
else
{
// Wild Growth = amount + (6 - 2*doneTicks) * ticks* amount / 100
if (m_spellInfo->SpellFamilyName == SPELLFAMILY_DRUID && m_spellInfo->SpellIconID == 2864)
{
int32 addition = int32(float(damage * GetTotalTicks()) * ((6-float(2*(GetTickNumber()-1)))/100));
// Item - Druid T10 Restoration 2P Bonus
if (AuraEffect* aurEff = caster->GetAuraEffect(70658, 0))
// divided by 50 instead of 100 because calculated as for every 2 tick
addition += abs(int32((addition * aurEff->GetAmount()) / 50));
damage += addition;
}
if (isAreaAura)
damage = caster->SpellHealingBonusDone(target, GetSpellInfo(), damage, DOT, GetBase()->GetStackAmount()) * caster->SpellHealingPctDone(target, m_spellInfo);
else

View File

@@ -85,7 +85,8 @@ enum DruidSpells
SPELL_DRUID_REJUVENATION_T10_PROC = 70691,
SPELL_DRUID_BALANCE_T10_BONUS = 70718,
SPELL_DRUID_BALANCE_T10_BONUS_PROC = 70721,
SPELL_DRUID_BARKSKIN_01 = 63058
SPELL_DRUID_BARKSKIN_01 = 63058,
SPELL_DRUID_RESTORATION_T10_2P_BONUS = 70658
};
// 22812 - Barkskin
@@ -2264,14 +2265,52 @@ class spell_dru_wild_growth : public SpellScriptLoader
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_wild_growth_SpellScript::SetTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ALLY);
}
private:
std::list<WorldObject*> _targets;
};
class spell_dru_wild_growth_AuraScript : public AuraScript
{
PrepareAuraScript(spell_dru_wild_growth_AuraScript);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_DRUID_RESTORATION_T10_2P_BONUS });
}
void HandleTickUpdate(AuraEffect* aurEff)
{
Unit* caster = GetCaster();
if (!caster)
return;
// calculate from base damage, not from aurEff->GetAmount() (already modified)
float damage = caster->CalculateSpellDamage(GetUnitOwner(), GetSpellInfo(), aurEff->GetEffIndex());
// 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);
AddPct(damage, 6.f - reduction);
aurEff->SetAmount(int32(damage));
}
void Register() override
{
OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_dru_wild_growth_AuraScript::HandleTickUpdate, EFFECT_0, SPELL_AURA_PERIODIC_HEAL);
}
};
SpellScript* GetSpellScript() const override
{
return new spell_dru_wild_growth_SpellScript();
}
AuraScript* GetAuraScript() const override
{
return new spell_dru_wild_growth_AuraScript();
}
};
void AddSC_druid_spell_scripts()