diff --git a/MareSynchronos/Interop/Ipc/IpcCallerCustomize.cs b/MareSynchronos/Interop/Ipc/IpcCallerCustomize.cs index 34df552..9b50491 100644 --- a/MareSynchronos/Interop/Ipc/IpcCallerCustomize.cs +++ b/MareSynchronos/Interop/Ipc/IpcCallerCustomize.cs @@ -12,11 +12,11 @@ namespace MareSynchronos.Interop.Ipc; public sealed class IpcCallerCustomize : IIpcCaller { private readonly ICallGateSubscriber<(int, int)> _customizePlusApiVersion; - private readonly ICallGateSubscriber _customizePlusGetActiveProfile; + private readonly ICallGateSubscriber _customizePlusGetActiveProfile; private readonly ICallGateSubscriber _customizePlusGetProfileById; - private readonly ICallGateSubscriber _customizePlusOnScaleUpdate; - private readonly ICallGateSubscriber _customizePlusRevertCharacter; - private readonly ICallGateSubscriber _customizePlusSetBodyScaleToCharacter; + private readonly ICallGateSubscriber _customizePlusOnScaleUpdate; + private readonly ICallGateSubscriber _customizePlusRevertCharacter; + private readonly ICallGateSubscriber _customizePlusSetBodyScaleToCharacter; private readonly ICallGateSubscriber _customizePlusDeleteByUniqueId; private readonly ILogger _logger; private readonly DalamudUtilService _dalamudUtil; @@ -26,11 +26,11 @@ public sealed class IpcCallerCustomize : IIpcCaller DalamudUtilService dalamudUtil, MareMediator mareMediator) { _customizePlusApiVersion = dalamudPluginInterface.GetIpcSubscriber<(int, int)>("CustomizePlus.General.GetApiVersion"); - _customizePlusGetActiveProfile = dalamudPluginInterface.GetIpcSubscriber("CustomizePlus.Profile.GetActiveProfileIdOnCharacter"); + _customizePlusGetActiveProfile = dalamudPluginInterface.GetIpcSubscriber("CustomizePlus.Profile.GetActiveProfileIdOnCharacter"); _customizePlusGetProfileById = dalamudPluginInterface.GetIpcSubscriber("CustomizePlus.Profile.GetByUniqueId"); - _customizePlusRevertCharacter = dalamudPluginInterface.GetIpcSubscriber("CustomizePlus.Profile.DeleteTemporaryProfileOnCharacter"); - _customizePlusSetBodyScaleToCharacter = dalamudPluginInterface.GetIpcSubscriber("CustomizePlus.Profile.SetTemporaryProfileOnCharacter"); - _customizePlusOnScaleUpdate = dalamudPluginInterface.GetIpcSubscriber("CustomizePlus.Profile.OnUpdate"); + _customizePlusRevertCharacter = dalamudPluginInterface.GetIpcSubscriber("CustomizePlus.Profile.DeleteTemporaryProfileOnCharacter"); + _customizePlusSetBodyScaleToCharacter = dalamudPluginInterface.GetIpcSubscriber("CustomizePlus.Profile.SetTemporaryProfileOnCharacter"); + _customizePlusOnScaleUpdate = dalamudPluginInterface.GetIpcSubscriber("CustomizePlus.Profile.OnUpdate"); _customizePlusDeleteByUniqueId = dalamudPluginInterface.GetIpcSubscriber("CustomizePlus.Profile.DeleteTemporaryProfileByUniqueId"); _customizePlusOnScaleUpdate.Subscribe(OnCustomizePlusScaleChange); @@ -52,7 +52,7 @@ public sealed class IpcCallerCustomize : IIpcCaller if (gameObj is ICharacter c) { _logger.LogTrace("CustomizePlus reverting for {chara}", c.Address.ToString("X")); - _customizePlusRevertCharacter!.InvokeFunc(c); + _customizePlusRevertCharacter!.InvokeFunc(c.ObjectIndex); } }).ConfigureAwait(false); } @@ -69,12 +69,12 @@ public sealed class IpcCallerCustomize : IIpcCaller _logger.LogTrace("CustomizePlus applying for {chara}", c.Address.ToString("X")); if (scale.IsNullOrEmpty()) { - _customizePlusRevertCharacter!.InvokeFunc(c); + _customizePlusRevertCharacter!.InvokeFunc(c.ObjectIndex); return null; } else { - var result = _customizePlusSetBodyScaleToCharacter!.InvokeFunc(c, decodedScale); + var result = _customizePlusSetBodyScaleToCharacter!.InvokeFunc(c.ObjectIndex, decodedScale); return result.Item2; } } @@ -101,7 +101,7 @@ public sealed class IpcCallerCustomize : IIpcCaller var gameObj = _dalamudUtil.CreateGameObject(character); if (gameObj is ICharacter c) { - var res = _customizePlusGetActiveProfile.InvokeFunc(c); + var res = _customizePlusGetActiveProfile.InvokeFunc(c.ObjectIndex); _logger.LogTrace("CustomizePlus GetActiveProfile returned {err}", res.Item1); if (res.Item1 != 0 || res.Item2 == null) return string.Empty; return _customizePlusGetProfileById.InvokeFunc(res.Item2.Value).Item2; @@ -115,13 +115,10 @@ public sealed class IpcCallerCustomize : IIpcCaller public void CheckAPI() { - // todo: restore this when it's available again - return; - try { var version = _customizePlusApiVersion.InvokeFunc(); - APIAvailable = (version.Item1 == 4 && version.Item2 >= 0); + APIAvailable = (version.Item1 == 5 && version.Item2 >= 0); } catch { @@ -129,9 +126,10 @@ public sealed class IpcCallerCustomize : IIpcCaller } } - private void OnCustomizePlusScaleChange(ICharacter c, Guid g) + private void OnCustomizePlusScaleChange(ushort c, Guid g) { - _mareMediator.Publish(new CustomizePlusMessage(c.Name.ToString() ?? string.Empty)); + var obj = _dalamudUtil.GetCharacterFromObjectTableByIndex(c); + _mareMediator.Publish(new CustomizePlusMessage(obj?.Address ?? null)); } public void Dispose() diff --git a/MareSynchronos/PlayerData/Services/CacheCreationService.cs b/MareSynchronos/PlayerData/Services/CacheCreationService.cs index 5078376..bbdb28e 100644 --- a/MareSynchronos/PlayerData/Services/CacheCreationService.cs +++ b/MareSynchronos/PlayerData/Services/CacheCreationService.cs @@ -79,9 +79,10 @@ public sealed class CacheCreationService : DisposableMediatorSubscriberBase if (_isZoning) return; _ = Task.Run(async () => { + foreach (var item in _playerRelatedObjects - .Where(item => string.IsNullOrEmpty(msg.ProfileName) - || string.Equals(item.Value.Name, msg.ProfileName, StringComparison.Ordinal)).Select(k => k.Key)) + .Where(item => msg.Address == null + || item.Value.Address == msg.Address).Select(k => k.Key)) { Logger.LogDebug("Received CustomizePlus change, updating {obj}", item); await AddPlayerCacheToCreate(item).ConfigureAwait(false); diff --git a/MareSynchronos/Services/Mediator/Messages.cs b/MareSynchronos/Services/Mediator/Messages.cs index c350a48..9e6ac12 100644 --- a/MareSynchronos/Services/Mediator/Messages.cs +++ b/MareSynchronos/Services/Mediator/Messages.cs @@ -38,7 +38,7 @@ public record PenumbraRedrawMessage(IntPtr Address, int ObjTblIdx, bool WasReque public record GlamourerChangedMessage(IntPtr Address) : MessageBase; public record HeelsOffsetMessage : MessageBase; public record PenumbraResourceLoadMessage(IntPtr GameObject, string GamePath, string FilePath) : SameThreadMessage; -public record CustomizePlusMessage(string ProfileName) : MessageBase; +public record CustomizePlusMessage(nint? Address) : MessageBase; public record HonorificMessage(string NewHonorificTitle) : MessageBase; public record MoodlesMessage(IntPtr Address) : MessageBase; public record HonorificReadyMessage : MessageBase;