From 063d8782764132a10173dd6de7a726371161d3f6 Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Sun, 16 Jul 2023 00:04:30 -0700 Subject: [PATCH] fix: Cleans up murder system (#1428) --- .../Engines/ML Quests/MLQuestSystem.cs | 6 +-- .../PlayerMurderSystem.cs | 51 +++++++++---------- .../Quests/Collector/Items/Obsidian.cs | 2 +- .../Halloween/2011/Items/BasePaintedMask.cs | 2 +- Projects/UOContent/Items/Books/BaseBook.cs | 2 +- .../UOContent/Items/Books/BookPageInfo.cs | 2 +- Projects/UOContent/Misc/NameList.cs | 2 +- Projects/UOContent/Mobiles/PlayerMobile.cs | 6 +-- 8 files changed, 35 insertions(+), 38 deletions(-) diff --git a/Projects/UOContent/Engines/ML Quests/MLQuestSystem.cs b/Projects/UOContent/Engines/ML Quests/MLQuestSystem.cs index b65f6cb6c..bfd5b3124 100644 --- a/Projects/UOContent/Engines/ML Quests/MLQuestSystem.cs +++ b/Projects/UOContent/Engines/ML Quests/MLQuestSystem.cs @@ -712,7 +712,7 @@ namespace Server.Engines.MLQuests } else if (quester is Item item) { - MessageHelper.SendLocalizedMessageTo(item, pm, cliloc, SpeechColor); + item.SendLocalizedMessageTo(pm, cliloc, SpeechColor); } else { @@ -730,7 +730,7 @@ namespace Server.Engines.MLQuests } else if (quester is Item item) { - MessageHelper.SendLocalizedMessageTo(item, pm, cliloc, args, SpeechColor); + item.SendLocalizedMessageTo(pm, cliloc, args, SpeechColor); } else { @@ -748,7 +748,7 @@ namespace Server.Engines.MLQuests } else if (quester is Item item) { - MessageHelper.SendMessageTo(item, pm, message, SpeechColor); + item.SendMessageTo(pm, message, SpeechColor); } else { diff --git a/Projects/UOContent/Engines/Player Murder System/PlayerMurderSystem.cs b/Projects/UOContent/Engines/Player Murder System/PlayerMurderSystem.cs index d02dbc844..1a3a4e42b 100644 --- a/Projects/UOContent/Engines/Player Murder System/PlayerMurderSystem.cs +++ b/Projects/UOContent/Engines/Player Murder System/PlayerMurderSystem.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Runtime.InteropServices; using Server.Collections; using Server.Logging; using Server.Mobiles; @@ -64,23 +65,22 @@ public static class PlayerMurderSystem return; } - if (GetOrCreateContext(player, out var context)) - { - // We make a big assumption that by the time this is called, the Mobile/PlayerMobile info is deserialized - if (Mobile.MurderMigrations?.TryGetValue(player, out var shortTermMurders) == true) - { - context.ShortTermMurders = shortTermMurders; - } + var context = player.GetOrCreateMurderContext(); - context.ShortTermElapse = shortTerm; - context.LongTermElapse = longTerm; - UpdateMurderContext(context); + // We make a big assumption that by the time this is called, the Mobile/PlayerMobile info is deserialized + if (Mobile.MurderMigrations?.TryGetValue(player, out var shortTermMurders) == true) + { + context.ShortTermMurders = shortTermMurders; } + + context.ShortTermElapse = shortTerm; + context.LongTermElapse = longTerm; + UpdateMurderContext(context); } private static void OnLogin(Mobile m) { - if (m is not PlayerMobile pm || !GetContext(pm, out var context)) + if (m is not PlayerMobile pm || !GetMurderContext(pm, out var context)) { return; } @@ -130,37 +130,34 @@ public static class PlayerMurderSystem } } - public static bool GetContext(PlayerMobile player, out MurderContext context) => + public static bool GetMurderContext(this PlayerMobile player, out MurderContext context) => _murderContexts.TryGetValue(player, out context); - public static bool GetOrCreateContext(PlayerMobile player, out MurderContext context) + public static MurderContext GetOrCreateMurderContext(this PlayerMobile player) { - if (!_murderContexts.TryGetValue(player, out context)) + ref var context = ref CollectionsMarshal.GetValueRefOrAddDefault(_murderContexts, player, out var exists); + if (!exists) { - context = _murderContexts[player] = new MurderContext(player); + context = new MurderContext(player); } - return true; + return context; } public static void ManuallySetShortTermMurders(PlayerMobile player, int shortTermMurders, bool resetKillTime = true) { - if (GetOrCreateContext(player, out var context)) - { - context.ShortTermMurders = shortTermMurders; - UpdateMurderContext(context, resetKillTime); - } + var context = player.GetOrCreateMurderContext(); + context.ShortTermMurders = shortTermMurders; + UpdateMurderContext(context, resetKillTime); } public static void OnPlayerMurder(PlayerMobile player, bool resetKillTime = false) { - if (GetOrCreateContext(player, out var context)) - { - context.ShortTermMurders++; - player.Kills++; + var context = player.GetOrCreateMurderContext(); + context.ShortTermMurders++; + player.Kills++; - UpdateMurderContext(context, resetKillTime); - } + UpdateMurderContext(context, resetKillTime); } private static void UpdateMurderContext(MurderContext context, bool resetKillTime = false) diff --git a/Projects/UOContent/Engines/Quests/Collector/Items/Obsidian.cs b/Projects/UOContent/Engines/Quests/Collector/Items/Obsidian.cs index d70818d0e..07c2d137e 100644 --- a/Projects/UOContent/Engines/Quests/Collector/Items/Obsidian.cs +++ b/Projects/UOContent/Engines/Quests/Collector/Items/Obsidian.cs @@ -222,7 +222,7 @@ namespace Server.Engines.Quests.Collector var version = reader.ReadInt(); m_Quantity = reader.ReadEncodedInt(); - m_StatueName = Utility.Intern(reader.ReadString()); + m_StatueName = reader.ReadString().Intern(); } private class DisassembleEntry : ContextMenuEntry diff --git a/Projects/UOContent/Holiday Stuff/Halloween/2011/Items/BasePaintedMask.cs b/Projects/UOContent/Holiday Stuff/Halloween/2011/Items/BasePaintedMask.cs index 8fc991ddc..5d3fddb54 100644 --- a/Projects/UOContent/Holiday Stuff/Halloween/2011/Items/BasePaintedMask.cs +++ b/Projects/UOContent/Holiday Stuff/Halloween/2011/Items/BasePaintedMask.cs @@ -24,7 +24,7 @@ namespace Server.Items.Holiday } public BasePaintedMask(string staffer, int itemid) : base(itemid + Utility.Random(2)) => - _staffer = Utility.Intern(staffer); + _staffer = staffer.Intern(); public override string DefaultName => _staffer != null ? $"{MaskName} hand painted by {_staffer}" : MaskName; diff --git a/Projects/UOContent/Items/Books/BaseBook.cs b/Projects/UOContent/Items/Books/BaseBook.cs index 56ef95802..006f13886 100644 --- a/Projects/UOContent/Items/Books/BaseBook.cs +++ b/Projects/UOContent/Items/Books/BaseBook.cs @@ -141,7 +141,7 @@ namespace Server.Items if ((flags & OldSaveFlags.Title) != 0) { - _title = Utility.Intern(reader.ReadString()); + _title = reader.ReadString().Intern(); } else if (content != null) { diff --git a/Projects/UOContent/Items/Books/BookPageInfo.cs b/Projects/UOContent/Items/Books/BookPageInfo.cs index 28220e24a..d5c7e24f4 100644 --- a/Projects/UOContent/Items/Books/BookPageInfo.cs +++ b/Projects/UOContent/Items/Books/BookPageInfo.cs @@ -16,7 +16,7 @@ namespace Server.Items for (var i = 0; i < Lines.Length; ++i) { - Lines[i] = Utility.Intern(reader.ReadString()); + Lines[i] = reader.ReadString().Intern(); } } diff --git a/Projects/UOContent/Misc/NameList.cs b/Projects/UOContent/Misc/NameList.cs index 9de9e2a71..8ed4380eb 100644 --- a/Projects/UOContent/Misc/NameList.cs +++ b/Projects/UOContent/Misc/NameList.cs @@ -62,7 +62,7 @@ namespace Server { for (var i = 0; i < List.Length; i++) { - List[i] = Utility.Intern(List[i].Trim()); + List[i] = List[i].Trim().Intern(); } } } diff --git a/Projects/UOContent/Mobiles/PlayerMobile.cs b/Projects/UOContent/Mobiles/PlayerMobile.cs index 978d7d60f..d370d277b 100644 --- a/Projects/UOContent/Mobiles/PlayerMobile.cs +++ b/Projects/UOContent/Mobiles/PlayerMobile.cs @@ -727,17 +727,17 @@ namespace Server.Mobiles [CommandProperty(AccessLevel.GameMaster)] public int ShortTermMurders { - get => PlayerMurderSystem.GetOrCreateContext(this, out var context) ? context.ShortTermMurders : 0; + get => this.GetMurderContext(out var context) ? context.ShortTermMurders : 0; set => PlayerMurderSystem.ManuallySetShortTermMurders(this, value); } [CommandProperty(AccessLevel.GameMaster)] - public DateTime ShortTermMurderExpiration => PlayerMurderSystem.GetOrCreateContext(this, out var context) + public DateTime ShortTermMurderExpiration => this.GetMurderContext(out var context) ? Core.Now + (context.ShortTermElapse - GameTime) : DateTime.MinValue; [CommandProperty(AccessLevel.GameMaster)] - public DateTime LongTermMurderExpiration => PlayerMurderSystem.GetOrCreateContext(this, out var context) + public DateTime LongTermMurderExpiration => this.GetMurderContext(out var context) ? Core.Now + (context.LongTermElapse - GameTime) : DateTime.MinValue;