Example #1
0
        /// <summary>
        /// Chatmetaleux's method to fix the ghost items (experimental)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <remarks>This only fix a bug in saved games, not the cause !</remarks>
        private void FixGhostItems_Click(object sender, RoutedEventArgs e)
        {
            int cnt = 0;
            // search for crates
            var results = GnomanEmpire.Instance.Fortress.StockManager.ItemsByItemID(GameLibrary.ItemID.Crate.ToString());

            if (results != null)
            {
                foreach (var valuePair in results)
                {
                    List <Game.Item> list = valuePair.Value;
                    foreach (Game.Item item in list)
                    {
                        if (item.Claimed && item.ClaimedBy == null)
                        {
                            AddStatusText(string.Format("container claimed @{0} : {1}", item.Position.ToString(), item.Name()));
                            StorageContainer sc = (StorageContainer)item;
                            foreach (Item it in sc.ContainedResources)
                            {
                                it.FixClaimedItems();
                                AddStatusText(string.Format("fix container->{0} ", it.Name()));
                            }
                            AddStatusText("container still claimed ? " + item.Claimed.ToString());
                            cnt++;
                        }
                    }
                }
            }
            AddStatusText(string.Format("Done. {0} containers fixed.", cnt));
            cnt = 0;

            // search for piles
            for (int z = 0; z < GnomanEmpire.Instance.Map.MapHeight; z++)
            {
                for (int height = 0; height < GnomanEmpire.Instance.Map.MapHeight; ++height)
                {
                    for (int width = 0; width < GnomanEmpire.Instance.Map.MapWidth; ++width)
                    {
                        foreach (GameEntity ge in GnomanEmpire.Instance.Map.Levels[z][height][width].Objects)
                        {
                            if (ge is Game.ResourcePile)
                            {
                                ResourcePile rp = (ResourcePile)ge;
                                AddStatusText(string.Format("pile @{0} : {1}", rp.Position.ToString(), rp.Name()));
                                foreach (Item it in rp.ContainedResources)
                                {
                                    it.FixClaimedItems();
                                }
                                cnt++;
                            }
                            else if (ge is Game.StorageContainer)
                            {
                                StorageContainer sc = (StorageContainer)ge;
                                AddStatusText(string.Format("container @{0} : {1}", sc.Position.ToString(), sc.Name()));
                                foreach (Item it in sc.ContainedResources)
                                {
                                    it.FixClaimedItems();
                                }
                                cnt++;
                            }
                        }
                        if (GnomanEmpire.Instance.Map.Levels[z][height][width].EmbeddedWall is ConstructedContainer) // container on stockpile
                        {
                            ConstructedContainer cc = (ConstructedContainer)GnomanEmpire.Instance.Map.Levels[z][height][width].EmbeddedWall;
                            AddStatusText(string.Format("container stockpile @z{0} y{1} x{2} ", z, height, width));
                            foreach (Item it in cc.Container.ContainedResources)
                            {
                                it.FixClaimedItems();
                            }
                            cc.Container.FixClaimedItems();
                            cnt++;
                        }
                    }
                }
            }
            AddStatusText(string.Format("Done. {0} piles/container fixed.", cnt));
        }