- Tamable released creatures will now have a timer of 3 days: when the timer is over, the creature will be deleted.

The timer will stop when the creature is tamed again, and reset to 3 days when released again.
This is meant to reduce CPU work by reducing the number of creatures which need serialization
(http://www.uodemise.com/discussion/showthread.php?t=133920)
This commit is contained in:
daedalus 2010-02-06 11:14:32 +00:00
parent ba8f9ebf40
commit bab1490105
2 changed files with 73 additions and 1 deletions

View file

@ -1545,6 +1545,8 @@ namespace Server.Mobiles
if( m_Mobile.DeleteOnRelease || m_Mobile.IsDeadPet )
m_Mobile.Delete();
m_Mobile.BeginDeleteTimer();
return true;
}

View file

@ -329,6 +329,47 @@ namespace Server.Mobiles
set{ m_OwnerAbandonTime = value; }
}
#endregion
#region Delete Previously Tamed Timer
private DeleteTimer m_DeleteTimer;
[CommandProperty( AccessLevel.GameMaster )]
public TimeSpan DeleteTimeLeft
{
get
{
if ( m_DeleteTimer != null && m_DeleteTimer.Running )
return m_DeleteTimer.Next - DateTime.Now;
return TimeSpan.Zero;
}
}
private class DeleteTimer : Timer
{
private Mobile m;
public DeleteTimer( Mobile creature, TimeSpan delay ) : base( delay )
{
m = creature;
Priority = TimerPriority.OneMinute;
}
protected override void OnTick()
{
m.Delete();
}
}
public void BeginDeleteTimer()
{
if ( !(this is BaseEscortable) && !Summoned && !Deleted )
{
m_DeleteTimer = new DeleteTimer( this, TimeSpan.FromDays( 3.0 ) );
m_DeleteTimer.Start();
}
}
#endregion
public virtual double WeaponAbilityChance{ get{ return 0.4; } }
@ -1467,7 +1508,7 @@ namespace Server.Mobiles
{
base.Serialize( writer );
writer.Write( (int) 16 ); // version
writer.Write( (int) 17 ); // version
writer.Write( (int)m_CurrentAI );
writer.Write( (int)m_DefaultAI );
@ -1577,6 +1618,9 @@ namespace Server.Mobiles
// Version 14
writer.Write( (bool)m_RemoveIfUntamed );
writer.Write( (int)m_RemoveStep );
// Version 17
writer.Write( DeleteTimeLeft );
}
private static double[] m_StandardActiveSpeeds = new double[]
@ -1783,6 +1827,20 @@ namespace Server.Mobiles
m_RemoveIfUntamed = reader.ReadBool();
m_RemoveStep = reader.ReadInt();
}
TimeSpan deleteTime = TimeSpan.Zero;
if ( version >= 17 )
deleteTime = reader.ReadTimeSpan();
if ( deleteTime > TimeSpan.Zero || LastOwner != null && !Controlled && !IsStabled )
{
if ( deleteTime == TimeSpan.Zero )
deleteTime = TimeSpan.FromDays( 3.0 );
m_DeleteTimer = new DeleteTimer( this, deleteTime );
m_DeleteTimer.Start();
}
if( version <= 14 && m_Paragon && Hue == 0x31 )
{
@ -2648,6 +2706,12 @@ namespace Server.Mobiles
m_AI = null;
}
if ( m_DeleteTimer != null )
{
m_DeleteTimer.Stop();
m_DeleteTimer = null;
}
FocusMob = null;
@ -4558,6 +4622,12 @@ namespace Server.Mobiles
ControlTarget = null;
ControlOrder = OrderType.Come;
Guild = null;
if ( m_DeleteTimer != null )
{
m_DeleteTimer.Stop();
m_DeleteTimer = null;
}
Delta( MobileDelta.Noto );
}