From 11535caf7e01251f2e1e492c15b6d0d6d6921c28 Mon Sep 17 00:00:00 2001 From: rootdarkarchon Date: Mon, 30 Jun 2025 23:49:05 +0200 Subject: [PATCH] debounce, ignore processing when dead only in duty --- MareSynchronos/PlayerData/Services/CacheCreationService.cs | 6 ++++-- MareSynchronos/Services/DalamudUtilService.cs | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/MareSynchronos/PlayerData/Services/CacheCreationService.cs b/MareSynchronos/PlayerData/Services/CacheCreationService.cs index 9df3262..b284afb 100644 --- a/MareSynchronos/PlayerData/Services/CacheCreationService.cs +++ b/MareSynchronos/PlayerData/Services/CacheCreationService.cs @@ -195,7 +195,7 @@ public sealed class CacheCreationService : DisposableMediatorSubscriberBase _creationCts.Cancel(); _creationCts.Dispose(); _creationCts = new(); - _cacheCreateLock.Wait(); + _cacheCreateLock.Wait(_creationCts.Token); var objectKindsToCreate = _cachesToCreate.ToList(); foreach (var creationObj in objectKindsToCreate) { @@ -208,12 +208,14 @@ public sealed class CacheCreationService : DisposableMediatorSubscriberBase { using var linkedCts = CancellationTokenSource.CreateLinkedTokenSource(_creationCts.Token, _runtimeCts.Token); + await Task.Delay(TimeSpan.FromSeconds(1), linkedCts.Token).ConfigureAwait(false); + Logger.LogDebug("Creating Caches for {objectKinds}", string.Join(", ", objectKindsToCreate)); try { Dictionary createdData = []; - foreach (var objectKind in objectKindsToCreate) + foreach (var objectKind in _currentlyCreating) { createdData[objectKind] = await _characterDataFactory.BuildCharacterData(_playerRelatedObjects[objectKind], linkedCts.Token).ConfigureAwait(false); } diff --git a/MareSynchronos/Services/DalamudUtilService.cs b/MareSynchronos/Services/DalamudUtilService.cs index daa94aa..edf5df4 100644 --- a/MareSynchronos/Services/DalamudUtilService.cs +++ b/MareSynchronos/Services/DalamudUtilService.cs @@ -614,7 +614,7 @@ public class DalamudUtilService : IHostedService, IMediatorSubscriber private unsafe void FrameworkOnUpdateInternal() { - if (_clientState.LocalPlayer?.IsDead ?? false) + if ((_clientState.LocalPlayer?.IsDead ?? false) && _condition[ConditionFlag.BoundByDuty]) { return; }