diff --git a/sql/updates/world/4.3.4/2022_02_22_00_world.sql b/sql/updates/world/4.3.4/2022_02_22_00_world.sql new file mode 100644 index 0000000000..ef4cda065d --- /dev/null +++ b/sql/updates/world/4.3.4/2022_02_22_00_world.sql @@ -0,0 +1,3 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName`= 'spell_pri_devouring_plague'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(2944, 'spell_pri_devouring_plague'); diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 76df7a9939..091f5c1805 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1320,30 +1320,6 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b if (!caster) break; - // Devouring Plague - if (GetSpellInfo()->SpellFamilyFlags[0] & 0x02000000) - { - AuraEffect const* devouringPlague = GetEffect(EFFECT_0); - if (!devouringPlague) - break; - - // Improved Devouring Plague - if (AuraEffect const* aurEff = caster->GetDummyAuraEffect(SPELLFAMILY_PRIEST, 3790, 0)) - { - int32 damage = (devouringPlague->GetAmount() + devouringPlague->GetBonusAmount()) * devouringPlague->GetDonePct(); - if (Player* modOwner = caster->GetSpellModOwner()) - modOwner->ApplySpellMod(GetSpellInfo()->Id, SPELLMOD_DOT, damage); - - damage = target->SpellDamageBonusTaken(caster, GetSpellInfo(), damage, DOT); - - CastSpellExtraArgs args(devouringPlague), args2(devouringPlague); - int32 basepoints0 = CalculatePct(devouringPlague->GetTotalTicks() * static_cast(damage), aurEff->GetAmount()); - args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, basepoints0); - args2.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, CalculatePct(basepoints0, 15)); - caster->CastSpell(target, 63675, args); - caster->CastSpell(nullptr, 75999, args2); - } - } // Power Word: Shield else if (m_spellInfo->SpellFamilyFlags[0] & 0x1 && m_spellInfo->SpellFamilyFlags[2] & 0x400 && GetEffect(0)) { diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index ceeb2492fb..94243cedea 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -3323,7 +3323,7 @@ void SpellMgr::LoadSpellInfoCorrections() // Improved Devouring Plague ApplySpellFix({ 63675 }, [](SpellInfo* spellInfo) { - spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS; + spellInfo->AttributesEx6 |= SPELL_ATTR6_LIMIT_PCT_DAMAGE_MODS; }); // Tremor Totem (instant pulse) diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 88572b22fb..b1eec54e35 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -71,6 +71,7 @@ enum PriestSpells SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL = 48153, SPELL_PRIEST_HOLY_WORD_CHASTISE = 88625, SPELL_PRIEST_HOLY_WORD_SANCTUARY = 88686, + SPELL_PRIEST_IMPROVED_DEVOURING_PLAGUE_DAMAGE = 63675, SPELL_PRIEST_INDULGENCE_OF_THE_PENITENT = 89913, SPELL_PRIEST_INNER_FOCUS = 89485, SPELL_PRIEST_ITEM_EFFICIENCY = 37595, @@ -116,7 +117,8 @@ enum PriestSpellIcons PRIEST_ICON_ID_IMPROVED_MIND_BLAST = 95, PRIEST_ICON_ID_MIND_MELT = 3139, PRIEST_ICON_ID_SHADOW_ORB = 4941, - PRIEST_ICON_ID_GLYPH_OF_SHADOW_WORD_DEATH = 1980 + PRIEST_ICON_ID_GLYPH_OF_SHADOW_WORD_DEATH = 1980, + PRIEST_ICON_ID_IMPROVED_DEVOURING_PLAGUE = 3790 }; enum MiscSpells @@ -1782,6 +1784,34 @@ class spell_pri_harnessed_shadows : public AuraScript } }; +// 2944 - Devouring Plague +class spell_pri_devouring_plague : public AuraScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_PRIEST_IMPROVED_DEVOURING_PLAGUE_DAMAGE }); + } + + void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + Unit* caster = GetCaster(); + if (!caster) + return; + + // Improved Devouring Plague + if (AuraEffect const* improvedDevouringPlague = caster->GetDummyAuraEffect(SPELLFAMILY_PRIEST, PRIEST_ICON_ID_IMPROVED_DEVOURING_PLAGUE, EFFECT_0)) + { + int32 bp = CalculatePct(aurEff->GetAmount() * aurEff->GetTotalTicks(), improvedDevouringPlague->GetAmount()); + caster->CastSpell(GetTarget(), SPELL_PRIEST_IMPROVED_DEVOURING_PLAGUE_DAMAGE, CastSpellExtraArgs(true).AddSpellBP0(bp)); + } + } + + void Register() override + { + AfterEffectApply.Register(&spell_pri_devouring_plague::AfterApply, EFFECT_0, SPELL_AURA_PERIODIC_LEECH, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); + } +}; + void AddSC_priest_spell_scripts() { RegisterSpellScript(spell_pri_archangel); @@ -1793,6 +1823,7 @@ void AddSC_priest_spell_scripts() RegisterSpellScript(spell_pri_chakra_serenity_script); RegisterSpellScript(spell_pri_chakra_flow_removal); RegisterSpellScript(spell_pri_circle_of_healing); + RegisterSpellScript(spell_pri_devouring_plague); RegisterSpellScript(spell_pri_dispel_magic); RegisterSpellScript(spell_pri_divine_aegis); RegisterSpellScript(spell_pri_divine_hymn);