/// <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)); }