Inheritance: BaseRegion
Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
		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 );
		}
Exemplo n.º 3
0
		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;
			}
		}
Exemplo n.º 4
0
        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();
            }
        }
Exemplo n.º 5
0
        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;
                }
            }
        }
Exemplo n.º 6
0
        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 ) );
        }
Exemplo n.º 7
0
        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;
        }
Exemplo n.º 8
0
		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);
			}
		}
Exemplo n.º 9
0
		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();
		}
Exemplo n.º 10
0
		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 );
		}