diff options
Diffstat (limited to 'src')
4 files changed, 81 insertions, 89 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index d9cd8dc70e5..3675a9980a6 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -5445,32 +5445,6 @@ void AuraEffect::HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const caster->SpellHitResult(target, GetSpellInfo(), false) != SPELL_MISS_NONE) return; - // some auras remove at specific health level or more - if (GetAuraType() == SPELL_AURA_PERIODIC_DAMAGE) - { - switch (GetSpellInfo()->Id) - { - case 43093: case 31956: case 38801: // Grievous Wound - case 35321: case 38363: case 39215: // Gushing Wound - if (target->IsFullHealth()) - { - target->RemoveAurasDueToSpell(GetSpellInfo()->Id); - return; - } - break; - case 38772: // Grievous Wound - { - uint32 percent = GetSpellInfo()->Effects[EFFECT_1].CalcValue(caster); - if (!target->HealthBelowPct(percent)) - { - target->RemoveAurasDueToSpell(GetSpellInfo()->Id); - return; - } - break; - } - } - } - CleanDamage cleanDamage = CleanDamage(0, 0, BASE_ATTACK, MELEE_HIT_NORMAL); // AOE spells are not affected by the new periodic system. diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp index bd73ab93c6d..583ae0ed2b6 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp @@ -233,36 +233,6 @@ class npc_geist_ambusher : public CreatureScript } }; -class spell_trash_npc_glacial_strike : public SpellScriptLoader -{ - public: - spell_trash_npc_glacial_strike() : SpellScriptLoader("spell_trash_npc_glacial_strike") { } - - class spell_trash_npc_glacial_strike_AuraScript : public AuraScript - { - PrepareAuraScript(spell_trash_npc_glacial_strike_AuraScript); - - void PeriodicTick(AuraEffect const* /*aurEff*/) - { - if (GetTarget()->IsFullHealth()) - { - GetTarget()->RemoveAura(GetId(), ObjectGuid::Empty, 0, AURA_REMOVE_BY_ENEMY_SPELL); - PreventDefaultAction(); - } - } - - void Register() override - { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_trash_npc_glacial_strike_AuraScript::PeriodicTick, EFFECT_2, SPELL_AURA_PERIODIC_DAMAGE_PERCENT); - } - }; - - AuraScript* GetAuraScript() const override - { - return new spell_trash_npc_glacial_strike_AuraScript(); - } -}; - class npc_pit_of_saron_icicle : public CreatureScript { public: @@ -390,7 +360,6 @@ void AddSC_pit_of_saron() new npc_iceborn_protodrake(); new npc_geist_ambusher(); new npc_pit_of_saron_icicle(); - new spell_trash_npc_glacial_strike(); new spell_pos_ice_shards(); new at_pit_cavern_entrance(); new at_pit_cavern_end(); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp index a18572992e9..8dfe782bea0 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp @@ -2108,37 +2108,6 @@ class spell_thorim_activate_lightning_orb_periodic : public SpellScriptLoader } }; -// 62331, 62418 - Impale -class spell_iron_ring_guard_impale : public SpellScriptLoader -{ - public: - spell_iron_ring_guard_impale() : SpellScriptLoader("spell_iron_ring_guard_impale") { } - - class spell_iron_ring_guard_impale_AuraScript : public AuraScript - { - PrepareAuraScript(spell_iron_ring_guard_impale_AuraScript); - - void PeriodicTick(AuraEffect const* /*aurEff*/) - { - if (GetTarget()->HealthAbovePct(GetSpellInfo()->Effects[EFFECT_1].CalcValue())) - { - Remove(AURA_REMOVE_BY_ENEMY_SPELL); - PreventDefaultAction(); - } - } - - void Register() override - { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_iron_ring_guard_impale_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); - } - }; - - AuraScript* GetAuraScript() const override - { - return new spell_iron_ring_guard_impale_AuraScript(); - } -}; - class achievement_dont_stand_in_the_lightning : public AchievementCriteriaScript { public: @@ -2213,7 +2182,6 @@ void AddSC_boss_thorim() new spell_thorim_arena_leap(); new spell_thorim_runic_smash(); new spell_thorim_activate_lightning_orb_periodic(); - new spell_iron_ring_guard_impale(); new achievement_dont_stand_in_the_lightning(); new achievement_lose_your_illusion(); new achievement_i_ll_take_you_all_on(); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 05fbc6b3423..bc3ce8a88a7 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -2454,6 +2454,84 @@ class spell_gen_remove_flight_auras : public SpellScript } }; +// 38772 Grievous Wound +// 43937 Grievous Wound +// 62331 Impale +// 62418 Impale +class spell_gen_remove_on_health_pct : public AuraScript +{ + PrepareAuraScript(spell_gen_remove_on_health_pct); + + void PeriodicTick(AuraEffect const* /*aurEff*/) + { + // they apply damage so no need to check for ticks here + + if (GetTarget()->HealthAbovePct(GetSpellInfo()->Effects[EFFECT_1].CalcValue())) + { + Remove(AURA_REMOVE_BY_ENEMY_SPELL); + PreventDefaultAction(); + } + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_remove_on_health_pct::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); + } +}; + +// 31956 Grievous Wound +// 38801 Grievous Wound +// 43093 Grievous Throw +// 58517 Grievous Wound +// 59262 Grievous Wound +class spell_gen_remove_on_full_health : public AuraScript +{ + PrepareAuraScript(spell_gen_remove_on_full_health); + + void PeriodicTick(AuraEffect const* aurEff) + { + // if it has only periodic effect, allow 1 tick + bool onlyEffect = !GetSpellInfo()->Effects[EFFECT_1].IsEffect() && !GetSpellInfo()->Effects[EFFECT_2].IsEffect(); + if (onlyEffect && aurEff->GetTickNumber() <= 1) + return; + + if (GetTarget()->IsFullHealth()) + { + Remove(AURA_REMOVE_BY_ENEMY_SPELL); + PreventDefaultAction(); + } + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_remove_on_full_health::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); + } +}; + +// 70292 - Glacial Strike +// 71316 - Glacial Strike +// 71317 - Glacial Strike +class spell_gen_remove_on_full_health_pct : public AuraScript +{ + PrepareAuraScript(spell_gen_remove_on_full_health_pct); + + void PeriodicTick(AuraEffect const* /*aurEff*/) + { + // they apply damage so no need to check for ticks here + + if (GetTarget()->IsFullHealth()) + { + Remove(AURA_REMOVE_BY_ENEMY_SPELL); + PreventDefaultAction(); + } + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_remove_on_full_health_pct::PeriodicTick, EFFECT_2, SPELL_AURA_PERIODIC_DAMAGE_PERCENT); + } +}; + enum Replenishment { SPELL_REPLENISHMENT = 57669, @@ -3648,6 +3726,9 @@ void AddSC_generic_spell_scripts() RegisterSpellScript(spell_gen_profession_research); RegisterSpellScript(spell_gen_remove_flight_auras); RegisterSpellAndAuraScriptPair(spell_gen_replenishment, spell_gen_replenishment_aura); + RegisterAuraScript(spell_gen_remove_on_health_pct); + RegisterAuraScript(spell_gen_remove_on_full_health); + RegisterAuraScript(spell_gen_remove_on_full_health_pct); RegisterSpellScript(spell_gen_seaforium_blast); RegisterSpellScript(spell_gen_spectator_cheer_trigger); RegisterSpellScript(spell_gen_spirit_healer_res); |