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

@ -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);
}
}