mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-21 01:37:37 +01:00
Scripts/Spells: Added Halo effect selection script
This commit is contained in:
20
sql/updates/world/master/2026_01_11_00_world.sql
Normal file
20
sql/updates/world/master/2026_01_11_00_world.sql
Normal 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');
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user