aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMy name is Mud <95978183+aquadeus@users.noreply.github.com>2022-01-10 00:28:50 +0100
committerGitHub <noreply@github.com>2022-01-10 00:28:50 +0100
commit043d1cf254339e082138347f6afce10fbbab4bec (patch)
tree19fbccdf0ca6595e25046ea04b336bc1c92f8ad7
parent9dc11391c570ebc75a580aceed0c7eeaa1dedcf0 (diff)
Scripts/Spells: Fix priest Shadow Mend damage (#27525)
-rw-r--r--sql/updates/world/master/2022_01_09_03_world_priest_shadow_mend.sql2
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp73
2 files changed, 69 insertions, 6 deletions
diff --git a/sql/updates/world/master/2022_01_09_03_world_priest_shadow_mend.sql b/sql/updates/world/master/2022_01_09_03_world_priest_shadow_mend.sql
new file mode 100644
index 00000000000..6c4db49e415
--- /dev/null
+++ b/sql/updates/world/master/2022_01_09_03_world_priest_shadow_mend.sql
@@ -0,0 +1,2 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_pri_shadow_mend_periodic_damage';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (187464, 'spell_pri_shadow_mend_periodic_damage');
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp
index 903db5c42b8..6a0f4e2a879 100644
--- a/src/server/scripts/Spells/spell_priest.cpp
+++ b/src/server/scripts/Spells/spell_priest.cpp
@@ -66,6 +66,8 @@ enum PriestSpells
SPELL_PRIEST_RENEW = 139,
SPELL_PRIEST_RENEWED_HOPE = 197469,
SPELL_PRIEST_RENEWED_HOPE_EFFECT = 197470,
+ SPELL_PRIEST_SHADOW_MEND_DAMAGE = 186439,
+ SPELL_PRIEST_SHADOW_MEND_PERIODIC_DUMMY = 187464,
SPELL_PRIEST_SHIELD_DISCIPLINE_ENERGIZE = 47755,
SPELL_PRIEST_SHIELD_DISCIPLINE_PASSIVE = 197045,
SPELL_PRIEST_SMITE = 585,
@@ -973,28 +975,86 @@ class spell_pri_shadow_mend : public SpellScript
bool Validate(SpellInfo const* /*spellInfo*/) override
{
- return ValidateSpellInfo({ SPELL_PRIEST_ATONEMENT, SPELL_PRIEST_ATONEMENT_TRIGGERED, SPELL_PRIEST_TRINITY, SPELL_PRIEST_MASOCHISM_TALENT, SPELL_PRIEST_MASOCHISM_PERIODIC_HEAL });
+ return ValidateSpellInfo
+ ({
+ SPELL_PRIEST_ATONEMENT,
+ SPELL_PRIEST_ATONEMENT_TRIGGERED,
+ SPELL_PRIEST_TRINITY,
+ SPELL_PRIEST_MASOCHISM_TALENT,
+ SPELL_PRIEST_MASOCHISM_PERIODIC_HEAL,
+ SPELL_PRIEST_SHADOW_MEND_PERIODIC_DUMMY
+ });
}
- void HandleEffectHit(SpellEffIndex /*effIndex*/)
+ void HandleEffectHit()
{
if (Unit* target = GetHitUnit())
{
Unit* caster = GetCaster();
+ int32 periodicAmount = GetHitHeal() / 20;
+ int32 damageForAuraRemoveAmount = periodicAmount * 10;
if (caster->HasAura(SPELL_PRIEST_ATONEMENT) && !caster->HasAura(SPELL_PRIEST_TRINITY))
- caster->CastSpell(target, SPELL_PRIEST_ATONEMENT_TRIGGERED, true);
+ caster->CastSpell(target, SPELL_PRIEST_ATONEMENT_TRIGGERED, GetSpell());
// Handle Masochism talent
- int32 periodicAmount = GetHitHeal() / 20;
if (caster->HasAura(SPELL_PRIEST_MASOCHISM_TALENT) && caster->GetGUID() == target->GetGUID())
- caster->CastSpell(caster, SPELL_PRIEST_MASOCHISM_PERIODIC_HEAL, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellMod(SPELLVALUE_BASE_POINT0, periodicAmount));
+ caster->CastSpell(caster, SPELL_PRIEST_MASOCHISM_PERIODIC_HEAL, CastSpellExtraArgs(GetSpell()).AddSpellMod(SPELLVALUE_BASE_POINT0, periodicAmount));
+ else if (target->IsInCombat() && periodicAmount)
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SetTriggeringSpell(GetSpell());
+ args.AddSpellMod(SPELLVALUE_BASE_POINT0, periodicAmount);
+ args.AddSpellMod(SPELLVALUE_BASE_POINT1, damageForAuraRemoveAmount);
+ caster->CastSpell(target, SPELL_PRIEST_SHADOW_MEND_PERIODIC_DUMMY, args);
+ }
}
}
void Register() override
{
- OnEffectHitTarget += SpellEffectFn(spell_pri_shadow_mend::HandleEffectHit, EFFECT_0, SPELL_EFFECT_HEAL);
+ AfterHit += SpellHitFn(spell_pri_shadow_mend::HandleEffectHit);
+ }
+};
+
+// 187464 - Shadow Mend (Damage)
+class spell_pri_shadow_mend_periodic_damage : public AuraScript
+{
+ PrepareAuraScript(spell_pri_shadow_mend_periodic_damage);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_PRIEST_SHADOW_MEND_DAMAGE });
+ }
+
+ void HandleDummyTick(AuraEffect const* aurEff)
+ {
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.SetOriginalCaster(GetCasterGUID());
+ args.SetTriggeringAura(aurEff);
+ args.AddSpellMod(SPELLVALUE_BASE_POINT0, aurEff->GetAmount());
+ GetTarget()->CastSpell(GetTarget(), SPELL_PRIEST_SHADOW_MEND_DAMAGE, args);
+ }
+
+ bool CheckProc(ProcEventInfo& eventInfo)
+ {
+ return eventInfo.GetDamageInfo() != nullptr;
+ }
+
+ void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
+ {
+ int32 newAmount = aurEff->GetAmount() - eventInfo.GetDamageInfo()->GetDamage();
+
+ aurEff->ChangeAmount(newAmount);
+ if (newAmount < 0)
+ Remove();
+ }
+
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_pri_shadow_mend_periodic_damage::HandleDummyTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
+ DoCheckProc += AuraCheckProcFn(spell_pri_shadow_mend_periodic_damage::CheckProc);
+ OnEffectProc += AuraEffectProcFn(spell_pri_shadow_mend_periodic_damage::HandleProc, EFFECT_1, SPELL_AURA_DUMMY);
}
};
@@ -1371,6 +1431,7 @@ void AddSC_priest_spell_scripts()
RegisterSpellScript(spell_pri_prayer_of_mending_jump);
RegisterAuraScript(spell_pri_spirit_of_redemption);
RegisterSpellScript(spell_pri_shadow_mend);
+ RegisterAuraScript(spell_pri_shadow_mend_periodic_damage);
new spell_pri_t3_4p_bonus();
new spell_pri_t5_heal_2p_bonus();
new spell_pri_t10_heal_2p_bonus();