diff --git a/MareSynchronos/Factories/CharacterDataFactory.cs b/MareSynchronos/Factories/CharacterDataFactory.cs index 3471e8a..f5b1a08 100644 --- a/MareSynchronos/Factories/CharacterDataFactory.cs +++ b/MareSynchronos/Factories/CharacterDataFactory.cs @@ -266,7 +266,7 @@ public class CharacterDataFactory foreach (var item in previousData.FileReplacements[objectKind]) { - transientResourceManager.RemoveTransientResource((IntPtr)human, item); + transientResourceManager.RemoveTransientResource(charaPointer, item); } if (objectKind == ObjectKind.Player) @@ -281,7 +281,7 @@ public class CharacterDataFactory foreach (var item in previousData.FileReplacements[objectKind]) { - transientResourceManager.RemoveTransientResource((IntPtr)weaponObject, item); + transientResourceManager.RemoveTransientResource(charaPointer, item); } foreach (var item in transientResourceManager.GetTransientResources((IntPtr)weaponObject)) @@ -329,11 +329,11 @@ public class CharacterDataFactory foreach (var item in previousData.FileReplacements[objectKind]) { - transientResourceManager.RemoveTransientResource((IntPtr)human, item); + transientResourceManager.RemoveTransientResource(charaPointer, item); } } - foreach (var item in transientResourceManager.GetTransientResources((IntPtr)human)) + foreach (var item in transientResourceManager.GetTransientResources(charaPointer)) { Logger.Verbose("Found transient resource: " + item); AddReplacement(item, objectKind, previousData, 1); diff --git a/MareSynchronos/Managers/CachedPlayer.cs b/MareSynchronos/Managers/CachedPlayer.cs index 5070de0..2845e46 100644 --- a/MareSynchronos/Managers/CachedPlayer.cs +++ b/MareSynchronos/Managers/CachedPlayer.cs @@ -348,6 +348,8 @@ public class CachedPlayer _dalamudUtil.FrameworkUpdate -= DalamudUtilOnFrameworkUpdate; _ipcManager.PenumbraRedrawEvent -= IpcManagerOnPenumbraRedrawEvent; _ipcManager.PenumbraRemoveTemporaryCollection(PlayerName); + _downloadCancellationTokenSource?.Cancel(); + _downloadCancellationTokenSource?.Dispose(); if (PlayerCharacter != null && PlayerCharacter.IsValid()) { foreach (var item in _cachedData.FileReplacements) @@ -355,9 +357,6 @@ public class CachedPlayer RevertCustomizationData(item.Key); } } - - _downloadCancellationTokenSource?.Cancel(); - _downloadCancellationTokenSource?.Dispose(); } catch (Exception ex) { diff --git a/MareSynchronos/Managers/FileCacheManager.cs b/MareSynchronos/Managers/FileCacheManager.cs index 5538a25..d415e3c 100644 --- a/MareSynchronos/Managers/FileCacheManager.cs +++ b/MareSynchronos/Managers/FileCacheManager.cs @@ -316,7 +316,7 @@ namespace MareSynchronos.Managers foreach (var deletion in fileCachesToDelete) { var entries = db.FileCaches.Where(f => - f.Hash == deletion.Hash && f.Filepath.ToLowerInvariant() == deletion.Filepath.ToLowerInvariant()); + f.Hash == deletion.Hash && f.Filepath.ToLower() == deletion.Filepath.ToLower()); if (await entries.AnyAsync(ct)) { Logger.Verbose("Removing file from DB: " + deletion.Filepath); diff --git a/MareSynchronos/Managers/PlayerManager.cs b/MareSynchronos/Managers/PlayerManager.cs index baef948..1616997 100644 --- a/MareSynchronos/Managers/PlayerManager.cs +++ b/MareSynchronos/Managers/PlayerManager.cs @@ -65,7 +65,7 @@ namespace MareSynchronos.Managers { foreach (var obj in playerRelatedObjects) { - if (obj.DrawObjectAddress == drawObj && !obj.HasUnprocessedUpdate) + if (obj.Address == drawObj && !obj.HasUnprocessedUpdate) { obj.HasUnprocessedUpdate = true; OnPlayerOrAttachedObjectsChanged(); diff --git a/MareSynchronos/Managers/TransientResourceManager.cs b/MareSynchronos/Managers/TransientResourceManager.cs index dcd52a0..857740a 100644 --- a/MareSynchronos/Managers/TransientResourceManager.cs +++ b/MareSynchronos/Managers/TransientResourceManager.cs @@ -29,7 +29,7 @@ namespace MareSynchronos.Managers { foreach (var item in TransientResources.ToList()) { - if (!dalamudUtil.IsDrawObjectPresent(item.Key)) + if (!dalamudUtil.IsGameObjectPresent(item.Key)) { Logger.Debug("Object not present anymore: " + item.Key); TransientResources.Remove(item.Key); @@ -37,9 +37,9 @@ namespace MareSynchronos.Managers } } - public List GetTransientResources(IntPtr drawObject) + public List GetTransientResources(IntPtr gameObject) { - if (TransientResources.TryGetValue(drawObject, out var result)) + if (TransientResources.TryGetValue(gameObject, out var result)) { return result.ToList(); } @@ -47,11 +47,11 @@ namespace MareSynchronos.Managers return new List(); } - private void Manager_PenumbraResourceLoadEvent(IntPtr drawObject, string gamePath, string filePath) + private void Manager_PenumbraResourceLoadEvent(IntPtr gameObject, string gamePath, string filePath) { - if (!TransientResources.ContainsKey(drawObject)) + if (!TransientResources.ContainsKey(gameObject)) { - TransientResources[drawObject] = new(); + TransientResources[gameObject] = new(); } if (filePath.StartsWith("|")) @@ -61,11 +61,11 @@ namespace MareSynchronos.Managers var newPath = filePath.ToLowerInvariant().Replace("\\", "/"); - if (filePath != gamePath && !TransientResources[drawObject].Contains(newPath)) + if (filePath != gamePath && !TransientResources[gameObject].Contains(newPath)) { - TransientResources[drawObject].Add(newPath); - Logger.Debug($"Adding {filePath.ToLowerInvariant().Replace("\\", "/")} for {drawObject}"); - TransientResourceLoaded?.Invoke(drawObject); + TransientResources[gameObject].Add(newPath); + Logger.Debug($"Adding {filePath.ToLowerInvariant().Replace("\\", "/")} for {gameObject}"); + TransientResourceLoaded?.Invoke(gameObject); } } diff --git a/MareSynchronos/MareSynchronos.csproj b/MareSynchronos/MareSynchronos.csproj index 093d1cf..25aef47 100644 --- a/MareSynchronos/MareSynchronos.csproj +++ b/MareSynchronos/MareSynchronos.csproj @@ -3,7 +3,7 @@ - 0.3.10 + 0.4.0 https://github.com/Penumbra-Sync/client diff --git a/MareSynchronos/Models/PlayerRelatedObject.cs b/MareSynchronos/Models/PlayerRelatedObject.cs index 7d8e50e..34b6ad5 100644 --- a/MareSynchronos/Models/PlayerRelatedObject.cs +++ b/MareSynchronos/Models/PlayerRelatedObject.cs @@ -19,7 +19,18 @@ namespace MareSynchronos.Models public IntPtr Address { get; set; } public IntPtr DrawObjectAddress { get; set; } - private IntPtr CurrentAddress => getAddress.Invoke(); + private IntPtr CurrentAddress + { + get + { + try + { + return getAddress.Invoke(); + } + catch + { return IntPtr.Zero; } + } + } public PlayerRelatedObject(ObjectKind objectKind, IntPtr address, IntPtr drawObjectAddress, Func getAddress) { diff --git a/MareSynchronos/Utils/DalamudUtil.cs b/MareSynchronos/Utils/DalamudUtil.cs index 4e70830..850b001 100644 --- a/MareSynchronos/Utils/DalamudUtil.cs +++ b/MareSynchronos/Utils/DalamudUtil.cs @@ -28,11 +28,11 @@ namespace MareSynchronos.Utils public event LogOut? LogOut; public event FrameworkUpdate? FrameworkUpdate; - public unsafe bool IsDrawObjectPresent(IntPtr key) + public unsafe bool IsGameObjectPresent(IntPtr key) { foreach (var obj in _objectTable) { - if ((IntPtr)((GameObject*)obj.Address)->GetDrawObject() == key) + if (obj.Address == key) { return true; } @@ -105,7 +105,7 @@ namespace MareSynchronos.Utils public string PlayerName => _clientState.LocalPlayer?.Name.ToString() ?? "--"; - public IntPtr PlayerPointer => _clientState.LocalPlayer!.Address; + public IntPtr PlayerPointer => _clientState.LocalPlayer?.Address ?? IntPtr.Zero; public PlayerCharacter PlayerCharacter => _clientState.LocalPlayer!;