refactor(Scripts/ShadowLabirynth): Update Blackheart the Inciter to t… (#16049)

refactor(Scripts/ShadowLabirynth): Update Blackheart the Inciter to the new script model
This commit is contained in:
Skjalf
2023-04-21 10:04:42 -03:00
committed by GitHub
parent 197b053eb4
commit 58d1419add
@@ -25,6 +25,7 @@ enum BlackheartTheInciter
SPELL_INCITE_CHAOS_B = 33684, //debuff applied to each member of party SPELL_INCITE_CHAOS_B = 33684, //debuff applied to each member of party
SPELL_CHARGE = 33709, SPELL_CHARGE = 33709,
SPELL_WAR_STOMP = 33707, SPELL_WAR_STOMP = 33707,
SPELL_LAUGHTER = 33722,
SAY_INTRO = 0, SAY_INTRO = 0,
SAY_AGGRO = 1, SAY_AGGRO = 1,
@@ -41,137 +42,112 @@ enum BlackheartTheInciter
NPC_INCITE_TRIGGER = 19300 NPC_INCITE_TRIGGER = 19300
}; };
class boss_blackheart_the_inciter : public CreatureScript struct boss_blackheart_the_inciter : public BossAI
{ {
public: boss_blackheart_the_inciter(Creature* creature) : BossAI(creature, DATA_BLACKHEARTTHEINCITEREVENT) { }
boss_blackheart_the_inciter() : CreatureScript("boss_blackheart_the_inciter") { }
CreatureAI* GetAI(Creature* creature) const override bool InciteChaos;
void Reset() override
{ {
return GetShadowLabyrinthAI<boss_blackheart_the_inciterAI>(creature); _Reset();
me->SetImmuneToPC(false);
InciteChaos = false;
} }
struct boss_blackheart_the_inciterAI : public ScriptedAI void KilledUnit(Unit* victim) override
{ {
boss_blackheart_the_inciterAI(Creature* creature) : ScriptedAI(creature) if (victim->IsPlayer() && urand(0, 1))
{ {
instance = creature->GetInstanceScript(); Talk(SAY_SLAY);
}
}
void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
_JustDied();
}
void JustEngagedWith(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
me->CallForHelp(100.0f);
events.ScheduleEvent(EVENT_SPELL_INCITE, 24000);
events.ScheduleEvent(EVENT_INCITE_WAIT, 15000);
events.ScheduleEvent(EVENT_SPELL_CHARGE, urand(30000, 50000));
events.ScheduleEvent(EVENT_SPELL_WAR_STOMP, urand(16950, 26350));
_JustEngagedWith();
}
void EnterEvadeMode(EvadeReason why) override
{
if (InciteChaos && SelectTargetFromPlayerList(100.0f))
return;
CreatureAI::EnterEvadeMode(why);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() && !InciteChaos)
{
return;
} }
InstanceScript* instance; events.Update(diff);
EventMap events; switch (events.ExecuteEvent())
bool InciteChaos;
void Reset() override
{ {
case EVENT_INCITE_WAIT:
me->SetImmuneToPC(false); me->SetImmuneToPC(false);
InciteChaos = false; InciteChaos = false;
events.Reset(); break;
if (instance) case EVENT_SPELL_INCITE:
{
instance->SetData(DATA_BLACKHEARTTHEINCITEREVENT, NOT_STARTED);
}
}
void KilledUnit(Unit* victim) override
{ {
if (victim->GetTypeId() == TYPEID_PLAYER && urand(0, 1)) DoCastAOE(SPELL_INCITE_CHAOS);
DoCastSelf(SPELL_LAUGHTER, true);
uint32 inciteTriggerID = NPC_INCITE_TRIGGER;
std::list<HostileReference*> t_list = me->GetThreatMgr().GetThreatList();
for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr != t_list.end(); ++itr)
{ {
Talk(SAY_SLAY); Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
}
}
void JustDied(Unit* /*killer*/) override if (target && target->IsPlayer())
{ {
Talk(SAY_DEATH); if (Creature* inciteTrigger = me->SummonCreature(inciteTriggerID++, *target, TEMPSUMMON_TIMED_DESPAWN, 15 * IN_MILLISECONDS))
if (instance)
{
instance->SetData(DATA_BLACKHEARTTHEINCITEREVENT, DONE);
}
}
void JustEngagedWith(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
me->CallForHelp(100.0f);
events.ScheduleEvent(EVENT_SPELL_INCITE, 24000);
events.ScheduleEvent(EVENT_INCITE_WAIT, 15000);
events.ScheduleEvent(EVENT_SPELL_CHARGE, urand(30000, 50000));
events.ScheduleEvent(EVENT_SPELL_WAR_STOMP, urand(16950, 26350));
if (instance)
{
instance->SetData(DATA_BLACKHEARTTHEINCITEREVENT, IN_PROGRESS);
}
}
void EnterEvadeMode(EvadeReason why) override
{
if (InciteChaos && SelectTargetFromPlayerList(100.0f))
return;
CreatureAI::EnterEvadeMode(why);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() && !InciteChaos)
{
return;
}
events.Update(diff);
switch (events.ExecuteEvent())
{
case EVENT_INCITE_WAIT:
me->SetImmuneToPC(false);
InciteChaos = false;
break;
case EVENT_SPELL_INCITE:
{ {
DoCastAOE(SPELL_INCITE_CHAOS); inciteTrigger->CastSpell(target, SPELL_INCITE_CHAOS_B, true);
uint32 inciteTriggerID = NPC_INCITE_TRIGGER;
std::list<HostileReference*> t_list = me->GetThreatMgr().GetThreatList();
for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr != t_list.end(); ++itr)
{
Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (target && target->IsPlayer())
{
if (Creature* inciteTrigger = me->SummonCreature(inciteTriggerID++, *target, TEMPSUMMON_TIMED_DESPAWN, 15 * IN_MILLISECONDS))
{
inciteTrigger->CastSpell(target, SPELL_INCITE_CHAOS_B, true);
}
}
}
DoResetThreatList();
me->SetImmuneToPC(true);
InciteChaos = true;
events.DelayEvents(15000);
events.RepeatEvent(urand(50000, 70000));
events.ScheduleEvent(EVENT_INCITE_WAIT, 15000);
break;
} }
case EVENT_SPELL_CHARGE: }
DoCastRandomTarget(SPELL_CHARGE);
events.RepeatEvent(urand(30000, 50000));
break;
case EVENT_SPELL_WAR_STOMP:
DoCastAOE(SPELL_WAR_STOMP);
events.RepeatEvent(urand(16950, 26350));
break;
} }
if (InciteChaos) DoResetThreatList();
return; me->SetImmuneToPC(true);
InciteChaos = true;
DoMeleeAttackIfReady(); events.DelayEvents(15000);
events.RepeatEvent(urand(50000, 70000));
events.ScheduleEvent(EVENT_INCITE_WAIT, 15000);
break;
} }
}; case EVENT_SPELL_CHARGE:
DoCastRandomTarget(SPELL_CHARGE);
events.RepeatEvent(urand(30000, 50000));
break;
case EVENT_SPELL_WAR_STOMP:
DoCastAOE(SPELL_WAR_STOMP);
events.RepeatEvent(urand(16950, 26350));
break;
}
if (InciteChaos)
return;
DoMeleeAttackIfReady();
}
}; };
void AddSC_boss_blackheart_the_inciter() void AddSC_boss_blackheart_the_inciter()
{ {
new boss_blackheart_the_inciter(); RegisterShadowLabyrinthCreatureAI(boss_blackheart_the_inciter);
} }