- 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:
parent
ba8f9ebf40
commit
bab1490105
2 changed files with 73 additions and 1 deletions
|
|
@ -1545,6 +1545,8 @@ namespace Server.Mobiles
|
|||
|
||||
if( m_Mobile.DeleteOnRelease || m_Mobile.IsDeadPet )
|
||||
m_Mobile.Delete();
|
||||
|
||||
m_Mobile.BeginDeleteTimer();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue