fix(Scripts/HoL): Fix Ionar ball lightning target and overload knockback (#23290)
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user