diff options
| author | Shauren <shauren.trinity@gmail.com> | 2020-06-15 00:26:08 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-15 00:26:08 +0200 |
| commit | c715e635cf3feb50ac61d30659e614aaa2cc0c63 (patch) | |
| tree | 5af30c80f8b1df3f60852adde4680951f6f55442 /src/server/scripts/Spells | |
| parent | abff505a6eaf3e649be506c802b80eed3dd35f3a (diff) | |
| parent | cf88f0a9735f9ba010a4ae46e848c8f1a86e17fa (diff) | |
Merge pull request #24554 from funjoker/cherry-picks
Diffstat (limited to 'src/server/scripts/Spells')
| -rw-r--r-- | src/server/scripts/Spells/spell_druid.cpp | 41 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 2 |
2 files changed, 41 insertions, 2 deletions
diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index 48d63353a34..b0e52234c13 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -66,6 +66,7 @@ enum DruidSpells SPELL_DRUID_REJUVENATION_T10_PROC = 70691, SPELL_DRUID_BALANCE_T10_BONUS = 70718, SPELL_DRUID_BALANCE_T10_BONUS_PROC = 70721, + SPELL_DRUID_RESTORATION_T10_2P_BONUS = 70658, SPELL_DRUID_SUNFIRE_DAMAGE = 164815, SPELL_DRUID_SURVIVAL_INSTINCTS = 50322 }; @@ -1434,14 +1435,52 @@ public: 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() diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 2824a5e637b..de38535a865 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -3704,7 +3704,7 @@ class spell_gen_gm_freeze : public SpellScriptLoader if (Player* player = GetTarget()->ToPlayer()) { // stop combat + make player unattackable + duel stop + stop some spells - player->SetFaction(35); + player->SetFaction(FACTION_FRIENDLY); player->CombatStop(); if (player->IsNonMeleeSpellCast(true)) player->InterruptNonMeleeSpells(true); |
