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:
parent
f99eefb288
commit
d2c670f5c3
241 changed files with 842 additions and 831 deletions
|
|
@ -18,7 +18,7 @@ namespace Server.Spells
|
|||
private Item m_Scroll;
|
||||
private SpellInfo m_Info;
|
||||
private SpellState m_State;
|
||||
private DateTime m_StartCastTime;
|
||||
private int m_StartCastTime;
|
||||
|
||||
public SpellState State{ get{ return m_State; } set{ m_State = value; } }
|
||||
public Mobile Caster{ get{ return m_Caster; } }
|
||||
|
|
@ -27,7 +27,7 @@ namespace Server.Spells
|
|||
public string Mantra{ get{ return m_Info.Mantra; } }
|
||||
public Type[] Reagents{ get{ return m_Info.Reagents; } }
|
||||
public Item Scroll{ get{ return m_Scroll; } }
|
||||
public DateTime StartCastTime { get { return m_StartCastTime; } }
|
||||
public int StartCastTime { get { return m_StartCastTime; } }
|
||||
|
||||
private static TimeSpan NextSpellDelay = TimeSpan.FromSeconds( 0.75 );
|
||||
private static TimeSpan AnimateDelay = TimeSpan.FromSeconds( 1.5 );
|
||||
|
|
@ -429,7 +429,7 @@ namespace Server.Spells
|
|||
if ( Core.AOS && m_Caster.Player && type == DisturbType.Hurt )
|
||||
DoHurtFizzle();
|
||||
|
||||
m_Caster.NextSpellTime = DateTime.Now + GetDisturbRecovery();
|
||||
m_Caster.NextSpellTime = Core.TickCount + (int)GetDisturbRecovery().TotalMilliseconds;
|
||||
}
|
||||
else if ( m_State == SpellState.Sequencing )
|
||||
{
|
||||
|
|
@ -482,7 +482,7 @@ namespace Server.Spells
|
|||
|
||||
public bool Cast()
|
||||
{
|
||||
m_StartCastTime = DateTime.Now;
|
||||
m_StartCastTime = Core.TickCount;
|
||||
|
||||
if ( Core.AOS && m_Caster.Spell is Spell && ((Spell)m_Caster.Spell).State == SpellState.Sequencing )
|
||||
((Spell)m_Caster.Spell).Disturb( DisturbType.NewCast );
|
||||
|
|
@ -507,11 +507,11 @@ namespace Server.Spells
|
|||
{
|
||||
m_Caster.SendLocalizedMessage( 502643 ); // You can not cast a spell while frozen.
|
||||
}
|
||||
else if ( CheckNextSpellTime && DateTime.Now < m_Caster.NextSpellTime )
|
||||
else if (CheckNextSpellTime && Core.TickCount - m_Caster.NextSpellTime < 0)
|
||||
{
|
||||
m_Caster.SendLocalizedMessage( 502644 ); // You have not yet recovered from casting a spell.
|
||||
}
|
||||
else if ( m_Caster is PlayerMobile && ( (PlayerMobile) m_Caster ).PeacedUntil > DateTime.Now )
|
||||
else if ( m_Caster is PlayerMobile && ( (PlayerMobile) m_Caster ).PeacedUntil > DateTime.UtcNow )
|
||||
{
|
||||
m_Caster.SendLocalizedMessage( 1072060 ); // You cannot cast a spell while calmed.
|
||||
}
|
||||
|
|
@ -633,7 +633,7 @@ namespace Server.Spells
|
|||
if ( Core.AOS )
|
||||
return TimeSpan.Zero;
|
||||
|
||||
double delay = 1.0 - Math.Sqrt( (DateTime.Now - m_StartCastTime).TotalSeconds / GetCastDelay().TotalSeconds );
|
||||
double delay = 1.0 - Math.Sqrt((Core.TickCount - m_StartCastTime) / 1000 / GetCastDelay().TotalSeconds);
|
||||
|
||||
if ( delay < 0.2 )
|
||||
delay = 0.2;
|
||||
|
|
@ -753,7 +753,7 @@ namespace Server.Spells
|
|||
m_Caster.SendLocalizedMessage( 502646 ); // You cannot cast a spell while frozen.
|
||||
DoFizzle();
|
||||
}
|
||||
else if ( m_Caster is PlayerMobile && ((PlayerMobile) m_Caster).PeacedUntil > DateTime.Now )
|
||||
else if ( m_Caster is PlayerMobile && ((PlayerMobile) m_Caster).PeacedUntil > DateTime.UtcNow )
|
||||
{
|
||||
m_Caster.SendLocalizedMessage( 1072060 ); // You cannot cast a spell while calmed.
|
||||
DoFizzle();
|
||||
|
|
@ -913,7 +913,7 @@ namespace Server.Spells
|
|||
m_Spell.m_Caster.OnSpellCast( m_Spell );
|
||||
if ( m_Spell.m_Caster.Region != null )
|
||||
m_Spell.m_Caster.Region.OnSpellCast( m_Spell.m_Caster, m_Spell );
|
||||
m_Spell.m_Caster.NextSpellTime = DateTime.Now + m_Spell.GetCastRecovery();// Spell.NextSpellDelay;
|
||||
m_Spell.m_Caster.NextSpellTime = Core.TickCount + (int)m_Spell.GetCastRecovery().TotalMilliseconds; // Spell.NextSpellDelay;
|
||||
|
||||
Target originalTarget = m_Spell.m_Caster.Target;
|
||||
|
||||
|
|
|
|||
|
|
@ -140,7 +140,7 @@ namespace Server.Spells
|
|||
{
|
||||
AggressorInfo info = m.Aggressed[i];
|
||||
|
||||
if( info.Defender.Player && (DateTime.Now - info.LastCombatTime) < CombatHeatDelay )
|
||||
if( info.Defender.Player && (DateTime.UtcNow - info.LastCombatTime) < CombatHeatDelay )
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -150,7 +150,7 @@ namespace Server.Spells
|
|||
{
|
||||
AggressorInfo info = m.Aggressors[i];
|
||||
|
||||
if( info.Attacker.Player && (DateTime.Now - info.LastCombatTime) < CombatHeatDelay )
|
||||
if( info.Attacker.Player && (DateTime.UtcNow - info.LastCombatTime) < CombatHeatDelay )
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ namespace Server.Spells.Chivalry
|
|||
public override void DoFizzle()
|
||||
{
|
||||
Caster.PlaySound( 0x1D6 );
|
||||
Caster.NextSpellTime = DateTime.Now;
|
||||
Caster.NextSpellTime = Core.TickCount;
|
||||
}
|
||||
|
||||
public override void DoHurtFizzle()
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ namespace Server.Spells.Eighth
|
|||
{
|
||||
from.SendLocalizedMessage( 501943 ); // Target cannot be seen. Try again.
|
||||
from.Target = new InternalTarget( m_Owner );
|
||||
from.Target.BeginTimeout( from, TimeoutTime - DateTime.Now );
|
||||
from.Target.BeginTimeout( from, TimeoutTime - DateTime.UtcNow );
|
||||
m_Owner = null;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ namespace Server.Spells.Fifth
|
|||
{
|
||||
from.SendLocalizedMessage( 501943 ); // Target cannot be seen. Try again.
|
||||
from.Target = new InternalTarget( m_Owner );
|
||||
from.Target.BeginTimeout( from, TimeoutTime - DateTime.Now );
|
||||
from.Target.BeginTimeout( from, TimeoutTime - DateTime.UtcNow );
|
||||
m_Owner = null;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@ namespace Server.Spells.Fifth
|
|||
|
||||
m_Caster = caster;
|
||||
|
||||
m_End = DateTime.Now + duration;
|
||||
m_End = DateTime.UtcNow + duration;
|
||||
|
||||
m_Timer = new InternalTimer( this, TimeSpan.FromSeconds( Math.Abs( val ) * 0.2 ), caster.InLOS( this ), canFit );
|
||||
m_Timer.Start();
|
||||
|
|
@ -239,7 +239,7 @@ namespace Server.Spells.Fifth
|
|||
Effects.SendLocationParticles( EffectItem.Create( m_Item.Location, m_Item.Map, EffectItem.DefaultDuration ), 0x376A, 9, 10, 5040 );
|
||||
}
|
||||
}
|
||||
else if ( DateTime.Now > m_Item.m_End )
|
||||
else if ( DateTime.UtcNow > m_Item.m_End )
|
||||
{
|
||||
m_Item.Delete();
|
||||
Stop();
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ namespace Server.Spells.Fourth
|
|||
|
||||
m_Damage = damage;
|
||||
|
||||
m_End = DateTime.Now + duration;
|
||||
m_End = DateTime.UtcNow + duration;
|
||||
|
||||
m_Timer = new InternalTimer( this, TimeSpan.FromSeconds( Math.Abs( val ) * 0.2 ), caster.InLOS( this ), canFit );
|
||||
m_Timer.Start();
|
||||
|
|
@ -243,7 +243,7 @@ namespace Server.Spells.Fourth
|
|||
Effects.SendLocationParticles( EffectItem.Create( m_Item.Location, m_Item.Map, EffectItem.DefaultDuration ), 0x376A, 9, 10, 5029 );
|
||||
}
|
||||
}
|
||||
else if ( DateTime.Now > m_Item.m_End )
|
||||
else if ( DateTime.UtcNow > m_Item.m_End )
|
||||
{
|
||||
m_Item.Delete();
|
||||
Stop();
|
||||
|
|
|
|||
|
|
@ -129,14 +129,14 @@ namespace Server.Spells.Necromancy
|
|||
{
|
||||
m_Caster = caster;
|
||||
m_Target = target;
|
||||
m_End = DateTime.Now + delay;
|
||||
m_End = DateTime.UtcNow + delay;
|
||||
|
||||
Priority = TimerPriority.TwoFiftyMS;
|
||||
}
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
if ( m_Caster.Deleted || m_Target.Deleted || !m_Caster.Alive || !m_Target.Alive || DateTime.Now >= m_End )
|
||||
if ( m_Caster.Deleted || m_Target.Deleted || !m_Caster.Alive || !m_Target.Alive || DateTime.UtcNow >= m_End )
|
||||
{
|
||||
DoExpire ();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -144,13 +144,13 @@ namespace Server.Spells.Necromancy
|
|||
{
|
||||
m_Caster = caster;
|
||||
m_Target = target;
|
||||
m_End = DateTime.Now + delay;
|
||||
m_End = DateTime.UtcNow + delay;
|
||||
Priority = TimerPriority.TwoFiftyMS;
|
||||
}
|
||||
|
||||
public void RenewDelay(TimeSpan delay)
|
||||
{
|
||||
m_End = DateTime.Now + delay;
|
||||
m_End = DateTime.UtcNow + delay;
|
||||
}
|
||||
|
||||
public void Halt()
|
||||
|
|
@ -160,7 +160,7 @@ namespace Server.Spells.Necromancy
|
|||
|
||||
protected override void OnTick()
|
||||
{
|
||||
if ( m_Target.Deleted || !m_Target.Alive || DateTime.Now >= m_End )
|
||||
if ( m_Target.Deleted || !m_Target.Alive || DateTime.UtcNow >= m_End )
|
||||
{
|
||||
MindRotSpell.ClearMindRotScalar( m_Target );
|
||||
Stop();
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ namespace Server.Spells.Necromancy
|
|||
{
|
||||
t.Delay += TimeSpan.FromSeconds( 2.0 );
|
||||
|
||||
buffTime = t.Next - DateTime.Now;
|
||||
buffTime = t.Next - DateTime.UtcNow;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@ namespace Server.Spells.Necromancy
|
|||
m_MaxBaseDamage = spiritLevel + 1;
|
||||
|
||||
m_HitDelay = 5;
|
||||
m_NextHit = DateTime.Now + TimeSpan.FromSeconds( m_HitDelay );
|
||||
m_NextHit = DateTime.UtcNow + TimeSpan.FromSeconds( m_HitDelay );
|
||||
|
||||
m_Count = (int)spiritLevel;
|
||||
|
||||
|
|
@ -167,7 +167,7 @@ namespace Server.Spells.Necromancy
|
|||
Stop();
|
||||
}
|
||||
|
||||
if ( !m_Target.Alive || DateTime.Now < m_NextHit )
|
||||
if ( !m_Target.Alive || DateTime.UtcNow < m_NextHit )
|
||||
return;
|
||||
|
||||
--m_Count;
|
||||
|
|
@ -197,7 +197,7 @@ namespace Server.Spells.Necromancy
|
|||
}
|
||||
else
|
||||
{
|
||||
m_NextHit = DateTime.Now + TimeSpan.FromSeconds( m_HitDelay );
|
||||
m_NextHit = DateTime.UtcNow + TimeSpan.FromSeconds( m_HitDelay );
|
||||
|
||||
double damage = m_MinBaseDamage + (Utility.RandomDouble() * (m_MaxBaseDamage - m_MinBaseDamage));
|
||||
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ namespace Server.Spells.Ninjitsu
|
|||
|
||||
private bool CasterIsMoving()
|
||||
{
|
||||
return (DateTime.Now - Caster.LastMoveTime <= Caster.ComputeMovementSpeed(Caster.Direction));
|
||||
return (Core.TickCount - Caster.LastMoveTime <= Caster.ComputeMovementSpeed(Caster.Direction));
|
||||
}
|
||||
|
||||
private bool m_WasMoving;
|
||||
|
|
|
|||
|
|
@ -169,7 +169,7 @@ namespace Server.Mobiles
|
|||
TimeSpan duration = TimeSpan.FromSeconds( 30 + caster.Skills.Ninjitsu.Fixed / 40 );
|
||||
|
||||
new UnsummonTimer( caster, this, duration ).Start();
|
||||
SummonEnd = DateTime.Now + duration;
|
||||
SummonEnd = DateTime.UtcNow + duration;
|
||||
|
||||
MirrorImage.AddClone( m_Caster );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ namespace Server.Spells.Sixth
|
|||
m_Timer = new InternalTimer( this, duration );
|
||||
m_Timer.Start();
|
||||
|
||||
m_End = DateTime.Now + duration;
|
||||
m_End = DateTime.UtcNow + duration;
|
||||
}
|
||||
|
||||
public override void OnAfterDelete()
|
||||
|
|
@ -150,7 +150,7 @@ namespace Server.Spells.Sixth
|
|||
m_Caster = reader.ReadMobile();
|
||||
m_End = reader.ReadDeltaTime();
|
||||
|
||||
m_Timer = new InternalTimer( this, m_End - DateTime.Now );
|
||||
m_Timer = new InternalTimer( this, m_End - DateTime.UtcNow );
|
||||
m_Timer.Start();
|
||||
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -155,7 +155,7 @@ namespace Server.Spells.Spellweaving
|
|||
{
|
||||
to.SendLocalizedMessage( 1072828 ); // Your arcane focus is renewed.
|
||||
focus.LifeSpan = duration;
|
||||
focus.CreationTime = DateTime.Now;
|
||||
focus.CreationTime = DateTime.UtcNow;
|
||||
focus.StrengthBonus = strengthBonus;
|
||||
focus.InvalidateProperties();
|
||||
focus.SendTimeRemainingMessage( to );
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ namespace Server.Spells.Spellweaving
|
|||
public override void DoFizzle()
|
||||
{
|
||||
Caster.PlaySound( 0x1D6 );
|
||||
Caster.NextSpellTime = DateTime.Now;
|
||||
Caster.NextSpellTime = Core.TickCount;
|
||||
}
|
||||
|
||||
public override void DoHurtFizzle()
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ namespace Server.Items
|
|||
|
||||
public virtual void CheckExpiry()
|
||||
{
|
||||
if( (m_CreationTime + m_LifeSpan) < DateTime.Now )
|
||||
if( (m_CreationTime + m_LifeSpan) < DateTime.UtcNow )
|
||||
Expire( RootParent as Mobile );
|
||||
else
|
||||
InvalidateProperties();
|
||||
|
|
@ -74,7 +74,7 @@ namespace Server.Items
|
|||
public TransientItem( int itemID, TimeSpan lifeSpan )
|
||||
: base( itemID )
|
||||
{
|
||||
m_CreationTime = DateTime.Now;
|
||||
m_CreationTime = DateTime.UtcNow;
|
||||
m_LifeSpan = lifeSpan;
|
||||
|
||||
m_Timer = Timer.DelayCall( TimeSpan.FromSeconds( 5 ), TimeSpan.FromSeconds( 5 ), new TimerCallback( CheckExpiry ) );
|
||||
|
|
@ -89,7 +89,7 @@ namespace Server.Items
|
|||
{
|
||||
base.GetProperties( list );
|
||||
|
||||
TimeSpan remaining = ((m_CreationTime + m_LifeSpan) - DateTime.Now);
|
||||
TimeSpan remaining = ((m_CreationTime + m_LifeSpan) - DateTime.UtcNow);
|
||||
|
||||
list.Add( 1072517, ((int)remaining.TotalSeconds).ToString() ); // Lifespan: ~1_val~ seconds
|
||||
}
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ namespace Server.Spells.Third
|
|||
m_Timer = new InternalTimer( this, TimeSpan.FromSeconds( 10.0 ) );
|
||||
m_Timer.Start();
|
||||
|
||||
m_End = DateTime.Now + TimeSpan.FromSeconds( 10.0 );
|
||||
m_End = DateTime.UtcNow + TimeSpan.FromSeconds( 10.0 );
|
||||
}
|
||||
|
||||
public InternalItem( Serial serial ) : base( serial )
|
||||
|
|
@ -145,7 +145,7 @@ namespace Server.Spells.Third
|
|||
{
|
||||
m_End = reader.ReadDeltaTime();
|
||||
|
||||
m_Timer = new InternalTimer( this, m_End - DateTime.Now );
|
||||
m_Timer = new InternalTimer( this, m_End - DateTime.UtcNow );
|
||||
m_Timer.Start();
|
||||
|
||||
break;
|
||||
|
|
@ -157,7 +157,7 @@ namespace Server.Spells.Third
|
|||
m_Timer = new InternalTimer( this, duration );
|
||||
m_Timer.Start();
|
||||
|
||||
m_End = DateTime.Now + duration;
|
||||
m_End = DateTime.UtcNow + duration;
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue