diff options
| -rw-r--r-- | sql/updates/world/master/2023_06_04_00_world.sql | 8 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_priest.cpp | 28 |
2 files changed, 36 insertions, 0 deletions
diff --git a/sql/updates/world/master/2023_06_04_00_world.sql b/sql/updates/world/master/2023_06_04_00_world.sql new file mode 100644 index 00000000000..32d674c90aa --- /dev/null +++ b/sql/updates/world/master/2023_06_04_00_world.sql @@ -0,0 +1,8 @@ +DELETE FROM `spell_proc` WHERE `SpellId` IN (390881,390885); +INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES +(390881,0x00,6,0x00000040,0x00000000,0x00000000,0x00000000,0x0,0x0,0x2,0x2,0x3,0x0,0x0,0,0,0,0), -- Healing Chorus +(390885,0x00,6,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x2,0x2,0x0,0x8,0x0,0,0,0,1); -- Healing Chorus + +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_pri_circle_of_healing'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(204883,'spell_pri_circle_of_healing'); diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index aaf52504049..66131f306af 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -348,6 +348,33 @@ class spell_pri_atonement_triggered : public AuraScript } }; +// 204883 - Circle of Healing +class spell_pri_circle_of_healing : public SpellScript +{ + PrepareSpellScript(spell_pri_circle_of_healing); + + bool Validate(SpellInfo const* spellInfo) override + { + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); + } + + void FilterTargets(std::list<WorldObject*>& targets) + { + // Note: we must remove one since target is always chosen. + uint32 const maxTargets = uint32(GetSpellInfo()->GetEffect(EFFECT_1).CalcValue(GetCaster()) - 1); + + Trinity::SelectRandomInjuredTargets(targets, maxTargets, true); + + if (Unit* explicitTarget = GetExplTargetUnit()) + targets.push_front(explicitTarget); + } + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_circle_of_healing::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY); + } +}; + // 64844 - Divine Hymn class spell_pri_divine_hymn : public SpellScript { @@ -1871,6 +1898,7 @@ void AddSC_priest_spell_scripts() RegisterSpellScript(spell_pri_aq_3p_bonus); RegisterSpellScript(spell_pri_atonement); RegisterSpellScript(spell_pri_atonement_triggered); + RegisterSpellScript(spell_pri_circle_of_healing); RegisterSpellScript(spell_pri_divine_hymn); RegisterSpellScript(spell_pri_divine_star_shadow); RegisterAreaTriggerAI(areatrigger_pri_divine_star); |
