fix(Scripts/VioletHold): fix NPCs not respawning in Violet Hold (#25453)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -84,7 +84,6 @@ public:
|
|||||||
_cleaned = false;
|
_cleaned = false;
|
||||||
_encounterStatus = NOT_STARTED;
|
_encounterStatus = NOT_STARTED;
|
||||||
_events.Reset();
|
_events.Reset();
|
||||||
_events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0ms);
|
|
||||||
_gateHealth = 100;
|
_gateHealth = 100;
|
||||||
_waveCount = 0;
|
_waveCount = 0;
|
||||||
_portalLocation = 0;
|
_portalLocation = 0;
|
||||||
@@ -212,6 +211,7 @@ public:
|
|||||||
sinclari->AI()->Talk(SAY_SINCLARI_LEAVING);
|
sinclari->AI()->Talk(SAY_SINCLARI_LEAVING);
|
||||||
}
|
}
|
||||||
_events.RescheduleEvent(EVENT_GUARDS_FALL_BACK, 4s);
|
_events.RescheduleEvent(EVENT_GUARDS_FALL_BACK, 4s);
|
||||||
|
_events.RescheduleEvent(EVENT_CHECK_PLAYERS, 5s);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DATA_PORTAL_DEFEATED:
|
case DATA_PORTAL_DEFEATED:
|
||||||
@@ -376,8 +376,8 @@ public:
|
|||||||
case EVENT_START_ENCOUNTER:
|
case EVENT_START_ENCOUNTER:
|
||||||
if (Creature* sinclari = GetCreature(DATA_SINCLARI))
|
if (Creature* sinclari = GetCreature(DATA_SINCLARI))
|
||||||
{
|
{
|
||||||
sinclari->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
|
|
||||||
sinclari->AI()->Talk(SAY_SINCLARI_DOOR_LOCK);
|
sinclari->AI()->Talk(SAY_SINCLARI_DOOR_LOCK);
|
||||||
|
sinclari->DespawnOrUnsummon(5s);
|
||||||
}
|
}
|
||||||
if (Creature* doorSeal = GetCreature(DATA_DOOR_SEAL))
|
if (Creature* doorSeal = GetCreature(DATA_DOOR_SEAL))
|
||||||
doorSeal->RemoveAllAuras();
|
doorSeal->RemoveAllAuras();
|
||||||
@@ -448,19 +448,17 @@ public:
|
|||||||
|
|
||||||
void OnPlayerEnter(Player* plr) override
|
void OnPlayerEnter(Player* plr) override
|
||||||
{
|
{
|
||||||
if (DoNeedCleanup(plr->IsAlive()))
|
|
||||||
InstanceCleanup();
|
|
||||||
|
|
||||||
if (_encounterStatus == IN_PROGRESS)
|
if (_encounterStatus == IN_PROGRESS)
|
||||||
{
|
{
|
||||||
|
if (DoNeedCleanup(plr->IsAlive()))
|
||||||
|
InstanceCleanup();
|
||||||
|
|
||||||
plr->SendUpdateWorldState(WORLD_STATE_VIOLET_HOLD_SHOW, 1);
|
plr->SendUpdateWorldState(WORLD_STATE_VIOLET_HOLD_SHOW, 1);
|
||||||
plr->SendUpdateWorldState(WORLD_STATE_VIOLET_HOLD_PRISON_STATE, (uint32)_gateHealth);
|
plr->SendUpdateWorldState(WORLD_STATE_VIOLET_HOLD_PRISON_STATE, (uint32)_gateHealth);
|
||||||
plr->SendUpdateWorldState(WORLD_STATE_VIOLET_HOLD_WAVE_COUNT, (uint32)_waveCount);
|
plr->SendUpdateWorldState(WORLD_STATE_VIOLET_HOLD_WAVE_COUNT, (uint32)_waveCount);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
plr->SendUpdateWorldState(WORLD_STATE_VIOLET_HOLD_SHOW, 0);
|
plr->SendUpdateWorldState(WORLD_STATE_VIOLET_HOLD_SHOW, 0);
|
||||||
|
|
||||||
_events.RescheduleEvent(EVENT_CHECK_PLAYERS, 5s);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DoNeedCleanup(bool enter)
|
bool DoNeedCleanup(bool enter)
|
||||||
@@ -488,18 +486,19 @@ public:
|
|||||||
if (Creature* sinclari = GetCreature(DATA_SINCLARI))
|
if (Creature* sinclari = GetCreature(DATA_SINCLARI))
|
||||||
{
|
{
|
||||||
sinclari->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
|
sinclari->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
|
||||||
sinclari->DespawnOrUnsummon();
|
sinclari->DespawnOrUnsummon(0ms, 3s);
|
||||||
sinclari->SetRespawnTime(3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (ObjectGuid const& guid : _guardGuid)
|
for (ObjectGuid& guid : _guardGuid)
|
||||||
|
{
|
||||||
if (Creature* guard = instance->GetCreature(guid))
|
if (Creature* guard = instance->GetCreature(guid))
|
||||||
{
|
{
|
||||||
guard->DespawnOrUnsummon();
|
|
||||||
guard->SetRespawnTime(3);
|
|
||||||
guard->SetVisible(GetBossState(DATA_CYANIGOSA) != DONE);
|
guard->SetVisible(GetBossState(DATA_CYANIGOSA) != DONE);
|
||||||
guard->SetReactState(REACT_AGGRESSIVE);
|
guard->SetReactState(REACT_AGGRESSIVE);
|
||||||
|
guard->DespawnOrUnsummon(0ms, 3s);
|
||||||
}
|
}
|
||||||
|
guid.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
if (Creature* portal = GetCreature(DATA_TELEPORTATION_PORTAL))
|
if (Creature* portal = GetCreature(DATA_TELEPORTATION_PORTAL))
|
||||||
portal->DespawnOrUnsummon();
|
portal->DespawnOrUnsummon();
|
||||||
@@ -530,26 +529,27 @@ public:
|
|||||||
{
|
{
|
||||||
if (Creature* boss = GetCreature(id))
|
if (Creature* boss = GetCreature(id))
|
||||||
{
|
{
|
||||||
boss->DespawnOrUnsummon();
|
|
||||||
boss->SetRespawnTime(3);
|
|
||||||
boss->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
boss->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||||
boss->SetImmuneToNPC(true);
|
boss->SetImmuneToNPC(true);
|
||||||
|
boss->DespawnOrUnsummon(0ms, 3s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Creature* guard1 = instance->GetCreature(_erekemGuardGuid[0]))
|
if (Creature* guard1 = instance->GetCreature(_erekemGuardGuid[0]))
|
||||||
{
|
{
|
||||||
guard1->DespawnOrUnsummon();
|
|
||||||
guard1->SetRespawnTime(3);
|
|
||||||
guard1->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
guard1->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||||
guard1->SetImmuneToNPC(true);
|
guard1->SetImmuneToNPC(true);
|
||||||
|
guard1->DespawnOrUnsummon(0ms, 3s);
|
||||||
}
|
}
|
||||||
|
_erekemGuardGuid[0].Clear();
|
||||||
if (Creature* guard2 = instance->GetCreature(_erekemGuardGuid[1]))
|
if (Creature* guard2 = instance->GetCreature(_erekemGuardGuid[1]))
|
||||||
{
|
{
|
||||||
guard2->DespawnOrUnsummon();
|
|
||||||
guard2->SetRespawnTime(3);
|
|
||||||
guard2->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
guard2->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||||
guard2->SetImmuneToNPC(true);
|
guard2->SetImmuneToNPC(true);
|
||||||
|
guard2->DespawnOrUnsummon(0ms, 3s);
|
||||||
}
|
}
|
||||||
|
_erekemGuardGuid[1].Clear();
|
||||||
|
|
||||||
if (Creature* cyanigosa = GetCreature(DATA_CYANIGOSA))
|
if (Creature* cyanigosa = GetCreature(DATA_CYANIGOSA))
|
||||||
cyanigosa->DespawnOrUnsummon();
|
cyanigosa->DespawnOrUnsummon();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user