示例#1
0
        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);
        }
示例#2
0
        // 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);
                }
            }
        }