fix(core): Caches DateTime.NowUtc (#548)

- [X] Caches DateTime.NowUtc on the game loop (not other threads)
- [X] Replaces all locations where it makes sense
- [X] Adds Min/Max for `IComparable` (TimeSpan, DateTimes, etc)

Closes #261
This commit is contained in:
Kamron Batman 2021-03-13 01:32:04 -08:00 • committed by GitHub
parent 5de6edbeb8
commit 6c4308bce6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
208 changed files with 660 additions and 793 deletions

View file

@ -96,7 +96,7 @@ namespace Server.Items
return;
}
if (DateTime.UtcNow < LastUse + UseDelay)
if (Core.Now < LastUse + UseDelay)
{
return;
}
@ -172,7 +172,7 @@ namespace Server.Items
return;
}
LastUse = DateTime.UtcNow;
LastUse = Core.Now;
from.Direction = from.GetDirectionTo(GetWorldLocation());
bow.PlaySwingAnimation(from);

View file

@ -90,14 +90,14 @@ namespace Server.Items
if (m.Player && Utility.InRange(Location, m.Location, 3) && !Utility.InRange(Location, oldLocation, 3))
{
if (DateTime.UtcNow >= m_NextMessage)
if (Core.Now >= m_NextMessage)
{
if (Components.Count > 0)
{
Components[0].SendLocalizedMessageTo(m, 1010061); // An overwhelming sense of peace fills you.
}
m_NextMessage = DateTime.UtcNow + TimeSpan.FromSeconds(25.0);
m_NextMessage = Core.Now + TimeSpan.FromSeconds(25.0);
}
}
}

View file

@ -192,11 +192,11 @@ namespace Server.Items
{
World.Broadcast(0x35, true, "Solen hives teleporters are being generated, please wait.");
var startTime = DateTime.UtcNow;
var startTime = Core.Now;
var count = new SHTeleporterCreator().CreateSHTeleporters();
var endTime = DateTime.UtcNow;
var endTime = Core.Now;
World.Broadcast(
0x35,

View file

@ -535,7 +535,7 @@ namespace Server.Items
}
else
{
writer.Write(DateTime.UtcNow + EvaluationInterval);
writer.Write(Core.Now + EvaluationInterval);
}
// version 0
@ -569,12 +569,12 @@ namespace Server.Items
{
var next = reader.ReadDateTime();
if (next < DateTime.UtcNow)
if (next < Core.Now)
{
next = DateTime.UtcNow;
next = Core.Now;
}
m_Timer = Timer.DelayCall(next - DateTime.UtcNow, EvaluationInterval, Evaluate);
m_Timer = Timer.DelayCall(next - Core.Now, EvaluationInterval, Evaluate);
goto case 0;
}

View file

@ -24,13 +24,13 @@ namespace Server.Items
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool CheckCreateTime(DateTime time) => time + ThreadCreateTime < DateTime.UtcNow;
public static bool CheckCreateTime(DateTime time) => time + ThreadCreateTime < Core.Now;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool CheckDeletionTime(DateTime time) => time + ThreadDeletionTime < DateTime.UtcNow;
public static bool CheckDeletionTime(DateTime time) => time + ThreadDeletionTime < Core.Now;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool CheckReplyTime(DateTime time) => time + ThreadReplyTime < DateTime.UtcNow;
public static bool CheckReplyTime(DateTime time) => time + ThreadReplyTime < Core.Now;
}
[Flippable(0x1E5E, 0x1E5F)]
@ -180,7 +180,7 @@ namespace Server.Items
{
if (thread != null)
{
thread.LastPostTime = DateTime.UtcNow;
thread.LastPostTime = Core.Now;
}
AddItem(new BulletinMessage(from, thread, subject, lines));

View file

@ -12,7 +12,7 @@ namespace Server.Items
Poster = poster;
Subject = subject;
Time = DateTime.UtcNow;
Time = Core.Now;
LastPostTime = Time;
Thread = thread;
PostedName = Poster.Name;

View file

@ -113,7 +113,7 @@ namespace Server.Items
{
m_DecayTimer?.Stop();
m_DecayTime = DateTime.UtcNow + delay;
m_DecayTime = Core.Now + delay;
m_DecayTimer = new InternalTimer(this, delay);
m_DecayTimer.Start();
@ -171,7 +171,7 @@ namespace Server.Items
if (reader.ReadBool())
{
m_DecayTime = reader.ReadDeltaTime();
BeginDecay(m_DecayTime - DateTime.UtcNow);
BeginDecay(m_DecayTime - Core.Now);
}
break;

View file

@ -129,7 +129,7 @@ namespace Server.Items
var mins = Utility.RandomMinMax(MinRespawnMinutes, MaxRespawnMinutes);
var delay = TimeSpan.FromMinutes(mins);
m_NextRespawnTime = DateTime.UtcNow + delay;
m_NextRespawnTime = Core.Now + delay;
m_RespawnTimer = Timer.DelayCall(delay, Respawn);
}
}
@ -279,7 +279,7 @@ namespace Server.Items
{
m_NextRespawnTime = reader.ReadDeltaTime();
var delay = m_NextRespawnTime - DateTime.UtcNow;
var delay = m_NextRespawnTime - Core.Now;
m_RespawnTimer = Timer.DelayCall(delay > TimeSpan.Zero ? delay : TimeSpan.Zero, Respawn);
}
else

View file

@ -212,7 +212,7 @@ namespace Server.Items
if (!Locked && m_AutoLock)
{
m_RelockTimer = new InternalTimer(this, reader.ReadDeltaTime() - DateTime.UtcNow);
m_RelockTimer = new InternalTimer(this, reader.ReadDeltaTime() - Core.Now);
}
TargetMap = reader.ReadMap();
@ -229,7 +229,7 @@ namespace Server.Items
public InternalTimer(MarkContainer container, TimeSpan delay) : base(delay)
{
Container = container;
RelockTime = DateTime.UtcNow + delay;
RelockTime = Core.Now + delay;
Start();
}

View file

@ -23,7 +23,7 @@ namespace Server.Items
{
Owner = owner;
Level = level;
DeleteTime = DateTime.UtcNow + TimeSpan.FromHours(3.0);
DeleteTime = Core.Now + TimeSpan.FromHours(3.0);
Temporary = temporary;
Guardians = new List<Mobile>();
@ -585,7 +585,7 @@ namespace Server.Items
{
private readonly Item m_Item;
public DeleteTimer(Item item, DateTime time) : base(time - DateTime.UtcNow)
public DeleteTimer(Item item, DateTime time) : base(time - Core.Now)
{
m_Item = item;
Priority = TimerPriority.OneMinute;

View file

@ -363,7 +363,7 @@ namespace Server.Items
{
private Item m_Item;
public StealableInstance(StealableEntry entry) : this(entry, null, DateTime.UtcNow)
public StealableInstance(StealableEntry entry) : this(entry, null, Core.Now)
{
}
@ -384,7 +384,7 @@ namespace Server.Items
if (m_Item != null && value == null)
{
var delay = Utility.RandomMinMax(Entry.MinDelay, Entry.MaxDelay);
NextRespawn = DateTime.UtcNow + TimeSpan.FromMinutes(delay);
NextRespawn = Core.Now + TimeSpan.FromMinutes(delay);
}
if (Instance != null)
@ -413,7 +413,7 @@ namespace Server.Items
Item = null;
}
if (Item == null && DateTime.UtcNow >= NextRespawn)
if (Item == null && Core.Now >= NextRespawn)
{
Item = Entry.CreateInstance();
}

View file

@ -51,7 +51,7 @@ namespace Server.Items
return false;
}
if (DateTime.UtcNow.Month != 12)
if (Core.Now.Month != 12)
{
from.SendLocalizedMessage(
1005700

View file

@ -26,7 +26,7 @@ namespace Server.Engines.Mahjong
WallBreakIndicator = new MahjongWallBreakIndicator(this, new Point2D(335, 335));
Dices = new MahjongDices(this);
Players = new MahjongPlayers(this, MaxPlayers, BaseScore);
m_LastReset = DateTime.UtcNow;
m_LastReset = Core.Now;
Level = SecureLevel.CoOwners;
}
@ -199,12 +199,12 @@ namespace Server.Engines.Mahjong
public void ResetGame(Mobile from)
{
if (DateTime.UtcNow - m_LastReset < TimeSpan.FromSeconds(5.0))
if (Core.Now - m_LastReset < TimeSpan.FromSeconds(5.0))
{
return;
}
m_LastReset = DateTime.UtcNow;
m_LastReset = Core.Now;
if (from != null)
{
@ -222,12 +222,12 @@ namespace Server.Engines.Mahjong
public void ResetWalls(Mobile from)
{
if (DateTime.UtcNow - m_LastReset < TimeSpan.FromSeconds(5.0))
if (Core.Now - m_LastReset < TimeSpan.FromSeconds(5.0))
{
return;
}
m_LastReset = DateTime.UtcNow;
m_LastReset = Core.Now;
BuildWalls();
@ -320,7 +320,7 @@ namespace Server.Engines.Mahjong
m_ShowScores = reader.ReadBool();
m_SpectatorVision = reader.ReadBool();
m_LastReset = DateTime.UtcNow;
m_LastReset = Core.Now;
break;
}

View file

@ -51,16 +51,7 @@ namespace Server.Items
[CommandProperty(AccessLevel.GameMaster)]
public TimeSpan Duration
{
get
{
if (m_Duration != TimeSpan.Zero && m_Burning)
{
return m_End - DateTime.UtcNow;
}
return m_Duration;
}
get => m_Duration != TimeSpan.Zero && m_Burning ? m_End - Core.Now : m_Duration;
set => m_Duration = value;
}
@ -120,7 +111,7 @@ namespace Server.Items
}
else if (m_Duration != TimeSpan.Zero)
{
m_Duration = m_End - DateTime.UtcNow;
m_Duration = m_End - Core.Now;
}
m_Timer?.Stop();
@ -145,7 +136,7 @@ namespace Server.Items
return;
}
m_End = DateTime.UtcNow + delay;
m_End = Core.Now + delay;
m_Timer = new InternalTimer(this, delay);
m_Timer.Start();
@ -214,7 +205,7 @@ namespace Server.Items
if (m_Burning && m_Duration != TimeSpan.Zero)
{
DoTimer(reader.ReadDeltaTime() - DateTime.UtcNow);
DoTimer(reader.ReadDeltaTime() - Core.Now);
}
break;

View file

@ -26,7 +26,7 @@ namespace Server.Items
Movable = false;
m_MinDamage = minDamage;
m_MaxDamage = maxDamage;
m_Created = DateTime.UtcNow;
m_Created = Core.Now;
m_Duration = duration;
m_Timer = Timer.DelayCall(TimeSpan.Zero, TimeSpan.FromSeconds(1), OnTick);
}
@ -44,7 +44,7 @@ namespace Server.Items
private void OnTick()
{
var now = DateTime.UtcNow;
var now = Core.Now;
var age = now - m_Created;
if (age > m_Duration)

View file

@ -113,7 +113,7 @@ namespace Server.Items
m_CorpseName = GetCorpseName(owner);
TimeOfDeath = DateTime.UtcNow;
TimeOfDeath = Core.Now;
AccessLevel = owner.AccessLevel;
Guild = owner.Guild as Guild;
@ -140,10 +140,10 @@ namespace Server.Items
{
var info = owner.Aggressors[i];
if (DateTime.UtcNow - info.LastCombatTime < lastTime)
if (Core.Now - info.LastCombatTime < lastTime)
{
Killer = info.Attacker;
lastTime = DateTime.UtcNow - info.LastCombatTime;
lastTime = Core.Now - info.LastCombatTime;
}
if (!isBaseCreature && !info.CriminalAggression)
@ -156,10 +156,10 @@ namespace Server.Items
{
var info = owner.Aggressed[i];
if (DateTime.UtcNow - info.LastCombatTime < lastTime)
if (Core.Now - info.LastCombatTime < lastTime)
{
Killer = info.Defender;
lastTime = DateTime.UtcNow - info.LastCombatTime;
lastTime = Core.Now - info.LastCombatTime;
}
if (!isBaseCreature)
@ -200,7 +200,7 @@ namespace Server.Items
}
[CommandProperty(AccessLevel.GameMaster)]
public virtual bool InstancedCorpse => Core.SE && DateTime.UtcNow < TimeOfDeath + InstancedCorpseTime;
public virtual bool InstancedCorpse => Core.SE && Core.Now < TimeOfDeath + InstancedCorpseTime;
public override bool IsDecoContainer => false;
@ -471,7 +471,7 @@ namespace Server.Items
{
m_DecayTimer?.Stop();
m_DecayTime = DateTime.UtcNow + delay;
m_DecayTime = Core.Now + delay;
m_DecayTimer = new InternalTimer(this, delay);
m_DecayTimer.Start();
@ -657,7 +657,7 @@ namespace Server.Items
if (reader.ReadBool())
{
BeginDecay(reader.ReadDeltaTime() - DateTime.UtcNow);
BeginDecay(reader.ReadDeltaTime() - Core.Now);
}
Looters = reader.ReadEntityList<Mobile>();
@ -711,7 +711,7 @@ namespace Server.Items
{
if (reader.ReadBool())
{
BeginDecay(reader.ReadDeltaTime() - DateTime.UtcNow);
BeginDecay(reader.ReadDeltaTime() - Core.Now);
}
goto case 6;
@ -757,7 +757,7 @@ namespace Server.Items
{
if (version < 10)
{
TimeOfDeath = DateTime.UtcNow;
TimeOfDeath = Core.Now;
}
if (version < 7)

View file

@ -27,7 +27,7 @@ namespace Server.Items
{
m_DecayTimer?.Stop();
m_DecayTime = DateTime.UtcNow + delay;
m_DecayTime = Core.Now + delay;
m_DecayTimer = new InternalTimer(this, delay);
m_DecayTimer.Start();
@ -85,7 +85,7 @@ namespace Server.Items
{
if (reader.ReadBool())
{
BeginDecay(reader.ReadDeltaTime() - DateTime.UtcNow);
BeginDecay(reader.ReadDeltaTime() - Core.Now);
}
break;

View file

@ -14,7 +14,7 @@ namespace Server.Items
{
Movable = false;
Light = LightType.Circle225;
NextSpawn = DateTime.UtcNow;
NextSpawn = Core.Now;
NextSpawnDelay = TimeSpan.FromMinutes(15.0);
SpawnRange = 5;
}
@ -87,7 +87,7 @@ namespace Server.Items
NextSpawnDelay = reader.ReadTimeSpan();
}
NextSpawn = DateTime.UtcNow;
NextSpawn = Core.Now;
}
public virtual void HeedWarning()
@ -101,7 +101,7 @@ namespace Server.Items
public override void OnMovement(Mobile m, Point3D oldLocation)
{
if (NextSpawn < DateTime.UtcNow) // means we haven't spawned anything if the next spawn is below
if (NextSpawn < Core.Now) // means we haven't spawned anything if the next spawn is below
{
if (Utility.InRange(m.Location, Location, 1) && !Utility.InRange(oldLocation, Location, 1) && m.Player &&
!(m.AccessLevel > AccessLevel.Player || m.Hidden))
@ -171,7 +171,7 @@ namespace Server.Items
{
try
{
if (NextSpawn < DateTime.UtcNow)
if (NextSpawn < Core.Now)
{
var map = Map;
var bc = Creatures.RandomElement().CreateInstance<BaseCreature>();
@ -182,7 +182,7 @@ namespace Server.Items
Timer.DelayCall(TimeSpan.FromSeconds(1), SummonCreatureToWorld, bc, spawnLoc, map);
NextSpawn = DateTime.UtcNow + NextSpawnDelay;
NextSpawn = Core.Now + NextSpawnDelay;
}
else
{

View file

@ -225,7 +225,7 @@ namespace Server.Items
{
Movable = false;
m_LitBy = litBy;
m_Expire = DateTime.UtcNow + TimeSpan.FromSeconds(10);
m_Expire = Core.Now + TimeSpan.FromSeconds(10);
m_Burning = toDamage;
m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(1.0), TimeSpan.FromSeconds(1.0), OnFirebombFieldTimerTick);
}
@ -295,7 +295,7 @@ namespace Server.Items
}
}
if (DateTime.UtcNow >= m_Expire)
if (Core.Now >= m_Expire)
{
m_Timer.Stop();
Delete();

View file

@ -24,7 +24,7 @@ namespace Server.Items
{
from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that
}
else if (Visible && (ItemID == 4656 || ItemID == 4702) && DateTime.UtcNow >= m_NextUse)
else if (Visible && (ItemID == 4656 || ItemID == 4702) && Core.Now >= m_NextUse)
{
var p = GetWorldLocation();
@ -42,7 +42,7 @@ namespace Server.Items
Timer.DelayCall(TimeSpan.FromSeconds(5.00), BackUp);
m_NextUse = DateTime.UtcNow + TimeSpan.FromSeconds(10.0);
m_NextUse = Core.Now + TimeSpan.FromSeconds(10.0);
}
}

View file

@ -244,7 +244,7 @@ namespace Server.Items
if (text.Length > 0)
{
var message = new PlayerBBMessage(DateTime.UtcNow, from, text);
var message = new PlayerBBMessage(Core.Now, from, text);
if (m_Greeting)
{

View file

@ -27,7 +27,7 @@ namespace Server.Items
m_MinDamage = minDamage;
m_MaxDamage = maxDamage;
m_Created = DateTime.UtcNow;
m_Created = Core.Now;
m_Duration = duration;
m_Timer = Timer.DelayCall(TimeSpan.Zero, TimeSpan.FromSeconds(1), OnTick);
@ -46,7 +46,7 @@ namespace Server.Items
private void OnTick()
{
var now = DateTime.UtcNow;
var now = Core.Now;
var age = now - m_Created;
if (age > m_Duration)

View file

@ -197,7 +197,7 @@ namespace Server.Items
}
if (m_User.Deleted || m_User.Map != Map || !m_User.InRange(this, 3)
|| m_User.NetState == null || DateTime.UtcNow - m_LastUse >= m_UseTimeout)
|| m_User.NetState == null || Core.Now - m_LastUse >= m_UseTimeout)
{
m_User.CloseGump<GameGump>();
}
@ -209,7 +209,7 @@ namespace Server.Items
}
m_User = from;
m_LastUse = DateTime.UtcNow;
m_LastUse = Core.Now;
from.SendGump(new GameGump(this, from, 0, false));
}
@ -473,7 +473,7 @@ namespace Server.Items
if (40.0 + Utility.RandomDouble() * 80.0 < lockpicking)
{
m_From.SendGump(new GameGump(m_Panel, m_From, m_Step, true));
m_Panel.m_LastUse = DateTime.UtcNow;
m_Panel.m_LastUse = Core.Now;
}
else
{
@ -520,7 +520,7 @@ namespace Server.Items
{
m_From.PlaySound(0x1F4);
m_From.SendGump(new GameGump(m_Panel, m_From, m_Step + 1, false));
m_Panel.m_LastUse = DateTime.UtcNow;
m_Panel.m_LastUse = Core.Now;
}
}
else

View file

@ -755,7 +755,7 @@ namespace Server.Items
if (ShowTimeRemaining)
{
m.SendMessage("Time remaining: {0}", FormatTime(info.Timer.Next - DateTime.UtcNow));
m.SendMessage("Time remaining: {0}", FormatTime(info.Timer.Next - Core.Now));
}
Timer.DelayCall(TimeSpan.FromSeconds(5), EndLock, m);
@ -932,7 +932,7 @@ namespace Server.Items
var m = reader.ReadEntity<Mobile>();
var end = reader.ReadDateTime();
StartTimer(m, end - DateTime.UtcNow);
StartTimer(m, end - Core.Now);
}
}
}

View file

@ -100,12 +100,12 @@ namespace Server.Items
public virtual void Broadcast(Mobile triggerer)
{
if (m_Broadcasting || DateTime.UtcNow < m_LastBroadcast + ResetDelay)
if (m_Broadcasting || Core.Now < m_LastBroadcast + ResetDelay)
{
return;
}
m_LastBroadcast = DateTime.UtcNow;
m_LastBroadcast = Core.Now;
m_Broadcasting = true;

View file

@ -29,7 +29,7 @@ namespace Server.Items
m_Entries = new List<CampfireEntry>();
Created = DateTime.UtcNow;
Created = Core.Now;
m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(1.0), TimeSpan.FromSeconds(1.0), OnTick);
}
@ -94,7 +94,7 @@ namespace Server.Items
private void OnTick()
{
var now = DateTime.UtcNow;
var now = Core.Now;
var age = now - Created;
if (age >= TimeSpan.FromSeconds(100.0))
@ -191,7 +191,7 @@ namespace Server.Items
{
Player = player;
Fire = fire;
Start = DateTime.UtcNow;
Start = Core.Now;
m_Safe = false;
}

View file

@ -113,9 +113,9 @@ namespace Server.Items
public static int GetDelay(Mobile m)
{
if (m_Delay.TryGetValue(m, out var timer) && timer.Next > DateTime.UtcNow)
if (m_Delay.TryGetValue(m, out var timer) && timer.Next > Core.Now)
{
return (int)(timer.Next - DateTime.UtcNow).TotalSeconds;
return (int)(timer.Next - Core.Now).TotalSeconds;
}
return 0;
@ -185,7 +185,7 @@ namespace Server.Items
MoveToWorld(loc, map);
From = from;
m_End = DateTime.UtcNow + TimeSpan.FromSeconds(10);
m_End = Core.Now + TimeSpan.FromSeconds(10);
SetDamage(min, max);
@ -292,7 +292,7 @@ namespace Server.Items
return;
}
if (DateTime.UtcNow > m_End)
if (Core.Now > m_End)
{
m_Item.Delete();
Stop();

View file

@ -104,7 +104,7 @@ namespace Server.Items
continue;
}
mon.Pacify(from, DateTime.UtcNow + TimeSpan.FromSeconds(5.0)); // TODO check
mon.Pacify(from, Core.Now + TimeSpan.FromSeconds(5.0)); // TODO check
}
}
}
@ -131,9 +131,9 @@ namespace Server.Items
public static int GetDelay(Mobile m)
{
if (m_Delay.TryGetValue(m, out var timer) && timer.Next > DateTime.UtcNow)
if (m_Delay.TryGetValue(m, out var timer) && timer.Next > Core.Now)
{
return (int)(timer.Next - DateTime.UtcNow).TotalSeconds;
return (int)(timer.Next - Core.Now).TotalSeconds;
}
return 0;

View file

@ -342,7 +342,7 @@ namespace Server.Items
return;
}
if (DateTime.UtcNow < NextUse)
if (Core.Now < NextUse)
{
from.SendLocalizedMessage(502406); // This book needs time to recharge.
return;
@ -359,7 +359,7 @@ namespace Server.Items
{
if (!Core.SA)
{
NextUse = DateTime.UtcNow + UseDelay;
NextUse = Core.Now + UseDelay;
}
}

View file

@ -108,7 +108,7 @@ namespace Server.Items
{
if (value != m_ReplenishesCharges && value)
{
m_LastReplenished = DateTime.UtcNow;
m_LastReplenished = Core.Now;
}
m_ReplenishesCharges = value;
@ -159,15 +159,15 @@ namespace Server.Items
return;
}
if (m_LastReplenished + ChargeReplenishRate < DateTime.UtcNow)
if (m_LastReplenished + ChargeReplenishRate < Core.Now)
{
var timeDifference = DateTime.UtcNow - m_LastReplenished;
var timeDifference = Core.Now - m_LastReplenished;
m_UsesRemaining = Math.Min(
m_UsesRemaining + (int)(timeDifference.Ticks / ChargeReplenishRate.Ticks),
InitMaxUses
); // How rude of TimeSpan to not allow timespan division.
m_LastReplenished = DateTime.UtcNow;
m_LastReplenished = Core.Now;
if (invalidate)
{

View file

@ -315,13 +315,7 @@ namespace Server.Items
return;
}
var ts = t.Next - DateTime.UtcNow;
if (ts < TimeSpan.Zero)
{
ts = TimeSpan.Zero;
}
t.Delay = ts;
t.Delay = Utility.Max(t.Next - Core.Now, TimeSpan.Zero);
t.Stop();
}
@ -334,7 +328,7 @@ namespace Server.Items
}
public static TimeSpan TimeRemaining(Mobile m) =>
Timers.TryGetValue(m, out var t) ? t.Next - DateTime.UtcNow : TimeSpan.Zero;
Timers.TryGetValue(m, out var t) ? t.Next - Core.Now : TimeSpan.Zero;
private class InternalTimer : Timer
{

View file

@ -39,7 +39,7 @@ namespace Server.Items
var m = entry.Key;
writer.Write(m);
writer.Write(entry.Value.Next - DateTime.UtcNow);
writer.Write(entry.Value.Next - Core.Now);
writer.Write(m.NameMod);
}
}

View file

@ -33,7 +33,7 @@ namespace Server.Items
public static void Initialize()
{
ServerStart = DateTime.UtcNow;
ServerStart = Core.Now;
}
public static MoonPhase GetMoonPhase(Map map, int x, int y)
@ -55,7 +55,7 @@ namespace Server.Items
public static void GetTime(Map map, int x, int y, out int hours, out int minutes, out int totalMinutes)
{
var timeSpan = DateTime.UtcNow - WorldStart;
var timeSpan = Core.Now - WorldStart;
totalMinutes = (int)(timeSpan.TotalSeconds / SecondsPerUOMinute);

View file

@ -155,7 +155,7 @@ namespace Server.Items
var next = reader.ReadDateTime();
var now = DateTime.UtcNow;
var now = Core.Now;
if (next < now)
{

View file

@ -86,7 +86,7 @@ namespace Server.Items
m_SpawnTimer = new SpawnTimer(this, delay);
m_SpawnTimer.Start();
m_NextSpawnTime = DateTime.UtcNow + delay;
m_NextSpawnTime = Core.Now + delay;
}
private void StopSpawnTimer()
@ -134,7 +134,7 @@ namespace Server.Items
if (m_Petals < 10)
{
StartSpawnTimer(m_NextSpawnTime - DateTime.UtcNow);
StartSpawnTimer(m_NextSpawnTime - Core.Now);
}
}

View file

@ -204,7 +204,7 @@ namespace Server.Items
var daysLeft = (int)Math.Ceiling(
(deed.Stone.Started + deed.Stone.Duration +
HouseRaffleStone.ExpirationTime - DateTime.UtcNow).TotalDays
HouseRaffleStone.ExpirationTime - Core.Now).TotalDays
);
return

View file

@ -18,7 +18,7 @@ namespace Server.Items
Address = From.NetState?.Address ?? IPAddress.None;
Date = DateTime.UtcNow;
Date = Core.Now;
}
public RaffleEntry(IGenericReader reader, int version)
@ -132,7 +132,7 @@ namespace Server.Items
Entries.Clear();
m_Winner = null;
Deed = null;
m_Started = DateTime.UtcNow;
m_Started = Core.Now;
}
m_State = value;
@ -213,7 +213,7 @@ namespace Server.Items
return false;
}
return m_Started + m_Duration + ExpirationTime <= DateTime.UtcNow;
return m_Started + m_Duration + ExpirationTime <= Core.Now;
}
}
@ -537,7 +537,7 @@ namespace Server.Items
public void CheckEnd()
{
if (m_State != HouseRaffleState.Active || m_Started + m_Duration > DateTime.UtcNow)
if (m_State != HouseRaffleState.Active || m_Started + m_Duration > Core.Now)
{
return;
}

View file

@ -238,7 +238,7 @@ namespace Server.Items
"You cannot summon your pet to this location."
);
}
else if (Core.ML && from is PlayerMobile mobile && DateTime.UtcNow < mobile.LastPetBallTime.AddSeconds(15.0))
else if (Core.ML && from is PlayerMobile mobile && Core.Now < mobile.LastPetBallTime.AddSeconds(15.0))
{
MessageHelper.SendLocalizedMessageTo(
this,
@ -304,7 +304,7 @@ namespace Server.Items
if (from is PlayerMobile playerMobile)
{
playerMobile.LastPetBallTime = DateTime.UtcNow;
playerMobile.LastPetBallTime = Core.Now;
}
}

View file

@ -145,7 +145,7 @@ namespace Server.Items
{
var info = m.Aggressed[i];
if (DateTime.UtcNow - info.LastCombatTime < time)
if (Core.Now - info.LastCombatTime < time)
{
return true;
}
@ -231,7 +231,7 @@ namespace Server.Items
return false;
}
if ((from as PlayerMobile)?.AcceleratedStart > DateTime.UtcNow)
if ((from as PlayerMobile)?.AcceleratedStart > Core.Now)
{
// You may not use a soulstone while your character is under the effects of a Scroll of Alacrity.
from.SendLocalizedMessage(1078115);
@ -743,7 +743,7 @@ namespace Server.Items
return;
}
if ((from as PlayerMobile)?.AcceleratedStart > DateTime.UtcNow)
if ((from as PlayerMobile)?.AcceleratedStart > Core.Now)
{
// <CENTER>Unable to Absorb Selected Skill from Soulstone</CENTER>

View file

@ -61,7 +61,7 @@ namespace Server.Items
}
}
if (pm.AcceleratedStart > DateTime.UtcNow)
if (pm.AcceleratedStart > Core.Now)
{
from.SendLocalizedMessage(1077951); // You are already under the effect of an accelerated skillgain scroll.
return false;
@ -96,7 +96,7 @@ namespace Server.Items
Effects.PlaySound(from.Location, from.Map, 0x1E9);
Effects.SendTargetParticles(from, 0x373A, 35, 45, 0x00, 0x00, 9502, (EffectLayer)255, 0x100);
pm.AcceleratedStart = DateTime.UtcNow + TimeSpan.FromMinutes(15);
pm.AcceleratedStart = Core.Now + TimeSpan.FromMinutes(15);
Timer.DelayCall(TimeSpan.FromMinutes(15), Expire_Callback, from);
pm.AcceleratedSkill = Skill;

View file

@ -72,7 +72,7 @@ namespace Server.Items
}
}
if (pm.AcceleratedStart > DateTime.UtcNow)
if (pm.AcceleratedStart > Core.Now)
{
from.SendLocalizedMessage(1077951); // You are already under the effect of an accelerated skillgain scroll.
return false;

View file

@ -60,9 +60,9 @@ namespace Server.Items
{
m.SendLocalizedMessage(1060197); // You are not dead, and thus cannot be resurrected!
}
else if (m.AnkhNextUse > DateTime.UtcNow)
else if (m.AnkhNextUse > Core.Now)
{
var delay = m.AnkhNextUse - DateTime.UtcNow;
var delay = m.AnkhNextUse - Core.Now;
if (delay.TotalMinutes > 0)
{
@ -167,7 +167,7 @@ namespace Server.Items
if (from is PlayerMobile mobile)
{
mobile.AnkhNextUse = DateTime.UtcNow + TimeSpan.FromHours(1);
mobile.AnkhNextUse = Core.Now + TimeSpan.FromHours(1);
}
base.OnResponse(state, info);

View file

@ -255,7 +255,7 @@ namespace Server.Items
}
else
{
writer.Write(DateTime.UtcNow + TimeSpan.FromDays(1));
writer.Write(Core.Now + TimeSpan.FromDays(1));
}
}
@ -277,12 +277,12 @@ namespace Server.Items
var next = reader.ReadDateTime();
if (next < DateTime.UtcNow)
if (next < Core.Now)
{
next = DateTime.UtcNow;
next = Core.Now;
}
m_Timer = Timer.DelayCall(next - DateTime.UtcNow, TimeSpan.FromDays(1), GiveResources);
m_Timer = Timer.DelayCall(next - Core.Now, TimeSpan.FromDays(1), GiveResources);
break;
}
}

View file

@ -149,7 +149,7 @@ namespace Server.Items
}
else
{
writer.Write(DateTime.UtcNow + TimeSpan.FromDays(1));
writer.Write(Core.Now + TimeSpan.FromDays(1));
}
}
@ -164,12 +164,12 @@ namespace Server.Items
var next = reader.ReadDateTime();
if (next < DateTime.UtcNow)
if (next < Core.Now)
{
next = DateTime.UtcNow;
next = Core.Now;
}
m_Timer = Timer.DelayCall(next - DateTime.UtcNow, TimeSpan.FromDays(1), GiveLogs);
m_Timer = Timer.DelayCall(next - Core.Now, TimeSpan.FromDays(1), GiveLogs);
}
}

View file

@ -385,7 +385,7 @@ namespace Server.Mobiles
public override void OnThink()
{
/*
if (m_NextWave < DateTime.UtcNow)
if (m_NextWave < Core.Now)
AreaHeatDamage();
*/
}
@ -436,7 +436,7 @@ namespace Server.Mobiles
}
}
m_NextWave = DateTime.UtcNow + TimeSpan.FromSeconds( 3 );
m_NextWave = Core.Now + TimeSpan.FromSeconds( 3 );
}
*/
}

View file

@ -51,16 +51,16 @@ namespace Server.Items
return;
}
if (CheckRange(m.Location, oldLocation, 0) && DateTime.UtcNow >= m_NextActiveTrigger)
if (CheckRange(m.Location, oldLocation, 0) && Core.Now >= m_NextActiveTrigger)
{
m_NextActiveTrigger = m_NextPassiveTrigger = DateTime.UtcNow + ResetDelay;
m_NextActiveTrigger = m_NextPassiveTrigger = Core.Now + ResetDelay;
OnTrigger(m);
}
else if (PassivelyTriggered && CheckRange(m.Location, oldLocation, PassiveTriggerRange) &&
DateTime.UtcNow >= m_NextPassiveTrigger)
Core.Now >= m_NextPassiveTrigger)
{
m_NextPassiveTrigger = DateTime.UtcNow + PassiveTriggerDelay;
m_NextPassiveTrigger = Core.Now + PassiveTriggerDelay;
OnTrigger(m);
}

View file

@ -730,7 +730,7 @@ namespace Server.Items
if (canSwing)
{
canSwing = !(attacker is PlayerMobile p) || p.PeacedUntil <= DateTime.UtcNow;
canSwing = !(attacker is PlayerMobile p) || p.PeacedUntil <= Core.Now;
}
}