mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-18 16:38:42 +01:00
Scripts/Spells: Fix priest Shadow Mend damage (#27525)
This commit is contained in:
@@ -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');
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user