Scripts/Spells: Added Halo effect selection script

This commit is contained in:
Shauren
2026-01-11 00:17:57 +01:00
parent df670cf0ac
commit e5a46c2da9
2 changed files with 125 additions and 2 deletions

View File

@@ -0,0 +1,20 @@
DELETE FROM `areatrigger_template` WHERE `Id` IN (3921,36160) AND `IsCustom`=0;
INSERT INTO `areatrigger_template` (`Id`,`IsCustom`,`Flags`,`ActionSetId`,`ActionSetFlags`,`VerifiedBuild`) VALUES
( 3921,0,0,0,0,65299),
(36160,0,0,0,0,65299);
DELETE FROM `areatrigger_create_properties` WHERE `Id` IN (658,33742,34681,34682,33740,34683) AND `IsCustom`=0;
INSERT INTO `areatrigger_create_properties` (`Id`,`IsCustom`,`AreaTriggerId`,`IsAreatriggerCustom`,`Flags`,`MoveCurveId`,`ScaleCurveId`,`MorphCurveId`,`FacingCurveId`,`AnimId`,`AnimKitId`,`DecalPropertiesId`,`SpellForVisuals`,`TimeToTargetScale`,`Speed`,`SpeedIsTime`,`Shape`,`ShapeData0`,`ShapeData1`,`ShapeData2`,`ShapeData3`,`ShapeData4`,`ShapeData5`,`ShapeData6`,`ShapeData7`,`ScriptName`,`VerifiedBuild`) VALUES
( 658,0, 3921,0,2,0,0,78101,0,-1,0,0,NULL,0,1,0,0,0,30,0,0,0,0,0,0,'areatrigger_pri_halo',65299), -- no talents
(33742,0, 3921,0,2,0,0,78103,0,-1,0,0,NULL,0,1,0,0,0,40,0,0,0,0,0,0,'areatrigger_pri_halo',65299), -- Power Surge
(34681,0, 3921,0,2,0,0,78886,0,-1,0,0,NULL,0,1,0,0,0,34,0,0,0,0,0,0,'areatrigger_pri_halo',65299), -- Phantom Reach
(34682,0, 3921,0,2,0,0,78887,0,-1,0,0,NULL,0,1,0,0,0,46,0,0,0,0,0,0,'areatrigger_pri_halo',65299), -- Phantom Reach + Power Surge
(33740,0,36160,0,2,0,0,76237,0,-1,0,0,NULL,0,1,0,0,0,40,0,0,0,0,0,0,'areatrigger_pri_halo_return',65299), -- Power Surge
(34683,0,36160,0,2,0,0,76237,0,-1,0,0,NULL,0,1,0,0,0,46,0,0,0,0,0,0,'areatrigger_pri_halo_return',65299); -- Phantom Reach + Power Surge
DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_pri_halo_effect_selector','spell_pri_halo_return_effect_selector');
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
(120517,'spell_pri_halo_effect_selector'),
(120644,'spell_pri_halo_effect_selector'),
(449840,'spell_pri_halo_return_effect_selector'),
(453094,'spell_pri_halo_return_effect_selector');

View File

@@ -83,6 +83,7 @@ enum PriestSpells
SPELL_PRIEST_DIVINE_BLESSING = 40440,
SPELL_PRIEST_DIVINE_FAVOR_CHASTISE = 372761,
SPELL_PRIEST_DIVINE_FAVOR_SERENITY = 372791,
SPELL_PRIEST_DIVINE_HALO = 449806,
SPELL_PRIEST_DIVINE_HYMN_HEAL = 64844,
SPELL_PRIEST_DIVINE_IMAGE_SUMMON = 392990,
SPELL_PRIEST_DIVINE_IMAGE_EMPOWER = 409387,
@@ -171,6 +172,7 @@ enum PriestSpells
SPELL_PRIEST_PENANCE_CHANNEL_HEALING = 47757,
SPELL_PRIEST_PENANCE_DAMAGE = 47666,
SPELL_PRIEST_PENANCE_HEALING = 47750,
SPELL_PRIEST_PHANTOM_REACH = 459559,
SPELL_PRIEST_POWER_LEECH_MINDBENDER_MANA = 123051,
SPELL_PRIEST_POWER_LEECH_MINDBENDER_INSANITY = 200010,
SPELL_PRIEST_POWER_LEECH_SHADOWFIEND_MANA = 343727,
@@ -2096,6 +2098,81 @@ class spell_pri_heavens_wrath : public AuraScript
}
};
// 120517 - Halo (Holy)
// 120644 - Halo (Shadow)
class spell_pri_halo_effect_selector : public SpellScript
{
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_PRIEST_PHANTOM_REACH, SPELL_PRIEST_POWER_SURGE, SPELL_PRIEST_DIVINE_HALO });
}
static void PreventUnwantedAura(SpellScript const&, WorldObject*& target)
{
target = nullptr;
}
void Register() override
{
Optional<SpellEffIndex> selectedEffect;
if (Unit* caster = GetSpell() ? GetCaster() : nullptr)
{
if (caster->HasAura(SPELL_PRIEST_DIVINE_HALO))
selectedEffect = caster->HasAura(SPELL_PRIEST_PHANTOM_REACH) ? EFFECT_5 : EFFECT_2;
else if (caster->HasAura(SPELL_PRIEST_POWER_SURGE))
selectedEffect = caster->HasAura(SPELL_PRIEST_PHANTOM_REACH) ? EFFECT_4 : EFFECT_1;
else
selectedEffect = caster->HasAura(SPELL_PRIEST_PHANTOM_REACH) ? EFFECT_3 : EFFECT_0;
}
if (selectedEffect != EFFECT_0)
OnEffectLaunch += SpellEffectFn(spell_pri_halo_effect_selector::PreventHitDefaultEffect, EFFECT_0, SPELL_EFFECT_CREATE_AREATRIGGER);
if (selectedEffect != EFFECT_1)
OnEffectLaunch += SpellEffectFn(spell_pri_halo_effect_selector::PreventHitDefaultEffect, EFFECT_1, SPELL_EFFECT_CREATE_AREATRIGGER);
if (selectedEffect != EFFECT_2)
OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_pri_halo_effect_selector::PreventUnwantedAura, EFFECT_2, TARGET_UNIT_CASTER);
if (selectedEffect != EFFECT_3)
OnEffectLaunch += SpellEffectFn(spell_pri_halo_effect_selector::PreventHitDefaultEffect, EFFECT_3, SPELL_EFFECT_CREATE_AREATRIGGER);
if (selectedEffect != EFFECT_4)
OnEffectLaunch += SpellEffectFn(spell_pri_halo_effect_selector::PreventHitDefaultEffect, EFFECT_4, SPELL_EFFECT_CREATE_AREATRIGGER);
if (selectedEffect != EFFECT_5)
OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_pri_halo_effect_selector::PreventUnwantedAura, EFFECT_5, TARGET_UNIT_CASTER);
}
};
// 449840 - Halo (Holy)
// 453094 - Halo (Shadow)
class spell_pri_halo_return_effect_selector : public SpellScript
{
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_PRIEST_PHANTOM_REACH });
}
static void PreventUnwantedAura(SpellScript const&, WorldObject*& target)
{
target = nullptr;
}
void Register() override
{
Optional<SpellEffIndex> selectedEffect;
if (Unit* caster = GetSpell() ? GetCaster() : nullptr)
selectedEffect = caster->HasAura(SPELL_PRIEST_PHANTOM_REACH) ? EFFECT_1 : EFFECT_0;
if (selectedEffect != EFFECT_0)
OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_pri_halo_return_effect_selector::PreventUnwantedAura, EFFECT_0, TARGET_UNIT_CASTER);
if (selectedEffect != EFFECT_1)
OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_pri_halo_return_effect_selector::PreventUnwantedAura, EFFECT_1, TARGET_UNIT_CASTER);
}
};
// 120644 - Halo (Shadow)
class spell_pri_halo_shadow : public SpellScript
{
@@ -2109,7 +2186,7 @@ class spell_pri_halo_shadow : public SpellScript
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_pri_halo_shadow::HandleHitTarget, EFFECT_1, SPELL_EFFECT_ENERGIZE);
OnEffectHitTarget += SpellEffectFn(spell_pri_halo_shadow::HandleHitTarget, EFFECT_6, SPELL_EFFECT_ENERGIZE);
}
};
@@ -2117,7 +2194,7 @@ class spell_pri_halo_shadow : public SpellScript
// 120644 - Halo (Shadow)
struct areatrigger_pri_halo : AreaTriggerAI
{
areatrigger_pri_halo(AreaTrigger* areatrigger) : AreaTriggerAI(areatrigger) {}
using AreaTriggerAI::AreaTriggerAI;
void OnUnitEnter(Unit* unit) override
{
@@ -2133,6 +2210,29 @@ struct areatrigger_pri_halo : AreaTriggerAI
}
};
// 449840 - Halo (Holy)
// 453094 - Halo (Shadow)
struct areatrigger_pri_halo_return : AreaTriggerAI
{
using AreaTriggerAI::AreaTriggerAI;
void OnUnitExit(Unit* unit, AreaTriggerExitReason reason) override
{
if (reason != AreaTriggerExitReason::NotInside)
return;
if (Unit* caster = at->GetCaster())
{
if (caster->IsValidAttackTarget(unit))
caster->CastSpell(unit, at->GetSpellId() == SPELL_PRIEST_HALO_SHADOW ? SPELL_PRIEST_HALO_SHADOW_DAMAGE : SPELL_PRIEST_HALO_HOLY_DAMAGE,
TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_CAST_IN_PROGRESS);
else if (caster->IsValidAssistTarget(unit))
caster->CastSpell(unit, at->GetSpellId() == SPELL_PRIEST_HALO_SHADOW ? SPELL_PRIEST_HALO_SHADOW_HEAL : SPELL_PRIEST_HALO_HOLY_HEAL,
TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_CAST_IN_PROGRESS);
}
}
};
// 391154 - Holy Mending
class spell_pri_holy_mending : public AuraScript
{
@@ -4838,8 +4938,11 @@ void AddSC_priest_spell_scripts()
RegisterSpellScript(spell_pri_focused_mending);
RegisterSpellScript(spell_pri_from_darkness_comes_light);
RegisterSpellScript(spell_pri_guardian_spirit);
RegisterSpellScript(spell_pri_halo_effect_selector);
RegisterSpellScript(spell_pri_halo_return_effect_selector);
RegisterSpellScript(spell_pri_halo_shadow);
RegisterAreaTriggerAI(areatrigger_pri_halo);
RegisterAreaTriggerAI(areatrigger_pri_halo_return);
RegisterSpellScript(spell_pri_harsh_discipline);
RegisterSpellScript(spell_pri_heavens_wrath);
RegisterSpellScript(spell_pri_holy_mending);