From ded981ac5916a9dd55aa5c0a75729562bf0d1394 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Wed, 25 Mar 2020 20:44:47 +0100 Subject: [PATCH] Core/Spells: fixed all remaining T11 bonus effects for all classes --- .../world/4.3.4/2020_03_25_00_world.sql | 43 +++++++++ src/server/scripts/Spells/spell_dk.cpp | 52 ++++++++++- src/server/scripts/Spells/spell_druid.cpp | 71 +++++++++++++++ src/server/scripts/Spells/spell_paladin.cpp | 12 ++- src/server/scripts/Spells/spell_priest.cpp | 90 +++++++++++++------ 5 files changed, 239 insertions(+), 29 deletions(-) create mode 100644 sql/updates/world/4.3.4/2020_03_25_00_world.sql diff --git a/sql/updates/world/4.3.4/2020_03_25_00_world.sql b/sql/updates/world/4.3.4/2020_03_25_00_world.sql new file mode 100644 index 00000000000..743888c4f33 --- /dev/null +++ b/sql/updates/world/4.3.4/2020_03_25_00_world.sql @@ -0,0 +1,43 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName` IN +('spell_dk_killing_machine', +'spell_dru_astral_alignment', +'spell_dru_harmony_triggered', +'spell_dru_item_t11_feral_4p_bonus', +'spell_pri_chakra_flow_removal'); + +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(51124, 'spell_dk_killing_machine'), +(90164, 'spell_dru_astral_alignment'), +(100977, 'spell_dru_harmony_triggered'), +(90165, 'spell_dru_item_t11_feral_4p_bonus'), +(81208, 'spell_pri_chakra_flow_removal'), +(81209, 'spell_pri_chakra_flow_removal'); + +DELETE FROM `spell_proc` WHERE `SpellId`= 90164; +INSERT INTO `spell_proc` (`SpellId`, `SpellTypeMask`, `SpellPhaseMask`, `HitMask`, `Charges`) VALUES +(90164, 3, 2, 2, 3); + +DELETE FROM `spell_proc` WHERE `SpellId`= 90158; +INSERT INTO `spell_proc` (`SpellId`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `ProcFlags`, `SpellTypeMask`, `SpellPhaseMask`, `HitMask`, `AttributesMask`, `ProcsPerMinute`, `Chance`, `Cooldown`, `Charges`) VALUES +(90158, 0, 7, 0x00000020 | 0x00000040 , 0x02000000 | 0x00000002, 0x0, 0x00004000, 2, 1, 0, 0, 0, 0, 0, 0); + +DELETE FROM `spell_proc` WHERE `SpellId`= 90165; +INSERT INTO `spell_proc` (`SpellId`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `ProcFlags`, `SpellTypeMask`, `SpellPhaseMask`, `HitMask`, `AttributesMask`, `ProcsPerMinute`, `Chance`, `Cooldown`, `Charges`) VALUES +(90165, 0, 7, 0 ,0x400, 0, 0, 1, 2, 0, 0, 0, 100, 0, 0); + +DELETE FROM `spell_proc` WHERE `SpellId`= 90313; +INSERT INTO `spell_proc` (`SpellId`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `ProcFlags`, `SpellTypeMask`, `SpellPhaseMask`, `HitMask`, `AttributesMask`, `ProcsPerMinute`, `Chance`, `Cooldown`, `Charges`) VALUES +(90313, 2, 10, 0x200000 ,0, 0, 0, 3, 2, 0, 2, 0, 0, 0, 0); + +DELETE FROM `spell_proc` WHERE `SpellId`= 90499; +INSERT INTO `spell_proc` (`SpellId`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `ProcFlags`, `SpellTypeMask`, `SpellPhaseMask`, `HitMask`, `AttributesMask`, `ProcsPerMinute`, `Chance`, `Cooldown`, `Charges`) VALUES +(90499, 8, 11, 0, 0, 0x10, 0, 2, 2, 0, 0, 0, 0, 0, 0); + +DELETE FROM `spell_proc` WHERE `SpellId`= 90472; +INSERT INTO `spell_proc` (`SpellId`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `ProcFlags`, `SpellTypeMask`, `SpellPhaseMask`, `HitMask`, `AttributesMask`, `ProcsPerMinute`, `Chance`, `Cooldown`, `Charges`) VALUES +(90472, 0, 8, 0, 0, 0, 0, 1, 1, 0, 8, 0, 0, 0, 0); + +DELETE FROM `spell_proc` WHERE `SpellId` IN (89935, 89937); +INSERT INTO `spell_proc` (`SpellId`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `ProcFlags`, `SpellTypeMask`, `SpellPhaseMask`, `HitMask`, `AttributesMask`, `ProcsPerMinute`, `Chance`, `Cooldown`, `Charges`) VALUES +(89935, 0, 5, 0x4, 0x100, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0), +(89937, 0, 5, 0, 0, 0, 0, 1, 1, 0, 8, 0, 0, 0, 0); diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 4789f1fe6d1..1e05ea10616 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -54,6 +54,7 @@ enum DeathKnightSpells SPELL_DK_DEATH_COIL = 47541, SPELL_DK_DEATH_COIL_DAMAGE = 47632, SPELL_DK_DEATH_COIL_HEAL = 47633, + SPELL_DK_DEATH_EATER = 90507, SPELL_DK_DEATH_GRIP = 49560, SPELL_DK_DEATH_GRIP_INITIAL = 49576, SPELL_DK_DEATH_STRIKE = 49998, @@ -76,6 +77,7 @@ enum DeathKnightSpells SPELL_DK_IMPROVED_UNHOLY_PRESENCE = 63622, SPELL_DK_ITEM_SIGIL_VENGEFUL_HEART = 64962, SPELL_DK_ITEM_T8_MELEE_4P_BONUS = 64736, + SPELL_DK_ITEM_T11_DPS_4P_BONUS = 90459, SPELL_DK_MASTER_OF_GHOULS = 52143, SPELL_DK_OBLITERATE = 49020, SPELL_DK_OBLITERATE_OFFHAND = 66198, @@ -1340,18 +1342,30 @@ class spell_dk_threat_of_thassarian : public AuraScript } }; +// 56835 - Reaping (Passive) class spell_dk_reaping : public AuraScript { PrepareAuraScript(spell_dk_reaping); + bool Load() override + { + return GetCaster()->IsPlayer(); + } + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_DK_ITEM_T11_DPS_4P_BONUS, + SPELL_DK_DEATH_EATER + }); + } + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); Player* player = GetTarget()->ToPlayer(); - if (!player) - return; - uint8 runeMask = player->GetLastUsedRuneMask(); for (uint8 i = 0; i < MAX_RUNES; i++) @@ -1361,6 +1375,10 @@ class spell_dk_reaping : public AuraScript } GetEffect(EFFECT_0)->ResetPeriodic(true); + + // T11 set bonus effect + if (AuraEffect const* aurEff = player->GetAuraEffect(SPELL_DK_ITEM_T11_DPS_4P_BONUS, EFFECT_0)) + player->CastSpell(player, SPELL_DK_DEATH_EATER, true, nullptr, aurEff); } void Register() override @@ -1721,6 +1739,33 @@ class spell_dk_festering_strike : public SpellScript } }; +// 51124 - Killing Machine +class spell_dk_killing_machine : public SpellScript +{ + PrepareSpellScript(spell_dk_killing_machine); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_DK_ITEM_T11_DPS_4P_BONUS, + SPELL_DK_DEATH_EATER + }); + } + + void HandleT11Bonus(SpellEffIndex /*effIndex*/) + { + Unit* target = GetHitUnit(); + if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_DK_ITEM_T11_DPS_4P_BONUS, EFFECT_0)) + target->CastSpell(target, SPELL_DK_DEATH_EATER, true, nullptr, aurEff); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_dk_killing_machine::HandleT11Bonus, EFFECT_0, SPELL_EFFECT_APPLY_AURA); + } +}; + void AddSC_deathknight_spell_scripts() { RegisterAuraScript(spell_dk_anti_magic_shell); @@ -1752,6 +1797,7 @@ void AddSC_deathknight_spell_scripts() RegisterSpellScript(spell_dk_howling_blast); RegisterAuraScript(spell_dk_icebound_fortitude); RegisterAuraScript(spell_dk_improved_presence); + RegisterSpellScript(spell_dk_killing_machine); RegisterAuraScript(spell_dk_necrotic_strike); RegisterSpellScript(spell_dk_pestilence); RegisterAuraScript(spell_dk_presence); diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index a95cb5e6472..07c7b9ff2d9 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -35,7 +35,9 @@ enum DruidSpells { + SPELL_DRUID_ASTRAL_ALIGNMENT = 90164, SPELL_DRUID_BLOOD_IN_THE_WATER_SCRIPT = 80863, + SPELL_DRUID_BLOOM = 90159, SPELL_DRUID_WRATH = 5176, SPELL_DRUID_STARFIRE = 2912, SPELL_DRUID_STARSURGE = 78674, @@ -78,6 +80,7 @@ enum DruidSpells SPELL_DRUID_INNERVATE_TRIGGERED = 54833, SPELL_DRUID_ITEM_T8_BALANCE_RELIC = 64950, SPELL_DRUID_ITEM_T10_FERAL_4P_BONUS = 70726, + SPELL_DRUID_ITEM_T11_BALANCE_4P_BONUS = 90163, SPELL_DRUID_KING_OF_THE_JUNGLE = 48492, SPELL_DRUID_LACERATE = 33745, SPELL_DRUID_LEADER_OF_THE_PACK_HEAL = 34299, @@ -99,6 +102,7 @@ enum DruidSpells SPELL_DRUID_STAMPEDE_CAT_RANK_1 = 81021, SPELL_DRUID_STAMPEDE_CAT_STATE = 109881, SPELL_DRUID_SOLAR_BEAM_SILENCE = 81261, + SPELL_DRUID_STRENGTH_OF_THE_PANTHER = 90166, SPELL_DRUID_SUNFIRE = 93402, SPELL_DRUID_SUNFIRE_TALENT = 93401, SPELL_DRUID_TIGER_S_FURY_ENERGIZE = 51178, @@ -248,6 +252,10 @@ class spell_dru_eclipse : public AuraScript caster->RemoveAurasDueToSpell(SPELL_DRUID_LUNAR_ECLIPSE_MARKER); caster->CastSpell(caster, SPELL_DRUID_SOLAR_ECLIPSE_MARKER, true); } + + // T11 Bonus + if (AuraEffect const* aurEff = caster->GetAuraEffect(SPELL_DRUID_ITEM_T11_BALANCE_4P_BONUS, EFFECT_0)) + caster->CastCustomSpell(SPELL_DRUID_ASTRAL_ALIGNMENT, SPELLVALUE_AURA_STACK, 3, caster, true, nullptr, aurEff); } void RemoveEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) @@ -1948,8 +1956,69 @@ class spell_dru_blood_in_the_water_script : public SpellScript } }; +// 90164 - Astral Alignment +class spell_dru_astral_alignment : public AuraScript +{ + PrepareAuraScript(spell_dru_astral_alignment); + + void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + GetAura()->ModStackAmount(-1); + } + + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_dru_astral_alignment::HandleProc, EFFECT_0, SPELL_AURA_MOD_SPELL_CRIT_CHANCE); + } +}; + +// 100977 - Harmony +class spell_dru_harmony_triggered : public AuraScript +{ + PrepareAuraScript(spell_dru_harmony_triggered); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DRUID_BLOOM }); + } + + void RemoveEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_BLOOM); + } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_dru_harmony_triggered::RemoveEffect, EFFECT_0, SPELL_AURA_ADD_PCT_MODIFIER, AURA_EFFECT_HANDLE_REAL); + } +}; + +// 90165 - Item - Druid T11 Feral 4P Bonus +class spell_dru_item_t11_feral_4p_bonus : public AuraScript +{ + PrepareAuraScript(spell_dru_item_t11_feral_4p_bonus); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DRUID_STRENGTH_OF_THE_PANTHER }); + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + GetTarget()->CastSpell(GetTarget(), SPELL_DRUID_STRENGTH_OF_THE_PANTHER, true, nullptr, aurEff); + } + + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_dru_item_t11_feral_4p_bonus::HandleProc, EFFECT_0, SPELL_AURA_ADD_PCT_MODIFIER); + } +}; + void AddSC_druid_spell_scripts() { + RegisterAuraScript(spell_dru_astral_alignment); RegisterAuraScript(spell_dru_berserk); RegisterAuraScript(spell_dru_blood_in_the_water); RegisterSpellScript(spell_dru_blood_in_the_water_script); @@ -1969,6 +2038,7 @@ void AddSC_druid_spell_scripts() RegisterSpellScript(spell_dru_glyph_of_starfire); RegisterAuraScript(spell_dru_glyph_of_starfire_proc); RegisterAuraScript(spell_dru_harmony); + RegisterAuraScript(spell_dru_harmony_triggered); RegisterAuraScript(spell_dru_idol_lifebloom); RegisterAuraScript(spell_dru_innervate); RegisterAuraScript(spell_dru_insect_swarm); @@ -1993,6 +2063,7 @@ void AddSC_druid_spell_scripts() RegisterAuraScript(spell_dru_tree_of_life); RegisterSpellScript(spell_dru_typhoon); RegisterSpellScript(spell_dru_t10_restoration_4p_bonus); + RegisterAuraScript(spell_dru_item_t11_feral_4p_bonus); RegisterSpellScript(spell_dru_wild_growth); RegisterSpellScript(spell_dru_wild_mushroom); RegisterSpellScript(spell_dru_wild_mushroom_detonate); diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index e96c0105346..75bec1242ad 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -76,6 +76,7 @@ enum PaladinSpells SPELL_PALADIN_IMPROVED_CONCENTRACTION_AURA = 63510, SPELL_PALADIN_IMPROVED_DEVOTION_AURA = 63514, SPELL_PALADIN_ITEM_HEALING_TRANCE = 37706, + SPELL_PALADIN_ITEM_T11_RETRIBUTION_4P_BONUS = 90299, SPELL_PALADIN_JUDGEMENT_DAMAGE = 54158, SPELL_PALADIN_JUDGEMENTS_OF_THE_BOLD = 89906, SPELL_PALADIN_JUDGEMENTS_OF_THE_WISE_PASSIVE = 31878, @@ -1632,7 +1633,11 @@ class spell_pal_inquisition : public SpellScript bool Validate(SpellInfo const* /*spellInfo*/) override { - return ValidateSpellInfo({ SPELL_PALADIN_DIVINE_PURPOSE_PROC }); + return ValidateSpellInfo( + { + SPELL_PALADIN_DIVINE_PURPOSE_PROC, + SPELL_PALADIN_ITEM_T11_RETRIBUTION_4P_BONUS + }); } void ChangeDuration() @@ -1644,6 +1649,11 @@ class spell_pal_inquisition : public SpellScript if (Aura* aura = caster->GetAura(GetSpellInfo()->Id)) { uint8 power = caster->HasAura(SPELL_PALADIN_DIVINE_PURPOSE_PROC) ? 2 : caster->GetPower(POWER_HOLY_POWER); + + // T11 bonus + if (caster->GetAuraEffect(SPELL_PALADIN_ITEM_T11_RETRIBUTION_4P_BONUS, EFFECT_0, caster->GetGUID())) + power = std::min(caster->GetPower(POWER_HOLY_POWER) + 1, caster->GetMaxPower(POWER_HOLY_POWER)); + int32 duration = aura->GetDuration(); duration += duration * power; aura->SetDuration(duration); diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 5dfe916b17a..2f3d1e738f8 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -43,6 +43,7 @@ enum PriestSpells SPELL_PRIEST_CHAKRA_SANCTUARY = 81206, SPELL_PRIEST_CHAKRA_SANCTUARY_LINKED = 81207, SPELL_PRIEST_CHAKRA_CHASTISE = 81209, + SPELL_PRIEST_CHAKRA_FLOW = 89912, SPELL_PRIEST_CURE_DISEASE = 528, SPELL_PRIEST_DARK_ARCHANGEL_TRIGGERED = 87153, SPELL_PRIEST_DARK_EVANGELISM_TRIGGERED_1 = 87117, @@ -67,8 +68,10 @@ enum PriestSpells SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL = 48153, SPELL_PRIEST_HOLY_WORD_CHASTISE = 88625, SPELL_PRIEST_HOLY_WORD_SANCTUARY = 88686, + SPELL_PRIEST_INDULGENCE_OF_THE_PENITENT = 89913, SPELL_PRIEST_INNER_FOCUS = 89485, SPELL_PRIEST_ITEM_EFFICIENCY = 37595, + SPELL_PRIEST_ITEM_T11_HEALER_4P_BONUS = 89911, SPELL_PRIEST_LEAP_OF_FAITH = 73325, SPELL_PRIEST_LEAP_OF_FAITH_EFFECT = 92832, SPELL_PRIEST_LEAP_OF_FAITH_EFFECT_TRIGGER = 92833, @@ -76,9 +79,8 @@ enum PriestSpells SPELL_PRIEST_MANA_LEECH_PROC = 34650, SPELL_PRIEST_MIND_FLAY = 15407, SPELL_PRIEST_MIND_TRAUMA = 48301, - SPELL_PRIEST_PENANCE_R1 = 47540, - SPELL_PRIEST_PENANCE_R1_DAMAGE = 47758, - SPELL_PRIEST_PENANCE_R1_HEAL = 47757, + SPELL_PRIEST_PENANCE_DAMAGE = 47758, + SPELL_PRIEST_PENANCE_HEAL = 47757, SPELL_PRIEST_REFLECTIVE_SHIELD_R1 = 33201, SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED = 33619, SPELL_PRIEST_RENEW = 139, @@ -602,23 +604,15 @@ class spell_pri_penance : public SpellScript return GetCaster()->GetTypeId() == TYPEID_PLAYER; } - bool Validate(SpellInfo const* spellInfo) override + bool Validate(SpellInfo const* /*spellInfo*/) override { - SpellInfo const* firstRankSpellInfo = sSpellMgr->GetSpellInfo(SPELL_PRIEST_PENANCE_R1); - if (!firstRankSpellInfo) - return false; - - // can't use other spell than this penance due to spell_ranks dependency - if (!spellInfo->IsRankOf(firstRankSpellInfo)) - return false; - - uint8 rank = spellInfo->GetRank(); - if (!sSpellMgr->GetSpellWithRank(SPELL_PRIEST_PENANCE_R1_DAMAGE, rank, true)) - return false; - if (!sSpellMgr->GetSpellWithRank(SPELL_PRIEST_PENANCE_R1_HEAL, rank, true)) - return false; - - return true; + return ValidateSpellInfo( + { + SPELL_PRIEST_PENANCE_DAMAGE, + SPELL_PRIEST_PENANCE_HEAL, + SPELL_PRIEST_ITEM_T11_HEALER_4P_BONUS, + SPELL_PRIEST_INDULGENCE_OF_THE_PENITENT + }); } void HandleDummy(SpellEffIndex /*effIndex*/) @@ -629,12 +623,16 @@ class spell_pri_penance : public SpellScript if (!unitTarget->IsAlive()) return; - uint8 rank = GetSpellInfo()->GetRank(); - if (caster->IsFriendlyTo(unitTarget)) - caster->CastSpell(unitTarget, sSpellMgr->GetSpellWithRank(SPELL_PRIEST_PENANCE_R1_HEAL, rank), TRIGGERED_DISALLOW_PROC_EVENTS); + { + caster->CastSpell(unitTarget, SPELL_PRIEST_PENANCE_HEAL, TRIGGERED_DISALLOW_PROC_EVENTS); + + // T11 Bonus + if (caster->GetAuraEffect(SPELL_PRIEST_ITEM_T11_HEALER_4P_BONUS, EFFECT_0)) + caster->CastSpell(caster, SPELL_PRIEST_INDULGENCE_OF_THE_PENITENT, true); + } else - caster->CastSpell(unitTarget, sSpellMgr->GetSpellWithRank(SPELL_PRIEST_PENANCE_R1_DAMAGE, rank), TRIGGERED_DISALLOW_PROC_EVENTS); + caster->CastSpell(unitTarget, SPELL_PRIEST_PENANCE_DAMAGE, TRIGGERED_DISALLOW_PROC_EVENTS); } } @@ -1160,6 +1158,7 @@ class spell_pri_chakra : public AuraScript SPELL_PRIEST_CHAKRA_SANCTUARY, SPELL_PRIEST_CHAKRA_SANCTUARY_LINKED, SPELL_PRIEST_CHAKRA_CHASTISE, + SPELL_PRIEST_CHAKRA_FLOW, SPELL_PRIEST_REVELATIONS, SPELL_PRIEST_HOLY_WORD_CHASTISE }); @@ -1205,6 +1204,10 @@ class spell_pri_chakra : public AuraScript // Chakra: Chastise if (spell->SpellFamilyFlags.HasFlag(0x00000080) || spell->SpellFamilyFlags.HasFlag(0, 0x00010000)) caster->CastSpell(caster, SPELL_PRIEST_CHAKRA_CHASTISE, true, nullptr, aurEff); + + // T11 Bonus + if (caster->GetAuraEffect(SPELL_PRIEST_ITEM_T11_HEALER_4P_BONUS, EFFECT_0)) + caster->CastSpell(caster, SPELL_PRIEST_CHAKRA_FLOW); } } @@ -1222,12 +1225,18 @@ class spell_pri_chakra_sanctuary : public AuraScript bool Validate(SpellInfo const* /*spellInfo*/) override { - return ValidateSpellInfo({ SPELL_PRIEST_CHAKRA_SANCTUARY_LINKED }); + return ValidateSpellInfo( + { + SPELL_PRIEST_CHAKRA_SANCTUARY_LINKED, + SPELL_PRIEST_CHAKRA_FLOW + }); } void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - GetTarget()->RemoveAurasDueToSpell(SPELL_PRIEST_CHAKRA_SANCTUARY_LINKED); + Unit* target = GetTarget(); + target->RemoveAurasDueToSpell(SPELL_PRIEST_CHAKRA_SANCTUARY_LINKED); + target->RemoveAurasDueToSpell(SPELL_PRIEST_CHAKRA_FLOW); } void Register() override @@ -1236,6 +1245,36 @@ class spell_pri_chakra_sanctuary : public AuraScript } }; +// 81208 - Chakra: Serenety +// 81209 - Chakra: Chastise +class spell_pri_chakra_flow_removal: public AuraScript +{ + PrepareAuraScript(spell_pri_chakra_flow_removal); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_PRIEST_CHAKRA_CHASTISE, + SPELL_PRIEST_CHAKRA_SERENITY, + SPELL_PRIEST_CHAKRA_FLOW + }); + } + + void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_PRIEST_CHAKRA_FLOW); + } + + void Register() override + { + if (m_scriptSpellId == SPELL_PRIEST_CHAKRA_SERENITY) + AfterEffectRemove += AuraEffectRemoveFn(spell_pri_chakra_flow_removal::HandleEffectRemove, EFFECT_0, SPELL_AURA_ADD_FLAT_MODIFIER, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); + else if (m_scriptSpellId == SPELL_PRIEST_CHAKRA_CHASTISE) + AfterEffectRemove += AuraEffectRemoveFn(spell_pri_chakra_flow_removal::HandleEffectRemove, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); + } +}; + // 81585 - Chakra: Serenity class spell_pri_chakra_serenity_script : public SpellScript { @@ -1788,6 +1827,7 @@ void AddSC_priest_spell_scripts() RegisterAuraScript(spell_pri_chakra); RegisterAuraScript(spell_pri_chakra_sanctuary); RegisterSpellScript(spell_pri_chakra_serenity_script); + RegisterAuraScript(spell_pri_chakra_flow_removal); RegisterSpellScript(spell_pri_circle_of_healing); RegisterSpellScript(spell_pri_dispel_magic); RegisterAuraScript(spell_pri_divine_aegis);