diff --git a/sql/updates/world/custom/custom_2018_08_30_02_world.sql b/sql/updates/world/custom/custom_2018_08_30_02_world.sql new file mode 100644 index 00000000000..2eb50c806fb --- /dev/null +++ b/sql/updates/world/custom/custom_2018_08_30_02_world.sql @@ -0,0 +1,11 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName` IN +('spell_pri_strength_of_soul', +'spell_pri_strength_of_soul_script'); + +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(-89488, 'spell_pri_strength_of_soul'), +(89490, 'spell_pri_strength_of_soul_script'); + +DELETE FROM `spell_proc` WHERE `SpellId`= -89488; +INSERT INTO `spell_proc` (`SpellId`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `ProcFlags`, `SpellTypeMask`, `SpellPhaseMask`, `HitMask`, `AttributesMask`, `Cooldown`, `Charges`, `Chance`) VALUES +(-89488, 6, 0x00000400 | 0x00001000 | 0x00000800, 0x40000000, 0, 0, 2 | 4, 2, 0, 0, 0, 0, 0); diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 14ef2e2e59f..e6c3a0c756d 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -63,6 +63,7 @@ enum PriestSpells SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL = 48153, SPELL_PRIEST_HOLY_WORD_CHASTISE = 88625, SPELL_PRIEST_HOLY_WORD_SANCTUARY = 88686, + SPELL_PRIEST_INNER_FOCUS = 89485, SPELL_PRIEST_ITEM_EFFICIENCY = 37595, SPELL_PRIEST_LEAP_OF_FAITH = 73325, SPELL_PRIEST_LEAP_OF_FAITH_EFFECT = 92832, @@ -82,10 +83,14 @@ enum PriestSpells SPELL_PRIEST_SHADOWFORM_VISUAL_WITHOUT_GLYPH = 107903, SPELL_PRIEST_SHADOWFORM_VISUAL_WITH_GLYPH = 107904, SPELL_PRIEST_SHADOW_WORD_DEATH = 32409, + SPELL_PRIEST_STRENGTH_OF_SOUL_R1 = 89488, + SPELL_PRIEST_STRENGTH_OF_SOUL_TRIGGERED_R1 = 96266, + SPELL_PRIEST_STRENGTH_OF_SOUL_TRIGGERED_R2 = 96267, SPELL_PRIEST_TWIN_DISCIPLINES_RANK_1 = 47586, SPELL_PRIEST_T9_HEALING_2P = 67201, SPELL_PRIEST_VAMPIRIC_EMBRACE_HEAL = 15290, - SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL = 64085 + SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL = 64085, + SPELL_PRIEST_WEAKENED_SOUL = 6788 }; enum PriestSpellIcons @@ -1440,6 +1445,69 @@ private: bool _glyphEnabled; }; +// -89488 - Strength of Soul +class spell_pri_strength_of_soul : public AuraScript +{ + PrepareAuraScript(spell_pri_strength_of_soul); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_PRIEST_INNER_FOCUS, + SPELL_PRIEST_STRENGTH_OF_SOUL_R1, + SPELL_PRIEST_STRENGTH_OF_SOUL_TRIGGERED_R1, + SPELL_PRIEST_STRENGTH_OF_SOUL_TRIGGERED_R2 + }); + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + Unit* target = GetTarget(); + + if (eventInfo.GetSpellInfo()->Id == SPELL_PRIEST_INNER_FOCUS) + { + if (aurEff->GetId() == SPELL_PRIEST_STRENGTH_OF_SOUL_R1) + target->CastSpell(target, SPELL_PRIEST_STRENGTH_OF_SOUL_TRIGGERED_R1, true, nullptr, aurEff); + else + target->CastSpell(target, SPELL_PRIEST_STRENGTH_OF_SOUL_TRIGGERED_R2, true, nullptr, aurEff); + } + else + { + uint32 spellId = GetSpellInfo()->Effects[EFFECT_0].TriggerSpell; + int32 bp = aurEff->GetAmount() * IN_MILLISECONDS; + target->CastCustomSpell(spellId, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetProcTarget(), true, nullptr, aurEff); + } + } + + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_pri_strength_of_soul::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); + } +}; + +class spell_pri_strength_of_soul_script : public SpellScript +{ + PrepareSpellScript(spell_pri_strength_of_soul_script); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_PRIEST_WEAKENED_SOUL }); + } + + void HandleScriptEffect(SpellEffIndex /*effIndex*/) + { + if (Aura* aura = GetHitUnit()->GetAura(SPELL_PRIEST_WEAKENED_SOUL)) + aura->SetDuration(std::max(0, aura->GetDuration() - GetEffectValue())); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_pri_strength_of_soul_script::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_priest_spell_scripts() { RegisterSpellScript(spell_pri_archangel); @@ -1474,6 +1542,8 @@ void AddSC_priest_spell_scripts() RegisterAuraScript(spell_pri_shadow_orb); RegisterAuraScript(spell_pri_shadow_orbs); RegisterAuraScript(spell_pri_shadow_orb_power); + RegisterAuraScript(spell_pri_strength_of_soul); + RegisterSpellScript(spell_pri_strength_of_soul_script); RegisterAuraScript(spell_pri_renew); RegisterSpellScript(spell_pri_shadow_word_death); RegisterAuraScript(spell_pri_shadowform);