diff --git a/Scripts/Accounting/Account.cs b/Scripts/Accounting/Account.cs index c001dc032..c7e614ba2 100644 --- a/Scripts/Accounting/Account.cs +++ b/Scripts/Accounting/Account.cs @@ -19,6 +19,8 @@ namespace Server.Accounting public static readonly TimeSpan YoungDuration = TimeSpan.FromHours( 40.0 ); public static readonly TimeSpan InactiveDuration = TimeSpan.FromDays( 180.0 ); + + public static readonly TimeSpan EmptyInactiveDuration = TimeSpan.FromDays( 30.0 ); private string m_Username, m_PlainPassword, m_CryptPassword, m_NewCryptPassword; private AccessLevel m_AccessLevel; @@ -221,11 +223,19 @@ namespace Server.Accounting } /// - /// An account is considered inactive based upon LastLogin and InactiveDuration + /// An account is considered inactive based upon LastLogin and InactiveDuration. If the account is empty, it is based upon EmptyInactiveDuration /// public bool Inactive { - get { return ( ( m_LastLogin + InactiveDuration ) <= DateTime.Now && AccessLevel == AccessLevel.Player ); } + get + { + if( this.AccessLevel != AccessLevel.Player ) + return false; + + TimeSpan inactiveLength = DateTime.Now - m_LastLogin; + + return (inactiveLength > ((this.Count == 0) ? EmptyInactiveDuration : InactiveDuration)); + } } /// diff --git a/Scripts/Commands/Profiling.cs b/Scripts/Commands/Profiling.cs index 554efef09..bfd821eda 100644 --- a/Scripts/Commands/Profiling.cs +++ b/Scripts/Commands/Profiling.cs @@ -210,7 +210,7 @@ namespace Server.Commands int[] countTable = typeTable[itemType] as int[]; if ( countTable == null ) - typeTable[itemType] = countTable = new int[8]; + typeTable[itemType] = countTable = new int[9]; if ( ( flags & ExpandFlag.Name ) != 0 ) ++countTable[0]; @@ -236,6 +236,9 @@ namespace Server.Commands if ( ( flags & ExpandFlag.Weight ) != 0 ) ++countTable[7]; + if ((flags & ExpandFlag.Spawner) != 0) + ++countTable[8]; + itemType = itemType.BaseType; } while ( itemType != typeof( object ) ); } @@ -253,7 +256,8 @@ namespace Server.Commands "Blessed", "TempFlag", "SaveFlag", - "Weight" + "Weight", + "Spawner" }; ArrayList list = new ArrayList( typeTable ); diff --git a/Server/Item.cs b/Server/Item.cs index a85ec7742..0cf951aa6 100644 --- a/Server/Item.cs +++ b/Server/Item.cs @@ -547,16 +547,17 @@ namespace Server [Flags] public enum ExpandFlag { - None = 0x00, + None = 0x000, - Name = 0x01, - Items = 0x02, - Bounce = 0x04, - Holder = 0x08, - Blessed = 0x10, - TempFlag = 0x20, - SaveFlag = 0x40, - Weight = 0x80 + Name = 0x001, + Items = 0x002, + Bounce = 0x004, + Holder = 0x008, + Blessed = 0x010, + TempFlag = 0x020, + SaveFlag = 0x040, + Weight = 0x080, + Spawner = 0x100 } public class Item : IEntity, IHued, IComparable, ISerializable, ISpawnable @@ -704,6 +705,8 @@ namespace Server public Mobile m_HeldBy; public Mobile m_BlessedFor; + public ISpawner m_Spawner; + public int m_TempFlags; public int m_SavedFlags; @@ -735,6 +738,9 @@ namespace Server if ( info.m_Name != null ) flags |= ExpandFlag.Name; + if (info.m_Spawner != null) + flags |= ExpandFlag.Spawner; + if ( info.m_SavedFlags != 0 ) flags |= ExpandFlag.SaveFlag; @@ -778,6 +784,7 @@ namespace Server || ( info.m_Bounce != null ) || ( info.m_HeldBy != null ) || ( info.m_BlessedFor != null ) + || ( info.m_Spawner != null ) || ( info.m_TempFlags != 0 ) || ( info.m_SavedFlags != 0 ) || ( info.m_Weight != -1 ); @@ -3263,10 +3270,10 @@ namespace Server public virtual void OnDelete() { - if ( m_Spawner != null ) + if (this.Spawner != null) { - m_Spawner.Remove( this ); - m_Spawner = null; + this.Spawner.Remove(this); + this.Spawner = null; } } @@ -3438,10 +3445,28 @@ namespace Server return true; } - //TODO: Move to CompactInfo. - private ISpawner m_Spawner; + public ISpawner Spawner + { + get + { + CompactInfo info = LookupCompactInfo(); - public ISpawner Spawner{ get{ return m_Spawner; } set{ m_Spawner = value; } } + if (info != null) + return info.m_Spawner; + + return null; + + } + set + { + CompactInfo info = AcquireCompactInfo(); + + info.m_Spawner = value; + + if (info.m_Spawner == null) + VerifyCompactInfo(); + } + } public virtual void OnBeforeSpawn( Point3D location, Map m ) { diff --git a/Server/Mobile.cs b/Server/Mobile.cs index 695f6ecdd..ed299867c 100644 --- a/Server/Mobile.cs +++ b/Server/Mobile.cs @@ -8094,7 +8094,7 @@ namespace Server } } - item.Delete(); + Timer.DelayCall( TimeSpan.Zero, delegate { item.Delete(); } ); } } diff --git a/Server/World.cs b/Server/World.cs index f3f69ef0a..368967a4b 100644 --- a/Server/World.cs +++ b/Server/World.cs @@ -70,7 +70,7 @@ namespace Server { { if( m_DiskWriteHandle.Set()) { - Console.WriteLine("Closing Save Files..."); + Console.WriteLine("Closing Save Files. "); } }