コード例 #1
0
        private void GenerateParentBlockList()
        {
            FlatConfigBlockByName
            .Where(B => B.Value?.Values?.ContainsKey("ChildBlocks") == true)
            .ForEach(B => B.Value.Values["ChildBlocks"].ToString()
                     .Split(',').Select(N => N.Trim())
                     .ForEach(N => { if (!ParentBlockName.ContainsKey(N))
                                     {
                                         ParentBlockName.Add(N, B.Key);
                                     }
                              })
                     );

            FlatConfigBlockByName
            .Where(B => B.Value?.Values?.ContainsKey("ParentBlocks") == true)
            .ForEach(B => B.Value.Values["ParentBlocks"].ToString()
                     .Split(',').Select(N => N.Trim())
                     .ForEach(N => {
                if (!B.Value.Values.TryGetValue("Name", out var name) ||
                    !FlatConfigBlockByName.TryGetValue(N, out var parentBlock) ||
                    !parentBlock.Values.TryGetValue("AllowPlacingAt", out var placeableAt))
                {
                    return;
                }

                placeableAt.ToString().Split(',').Select(N => N.Trim())
                .ForEach(P => { if (!ParentBlockName.ContainsKey(P + name.ToString()))
                                {
                                    ParentBlockName.Add(P + name.ToString(), N);
                                }
                         });
            })
                     );
        }
コード例 #2
0
        private void ScanTemplates(EcfBlock templateRootBlock, Dictionary <int, double> ressList, double multiplyer)
        {
            var templateName = templateRootBlock.Attr.FirstOrDefault(A => A.Name == "Name")?.Value.ToString();

            bool.TryParse(templateRootBlock.Attr.FirstOrDefault(A => A.Name == "BaseItem")?.Value.ToString(), out var isBaseItem);

            templateRootBlock.Childs?
            .FirstOrDefault(C => C.Key == "Child Inputs").Value?.Attr?
            .ForEach(C => {
                if (C.Name.ToString() == templateName)
                {
                    return;
                }

                if (!isBaseItem && FlatConfigTemplatesByName.TryGetValue(C.Name, out var recipe))
                {
                    bool.TryParse(recipe.Attr.FirstOrDefault(A => A.Name == "BaseItem")?.Value.ToString(), out var isSubBaseItem);
                    if (!isSubBaseItem)
                    {
                        var recipeMultiplyer = multiplyer * (int)C.Value;
                        if (recipe.Values.TryGetValue("OutputCount", out var outputCount))
                        {
                            recipeMultiplyer /= (int)outputCount;
                        }
                        ScanTemplates(recipe, ressList, recipeMultiplyer);
                        return;
                    }
                }

                if (!FlatConfigBlockByName.TryGetValue(C.Name, out var ressource))
                {
                    return;
                }
                if (!ressource.Values.TryGetValue("Id", out var ressId))
                {
                    return;
                }

                if (ressList.TryGetValue((int)ressId, out var count))
                {
                    ressList[(int)ressId] = count + multiplyer * (int)C.Value;
                }
                else
                {
                    ressList.Add((int)ressId, multiplyer * (int)C.Value);
                }
            });
        }