From 7e29e023e8ab940431e02885596701e1db7d1f34 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Mon, 10 Feb 2025 04:46:31 -0300 Subject: [PATCH] =?UTF-8?q?fix(Core/Creature):=20Allow=20temp=20summons=20?= =?UTF-8?q?to=20respawn=20when=20despawning=20on=20=E2=80=A6=20(#21363)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/Entities/Creature/Creature.cpp | 2 +- .../game/Entities/Creature/TemporarySummon.cpp | 4 ---- src/server/game/Maps/Map.cpp | 6 ++++-- src/server/game/Maps/Map.h | 2 +- .../IcecrownCitadel/instance_icecrown_citadel.cpp | 11 ----------- .../Northrend/Ulduar/Ulduar/instance_ulduar.cpp | 14 +++----------- 6 files changed, 9 insertions(+), 30 deletions(-) diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 398fa75f3..f2e07c735 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -2198,7 +2198,7 @@ void Creature::DespawnOnEvade(Seconds respawnDelay) if (TempSummon* whoSummon = ToTempSummon()) { - LOG_WARN("entities.unit", "DespawnOnEvade called on a temporary summon."); + GetMap()->ScheduleCreatureRespawn(GetGUID(), respawnDelay, GetHomePosition()); whoSummon->UnSummon(); return; } diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp index 28b923d1e..a0c044a5d 100644 --- a/src/server/game/Entities/Creature/TemporarySummon.cpp +++ b/src/server/game/Entities/Creature/TemporarySummon.cpp @@ -310,13 +310,9 @@ void TempSummon::UnSummon(uint32 msTime) if (WorldObject* owner = GetSummoner()) { if (owner->IsCreature() && owner->ToCreature()->IsAIEnabled) - { owner->ToCreature()->AI()->SummonedCreatureDespawn(this); - } else if (owner->IsGameObject() && owner->ToGameObject()->AI()) - { owner->ToGameObject()->AI()->SummonedCreatureDespawn(this); - } } AddObjectToRemoveList(); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 0cacbccf3..fb13330f5 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -3718,12 +3718,14 @@ void Map::RemoveOldCorpses() } } -void Map::ScheduleCreatureRespawn(ObjectGuid creatureGuid, Milliseconds respawnTimer) +void Map::ScheduleCreatureRespawn(ObjectGuid creatureGuid, Milliseconds respawnTimer, Position pos) { - _creatureRespawnScheduler.Schedule(respawnTimer, [this, creatureGuid](TaskContext) + _creatureRespawnScheduler.Schedule(respawnTimer, [this, creatureGuid, pos](TaskContext) { if (Creature* creature = GetCreature(creatureGuid)) creature->Respawn(); + else + SummonCreature(creatureGuid.GetEntry(), pos); }); } diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index e753d841f..e6e10c26d 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -596,7 +596,7 @@ public: TaskScheduler _creatureRespawnScheduler; - void ScheduleCreatureRespawn(ObjectGuid /*creatureGuid*/, Milliseconds /*respawnTimer*/); + void ScheduleCreatureRespawn(ObjectGuid /*creatureGuid*/, Milliseconds /*respawnTimer*/, Position pos = Position()); void LoadCorpseData(); void DeleteCorpseData(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 2887192b6..f2640d9c5 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -1161,17 +1161,6 @@ public: { IsSindragosaIntroDone = true; HandleDropAttempt(); - if (instance->IsHeroic()) - { - if (HeroicAttempts) - { - Events.ScheduleEvent(EVENT_RESPAWN_SINDRAGOSA, 30s); - } - } - else - { - Events.ScheduleEvent(EVENT_RESPAWN_SINDRAGOSA, 30s); - } } if (state == DONE && !instance->IsHeroic() && LichKingHeroicAvailable) { diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp index dd8e7ae95..a987a7c82 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp @@ -369,6 +369,9 @@ public: break; case NPC_ALGALON: m_uiAlgalonGUID = creature->GetGUID(); + + if (!m_algalonTimer) + creature->DespawnOrUnsummon(); break; case NPC_HARPOON_FIRE_STATE: { @@ -811,17 +814,6 @@ public: go->EnableCollision(false); } - if (data == FAIL) - { - scheduler.Schedule(5s, [this](TaskContext) - { - if (m_algalonTimer && (m_algalonTimer <= 60 || m_algalonTimer == TIMER_ALGALON_TO_SUMMON)) - { - instance->SummonCreature(NPC_ALGALON, AlgalonLandPos); - } - }); - } - break; // Achievement