fix(Scripts/HoL): Fix Ionar ball lightning target and overload knockback (#23290)

This commit is contained in:
Andrew
2025-10-18 10:28:28 -03:00
committed by GitHub
parent 4919e07a7f
commit 671298cc5b
2 changed files with 19 additions and 28 deletions
@@ -0,0 +1,5 @@
DELETE FROM `spelldifficulty_dbc` WHERE `ID` IN (52780, 52658, 52667);
INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`, `DifficultySpellID_3`, `DifficultySpellID_4`) VALUES
(52780, 52780, 59800, 0, 0), -- Ball Lightning
(52658, 52658, 59795, 0, 0), -- Static Overload
(52667, 52667, 59833, 0, 0); -- Spark Visual Trigger
@@ -25,10 +25,8 @@
enum IonarSpells enum IonarSpells
{ {
SPELL_BALL_LIGHTNING_N = 52780, SPELL_BALL_LIGHTNING = 52780,
SPELL_BALL_LIGHTNING_H = 59800, SPELL_STATIC_OVERLOAD = 52658,
SPELL_STATIC_OVERLOAD_N = 52658,
SPELL_STATIC_OVERLOAD_H = 59795,
SPELL_STATIC_OVERLOAD_KNOCK = 53337, SPELL_STATIC_OVERLOAD_KNOCK = 53337,
SPELL_DISPERSE = 52770, SPELL_DISPERSE = 52770,
@@ -36,8 +34,7 @@ enum IonarSpells
SPELL_SPARK_DESPAWN = 52776, SPELL_SPARK_DESPAWN = 52776,
//Spark of Ionar //Spark of Ionar
SPELL_SPARK_VISUAL_TRIGGER_N = 52667, SPELL_SPARK_VISUAL_TRIGGER = 52667,
SPELL_SPARK_VISUAL_TRIGGER_H = 59833,
SPELL_RANDOM_LIGHTNING = 52663, SPELL_RANDOM_LIGHTNING = 52663,
}; };
@@ -75,8 +72,11 @@ struct boss_ionar : public BossAI
void Reset() override void Reset() override
{ {
_Reset(); _Reset();
HealthCheck = 50;
me->SetVisible(true); me->SetVisible(true);
ScheduleHealthCheckEvent(50, [&] {
DoCastSelf(SPELL_DISPERSE);
});
} }
void ScheduleEvents(bool spark) void ScheduleEvents(bool spark)
@@ -120,16 +120,14 @@ struct boss_ionar : public BossAI
{ {
Talk(SAY_SPLIT); Talk(SAY_SPLIT);
Creature* spark;
for (uint8 i = 0; i < 5; ++i) for (uint8 i = 0; i < 5; ++i)
{ {
if ((spark = me->SummonCreature(NPC_SPARK_OF_IONAR, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 20000))) if (Creature* spark = me->SummonCreature(NPC_SPARK_OF_IONAR, me->GetPosition(), TEMPSUMMON_TIMED_DESPAWN, 20000))
{ {
summons.Summon(spark); spark->CastSpell(spark, SPELL_SPARK_VISUAL_TRIGGER, true);
spark->CastSpell(spark, me->GetMap()->IsHeroic() ? SPELL_SPARK_VISUAL_TRIGGER_H : SPELL_SPARK_VISUAL_TRIGGER_N, true);
spark->CastSpell(spark, SPELL_RANDOM_LIGHTNING, true); spark->CastSpell(spark, SPELL_RANDOM_LIGHTNING, true);
spark->SetUnitFlag(UNIT_FLAG_PACIFIED | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); spark->SetUnitFlag(UNIT_FLAG_PACIFIED | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
spark->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0); spark->SetHomePosition(me->GetPosition());
if (Player* tgt = SelectTargetFromPlayerList(100)) if (Player* tgt = SelectTargetFromPlayerList(100))
spark->GetMotionMaster()->MoveFollow(tgt, 0.0f, 0.0f, MOTION_SLOT_CONTROLLED); spark->GetMotionMaster()->MoveFollow(tgt, 0.0f, 0.0f, MOTION_SLOT_CONTROLLED);
@@ -156,23 +154,13 @@ struct boss_ionar : public BossAI
switch (events.ExecuteEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_BALL_LIGHTNING: case EVENT_BALL_LIGHTNING:
if (Unit* target = SelectTarget(SelectTargetMethod::Random)) DoCastRandomTarget(SPELL_BALL_LIGHTNING, 1, 0.0f, false);
me->CastSpell(target, me->GetMap()->IsHeroic() ? SPELL_BALL_LIGHTNING_H : SPELL_BALL_LIGHTNING_N, false);
events.Repeat(10s, 11s); events.Repeat(10s, 11s);
break; break;
case EVENT_STATIC_OVERLOAD: case EVENT_STATIC_OVERLOAD:
if (Unit* target = SelectTarget(SelectTargetMethod::Random)) DoCastRandomTarget(SPELL_STATIC_OVERLOAD);
me->CastSpell(target, me->GetMap()->IsHeroic() ? SPELL_STATIC_OVERLOAD_H : SPELL_STATIC_OVERLOAD_N, false);
events.Repeat(5s, 6s); events.Repeat(5s, 6s);
break; break;
case EVENT_CHECK_HEALTH:
if (HealthBelowPct(HealthCheck))
me->CastSpell(me, SPELL_DISPERSE, false);
events.Repeat(1s);
return;
case EVENT_CALL_SPARKS: case EVENT_CALL_SPARKS:
{ {
EntryCheckPredicate pred(NPC_SPARK_OF_IONAR); EntryCheckPredicate pred(NPC_SPARK_OF_IONAR);
@@ -192,9 +180,6 @@ struct boss_ionar : public BossAI
DoMeleeAttackIfReady(); DoMeleeAttackIfReady();
} }
private:
uint8 HealthCheck;
}; };
struct npc_spark_of_ionar : public ScriptedAI struct npc_spark_of_ionar : public ScriptedAI
@@ -252,7 +237,8 @@ class spell_ionar_static_overload : public AuraScript
return; return;
if (Unit* target = GetTarget()) if (Unit* target = GetTarget())
target->CastSpell(target, SPELL_STATIC_OVERLOAD_KNOCK, true); if (target->GetMap() && !target->GetMap()->IsHeroic())
target->CastSpell(target, SPELL_STATIC_OVERLOAD_KNOCK, true);
} }
void Register() override void Register() override