diff --git a/MosswartMassacre/NearbyObjectsTracker.cs b/MosswartMassacre/NearbyObjectsTracker.cs index daa0a4c..1104dc4 100644 --- a/MosswartMassacre/NearbyObjectsTracker.cs +++ b/MosswartMassacre/NearbyObjectsTracker.cs @@ -104,8 +104,21 @@ namespace MosswartMassacre var dungeonMap = _dungeonMapReader.ReadDungeonMap(landcell, characterName); if (dungeonMap != null) { - var json = JsonConvert.SerializeObject(dungeonMap); - await WebSocket.SendDungeonMapAsync(json); + try + { + var json = JsonConvert.SerializeObject(dungeonMap); + _logger?.Log($"[Radar] Sending dungeon_map ({json.Length} bytes) for 0x{landblock:X8}"); + await WebSocket.SendDungeonMapAsync(json); + _logger?.Log($"[Radar] dungeon_map sent successfully"); + } + catch (Exception ex) + { + _logger?.Log($"[Radar] dungeon_map send failed: {ex.Message}"); + } + } + else + { + _logger?.Log($"[Radar] ReadDungeonMap returned null for 0x{landblock:X8} (already cached or not a dungeon)"); } } } @@ -114,11 +127,20 @@ namespace MosswartMassacre { try { + // Guard against COM exceptions during state transitions + string characterName; + int playerId; + double playerHeading; + try + { + characterName = CoreManager.Current.CharacterFilter.Name; + playerId = CoreManager.Current.CharacterFilter.Id; + playerHeading = CoreManager.Current.Actions.Heading; + } + catch { return null; } + var playerCoords = Coordinates.Me; var playerRawPos = Utils.GetPlayerPosition(); - double playerHeading = CoreManager.Current.Actions.Heading; - string characterName = CoreManager.Current.CharacterFilter.Name; - int playerId = CoreManager.Current.CharacterFilter.Id; uint landcell = Utils.GetPlayerLandcell(); uint landblock = landcell & 0xFFFF0000; diff --git a/MosswartMassacre/bin/Release/MosswartMassacre.dll b/MosswartMassacre/bin/Release/MosswartMassacre.dll index ace5089..0a828b5 100644 Binary files a/MosswartMassacre/bin/Release/MosswartMassacre.dll and b/MosswartMassacre/bin/Release/MosswartMassacre.dll differ