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

@ -962,7 +962,7 @@ namespace Server.Mobiles
{
if (m_DeleteTimer?.Running == true)
{
return m_DeleteTimer.Next - DateTime.UtcNow;
return m_DeleteTimer.Next - Core.Now;
}
return TimeSpan.Zero;
@ -1422,7 +1422,7 @@ namespace Server.Mobiles
public void Unpacify()
{
BardEndTime = DateTime.UtcNow;
BardEndTime = Core.Now;
BardPacified = false;
}
@ -1907,7 +1907,7 @@ namespace Server.Mobiles
if (m_bSummoned)
{
SummonEnd = reader.ReadDeltaTime();
new UnsummonTimer(m_ControlMaster, this, SummonEnd - DateTime.UtcNow).Start();
new UnsummonTimer(m_ControlMaster, this, SummonEnd - Core.Now).Start();
}
ControlSlots = reader.ReadInt();
@ -2631,7 +2631,7 @@ namespace Server.Mobiles
{
// idling...
if (DateTime.UtcNow >= m_IdleReleaseTime)
if (Core.Now >= m_IdleReleaseTime)
{
m_IdleReleaseTime = DateTime.MinValue;
return false; // idle is over
@ -2645,7 +2645,7 @@ namespace Server.Mobiles
return false; // not idling, but don't want to enter idle state
}
m_IdleReleaseTime = DateTime.UtcNow + TimeSpan.FromSeconds(Utility.RandomMinMax(15, 25));
m_IdleReleaseTime = Core.Now + TimeSpan.FromSeconds(Utility.RandomMinMax(15, 25));
if (Body.IsHuman)
{
@ -3271,7 +3271,7 @@ namespace Server.Mobiles
{
if (OwnerAbandonTime == DateTime.MinValue)
{
OwnerAbandonTime = DateTime.UtcNow;
OwnerAbandonTime = Core.Now;
}
}
else
@ -3551,7 +3551,7 @@ namespace Server.Mobiles
}
new UnsummonTimer(caster, creature, duration).Start();
creature.SummonEnd = DateTime.UtcNow + duration;
creature.SummonEnd = Core.Now + duration;
creature.MoveToWorld(p, caster.Map);
@ -3730,7 +3730,7 @@ namespace Server.Mobiles
BardMaster = master;
BardTarget = target;
Combatant = target;
BardEndTime = DateTime.UtcNow + TimeSpan.FromSeconds(30.0);
BardEndTime = Core.Now + TimeSpan.FromSeconds(30.0);
if (target is BaseCreature t)
{
@ -3744,7 +3744,7 @@ namespace Server.Mobiles
t.BardMaster = master;
t.BardTarget = this;
t.Combatant = this;
t.BardEndTime = DateTime.UtcNow + TimeSpan.FromSeconds(30.0);
t.BardEndTime = Core.Now + TimeSpan.FromSeconds(30.0);
}
}
else
@ -3859,7 +3859,7 @@ namespace Server.Mobiles
{
if (OwnerAbandonTime == DateTime.MinValue)
{
OwnerAbandonTime = DateTime.UtcNow;
OwnerAbandonTime = Core.Now;
}
}
else
@ -3933,7 +3933,7 @@ namespace Server.Mobiles
private void CheckShout(PlayerMobile pm, Point3D oldLocation)
{
if (m_MLNextShout > DateTime.UtcNow || pm.Hidden || !pm.Alive)
if (m_MLNextShout > Core.Now || pm.Hidden || !pm.Alive)
{
return;
}
@ -3960,7 +3960,7 @@ namespace Server.Mobiles
}
Shout(pm);
m_MLNextShout = DateTime.UtcNow + ShoutDelay;
m_MLNextShout = Core.Now + ShoutDelay;
}
public virtual void Shout(PlayerMobile pm)
@ -4187,7 +4187,7 @@ namespace Server.Mobiles
return false;
}
if (DateTime.UtcNow >= EndFleeTime)
if (Core.Now >= EndFleeTime)
{
StopFlee();
return false;
@ -4198,7 +4198,7 @@ namespace Server.Mobiles
public virtual void BeginFlee(TimeSpan maxDuration)
{
EndFleeTime = DateTime.UtcNow + maxDuration;
EndFleeTime = Core.Now + maxDuration;
}
public virtual bool IsPetFriend(Mobile m) => Friends?.Contains(m) == true;
@ -4398,9 +4398,9 @@ namespace Server.Mobiles
{
if (BondingBegin == DateTime.MinValue)
{
BondingBegin = DateTime.UtcNow;
BondingBegin = Core.Now;
}
else if (BondingBegin + BondingDelay <= DateTime.UtcNow)
else if (BondingBegin + BondingDelay <= Core.Now)
{
IsBonded = true;
BondingBegin = DateTime.MinValue;
@ -5617,7 +5617,7 @@ namespace Server.Mobiles
public LoyaltyTimer() : base(InternalDelay, InternalDelay)
{
m_NextHourlyCheck = DateTime.UtcNow + TimeSpan.FromHours(1.0);
m_NextHourlyCheck = Core.Now + TimeSpan.FromHours(1.0);
Priority = TimerPriority.FiveSeconds;
}
@ -5628,12 +5628,12 @@ namespace Server.Mobiles
protected override void OnTick()
{
if (DateTime.UtcNow < m_NextHourlyCheck)
if (Core.Now < m_NextHourlyCheck)
{
return;
}
m_NextHourlyCheck = DateTime.UtcNow + TimeSpan.FromHours(1.0);
m_NextHourlyCheck = Core.Now + TimeSpan.FromHours(1.0);
var toRelease = new List<BaseCreature>();
@ -5662,9 +5662,9 @@ namespace Server.Mobiles
{
if (c.OwnerAbandonTime == DateTime.MinValue)
{
c.OwnerAbandonTime = DateTime.UtcNow;
c.OwnerAbandonTime = Core.Now;
}
else if (c.OwnerAbandonTime + c.BondingAbandonDelay <= DateTime.UtcNow)
else if (c.OwnerAbandonTime + c.BondingAbandonDelay <= Core.Now)
{
toRemove.Add(c);
}