///Safe Trash Backpack v0.2 ///Idea by Jutt ///created by Daat99 31/01/2005 ///Thanx for forum support to: ///Phantom, XxSP1DERxX, jjarmis ///Thanx for Sirens Song for pointing a major possible exploit. using System; using System.Collections; using Server.Multis; namespace Server.Items { public class SafeTrashBackpack : Container { public override int MaxWeight{ get{ return 0; } } // A value of 0 signals unlimited weight public override int DefaultGumpID{ get{ return 0x76; } } public override int DefaultDropSound{ get{ return 0x50; } } private DateTime m_LastTrash; public DateTime LastTrash{ get{ return m_LastTrash; } set{ m_LastTrash = value; } } public override Rectangle2D Bounds { get{ return new Rectangle2D( 18, 105, 144, 73 ); } } public override bool CanStore( Mobile m ) { return true; } [Constructable] public SafeTrashBackpack() : base( 0x9b2 ) { Name = "A Safe Trash Backpack"; Movable = true; Hue = 1266; LootType = LootType.Blessed; } public override bool OnDragDrop( Mobile from, Item dropped ) { ArrayList items = this.Items; if ( items.Count > 0 && m_LastTrash <= DateTime.Now) { Empty(from); from.SendMessage("3 minutes safety was over clearing trash before adding more"); } TotalWeight = 0; if ( !base.OnDragDrop( from, dropped ) ) return false; m_LastTrash = (DateTime.Now + TimeSpan.FromMinutes( 3 )); return true; } public override bool OnDragDropInto( Mobile from, Item item, Point3D p ) { ArrayList items = this.Items; if ( items.Count > 0 && m_LastTrash <= DateTime.Now) { Empty(from); from.SendMessage("3 minutes safety was over clearing trash before adding more"); } TotalWeight = 0; if ( !base.OnDragDropInto( from, item, p ) ) return false; m_LastTrash = (DateTime.Now + TimeSpan.FromMinutes( 3 )); return true; } public override void OnDoubleClick( Mobile from ) { ArrayList items = this.Items; if ( items.Count > 0 && m_LastTrash <= DateTime.Now) { Empty(from); from.SendMessage("The 3 minutes safety was over, you can not recover the items."); } else base.OnDoubleClick(from); } public override void OnItemRemoved( Item item ) { if (m_LastTrash <= DateTime.Now) { item.Delete(); Empty(); } else base.OnItemRemoved( item ); TotalWeight = 0; } public override void UpdateTotals() { base.UpdateTotals(); SetTotalWeight( 0 ); } public override void OnItemAdded( Item item ) { base.OnItemAdded( item ); TotalWeight = 0; } public void Empty(Mobile from) { ArrayList items = this.Items; if ( items.Count > 0 ) { from.PlaySound(0x76); for ( int i = items.Count - 1; i >= 0; --i ) { if ( i >= items.Count ) continue; ((Item)items[i]).Delete(); } } } public void Empty() { ArrayList items = this.Items; if ( items.Count > 0 ) { Mobile from = RootParent as Mobile; if (from != null) { from.SendMessage( "You passed the 3 minutes safety, you can't recover the items." ); from.PlaySound(1074); //no } for ( int i = items.Count - 1; i >= 0; --i ) { if ( i >= items.Count ) continue; ((Item)items[i]).Delete(); } } } public override void GetContextMenuEntries( Mobile from, ArrayList list ) { base.GetContextMenuEntries( from, list ); ArrayList items = this.Items; if ( items.Count > 0 ) { list.Add( new ContextMenus.EmptySafeTrashBackpack( from, this ) ); } } public SafeTrashBackpack( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); m_LastTrash = DateTime.Now; } } } namespace Server.ContextMenus { public class EmptySafeTrashBackpack : ContextMenuEntry { private Mobile m_From; private Item m_Item; public EmptySafeTrashBackpack( Mobile from, Item item ) : base( 0154, 5 ) { m_From = from; m_Item = item; } public override void OnClick() { ArrayList items = m_Item.Items; if ( items.Count > 0 ) { m_From.SendMessage( "Emptying trash backpack" ); m_From.PlaySound(0x76); for ( int i = items.Count - 1; i >= 0; --i ) { if ( i >= items.Count ) continue; ((Item)items[i]).Delete(); } } } } }