fix(Scripts/Arcatraz): Fix Soccothrates fel flame charge (#15600)

This commit is contained in:
Skjalf
2023-03-27 03:48:15 -03:00
committed by GitHub
parent a959942d82
commit 5ea6e250a6
@@ -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);
}