Scripts/Spells: Fix priest Shadow Mend damage (#27525)

This commit is contained in:
My name is Mud
2022-01-10 00:28:50 +01:00
committed by GitHub
parent 9dc11391c5
commit 043d1cf254
2 changed files with 69 additions and 6 deletions

View File

@@ -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');

View File

@@ -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();