diff --git a/Scripts/Mobiles/AI/BaseAI.cs b/Scripts/Mobiles/AI/BaseAI.cs index 889a8372a..2f7298e1a 100644 --- a/Scripts/Mobiles/AI/BaseAI.cs +++ b/Scripts/Mobiles/AI/BaseAI.cs @@ -45,7 +45,7 @@ namespace Server.Mobiles { public Timer m_Timer; protected ActionType m_Action; - private DateTime m_NextStopGuard; + private int m_NextStopGuard; public BaseCreature m_Mobile; @@ -830,7 +830,7 @@ namespace Server.Mobiles m_Mobile.FocusMob = null; m_Mobile.Combatant = null; m_Mobile.CurrentSpeed = m_Mobile.ActiveSpeed; - m_NextStopGuard = DateTime.UtcNow + TimeSpan.FromSeconds(10); + m_NextStopGuard = Core.TickCount + (int)TimeSpan.FromSeconds(10).TotalMilliseconds; m_Mobile.CurrentSpeed = m_Mobile.ActiveSpeed; break; @@ -928,7 +928,7 @@ namespace Server.Mobiles { m_Mobile.DebugSay("Praise the shepherd!"); } - else if (DateTime.UtcNow < m_NextStopGuard) + else if (Core.TickCount - m_NextStopGuard < 0) { m_Mobile.DebugSay("I am on guard"); //m_Mobile.Turn( Utility.Random(0, 2) - 1 ); @@ -2718,7 +2718,7 @@ namespace Server.Mobiles m_Timer.Start(); } - private DateTime m_NextDetectHidden; + private int m_NextDetectHidden; public virtual bool CanDetectHidden { get { return m_Mobile.Skills[SkillName.DetectHidden].Value > 0; } } @@ -2734,7 +2734,7 @@ namespace Server.Mobiles { m_Owner = owner; - m_Owner.m_NextDetectHidden = DateTime.UtcNow; + m_Owner.m_NextDetectHidden = Core.TickCount; Priority = TimerPriority.FiftyMS; } @@ -2802,7 +2802,7 @@ namespace Server.Mobiles } } - if (m_Owner.CanDetectHidden && DateTime.UtcNow > m_Owner.m_NextDetectHidden) + if (m_Owner.CanDetectHidden && Core.TickCount - m_Owner.m_NextDetectHidden >= 0) { 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.UtcNow + TimeSpan.FromSeconds(Utility.RandomMinMax(min, max)); + m_Owner.m_NextDetectHidden = Core.TickCount + (int)TimeSpan.FromSeconds(Utility.RandomMinMax(min, max)).TotalMilliseconds; } } } diff --git a/Scripts/Mobiles/AI/MageAI.cs b/Scripts/Mobiles/AI/MageAI.cs index 7fee5549f..14dc3c651 100644 --- a/Scripts/Mobiles/AI/MageAI.cs +++ b/Scripts/Mobiles/AI/MageAI.cs @@ -15,8 +15,8 @@ namespace Server.Mobiles { public class MageAI : BaseAI { - private DateTime m_NextCastTime; - private DateTime m_NextHealTime; + private int m_NextCastTime; + private int m_NextHealTime; public MageAI( BaseCreature m ) : base( m ) @@ -61,7 +61,7 @@ namespace Server.Mobiles m_Mobile.Combatant = m_Mobile.FocusMob; Action = ActionType.Combat; - m_NextCastTime = DateTime.UtcNow; + m_NextCastTime = Core.TickCount; } 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.UtcNow < m_NextHealTime ) + if (Core.TickCount - m_NextHealTime < 0) return null; } @@ -144,7 +144,7 @@ namespace Server.Mobiles else delay = Math.Sqrt( 600 - m_Mobile.Int ); - m_NextHealTime = DateTime.UtcNow + TimeSpan.FromSeconds( delay ); + m_NextHealTime = Core.TickCount + (int)TimeSpan.FromSeconds(delay).TotalMilliseconds; return spell; } @@ -664,7 +664,7 @@ namespace Server.Mobiles } } - if( m_Mobile.Spell == null && DateTime.UtcNow > m_NextCastTime && m_Mobile.InRange( c, Core.ML ? 10 : 12 ) ) + if (m_Mobile.Spell == null && Core.TickCount - m_NextCastTime >= 0 && 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.UtcNow + GetDelay( spell ); + m_NextCastTime = Core.TickCount + (int)GetDelay(spell).TotalMilliseconds; } 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.UtcNow > m_NextCastTime ) + else if( m_Mobile.Spell == null && Core.TickCount - m_NextCastTime >= 0 ) { 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.UtcNow + GetDelay( spell ); + m_NextCastTime = Core.TickCount + (int)GetDelay(spell).TotalMilliseconds; } } diff --git a/Scripts/Mobiles/BaseCreature.cs b/Scripts/Mobiles/BaseCreature.cs index f6660c43f..57e91dc77 100644 --- a/Scripts/Mobiles/BaseCreature.cs +++ b/Scripts/Mobiles/BaseCreature.cs @@ -616,7 +616,7 @@ namespace Server.Mobiles public virtual bool DisplayWeight{ get{ return Backpack is StrongBackpack; } } #region Breath ability, like dragon fire breath - private DateTime m_NextBreathTime; + private int m_NextBreathTime; // Must be overriden in subclass to enable public virtual bool HasBreath{ get{ return false; } } @@ -5152,7 +5152,7 @@ namespace Server.Mobiles private const double MinutesToNextChanceMin = 0.25; private const double MinutesToNextChanceMax = 0.75; - private DateTime m_NextRummageTime; + private int m_NextRummageTime; public virtual bool CanBreath { get { return HasBreath && !Summoned; } } public virtual bool IsDispellable { get { return Summoned && !IsAnimatedDead; } } @@ -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.UtcNow; - private DateTime m_NextHealOwnerTime = DateTime.UtcNow; + private int m_NextHealTime = Core.TickCount; + private int m_NextHealOwnerTime = Core.TickCount; private Timer m_HealTimer = null; public bool IsHealing { get { return ( m_HealTimer != null ); } } @@ -5292,7 +5292,7 @@ namespace Server.Mobiles #endregion #region Damaging Aura - private DateTime m_NextAura; + private int m_NextAura; public virtual bool HasAura { get { return false; } } public virtual TimeSpan AuraInterval { get { return TimeSpan.FromSeconds( 5 ); } } @@ -5345,7 +5345,9 @@ namespace Server.Mobiles public virtual void OnThink() { - if ( EnableRummaging && CanRummageCorpses && !Summoned && !Controlled && DateTime.UtcNow >= m_NextRummageTime ) + int tc = Core.TickCount; + + if ( EnableRummaging && CanRummageCorpses && !Summoned && !Controlled && tc - m_NextRummageTime >= 0 ) { double min, max; @@ -5361,21 +5363,21 @@ namespace Server.Mobiles } double delay = min + (Utility.RandomDouble() * (max - min)); - m_NextRummageTime = DateTime.UtcNow + TimeSpan.FromMinutes( delay ); + m_NextRummageTime = tc + (int)TimeSpan.FromMinutes(delay).TotalMilliseconds; } - if ( CanBreath && DateTime.UtcNow >= m_NextBreathTime ) // tested: controlled dragons do breath fire, what about summoned skeletal dragons? + if ( CanBreath && tc - m_NextBreathTime >= 0 ) // 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.UtcNow - m_NextBreathTime ) < TimeSpan.FromSeconds( 30 ) && Utility.RandomBool() ) + if( ( Core.TickCount - m_NextBreathTime ) < 30000 && Utility.RandomBool() ) { BreathStart( target ); } - m_NextBreathTime = DateTime.UtcNow + TimeSpan.FromSeconds( BreathMinDelay + ( ( Utility.RandomDouble( ) * ( BreathMaxDelay - BreathMinDelay ) ) ) ); + m_NextBreathTime = tc + (int)TimeSpan.FromSeconds( BreathMinDelay + ( ( Utility.RandomDouble( ) * ( BreathMaxDelay - BreathMinDelay ) ) ) ).TotalMilliseconds; } } @@ -5383,17 +5385,17 @@ namespace Server.Mobiles { Mobile owner = this.ControlMaster; - 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 ) + if ( owner != null && CanHealOwner && tc - m_NextHealOwnerTime >= 0 && CanBeBeneficial( owner, true, true ) && owner.Map == this.Map && InRange( owner, HealStartRange ) && InLOS( owner ) && owner.Hits < HealOwnerTrigger * owner.HitsMax ) { HealStart( owner ); - m_NextHealOwnerTime = DateTime.UtcNow + TimeSpan.FromSeconds( HealOwnerInterval ); + m_NextHealOwnerTime = tc + (int)TimeSpan.FromSeconds( HealOwnerInterval ).TotalMilliseconds; } - else if ( CanHeal && DateTime.UtcNow >= m_NextHealTime && CanBeBeneficial( this ) && ( Hits < HealTrigger * HitsMax || Poisoned ) ) + else if ( CanHeal && tc - m_NextHealTime >= 0 && CanBeBeneficial( this ) && ( Hits < HealTrigger * HitsMax || Poisoned ) ) { HealStart( this ); - m_NextHealTime = DateTime.UtcNow + TimeSpan.FromSeconds( HealInterval ); + m_NextHealTime = tc + (int)TimeSpan.FromSeconds( HealInterval ).TotalMilliseconds; } } @@ -5416,10 +5418,10 @@ namespace Server.Mobiles m_FailedReturnHome = 0; } - if ( HasAura && DateTime.UtcNow >= m_NextAura ) + if ( HasAura && tc - m_NextAura >= 0 ) { AuraDamage(); - m_NextAura = DateTime.UtcNow + AuraInterval; + m_NextAura = tc + (int)AuraInterval.TotalMilliseconds; } }