fix(Scripts/ShadowLabirynth): Fixed Blackheart's Incite Chaos. (#15583)

This commit is contained in:
UltraNix
2023-04-21 13:29:32 +02:00
committed by GitHub
parent d5c89657a1
commit 197b053eb4
2 changed files with 18 additions and 5 deletions
@@ -1977,7 +1977,7 @@ void Player::UpdateCharmedAI()
if (!target || !IsValidAttackTarget(target)) if (!target || !IsValidAttackTarget(target))
{ {
target = SelectNearbyTarget(nullptr, 30); target = SelectNearbyTarget(nullptr, GetMap()->IsDungeon() ? 100.f : 30.f);
if (!target) if (!target)
{ {
if (!HasUnitState(UNIT_STATE_FOLLOW)) if (!HasUnitState(UNIT_STATE_FOLLOW))
@@ -35,7 +35,10 @@ enum BlackheartTheInciter
EVENT_SPELL_INCITE = 1, EVENT_SPELL_INCITE = 1,
EVENT_INCITE_WAIT = 2, EVENT_INCITE_WAIT = 2,
EVENT_SPELL_CHARGE = 3, EVENT_SPELL_CHARGE = 3,
EVENT_SPELL_WAR_STOMP = 4 EVENT_SPELL_KNOCKBACK = 4,
EVENT_SPELL_WAR_STOMP = 5,
NPC_INCITE_TRIGGER = 19300
}; };
class boss_blackheart_the_inciter : public CreatureScript class boss_blackheart_the_inciter : public CreatureScript
@@ -61,6 +64,7 @@ public:
void Reset() override void Reset() override
{ {
me->SetImmuneToPC(false);
InciteChaos = false; InciteChaos = false;
events.Reset(); events.Reset();
if (instance) if (instance)
@@ -110,30 +114,39 @@ public:
void UpdateAI(uint32 diff) override void UpdateAI(uint32 diff) override
{ {
if (!UpdateVictim()) if (!UpdateVictim() && !InciteChaos)
{
return; return;
}
events.Update(diff); events.Update(diff);
switch (events.ExecuteEvent()) switch (events.ExecuteEvent())
{ {
case EVENT_INCITE_WAIT: case EVENT_INCITE_WAIT:
me->SetImmuneToPC(false);
InciteChaos = false; InciteChaos = false;
break; break;
case EVENT_SPELL_INCITE: case EVENT_SPELL_INCITE:
{ {
DoCastAOE(SPELL_INCITE_CHAOS); DoCastAOE(SPELL_INCITE_CHAOS);
uint32 inciteTriggerID = NPC_INCITE_TRIGGER;
std::list<HostileReference*> t_list = me->GetThreatMgr().GetThreatList(); std::list<HostileReference*> t_list = me->GetThreatMgr().GetThreatList();
for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr != t_list.end(); ++itr) for (std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr != t_list.end(); ++itr)
{ {
Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid()); Unit* target = ObjectAccessor::GetUnit(*me, (*itr)->getUnitGuid());
if (target && target->GetTypeId() == TYPEID_PLAYER)
if (target && target->IsPlayer())
{ {
me->CastSpell(target, SPELL_INCITE_CHAOS_B, true); if (Creature* inciteTrigger = me->SummonCreature(inciteTriggerID++, *target, TEMPSUMMON_TIMED_DESPAWN, 15 * IN_MILLISECONDS))
{
inciteTrigger->CastSpell(target, SPELL_INCITE_CHAOS_B, true);
}
} }
} }
DoResetThreatList(); DoResetThreatList();
me->SetImmuneToPC(true);
InciteChaos = true; InciteChaos = true;
events.DelayEvents(15000); events.DelayEvents(15000);
events.RepeatEvent(urand(50000, 70000)); events.RepeatEvent(urand(50000, 70000));