Compare commits

...

35 Commits

Author SHA1 Message Date
天鹭
014c571b31
Merge 90583a88fda2144fafc9a62eb74bfea191423ab1 into 7ac7228315a54c2dc33118a6d443589adb20d8bb 2025-11-07 08:31:41 -05:00
天鹭
90583a88fd
Merge branch 'master' into ScheduleCreatureRespawn 2025-11-07 15:45:32 +08:00
天鹭
01bea93901
Merge branch 'master' into ScheduleCreatureRespawn 2025-11-07 04:50:35 +08:00
天鹭
8bc5a60d11
Merge branch 'master' into ScheduleCreatureRespawn 2025-11-06 04:41:47 +08:00
天鹭
3aea01ab79
Merge branch 'master' into ScheduleCreatureRespawn 2025-11-04 22:55:27 +08:00
天鹭
cbe83969db
Merge branch 'master' into ScheduleCreatureRespawn 2025-11-02 14:48:17 +08:00
天鹭
f8cc64e51d
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-31 23:31:04 +08:00
天鹭
3b1eb7a127
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-31 08:01:18 +08:00
天鹭
4a086361b7
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-31 00:55:55 +08:00
天鹭
14e5b72793
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-30 11:30:07 +08:00
天鹭
c585d034b3
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-28 08:40:50 +08:00
天鹭
7cabf14f0d
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-27 16:25:56 +08:00
天鹭
7b98bdaa2d
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-26 22:06:57 +08:00
天鹭
c14f7c698e
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-25 08:42:25 +08:00
天鹭
ece853f680
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-23 09:25:39 +08:00
天鹭
6471af26d7
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-19 05:29:43 +08:00
天鹭
e3be601d35
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-17 13:56:24 +08:00
天鹭
832b3091f0 HasEvents 2025-10-17 13:55:29 +08:00
天鹭
12c56e2a3b m_Events to Events 2025-10-17 13:15:59 +08:00
天鹭
5e2dd4bf41
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-16 20:48:35 +08:00
天鹭
cf5d1b8bde
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-14 10:42:16 +08:00
天鹭
e3d8396182
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-13 16:56:50 +08:00
天鹭
ad5b615e28
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-13 08:11:56 +08:00
天鹭
08a21b16c8
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-12 07:51:12 +08:00
天鹭
c888ab9325
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-11 17:53:00 +08:00
天鹭
052d8b1cae
Update src/server/game/Maps/Map.cpp
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-11 16:04:45 +08:00
天鹭
f3fc1b6e49
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-11 09:13:48 +08:00
天鹭
dc246b145d
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-10 13:34:03 +08:00
天鹭
1ac11e13e4
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-10 07:43:50 +08:00
天鹭
1ee1d6cd6b
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-08 23:21:19 +08:00
天鹭
a620b29b57
Merge branch 'master' into ScheduleCreatureRespawn 2025-10-05 00:38:13 +08:00
天鹭
d931498c70
Update Map.cpp 2025-10-05 00:37:40 +08:00
天鹭
131613c770
Update Map.cpp 2025-10-04 22:38:41 +08:00
天鹭
eb05f05b48
Update Map.h 2025-10-04 22:37:49 +08:00
天鹭
bcee010ef3
Update EventProcessor.h 2025-10-04 22:36:56 +08:00
3 changed files with 11 additions and 7 deletions

View File

@ -120,7 +120,7 @@ class EventProcessor
[[nodiscard]] uint64 CalculateQueueTime(uint64 delay) const;
void CancelEventGroup(uint8 group);
bool HaveEventList() const { return !m_events.empty(); }
bool HasEvents() const { return !m_events.empty(); }
protected:
uint64 m_time{0};

View File

@ -54,6 +54,10 @@ Map::~Map()
{
// UnloadAll must be called before deleting the map
// Kill all scheduled events without executing them, since the map and its objects are being destroyed.
// This prevents events from running on invalid or deleted objects during map destruction.
Events.KillAllEvents(false);
sScriptMgr->OnDestroyMap(this);
if (!m_scriptSchedule.empty())
@ -447,7 +451,7 @@ void Map::Update(const uint32 t_diff, const uint32 s_diff, bool /*thread*/)
}
}
_creatureRespawnScheduler.Update(t_diff);
Events.Update(t_diff);
if (!t_diff)
{
@ -2758,13 +2762,13 @@ void Map::RemoveOldCorpses()
void Map::ScheduleCreatureRespawn(ObjectGuid creatureGuid, Milliseconds respawnTimer, Position pos)
{
_creatureRespawnScheduler.Schedule(respawnTimer, [this, creatureGuid, pos](TaskContext)
Events.AddEventAtOffset([this, creatureGuid, pos]()
{
if (Creature* creature = GetCreature(creatureGuid))
creature->Respawn();
else
SummonCreature(creatureGuid.GetEntry(), pos);
});
}, respawnTimer);
}
/// Send a packet to all players (or players selected team) in the zone (except self if mentioned)

View File

@ -23,6 +23,7 @@
#include "DataMap.h"
#include "Define.h"
#include "DynamicTree.h"
#include "EventProcessor.h"
#include "GameObjectModel.h"
#include "GridDefines.h"
#include "GridRefMgr.h"
@ -33,7 +34,6 @@
#include "PathGenerator.h"
#include "Position.h"
#include "SharedDefines.h"
#include "TaskScheduler.h"
#include "Timer.h"
#include "GridTerrainData.h"
#include <bitset>
@ -172,7 +172,7 @@ public:
// currently unused for normal maps
bool CanUnload(uint32 diff)
{
if (!m_unloadTimer)
if (!m_unloadTimer || Events.HasEvents())
return false;
if (m_unloadTimer <= diff)
@ -430,7 +430,7 @@ public:
void UpdatePlayerZoneStats(uint32 oldZone, uint32 newZone);
[[nodiscard]] uint32 ApplyDynamicModeRespawnScaling(WorldObject const* obj, uint32 respawnDelay) const;
TaskScheduler _creatureRespawnScheduler;
EventProcessor Events;
void ScheduleCreatureRespawn(ObjectGuid /*creatureGuid*/, Milliseconds /*respawnTimer*/, Position pos = Position());