public void Empty() { List <Item> items = Items; if (items.Count > 0) { for (int i = items.Count - 1; i >= 0; --i) { if (i >= items.Count) { continue; } ConfirmCleanupItem(items[i]); #region SA if (Core.SA) { if (Core.SA && .01 > Utility.RandomDouble()) { TrashBarrel.DropToCavernOfDiscarded(items[i]); } else { items[i].Delete(); } } #endregion } if (m_Cleanup.Any(x => x.mobiles != null)) { foreach (var m in m_Cleanup.Select(x => x.mobiles).Distinct()) { if (m_Cleanup.Find(x => x.mobiles == m && x.confirm) != null) { double point = m_Cleanup.Where(x => x.mobiles == m && x.confirm).Sum(x => x.points); m.SendLocalizedMessage(1151280, $"{point.ToString()}\t{m_Cleanup.Count(r => r.mobiles == m)}"); // You have received approximately ~1_VALUE~points for turning in ~2_COUNT~items for Clean Up Britannia. PointsSystem.CleanUpBritannia.AwardPoints(m, point); } } m_Cleanup.Clear(); } } }
public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); int count; switch ( version ) { case 14: { m_RelativeBanLocation = reader.ReadPoint3D(); goto case 13; } case 13: // removed ban location serialization case 12: { m_VendorRentalContracts = reader.ReadItemList(); m_InternalizedVendors = reader.ReadMobileList(); int relocatedCount = reader.ReadEncodedInt(); for ( int i = 0; i < relocatedCount; i++ ) { Point3D relLocation = reader.ReadPoint3D(); IEntity entity = World.FindEntity( reader.ReadInt() ); if ( entity != null ) m_RelocatedEntities.Add( new RelocatedEntity( entity, relLocation ) ); } int inventoryCount = reader.ReadEncodedInt(); for ( int i = 0; i < inventoryCount; i++ ) { VendorInventory inventory = new VendorInventory( this, reader ); m_VendorInventories.Add( inventory ); } goto case 11; } case 11: { m_LastRefreshed = reader.ReadDateTime(); m_RestrictDecay = reader.ReadBool(); goto case 10; } case 10: // just a signal for updates case 9: { m_Visits = reader.ReadInt(); goto case 8; } case 8: { m_Price = reader.ReadInt(); goto case 7; } case 7: { m_Access = reader.ReadMobileList(); goto case 6; } case 6: { m_BuiltOn = reader.ReadDateTime(); m_LastTraded = reader.ReadDateTime(); goto case 5; } case 5: // just removed fields case 4: { m_Addons = reader.ReadItemList(); goto case 3; } case 3: { count = reader.ReadInt(); m_Secures = new ArrayList( count ); for ( int i = 0; i < count; ++i ) { SecureInfo info = new SecureInfo( reader ); if ( info.Item != null ) { info.Item.IsSecure = true; m_Secures.Add( info ); } } goto case 2; } case 2: { m_Public = reader.ReadBool(); goto case 1; } case 1: { if ( version < 13 ) reader.ReadPoint3D(); // house ban location goto case 0; } case 0: { if ( version < 14 ) m_RelativeBanLocation = this.BaseBanLocation; if ( version < 12 ) { m_VendorRentalContracts = new ArrayList(); m_InternalizedVendors = new ArrayList(); } if ( version < 4 ) m_Addons = new ArrayList(); if ( version < 7 ) m_Access = new ArrayList(); if ( version < 8 ) m_Price = DefaultPrice; m_Owner = reader.ReadMobile(); if ( version < 5 ) { count = reader.ReadInt(); for(int i=0;i<count;i++) reader.ReadRect2D(); } UpdateRegion(); m_CoOwners = reader.ReadMobileList(); m_Friends = reader.ReadMobileList(); m_Bans = reader.ReadMobileList(); m_Sign = reader.ReadItem() as HouseSign; m_Trash = reader.ReadItem() as TrashBarrel; m_Doors = reader.ReadItemList(); m_LockDowns = reader.ReadItemList(); for ( int i = 0; i < m_LockDowns.Count; ++i ) ((Item)m_LockDowns[i]).IsLockedDown = true; for ( int i = 0; i < m_VendorRentalContracts.Count; ++i ) ((Item)m_VendorRentalContracts[i]).IsLockedDown = true; if ( version < 3 ) { ArrayList items = reader.ReadItemList(); m_Secures = new ArrayList( items.Count ); for ( int i = 0; i < items.Count; ++i ) { Container c = items[i] as Container; if ( c != null ) { c.IsSecure = true; m_Secures.Add( new SecureInfo( c, SecureLevel.CoOwners ) ); } } } m_MaxLockDowns = reader.ReadInt(); m_MaxSecures = reader.ReadInt(); if ( (Map == null || Map == Map.Internal) && Location == Point3D.Zero ) Delete(); if ( m_Owner != null ) { List<BaseHouse> list = null; m_Table.TryGetValue( m_Owner, out list ); if ( list == null ) m_Table[m_Owner] = list = new List<BaseHouse>(); list.Add( this ); } break; } } if ( version <= 1 ) ChangeSignType( 0xBD2 );//private house, plain brass sign if ( version < 10 ) { /* NOTE: This can exceed the house lockdown limit. It must be this way, because * we do not want players' items to decay without them knowing. Or not even * having a chance to fix it themselves. */ Timer.DelayCall( TimeSpan.Zero, new TimerCallback( FixLockdowns_Sandbox ) ); } if ( version < 11 ) m_LastRefreshed = DateTime.Now + TimeSpan.FromHours( 24 * Utility.RandomDouble() ); if ( !CheckDecay() ) { if ( RelocatedEntities.Count > 0 ) Timer.DelayCall( TimeSpan.Zero, new TimerCallback( RestoreRelocatedEntities ) ); if ( m_Owner == null && m_Friends.Count == 0 && m_CoOwners.Count == 0 ) Timer.DelayCall( TimeSpan.FromSeconds( 10.0 ), new TimerCallback( Delete ) ); } }
public void AddTrashBarrel( Mobile from ) { if ( !IsActive ) return; for ( int i = 0; m_Doors != null && i < m_Doors.Count; ++i ) { BaseDoor door = m_Doors[i] as BaseDoor; Point3D p = door.Location; if ( door.Open ) p = new Point3D( p.X - door.Offset.X, p.Y - door.Offset.Y, p.Z - door.Offset.Z ); if ( (from.Z + 16) >= p.Z && (p.Z + 16) >= from.Z ) { if ( from.InRange( p, 1 ) ) { from.SendLocalizedMessage( 502120 ); // You cannot place a trash barrel near a door or near steps. return; } } } if ( m_Trash == null || m_Trash.Deleted ) { m_Trash = new TrashBarrel(); m_Trash.Movable = false; m_Trash.MoveToWorld( from.Location, from.Map ); from.SendLocalizedMessage( 502121 ); /* You have a new trash barrel. * Three minutes after you put something in the barrel, the trash will be emptied. * Be forewarned, this is permanent! */ } else { m_Trash.MoveToWorld( from.Location, from.Map ); } }
public EmptyTimer( TrashBarrel barrel ) : base(TimeSpan.FromMinutes( 3.0 )) { m_Barrel = barrel; Priority = TimerPriority.FiveSeconds; }
public EmptyTimer(TrashBarrel barrel) : base(TimeSpan.FromMinutes(3.0)) { this.m_Barrel = barrel; this.Priority = TimerPriority.FiveSeconds; }
public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); m_Region = new HouseRegion( this ); switch ( version ) { case 0: { m_KeyValue = reader.ReadUInt(); m_Visits = reader.ReadInt(); m_Price = reader.ReadInt(); m_BuiltOn = reader.ReadDateTime(); m_LastTraded = reader.ReadDateTime(); m_Public = reader.ReadBool(); m_Region.GoLocation = reader.ReadPoint3D(); if ( version < 8 ) m_Price = DefaultPrice; m_Owner = reader.ReadMobile(); UpdateRegionArea(); Region.AddRegion( m_Region ); m_Sign = reader.ReadItem() as HouseSign; m_Trash = reader.ReadItem() as TrashBarrel; m_Doors = reader.ReadItemList(); m_Addons = reader.ReadItemList(); if ( (Map == null || Map == Map.Internal) && Location == Point3D.Zero ) Delete(); break; } } }
public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); int count; bool loadedDynamicDecay = false; switch (version) { case 16: { VendorMultiplier = reader.ReadDouble(); StorageMultiplier = reader.ReadDouble(); goto case 15; } case 15: { int stage = reader.ReadInt(); if (stage != -1) { m_CurrentStage = (DecayLevel) stage; m_NextDecayStage = reader.ReadDateTime(); loadedDynamicDecay = true; } goto case 14; } case 14: { m_RelativeBanLocation = reader.ReadPoint3D(); goto case 13; } case 13: // removed ban location serialization case 12: { m_VendorRentalContracts = reader.ReadStrongItemList(); m_InternalizedVendors = reader.ReadStrongMobileList(); int relocatedCount = reader.ReadEncodedInt(); for (int i = 0; i < relocatedCount; i++) { Point3D relLocation = reader.ReadPoint3D(); IEntity entity = World.FindEntity(reader.ReadInt()); // DO NOT READ ENTITY DIRECTLY, BECAUSE IF IT ISN'T IN THE WORLD (Item or Mobile) // then it creates a new one, which caused a problem previously //IEntity entity = reader.ReadEntity(); if (entity != null) { m_RelocatedEntities.Add(new RelocatedEntity(entity, relLocation)); } } int inventoryCount = reader.ReadEncodedInt(); for (int i = 0; i < inventoryCount; i++) { var inventory = new VendorInventory(this, reader); m_VendorInventories.Add(inventory); } goto case 11; } case 11: { m_LastRefreshed = reader.ReadDateTime(); m_RestrictDecay = reader.ReadBool(); goto case 10; } case 10: // just a signal for updates case 9: { m_Visits = reader.ReadInt(); goto case 8; } case 8: { m_Price = reader.ReadInt(); goto case 7; } case 7: { m_Access = reader.ReadStrongMobileList(); goto case 6; } case 6: { m_BuiltOn = reader.ReadDateTime(); m_LastTraded = reader.ReadDateTime(); goto case 5; } case 5: // just removed fields case 4: { m_Addons = reader.ReadStrongItemList(); goto case 3; } case 3: { count = reader.ReadInt(); m_Secures = new List<SecureInfo>(count); for (int i = 0; i < count; ++i) { var info = new SecureInfo(reader); if (info.Item != null) { info.Item.IsSecure = true; m_Secures.Add(info); } } goto case 2; } case 2: { m_Public = reader.ReadBool(); goto case 1; } case 1: { if (version < 13) { reader.ReadPoint3D(); // house ban location } goto case 0; } case 0: { if (version < 14) { m_RelativeBanLocation = BaseBanLocation; } if (version < 12) { m_VendorRentalContracts = new List<Item>(); m_InternalizedVendors = new List<Mobile>(); } if (version < 4) { m_Addons = new List<Item>(); } if (version < 7) { m_Access = new List<Mobile>(); } if (version < 8) { m_Price = DefaultPrice; } m_Owner = reader.ReadMobile(); if (version < 5) { count = reader.ReadInt(); for (int i = 0; i < count; i++) { reader.ReadRect2D(); } } UpdateRegion(); m_CoOwners = reader.ReadStrongMobileList(); m_Friends = reader.ReadStrongMobileList(); m_Bans = reader.ReadStrongMobileList(); m_Sign = reader.ReadItem() as HouseSign; m_Trash = reader.ReadItem() as TrashBarrel; m_Doors = reader.ReadStrongItemList<Item>(); m_LockDowns = reader.ReadStrongItemList(); for (int i = 0; i < m_LockDowns.Count; ++i) { m_LockDowns[i].IsLockedDown = true; } for (int i = 0; i < m_VendorRentalContracts.Count; ++i) { m_VendorRentalContracts[i].IsLockedDown = true; } if (version < 3) { List<Item> items = reader.ReadStrongItemList(); m_Secures = new List<SecureInfo>(items.Count); for (int i = 0; i < items.Count; ++i) { var c = items[i] as Container; if (c != null) { c.IsSecure = true; m_Secures.Add(new SecureInfo(c, SecureLevel.CoOwners)); } } } m_MaxLockDowns = reader.ReadInt(); m_MaxSecures = reader.ReadInt(); if ((Map == null || Map == Map.Internal) && Location == Point3D.Zero) { Delete(); } if (m_Owner != null) { List<BaseHouse> list = null; m_Table.TryGetValue(m_Owner, out list); if (list == null) { m_Table[m_Owner] = list = new List<BaseHouse>(); } list.Add(this); } break; } } if (version <= 1) { ChangeSignType(0xBD2); //private house, plain brass sign } if (version < 10) { /* NOTE: This can exceed the house lockdown limit. It must be this way, because * we do not want players' items to decay without them knowing. Or not even * having a chance to fix it themselves. */ Timer.DelayCall(TimeSpan.Zero, FixLockdowns_Sandbox); } if (version < 11) { m_LastRefreshed = DateTime.UtcNow + TimeSpan.FromHours(24 * Utility.RandomDouble()); } if (DynamicDecay.Enabled && !loadedDynamicDecay) { DecayLevel old = GetOldDecayLevel(); if (old == DecayLevel.DemolitionPending) { old = DecayLevel.Collapsed; } SetDynamicDecay(old); } if (!CheckDecay()) { if (RelocatedEntities.Count > 0) { Timer.DelayCall(TimeSpan.Zero, RestoreRelocatedEntities); } //if ( m_Owner == null && m_Friends.Count == 0 && m_CoOwners.Count == 0 ) // Timer.DelayCall( TimeSpan.FromSeconds( 10.0 ), new TimerCallback( Delete ) ); } }
public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); int count; m_Region = new HouseRegion( this ); switch ( version ) { case 12: { m_VendorRentalContracts = reader.ReadItemList(); m_InternalizedVendors = reader.ReadMobileList(); int relocatedCount = reader.ReadEncodedInt(); for ( int i = 0; i < relocatedCount; i++ ) { Point3D relLocation = reader.ReadPoint3D(); IEntity entity = World.FindEntity( reader.ReadInt() ); if ( entity != null ) m_RelocatedEntities.Add( new RelocatedEntity( entity, relLocation ) ); } int inventoryCount = reader.ReadEncodedInt(); for ( int i = 0; i < inventoryCount; i++ ) { VendorInventory inventory = new VendorInventory( this, reader ); m_VendorInventories.Add( inventory ); } goto case 11; } case 11: { m_LastRefreshed = reader.ReadDateTime(); m_RestrictDecay = reader.ReadBool(); goto case 10; } case 10: // just a signal for updates case 9: { m_Visits = reader.ReadInt(); goto case 8; } case 8: { m_Price = reader.ReadInt(); goto case 7; } case 7: { m_Access = reader.ReadMobileList(); goto case 6; } case 6: { m_BuiltOn = reader.ReadDateTime(); m_LastTraded = reader.ReadDateTime(); goto case 5; } case 5: // just removed fields case 4: { m_Addons = reader.ReadItemList(); goto case 3; } case 3: { count = reader.ReadInt(); m_Secures = new ArrayList( count ); for ( int i = 0; i < count; ++i ) { SecureInfo info = new SecureInfo( reader ); if ( info.Item != null ) { info.Item.IsSecure = true; m_Secures.Add( info ); } } goto case 2; } case 2: { m_Public = reader.ReadBool(); goto case 1; } case 1: { m_Region.GoLocation = reader.ReadPoint3D(); goto case 0; } case 0: { if ( version < 12 ) { m_VendorRentalContracts = new ArrayList(); m_InternalizedVendors = new ArrayList(); } if ( version < 4 ) m_Addons = new ArrayList(); if ( version < 7 ) m_Access = new ArrayList(); if ( version < 8 ) m_Price = DefaultPrice; m_Owner = reader.ReadMobile(); if ( version < 5 ) { count = reader.ReadInt(); for(int i=0;i<count;i++) reader.ReadRect2D(); } UpdateRegionArea(); Region.AddRegion( m_Region ); m_CoOwners = reader.ReadMobileList(); m_Friends = reader.ReadMobileList(); m_Bans = reader.ReadMobileList(); m_Sign = reader.ReadItem() as HouseSign; m_Trash = reader.ReadItem() as TrashBarrel; m_Doors = reader.ReadItemList(); m_LockDowns = reader.ReadItemList(); for ( int i = 0; i < m_LockDowns.Count; ++i ) ((Item)m_LockDowns[i]).IsLockedDown = true; for ( int i = 0; i < m_VendorRentalContracts.Count; ++i ) ((Item)m_VendorRentalContracts[i]).IsLockedDown = true; if ( version < 3 ) { ArrayList items = reader.ReadItemList(); m_Secures = new ArrayList( items.Count ); for ( int i = 0; i < items.Count; ++i ) { Container c = items[i] as Container; if ( c != null ) { c.IsSecure = true; m_Secures.Add( new SecureInfo( c, SecureLevel.CoOwners ) ); } } } m_MaxLockDowns = reader.ReadInt(); m_MaxSecures = reader.ReadInt(); if ( (Map == null || Map == Map.Internal) && Location == Point3D.Zero ) Delete(); if ( m_Owner != null ) { ArrayList list = (ArrayList)m_Table[m_Owner]; if ( list == null ) m_Table[m_Owner] = list = new ArrayList(); list.Add( this ); } break; } } if ( version <= 1 ) ChangeSignType( 0xBD2 );//private house, plain brass sign if ( version < 10 ) { /* NOTE: This can exceed the house lockdown limit. It must be this way, because * we do not want players' items to decay without them knowing. Or not even * having a chance to fix it themselves. */ Timer.DelayCall( TimeSpan.Zero, new TimerCallback( FixLockdowns_Sandbox ) ); } if ( version < 11 ) m_LastRefreshed = DateTime.Now + TimeSpan.FromHours( 24 * Utility.RandomDouble() ); /* PlayerMobile pmowner = m_Owner as PlayerMobile; if ( pmowner != null && m_Owner.Account != null && CanDecay ) { if ( pmowner.DonationTimeLeft < TimeSpan.MaxValue && ( pmowner.DonationStart + pmowner.DonationDuration + DecayPeriod ) > DateTime.Now ) m_LastRefreshed = pmowner.DonationStart + pmowner.DonationDuration + DecayPeriod; } */ //Moved to cleanup code because CheckDecay will trigger accounts which have not been initialized yet. if ( /*!CheckDecay() &&*/ RelocatedEntities.Count > 0 ) Timer.DelayCall( TimeSpan.Zero, new TimerCallback( RestoreRelocatedEntities ) ); }
public EmptyTimer(TrashBarrel barrel) : base(TimeSpan.FromMinutes(3.0)) { m_Barrel = barrel; }
public void RestoreRelocatedEntities() { foreach ( RelocatedEntity relocEntity in RelocatedEntities ) { Point3D relLoc = relocEntity.RelativeLocation; Point3D location = new Point3D( relLoc.X + this.X, relLoc.Y + this.Y, relLoc.Z + this.Z ); IEntity entity = relocEntity.Entity; if ( entity is Item ) { Item item = (Item) entity; if ( !item.Deleted ) { if ( item is IAddon ) { if ( ((IAddon)item).CouldFit( location, this.Map ) ) { item.MoveToWorld( location, this.Map ); continue; } } else { int height; bool requireSurface; if ( item is VendorRentalContract ) { height = 16; requireSurface = true; } else { height = item.ItemData.Height; requireSurface = false; } if ( this.Map.CanFit( location.X, location.Y, location.Z, height, false, false, requireSurface ) ) { item.MoveToWorld( location, this.Map ); continue; } } // The item can't fit if ( item is TrashBarrel ) { item.Delete(); // Trash barrels don't go to the moving crate } else { item.IsLockedDown = false; item.IsSecure = false; item.Movable = true; Item relocateItem = item; if ( item is StrongBox ) relocateItem = ((StrongBox)item).ConvertToStandardContainer(); if ( item is IAddon ) { relocateItem = ((IAddon)item).Deed; item.Delete(); } if ( relocateItem != null ) DropToMovingCrate( relocateItem ); } } if ( m_Trash == item ) m_Trash = null; LockDowns.Remove( item ); VendorRentalContracts.Remove( item ); Addons.Remove( item ); for ( int i = Secures.Count - 1; i >= 0; i-- ) { if ( ((SecureInfo)Secures[i]).Item == item ) Secures.RemoveAt( i ); } } else { Mobile mobile = (Mobile) entity; if ( !mobile.Deleted ) { if ( this.Map.CanFit( location, 16, false, false ) ) { mobile.MoveToWorld( location, this.Map ); } else { InternalizedVendors.Add( mobile ); } } } } RelocatedEntities.Clear(); }
public void MoveAllToCrate() { RelocatedEntities.Clear(); if ( MovingCrate != null ) MovingCrate.Hide(); if ( m_Trash != null ) { m_Trash.Delete(); m_Trash = null; } foreach ( Item item in LockDowns ) { if ( !item.Deleted ) { item.IsLockedDown = false; item.IsSecure = false; item.Movable = true; if ( item.Parent == null ) DropToMovingCrate( item ); } } LockDowns.Clear(); foreach ( Item item in VendorRentalContracts ) { if ( !item.Deleted ) { item.IsLockedDown = false; item.IsSecure = false; item.Movable = true; if ( item.Parent == null ) DropToMovingCrate( item ); } } VendorRentalContracts.Clear(); foreach ( SecureInfo info in Secures ) { Item item = info.Item; if ( !item.Deleted ) { if ( item is StrongBox ) item = ((StrongBox)item).ConvertToStandardContainer(); item.IsLockedDown = false; item.IsSecure = false; item.Movable = true; if ( item.Parent == null ) DropToMovingCrate( item ); } } Secures.Clear(); foreach ( Item addon in Addons ) { if ( !addon.Deleted ) { Item deed = null; if ( addon is IAddon ) deed = ((IAddon)addon).Deed; if ( deed != null ) { addon.Delete(); DropToMovingCrate( deed ); } else { DropToMovingCrate( addon ); } } } Addons.Clear(); foreach ( PlayerVendor mobile in PlayerVendors ) { mobile.Return(); mobile.Internalize(); InternalizedVendors.Add( mobile ); } foreach ( Mobile mobile in PlayerBarkeepers ) { mobile.Internalize(); InternalizedVendors.Add( mobile ); } }
public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); int count; bool idocannc = false; m_Region = new HouseRegion(this); switch (version) { case 20: { m_NPCData = reader.ReadUInt32(); goto case 19; } case 19: { m_RestartDecay = reader.ReadTimeSpan(); goto case 18; } case 18: { m_Flags = (ImplFlags)reader.ReadUInt32(); goto case 17; } case 17: { m_UpgradeCosts = reader.ReadUInt32(); goto case 16; } case 16: { m_LockBoxData = reader.ReadUInt32(); goto case 15; } case 15: { m_SecurePremises = reader.ReadBool(); goto case 14; } case 14: { idocannc = reader.ReadBool(); goto case 13; } case 13: { m_DecayMinutesStored = reader.ReadDouble(); m_NeverDecay = reader.ReadBool(); goto case 11; //note, this isn't a mistake - we want to skip 12 } case 12: { DateTime tempDT = reader.ReadDeltaTime(); //StructureDecayTime = reader.ReadDeltaTime(); m_DecayMinutesStored = (tempDT - DateTime.Now).TotalMinutes; m_NeverDecay = reader.ReadBool(); goto case 11; } case 11: { m_MaxLockBoxes = reader.ReadInt(); m_LockBoxCount = reader.ReadInt(); goto case 9; } case 10: // just a signal for updates case 9: { m_Visits = reader.ReadInt(); goto case 8; } case 8: { m_Price = reader.ReadInt(); goto case 7; } case 7: { m_Access = reader.ReadMobileList(); goto case 6; } case 6: { m_BuiltOn = reader.ReadDateTime(); m_LastTraded = reader.ReadDateTime(); goto case 5; } case 5: // just removed fields case 4: { m_Addons = reader.ReadItemList(); goto case 3; } case 3: { count = reader.ReadInt(); m_Secures = new ArrayList(count); for (int i = 0; i < count; ++i) { SecureInfo info = new SecureInfo(reader); if (info.Item != null) { info.Item.IsSecure = true; info.Item.CancelFreezeTimer(); // don't initiate for Deserialize m_Secures.Add(info); } } goto case 2; } case 2: { m_Public = reader.ReadBool(); goto case 1; } case 1: { m_Region.GoLocation = reader.ReadPoint3D(); goto case 0; } case 0: { if (version < 16) { LockBoxCeling = (uint)m_MaxLockBoxes * 2; // high limit LockBoxFloor = (uint)m_MaxLockBoxes; // low limit } if (version < 12) { Refresh(); m_NeverDecay = false; } if (version < 4) m_Addons = new ArrayList(); if (version < 7) m_Access = new ArrayList(); if (version < 8) m_Price = DefaultPrice; m_Owner = reader.ReadMobile(); if (version < 5) { count = reader.ReadInt(); for (int i = 0; i < count; i++) reader.ReadRect2D(); } UpdateRegionArea(); Region.AddRegion(m_Region); m_CoOwners = reader.ReadMobileList(); m_Friends = reader.ReadMobileList(); m_Bans = reader.ReadMobileList(); m_Sign = reader.ReadItem() as HouseSign; m_Trash = reader.ReadItem() as TrashBarrel; m_Doors = reader.ReadItemList(); m_LockDowns = reader.ReadItemList(); for (int i = 0; i < m_LockDowns.Count; ++i) { Item item = m_LockDowns[i] as Item; if (item != null) { item.IsLockedDown = true; item.CancelFreezeTimer(); // don't initiate for Deserialize } } if (version < 3) { ArrayList items = reader.ReadItemList(); m_Secures = new ArrayList(items.Count); for (int i = 0; i < items.Count; ++i) { Container c = items[i] as Container; if (c != null) { c.IsSecure = true; m_Secures.Add(new SecureInfo(c, SecureLevel.CoOwners)); } } } m_MaxLockDowns = reader.ReadInt(); m_MaxSecures = reader.ReadInt(); if ((Map == null || Map == Map.Internal) && Location == Point3D.Zero) Delete(); if (m_Owner != null) { ArrayList list = (ArrayList)m_Table[m_Owner]; if (list == null) m_Table[m_Owner] = list = new ArrayList(); list.Add(this); } break; } } // patch m_NPCData to hold the default barkeep count if (version < 20) MaximumBarkeepCount = 2; if (version <= 1) ChangeSignType(0xBD2);//private house, plain brass sign if (version < 10) { /* NOTE: This can exceed the house lockdown limit. It must be this way, because * we do not want players' items to decay without them knowing. Or not even * having a chance to fix it themselves. */ Timer.DelayCall(TimeSpan.Zero, new TimerCallback(FixLockdowns_Sandbox)); } if (idocannc) // idoc announcement was running when we saved, re-create it { string[] lines = new string[1]; lines[0] = String.Format("Lord British has condemned the estate of {0} near {1}.", this.Owner.Name, DescribeLocation()); m_IDOC_Broadcast_TCE = new TownCrierEntry(lines, TimeSpan.FromMinutes(m_DecayMinutesStored), Serial.MinusOne); GlobalTownCrierEntryList.Instance.AddEntry(m_IDOC_Broadcast_TCE); } }
public HouseDecayingCrate MoveAllDecayingToCrate() { RelocatedEntities.Clear(); if ( MovingCrate != null ) MovingCrate.Hide(); HouseDecayingCrate crate = new HouseDecayingCrate(); if ( m_Trash != null ) { m_Trash.Delete(); m_Trash = null; } foreach ( Item item in LockDowns ) { if ( !item.Deleted ) { item.IsLockedDown = false; item.IsSecure = false; item.Movable = true; if ( item.Parent == null ) crate.DropItem( item ); } } LockDowns.Clear(); foreach ( Item item in VendorRentalContracts ) { if ( !item.Deleted ) { item.IsLockedDown = false; item.IsSecure = false; item.Movable = true; if ( item.Parent == null ) crate.DropItem( item ); } } VendorRentalContracts.Clear(); foreach ( SecureInfo info in Secures ) { Item item = info.Item; if ( !item.Deleted ) { if ( item is StrongBox ) item = ((StrongBox)item).ConvertToStandardContainer(); item.IsLockedDown = false; item.IsSecure = false; item.Movable = true; if ( item.Parent == null ) crate.DropItem( item ); } } Secures.Clear(); foreach ( Item addon in Addons ) { if ( !addon.Deleted ) { Item deed = null; if (addon is IAddon) { deed = ((IAddon)addon).Deed; if (addon is BaseAddon && ((BaseAddon)addon).RetainDeedHue) { BaseAddon baseAddon = addon as BaseAddon; for (int i = 0; deed.Hue == 0 && i < baseAddon.Components.Count; ++i) { AddonComponent c = (AddonComponent)baseAddon.Components[i]; if (c.Hue != 0) deed.Hue = c.Hue; } } } if ( deed != null ) { addon.Delete(); crate.DropItem( deed ); } else crate.DropItem( addon ); } } Addons.Clear(); return crate; /* foreach ( PlayerVendor mobile in PlayerVendors ) { mobile.Return(); mobile.Internalize(); InternalizedVendors.Add( mobile ); } foreach ( Mobile mobile in PlayerBarkeepers ) { mobile.Internalize(); InternalizedVendors.Add( mobile ); } */ }
public void MoveAllToCrate() { RelocatedEntities.Clear(); if ( MovingCrate != null ) MovingCrate.Hide(); if ( m_Trash != null ) { m_Trash.Delete(); m_Trash = null; } foreach ( Item item in LockDowns ) { if ( !item.Deleted ) { item.IsLockedDown = false; item.IsSecure = false; item.Movable = true; if ( item.Parent == null ) DropToMovingCrate( item ); } } LockDowns.Clear(); foreach ( Item item in VendorRentalContracts ) { if ( !item.Deleted ) { item.IsLockedDown = false; item.IsSecure = false; item.Movable = true; if ( item.Parent == null ) DropToMovingCrate( item ); } } VendorRentalContracts.Clear(); foreach ( SecureInfo info in Secures ) { Item item = info.Item; if ( !item.Deleted ) { if ( item is StrongBox ) item = ((StrongBox)item).ConvertToStandardContainer(); item.IsLockedDown = false; item.IsSecure = false; item.Movable = true; if ( item.Parent == null ) DropToMovingCrate( item ); } } Secures.Clear(); foreach ( Item addon in Addons ) { if ( !addon.Deleted ) { Item deed = null; bool retainDeedHue = false; //if the items aren't hued but the deed itself is int hue = 0; if( addon is IAddon ) { deed = ((IAddon)addon).Deed; if( addon is BaseAddon && ((BaseAddon)addon).RetainDeedHue) //There are things that are IAddon which aren't BaseAddon { BaseAddon ba = (BaseAddon)addon; retainDeedHue = true; for( int i = 0; hue == 0 && i < ba.Components.Count; ++i ) { AddonComponent c = ba.Components[i]; if( c.Hue != 0 ) hue = c.Hue; } } } if ( deed != null ) { #region Mondain's Legacy if ( deed is BaseAddonContainerDeed && addon is BaseAddonContainer ) { BaseAddonContainer c = (BaseAddonContainer) addon; c.DropItemsToGround(); ((BaseAddonContainerDeed) deed).Resource = c.Resource; } else if ( deed is BaseAddonDeed && addon is BaseAddon ) ((BaseAddonDeed) deed).Resource = ((BaseAddon) addon).Resource; #endregion addon.Delete(); if( retainDeedHue ) deed.Hue = hue; DropToMovingCrate( deed ); } else { DropToMovingCrate( addon ); } } } Addons.Clear(); foreach ( PlayerVendor mobile in PlayerVendors ) { mobile.Return(); mobile.Internalize(); InternalizedVendors.Add( mobile ); } foreach ( Mobile mobile in PlayerBarkeepers ) { mobile.Internalize(); InternalizedVendors.Add( mobile ); } }
public EmptyTimer( TrashBarrel barrel ) : base(TimeSpan.FromMinutes( 3.0 )) { m_Barrel = barrel; }
public void RestoreRelocatedEntities() { foreach ( RelocatedEntity relocEntity in RelocatedEntities ) { Point3D relLoc = relocEntity.RelativeLocation; Point3D location = new Point3D( relLoc.X + this.X, relLoc.Y + this.Y, relLoc.Z + this.Z ); IEntity entity = relocEntity.Entity; if ( entity is Item ) { Item item = (Item) entity; if ( !item.Deleted ) { if ( item is IAddon ) { if ( ((IAddon)item).CouldFit( location, this.Map ) ) { item.MoveToWorld( location, this.Map ); continue; } } else { int height; bool requireSurface; if ( item is VendorRentalContract ) { height = 16; requireSurface = true; } else { height = item.ItemData.Height; requireSurface = false; } if ( this.Map.CanFit( location.X, location.Y, location.Z, height, false, false, requireSurface ) ) { item.MoveToWorld( location, this.Map ); continue; } } // The item can't fit if ( item is TrashBarrel ) { item.Delete(); // Trash barrels don't go to the moving crate } else { SetLockdown( item, false ); item.IsSecure = false; item.Movable = true; Item relocateItem = item; if ( item is StrongBox ) relocateItem = ((StrongBox)item).ConvertToStandardContainer(); if( item is IAddon ) { Item deed = ((IAddon)item).Deed; bool retainDeedHue = false; //if the items aren't hued but the deed itself is int hue = 0; if( item is BaseAddon && ((BaseAddon)item).RetainDeedHue ) //There are things that are IAddon which aren't BaseAddon { BaseAddon ba = (BaseAddon)item; retainDeedHue = true; for( int i = 0; hue == 0 && i < ba.Components.Count; ++i ) { AddonComponent c = ba.Components[i]; if( c.Hue != 0 ) hue = c.Hue; } } #region Mondain's Legacy if ( deed != null ) { if ( deed is BaseAddonContainerDeed && item is BaseAddonContainer ) { BaseAddonContainer c = (BaseAddonContainer) item; c.DropItemsToGround(); ((BaseAddonContainerDeed) deed).Resource = c.Resource; } else if ( deed is BaseAddonDeed && item is BaseAddon ) ((BaseAddonDeed) deed).Resource = ((BaseAddon) item).Resource; if ( retainDeedHue ) deed.Hue = hue; } #endregion relocateItem = deed; item.Delete(); } if ( relocateItem != null ) DropToMovingCrate( relocateItem ); } } if ( m_Trash == item ) m_Trash = null; LockDowns.Remove( item ); VendorRentalContracts.Remove( item ); Addons.Remove( item ); for ( int i = Secures.Count - 1; i >= 0; i-- ) { if ( ((SecureInfo)Secures[i]).Item == item ) Secures.RemoveAt( i ); } } else { Mobile mobile = (Mobile) entity; if ( !mobile.Deleted ) { if ( this.Map.CanFit( location, 16, false, false ) ) { mobile.MoveToWorld( location, this.Map ); } else { InternalizedVendors.Add( mobile ); } } } } RelocatedEntities.Clear(); }
public void Empty() { List <Item> items = Items; if (items.Count > 0) { for (int i = items.Count - 1; i >= 0; --i) { if (i >= items.Count) { continue; } ConfirmCleanupItem(items[i]); if (.01 > Utility.RandomDouble()) { TrashBarrel.DropToCavernOfDiscarded(items[i]); } else { items[i].Delete(); } } for (var i = 0; i < m_Cleanup.Count; i++) { var x1 = m_Cleanup[i]; if (x1.mobiles != null) { HashSet <Mobile> set = new HashSet <Mobile>(); for (var index1 = 0; index1 < m_Cleanup.Count; index1++) { var x2 = m_Cleanup[index1]; Mobile m = x2.mobiles; if (set.Add(m) && (m_Cleanup.Find(x => x.mobiles == m && x.confirm) != null)) { double point = 0; for (var index = 0; index < m_Cleanup.Count; index++) { var x = m_Cleanup[index]; if (x.mobiles == m && x.confirm) { point += x.points; } } int count = 0; for (var index = 0; index < m_Cleanup.Count; index++) { var r = m_Cleanup[index]; if (r.mobiles == m) { count++; } } m.SendLocalizedMessage(1151280, $"{point.ToString()}\t{count}"); // You have received approximately ~1_VALUE~points for turning in ~2_COUNT~items for Clean Up Britannia. PointsSystem.CleanUpBritannia.AwardPoints(m, point); } } m_Cleanup.Clear(); break; } } } }