aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Spells
diff options
context:
space:
mode:
authorOvahlord <dreadkiller@gmx.de>2024-03-13 12:25:37 +0100
committerOvahlord <dreadkiller@gmx.de>2024-03-13 12:25:37 +0100
commit51daca7cbfab07a8e0e044f70e24d2aa0e31a750 (patch)
tree973b2abb9b7afaa447387884613c2e347ed66e2b /src/server/scripts/Spells
parent4c5ed71edd7f849b2507203f6b9d832fa75b4464 (diff)
Scripts: dropped most post Cataclysm PvE scripts
Diffstat (limited to 'src/server/scripts/Spells')
-rw-r--r--src/server/scripts/Spells/spell_azerite.cpp646
-rw-r--r--src/server/scripts/Spells/spell_dh.cpp514
-rw-r--r--src/server/scripts/Spells/spell_evoker.cpp214
-rw-r--r--src/server/scripts/Spells/spell_monk.cpp553
-rw-r--r--src/server/scripts/Spells/spell_script_loader.cpp8
5 files changed, 0 insertions, 1935 deletions
diff --git a/src/server/scripts/Spells/spell_azerite.cpp b/src/server/scripts/Spells/spell_azerite.cpp
deleted file mode 100644
index 760bcaa515a..00000000000
--- a/src/server/scripts/Spells/spell_azerite.cpp
+++ /dev/null
@@ -1,646 +0,0 @@
-/*
- * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "ScriptMgr.h"
-#include "AzeritePackets.h"
-#include "Containers.h"
-#include "Player.h"
-#include "Spell.h"
-#include "SpellAuraEffects.h"
-#include "SpellInfo.h"
-#include "SpellMgr.h"
-#include "SpellScript.h"
-
-class spell_azerite_gen_aura_calc_from_2nd_effect_triggered_spell : public AuraScript
-{
- bool Validate(SpellInfo const* spellInfo) override
- {
- return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }) && ValidateSpellInfo({ spellInfo->GetEffect(EFFECT_1).TriggerSpell });
- }
-
- void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
- {
- if (Unit* caster = GetCaster())
- {
- amount = 0;
- canBeRecalculated = false;
- for (auto const& [_, aurApp] : Trinity::Containers::MapEqualRange(caster->GetAppliedAuras(), GetEffectInfo(EFFECT_1).TriggerSpell))
- if (aurApp->HasEffect(EFFECT_0))
- amount += aurApp->GetBase()->GetEffect(EFFECT_0)->GetAmount();
- }
- }
-
- void Register() override
- {
- DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_azerite_gen_aura_calc_from_2nd_effect_triggered_spell::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_RATING);
- }
-};
-
-// 270658 - Azerite Fortification
-class spell_item_azerite_fortification : public AuraScript
-{
- bool CheckProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
- {
- Spell const* procSpell = eventInfo.GetProcSpell();
- if (!procSpell)
- return false;
-
- return procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_STUN)
- || procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_ROOT)
- || procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_ROOT_2)
- || procSpell->GetSpellInfo()->HasEffect(SPELL_EFFECT_KNOCK_BACK);
- }
-
- void Register() override
- {
- DoCheckEffectProc += AuraCheckEffectProcFn(spell_item_azerite_fortification::CheckProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
- }
-};
-
-enum StrengthInNumbers
-{
- SPELL_STRENGTH_IN_NUMBERS_TRAIT = 271546,
- SPELL_STRENGTH_IN_NUMBERS_BUFF = 271550
-};
-
-// 271548 - Strength in Numbers
-class spell_item_strength_in_numbers : public SpellScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_STRENGTH_IN_NUMBERS_TRAIT, SPELL_STRENGTH_IN_NUMBERS_BUFF });
- }
-
- void TriggerHealthBuff()
- {
- if (AuraEffect const* trait = GetCaster()->GetAuraEffect(SPELL_STRENGTH_IN_NUMBERS_TRAIT, EFFECT_0, GetCaster()->GetGUID()))
- if (int64 enemies = GetUnitTargetCountForEffect(EFFECT_0))
- GetCaster()->CastSpell(GetCaster(), SPELL_STRENGTH_IN_NUMBERS_BUFF, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
- .AddSpellMod(SPELLVALUE_BASE_POINT0, trait->GetAmount())
- .AddSpellMod(SPELLVALUE_AURA_STACK, enemies));
- }
-
- void Register() override
- {
- AfterHit += SpellHitFn(spell_item_strength_in_numbers::TriggerHealthBuff);
- }
-};
-
-enum BlessedPortents
-{
- SPELL_BLESSED_PORTENTS_TRAIT = 267889,
- SPELL_BLESSED_PORTENTS_HEAL = 280052,
-};
-
-// 271843 - Blessed Portents
-class spell_item_blessed_portents : public AuraScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_BLESSED_PORTENTS_TRAIT, SPELL_BLESSED_PORTENTS_HEAL });
- }
-
- void CheckProc(AuraEffect* /*aurEff*/, DamageInfo& dmgInfo, uint32& /*absorbAmount*/)
- {
- if (GetTarget()->HealthBelowPctDamaged(50, dmgInfo.GetDamage()))
- {
- if (Unit* caster = GetCaster())
- if (AuraEffect const* trait = caster->GetAuraEffect(SPELL_BLESSED_PORTENTS_TRAIT, EFFECT_0, caster->GetGUID()))
- caster->CastSpell(GetTarget(), SPELL_BLESSED_PORTENTS_HEAL, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
- .AddSpellMod(SPELLVALUE_BASE_POINT0, trait->GetAmount()));
- }
- else
- PreventDefaultAction();
- }
-
- void Register() override
- {
- OnEffectAbsorb += AuraEffectAbsorbFn(spell_item_blessed_portents::CheckProc, EFFECT_0);
- }
-};
-
-enum ConcentratedMending
-{
- SPELL_CONCENTRATED_MENDING_TRAIT = 267882,
-};
-
-// 272260 - Concentrated Mending
-class spell_item_concentrated_mending : public AuraScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_CONCENTRATED_MENDING_TRAIT });
- }
-
- void RecalculateHealAmount(AuraEffect* aurEff)
- {
- if (Unit const* caster = GetCaster())
- if (AuraEffect const* trait = caster->GetAuraEffect(SPELL_CONCENTRATED_MENDING_TRAIT, EFFECT_0, caster->GetGUID()))
- aurEff->ChangeAmount(trait->GetAmount() * aurEff->GetTickNumber());
- }
-
- void Register() override
- {
- OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_item_concentrated_mending::RecalculateHealAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL);
- }
-};
-
-enum BracingChill
-{
- SPELL_BRACING_CHILL_TRAIT = 267884,
- SPELL_BRACING_CHILL = 272276,
- SPELL_BRACING_CHILL_HEAL = 272428,
- SPELL_BRACING_CHILL_SEARCH_JUMP_TARGET = 272436,
-};
-
-// 272276 - Bracing Chill
-class spell_item_bracing_chill_proc : public AuraScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_BRACING_CHILL_TRAIT, SPELL_BRACING_CHILL_HEAL, SPELL_BRACING_CHILL_SEARCH_JUMP_TARGET });
- }
-
- bool CheckHealCaster(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
- {
- return GetCasterGUID() == eventInfo.GetActor()->GetGUID();
- }
-
- void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& procInfo)
- {
- Unit* caster = procInfo.GetActor();
- if (!caster)
- return;
-
- if (AuraEffect const* trait = caster->GetAuraEffect(SPELL_BRACING_CHILL_TRAIT, EFFECT_0, caster->GetGUID()))
- caster->CastSpell(procInfo.GetProcTarget(), SPELL_BRACING_CHILL_HEAL,
- CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT0, trait->GetAmount()));
-
- if (GetStackAmount() > 1)
- caster->CastSpell(nullptr, SPELL_BRACING_CHILL_SEARCH_JUMP_TARGET,
- CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_AURA_STACK, GetStackAmount() - 1));
-
- Remove();
- }
-
- void Register() override
- {
- DoCheckEffectProc += AuraCheckEffectProcFn(spell_item_bracing_chill_proc::CheckHealCaster, EFFECT_0, SPELL_AURA_DUMMY);
- AfterEffectProc += AuraEffectProcFn(spell_item_bracing_chill_proc::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
- }
-};
-
-// 272436 - Bracing Chill
-class spell_item_bracing_chill_search_jump_target : public SpellScript
-{
- void FilterTarget(std::list<WorldObject*>& targets)
- {
- if (targets.empty())
- return;
-
- std::list<WorldObject*> copy = targets;
- Trinity::Containers::RandomResize(copy, [&](WorldObject* target)
- {
- return target->IsUnit() && !target->ToUnit()->HasAura(SPELL_BRACING_CHILL, GetCaster()->GetGUID());
- }, 1);
-
- if (!copy.empty())
- {
- // found a preferred target, use that
- targets.swap(copy);
- return;
- }
-
- WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
- targets.clear();
- targets.push_back(target);
- }
-
- void MoveAura(SpellEffIndex /*effIndex*/)
- {
- GetCaster()->CastSpell(GetHitUnit(), SPELL_BRACING_CHILL,
- CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_AURA_STACK, GetSpellValue()->AuraStackAmount));
- }
-
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_item_bracing_chill_search_jump_target::FilterTarget, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY);
- OnEffectHitTarget += SpellEffectFn(spell_item_bracing_chill_search_jump_target::MoveAura, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
-};
-
-// 272837 - Trample the Weak
-class spell_item_trample_the_weak : public AuraScript
-{
- bool CheckHealthPct(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
- {
- return eventInfo.GetActor()->GetHealthPct() > eventInfo.GetActionTarget()->GetHealthPct();
- }
-
- void Register() override
- {
- DoCheckEffectProc += AuraCheckEffectProcFn(spell_item_trample_the_weak::CheckHealthPct, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
- }
-};
-
-// 272892 - Wracking Brilliance
-class spell_item_wracking_brilliance : public AuraScript
-{
- enum
- {
- SPELL_AGONY_SOUL_SHARD_GAIN = 210067
- };
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_AGONY_SOUL_SHARD_GAIN });
- }
-
- bool CheckProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
- {
- SpellInfo const* spellInfo = eventInfo.GetSpellInfo();
- if (!spellInfo)
- return false;
-
- if (spellInfo->Id != SPELL_AGONY_SOUL_SHARD_GAIN)
- return false;
-
- _canTrigger = !_canTrigger; // every other soul shard gain
- return _canTrigger;
- }
-
- void Register() override
- {
- DoCheckEffectProc += AuraCheckEffectProcFn(spell_item_wracking_brilliance::CheckProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
- }
-
- bool _canTrigger = true;
-};
-
-enum OrbitalPrecision
-{
- SPELL_MAGE_FROZEN_ORB = 84714
-};
-
-// 275514 - Orbital Precision
-class spell_item_orbital_precision : public AuraScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_MAGE_FROZEN_ORB });
- }
-
- bool CheckFrozenOrbActive(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
- {
- return eventInfo.GetActor()->GetAreaTrigger(SPELL_MAGE_FROZEN_ORB) != nullptr;
- }
-
- void Register() override
- {
- DoCheckEffectProc += AuraCheckEffectProcFn(spell_item_orbital_precision::CheckFrozenOrbActive, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
- }
-};
-
-enum BlurOfTalons
-{
- SPELL_HUNTER_COORDINATED_ASSAULT = 266779
-};
-
-// 277966 - Blur of Talons
-class spell_item_blur_of_talons : public AuraScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_HUNTER_COORDINATED_ASSAULT });
- }
-
- bool CheckCoordinatedAssaultActive(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
- {
- return eventInfo.GetActor()->HasAura(SPELL_HUNTER_COORDINATED_ASSAULT, eventInfo.GetActor()->GetGUID());
- }
-
- void Register() override
- {
- DoCheckEffectProc += AuraCheckEffectProcFn(spell_item_blur_of_talons::CheckCoordinatedAssaultActive, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
- }
-};
-
-// 278519 - Divine Right
-class spell_item_divine_right : public AuraScript
-{
- bool CheckHealthPct(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
- {
- return eventInfo.GetProcTarget()->HasAuraState(AURA_STATE_WOUNDED_20_PERCENT, eventInfo.GetSpellInfo(), eventInfo.GetActor());
- }
-
- void Register() override
- {
- DoCheckEffectProc += AuraCheckEffectProcFn(spell_item_divine_right::CheckHealthPct, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
- }
-};
-
-// 280409 - Blood Rite
-class spell_item_blood_rite : public AuraScript
-{
- void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& /*procInfo*/)
- {
- RefreshDuration();
- }
-
- void Register() override
- {
- AfterEffectProc += AuraEffectProcFn(spell_item_blood_rite::HandleProc, EFFECT_1, SPELL_AURA_DUMMY);
- }
-};
-
-// 281843 - Tradewinds
-class spell_item_tradewinds : public AuraScript
-{
- enum
- {
- SPELL_TRADEWINDS_ALLY_BUFF = 281844
- };
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_TRADEWINDS_ALLY_BUFF });
- }
-
- void HandleRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
- {
- if (AuraEffect const* trait = GetTarget()->GetAuraEffect(GetEffectInfo(EFFECT_1).TriggerSpell, EFFECT_1))
- GetTarget()->CastSpell(nullptr, SPELL_TRADEWINDS_ALLY_BUFF,
- CastSpellExtraArgs(aurEff).AddSpellMod(SPELLVALUE_BASE_POINT0, trait->GetAmount()));
- }
-
- void Register() override
- {
- AfterEffectRemove += AuraEffectRemoveFn(spell_item_tradewinds::HandleRemove, EFFECT_0, SPELL_AURA_MOD_RATING, AURA_EFFECT_HANDLE_REAL);
- }
-};
-
-// 287379 - Bastion of Might
-class spell_item_bastion_of_might : public SpellScript
-{
- enum
- {
- SPELL_WARRIOR_IGNORE_PAIN = 190456
- };
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_WARRIOR_IGNORE_PAIN });
- }
-
- void TriggerIgnorePain()
- {
- GetCaster()->CastSpell(GetCaster(), SPELL_WARRIOR_IGNORE_PAIN, GetSpell());
- }
-
- void Register() override
- {
- AfterHit += SpellHitFn(spell_item_bastion_of_might::TriggerIgnorePain);
- }
-};
-
-// 287650 - Echoing Blades
-class spell_item_echoing_blades : public AuraScript
-{
- void PrepareProc(ProcEventInfo& eventInfo)
- {
- if (eventInfo.GetProcSpell())
- {
- if (eventInfo.GetProcSpell()->m_castId != _lastFanOfKnives)
- GetEffect(EFFECT_0)->RecalculateAmount();
-
- _lastFanOfKnives = eventInfo.GetProcSpell()->m_castId;
- }
- }
-
- bool CheckFanOfKnivesCounter(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
- {
- return aurEff->GetAmount() > 0;
- }
-
- void ReduceCounter(AuraEffect* aurEff, ProcEventInfo& /*procInfo*/)
- {
- aurEff->SetAmount(aurEff->GetAmount() - 1);
- }
-
- void Register() override
- {
- DoPrepareProc += AuraProcFn(spell_item_echoing_blades::PrepareProc);
- DoCheckEffectProc += AuraCheckEffectProcFn(spell_item_echoing_blades::CheckFanOfKnivesCounter, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
- AfterEffectProc += AuraEffectProcFn(spell_item_echoing_blades::ReduceCounter, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
- }
-
- ObjectGuid _lastFanOfKnives;
-};
-
-// 287653 - Echoing Blades
-class spell_item_echoing_blades_damage : public SpellScript
-{
- enum
- {
- SPELL_ECHOING_BLADES_TRAIT = 287649
- };
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellEffect({ { SPELL_ECHOING_BLADES_TRAIT, EFFECT_2 } });
- }
-
- void CalculateDamage(Unit const* /*victim*/, int32& damage, int32& /*flatMod*/, float& /*pctMod*/) const
- {
- if (AuraEffect const* trait = GetCaster()->GetAuraEffect(SPELL_ECHOING_BLADES_TRAIT, EFFECT_2))
- damage = trait->GetAmount() * 2;
- }
-
- void ForceCritical(Unit const* /*victim*/, float& critChance)
- {
- critChance = 100.0f;
- }
-
- void Register() override
- {
- CalcDamage += SpellCalcDamageFn(spell_item_echoing_blades_damage::CalculateDamage);
- OnCalcCritChance += SpellOnCalcCritChanceFn(spell_item_echoing_blades_damage::ForceCritical);
- }
-};
-
-// 288882 - Hour of Reaping
-class spell_item_hour_of_reaping : public AuraScript
-{
- enum
- {
- SPELL_DH_SOUL_BARRIER = 263648
- };
-
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_DH_SOUL_BARRIER });
- }
-
- bool CheckProc(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/)
- {
- return GetStackAmount() == GetAura()->CalcMaxStackAmount();
- }
-
- void TriggerSoulBarrier(AuraEffect* aurEff, ProcEventInfo& /*procInfo*/)
- {
- GetTarget()->CastSpell(GetTarget(), SPELL_DH_SOUL_BARRIER, aurEff);
- }
-
- void Register() override
- {
- DoCheckEffectProc += AuraCheckEffectProcFn(spell_item_hour_of_reaping::CheckProc, EFFECT_0, SPELL_AURA_DUMMY);
- AfterEffectProc += AuraEffectProcFn(spell_item_hour_of_reaping::TriggerSoulBarrier, EFFECT_0, SPELL_AURA_DUMMY);
- }
-};
-
-// 304086 - Azerite Fortification
-class spell_item_conflict_wearer_on_stun_proc : public AuraScript
-{
- bool CheckProc(AuraEffect const* /*aurEff*/, ProcEventInfo& eventInfo)
- {
- Spell const* procSpell = eventInfo.GetProcSpell();
- if (!procSpell)
- return false;
-
- return procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_STUN)
- || procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_STUN_DISABLE_GRAVITY);
- }
-
- void Register() override
- {
- DoCheckEffectProc += AuraCheckEffectProcFn(spell_item_conflict_wearer_on_stun_proc::CheckProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
- }
-};
-
-// 305723 - Strife (Azerite Essence)
-class spell_item_conflict_rank3 : public AuraScript
-{
- bool CheckProc(ProcEventInfo& eventInfo)
- {
- if (eventInfo.GetHitMask() & (PROC_HIT_INTERRUPT | PROC_HIT_DISPEL))
- return true;
-
- Spell const* procSpell = eventInfo.GetProcSpell();
- if (!procSpell)
- return false;
-
- bool isCrowdControl = procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_CONFUSE)
- || procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_FEAR)
- || procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_STUN)
- || procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_PACIFY)
- || procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_ROOT)
- || procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_SILENCE)
- || procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_PACIFY_SILENCE)
- || procSpell->GetSpellInfo()->HasAura(SPELL_AURA_MOD_ROOT_2);
-
- if (!isCrowdControl)
- return false;
-
- return eventInfo.GetActionTarget()->HasAura([&](Aura const* aura) { return aura->GetCastId() == procSpell->m_castId; });
- }
-
- void Register() override
- {
- DoCheckProc += AuraCheckProcFn(spell_item_conflict_rank3::CheckProc);
- }
-};
-
-// 277253 - Heart of Azeroth
-class spell_item_heart_of_azeroth : public AuraScript
-{
- void SetEquippedFlag(AuraEffect const* /*effect*/, AuraEffectHandleModes /*mode*/)
- {
- SetState(true);
- }
-
- void ClearEquippedFlag(AuraEffect const* /*effect*/, AuraEffectHandleModes /*mode*/)
- {
- SetState(false);
- }
-
- void SetState(bool equipped) const
- {
- if (Player* target = GetTarget()->ToPlayer())
- {
- target->ApplyAllAzeriteEmpoweredItemMods(equipped);
-
- WorldPackets::Azerite::PlayerAzeriteItemEquippedStatusChanged statusChanged;
- statusChanged.IsHeartEquipped = equipped;
- target->SendDirectMessage(statusChanged.Write());
- }
- }
-
- void Register() override
- {
- OnEffectApply += AuraEffectApplyFn(spell_item_heart_of_azeroth::SetEquippedFlag, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
- OnEffectRemove += AuraEffectRemoveFn(spell_item_heart_of_azeroth::ClearEquippedFlag, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
- }
-};
-
-// 315176 - Grasping Tendrils
-class spell_item_corruption_grasping_tendrils : public AuraScript
-{
- bool Load() override
- {
- return GetUnitOwner()->IsPlayer();
- }
-
- void CalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
- {
- Player* player = GetUnitOwner()->ToPlayer();
- amount = std::clamp(10.0f + player->GetRatingBonusValue(CR_CORRUPTION) - player->GetRatingBonusValue(CR_CORRUPTION_RESISTANCE), 0.0f, 99.0f);
- canBeRecalculated = false;
- }
-
- void Register() override
- {
- DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_item_corruption_grasping_tendrils::CalcAmount, EFFECT_0, SPELL_AURA_MOD_DECREASE_SPEED);
- }
-};
-
-void AddSC_azerite_item_spell_scripts()
-{
- RegisterSpellScript(spell_azerite_gen_aura_calc_from_2nd_effect_triggered_spell);
- RegisterSpellScript(spell_item_azerite_fortification);
- RegisterSpellScript(spell_item_strength_in_numbers);
- RegisterSpellScript(spell_item_blessed_portents);
- RegisterSpellScript(spell_item_concentrated_mending);
- RegisterSpellScript(spell_item_bracing_chill_proc);
- RegisterSpellScript(spell_item_bracing_chill_search_jump_target);
- RegisterSpellScript(spell_item_trample_the_weak);
- RegisterSpellScript(spell_item_wracking_brilliance);
- RegisterSpellScript(spell_item_orbital_precision);
- RegisterSpellScript(spell_item_blur_of_talons);
- RegisterSpellScript(spell_item_divine_right);
- RegisterSpellScript(spell_item_blood_rite);
- RegisterSpellScript(spell_item_tradewinds);
- RegisterSpellScript(spell_item_bastion_of_might);
- RegisterSpellScript(spell_item_echoing_blades);
- RegisterSpellScript(spell_item_echoing_blades_damage);
- RegisterSpellScript(spell_item_hour_of_reaping);
- RegisterSpellScript(spell_item_conflict_wearer_on_stun_proc);
- RegisterSpellScript(spell_item_conflict_rank3);
-
- RegisterSpellScript(spell_item_heart_of_azeroth);
-
- RegisterSpellScript(spell_item_corruption_grasping_tendrils);
-}
diff --git a/src/server/scripts/Spells/spell_dh.cpp b/src/server/scripts/Spells/spell_dh.cpp
deleted file mode 100644
index 16c6385e8b7..00000000000
--- a/src/server/scripts/Spells/spell_dh.cpp
+++ /dev/null
@@ -1,514 +0,0 @@
-/*
- * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * Scripts for spells with SPELLFAMILY_DEMONHUNTER and SPELLFAMILY_GENERIC spells used by demon hunter players.
- * Ordered alphabetically using scriptname.
- * Scriptnames of files in this file should be prefixed with "spell_dh_".
- */
-
-#include "AreaTrigger.h"
-#include "AreaTriggerAI.h"
-#include "Player.h"
-#include "ScriptMgr.h"
-#include "SpellAuraEffects.h"
-#include "SpellAuras.h"
-#include "SpellHistory.h"
-#include "SpellMgr.h"
-#include "SpellScript.h"
-#include "Unit.h"
-
-enum DemonHunterSpells
-{
- AREATRIGGER_DH_SHATTERED_SOULS_HAVOC = 8352,
- AREATRIGGER_DH_SHATTERED_SOULS_HAVOC_DEMON = 11231,
- AREATRIGGER_DH_SHATTERED_SOULS_VENGEANCE = 11266,
- AREATRIGGER_DH_SHATTERED_SOULS_VENGEANCE_DEMON = 10693,
- AREATRIGGER_DH_SOUL_FRAGMENT_HAVOC = 12929,
- AREATRIGGER_DH_SOUL_FRAGMENT_VENGEANCE = 10665,
-
- SPELL_DH_ABYSSAL_STRIKE = 207550,
- SPELL_DH_ANNIHILATION = 201427,
- SPELL_DH_ANNIHILATION_MH = 227518,
- SPELL_DH_ANNIHILATION_OH = 201428,
- SPELL_DH_AWAKEN_THE_DEMON_WITHIN_CD = 207128,
- SPELL_DH_BLUR = 212800,
- SPELL_DH_BLUR_TRIGGER = 198589,
- SPELL_DH_BURNING_ALIVE = 207739,
- SPELL_DH_BURNING_ALIVE_TARGET_SELECTOR = 207760,
- SPELL_DH_CHAOS_NOVA = 179057,
- SPELL_DH_CHAOS_STRIKE = 162794,
- SPELL_DH_CHAOS_STRIKE_ENERGIZE = 193840,
- SPELL_DH_CHAOS_STRIKE_MH = 222031,
- SPELL_DH_CHAOS_STRIKE_OH = 199547,
- SPELL_DH_CONSUME_SOUL_HAVOC = 228542,
- SPELL_DH_CONSUME_SOUL_HAVOC_DEMON = 228556,
- SPELL_DH_CONSUME_SOUL_HAVOC_SHATTERED = 228540,
- SPELL_DH_CONSUME_SOUL_HEAL = 203794,
- SPELL_DH_CONSUME_SOUL_VENGEANCE = 208014,
- SPELL_DH_CONSUME_SOUL_VENGEANCE_DEMON = 210050,
- SPELL_DH_CONSUME_SOUL_VENGEANCE_SHATTERED = 210047,
- SPELL_DH_DARKNESS_ABSORB = 209426,
- SPELL_DH_DEMON_BLADES_DMG = 203796,
- SPELL_DH_DEMON_SPIKES = 203819,
- SPELL_DH_DEMON_SPIKES_TRIGGER = 203720,
- SPELL_DH_DEMONIC = 213410,
- SPELL_DH_DEMONIC_ORIGINS = 235893,
- SPELL_DH_DEMONIC_ORIGINS_BUFF = 235894,
- SPELL_DH_DEMONIC_TRAMPLE_DMG = 208645,
- SPELL_DH_DEMONIC_TRAMPLE_STUN = 213491,
- SPELL_DH_DEMONS_BITE = 162243,
- SPELL_DH_EYE_BEAM = 198013,
- SPELL_DH_EYE_BEAM_DMG = 198030,
- SPELL_DH_EYE_OF_LEOTHERAS_DMG = 206650,
- SPELL_DH_FEAST_OF_SOULS = 207697,
- SPELL_DH_FEAST_OF_SOULS_PERIODIC_HEAL = 207693,
- SPELL_DH_FEED_THE_DEMON = 218612,
- SPELL_DH_FEL_BARRAGE = 211053,
- SPELL_DH_FEL_BARRAGE_DMG = 211052,
- SPELL_DH_FEL_BARRAGE_PROC = 222703,
- SPELL_DH_FEL_DEVASTATION = 212084,
- SPELL_DH_FEL_DEVASTATION_DMG = 212105,
- SPELL_DH_FEL_DEVASTATION_HEAL = 212106,
- SPELL_DH_FEL_RUSH = 195072,
- SPELL_DH_FEL_RUSH_DMG = 192611,
- SPELL_DH_FEL_RUSH_GROUND = 197922,
- SPELL_DH_FEL_RUSH_WATER_AIR = 197923,
- SPELL_DH_FELBLADE = 232893,
- SPELL_DH_FELBLADE_CHARGE = 213241,
- SPELL_DH_FELBLADE_DMG = 213243,
- SPELL_DH_FELBLADE_PROC = 203557,
- SPELL_DH_FELBLADE_PROC_VISUAL = 204497,
- SPELL_DH_FELBLADE_PROC1 = 236167,
- SPELL_DH_FIERY_BRAND = 204021,
- SPELL_DH_FIERY_BRAND_DMG_REDUCTION_DEBUFF = 207744,
- SPELL_DH_FIERY_BRAND_DOT = 207771,
- SPELL_DH_FIRST_BLOOD = 206416,
- SPELL_DH_FLAME_CRASH = 227322,
- SPELL_DH_FRAILTY = 224509,
- SPELL_DH_GLIDE = 131347,
- SPELL_DH_GLIDE_DURATION = 197154,
- SPELL_DH_GLIDE_KNOCKBACK = 196353,
- SPELL_DH_HAVOC_MASTERY = 185164,
- SPELL_DH_ILLIDANS_GRASP = 205630,
- SPELL_DH_ILLIDANS_GRASP_DAMAGE = 208618,
- SPELL_DH_ILLIDANS_GRASP_JUMP_DEST = 208175,
- SPELL_DH_INFERNAL_STRIKE_CAST = 189110,
- SPELL_DH_INFERNAL_STRIKE_IMPACT_DAMAGE = 189112,
- SPELL_DH_INFERNAL_STRIKE_JUMP = 189111,
- SPELL_DH_JAGGED_SPIKES = 205627,
- SPELL_DH_JAGGED_SPIKES_DMG = 208790,
- SPELL_DH_JAGGED_SPIKES_PROC = 208796,
- SPELL_DH_MANA_RIFT_DMG_POWER_BURN = 235904,
- SPELL_DH_METAMORPHOSIS = 191428,
- SPELL_DH_METAMORPHOSIS_DUMMY = 191427,
- SPELL_DH_METAMORPHOSIS_IMPACT_DAMAGE = 200166,
- SPELL_DH_METAMORPHOSIS_RESET = 320645,
- SPELL_DH_METAMORPHOSIS_TRANSFORM = 162264,
- SPELL_DH_METAMORPHOSIS_VENGEANCE_TRANSFORM = 187827,
- SPELL_DH_MOMENTUM = 208628,
- SPELL_DH_NEMESIS_ABERRATIONS = 208607,
- SPELL_DH_NEMESIS_BEASTS = 208608,
- SPELL_DH_NEMESIS_CRITTERS = 208609,
- SPELL_DH_NEMESIS_DEMONS = 208608,
- SPELL_DH_NEMESIS_DRAGONKIN = 208610,
- SPELL_DH_NEMESIS_ELEMENTALS = 208611,
- SPELL_DH_NEMESIS_GIANTS = 208612,
- SPELL_DH_NEMESIS_HUMANOIDS = 208605,
- SPELL_DH_NEMESIS_MECHANICALS = 208613,
- SPELL_DH_NEMESIS_UNDEAD = 208614,
- SPELL_DH_RAIN_FROM_ABOVE = 206803,
- SPELL_DH_RAIN_OF_CHAOS = 205628,
- SPELL_DH_RAIN_OF_CHAOS_IMPACT = 232538,
- SPELL_DH_RAZOR_SPIKES = 210003,
- SPELL_DH_SEVER = 235964,
- SPELL_DH_SHATTER_SOUL = 209980,
- SPELL_DH_SHATTER_SOUL_1 = 209981,
- SPELL_DH_SHATTER_SOUL_2 = 210038,
- SPELL_DH_SHATTERED_SOUL = 226258,
- SPELL_DH_SHATTERED_SOUL_LESSER_SOUL_FRAGMENT_1 = 228533,
- SPELL_DH_SHATTERED_SOUL_LESSER_SOUL_FRAGMENT_2 = 237867,
- SPELL_DH_SHEAR = 203782,
- SPELL_DH_SIGIL_OF_CHAINS_AREA_SELECTOR = 204834,
- SPELL_DH_SIGIL_OF_CHAINS_GRIP = 208674,
- SPELL_DH_SIGIL_OF_CHAINS_JUMP = 208674,
- SPELL_DH_SIGIL_OF_CHAINS_SLOW = 204843,
- SPELL_DH_SIGIL_OF_CHAINS_SNARE = 204843,
- SPELL_DH_SIGIL_OF_CHAINS_TARGET_SELECT = 204834,
- SPELL_DH_SIGIL_OF_CHAINS_VISUAL = 208673,
- SPELL_DH_SIGIL_OF_FLAME_AOE = 204598,
- SPELL_DH_SIGIL_OF_FLAME_DAMAGE = 204598,
- SPELL_DH_SIGIL_OF_FLAME_FLAME_CRASH = 228973,
- SPELL_DH_SIGIL_OF_MISERY = 207685,
- SPELL_DH_SIGIL_OF_MISERY_AOE = 207685,
- SPELL_DH_SIGIL_OF_SILENCE = 204490,
- SPELL_DH_SIGIL_OF_SILENCE_AOE = 204490,
- SPELL_DH_SOUL_BARRIER = 227225,
- SPELL_DH_SOUL_CLEAVE = 228477,
- SPELL_DH_SOUL_CLEAVE_DMG = 228478,
- SPELL_DH_SOUL_FRAGMENT_COUNTER = 203981,
- SPELL_DH_SOUL_FURNACE_DAMAGE_BUFF = 391172,
- SPELL_DH_SOUL_RENDING = 204909,
- SPELL_DH_SPIRIT_BOMB_DAMAGE = 218677,
- SPELL_DH_SPIRIT_BOMB_HEAL = 227255,
- SPELL_DH_SPIRIT_BOMB_VISUAL = 218678,
- SPELL_DH_THROW_GLAIVE = 185123,
- SPELL_DH_UNCONTAINED_FEL = 209261,
- SPELL_DH_VENGEFUL_RETREAT = 198813,
- SPELL_DH_VENGEFUL_RETREAT_TRIGGER = 198793,
-};
-
-// 197125 - Chaos Strike
-class spell_dh_chaos_strike : public AuraScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_DH_CHAOS_STRIKE_ENERGIZE });
- }
-
- void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/)
- {
- PreventDefaultAction();
- CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
- args.AddSpellMod(SPELLVALUE_BASE_POINT0, aurEff->GetAmount());
- args.SetTriggeringAura(aurEff);
- GetTarget()->CastSpell(GetTarget(), SPELL_DH_CHAOS_STRIKE_ENERGIZE, args);
- }
-
- void Register() override
- {
- OnEffectProc += AuraEffectProcFn(spell_dh_chaos_strike::HandleEffectProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
- }
-};
-
-// 206416 - First Blood
-class spell_dh_first_blood : public AuraScript
-{
-public:
- ObjectGuid const& GetFirstTarget() const { return _firstTargetGUID; }
- void SetFirstTarget(ObjectGuid const& targetGuid) { _firstTargetGUID = targetGuid; }
-
-private:
- void Register() override
- {
- }
-
-private:
- ObjectGuid _firstTargetGUID;
-};
-
-// 188499 - Blade Dance
-// 210152 - Death Sweep
-class spell_dh_blade_dance : public SpellScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_DH_FIRST_BLOOD });
- }
-
- void DecideFirstTarget(std::list<WorldObject*>& targetList)
- {
- if (targetList.empty())
- return;
-
- Aura* aura = GetCaster()->GetAura(SPELL_DH_FIRST_BLOOD);
- if (!aura)
- return;
-
- ObjectGuid firstTargetGUID = ObjectGuid::Empty;
- ObjectGuid selectedTarget = GetCaster()->GetTarget();
-
- // Prefer the selected target if he is one of the enemies
- if (targetList.size() > 1 && !selectedTarget.IsEmpty())
- {
- auto it = std::find_if(targetList.begin(), targetList.end(), [selectedTarget](WorldObject* object)
- {
- return object->GetGUID() == selectedTarget;
- });
- if (it != targetList.end())
- firstTargetGUID = (*it)->GetGUID();
- }
-
- if (firstTargetGUID.IsEmpty())
- firstTargetGUID = targetList.front()->GetGUID();
-
- if (spell_dh_first_blood* script = aura->GetScript<spell_dh_first_blood>())
- script->SetFirstTarget(firstTargetGUID);
- }
-
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dh_blade_dance::DecideFirstTarget, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
- }
-};
-
-// 199552 - Blade Dance
-// 200685 - Blade Dance
-// 210153 - Death Sweep
-// 210155 - Death Sweep
-class spell_dh_blade_dance_damage : public SpellScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_DH_FIRST_BLOOD });
- }
-
- void HandleHitTarget()
- {
- int32 damage = GetHitDamage();
-
- if (AuraEffect* aurEff = GetCaster()->GetAuraEffect(SPELL_DH_FIRST_BLOOD, EFFECT_0))
- if (spell_dh_first_blood* script = aurEff->GetBase()->GetScript<spell_dh_first_blood>())
- if (GetHitUnit()->GetGUID() == script->GetFirstTarget())
- AddPct(damage, aurEff->GetAmount());
-
- SetHitDamage(damage);
- }
-
- void Register() override
- {
- OnHit += SpellHitFn(spell_dh_blade_dance_damage::HandleHitTarget);
- }
-};
-
-// 204596 - Sigil of Flame
-// 207684 - Sigil of Misery
-// 202137 - Sigil of Silence
-template<uint32 TriggerSpellId>
-class areatrigger_dh_generic_sigil : public AreaTriggerEntityScript
-{
-public:
- areatrigger_dh_generic_sigil(char const* script) : AreaTriggerEntityScript(script) { }
-
- template<uint32 Trigger>
- struct areatrigger_dh_generic_sigilAI : AreaTriggerAI
- {
- areatrigger_dh_generic_sigilAI(AreaTrigger* at) : AreaTriggerAI(at) { }
-
- void OnRemove() override
- {
- if (Unit* caster = at->GetCaster())
- caster->CastSpell(at->GetPosition(), Trigger);
- }
- };
-
- AreaTriggerAI* GetAI(AreaTrigger* at) const override
- {
- return new areatrigger_dh_generic_sigilAI<TriggerSpellId>(at);
- }
-};
-
-// 208673 - Sigil of Chains
-class spell_dh_sigil_of_chains : public SpellScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_DH_SIGIL_OF_CHAINS_SLOW, SPELL_DH_SIGIL_OF_CHAINS_GRIP });
- }
-
- void HandleEffectHitTarget(SpellEffIndex /*effIndex*/)
- {
- if (WorldLocation const* loc = GetExplTargetDest())
- {
- GetCaster()->CastSpell(GetHitUnit(), SPELL_DH_SIGIL_OF_CHAINS_SLOW, true);
- GetHitUnit()->CastSpell(loc->GetPosition(), SPELL_DH_SIGIL_OF_CHAINS_GRIP, true);
- }
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_dh_sigil_of_chains::HandleEffectHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
-};
-
-// 202138 - Sigil of Chains
-struct areatrigger_dh_sigil_of_chains : AreaTriggerAI
-{
- areatrigger_dh_sigil_of_chains(AreaTrigger* at) : AreaTriggerAI(at) { }
-
- void OnRemove() override
- {
- if (Unit* caster = at->GetCaster())
- {
- caster->CastSpell(at->GetPosition(), SPELL_DH_SIGIL_OF_CHAINS_VISUAL);
- caster->CastSpell(at->GetPosition(), SPELL_DH_SIGIL_OF_CHAINS_TARGET_SELECT);
- }
- }
-};
-
-// 131347 - Glide
-class spell_dh_glide : public SpellScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_DH_GLIDE_KNOCKBACK, SPELL_DH_GLIDE_DURATION, SPELL_DH_VENGEFUL_RETREAT_TRIGGER, SPELL_DH_FEL_RUSH });
- }
-
- SpellCastResult CheckCast()
- {
- Unit* caster = GetCaster();
- if (caster->IsMounted() || caster->GetVehicleBase())
- return SPELL_FAILED_DONT_REPORT;
-
- if (!caster->IsFalling())
- return SPELL_FAILED_NOT_ON_GROUND;
-
- return SPELL_CAST_OK;
- }
-
- void HandleCast()
- {
- Player* caster = GetCaster()->ToPlayer();
- if (!caster)
- return;
-
- caster->CastSpell(caster, SPELL_DH_GLIDE_KNOCKBACK, true);
- caster->CastSpell(caster, SPELL_DH_GLIDE_DURATION, true);
-
- caster->GetSpellHistory()->StartCooldown(sSpellMgr->AssertSpellInfo(SPELL_DH_VENGEFUL_RETREAT_TRIGGER, GetCastDifficulty()), 0, nullptr, false, 250ms);
- caster->GetSpellHistory()->StartCooldown(sSpellMgr->AssertSpellInfo(SPELL_DH_FEL_RUSH, GetCastDifficulty()), 0, nullptr, false, 250ms);
- }
-
- void Register() override
- {
- OnCheckCast += SpellCheckCastFn(spell_dh_glide::CheckCast);
- BeforeCast += SpellCastFn(spell_dh_glide::HandleCast);
- }
-};
-
-// 131347 - Glide
-class spell_dh_glide_AuraScript : public AuraScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_DH_GLIDE_DURATION });
- }
-
- void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- GetTarget()->RemoveAura(SPELL_DH_GLIDE_DURATION);
- }
-
- void Register() override
- {
- AfterEffectRemove += AuraEffectRemoveFn(spell_dh_glide_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_FEATHER_FALL, AURA_EFFECT_HANDLE_REAL);
- }
-};
-
-// 197154 - Glide
-class spell_dh_glide_timer : public AuraScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_DH_GLIDE });
- }
-
- void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- GetTarget()->RemoveAura(SPELL_DH_GLIDE);
- }
-
- void Register() override
- {
- AfterEffectRemove += AuraEffectRemoveFn(spell_dh_glide_timer::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
- }
-};
-
-// 391166 - Soul Furnace
-class spell_dh_soul_furnace : public AuraScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_DH_SOUL_FURNACE_DAMAGE_BUFF });
- }
-
- void CalculateSpellMod(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- if (GetStackAmount() == GetAura()->CalcMaxStackAmount())
- {
- GetTarget()->CastSpell(GetTarget(), SPELL_DH_SOUL_FURNACE_DAMAGE_BUFF, true);
- Remove();
- }
- }
-
- void Register() override
- {
- AfterEffectApply += AuraEffectApplyFn(spell_dh_soul_furnace::CalculateSpellMod, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
- }
-};
-
-// 339424 - Soul Furnace
-class spell_dh_soul_furnace_conduit : public AuraScript
-{
- void CalculateSpellMod(AuraEffect const* aurEff, SpellModifier*& spellMod)
- {
- if (aurEff->GetAmount() == 10)
- {
- if (!spellMod)
- {
- spellMod = new SpellModifierByClassMask(GetAura());
- spellMod->op = SpellModOp::HealingAndDamage;
- spellMod->type = SPELLMOD_PCT;
- spellMod->spellId = GetId();
- static_cast<SpellModifierByClassMask*>(spellMod)->mask = flag128(0x80000000);
- static_cast<SpellModifierByClassMask*>(spellMod)->value = GetEffect(EFFECT_1)->GetAmount() + 1;
- }
- }
- }
-
- void Register() override
- {
- DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_dh_soul_furnace_conduit::CalculateSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
- }
-};
-
-void AddSC_demon_hunter_spell_scripts()
-{
- RegisterSpellScript(spell_dh_chaos_strike);
-
- new areatrigger_dh_generic_sigil<SPELL_DH_SIGIL_OF_SILENCE_AOE>("areatrigger_dh_sigil_of_silence");
- new areatrigger_dh_generic_sigil<SPELL_DH_SIGIL_OF_MISERY_AOE>("areatrigger_dh_sigil_of_misery");
- new areatrigger_dh_generic_sigil<SPELL_DH_SIGIL_OF_FLAME_AOE>("areatrigger_dh_sigil_of_flame");
- RegisterAreaTriggerAI(areatrigger_dh_sigil_of_chains);
- RegisterSpellScript(spell_dh_sigil_of_chains);
-
- // Havoc
-
- /* Spells & Auras */
-
- /* Auras */
-
- RegisterSpellScript(spell_dh_first_blood);
-
- /* AreaTrigger */
-
- /* Spells */
-
- RegisterSpellScript(spell_dh_blade_dance);
- RegisterSpellScript(spell_dh_blade_dance_damage);
-
- // Vengeance
- RegisterSpellScript(spell_dh_soul_furnace);
-
- // Vengeance & Havoc
-
- RegisterSpellAndAuraScriptPair(spell_dh_glide, spell_dh_glide_AuraScript);
- RegisterSpellScript(spell_dh_glide_timer);
-
- // Soulbind conduits
- RegisterSpellScript(spell_dh_soul_furnace_conduit);
-}
diff --git a/src/server/scripts/Spells/spell_evoker.cpp b/src/server/scripts/Spells/spell_evoker.cpp
deleted file mode 100644
index 8004f4115e7..00000000000
--- a/src/server/scripts/Spells/spell_evoker.cpp
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * Scripts for spells with SPELLFAMILY_EVOKER and SPELLFAMILY_GENERIC spells used by evoker players.
- * Ordered alphabetically using scriptname.
- * Scriptnames of files in this file should be prefixed with "spell_evo_".
- */
-
-#include "Containers.h"
-#include "Player.h"
-#include "ScriptMgr.h"
-#include "Spell.h"
-#include "SpellAuraEffects.h"
-#include "SpellHistory.h"
-#include "SpellMgr.h"
-#include "SpellScript.h"
-
-enum EvokerSpells
-{
- SPELL_EVOKER_ENERGIZING_FLAME = 400006,
- SPELL_EVOKER_GLIDE_KNOCKBACK = 358736,
- SPELL_EVOKER_HOVER = 358267,
- SPELL_EVOKER_LIVING_FLAME = 361469,
- SPELL_EVOKER_LIVING_FLAME_DAMAGE = 361500,
- SPELL_EVOKER_LIVING_FLAME_HEAL = 361509,
- SPELL_EVOKER_PERMEATING_CHILL_TALENT = 370897,
- SPELL_EVOKER_PYRE_DAMAGE = 357212,
- SPELL_EVOKER_SOAR_RACIAL = 369536
-};
-
-enum EvokerSpellLabels
-{
- SPELL_LABEL_EVOKER_BLUE = 1465,
-};
-
-// 362969 - Azure Strike (blue)
-class spell_evo_azure_strike : public SpellScript
-{
- void FilterTargets(std::list<WorldObject*>& targets)
- {
- targets.remove(GetExplTargetUnit());
- Trinity::Containers::RandomResize(targets, GetEffectInfo(EFFECT_0).CalcValue(GetCaster()) - 1);
- targets.push_back(GetExplTargetUnit());
- }
-
- void Register() override
- {
- OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_evo_azure_strike::FilterTargets, EFFECT_1, TARGET_UNIT_DEST_AREA_ENEMY);
- }
-};
-
-// 370455 - Charged Blast
-class spell_evo_charged_blast : public AuraScript
-{
- bool CheckProc(ProcEventInfo& procInfo)
- {
- return procInfo.GetSpellInfo() && procInfo.GetSpellInfo()->HasLabel(SPELL_LABEL_EVOKER_BLUE);
- }
-
- void Register() override
- {
- DoCheckProc += AuraCheckProcFn(spell_evo_charged_blast::CheckProc);
- }
-};
-
-// 358733 - Glide (Racial)
-class spell_evo_glide : public SpellScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_EVOKER_GLIDE_KNOCKBACK, SPELL_EVOKER_HOVER, SPELL_EVOKER_SOAR_RACIAL });
- }
-
- SpellCastResult CheckCast()
- {
- Unit* caster = GetCaster();
-
- if (!caster->IsFalling())
- return SPELL_FAILED_NOT_ON_GROUND;
-
- return SPELL_CAST_OK;
- }
-
- void HandleCast()
- {
- Player* caster = GetCaster()->ToPlayer();
- if (!caster)
- return;
-
- caster->CastSpell(caster, SPELL_EVOKER_GLIDE_KNOCKBACK, true);
-
- caster->GetSpellHistory()->StartCooldown(sSpellMgr->AssertSpellInfo(SPELL_EVOKER_HOVER, GetCastDifficulty()), 0, nullptr, false, 250ms);
- caster->GetSpellHistory()->StartCooldown(sSpellMgr->AssertSpellInfo(SPELL_EVOKER_SOAR_RACIAL, GetCastDifficulty()), 0, nullptr, false, 250ms);
- }
-
- void Register() override
- {
- OnCheckCast += SpellCheckCastFn(spell_evo_glide::CheckCast);
- OnCast += SpellCastFn(spell_evo_glide::HandleCast);
- }
-};
-
-// 361469 - Living Flame (Red)
-class spell_evo_living_flame : public SpellScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo ({ SPELL_EVOKER_LIVING_FLAME_DAMAGE, SPELL_EVOKER_LIVING_FLAME_HEAL, SPELL_EVOKER_ENERGIZING_FLAME });
- }
-
- void HandleHitTarget(SpellEffIndex /*effIndex*/)
- {
- Unit* caster = GetCaster();
- Unit* hitUnit = GetHitUnit();
- if (caster->IsFriendlyTo(hitUnit))
- caster->CastSpell(hitUnit, SPELL_EVOKER_LIVING_FLAME_HEAL, true);
- else
- caster->CastSpell(hitUnit, SPELL_EVOKER_LIVING_FLAME_DAMAGE, true);
- }
-
- void HandleLaunchTarget(SpellEffIndex /*effIndex*/)
- {
- Unit* caster = GetCaster();
- if (caster->IsFriendlyTo(GetHitUnit()))
- return;
-
- if (AuraEffect* auraEffect = caster->GetAuraEffect(SPELL_EVOKER_ENERGIZING_FLAME, EFFECT_0))
- {
- int32 manaCost = GetSpell()->GetPowerTypeCostAmount(POWER_MANA).value_or(0);
- if (manaCost != 0)
- GetCaster()->ModifyPower(POWER_MANA, CalculatePct(manaCost, auraEffect->GetAmount()));
- }
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_evo_living_flame::HandleHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
- OnEffectLaunchTarget += SpellEffectFn(spell_evo_living_flame::HandleLaunchTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
-};
-
-// 381773 - Permeating Chill
-class spell_evo_permeating_chill : public AuraScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_EVOKER_PERMEATING_CHILL_TALENT });
- }
-
- bool CheckProc(ProcEventInfo& procInfo)
- {
- SpellInfo const* spellInfo = procInfo.GetSpellInfo();
- if (!spellInfo)
- return false;
-
- if (!spellInfo->HasLabel(SPELL_LABEL_EVOKER_BLUE))
- return false;
-
- if (!procInfo.GetActor()->HasAura(SPELL_EVOKER_PERMEATING_CHILL_TALENT))
- if (!spellInfo->IsAffected(SPELLFAMILY_EVOKER, { 0x40, 0, 0, 0 })) // disintegrate
- return false;
-
- return true;
- }
-
- void Register() override
- {
- DoCheckProc += AuraCheckProcFn(spell_evo_permeating_chill::CheckProc);
- }
-};
-
-// 393568 - Pyre
-class spell_evo_pyre : public SpellScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo ({ SPELL_EVOKER_PYRE_DAMAGE });
- }
-
- void HandleDamage(SpellEffIndex /*effIndex*/)
- {
- GetCaster()->CastSpell(GetHitUnit()->GetPosition(), SPELL_EVOKER_PYRE_DAMAGE, true);
- }
-
- void Register() override
- {
- OnEffectHitTarget += SpellEffectFn(spell_evo_pyre::HandleDamage, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
-};
-
-void AddSC_evoker_spell_scripts()
-{
- RegisterSpellScript(spell_evo_azure_strike);
- RegisterSpellScript(spell_evo_charged_blast);
- RegisterSpellScript(spell_evo_glide);
- RegisterSpellScript(spell_evo_living_flame);
- RegisterSpellScript(spell_evo_permeating_chill);
- RegisterSpellScript(spell_evo_pyre);
-}
diff --git a/src/server/scripts/Spells/spell_monk.cpp b/src/server/scripts/Spells/spell_monk.cpp
deleted file mode 100644
index 6e66c820454..00000000000
--- a/src/server/scripts/Spells/spell_monk.cpp
+++ /dev/null
@@ -1,553 +0,0 @@
-/*
- * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * Scripts for spells with SPELLFAMILY_MONK and SPELLFAMILY_GENERIC spells used by monk players.
- * Scriptnames of files in this file should be prefixed with "spell_monk_".
- */
-
-#include "ScriptMgr.h"
-#include "DB2Stores.h"
-#include "Player.h"
-#include "Spell.h"
-#include "SpellAuraEffects.h"
-#include "SpellInfo.h"
-#include "SpellMgr.h"
-#include "SpellScript.h"
-
-enum MonkSpells
-{
- SPELL_MONK_CALMING_COALESCENCE = 388220,
- SPELL_MONK_CRACKLING_JADE_LIGHTNING_CHANNEL = 117952,
- SPELL_MONK_CRACKLING_JADE_LIGHTNING_CHI_PROC = 123333,
- SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK = 117962,
- SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK_CD = 117953,
- SPELL_MONK_POWER_STRIKE_PROC = 129914,
- SPELL_MONK_POWER_STRIKE_ENERGIZE = 121283,
- SPELL_MONK_PROVOKE_SINGLE_TARGET = 116189,
- SPELL_MONK_PROVOKE_AOE = 118635,
- SPELL_MONK_NO_FEATHER_FALL = 79636,
- SPELL_MONK_OPEN_PALM_STRIKES_TALENT = 392970,
- SPELL_MONK_ROLL_BACKWARD = 109131,
- SPELL_MONK_ROLL_FORWARD = 107427,
- SPELL_MONK_SOOTHING_MIST = 115175,
- SPELL_MONK_STANCE_OF_THE_SPIRITED_CRANE = 154436,
- SPELL_MONK_STAGGER_DAMAGE_AURA = 124255,
- SPELL_MONK_STAGGER_HEAVY = 124273,
- SPELL_MONK_STAGGER_LIGHT = 124275,
- SPELL_MONK_STAGGER_MODERATE = 124274,
- SPELL_MONK_SURGING_MIST_HEAL = 116995,
-};
-
-// 117952 - Crackling Jade Lightning
-class spell_monk_crackling_jade_lightning : public AuraScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo(
- {
- SPELL_MONK_STANCE_OF_THE_SPIRITED_CRANE,
- SPELL_MONK_CRACKLING_JADE_LIGHTNING_CHI_PROC
- });
- }
-
- void OnTick(AuraEffect const* /*aurEff*/)
- {
- if (Unit* caster = GetCaster())
- if (caster->HasAura(SPELL_MONK_STANCE_OF_THE_SPIRITED_CRANE))
- caster->CastSpell(caster, SPELL_MONK_CRACKLING_JADE_LIGHTNING_CHI_PROC, TRIGGERED_FULL_MASK);
- }
-
- void Register() override
- {
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_monk_crackling_jade_lightning::OnTick, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
- }
-};
-
-// 117959 - Crackling Jade Lightning
-class spell_monk_crackling_jade_lightning_knockback_proc_aura : public AuraScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo(
- {
- SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK,
- SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK_CD
- });
- }
-
- bool CheckProc(ProcEventInfo& eventInfo)
- {
- if (GetTarget()->HasAura(SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK_CD))
- return false;
-
- if (eventInfo.GetActor()->HasAura(SPELL_MONK_CRACKLING_JADE_LIGHTNING_CHANNEL, GetTarget()->GetGUID()))
- return false;
-
- Spell* currentChanneledSpell = GetTarget()->GetCurrentSpell(CURRENT_CHANNELED_SPELL);
- if (!currentChanneledSpell || currentChanneledSpell->GetSpellInfo()->Id != SPELL_MONK_CRACKLING_JADE_LIGHTNING_CHANNEL)
- return false;
-
- return true;
- }
-
- void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo)
- {
- GetTarget()->CastSpell(eventInfo.GetActor(), SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK, TRIGGERED_FULL_MASK);
- GetTarget()->CastSpell(GetTarget(), SPELL_MONK_CRACKLING_JADE_LIGHTNING_KNOCKBACK_CD, TRIGGERED_FULL_MASK);
- }
-
- void Register() override
- {
- DoCheckProc += AuraCheckProcFn(spell_monk_crackling_jade_lightning_knockback_proc_aura::CheckProc);
- OnEffectProc += AuraEffectProcFn(spell_monk_crackling_jade_lightning_knockback_proc_aura::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
- }
-};
-
-// 116849 - Life Cocoon
-class spell_monk_life_cocoon : public SpellScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_MONK_CALMING_COALESCENCE });
- }
-
- void CalculateAbsorb(SpellEffIndex /*effIndex*/)
- {
- int32 absorb = GetCaster()->CountPctFromMaxHealth(GetEffectValue());
- if (Player* player = GetCaster()->ToPlayer())
- AddPct(absorb, player->GetRatingBonusValue(CR_VERSATILITY_HEALING_DONE));
-
- if (AuraEffect* calmingCoalescence = GetCaster()->GetAuraEffect(SPELL_MONK_CALMING_COALESCENCE, EFFECT_0, GetCaster()->GetGUID()))
- {
- AddPct(absorb, calmingCoalescence->GetAmount());
- calmingCoalescence->GetBase()->Remove();
- }
-
- GetSpell()->SetSpellValue(SPELLVALUE_BASE_POINT0, absorb);
- }
-
- void Register() override
- {
- OnEffectLaunch += SpellEffectFn(spell_monk_life_cocoon::CalculateAbsorb, EFFECT_2, SPELL_EFFECT_DUMMY);
- }
-};
-
-// 392972 - Open Palm Strikes
-class spell_monk_open_palm_strikes : public AuraScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellEffect({ { SPELL_MONK_OPEN_PALM_STRIKES_TALENT, EFFECT_1} });
- }
-
- bool CheckProc(AuraEffect const* /*aurEff*/, ProcEventInfo& /*procInfo*/)
- {
- AuraEffect const* talent = GetTarget()->GetAuraEffect(SPELL_MONK_OPEN_PALM_STRIKES_TALENT, EFFECT_1);
- return talent && roll_chance_i(talent->GetAmount());
- }
-
- void Register() override
- {
- DoCheckEffectProc += AuraCheckEffectProcFn(spell_monk_open_palm_strikes::CheckProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
- }
-};
-
-// 121817 - Power Strike
-class spell_monk_power_strike_periodic : public AuraScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_MONK_POWER_STRIKE_PROC });
- }
-
- void HandlePeriodic(AuraEffect const* /*aurEff*/)
- {
- GetTarget()->CastSpell(GetTarget(), SPELL_MONK_POWER_STRIKE_PROC, true);
- }
-
- void Register() override
- {
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_monk_power_strike_periodic::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
- }
-};
-
-// 129914 - Power Strike Proc
-class spell_monk_power_strike_proc : public AuraScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_MONK_POWER_STRIKE_ENERGIZE });
- }
-
- void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& /*eventInfo*/)
- {
- GetTarget()->CastSpell(GetTarget(), SPELL_MONK_POWER_STRIKE_ENERGIZE, true);
- }
-
- void Register() override
- {
- OnEffectProc += AuraEffectProcFn(spell_monk_power_strike_proc::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
- }
-};
-
-// 115546 - Provoke
-class spell_monk_provoke : public SpellScript
-{
- static uint32 const BlackOxStatusEntry = 61146;
-
- bool Validate(SpellInfo const* spellInfo) override
- {
- if (!(spellInfo->GetExplicitTargetMask() & TARGET_FLAG_UNIT_MASK)) // ensure GetExplTargetUnit() will return something meaningful during CheckCast
- return false;
- return ValidateSpellInfo(
- {
- SPELL_MONK_PROVOKE_SINGLE_TARGET,
- SPELL_MONK_PROVOKE_AOE
- });
- }
-
- SpellCastResult CheckExplicitTarget()
- {
- if (GetExplTargetUnit()->GetEntry() != BlackOxStatusEntry)
- {
- SpellInfo const* singleTarget = sSpellMgr->AssertSpellInfo(SPELL_MONK_PROVOKE_SINGLE_TARGET, GetCastDifficulty());
- SpellCastResult singleTargetExplicitResult = singleTarget->CheckExplicitTarget(GetCaster(), GetExplTargetUnit());
- if (singleTargetExplicitResult != SPELL_CAST_OK)
- return singleTargetExplicitResult;
- }
- else if (GetExplTargetUnit()->GetOwnerGUID() != GetCaster()->GetGUID())
- return SPELL_FAILED_BAD_TARGETS;
-
- return SPELL_CAST_OK;
- }
-
- void HandleDummy(SpellEffIndex effIndex)
- {
- PreventHitDefaultEffect(effIndex);
- if (GetHitUnit()->GetEntry() != BlackOxStatusEntry)
- GetCaster()->CastSpell(GetHitUnit(), SPELL_MONK_PROVOKE_SINGLE_TARGET, true);
- else
- GetCaster()->CastSpell(GetHitUnit(), SPELL_MONK_PROVOKE_AOE, true);
- }
-
- void Register() override
- {
- OnCheckCast += SpellCheckCastFn(spell_monk_provoke::CheckExplicitTarget);
- OnEffectHitTarget += SpellEffectFn(spell_monk_provoke::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
-};
-
-// 109132 - Roll
-class spell_monk_roll : public SpellScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_MONK_ROLL_BACKWARD, SPELL_MONK_ROLL_FORWARD, SPELL_MONK_NO_FEATHER_FALL });
- }
-
- SpellCastResult CheckCast()
- {
- if (GetCaster()->HasUnitState(UNIT_STATE_ROOT))
- return SPELL_FAILED_ROOTED;
- return SPELL_CAST_OK;
- }
-
- void HandleDummy(SpellEffIndex /*effIndex*/)
- {
- GetCaster()->CastSpell(GetCaster(), GetCaster()->HasUnitMovementFlag(MOVEMENTFLAG_BACKWARD) ? SPELL_MONK_ROLL_BACKWARD : SPELL_MONK_ROLL_FORWARD,
- TRIGGERED_IGNORE_CAST_IN_PROGRESS);
- GetCaster()->CastSpell(GetCaster(), SPELL_MONK_NO_FEATHER_FALL, true);
- }
-
- void Register() override
- {
- OnCheckCast += SpellCheckCastFn(spell_monk_roll::CheckCast);
- OnEffectHitTarget += SpellEffectFn(spell_monk_roll::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
- }
-};
-
-// 107427 - Roll
-// 109131 - Roll (backward)
-class spell_monk_roll_aura : public AuraScript
-{
- void CalcMovementAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- {
- amount += 100;
- }
-
- void CalcImmunityAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
- {
- amount -= 100;
- }
-
- void ChangeRunBackSpeed(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- GetTarget()->SetSpeed(MOVE_RUN_BACK, GetTarget()->GetSpeed(MOVE_RUN));
- }
-
- void RestoreRunBackSpeed(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- GetTarget()->UpdateSpeed(MOVE_RUN_BACK);
- }
-
- void Register() override
- {
- // Values need manual correction
- DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_monk_roll_aura::CalcMovementAmount, EFFECT_0, SPELL_AURA_MOD_SPEED_NO_CONTROL);
- DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_monk_roll_aura::CalcMovementAmount, EFFECT_2, SPELL_AURA_MOD_MINIMUM_SPEED);
- DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_monk_roll_aura::CalcImmunityAmount, EFFECT_5, SPELL_AURA_MECHANIC_IMMUNITY);
- DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_monk_roll_aura::CalcImmunityAmount, EFFECT_6, SPELL_AURA_MECHANIC_IMMUNITY);
-
- // This is a special aura that sets backward run speed equal to forward speed
- AfterEffectApply += AuraEffectApplyFn(spell_monk_roll_aura::ChangeRunBackSpeed, EFFECT_4, SPELL_AURA_USE_NORMAL_MOVEMENT_SPEED, AURA_EFFECT_HANDLE_REAL);
- AfterEffectRemove += AuraEffectApplyFn(spell_monk_roll_aura::RestoreRunBackSpeed, EFFECT_4, SPELL_AURA_USE_NORMAL_MOVEMENT_SPEED, AURA_EFFECT_HANDLE_REAL);
- }
-};
-
-// Utility for stagger scripts
-Aura* FindExistingStaggerEffect(Unit* unit)
-{
- if (Aura* auraLight = unit->GetAura(SPELL_MONK_STAGGER_LIGHT))
- return auraLight;
-
- if (Aura* auraModerate = unit->GetAura(SPELL_MONK_STAGGER_MODERATE))
- return auraModerate;
-
- if (Aura* auraHeavy = unit->GetAura(SPELL_MONK_STAGGER_HEAVY))
- return auraHeavy;
-
- return nullptr;
-}
-
-static constexpr SpellEffIndex AuraStaggerEffectTick = EFFECT_0;
-static constexpr SpellEffIndex AuraStaggerEffectTotal = EFFECT_1;
-
-// 115069 - Stagger
-class spell_monk_stagger : public AuraScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_MONK_STAGGER_LIGHT, SPELL_MONK_STAGGER_MODERATE, SPELL_MONK_STAGGER_HEAVY });
- }
-
- void AbsorbNormal(AuraEffect* /*aurEff*/, DamageInfo& dmgInfo, uint32& /*absorbAmount*/)
- {
- Absorb(dmgInfo, 1.0f);
- }
-
- void AbsorbMagic(AuraEffect* /*aurEff*/, DamageInfo& dmgInfo, uint32& /*absorbAmount*/)
- {
- AuraEffect const* effect = GetEffect(EFFECT_4);
- if (!effect)
- return;
-
- Absorb(dmgInfo, float(effect->GetAmount()) / 100.0f);
- }
-
- void Absorb(DamageInfo& dmgInfo, float multiplier)
- {
- // Prevent default action (which would remove the aura)
- PreventDefaultAction();
-
- // make sure damage doesn't come from stagger damage spell SPELL_MONK_STAGGER_DAMAGE_AURA
- if (SpellInfo const* dmgSpellInfo = dmgInfo.GetSpellInfo())
- if (dmgSpellInfo->Id == SPELL_MONK_STAGGER_DAMAGE_AURA)
- return;
-
- AuraEffect const* effect = GetEffect(AuraStaggerEffectTick);
- if (!effect)
- return;
-
- Unit* target = GetTarget();
- float agility = target->GetStat(STAT_AGILITY);
- float base = CalculatePct(agility, float(effect->GetAmount()));
- float K = sDB2Manager.EvaluateExpectedStat(ExpectedStatType::ArmorConstant, target->GetLevel(), -2, 0, Classes(target->GetClass()), 0);
-
- float newAmount = (base / (base + K));
- newAmount *= multiplier;
-
- // Absorb X percentage of the damage
- float absorbAmount = float(dmgInfo.GetDamage()) * newAmount;
- if (absorbAmount > 0)
- {
- dmgInfo.AbsorbDamage(absorbAmount);
-
- // Cast stagger and make it tick on each tick
- AddAndRefreshStagger(absorbAmount);
- }
- }
-
- void Register() override
- {
- OnEffectAbsorb += AuraEffectAbsorbFn(spell_monk_stagger::AbsorbNormal, EFFECT_1);
- OnEffectAbsorb += AuraEffectAbsorbFn(spell_monk_stagger::AbsorbMagic, EFFECT_2);
- }
-
-private:
- void AddAndRefreshStagger(float amount)
- {
- Unit* target = GetTarget();
- if (Aura* auraStagger = FindExistingStaggerEffect(target))
- {
- AuraEffect* effStaggerRemaining = auraStagger->GetEffect(AuraStaggerEffectTotal);
- if (!effStaggerRemaining)
- return;
-
- float newAmount = effStaggerRemaining->GetAmount() + amount;
- uint32 spellId = GetStaggerSpellId(target, newAmount);
- if (spellId == effStaggerRemaining->GetSpellInfo()->Id)
- {
- auraStagger->RefreshDuration();
- effStaggerRemaining->ChangeAmount(newAmount, false, true /* reapply */);
- }
- else
- {
- // amount changed the stagger type so we need to change the stagger amount (e.g. from medium to light)
- GetTarget()->RemoveAura(auraStagger);
- AddNewStagger(target, spellId, newAmount);
- }
- }
- else
- AddNewStagger(target, GetStaggerSpellId(target, amount), amount);
- }
-
- uint32 GetStaggerSpellId(Unit* unit, float amount)
- {
- const float StaggerHeavy = 0.6f;
- const float StaggerModerate = 0.3f;
-
- float staggerPct = amount / float(unit->GetMaxHealth());
- return (staggerPct >= StaggerHeavy) ? SPELL_MONK_STAGGER_HEAVY :
- (staggerPct >= StaggerModerate) ? SPELL_MONK_STAGGER_MODERATE :
- SPELL_MONK_STAGGER_LIGHT;
- }
-
- void AddNewStagger(Unit* unit, uint32 staggerSpellId, float staggerAmount)
- {
- // We only set the total stagger amount. The amount per tick will be set by the stagger spell script
- unit->CastSpell(unit, staggerSpellId, CastSpellExtraArgs(SPELLVALUE_BASE_POINT1, staggerAmount).SetTriggerFlags(TRIGGERED_FULL_MASK));
- }
-};
-
-// 124255 - Stagger - SPELL_MONK_STAGGER_DAMAGE_AURA
-class spell_monk_stagger_damage_aura : public AuraScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_MONK_STAGGER_LIGHT, SPELL_MONK_STAGGER_MODERATE, SPELL_MONK_STAGGER_HEAVY });
- }
-
- void OnPeriodicDamage(AuraEffect const* aurEff)
- {
- // Update our light/medium/heavy stagger with the correct stagger amount left
- if (Aura* auraStagger = FindExistingStaggerEffect(GetTarget()))
- {
- if (AuraEffect* auraEff = auraStagger->GetEffect(AuraStaggerEffectTotal))
- {
- float total = float(auraEff->GetAmount());
- float tickDamage = float(aurEff->GetAmount());
- auraEff->ChangeAmount(total - tickDamage);
- }
- }
- }
-
- void Register() override
- {
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_monk_stagger_damage_aura::OnPeriodicDamage, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE);
- }
-};
-
-// 124273, 124274, 124275 - Light/Moderate/Heavy Stagger - SPELL_MONK_STAGGER_LIGHT / SPELL_MONK_STAGGER_MODERATE / SPELL_MONK_STAGGER_HEAVY
-class spell_monk_stagger_debuff_aura : public AuraScript
-{
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- return ValidateSpellInfo({ SPELL_MONK_STAGGER_DAMAGE_AURA })
- && ValidateSpellEffect({ { SPELL_MONK_STAGGER_DAMAGE_AURA, EFFECT_0 } });
- }
-
- bool Load() override
- {
- _period = float(sSpellMgr->AssertSpellInfo(SPELL_MONK_STAGGER_DAMAGE_AURA, GetCastDifficulty())->GetEffect(EFFECT_0).ApplyAuraPeriod);
- return true;
- }
-
- void OnReapply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
- {
- // Calculate damage per tick
- float total = float(aurEff->GetAmount());
- float perTick = total * _period / float(GetDuration()); // should be same as GetMaxDuration() TODO: verify
-
- // Set amount on effect for tooltip
- AuraEffect* effInfo = GetAura()->GetEffect(AuraStaggerEffectTick);
- if (effInfo)
- effInfo->ChangeAmount(perTick);
-
- // Set amount on damage aura (or cast it if needed)
- CastOrChangeTickDamage(perTick);
- }
-
- void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes mode)
- {
- if (mode != AURA_EFFECT_HANDLE_REAL)
- return;
-
- // Remove damage aura
- GetTarget()->RemoveAura(SPELL_MONK_STAGGER_DAMAGE_AURA);
- }
-
- void Register() override
- {
- AfterEffectApply += AuraEffectRemoveFn(spell_monk_stagger_debuff_aura::OnReapply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
- AfterEffectRemove += AuraEffectRemoveFn(spell_monk_stagger_debuff_aura::OnRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
- }
-
-private:
- float _period = 0.0f;
-
- void CastOrChangeTickDamage(float tickDamage)
- {
- Unit* unit = GetTarget();
- Aura* auraDamage = unit->GetAura(SPELL_MONK_STAGGER_DAMAGE_AURA);
- if (!auraDamage)
- {
- unit->CastSpell(unit, SPELL_MONK_STAGGER_DAMAGE_AURA, true);
- auraDamage = unit->GetAura(SPELL_MONK_STAGGER_DAMAGE_AURA);
- }
-
- if (auraDamage)
- if (AuraEffect* eff = auraDamage->GetEffect(AuraStaggerEffectTick))
- eff->ChangeAmount(tickDamage);
- }
-};
-
-void AddSC_monk_spell_scripts()
-{
- RegisterSpellScript(spell_monk_crackling_jade_lightning);
- RegisterSpellScript(spell_monk_crackling_jade_lightning_knockback_proc_aura);
- RegisterSpellScript(spell_monk_life_cocoon);
- RegisterSpellScript(spell_monk_open_palm_strikes);
- RegisterSpellScript(spell_monk_power_strike_periodic);
- RegisterSpellScript(spell_monk_power_strike_proc);
- RegisterSpellScript(spell_monk_provoke);
- RegisterSpellScript(spell_monk_roll);
- RegisterSpellScript(spell_monk_roll_aura);
- RegisterSpellScript(spell_monk_stagger);
- RegisterSpellScript(spell_monk_stagger_damage_aura);
- RegisterSpellScript(spell_monk_stagger_debuff_aura);
-}
diff --git a/src/server/scripts/Spells/spell_script_loader.cpp b/src/server/scripts/Spells/spell_script_loader.cpp
index 7df1d920846..cbe80bafff2 100644
--- a/src/server/scripts/Spells/spell_script_loader.cpp
+++ b/src/server/scripts/Spells/spell_script_loader.cpp
@@ -17,13 +17,10 @@
// This is where scripts' loading functions should be declared:
void AddSC_deathknight_spell_scripts();
-void AddSC_demon_hunter_spell_scripts();
void AddSC_druid_spell_scripts();
-void AddSC_evoker_spell_scripts();
void AddSC_generic_spell_scripts();
void AddSC_hunter_spell_scripts();
void AddSC_mage_spell_scripts();
-void AddSC_monk_spell_scripts();
void AddSC_paladin_spell_scripts();
void AddSC_priest_spell_scripts();
void AddSC_rogue_spell_scripts();
@@ -32,20 +29,16 @@ void AddSC_warlock_spell_scripts();
void AddSC_warrior_spell_scripts();
void AddSC_quest_spell_scripts();
void AddSC_item_spell_scripts();
-void AddSC_azerite_item_spell_scripts();
// The name of this function should match:
// void Add${NameOfDirectory}Scripts()
void AddSpellsScripts()
{
AddSC_deathknight_spell_scripts();
- AddSC_demon_hunter_spell_scripts();
AddSC_druid_spell_scripts();
- AddSC_evoker_spell_scripts();
AddSC_generic_spell_scripts();
AddSC_hunter_spell_scripts();
AddSC_mage_spell_scripts();
- AddSC_monk_spell_scripts();
AddSC_paladin_spell_scripts();
AddSC_priest_spell_scripts();
AddSC_rogue_spell_scripts();
@@ -54,5 +47,4 @@ void AddSpellsScripts()
AddSC_warrior_spell_scripts();
AddSC_quest_spell_scripts();
AddSC_item_spell_scripts();
- AddSC_azerite_item_spell_scripts();
}