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

View File

@@ -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

View File

@@ -25,10 +25,8 @@
enum IonarSpells
{
SPELL_BALL_LIGHTNING_N = 52780,
SPELL_BALL_LIGHTNING_H = 59800,
SPELL_STATIC_OVERLOAD_N = 52658,
SPELL_STATIC_OVERLOAD_H = 59795,
SPELL_BALL_LIGHTNING = 52780,
SPELL_STATIC_OVERLOAD = 52658,
SPELL_STATIC_OVERLOAD_KNOCK = 53337,
SPELL_DISPERSE = 52770,
@@ -36,8 +34,7 @@ enum IonarSpells
SPELL_SPARK_DESPAWN = 52776,
//Spark of Ionar
SPELL_SPARK_VISUAL_TRIGGER_N = 52667,
SPELL_SPARK_VISUAL_TRIGGER_H = 59833,
SPELL_SPARK_VISUAL_TRIGGER = 52667,
SPELL_RANDOM_LIGHTNING = 52663,
};
@@ -75,8 +72,11 @@ struct boss_ionar : public BossAI
void Reset() override
{
_Reset();
HealthCheck = 50;
me->SetVisible(true);
ScheduleHealthCheckEvent(50, [&] {
DoCastSelf(SPELL_DISPERSE);
});
}
void ScheduleEvents(bool spark)
@@ -120,16 +120,14 @@ struct boss_ionar : public BossAI
{
Talk(SAY_SPLIT);
Creature* spark;
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, me->GetMap()->IsHeroic() ? SPELL_SPARK_VISUAL_TRIGGER_H : SPELL_SPARK_VISUAL_TRIGGER_N, true);
spark->CastSpell(spark, SPELL_SPARK_VISUAL_TRIGGER, true);
spark->CastSpell(spark, SPELL_RANDOM_LIGHTNING, true);
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))
spark->GetMotionMaster()->MoveFollow(tgt, 0.0f, 0.0f, MOTION_SLOT_CONTROLLED);
@@ -156,23 +154,13 @@ struct boss_ionar : public BossAI
switch (events.ExecuteEvent())
{
case EVENT_BALL_LIGHTNING:
if (Unit* target = SelectTarget(SelectTargetMethod::Random))
me->CastSpell(target, me->GetMap()->IsHeroic() ? SPELL_BALL_LIGHTNING_H : SPELL_BALL_LIGHTNING_N, false);
DoCastRandomTarget(SPELL_BALL_LIGHTNING, 1, 0.0f, false);
events.Repeat(10s, 11s);
break;
case EVENT_STATIC_OVERLOAD:
if (Unit* target = SelectTarget(SelectTargetMethod::Random))
me->CastSpell(target, me->GetMap()->IsHeroic() ? SPELL_STATIC_OVERLOAD_H : SPELL_STATIC_OVERLOAD_N, false);
DoCastRandomTarget(SPELL_STATIC_OVERLOAD);
events.Repeat(5s, 6s);
break;
case EVENT_CHECK_HEALTH:
if (HealthBelowPct(HealthCheck))
me->CastSpell(me, SPELL_DISPERSE, false);
events.Repeat(1s);
return;
case EVENT_CALL_SPARKS:
{
EntryCheckPredicate pred(NPC_SPARK_OF_IONAR);
@@ -192,9 +180,6 @@ struct boss_ionar : public BossAI
DoMeleeAttackIfReady();
}
private:
uint8 HealthCheck;
};
struct npc_spark_of_ionar : public ScriptedAI
@@ -252,7 +237,8 @@ class spell_ionar_static_overload : public AuraScript
return;
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