Skip to content

Commit 4db84d1

Browse files
committed
add pending events after marking map loaded
1 parent f181839 commit 4db84d1

File tree

4 files changed

+39
-47
lines changed

4 files changed

+39
-47
lines changed

Intersect.Client.Core/Networking/PacketHandler.cs

Lines changed: 31 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -259,20 +259,20 @@ internal static void HandleMap(MapPacket packet, bool skipSave = false)
259259

260260
var endUpdateMapRequestTime = DateTime.UtcNow;
261261

262-
if (MapInstance.TryGet(mapId, out var mapInstance))
262+
if (MapInstance.TryGet(mapId, out var map))
263263
{
264-
if (packet.Revision == mapInstance.Revision)
264+
if (packet.Revision == map.Revision)
265265
{
266266
return;
267267
}
268268

269-
mapInstance.Dispose(false, false);
269+
map.Dispose(false, false);
270270
}
271271

272272
var endMapTryGet = DateTime.UtcNow;
273273

274-
mapInstance = new MapInstance(mapId);
275-
MapInstance.Lookup.Set(mapId, mapInstance);
274+
map = new MapInstance(mapId);
275+
MapInstance.Lookup.Set(mapId, map);
276276

277277
var endMapLookupSet = DateTime.UtcNow;
278278

@@ -285,57 +285,59 @@ internal static void HandleMap(MapPacket packet, bool skipSave = false)
285285
DateTime endInitAutotiles;
286286
DateTime endPendingEvents;
287287

288-
if (!mapInstance.Lock.TryAcquireLock("HandleMap packet handler", out var lockRef))
288+
if (!map.Lock.TryAcquireLock("HandleMap packet handler", out var lockRef))
289289
{
290290
throw new InvalidOperationException("Failed to acquire map instance lock from HandleMap packet handler");
291291
}
292292

293293
using (lockRef)
294294
{
295-
mapInstance.Load(packet.Data, markLoaded: false);
295+
map.Load(packet.Data, markLoaded: false);
296296
endMapLoad = DateTime.UtcNow;
297297

298-
mapInstance.LoadTileData(packet.TileData);
298+
map.LoadTileData(packet.TileData);
299299
endMapLoadTileData = DateTime.UtcNow;
300300

301-
mapInstance.AttributeData = packet.AttributeData;
301+
map.AttributeData = packet.AttributeData;
302302
endSetAttributeData = DateTime.UtcNow;
303303

304-
mapInstance.CreateMapSounds();
304+
map.CreateMapSounds();
305305
endCreateMapSounds = DateTime.UtcNow;
306306

307307
if (mapId == Globals.Me.MapId)
308308
{
309-
Audio.PlayMusic(mapInstance.Music, ClientConfiguration.Instance.MusicFadeTimer, ClientConfiguration.Instance.MusicFadeTimer, true);
309+
Audio.PlayMusic(map.Music, ClientConfiguration.Instance.MusicFadeTimer, ClientConfiguration.Instance.MusicFadeTimer, true);
310310
}
311311
endPlayMusic = DateTime.UtcNow;
312312

313-
mapInstance.GridX = packet.GridX;
314-
mapInstance.GridY = packet.GridY;
315-
mapInstance.CameraHolds = packet.CameraHolds;
313+
map.GridX = packet.GridX;
314+
map.GridY = packet.GridY;
315+
map.CameraHolds = packet.CameraHolds;
316316
endGridXYCameraHolds = DateTime.UtcNow;
317317

318-
mapInstance.Autotiles.InitAutotiles(mapInstance.GenerateAutotileGrid());
318+
map.Autotiles.InitAutotiles(map.GenerateAutotileGrid());
319319

320320
endInitAutotiles = DateTime.UtcNow;
321321

322+
map.MarkLoaded();
323+
322324
if (Globals.PendingEvents.TryGetValue(mapId, out var pendingEventsForMap))
323325
{
324-
foreach (var (eventId, stalePendingEvent) in pendingEventsForMap)
326+
Log.Debug($"Received map {map.Name} ({mapId}) has {pendingEventsForMap.Count} pending events");
327+
328+
foreach (var (eventId, pendingEvent) in pendingEventsForMap)
325329
{
326-
mapInstance.AddEvent(eventId, stalePendingEvent);
330+
map.AddEvent(eventId, pendingEvent);
327331
}
328332

329333
pendingEventsForMap.Clear();
330334
}
331335
endPendingEvents = DateTime.UtcNow;
332-
333-
mapInstance.MarkLoaded();
334336
}
335337

336338
var endMapLock = DateTime.UtcNow;
337339

338-
MapInstance.DoMapLoaded(mapInstance);
340+
MapInstance.DoMapLoaded(map);
339341

340342
var endDoMapLoadedInvocation = DateTime.UtcNow;
341343

@@ -356,7 +358,7 @@ internal static void HandleMap(MapPacket packet, bool skipSave = false)
356358
var elapsedPendingEvents = endPendingEvents - endInitAutotiles;
357359

358360
Log.Debug($"""
359-
[HandleMap] Received map {packet.MapId} ({mapInstance.Name})
361+
[HandleMap] Received map {packet.MapId} ({map.Name})
360362
- Full method took {elapsedHandleMap.TotalMilliseconds}ms
361363
- Map caching took {elapsedMapCache.TotalMilliseconds}ms
362364
- Update Map Request Time took {elapsedUpdateMapRequestTime.TotalMilliseconds}ms
@@ -471,30 +473,21 @@ public void HandlePacket(IPacketSender packetSender, ProjectileEntityPacket pack
471473
//EventEntityPacket
472474
public void HandlePacket(IPacketSender packetSender, EventEntityPacket packet)
473475
{
474-
var map = MapInstance.Get(packet.MapId);
475-
if (map != null)
476+
if (MapInstance.TryGet(packet.MapId, out var map))
476477
{
477-
map?.AddEvent(packet.EntityId, packet);
478+
Log.Debug($"Received event entity '{packet.Name}' ({packet.EntityId}) for map {map.Name} ({map.Id})");
479+
map.AddEvent(packet.EntityId, packet);
478480
}
479481
else
480482
{
481-
var dict = Globals.PendingEvents.ContainsKey(packet.MapId)
482-
? Globals.PendingEvents[packet.MapId]
483-
: new Dictionary<Guid, EventEntityPacket>();
484-
485-
if (dict.ContainsKey(packet.EntityId))
483+
Log.Debug($"Received event entity '{packet.Name}' ({packet.EntityId}) for not-yet-loaded map {packet.MapId}");
484+
if (!Globals.PendingEvents.TryGetValue(packet.MapId, out var pendingEventsForMap))
486485
{
487-
dict[packet.EntityId] = packet;
488-
}
489-
else
490-
{
491-
dict.Add(packet.EntityId, packet);
486+
pendingEventsForMap = [];
487+
Globals.PendingEvents[packet.MapId] = pendingEventsForMap;
492488
}
493489

494-
if (!Globals.PendingEvents.ContainsKey(packet.MapId))
495-
{
496-
Globals.PendingEvents.Add(packet.MapId, dict);
497-
}
490+
pendingEventsForMap[packet.EntityId] = packet;
498491
}
499492
}
500493

Intersect.Server.Core/Entities/Events/EventPageInstance.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Intersect.Enums;
22
using Intersect.GameObjects;
33
using Intersect.GameObjects.Events;
4+
using Intersect.Logging;
45
using Intersect.Network.Packets.Server;
56
using Intersect.Server.Entities.Pathfinding;
67
using Intersect.Server.Framework;
@@ -237,9 +238,10 @@ public EventMovementSpeed MovementSpeed
237238

238239
public void SendToPlayer()
239240
{
240-
if (Player != null)
241+
if (Player is {} player)
241242
{
242-
PacketSender.SendEntityDataTo(Player, this);
243+
Log.Debug($"Sending EventPageInstance '{Name}' to '{player.Name}' ({Id} to {player.Id})");
244+
PacketSender.SendEntityDataTo(player, this);
243245
}
244246
else
245247
{
@@ -894,7 +896,7 @@ public bool ShouldDespawn(MapController map)
894896

895897
return false;
896898
}
897-
899+
898900
protected override EntityItemSource? AsItemSource()
899901
{
900902
return null;

Intersect.Server.Core/Entities/Player.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6862,12 +6862,9 @@ public Event FindGlobalEventInstance(EventPageInstance en)
68626862

68636863
public void SendEvents()
68646864
{
6865-
foreach (var evt in EventLookup)
6865+
foreach (var (_, eventInstance) in EventLookup)
68666866
{
6867-
if (evt.Value.PageInstance != null)
6868-
{
6869-
evt.Value.PageInstance.SendToPlayer();
6870-
}
6867+
eventInstance.PageInstance?.SendToPlayer();
68716868
}
68726869
}
68736870

Intersect.Server.Core/Networking/PacketSender.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ public static void SendMap(Client client, Guid mapId, bool allEditors = false, s
313313
if (entity != null)
314314
{
315315
//TODO: INCLUDE EVENTS IN MAP PACKET
316-
if (mapId == entity.MapId)
316+
if (mapId == entity.MapId || entity.Map.SurroundingMapIds.Contains(mapId))
317317
{
318318
entity.SendEvents();
319319
}

0 commit comments

Comments
 (0)