Example #1
0
 public PotionNightSightTimer(Mobile owner, NightSightPotion potion)
     : base(TimeSpan.FromMinutes(potion.Time))
 {
     m_Owner  = owner;
     m_Potion = potion;
     Priority = TimerPriority.OneMinute;
 }
Example #2
0
        public static void Run()
        {
            List <Item>   items                = new List <Item>();
            List <Item>   validItems           = new List <Item>();
            List <Mobile> hairCleanup          = new List <Mobile>();
            List <Item>   nightsightpotCleanup = new List <Item>();

            int boxes = 0;

            foreach (Item item in World.Items.Values)
            {
                if (item.Map == null)
                {
                    items.Add(item);
                    continue;
                }
                else if (item is TreasureGem)
                {
                    TreasureGem gem = (TreasureGem)item;
                    if (gem.TreasureItem != null || gem.TreasureItem != gem)
                    {
                        validItems.Add(gem.TreasureItem);
                    }
                    continue;
                }
                else if (item is TreasureGemRandom)
                {
                    TreasureGemRandom gem = (TreasureGemRandom)item;
                    if (gem.TreasureItem != null || gem.TreasureItem != gem)
                    {
                        validItems.Add(gem.TreasureItem);
                    }
                    continue;
                }
                else if (item is CommodityDeed)
                {
                    CommodityDeed deed = (CommodityDeed)item;

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

                    continue;
                }
                else if (item is BaseHouse)
                {
                    BaseHouse house = (BaseHouse)item;

                    foreach (RelocatedEntity relEntity in house.RelocatedEntities)
                    {
                        if (relEntity.Entity is Item)
                        {
                            validItems.Add((Item)relEntity.Entity);
                        }
                    }

                    foreach (VendorInventory inventory in house.VendorInventories)
                    {
                        foreach (Item subItem in inventory.Items)
                        {
                            validItems.Add(subItem);
                        }
                    }
                }
                else if (item is BankBox)
                {
                    BankBox box   = (BankBox)item;
                    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)
                    {
                        Mobile rootMobile = (Mobile)rootParent;
                        if (item.Parent != rootMobile && rootMobile.AccessLevel == AccessLevel.Player)
                        {
                            items.Add(item);
                            continue;
                        }
                        else if (item.Parent == rootMobile)
                        {
                            hairCleanup.Add(rootMobile);
                            continue;
                        }
                    }
                }
                else if (item is NightSightPotion)
                {
                    NightSightPotion ns = (NightSightPotion)item;
                    if (DateTime.Now >= ns.cleanupTime)
                    {
                        nightsightpotCleanup.Add(item);
                    }
                }

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

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

                if (!IsBuggable(item))
                {
                    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)
                {
                    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();
                }
            }

            if (nightsightpotCleanup.Count > 0)
            {
                Console.WriteLine("Cleanup: Removed {0} night sight potions", nightsightpotCleanup.Count);

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