fix(Scripts/Arcatraz): Fix Soccothrates fel flame charge (#15600)
This commit is contained in:
+65
-72
@@ -51,9 +51,6 @@ enum Spells
|
||||
|
||||
enum Events
|
||||
{
|
||||
EVENT_FELFIRE_SHOCK = 1,
|
||||
EVENT_KNOCK_AWAY = 2,
|
||||
|
||||
EVENT_PREFIGHT_1 = 3,
|
||||
EVENT_PREFIGHT_2 = 4,
|
||||
EVENT_PREFIGHT_3 = 5,
|
||||
@@ -62,23 +59,19 @@ enum Events
|
||||
EVENT_PREFIGHT_6 = 8,
|
||||
EVENT_PREFIGHT_7 = 9,
|
||||
EVENT_PREFIGHT_8 = 10,
|
||||
EVENT_PREFIGHT_9 = 11,
|
||||
EVENT_ME_FIRST = 12,
|
||||
EVENT_CHECK_HEALTH = 13,
|
||||
EVENT_SPELL_CHARGE = 14,
|
||||
EVENT_FELFIRE = 15,
|
||||
EVENT_PREFIGHT_9 = 11
|
||||
};
|
||||
|
||||
class boss_wrath_scryer_soccothrates : public CreatureScript
|
||||
struct boss_wrath_scryer_soccothrates : public BossAI
|
||||
{
|
||||
public:
|
||||
boss_wrath_scryer_soccothrates() : CreatureScript("boss_wrath_scryer_soccothrates") { }
|
||||
|
||||
struct boss_wrath_scryer_soccothratesAI : public BossAI
|
||||
{
|
||||
boss_wrath_scryer_soccothratesAI(Creature* creature) : BossAI(creature, DATA_SOCCOTHRATES)
|
||||
boss_wrath_scryer_soccothrates(Creature* creature) : BossAI(creature, DATA_SOCCOTHRATES)
|
||||
{
|
||||
preFight = instance->GetBossState(DATA_DALLIAH) == DONE;
|
||||
|
||||
scheduler.SetValidator([this]
|
||||
{
|
||||
return !me->HasUnitState(UNIT_STATE_CASTING);
|
||||
});
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
@@ -87,6 +80,17 @@ public:
|
||||
events2.Reset();
|
||||
me->CastSpell(me, SPELL_FEL_IMMOLATION, true);
|
||||
me->SetImmuneToAll(false);
|
||||
|
||||
ScheduleHealthCheckEvent(25, [&]
|
||||
{
|
||||
if (Creature* dalliah = instance->GetCreature(DATA_DALLIAH))
|
||||
{
|
||||
if (dalliah->IsAlive())
|
||||
{
|
||||
dalliah->AI()->Talk(SAY_SOCCOTHRATES_25_PERCENT);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void InitializeAI() override
|
||||
@@ -114,22 +118,60 @@ public:
|
||||
{
|
||||
_JustEngagedWith();
|
||||
events2.Reset();
|
||||
events.ScheduleEvent(EVENT_FELFIRE_SHOCK, urand(12000, 14000));
|
||||
events.ScheduleEvent(EVENT_KNOCK_AWAY, urand(11000, 12000));
|
||||
events.ScheduleEvent(EVENT_ME_FIRST, 6000);
|
||||
events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000);
|
||||
|
||||
Talk(SAY_AGGRO);
|
||||
|
||||
if (Creature* dalliah = instance->GetCreature(DATA_DALLIAH))
|
||||
{
|
||||
if (dalliah->IsAlive() && !dalliah->IsInCombat())
|
||||
{
|
||||
dalliah->AI()->Talk(SAY_AGGRO_SOCCOTHRATES_FIRST, 6s);
|
||||
}
|
||||
}
|
||||
|
||||
scheduler.Schedule(11s, 12s, [this](TaskContext context)
|
||||
{
|
||||
me->CastSpell(me, SPELL_KNOCK_AWAY, false);
|
||||
Talk(SAY_KNOCK_AWAY);
|
||||
|
||||
scheduler.Schedule(4600ms, [this](TaskContext)
|
||||
{
|
||||
DoCastAOE(SPELL_CHARGE);
|
||||
DoCastSelf(SPELL_FELFIRE, true);
|
||||
|
||||
scheduler.Schedule(300ms, [this](TaskContext context2)
|
||||
{
|
||||
if (me->GetVictim() && !me->IsWithinMeleeRange(me->GetVictim()))
|
||||
{
|
||||
DoCastAOE(SPELL_FELFIRE, true);
|
||||
}
|
||||
|
||||
if (context2.GetRepeatCounter() <= 6)
|
||||
{
|
||||
context2.Repeat();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
context.Repeat();
|
||||
}).Schedule(12s, 14s, [this](TaskContext context)
|
||||
{
|
||||
DoCastVictim(SPELL_FELFIRE_SHOCK);
|
||||
context.Repeat();
|
||||
});
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* victim) override
|
||||
{
|
||||
if (victim->GetTypeId() == TYPEID_PLAYER)
|
||||
if (victim->IsPlayer())
|
||||
{
|
||||
Talk(SAY_SLAY);
|
||||
}
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who) override
|
||||
{
|
||||
if (!preFight && who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 70.0f))
|
||||
if (!preFight && who->IsPlayer() && me->IsWithinDistInMap(who, 70.0f))
|
||||
{
|
||||
Talk(SAY_SOCCOTHRATES_CONVO_1);
|
||||
events2.ScheduleEvent(EVENT_PREFIGHT_1, 2000);
|
||||
@@ -194,50 +236,7 @@ public:
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
switch (events.ExecuteEvent())
|
||||
{
|
||||
case EVENT_FELFIRE_SHOCK:
|
||||
me->CastSpell(me->GetVictim(), SPELL_FELFIRE_SHOCK, false);
|
||||
events.ScheduleEvent(EVENT_FELFIRE_SHOCK, urand(12000, 14000));
|
||||
break;
|
||||
case EVENT_KNOCK_AWAY:
|
||||
me->CastSpell(me, SPELL_KNOCK_AWAY, false);
|
||||
Talk(SAY_KNOCK_AWAY);
|
||||
events.ScheduleEvent(EVENT_KNOCK_AWAY, urand(11000, 12000));
|
||||
events.ScheduleEvent(EVENT_SPELL_CHARGE, 4600);
|
||||
break;
|
||||
case EVENT_SPELL_CHARGE:
|
||||
me->CastSpell(me, SPELL_CHARGE, true);
|
||||
me->CastSpell(me, SPELL_FELFIRE, true);
|
||||
events.ScheduleEvent(EVENT_FELFIRE, 300);
|
||||
events.ScheduleEvent(EVENT_FELFIRE, 600);
|
||||
events.ScheduleEvent(EVENT_FELFIRE, 900);
|
||||
events.ScheduleEvent(EVENT_FELFIRE, 1200);
|
||||
events.ScheduleEvent(EVENT_FELFIRE, 1500);
|
||||
events.ScheduleEvent(EVENT_FELFIRE, 1800);
|
||||
break;
|
||||
case EVENT_FELFIRE:
|
||||
me->CastSpell(me, SPELL_FELFIRE, true);
|
||||
break;
|
||||
case EVENT_ME_FIRST:
|
||||
if (Creature* dalliah = instance->GetCreature(DATA_DALLIAH))
|
||||
if (dalliah->IsAlive() && !dalliah->IsInCombat())
|
||||
dalliah->AI()->Talk(SAY_AGGRO_SOCCOTHRATES_FIRST);
|
||||
break;
|
||||
case EVENT_CHECK_HEALTH:
|
||||
if (HealthBelowPct(25))
|
||||
{
|
||||
if (Creature* dalliah = instance->GetCreature(DATA_DALLIAH))
|
||||
dalliah->AI()->Talk(SAY_SOCCOTHRATES_25_PERCENT);
|
||||
break;
|
||||
}
|
||||
events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000);
|
||||
break;
|
||||
}
|
||||
scheduler.Update(diff);
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
@@ -247,13 +246,7 @@ public:
|
||||
EventMap events2;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return GetArcatrazAI<boss_wrath_scryer_soccothratesAI>(creature);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_wrath_scryer_soccothrates()
|
||||
{
|
||||
new boss_wrath_scryer_soccothrates();
|
||||
RegisterArcatrazCreatureAI(boss_wrath_scryer_soccothrates);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user