aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Spells
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/scripts/Spells')
-rw-r--r--src/server/scripts/Spells/spell_druid.cpp41
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp2
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);