From 902797bee0f9480a3fafcc817b8aa86771557733 Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Sun, 25 May 2025 20:43:59 -0700 Subject: [PATCH] fix: Fixes murder context getting lost (#2198) --- .../Engines/Player Murder System/MurderContext.cs | 6 +----- .../Player Murder System/PlayerMurderSystem.cs | 14 +++++++++++--- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/Projects/UOContent/Engines/Player Murder System/MurderContext.cs b/Projects/UOContent/Engines/Player Murder System/MurderContext.cs index b9584dd8a..93c1f67c7 100644 --- a/Projects/UOContent/Engines/Player Murder System/MurderContext.cs +++ b/Projects/UOContent/Engines/Player Murder System/MurderContext.cs @@ -79,11 +79,7 @@ public partial class MurderContext if (_player.Kills > 0) { - var timeUntilLong = now + (LongTermElapse - gameTime); - if (_nextElapse > timeUntilLong) - { - _nextElapse = timeUntilLong; - } + _nextElapse = Utility.Min(_nextElapse, now + (LongTermElapse - gameTime)); } return _nextElapse != DateTime.MaxValue; diff --git a/Projects/UOContent/Engines/Player Murder System/PlayerMurderSystem.cs b/Projects/UOContent/Engines/Player Murder System/PlayerMurderSystem.cs index 8a654a697..5415c298a 100644 --- a/Projects/UOContent/Engines/Player Murder System/PlayerMurderSystem.cs +++ b/Projects/UOContent/Engines/Player Murder System/PlayerMurderSystem.cs @@ -101,9 +101,17 @@ public class PlayerMurderSystem : GenericPersistence private static void OnDisconnected(Mobile m) { - if (m is PlayerMobile pm && _murderContexts.Remove(pm, out var context)) + if (m is not PlayerMobile pm || !_murderContexts.TryGetValue(pm, out var context)) { - _contextTerms.Remove(context); + return; + } + + _contextTerms.Remove(context); + UpdateMurderContext(context); + + if (pm.Kills <= 0 && context.ShortTermMurders <= 0) + { + _murderContexts.Remove(pm); } } @@ -173,13 +181,13 @@ public class PlayerMurderSystem : GenericPersistence context.ShortTermMurders++; player.Kills++; - context.ResetKillTime(); UpdateMurderContext(context); } private static void UpdateMurderContext(MurderContext context) { var player = context.Player; + context.ResetKillTime(); if (!context.CheckStart()) {