mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Scripts/Spells: Implemented Priest talent Sanctuary (#29727)
Co-authored-by: Shauren <shauren.trinity@gmail.com>
This commit is contained in:
4
sql/updates/world/master/2024_05_30_03_world.sql
Normal file
4
sql/updates/world/master/2024_05_30_03_world.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_pri_sanctuary_trigger', 'spell_pri_sanctuary_absorb');
|
||||
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||
(585, 'spell_pri_sanctuary_trigger'),
|
||||
(208771, 'spell_pri_sanctuary_absorb');
|
||||
@@ -164,6 +164,9 @@ enum PriestSpells
|
||||
SPELL_PRIEST_RENEWED_HOPE = 197469,
|
||||
SPELL_PRIEST_RENEWED_HOPE_EFFECT = 197470,
|
||||
SPELL_PRIEST_REVEL_IN_PURITY = 373003,
|
||||
SPELL_PRIEST_SANCTUARY = 231682,
|
||||
SPELL_PRIEST_SANCTUARY_ABSORB = 208771,
|
||||
SPELL_PRIEST_SANCTUARY_AURA = 208772,
|
||||
SPELL_PRIEST_RHAPSODY_PROC = 390636,
|
||||
SPELL_PRIEST_SAY_YOUR_PRAYERS = 391186,
|
||||
SPELL_PRIEST_SCHISM = 424509,
|
||||
@@ -2841,6 +2844,83 @@ class spell_pri_schism : public SpellScript
|
||||
}
|
||||
};
|
||||
|
||||
// 208771 - Sanctuary (Absorb)
|
||||
class spell_pri_sanctuary_absorb : public AuraScript
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_PRIEST_SANCTUARY_AURA });
|
||||
}
|
||||
|
||||
void CalcAbsorbAmount(AuraEffect const* /*aurEff*/, DamageInfo& dmgInfo, uint32& /*absorbAmount*/)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
|
||||
Unit const* attacker = dmgInfo.GetAttacker();
|
||||
if (!attacker)
|
||||
return;
|
||||
|
||||
AuraEffect* amountHolderEffect = attacker->GetAuraEffect(SPELL_PRIEST_SANCTUARY_AURA, EFFECT_0, GetCasterGUID());
|
||||
if (!amountHolderEffect)
|
||||
return;
|
||||
|
||||
if (dmgInfo.GetDamage() >= uint32(amountHolderEffect->GetAmount()))
|
||||
{
|
||||
amountHolderEffect->GetBase()->Remove(AURA_REMOVE_BY_ENEMY_SPELL);
|
||||
dmgInfo.AbsorbDamage(amountHolderEffect->GetAmount());
|
||||
}
|
||||
else
|
||||
{
|
||||
amountHolderEffect->ChangeAmount(amountHolderEffect->GetAmount() - int32(dmgInfo.GetDamage()));
|
||||
dmgInfo.AbsorbDamage(dmgInfo.GetDamage());
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectAbsorb += AuraEffectAbsorbFn(spell_pri_sanctuary_absorb::CalcAbsorbAmount, EFFECT_0);
|
||||
}
|
||||
};
|
||||
|
||||
// Smite - 585
|
||||
class spell_pri_sanctuary_trigger : public SpellScript
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_PRIEST_SANCTUARY, SPELL_PRIEST_SANCTUARY_AURA, SPELL_PRIEST_SANCTUARY_ABSORB });
|
||||
}
|
||||
|
||||
void HandleEffectHit(SpellEffIndex /*effIndex*/) const
|
||||
{
|
||||
Player* caster = Object::ToPlayer(GetCaster());
|
||||
if (!caster)
|
||||
return;
|
||||
|
||||
if (AuraEffect const* sanctuaryEffect = caster->GetAuraEffect(SPELL_PRIEST_SANCTUARY, EFFECT_0))
|
||||
{
|
||||
if (Unit* target = GetHitUnit())
|
||||
{
|
||||
float absorbAmount = CalculatePct<float, float>(caster->SpellBaseDamageBonusDone(SPELL_SCHOOL_MASK_SHADOW), sanctuaryEffect->GetAmount());
|
||||
AddPct(absorbAmount, caster->GetRatingBonusValue(CR_VERSATILITY_DAMAGE_DONE));
|
||||
|
||||
caster->CastSpell(caster, SPELL_PRIEST_SANCTUARY_ABSORB, CastSpellExtraArgs()
|
||||
.SetTriggerFlags(TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR)
|
||||
.SetTriggeringSpell(GetSpell()));
|
||||
|
||||
caster->CastSpell(target, SPELL_PRIEST_SANCTUARY_AURA, CastSpellExtraArgs()
|
||||
.AddSpellMod(SPELLVALUE_BASE_POINT0, absorbAmount)
|
||||
.SetTriggerFlags(TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR)
|
||||
.SetTriggeringSpell(GetSpell()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_pri_sanctuary_trigger::HandleEffectHit, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
|
||||
}
|
||||
};
|
||||
|
||||
// 280391 - Sins of the Many
|
||||
class spell_pri_sins_of_the_many : public AuraScript
|
||||
{
|
||||
@@ -3509,6 +3589,8 @@ void AddSC_priest_spell_scripts()
|
||||
RegisterSpellScript(spell_pri_purge_the_wicked);
|
||||
RegisterSpellScript(spell_pri_purge_the_wicked_dummy);
|
||||
RegisterSpellScript(spell_pri_rapture);
|
||||
RegisterSpellScript(spell_pri_sanctuary_absorb);
|
||||
RegisterSpellScript(spell_pri_sanctuary_trigger);
|
||||
RegisterSpellScript(spell_pri_rhapsody);
|
||||
RegisterSpellScript(spell_pri_rhapsody_proc);
|
||||
RegisterSpellScript(spell_pri_schism);
|
||||
|
||||
Reference in New Issue
Block a user