Exemplo n.º 1
0
        public void RelocateEntities()
        {
            foreach ( IEntity entity in GetHouseEntities() )
            {
                Point3D relLoc = new Point3D( entity.X - this.X, entity.Y - this.Y, entity.Z - this.Z );
                RelocatedEntity relocEntity = new RelocatedEntity( entity, relLoc );

                RelocatedEntities.Add( relocEntity );

                if ( entity is Item )
                {
                    ( (Item) entity ).Internalize();

                    if ( entity is ParrotPerchAddon )
                    {
                        ParrotPerchAddon perch = entity as ParrotPerchAddon;

                        if ( perch.Parrot != null && !perch.Parrot.Deleted )
                            perch.Parrot.Internalize();
                    }
                }
                else
                {
                    ( (Mobile) entity ).Internalize();
                }
            }
        }
Exemplo n.º 2
0
        public static void Run()
        {
            List <Item>   items       = new List <Item>();
            List <Item>   validItems  = new List <Item>();
            List <Mobile> hairCleanup = new List <Mobile>();

            int boxes = 0;

            foreach (Item item in World.Items.Values)
            {
                if (item.Map == null)
                {
                    items.Add(item);
                    continue;
                }

                if (item is CommodityDeed deed)
                {
                    if (deed.Commodity != null)
                    {
                        validItems.Add(deed.Commodity);
                    }

                    continue;
                }

                if (item is BaseHouse house)
                {
                    for (var index = 0; index < house.RelocatedEntities.Count; index++)
                    {
                        RelocatedEntity relEntity = house.RelocatedEntities[index];

                        if (relEntity.Entity is Item entity)
                        {
                            validItems.Add(entity);
                        }
                    }

                    for (var index = 0; index < house.VendorInventories.Count; index++)
                    {
                        VendorInventory inventory = house.VendorInventories[index];

                        for (var i = 0; i < inventory.Items.Count; i++)
                        {
                            Item subItem = inventory.Items[i];

                            validItems.Add(subItem);
                        }
                    }
                }
                else if (item is BankBox box)
                {
                    Mobile owner = box.Owner;

                    if (owner == null)
                    {
                        items.Add(box);
                        ++boxes;
                    }
                    else if (box.Items.Count == 0)
                    {
                        items.Add(box);
                        ++boxes;
                    }

                    continue;
                }
                else if (item.Layer == Layer.Hair || item.Layer == Layer.FacialHair)
                {
                    object rootParent = item.RootParent;

                    if (rootParent is Mobile m)
                    {
                        if (item.Parent != m && m.IsPlayer())
                        {
                            items.Add(item);
                            continue;
                        }

                        if (item.Parent == m)
                        {
                            hairCleanup.Add(m);
                            continue;
                        }
                    }
                }

                if (item.Parent != null || item.Map != Map.Internal || item.HeldBy != null)
                {
                    continue;
                }

                if (item.Location != Point3D.Zero)
                {
                    continue;
                }

                if (!IsBuggable(item))
                {
                    continue;
                }

                if (item is BaseBoat || item is BaseDockedBoat)
                {
                    continue;
                }

                items.Add(item);
            }

            for (int i = 0; i < validItems.Count; ++i)
            {
                items.Remove(validItems[i]);
            }

            if (items.Count > 0)
            {
                if (boxes > 0)
                {
                    Console.WriteLine("Cleanup: Detected {0} inaccessible items, including {1} bank boxes, removing..", items.Count, boxes);
                }
                else
                {
                    Console.WriteLine("Cleanup: Detected {0} inaccessible items, removing..", items.Count);
                }

                for (int i = 0; i < items.Count; ++i)
                {
                    Console.WriteLine(items[i].ToString());
                    items[i].Delete();
                }
            }

            if (hairCleanup.Count > 0)
            {
                Console.WriteLine("Cleanup: Detected {0} hair and facial hair items being worn, converting to their virtual counterparts..", hairCleanup.Count);

                for (int i = 0; i < hairCleanup.Count; i++)
                {
                    hairCleanup[i].ConvertHair();
                }
            }
        }