Ejemplo n.º 1
0
        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();
                }
            }
        }
Ejemplo n.º 2
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_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 ) );
			}
		}
Ejemplo n.º 3
0
		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 );
			}
		}
Ejemplo n.º 4
0
 public EmptyTimer( TrashBarrel barrel )
     : base(TimeSpan.FromMinutes( 3.0 ))
 {
     m_Barrel = barrel;
     Priority = TimerPriority.FiveSeconds;
 }
Ejemplo n.º 5
0
 public EmptyTimer(TrashBarrel barrel)
     : base(TimeSpan.FromMinutes(3.0))
 {
     this.m_Barrel = barrel;
     this.Priority = TimerPriority.FiveSeconds;
 }
Ejemplo n.º 6
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;
                }
            }
        }
Ejemplo n.º 7
0
        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 ) );
            }
        }
Ejemplo n.º 8
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() );
/*
			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 ) );
		}
Ejemplo n.º 9
0
 public EmptyTimer(TrashBarrel barrel) : base(TimeSpan.FromMinutes(3.0))
 {
     m_Barrel = barrel;
 }
Ejemplo n.º 10
0
        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();
        }
Ejemplo n.º 11
0
        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 );
            }
        }
Ejemplo n.º 12
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);
			}
		}
Ejemplo n.º 13
0
		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 );
			}
*/
		}
Ejemplo n.º 14
0
		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 );
			}
		}
Ejemplo n.º 15
0
 public EmptyTimer( TrashBarrel barrel )
     : base(TimeSpan.FromMinutes( 3.0 ))
 {
     m_Barrel = barrel;
 }
Ejemplo n.º 16
0
		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();
		}
Ejemplo n.º 17
0
        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;
                    }
                }
            }
        }