mirror of
https://github.com/liyunfan1223/azerothcore-wotlk.git
synced 2026-08-08 07:48:02 +00:00
fix(Core/BWL): Nefarian reset behaviour (#10957)
This commit is contained in:
@@ -52,7 +52,8 @@ enum Events
|
|||||||
EVENT_SUCCESS_2,
|
EVENT_SUCCESS_2,
|
||||||
EVENT_SUCCESS_3,
|
EVENT_SUCCESS_3,
|
||||||
|
|
||||||
ACTION_RESET = 0
|
ACTION_RESET = 0,
|
||||||
|
ACTION_KILLED = 1
|
||||||
};
|
};
|
||||||
|
|
||||||
enum Says
|
enum Says
|
||||||
@@ -200,8 +201,18 @@ public:
|
|||||||
|
|
||||||
if (me->GetMapId() == 469)
|
if (me->GetMapId() == 469)
|
||||||
{
|
{
|
||||||
if (!me->FindNearestCreature(NPC_NEFARIAN, 1000.0f, true))
|
if (Creature* nefarian = me->FindNearestCreature(NPC_NEFARIAN, 1000.0f, true))
|
||||||
|
{
|
||||||
|
// Nefarian is spawned and he didn't finish his intro path yet, despawn it manually.
|
||||||
|
if (nefarian->GetMotionMaster()->GetCurrentMovementGeneratorType() == MovementGeneratorType::WAYPOINT_MOTION_TYPE)
|
||||||
|
{
|
||||||
|
nefarian->DespawnOrUnsummon();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
_Reset();
|
_Reset();
|
||||||
|
}
|
||||||
|
|
||||||
me->SetVisible(true);
|
me->SetVisible(true);
|
||||||
me->SetPhaseMask(1, true);
|
me->SetPhaseMask(1, true);
|
||||||
@@ -225,6 +236,17 @@ public:
|
|||||||
me->RemoveAura(SPELL_ROOT_SELF);
|
me->RemoveAura(SPELL_ROOT_SELF);
|
||||||
summons.DespawnAll();
|
summons.DespawnAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (action == ACTION_KILLED)
|
||||||
|
{
|
||||||
|
Unit::Kill(me, me);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void JustDied(Unit* /*killer*/) override
|
||||||
|
{
|
||||||
|
instance->SetBossState(DATA_NEFARIAN, DONE);
|
||||||
|
instance->SaveToDB();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BeginEvent()
|
void BeginEvent()
|
||||||
@@ -461,11 +483,11 @@ struct boss_nefarian : public BossAI
|
|||||||
if (_introDone) // already in combat, reset properly.
|
if (_introDone) // already in combat, reset properly.
|
||||||
{
|
{
|
||||||
_Reset();
|
_Reset();
|
||||||
if (Unit* victor = me->FindNearestCreature(NPC_VICTOR_NEFARIUS, 200.f, true))
|
if (Creature* victor = me->FindNearestCreature(NPC_VICTOR_NEFARIUS, 200.f, true))
|
||||||
{
|
{
|
||||||
if (victor->ToCreature() && victor->ToCreature()->AI())
|
if (victor->AI())
|
||||||
{
|
{
|
||||||
victor->ToCreature()->AI()->DoAction(ACTION_RESET);
|
victor->AI()->DoAction(ACTION_RESET);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
me->DespawnOrUnsummon();
|
me->DespawnOrUnsummon();
|
||||||
@@ -478,6 +500,14 @@ struct boss_nefarian : public BossAI
|
|||||||
{
|
{
|
||||||
_JustDied();
|
_JustDied();
|
||||||
Talk(SAY_DEATH);
|
Talk(SAY_DEATH);
|
||||||
|
|
||||||
|
if (Creature* victor = me->FindNearestCreature(NPC_VICTOR_NEFARIUS, 200.f, true))
|
||||||
|
{
|
||||||
|
if (victor->AI())
|
||||||
|
{
|
||||||
|
victor->AI()->DoAction(ACTION_KILLED);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void KilledUnit(Unit* victim) override
|
void KilledUnit(Unit* victim) override
|
||||||
|
|||||||
Reference in New Issue
Block a user