diff --git a/MareSynchronos/PlayerData/Factories/PlayerDataFactory.cs b/MareSynchronos/PlayerData/Factories/PlayerDataFactory.cs index b0d0772..d3a63fd 100644 --- a/MareSynchronos/PlayerData/Factories/PlayerDataFactory.cs +++ b/MareSynchronos/PlayerData/Factories/PlayerDataFactory.cs @@ -79,6 +79,7 @@ public class PlayerDataFactory var previousFileReplacements = previousData.FileReplacements.ToDictionary(d => d.Key, d => d.Value); var previousGlamourerData = previousData.GlamourerString.ToDictionary(d => d.Key, d => d.Value); + var previousCustomize = previousData.CustomizePlusScale.ToDictionary(d => d.Key, d => d.Value); try { @@ -100,6 +101,7 @@ public class PlayerDataFactory previousData.FileReplacements = previousFileReplacements; previousData.GlamourerString = previousGlamourerData; + previousData.CustomizePlusScale = previousCustomize; } private unsafe void AddPlayerSpecificReplacements(Human* human, HashSet forwardResolve, HashSet reverseResolve) @@ -312,6 +314,11 @@ public class PlayerDataFactory previousData.FileReplacements[objectKind].Clear(); } + if (previousData.CustomizePlusScale.ContainsKey(objectKind)) + { + previousData.CustomizePlusScale.Remove(objectKind); + } + // wait until chara is not drawing and present so nothing spontaneously explodes await _dalamudUtil.WaitWhileCharacterIsDrawing(_logger, playerRelatedObject, Guid.NewGuid(), 30000, ct: token).ConfigureAwait(false); int totalWaitTime = 10000; @@ -381,7 +388,7 @@ public class PlayerDataFactory previousData.GlamourerString[playerRelatedObject.ObjectKind] = await getGlamourerData.ConfigureAwait(false); _logger.LogDebug("Glamourer is now: {data}", previousData.GlamourerString[playerRelatedObject.ObjectKind]); var customizeScale = await getCustomizeData.ConfigureAwait(false); - if (customizeScale != null) + if (!string.IsNullOrEmpty(customizeScale)) { previousData.CustomizePlusScale[playerRelatedObject.ObjectKind] = customizeScale; _logger.LogDebug("Customize is now: {data}", previousData.CustomizePlusScale[playerRelatedObject.ObjectKind]); diff --git a/MareSynchronos/PlayerData/Handlers/PairHandler.cs b/MareSynchronos/PlayerData/Handlers/PairHandler.cs index ef69572..feb2201 100644 --- a/MareSynchronos/PlayerData/Handlers/PairHandler.cs +++ b/MareSynchronos/PlayerData/Handlers/PairHandler.cs @@ -233,6 +233,10 @@ public sealed class PairHandler : DisposableMediatorSubscriberBase { await _ipcManager.CustomizePlusSetBodyScaleAsync(handler.Address, customizePlusData).ConfigureAwait(false); } + else + { + await _ipcManager.CustomizePlusRevertAsync(handler.Address).ConfigureAwait(false); + } break; case PlayerChanges.Heels: @@ -533,6 +537,7 @@ public sealed class PairHandler : DisposableMediatorSubscriberBase var minionOrMount = await _dalamudUtil.GetMinionOrMountAsync(address).ConfigureAwait(false); if (minionOrMount != nint.Zero) { + await _ipcManager.CustomizePlusRevertAsync(minionOrMount).ConfigureAwait(false); using GameObjectHandler tempHandler = await _gameObjectHandlerFactory.Create(ObjectKind.MinionOrMount, () => minionOrMount, false).ConfigureAwait(false); await _ipcManager.PenumbraRedrawAsync(Logger, tempHandler, applicationId, cancelToken.Token).ConfigureAwait(false); } @@ -542,6 +547,7 @@ public sealed class PairHandler : DisposableMediatorSubscriberBase var pet = await _dalamudUtil.GetPetAsync(address).ConfigureAwait(false); if (pet != nint.Zero) { + await _ipcManager.CustomizePlusRevertAsync(pet).ConfigureAwait(false); using GameObjectHandler tempHandler = await _gameObjectHandlerFactory.Create(ObjectKind.Pet, () => pet, false).ConfigureAwait(false); await _ipcManager.PenumbraRedrawAsync(Logger, tempHandler, applicationId, cancelToken.Token).ConfigureAwait(false); } @@ -551,6 +557,7 @@ public sealed class PairHandler : DisposableMediatorSubscriberBase var companion = await _dalamudUtil.GetCompanionAsync(address).ConfigureAwait(false); if (companion != nint.Zero) { + await _ipcManager.CustomizePlusRevertAsync(companion).ConfigureAwait(false); using GameObjectHandler tempHandler = await _gameObjectHandlerFactory.Create(ObjectKind.Pet, () => companion, false).ConfigureAwait(false); await _ipcManager.PenumbraRedrawAsync(Logger, tempHandler, applicationId, cancelToken.Token).ConfigureAwait(false); } diff --git a/MareSynchronos/PlayerData/Services/CacheCreationService.cs b/MareSynchronos/PlayerData/Services/CacheCreationService.cs index beab3b5..e4b7a21 100644 --- a/MareSynchronos/PlayerData/Services/CacheCreationService.cs +++ b/MareSynchronos/PlayerData/Services/CacheCreationService.cs @@ -63,7 +63,8 @@ public sealed class CacheCreationService : DisposableMediatorSubscriberBase { if (_isZoning) return; foreach (var item in _playerRelatedObjects - .Where(item => string.Equals(item.Value.Name, msg.ProfileName, StringComparison.Ordinal)).Select(k => k.Key)) + .Where(item => string.IsNullOrEmpty(msg.ProfileName) + || string.Equals(item.Value.Name, msg.ProfileName, StringComparison.Ordinal)).Select(k => k.Key)) { Logger.LogDebug("Received CustomizePlus change, updating {obj}", item); await AddPlayerCacheToCreate(item).ConfigureAwait(false);