public BaseHouse( int multiID, Mobile owner, int MaxLockDown, int MaxSecure ) : base(multiID) { m_BuiltOn = DateTime.Now; m_LastTraded = DateTime.MinValue; m_Doors = new ArrayList(); m_Addons = new ArrayList(); m_Region = new HouseRegion( this ); m_Owner = owner; UpdateRegionArea(); Movable = false; }
public override void OnAfterDelete() { #region Mondain's Legacy if ( m_Region != null ) { NoHousingItem houseItem = new NoHousingItem( this ); houseItem.MoveToWorld( m_Region.GoLocation, m_Region.Map ); } #endregion base.OnAfterDelete(); 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.Remove( this ); } if ( m_Region != null ) { m_Region.Unregister(); m_Region = null; } if ( m_Sign != null ) m_Sign.Delete(); if ( m_Trash != null ) m_Trash.Delete(); if ( m_Doors != null ) { for ( int i = 0; i < m_Doors.Count; ++i ) { Item item = (Item)m_Doors[i]; if ( item != null ) item.Delete(); } m_Doors.Clear(); } if ( m_LockDowns != null ) { for ( int i = 0; i < m_LockDowns.Count; ++i ) { Item item = (Item)m_LockDowns[i]; if ( item != null ) { item.IsLockedDown = false; item.IsSecure = false; item.Movable = true; item.SetLastMoved(); } } m_LockDowns.Clear(); } if ( VendorRentalContracts != null ) { for ( int i = 0; i < VendorRentalContracts.Count; ++i ) { Item item = (Item)VendorRentalContracts[i]; if ( item != null ) { item.IsLockedDown = false; item.IsSecure = false; item.Movable = true; item.SetLastMoved(); } } VendorRentalContracts.Clear(); } if ( m_Secures != null ) { for ( int i = 0; i < m_Secures.Count; ++i ) { SecureInfo info = (SecureInfo)m_Secures[i]; if ( info.Item is StrongBox ) { info.Item.Destroy(); } else { info.Item.IsLockedDown = false; info.Item.IsSecure = false; info.Item.Movable = true; info.Item.SetLastMoved(); } } m_Secures.Clear(); } if ( m_Addons != null ) { for ( int i = 0; i < m_Addons.Count; ++i ) { Item item = (Item)m_Addons[i]; if ( item != null ) { if( !item.Deleted && 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 j = 0; hue == 0 && j < ba.Components.Count; ++j ) { AddonComponent c = ba.Components[j]; if( c.Hue != 0 ) hue = c.Hue; } } if( deed != null ) { if( retainDeedHue ) deed.Hue = hue; deed.MoveToWorld( item.Location, item.Map ); } } item.Delete(); } } m_Addons.Clear(); } ArrayList inventories = new ArrayList( VendorInventories ); foreach ( VendorInventory inventory in inventories ) inventory.Delete(); if ( MovingCrate != null ) MovingCrate.Delete(); KillVendors(); m_AllHouses.Remove( this ); }
public virtual void UpdateRegion() { if ( m_Region != null ) m_Region.Unregister(); if ( this.Map != null ) { m_Region = new HouseRegion( this ); m_Region.Register(); } else { m_Region = null; } }
public override void OnAfterDelete() { base.OnAfterDelete(); if (m_Region != null) { m_Region.Unregister(); m_Region = null; } if ( m_Sign != null ) m_Sign.Delete(); if ( m_Trash != null ) m_Trash.Delete(); if ( m_Doors != null ) { for ( int i = 0; i < m_Doors.Count; ++i ) { Item item = (Item)m_Doors[i]; if ( item != null && !item.Deleted ) item.Delete(); } m_Doors.Clear(); } if ( m_Addons != null ) { for(int i=0;i<m_Addons.Count;i++) { Item addon = (Item)m_Addons[i]; if ( addon is Tent.TentChest && !addon.Deleted && addon.Map != Map.Internal && addon.Location != Point3D.Zero ) { for(int j=0;j<addon.Items.Count;j++) ((Item)addon.Items[j]).MoveToWorld( addon.Location, addon.Map ); } if ( addon != null && !addon.Deleted ) addon.Delete(); } m_Addons.Clear(); } }
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; 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() ); if ( !CheckDecay() && RelocatedEntities.Count > 0 ) Timer.DelayCall( TimeSpan.Zero, new TimerCallback( RestoreRelocatedEntities ) ); }
public BaseHouse( int multiID, Mobile owner, int MaxLockDown, int MaxSecure ) : base(multiID | 0x4000) { m_AllHouses.Add( this ); m_LastRefreshed = DateTime.Now; m_BuiltOn = DateTime.Now; m_LastTraded = DateTime.MinValue; m_Doors = new ArrayList(); m_LockDowns = new ArrayList(); m_Secures = new ArrayList(); m_Addons = new ArrayList(); m_CoOwners = new ArrayList(); m_Friends = new ArrayList(); m_Bans = new ArrayList(); m_Access = new ArrayList(); m_VendorRentalContracts = new ArrayList(); m_InternalizedVendors = new ArrayList(); m_Region = new HouseRegion( this ); m_Owner = owner; m_MaxLockDowns = MaxLockDown; m_MaxSecures = MaxSecure; UpdateRegionArea(); if ( owner != null ) { ArrayList list = (ArrayList)m_Table[owner]; if ( list == null ) m_Table[owner] = list = new ArrayList(); list.Add( this ); } Movable = false; }
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 BaseHouse(int multiID, Mobile owner, int MaxLockDown, int MaxSecure, int MaxLockBox) : base(multiID | 0x4000) { //initialize decay m_DecayMinutesStored = HouseDecayDelay.TotalMinutes; m_BuiltOn = DateTime.Now; m_LastTraded = DateTime.MinValue; m_Doors = new ArrayList(); m_LockDowns = new ArrayList(); m_Secures = new ArrayList(); m_Addons = new ArrayList(); m_CoOwners = new ArrayList(); m_Friends = new ArrayList(); m_Bans = new ArrayList(); m_Access = new ArrayList(); m_Region = new HouseRegion(this); m_Owner = owner; m_MaxLockDowns = MaxLockDown; m_MaxSecures = MaxSecure; m_MaxLockBoxes = MaxLockBox; // current limit, can increase LockBoxCeling = (uint)MaxLockBox * 2; // high limit LockBoxFloor = (uint)MaxLockBox; // low limit m_LockBoxCount = 0; // no lock boses yet m_UpgradeCosts = 0; // no refundable upgrades yet MaximumBarkeepCount = 2; // default for new houses UpdateRegionArea(); if (owner != null) { ArrayList list = (ArrayList)m_Table[owner]; if (list == null) m_Table[owner] = list = new ArrayList(); list.Add(this); } Movable = false; //Decay Stuff: m_NeverDecay = false; Refresh(); }
public override void OnAfterDelete() { base.OnAfterDelete(); if ( m_Owner != null ) { ArrayList list = (ArrayList)m_Table[m_Owner]; if ( list == null ) m_Table[m_Owner] = list = new ArrayList(); list.Remove( this ); } if ( m_Region != null ) { m_Region.Unregister(); m_Region = null; } if ( m_Sign != null ) m_Sign.Delete(); if ( m_Trash != null ) m_Trash.Delete(); if ( m_Doors != null ) { for ( int i = 0; i < m_Doors.Count; ++i ) { Item item = (Item)m_Doors[i]; if ( item != null ) item.Delete(); } m_Doors.Clear(); } if ( m_LockDowns != null ) { for ( int i = 0; i < m_LockDowns.Count; ++i ) { Item item = (Item)m_LockDowns[i]; if ( item != null ) { item.IsLockedDown = false; item.IsSecure = false; item.Movable = true; item.SetLastMoved(); } } m_LockDowns.Clear(); } if ( VendorRentalContracts != null ) { for ( int i = 0; i < VendorRentalContracts.Count; ++i ) { Item item = (Item)VendorRentalContracts[i]; if ( item != null ) { item.IsLockedDown = false; item.IsSecure = false; item.Movable = true; item.SetLastMoved(); } } VendorRentalContracts.Clear(); } if ( m_Secures != null ) { for ( int i = 0; i < m_Secures.Count; ++i ) { SecureInfo info = (SecureInfo)m_Secures[i]; if ( info.Item is StrongBox ) { info.Item.Destroy(); } else { info.Item.IsLockedDown = false; info.Item.IsSecure = false; info.Item.Movable = true; info.Item.SetLastMoved(); } } m_Secures.Clear(); } if ( m_Addons != null ) { for ( int i = 0; i < m_Addons.Count; ++i ) { Item item = (Item)m_Addons[i]; if ( item != null ) { if ( !item.Deleted && item is IAddon ) { Item deed = ((IAddon)item).Deed; if ( deed != null ) deed.MoveToWorld( item.Location, item.Map ); } item.Delete(); } } m_Addons.Clear(); } ArrayList inventories = new ArrayList( VendorInventories ); foreach ( VendorInventory inventory in inventories ) inventory.Delete(); if ( MovingCrate != null ) MovingCrate.Delete(); KillVendors(); m_AllHouses.Remove( this ); }