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:
+85
-109
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user