diff --git a/MareSynchronos/Factories/CharacterDataFactory.cs b/MareSynchronos/Factories/CharacterDataFactory.cs index e6c420b..c5c8c62 100644 --- a/MareSynchronos/Factories/CharacterDataFactory.cs +++ b/MareSynchronos/Factories/CharacterDataFactory.cs @@ -238,7 +238,7 @@ public class CharacterDataFactory Logger.Verbose("Character is null but it shouldn't be, waiting"); Thread.Sleep(50); } - + _dalamudUtil.WaitWhileCharacterIsDrawing(charaPointer); Stopwatch st = Stopwatch.StartNew(); @@ -342,21 +342,31 @@ public class CharacterDataFactory foreach (var item in transientResourceManager.GetTransientResources(charaPointer)) { - Logger.Verbose("Found transient resource: " + item); - AddReplacement(item, objectKind, previousData, 1, true); + if (!previousData.FileReplacements[objectKind].Any(f => f.GamePaths.Any(p => p.ToLowerInvariant() == item.ToLowerInvariant()))) + { + Logger.Verbose("Found transient resource: " + item); + AddReplacement(item, objectKind, previousData, 1, true); + } } foreach (var item in transientResourceManager.GetSemiTransientResources(objectKind)) { - Logger.Verbose("Found semi transient resource: " + item); if (!previousData.FileReplacements.ContainsKey(objectKind)) { previousData.FileReplacements.Add(objectKind, new()); } - if (!previousData.FileReplacements[objectKind].Any(k => k.ResolvedPath == item.ResolvedPath)) + if (!previousData.FileReplacements[objectKind].Any(k => k.ResolvedPath.ToLowerInvariant() == item.ResolvedPath.ToLowerInvariant())) { - previousData.FileReplacements[objectKind].Add(item); + if (_ipcManager.PenumbraResolvePath(item.GamePaths.First()).ToLowerInvariant() == item.GamePaths.First().ToLowerInvariant()) + { + transientResourceManager.RemoveTransientResource(charaPointer, item); + } + else + { + Logger.Verbose("Found semi transient resource: " + item); + previousData.FileReplacements[objectKind].Add(item); + } } } diff --git a/MareSynchronos/Managers/IpcManager.cs b/MareSynchronos/Managers/IpcManager.cs index c2b7304..b8a1127 100644 --- a/MareSynchronos/Managers/IpcManager.cs +++ b/MareSynchronos/Managers/IpcManager.cs @@ -254,11 +254,11 @@ namespace MareSynchronos.Managers }); } - public string? PenumbraResolvePath(string path) + public string PenumbraResolvePath(string path) { - if (!CheckPenumbraApi()) return null; + if (!CheckPenumbraApi()) return path; var resolvedPath = _penumbraResolvePlayer!.InvokeFunc(path); - return resolvedPath; + return resolvedPath ?? path; } public string[] PenumbraReverseResolvePlayer(string path) diff --git a/MareSynchronos/Managers/PlayerManager.cs b/MareSynchronos/Managers/PlayerManager.cs index c208585..ec1ac93 100644 --- a/MareSynchronos/Managers/PlayerManager.cs +++ b/MareSynchronos/Managers/PlayerManager.cs @@ -157,7 +157,7 @@ namespace MareSynchronos.Managers if (address == item.Address) { Logger.Debug("Penumbra redraw Event for " + item.ObjectKind); - _transientResourceManager.CleanSemiTransientResources(item.ObjectKind); + //_transientResourceManager.CleanSemiTransientResources(item.ObjectKind); item.HasUnprocessedUpdate = true; } }