From 6149d7eb736e4c39292a5b0b0e248a7d076ccd73 Mon Sep 17 00:00:00 2001 From: Stanley Dimant Date: Sat, 17 Sep 2022 13:29:08 +0200 Subject: [PATCH] clear actionqueue on zoneswitch --- MareSynchronos/Managers/CachedPlayer.cs | 6 +-- MareSynchronos/Managers/IpcManager.cs | 37 ++++++++++--------- .../Managers/OnlinePlayerManager.cs | 4 +- MareSynchronos/Managers/PlayerManager.cs | 4 +- MareSynchronos/MareSynchronos.csproj | 2 +- MareSynchronos/Utils/DalamudUtil.cs | 15 +++++--- 6 files changed, 38 insertions(+), 30 deletions(-) diff --git a/MareSynchronos/Managers/CachedPlayer.cs b/MareSynchronos/Managers/CachedPlayer.cs index b50add8..50711d9 100644 --- a/MareSynchronos/Managers/CachedPlayer.cs +++ b/MareSynchronos/Managers/CachedPlayer.cs @@ -269,7 +269,7 @@ public class CachedPlayer ct.ThrowIfCancellationRequested(); if (_ipcManager.CheckGlamourerApi() && !string.IsNullOrEmpty(glamourerData)) { - _ipcManager.GlamourerApplyAll(glamourerData, obj: (IntPtr)minionOrMount); + _ipcManager.GlamourerApplyAll(glamourerData, (IntPtr)minionOrMount); } else { @@ -426,8 +426,8 @@ public class CachedPlayer { if (!_dalamudUtil.IsPlayerPresent || !_ipcManager.Initialized || !_apiController.IsConnected) return; - PlayerCharacter = _dalamudUtil.GetPlayerCharacterFromObjectTableByName(PlayerName!)?.Address ?? IntPtr.Zero; - if (PlayerCharacter == IntPtr.Zero) + var curPlayerCharacter = _dalamudUtil.GetPlayerCharacterFromObjectTableByName(PlayerName!)?.Address ?? IntPtr.Zero; + if (PlayerCharacter == IntPtr.Zero || PlayerCharacter != curPlayerCharacter) { DisposePlayer(); return; diff --git a/MareSynchronos/Managers/IpcManager.cs b/MareSynchronos/Managers/IpcManager.cs index f98a6d1..23e8be1 100644 --- a/MareSynchronos/Managers/IpcManager.cs +++ b/MareSynchronos/Managers/IpcManager.cs @@ -61,13 +61,12 @@ namespace MareSynchronos.Managers _penumbraObjectIsRedrawn = pi.GetIpcSubscriber("Penumbra.GameObjectRedrawn"); _penumbraGetMetaManipulations = pi.GetIpcSubscriber("Penumbra.GetPlayerMetaManipulations"); - - _glamourerApiVersion = pi.GetIpcSubscriber("Glamourer.ApiVersion"); - _glamourerGetAllCustomization = pi.GetIpcSubscriber("Glamourer.GetAllCustomizationFromCharacter"); - _glamourerApplyAll = pi.GetIpcSubscriber("Glamourer.ApplyAllToCharacter"); - _glamourerApplyOnlyCustomization = pi.GetIpcSubscriber("Glamourer.ApplyOnlyCustomizationToCharacter"); - _glamourerApplyOnlyEquipment = pi.GetIpcSubscriber("Glamourer.ApplyOnlyEquipmentToCharacter"); - _glamourerRevertCustomization = pi.GetIpcSubscriber("Glamourer.RevertCharacter"); + _penumbraSetTemporaryMod = pi.GetIpcSubscriber, string, int, + int>("Penumbra.AddTemporaryMod"); + _penumbraCreateTemporaryCollection = + pi.GetIpcSubscriber("Penumbra.CreateTemporaryCollection"); + _penumbraRemoveTemporaryCollection = + pi.GetIpcSubscriber("Penumbra.RemoveTemporaryCollection"); _penumbraGameObjectResourcePathResolved = pi.GetIpcSubscriber("Penumbra.GameObjectResourcePathResolved"); _penumbraGameObjectResourcePathResolved.Subscribe(ResourceLoaded); @@ -75,15 +74,12 @@ namespace MareSynchronos.Managers _penumbraInit.Subscribe(PenumbraInit); _penumbraDispose.Subscribe(PenumbraDispose); - _penumbraSetTemporaryMod = - pi - .GetIpcSubscriber, string, int, - int>("Penumbra.AddTemporaryMod"); - - _penumbraCreateTemporaryCollection = - pi.GetIpcSubscriber("Penumbra.CreateTemporaryCollection"); - _penumbraRemoveTemporaryCollection = - pi.GetIpcSubscriber("Penumbra.RemoveTemporaryCollection"); + _glamourerApiVersion = pi.GetIpcSubscriber("Glamourer.ApiVersion"); + _glamourerGetAllCustomization = pi.GetIpcSubscriber("Glamourer.GetAllCustomizationFromCharacter"); + _glamourerApplyAll = pi.GetIpcSubscriber("Glamourer.ApplyAllToCharacter"); + _glamourerApplyOnlyCustomization = pi.GetIpcSubscriber("Glamourer.ApplyOnlyCustomizationToCharacter"); + _glamourerApplyOnlyEquipment = pi.GetIpcSubscriber("Glamourer.ApplyOnlyEquipmentToCharacter"); + _glamourerRevertCustomization = pi.GetIpcSubscriber("Glamourer.RevertCharacter"); _heelsGetApiVersion = pi.GetIpcSubscriber("HeelsPlugin.ApiVersion"); _heelsGetOffset = pi.GetIpcSubscriber("HeelsPlugin.GetOffset"); @@ -98,8 +94,14 @@ namespace MareSynchronos.Managers PenumbraInitialized?.Invoke(); } - this._dalamudUtil = dalamudUtil; + _dalamudUtil = dalamudUtil; _dalamudUtil.FrameworkUpdate += HandleActionQueue; + _dalamudUtil.ZoneSwitchEnd += ClearActionQueue; + } + + private void ClearActionQueue() + { + actionQueue.Clear(); } private void ResourceLoaded(IntPtr ptr, string arg1, string arg2) @@ -178,6 +180,7 @@ namespace MareSynchronos.Managers Logger.Verbose("Action queue clear or not, disposing"); _dalamudUtil.FrameworkUpdate -= HandleActionQueue; + _dalamudUtil.ZoneSwitchEnd -= ClearActionQueue; actionQueue.Clear(); _penumbraDispose.Unsubscribe(PenumbraDispose); diff --git a/MareSynchronos/Managers/OnlinePlayerManager.cs b/MareSynchronos/Managers/OnlinePlayerManager.cs index 5d0d02c..3bf4fa5 100644 --- a/MareSynchronos/Managers/OnlinePlayerManager.cs +++ b/MareSynchronos/Managers/OnlinePlayerManager.cs @@ -46,7 +46,7 @@ public class OnlinePlayerManager : IDisposable _dalamudUtil.LogIn += DalamudUtilOnLogIn; _dalamudUtil.LogOut += DalamudUtilOnLogOut; - _dalamudUtil.ZoneSwitched += DalamudUtilOnZoneSwitched; + _dalamudUtil.ZoneSwitchStart += DalamudUtilOnZoneSwitched; if (_dalamudUtil.IsLoggedIn) { @@ -145,7 +145,7 @@ public class OnlinePlayerManager : IDisposable _dalamudUtil.LogIn -= DalamudUtilOnLogIn; _dalamudUtil.LogOut -= DalamudUtilOnLogOut; - _dalamudUtil.ZoneSwitched -= DalamudUtilOnZoneSwitched; + _dalamudUtil.ZoneSwitchStart -= DalamudUtilOnZoneSwitched; _dalamudUtil.DelayedFrameworkUpdate -= FrameworkOnUpdate; } diff --git a/MareSynchronos/Managers/PlayerManager.cs b/MareSynchronos/Managers/PlayerManager.cs index e5aef43..138a75b 100644 --- a/MareSynchronos/Managers/PlayerManager.cs +++ b/MareSynchronos/Managers/PlayerManager.cs @@ -240,8 +240,8 @@ namespace MareSynchronos.Managers if (cacheDto == null || token.IsCancellationRequested) return; #if DEBUG - var json = JsonConvert.SerializeObject(cacheDto, Formatting.Indented); - Logger.Verbose(json); + //var json = JsonConvert.SerializeObject(cacheDto, Formatting.Indented); + //Logger.Verbose(json); #endif if ((LastCreatedCharacterData?.GetHashCode() ?? 0) == cacheDto.GetHashCode()) diff --git a/MareSynchronos/MareSynchronos.csproj b/MareSynchronos/MareSynchronos.csproj index 7e7f1ba..fd1e5da 100644 --- a/MareSynchronos/MareSynchronos.csproj +++ b/MareSynchronos/MareSynchronos.csproj @@ -3,7 +3,7 @@ - 0.4.7 + 0.4.8 https://github.com/Penumbra-Sync/client diff --git a/MareSynchronos/Utils/DalamudUtil.cs b/MareSynchronos/Utils/DalamudUtil.cs index c9d7086..2f3b742 100644 --- a/MareSynchronos/Utils/DalamudUtil.cs +++ b/MareSynchronos/Utils/DalamudUtil.cs @@ -35,7 +35,8 @@ namespace MareSynchronos.Utils public event ClassJobChanged? ClassJobChanged; private uint? classJobId = 0; public event FrameworkUpdate? DelayedFrameworkUpdate; - public event VoidDelegate? ZoneSwitched; + public event VoidDelegate? ZoneSwitchStart; + public event VoidDelegate? ZoneSwitchEnd; private DateTime _delayedFrameworkUpdateCheck = DateTime.Now; private bool _sentBetweenAreas = false; @@ -74,15 +75,19 @@ namespace MareSynchronos.Utils { if (!_sentBetweenAreas) { - Logger.Debug("Invoking between areas"); + Logger.Debug("Zone switch start"); _sentBetweenAreas = true; - ZoneSwitched?.Invoke(); + ZoneSwitchStart?.Invoke(); } return; } - - _sentBetweenAreas = false; + else if (_sentBetweenAreas) + { + Logger.Debug("Zone switch end"); + _sentBetweenAreas = false; + ZoneSwitchEnd?.Invoke(); + } foreach (FrameworkUpdate? frameworkInvocation in (FrameworkUpdate?.GetInvocationList() ?? Array.Empty()).Cast()) {