diff options
| -rw-r--r-- | sql/updates/world/master/2023_08_26_04_world.sql | 3 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_priest.cpp | 59 | 
2 files changed, 51 insertions, 11 deletions
diff --git a/sql/updates/world/master/2023_08_26_04_world.sql b/sql/updates/world/master/2023_08_26_04_world.sql new file mode 100644 index 00000000000..c7ba1864164 --- /dev/null +++ b/sql/updates/world/master/2023_08_26_04_world.sql @@ -0,0 +1,3 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_pri_evangelism'); +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES  +(246287,'spell_pri_evangelism'); diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index b960ea34070..48239cd172c 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -47,8 +47,8 @@ enum PriestSpells      SPELL_PRIEST_ARMOR_OF_FAITH                     = 28810,      SPELL_PRIEST_ATONEMENT                          = 81749,      SPELL_PRIEST_ATONEMENT_HEAL                     = 81751, -    SPELL_PRIEST_ATONEMENT_TRIGGERED                = 194384, -    SPELL_PRIEST_ATONEMENT_TRIGGERED_TRINITY        = 214206, +    SPELL_PRIEST_ATONEMENT_EFFECT                   = 194384, +    SPELL_PRIEST_ATONEMENT_EFFECT_TRINITY           = 214206,      SPELL_PRIEST_BENEDICTION                        = 193157,      SPELL_PRIEST_BLESSED_HEALING                    = 70772,      SPELL_PRIEST_BLESSED_LIGHT                      = 196813, @@ -965,6 +965,42 @@ class spell_pri_essence_devourer_heal : public SpellScript      }  }; +// 246287 - Evangelism +class spell_pri_evangelism : public SpellScript +{ +    bool Validate(SpellInfo const* /*spellInfo*/) override +    { +        return ValidateSpellInfo +        ({ +            SPELL_PRIEST_TRINITY, +            SPELL_PRIEST_ATONEMENT_EFFECT, +            SPELL_PRIEST_ATONEMENT_EFFECT_TRINITY +        }); +    } + +    void HandleScriptEffect(SpellEffIndex /*effIndex*/) const +    { +        Unit* caster = GetCaster(); +        Unit* target = GetHitUnit(); + +        Aura* atonementAura = caster->HasAura(SPELL_PRIEST_TRINITY) +            ? target->GetAura(SPELL_PRIEST_ATONEMENT_EFFECT_TRINITY, caster->GetGUID()) +            : target->GetAura(SPELL_PRIEST_ATONEMENT_EFFECT, caster->GetGUID()); +        if (!atonementAura) +            return; + +        Milliseconds extraDuration = Seconds(GetEffectValue()); + +        atonementAura->SetDuration(atonementAura->GetDuration() + extraDuration.count()); +        atonementAura->SetMaxDuration(atonementAura->GetDuration() + extraDuration.count()); +    } + +    void Register() override +    { +        OnEffectHitTarget += SpellEffectFn(spell_pri_evangelism::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); +    } +}; +  // 33110 - Prayer of Mending (Heal)  class spell_pri_focused_mending : public SpellScript  { @@ -1515,7 +1551,7 @@ class spell_pri_power_word_radiance : public SpellScript  {      bool Validate(SpellInfo const* spellInfo) override      { -        return ValidateSpellInfo({ SPELL_PRIEST_ATONEMENT, SPELL_PRIEST_ATONEMENT_TRIGGERED, SPELL_PRIEST_TRINITY }) +        return ValidateSpellInfo({ SPELL_PRIEST_ATONEMENT, SPELL_PRIEST_ATONEMENT_EFFECT, SPELL_PRIEST_TRINITY })              && ValidateSpellEffect({ { spellInfo->Id, EFFECT_3 } });      } @@ -1549,7 +1585,7 @@ class spell_pri_power_word_radiance : public SpellScript          uint32 durationPct = GetEffectInfo(EFFECT_3).CalcValue(caster);          if (caster->HasAura(SPELL_PRIEST_ATONEMENT)) -            caster->CastSpell(GetHitUnit(), SPELL_PRIEST_ATONEMENT_TRIGGERED, CastSpellExtraArgs(SPELLVALUE_DURATION_PCT, durationPct).SetTriggerFlags(TRIGGERED_FULL_MASK)); +            caster->CastSpell(GetHitUnit(), SPELL_PRIEST_ATONEMENT_EFFECT, CastSpellExtraArgs(SPELLVALUE_DURATION_PCT, durationPct).SetTriggerFlags(TRIGGERED_FULL_MASK));      }      void Register() override @@ -1568,7 +1604,7 @@ private:      bool IsUnitWithNoAtonement(WorldObject* obj)      {          Unit* unit = obj->ToUnit(); -        return unit && !unit->HasAura(SPELL_PRIEST_ATONEMENT_TRIGGERED, GetCaster()->GetGUID()); +        return unit && !unit->HasAura(SPELL_PRIEST_ATONEMENT_EFFECT, GetCaster()->GetGUID());      }      // Returns true if obj is a unit and is injured @@ -1631,8 +1667,8 @@ class spell_pri_power_word_shield_aura : public AuraScript              SPELL_PRIEST_VOID_SHIELD_EFFECT,              SPELL_PRIEST_ATONEMENT,              SPELL_PRIEST_TRINITY, -            SPELL_PRIEST_ATONEMENT_TRIGGERED, -            SPELL_PRIEST_ATONEMENT_TRIGGERED_TRINITY, +            SPELL_PRIEST_ATONEMENT_EFFECT, +            SPELL_PRIEST_ATONEMENT_EFFECT_TRINITY,              SPELL_PRIEST_SHIELD_DISCIPLINE_PASSIVE,              SPELL_PRIEST_SHIELD_DISCIPLINE_ENERGIZE,              SPELL_PRIEST_RAPTURE, @@ -1653,7 +1689,7 @@ class spell_pri_power_word_shield_aura : public AuraScript                  AddPct(amountF, player->GetRatingBonusValue(CR_VERSATILITY_DAMAGE_DONE));                  if (AuraEffect const* mastery = caster->GetAuraEffect(SPELL_PRIEST_MASTERY_GRACE, EFFECT_0)) -                    if (GetUnitOwner()->HasAura(SPELL_PRIEST_ATONEMENT_TRIGGERED) || GetUnitOwner()->HasAura(SPELL_PRIEST_ATONEMENT_TRIGGERED_TRINITY)) +                    if (GetUnitOwner()->HasAura(SPELL_PRIEST_ATONEMENT_EFFECT) || GetUnitOwner()->HasAura(SPELL_PRIEST_ATONEMENT_EFFECT_TRINITY))                          AddPct(amountF, mastery->GetAmount());              } @@ -1685,7 +1721,7 @@ class spell_pri_power_word_shield_aura : public AuraScript              caster->CastSpell(target, SPELL_PRIEST_VOID_SHIELD_EFFECT, true);          if (caster->HasAura(SPELL_PRIEST_ATONEMENT)) -            caster->CastSpell(target, caster->HasAura(SPELL_PRIEST_TRINITY) ? SPELL_PRIEST_ATONEMENT_TRIGGERED_TRINITY : SPELL_PRIEST_ATONEMENT_TRIGGERED, true); +            caster->CastSpell(target, caster->HasAura(SPELL_PRIEST_TRINITY) ? SPELL_PRIEST_ATONEMENT_EFFECT_TRINITY : SPELL_PRIEST_ATONEMENT_EFFECT, true);      }      void HandleOnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) @@ -2191,7 +2227,7 @@ class spell_pri_shadow_mend : public SpellScript          return ValidateSpellInfo          ({              SPELL_PRIEST_ATONEMENT, -            SPELL_PRIEST_ATONEMENT_TRIGGERED, +            SPELL_PRIEST_ATONEMENT_EFFECT,              SPELL_PRIEST_TRINITY,              SPELL_PRIEST_MASOCHISM_TALENT,              SPELL_PRIEST_MASOCHISM_PERIODIC_HEAL, @@ -2208,7 +2244,7 @@ class spell_pri_shadow_mend : public SpellScript              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, GetSpell()); +                caster->CastSpell(target, SPELL_PRIEST_ATONEMENT_EFFECT, GetSpell());              // Handle Masochism talent              if (caster->HasAura(SPELL_PRIEST_MASOCHISM_TALENT) && caster->GetGUID() == target->GetGUID()) @@ -2547,6 +2583,7 @@ void AddSC_priest_spell_scripts()      RegisterSpellScript(spell_pri_empowered_renew);      RegisterSpellScript(spell_pri_epiphany);      RegisterSpellScript(spell_pri_essence_devourer_heal); +    RegisterSpellScript(spell_pri_evangelism);      RegisterSpellScript(spell_pri_focused_mending);      RegisterSpellScript(spell_pri_guardian_spirit);      RegisterSpellScript(spell_pri_halo_shadow);  | 
