fix: Cleans up murder system (#1428)
This commit is contained in:
parent
95779a27fb
commit
063d878276
8 changed files with 35 additions and 38 deletions
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue