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

@ -42,7 +42,7 @@ namespace Server.Mobiles
return true;
}
if ( (m_Mobile.LastMoveTime + TimeSpan.FromSeconds( 1.0 )) < DateTime.Now )
if (Core.TickCount - m_Mobile.LastMoveTime > 1000)
{
if (WalkMobileRange(m_Mobile.Combatant, 1, true, m_Mobile.RangeFight, m_Mobile.Weapon.MaxRange))
{

View file

@ -830,7 +830,7 @@ namespace Server.Mobiles
m_Mobile.FocusMob = null;
m_Mobile.Combatant = null;
m_Mobile.CurrentSpeed = m_Mobile.ActiveSpeed;
m_NextStopGuard = DateTime.Now + TimeSpan.FromSeconds(10);
m_NextStopGuard = DateTime.UtcNow + TimeSpan.FromSeconds(10);
m_Mobile.CurrentSpeed = m_Mobile.ActiveSpeed;
break;
@ -928,7 +928,7 @@ namespace Server.Mobiles
{
m_Mobile.DebugSay("Praise the shepherd!");
}
else if (DateTime.Now < m_NextStopGuard)
else if (DateTime.UtcNow < m_NextStopGuard)
{
m_Mobile.DebugSay("I am on guard");
//m_Mobile.Turn( Utility.Random(0, 2) - 1 );
@ -1836,7 +1836,7 @@ namespace Server.Mobiles
public virtual bool DoBardPacified()
{
if (DateTime.Now < m_Mobile.BardEndTime)
if (DateTime.UtcNow < m_Mobile.BardEndTime)
{
m_Mobile.DebugSay("I am pacified, I wait");
m_Mobile.Combatant = null;
@ -1854,7 +1854,7 @@ namespace Server.Mobiles
public virtual bool DoBardProvoked()
{
if (DateTime.Now >= m_Mobile.BardEndTime && (m_Mobile.BardMaster == null || m_Mobile.BardMaster.Deleted || m_Mobile.BardMaster.Map != m_Mobile.Map || m_Mobile.GetDistanceToSqrt(m_Mobile.BardMaster) > m_Mobile.RangePerception))
if (DateTime.UtcNow >= m_Mobile.BardEndTime && (m_Mobile.BardMaster == null || m_Mobile.BardMaster.Deleted || m_Mobile.BardMaster.Map != m_Mobile.Map || m_Mobile.GetDistanceToSqrt(m_Mobile.BardMaster) > m_Mobile.RangePerception))
{
m_Mobile.DebugSay("I have lost my provoker");
m_Mobile.BardProvoked = false;
@ -1990,7 +1990,7 @@ namespace Server.Mobiles
{
using (StreamWriter op = new StreamWriter("nan_transform.txt", true))
{
op.WriteLine(String.Format("NaN in TransformMoveDelay: {0}, {1}, {2}, {3}", DateTime.Now, this.GetType().ToString(), m_Mobile == null ? "null" : m_Mobile.GetType().ToString(), m_Mobile.HitsMax));
op.WriteLine(String.Format("NaN in TransformMoveDelay: {0}, {1}, {2}, {3}", DateTime.UtcNow, this.GetType().ToString(), m_Mobile == null ? "null" : m_Mobile.GetType().ToString(), m_Mobile.HitsMax));
}
return 1.0;
@ -2009,7 +2009,7 @@ namespace Server.Mobiles
public virtual bool CheckMove()
{
return (DateTime.Now >= m_NextMove);
return (DateTime.UtcNow >= m_NextMove);
}
public virtual bool DoMove(Direction d)
@ -2040,8 +2040,8 @@ namespace Server.Mobiles
m_NextMove += delay;
if (m_NextMove < DateTime.Now)
m_NextMove = DateTime.Now;
if (m_NextMove < DateTime.UtcNow)
m_NextMove = DateTime.UtcNow;
m_Mobile.Pushing = false;
@ -2470,13 +2470,13 @@ namespace Server.Mobiles
return false;
}
if (m_Mobile.NextReacquireTime > DateTime.Now)
if (m_Mobile.NextReacquireTime > DateTime.UtcNow)
{
m_Mobile.FocusMob = null;
return false;
}
m_Mobile.NextReacquireTime = DateTime.Now + m_Mobile.ReacquireDelay;
m_Mobile.NextReacquireTime = DateTime.UtcNow + m_Mobile.ReacquireDelay;
m_Mobile.DebugSay("Acquiring...");
@ -2734,7 +2734,7 @@ namespace Server.Mobiles
{
m_Owner = owner;
m_Owner.m_NextDetectHidden = DateTime.Now;
m_Owner.m_NextDetectHidden = DateTime.UtcNow;
Priority = TimerPriority.FiftyMS;
}
@ -2802,7 +2802,7 @@ namespace Server.Mobiles
}
}
if (m_Owner.CanDetectHidden && DateTime.Now > m_Owner.m_NextDetectHidden)
if (m_Owner.CanDetectHidden && DateTime.UtcNow > m_Owner.m_NextDetectHidden)
{
m_Owner.DetectHidden();
@ -2815,7 +2815,7 @@ namespace Server.Mobiles
int min = delay * (9 / 10); // 13s at 1000 int, 33s at 400 int, 54s at <250 int
int max = delay * (10 / 9); // 16s at 1000 int, 41s at 400 int, 66s at <250 int
m_Owner.m_NextDetectHidden = DateTime.Now + TimeSpan.FromSeconds(Utility.RandomMinMax(min, max));
m_Owner.m_NextDetectHidden = DateTime.UtcNow + TimeSpan.FromSeconds(Utility.RandomMinMax(min, max));
}
}
}

View file

@ -61,7 +61,7 @@ namespace Server.Mobiles
m_Mobile.Combatant = m_Mobile.FocusMob;
Action = ActionType.Combat;
m_NextCastTime = DateTime.Now;
m_NextCastTime = DateTime.UtcNow;
}
else if( SmartAI && m_Mobile.Mana < m_Mobile.ManaMax && !m_Mobile.Meditating )
{
@ -101,7 +101,7 @@ namespace Server.Mobiles
if( m_Mobile.Controlled )
{
if( DateTime.Now < m_NextHealTime )
if( DateTime.UtcNow < m_NextHealTime )
return null;
}
@ -144,7 +144,7 @@ namespace Server.Mobiles
else
delay = Math.Sqrt( 600 - m_Mobile.Int );
m_NextHealTime = DateTime.Now + TimeSpan.FromSeconds( delay );
m_NextHealTime = DateTime.UtcNow + TimeSpan.FromSeconds( delay );
return spell;
}
@ -664,7 +664,7 @@ namespace Server.Mobiles
}
}
if( m_Mobile.Spell == null && DateTime.Now > m_NextCastTime && m_Mobile.InRange( c, Core.ML ? 10 : 12 ) )
if( m_Mobile.Spell == null && DateTime.UtcNow > m_NextCastTime && m_Mobile.InRange( c, Core.ML ? 10 : 12 ) )
{
// We are ready to cast a spell
@ -714,7 +714,7 @@ namespace Server.Mobiles
if( spell != null )
spell.Cast();
m_NextCastTime = DateTime.Now + GetDelay( spell );
m_NextCastTime = DateTime.UtcNow + GetDelay( spell );
}
else if( m_Mobile.Spell == null || !m_Mobile.Spell.IsCasting )
{
@ -739,7 +739,7 @@ namespace Server.Mobiles
{
m_LastTarget = null;
}
else if( m_Mobile.Spell == null && DateTime.Now > m_NextCastTime )
else if( m_Mobile.Spell == null && DateTime.UtcNow > m_NextCastTime )
{
m_Mobile.DebugSay( "I am going to reveal my last target" );
@ -749,7 +749,7 @@ namespace Server.Mobiles
if( spell.Cast() )
m_LastTarget = null; // only do it once
m_NextCastTime = DateTime.Now + GetDelay( spell );
m_NextCastTime = DateTime.UtcNow + GetDelay( spell );
}
}

View file

@ -68,14 +68,14 @@ namespace Server.Mobiles
if ( !Core.AOS && !m_Mobile.DisarmReady && m_Mobile.Skills[SkillName.Wrestling].Value >= 80.0 && m_Mobile.Skills[SkillName.ArmsLore].Value >= 80.0 && m_toDisarm != null )
EventSink.InvokeDisarmRequest( new DisarmRequestEventArgs( m_Mobile ) );
if ( m_toDisarm != null && m_toDisarm.IsChildOf( combatant.Backpack ) && m_Mobile.NextSkillTime <= DateTime.Now && (m_toDisarm.LootType != LootType.Blessed && m_toDisarm.LootType != LootType.Newbied) )
if (m_toDisarm != null && m_toDisarm.IsChildOf(combatant.Backpack) && Core.TickCount - m_Mobile.NextSkillTime >= 0 && (m_toDisarm.LootType != LootType.Blessed && m_toDisarm.LootType != LootType.Newbied))
{
m_Mobile.DebugSay( "Trying to steal from combatant." );
m_Mobile.UseSkill( SkillName.Stealing );
if ( m_Mobile.Target != null )
m_Mobile.Target.Invoke( m_Mobile, m_toDisarm );
}
else if ( m_toDisarm == null && m_Mobile.NextSkillTime <= DateTime.Now )
else if (m_toDisarm == null && Core.TickCount - m_Mobile.NextSkillTime >= 0)
{
Container cpack = combatant.Backpack;