Example #1
0
        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_Chest = reader.ReadItem() as TentChest;
                    m_KeyOwner = reader.ReadUInt();

                    m_SmallForge = reader.ReadItem() as SmallForgeAddon;
                    m_LargeForge = reader.ReadItem() as LargeForgeSouthHouseAddon;
                    m_Anvil = reader.ReadItem() as AnvilEastAddon;
                    m_Loom = reader.ReadItem() as LoomSouthAddon;
                    m_SpinningWheel1 = reader.ReadItem() as SpinningwheelEastAddon;
                    m_SpinningWheel2 = reader.ReadItem() as SpinningwheelSouthAddon;
                    m_Oven = reader.ReadItem() as StoneOvenSouthAddon;
                    m_Fireplace = reader.ReadItem() as GrayBrickFireplaceSouthAddon;
                    m_Mill = reader.ReadItem() as FlourMillSouthAddon;
                    m_Training1 = reader.ReadItem() as TrainingDummyEastAddon;
                    m_Training2 = reader.ReadItem() as TrainingDummySouthAddon;
                    m_Pick1 = reader.ReadItem() as PickpocketDipEastAddon;
                    m_Pick2 = reader.ReadItem() as PickpocketDipSouthAddon;

                    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 ) );
            }
        }
Example #2
0
        public void SetChest(uint k, int xoff, int yoff, int zoff)
        {
            m_Chest = new TentChest(this);
            m_Chest.Locked = true;
            m_Chest.KeyValue = k;

            m_Chest.MoveToWorld(new Point3D(xoff + this.X, yoff + this.Y, zoff + this.Z), this.Map);
        }
Example #3
0
		public Tent( Mobile owner, int id ) : base( id, owner, 0, 0 )
		{
			SetSign( -1, 5, 13 );
            if (this.Sign != null)
            {
                this.Sign.ItemID -= 1;
                this.Sign.Name = "a tent sign";
            }

			uint keyValue = CreateKeys( owner );

            TentChest tc = new TentChest( this, keyValue );
            tc.MoveToWorld( new Point3D( X, Y - 2, Z ), Map.Trammel ); // must be on a non-internal map to be moved with the house
            Addons.Add( tc );
		}