public static DM_LootContainer ParseLootContainer(TreasureChest loot) { var lootHolder = new DM_LootContainer { Name = loot.Name?.Trim(), ItemID = loot.ItemID, UID = loot.UID }; if (lootHolder.Name == "Pocket") { lootHolder.Name = "Corpse"; } if (At.GetField(loot as SelfFilledItemContainer, "m_drops") is List <Dropable> droppers) { foreach (Dropable dropper in droppers) { var dropableHolder = DM_DropTable.ParseDropable(dropper, null, lootHolder.Name); lootHolder.DropTables.Add(dropableHolder.Name); } } string dir = Serializer.Folders.Scenes + "/" + SceneManager.Instance.GetCurrentRegion() + "/" + SceneManager.Instance.GetCurrentLocation(loot.transform.position); string saveName = lootHolder.Name + "_" + lootHolder.UID; Serializer.SaveToXml(dir + "/LootContainers", saveName, lootHolder); return(lootHolder); }
// Parse Loot public static void ParseAllLoot() { var allitems = Resources.FindObjectsOfTypeAll(typeof(Item)) as Item[]; foreach (Item item in allitems.Where(x => IsValidLoot(x))) { var summary = ListManager.SceneSummaries[ListManager.GetSceneSummaryKey(item.transform.position)]; if (item is SelfFilledItemContainer) { if (item is TreasureChest) { var lootContainer = DM_LootContainer.ParseLootContainer(item as TreasureChest); AddQuantity(lootContainer.Name, summary.Loot_Containers); ListManager.AddContainerSummary( lootContainer.Name, ListManager.GetSceneSummaryKey(item.transform.position), lootContainer.DropTables, Instance.GetCurrentLocation(item.transform.position) ); if (!summary.UniqueContainerList.Contains(lootContainer.Name + "_" + lootContainer.UID)) { summary.UniqueContainerList.Add(lootContainer.Name + "_" + lootContainer.UID); } } else if (item is Gatherable) { var gatherableHolder = DM_Gatherable.ParseGatherable(item as Gatherable); AddQuantity(gatherableHolder.Name, summary.Gatherables); ListManager.AddContainerSummary( gatherableHolder.Name, ListManager.GetSceneSummaryKey(item.transform.position), gatherableHolder.DropTables, Instance.GetCurrentLocation(item.transform.position) ); } else { SL.LogWarning("[ParseLoot] Unsupported ItemContainer: " + item.Name + ", typeof: " + item.GetType()); } } else { // item spawn bool newHolder = true; foreach (DM_ItemSpawn holder in summary.Item_Spawns) { if (holder.Item_ID == item.ItemID) { newHolder = false; holder.Quantity++; holder.positions.Add(item.transform.position); break; } } if (newHolder) { summary.Item_Spawns.Add(new DM_ItemSpawn { Name = item.Name?.Trim(), Item_ID = item.ItemID, Quantity = 1, positions = new List <Vector3> { item.transform.position } }); } //AddItemSpawnSource(item.ItemID, item.Name, item.transform.position); } } }