diff --git a/MareSynchronos/Managers/PlayerManager.cs b/MareSynchronos/Managers/PlayerManager.cs index 17b1849..dff239f 100644 --- a/MareSynchronos/Managers/PlayerManager.cs +++ b/MareSynchronos/Managers/PlayerManager.cs @@ -9,7 +9,6 @@ using FFXIVClientStructs.FFXIV.Client.Game.Character; using System.Collections.Generic; using System.Linq; using MareSynchronos.Models; -using Newtonsoft.Json; namespace MareSynchronos.Managers { @@ -47,6 +46,7 @@ namespace MareSynchronos.Managers _transientResourceManager.TransientResourceLoaded += HandleTransientResourceLoad; _dalamudUtil.DelayedFrameworkUpdate += DalamudUtilOnDelayedFrameworkUpdate; _ipcManager.HeelsOffsetChangeEvent += HeelsOffsetChanged; + _dalamudUtil.FrameworkUpdate += DalamudUtilOnFrameworkUpdate; Logger.Debug("Watching Player, ApiController is Connected: " + _apiController.IsConnected); @@ -64,6 +64,11 @@ namespace MareSynchronos.Managers }; } + private void DalamudUtilOnFrameworkUpdate() + { + _transientResourceManager.PlayerRelatedPointers = playerRelatedObjects.Select(f => f.CurrentAddress).ToArray(); + } + public void HandleTransientResourceLoad(IntPtr gameObj) { foreach (var obj in playerRelatedObjects) @@ -106,6 +111,7 @@ namespace MareSynchronos.Managers _ipcManager.PenumbraRedrawEvent -= IpcManager_PenumbraRedrawEvent; _dalamudUtil.DelayedFrameworkUpdate -= DalamudUtilOnDelayedFrameworkUpdate; + _dalamudUtil.FrameworkUpdate -= DalamudUtilOnFrameworkUpdate; _transientResourceManager.TransientResourceLoaded -= HandleTransientResourceLoad; @@ -222,7 +228,7 @@ namespace MareSynchronos.Managers Task.Run(async () => { - foreach(var item in unprocessedObjects) + foreach (var item in unprocessedObjects) { _dalamudUtil.WaitWhileCharacterIsDrawing("self " + item.ObjectKind.ToString(), item.Address, token); } diff --git a/MareSynchronos/Managers/TransientResourceManager.cs b/MareSynchronos/Managers/TransientResourceManager.cs index ac7410c..0c9f49d 100644 --- a/MareSynchronos/Managers/TransientResourceManager.cs +++ b/MareSynchronos/Managers/TransientResourceManager.cs @@ -18,10 +18,10 @@ namespace MareSynchronos.Managers private readonly DalamudUtil dalamudUtil; public event TransientResourceLoadedEvent? TransientResourceLoaded; + public IntPtr[] PlayerRelatedPointers = Array.Empty(); private ConcurrentDictionary> TransientResources { get; } = new(); private ConcurrentDictionary> SemiTransientResources { get; } = new(); - private CancellationTokenSource transientInvokeDelayCts = new CancellationTokenSource(); public TransientResourceManager(IpcManager manager, DalamudUtil dalamudUtil) { manager.PenumbraResourceLoadEvent += Manager_PenumbraResourceLoadEvent; @@ -81,6 +81,11 @@ namespace MareSynchronos.Managers private void Manager_PenumbraResourceLoadEvent(IntPtr gameObject, string gamePath, string filePath) { + if (!PlayerRelatedPointers.Contains(gameObject)) + { + return; + } + if (!TransientResources.ContainsKey(gameObject)) { TransientResources[gameObject] = new(); @@ -115,7 +120,7 @@ namespace MareSynchronos.Managers { if (TransientResources.ContainsKey(gameObject)) { - TransientResources[gameObject].RemoveWhere(f => fileReplacement.ResolvedPath.ToLowerInvariant() == f.ToLowerInvariant()); + TransientResources[gameObject].RemoveWhere(f => fileReplacement.GamePaths.Any(g => g.ToLowerInvariant() == f.ToLowerInvariant())); } } @@ -146,12 +151,15 @@ namespace MareSynchronos.Managers { if (!SemiTransientResources[objectKind].Any(f => f.GamePaths.First().ToLowerInvariant() == item.ToLowerInvariant())) { - Logger.Debug("Persisting " + item.ToLowerInvariant()); var fileReplacement = createFileReplacement(item.ToLowerInvariant(), true); if (!fileReplacement.HasFileReplacement) fileReplacement = createFileReplacement(item.ToLowerInvariant(), false); - SemiTransientResources[objectKind].Add(fileReplacement); + if (fileReplacement.HasFileReplacement) + { + Logger.Debug("Persisting " + item.ToLowerInvariant()); + SemiTransientResources[objectKind].Add(fileReplacement); + } } } catch (Exception ex) diff --git a/MareSynchronos/MareSynchronos.csproj b/MareSynchronos/MareSynchronos.csproj index 0550ecb..b6b0be1 100644 --- a/MareSynchronos/MareSynchronos.csproj +++ b/MareSynchronos/MareSynchronos.csproj @@ -3,7 +3,7 @@ - 0.4.2 + 0.4.3 https://github.com/Penumbra-Sync/client diff --git a/MareSynchronos/Models/PlayerRelatedObject.cs b/MareSynchronos/Models/PlayerRelatedObject.cs index 5b135fd..f91b221 100644 --- a/MareSynchronos/Models/PlayerRelatedObject.cs +++ b/MareSynchronos/Models/PlayerRelatedObject.cs @@ -19,7 +19,7 @@ namespace MareSynchronos.Models public IntPtr Address { get; set; } public IntPtr DrawObjectAddress { get; set; } - private IntPtr CurrentAddress + public IntPtr CurrentAddress { get {