Implement Core.TickCount

Convert movement, actions (lift/use), combat, and spells to use Core.TickCount and avoid DateTime caveats (performance, system time dependency, etc)
Refactor DateTime.Now to DateTime.UtcNow
Add LOS check for Iron Maiden addon
This commit is contained in:
Mark Sturgill 2013-10-06 03:21:18 -07:00
parent f99eefb288
commit d2c670f5c3
241 changed files with 842 additions and 831 deletions

View file

@ -353,7 +353,7 @@ namespace Server.Mobiles
private void CheckShout( PlayerMobile pm, Point3D oldLocation )
{
if ( m_MLNextShout > DateTime.Now || pm.Hidden || !pm.Alive )
if ( m_MLNextShout > DateTime.UtcNow || pm.Hidden || !pm.Alive )
return;
int shoutRange = ShoutRange;
@ -372,7 +372,7 @@ namespace Server.Mobiles
return;
Shout( pm );
m_MLNextShout = DateTime.Now + ShoutDelay;
m_MLNextShout = DateTime.UtcNow + ShoutDelay;
}
public virtual void Shout( PlayerMobile pm )
@ -465,7 +465,7 @@ namespace Server.Mobiles
get
{
if ( m_DeleteTimer != null && m_DeleteTimer.Running )
return m_DeleteTimer.Next - DateTime.Now;
return m_DeleteTimer.Next - DateTime.UtcNow;
return TimeSpan.Zero;
}
@ -679,7 +679,7 @@ namespace Server.Mobiles
public virtual void BreathStallMovement()
{
if ( m_AI != null )
m_AI.NextMove = DateTime.Now + TimeSpan.FromSeconds( BreathStallTime );
m_AI.NextMove = DateTime.UtcNow + TimeSpan.FromSeconds( BreathStallTime );
}
public virtual void BreathPlayAngerSound()
@ -854,7 +854,7 @@ namespace Server.Mobiles
if ( m_EndFlee == DateTime.MinValue )
return false;
if ( DateTime.Now >= m_EndFlee )
if ( DateTime.UtcNow >= m_EndFlee )
{
StopFlee();
return false;
@ -865,7 +865,7 @@ namespace Server.Mobiles
public virtual void BeginFlee( TimeSpan maxDuration )
{
m_EndFlee = DateTime.Now + maxDuration;
m_EndFlee = DateTime.UtcNow + maxDuration;
}
#endregion
@ -1404,7 +1404,7 @@ namespace Server.Mobiles
public void Unpacify()
{
BardEndTime = DateTime.Now;
BardEndTime = DateTime.UtcNow;
BardPacified = false;
}
@ -1712,7 +1712,7 @@ namespace Server.Mobiles
m_Owners = new List<Mobile>();
m_NextReacquireTime = DateTime.Now + ReacquireDelay;
m_NextReacquireTime = DateTime.UtcNow + ReacquireDelay;
ChangeAIType(AI);
@ -1951,7 +1951,7 @@ namespace Server.Mobiles
if ( m_bSummoned )
{
m_SummonEnd = reader.ReadDeltaTime();
new UnsummonTimer( m_ControlMaster, this, m_SummonEnd - DateTime.Now ).Start();
new UnsummonTimer( m_ControlMaster, this, m_SummonEnd - DateTime.UtcNow ).Start();
}
m_iControlSlots = reader.ReadInt();
@ -2294,9 +2294,9 @@ namespace Server.Mobiles
{
if ( BondingBegin == DateTime.MinValue )
{
BondingBegin = DateTime.Now;
BondingBegin = DateTime.UtcNow;
}
else if ( (BondingBegin + BondingDelay) <= DateTime.Now )
else if ( (BondingBegin + BondingDelay) <= DateTime.UtcNow )
{
IsBonded = true;
BondingBegin = DateTime.MinValue;
@ -2871,7 +2871,7 @@ namespace Server.Mobiles
if ( m_bSummoned == value )
return;
m_NextReacquireTime = DateTime.Now;
m_NextReacquireTime = DateTime.UtcNow;
m_bSummoned = value;
Delta( MobileDelta.Noto );
@ -3508,7 +3508,7 @@ namespace Server.Mobiles
{
// idling...
if ( DateTime.Now >= m_IdleReleaseTime )
if ( DateTime.UtcNow >= m_IdleReleaseTime )
{
m_IdleReleaseTime = DateTime.MinValue;
return false; // idle is over
@ -3520,7 +3520,7 @@ namespace Server.Mobiles
if ( 95 > Utility.Random( 100 ) )
return false; // not idling, but don't want to enter idle state
m_IdleReleaseTime = DateTime.Now + TimeSpan.FromSeconds( Utility.RandomMinMax( 15, 25 ) );
m_IdleReleaseTime = DateTime.UtcNow + TimeSpan.FromSeconds( Utility.RandomMinMax( 15, 25 ) );
if ( Body.IsHuman )
{
@ -4823,7 +4823,7 @@ namespace Server.Mobiles
if ( owner == null || owner.Deleted || owner.Map != this.Map || !owner.InRange( this, 12 ) || !this.CanSee( owner ) || !this.InLOS( owner ) )
{
if ( this.OwnerAbandonTime == DateTime.MinValue )
this.OwnerAbandonTime = DateTime.Now;
this.OwnerAbandonTime = DateTime.UtcNow;
}
else
{
@ -5131,7 +5131,7 @@ namespace Server.Mobiles
}
new UnsummonTimer( caster, creature, duration ).Start();
creature.m_SummonEnd = DateTime.Now + duration;
creature.m_SummonEnd = DateTime.UtcNow + duration;
creature.MoveToWorld( p, caster.Map );
@ -5174,8 +5174,8 @@ namespace Server.Mobiles
public virtual double HealOwnerInterval { get { return 30.0; } }
public virtual bool HealOwnerFully { get { return false; } }
private DateTime m_NextHealTime = DateTime.Now;
private DateTime m_NextHealOwnerTime = DateTime.Now;
private DateTime m_NextHealTime = DateTime.UtcNow;
private DateTime m_NextHealOwnerTime = DateTime.UtcNow;
private Timer m_HealTimer = null;
public bool IsHealing { get { return ( m_HealTimer != null ); } }
@ -5345,7 +5345,7 @@ namespace Server.Mobiles
public virtual void OnThink()
{
if ( EnableRummaging && CanRummageCorpses && !Summoned && !Controlled && DateTime.Now >= m_NextRummageTime )
if ( EnableRummaging && CanRummageCorpses && !Summoned && !Controlled && DateTime.UtcNow >= m_NextRummageTime )
{
double min, max;
@ -5361,21 +5361,21 @@ namespace Server.Mobiles
}
double delay = min + (Utility.RandomDouble() * (max - min));
m_NextRummageTime = DateTime.Now + TimeSpan.FromMinutes( delay );
m_NextRummageTime = DateTime.UtcNow + TimeSpan.FromMinutes( delay );
}
if ( CanBreath && DateTime.Now >= m_NextBreathTime ) // tested: controlled dragons do breath fire, what about summoned skeletal dragons?
if ( CanBreath && DateTime.UtcNow >= m_NextBreathTime ) // tested: controlled dragons do breath fire, what about summoned skeletal dragons?
{
Mobile target = this.Combatant;
if( target != null && target.Alive && !target.IsDeadBondedPet && CanBeHarmful( target ) && target.Map == this.Map && !IsDeadBondedPet && target.InRange( this, BreathRange ) && InLOS( target ) && !BardPacified )
{
if( ( DateTime.Now - m_NextBreathTime ) < TimeSpan.FromSeconds( 30 ) && Utility.RandomBool() )
if( ( DateTime.UtcNow - m_NextBreathTime ) < TimeSpan.FromSeconds( 30 ) && Utility.RandomBool() )
{
BreathStart( target );
}
m_NextBreathTime = DateTime.Now + TimeSpan.FromSeconds( BreathMinDelay + ( ( Utility.RandomDouble( ) * ( BreathMaxDelay - BreathMinDelay ) ) ) );
m_NextBreathTime = DateTime.UtcNow + TimeSpan.FromSeconds( BreathMinDelay + ( ( Utility.RandomDouble( ) * ( BreathMaxDelay - BreathMinDelay ) ) ) );
}
}
@ -5383,17 +5383,17 @@ namespace Server.Mobiles
{
Mobile owner = this.ControlMaster;
if ( owner != null && CanHealOwner && DateTime.Now >= m_NextHealOwnerTime && CanBeBeneficial( owner, true, true ) && owner.Map == this.Map && InRange( owner, HealStartRange ) && InLOS( owner ) && owner.Hits < HealOwnerTrigger * owner.HitsMax )
if ( owner != null && CanHealOwner && DateTime.UtcNow >= m_NextHealOwnerTime && CanBeBeneficial( owner, true, true ) && owner.Map == this.Map && InRange( owner, HealStartRange ) && InLOS( owner ) && owner.Hits < HealOwnerTrigger * owner.HitsMax )
{
HealStart( owner );
m_NextHealOwnerTime = DateTime.Now + TimeSpan.FromSeconds( HealOwnerInterval );
m_NextHealOwnerTime = DateTime.UtcNow + TimeSpan.FromSeconds( HealOwnerInterval );
}
else if ( CanHeal && DateTime.Now >= m_NextHealTime && CanBeBeneficial( this ) && ( Hits < HealTrigger * HitsMax || Poisoned ) )
else if ( CanHeal && DateTime.UtcNow >= m_NextHealTime && CanBeBeneficial( this ) && ( Hits < HealTrigger * HitsMax || Poisoned ) )
{
HealStart( this );
m_NextHealTime = DateTime.Now + TimeSpan.FromSeconds( HealInterval );
m_NextHealTime = DateTime.UtcNow + TimeSpan.FromSeconds( HealInterval );
}
}
@ -5416,10 +5416,10 @@ namespace Server.Mobiles
m_FailedReturnHome = 0;
}
if ( HasAura && DateTime.Now >= m_NextAura )
if ( HasAura && DateTime.UtcNow >= m_NextAura )
{
AuraDamage();
m_NextAura = DateTime.Now + AuraInterval;
m_NextAura = DateTime.UtcNow + AuraInterval;
}
}
@ -5501,7 +5501,7 @@ namespace Server.Mobiles
BardMaster = master;
BardTarget = target;
Combatant = target;
BardEndTime = DateTime.Now + TimeSpan.FromSeconds( 30.0 );
BardEndTime = DateTime.UtcNow + TimeSpan.FromSeconds( 30.0 );
if ( target is BaseCreature )
{
@ -5515,7 +5515,7 @@ namespace Server.Mobiles
t.BardMaster = master;
t.BardTarget = this;
t.Combatant = this;
t.BardEndTime = DateTime.Now + TimeSpan.FromSeconds( 30.0 );
t.BardEndTime = DateTime.UtcNow + TimeSpan.FromSeconds( 30.0 );
}
}
else
@ -5623,7 +5623,7 @@ namespace Server.Mobiles
if ( owner == null || owner.Deleted || owner.Map != this.Map || !owner.InRange( this, 12 ) || !this.CanSee( owner ) || !this.InLOS( owner ) )
{
if ( this.OwnerAbandonTime == DateTime.MinValue )
this.OwnerAbandonTime = DateTime.Now;
this.OwnerAbandonTime = DateTime.UtcNow;
}
else
{
@ -5742,7 +5742,7 @@ namespace Server.Mobiles
public LoyaltyTimer() : base( InternalDelay, InternalDelay )
{
m_NextHourlyCheck = DateTime.Now + TimeSpan.FromHours( 1.0 );
m_NextHourlyCheck = DateTime.UtcNow + TimeSpan.FromHours( 1.0 );
Priority = TimerPriority.FiveSeconds;
}
@ -5750,8 +5750,8 @@ namespace Server.Mobiles
protected override void OnTick()
{
if ( DateTime.Now >= m_NextHourlyCheck )
m_NextHourlyCheck = DateTime.Now + TimeSpan.FromHours( 1.0 );
if ( DateTime.UtcNow >= m_NextHourlyCheck )
m_NextHourlyCheck = DateTime.UtcNow + TimeSpan.FromHours( 1.0 );
else
return;
@ -5779,8 +5779,8 @@ namespace Server.Mobiles
if ( !c.IsStabled && ( owner == null || owner.Deleted || owner.Map != c.Map || !owner.InRange( c, 12 ) || !c.CanSee( owner ) || !c.InLOS( owner ) ) )
{
if ( c.OwnerAbandonTime == DateTime.MinValue )
c.OwnerAbandonTime = DateTime.Now;
else if ( (c.OwnerAbandonTime + c.BondingAbandonDelay) <= DateTime.Now )
c.OwnerAbandonTime = DateTime.UtcNow;
else if ( (c.OwnerAbandonTime + c.BondingAbandonDelay) <= DateTime.UtcNow )
toRemove.Add( c );
}
else