Esempio n. 1
0
        private static void GenerateOriginalsFile(TechGroup group, TechCategory category, List <TechType> list, string fileName)
        {
            var printyPrints = new List <string>();

            printyPrints.AddRange(EmUtils.CommentTextLinesCentered(new string[]
            {
                "This file was generated with original recipes in the game",
                "You can copy individual entries from this file to use in your personal overrides",
                "--------------------------------------------------------------------------------",
                $"PdaGroup: {group} - PdaCategory:{category}",
                "--------------------------------------------------------------------------------",
            }));

            var originals = new ModifiedRecipeList();

            foreach (TechType craftable in list)
            {
                originals.Add(new ModifiedRecipe(craftable));
            }

            printyPrints.Add(originals.PrettyPrint());

            File.WriteAllLines(FileLocations.OriginalsFolder + fileName, printyPrints.ToArray(), Encoding.UTF8);

            QuickLogger.Debug($"{fileName} file not found. File generated.");
        }
        public static List <string> GenerateOriginalsText()
        {
            var treeTypes = new CraftTree.Type[6]
            {
                CraftTree.Type.Fabricator, CraftTree.Type.Constructor, CraftTree.Type.SeamothUpgrades,
                CraftTree.Type.Workbench,
                CraftTree.Type.MapRoom, CraftTree.Type.CyclopsFabricator
            };

            var printyPrints = new List <string>(treeTypes.Length * 4 + 3)
            {
                "# This file was generated with all the existing recipes from all non-modded fabricators #",
                "#         You can copy samples from this file to use in your personal overrides         #",
                "# ------------------------------------------------------------------------------------- #",
            };

            foreach (CraftTree.Type tree in treeTypes)
            {
                ModifiedRecipeList list = GetOriginals(tree);

                printyPrints.Add(list.PrintyPrint());
                printyPrints.Add("");
                printyPrints.Add("# ------------------------------------------------------------------------------------- #");
                printyPrints.Add("");
            }

            return(printyPrints);
        }
Esempio n. 3
0
        public void Sample_ModifiedRecipes2_Ok()
        {
            var mRecipes = new ModifiedRecipeList();

            string sample = File.ReadAllText(SampleFileDirectory + "Mattus666.txt");

            bool result = mRecipes.FromString(sample);

            Assert.IsTrue(result);
        }
Esempio n. 4
0
        public void CreateFromClases_ThenTest_SampleModifiedRecipes()
        {
            var curedReginaldRecipe = new ModifiedRecipe()
            {
                ItemID        = TechType.CuredReginald.ToString(),
                AmountCrafted = 1,
                Ingredients   =
                {
                    new EmIngredient(TechType.Reginald.ToString(), 1),
                    new EmIngredient(TechType.Salt.ToString(), 1)
                },
                Unlocks =
                {
                    TechType.NutrientBlock.ToString()
                }
            };

            var origRecipeList = new ModifiedRecipeList
            {
                curedReginaldRecipe
            };

            string serialized = origRecipeList.PrettyPrint();

            string samples2File = SampleFileDirectory + "ModifiedRecipes_Samples2.txt";

            File.WriteAllText(samples2File, serialized);

            var readingRecipeList = new ModifiedRecipeList();

            string reserialized = File.ReadAllText(samples2File);

            bool success = readingRecipeList.FromString(reserialized);

            Assert.IsTrue(success);

            Assert.AreEqual(origRecipeList.Count, readingRecipeList.Count);

            // nutrientBlockRecipe
            ModifiedRecipe curedReginald = origRecipeList[0];

            Assert.AreEqual(curedReginald.ItemID, curedReginaldRecipe.ItemID);
            Assert.AreEqual(curedReginald.AmountCrafted, curedReginaldRecipe.AmountCrafted);
            Assert.AreEqual(curedReginald.Ingredients.Count, curedReginaldRecipe.Ingredients.Count);
            Assert.AreEqual(curedReginald.Ingredients[0].ItemID, curedReginaldRecipe.Ingredients[0].ItemID);
            Assert.AreEqual(curedReginald.Ingredients[1].ItemID, curedReginaldRecipe.Ingredients[1].ItemID);
            Assert.AreEqual(curedReginald.Ingredients[0].Required, curedReginaldRecipe.Ingredients[0].Required);
            Assert.AreEqual(curedReginald.Ingredients[1].Required, curedReginaldRecipe.Ingredients[1].Required);
            Assert.AreEqual(curedReginald.ForceUnlockAtStart, curedReginaldRecipe.ForceUnlockAtStart);
            Assert.AreEqual(curedReginald.Unlocks.Count, curedReginaldRecipe.Unlocks.Count);
            Assert.AreEqual(curedReginald.Unlocks[0], curedReginaldRecipe.Unlocks[0]);
        }
        public void Deserialize_ModifiedRecipesList_FullDetails()
        {
            const string serialized = "ModifiedRecipes:" + "\r\n" +
                                      "(" + "\r\n" +
                                      "    ItemID:Aerogel;" + "\r\n" +
                                      "    AmountCrafted:1;" + "\r\n" +
                                      "    Ingredients:" + "\r\n" +
                                      "        (" + "\r\n" +
                                      "            ItemID:Titanium;" + "\r\n" +
                                      "            Required:2;" + "\r\n" +
                                      "        )," + "\r\n" +
                                      "        (" + "\r\n" +
                                      "            ItemID:Copper;" + "\r\n" +
                                      "            Required:3;" + "\r\n" +
                                      "        );" + "\r\n" +
                                      "    LinkedItemIDs:Silver,Gold;" + "\r\n" +
                                      ")," + "\r\n" +
                                      "(" + "\r\n" +
                                      "    ItemID:Aerogel;" + "\r\n" +
                                      "    AmountCrafted:1;" + "\r\n" +
                                      "    Ingredients:" + "\r\n" +
                                      "        (" + "\r\n" +
                                      "            ItemID:Titanium;" + "\r\n" +
                                      "            Required:2;" + "\r\n" +
                                      "        )," + "\r\n" +
                                      "        (" + "\r\n" +
                                      "            ItemID:Copper;" + "\r\n" +
                                      "            Required:3;" + "\r\n" +
                                      "        );" + "\r\n" +
                                      "    LinkedItemIDs:Silver,Gold;" + "\r\n" +
                                      ");" + "\r\n";


            var recipe = new ModifiedRecipeList();

            recipe.FromString(serialized);

            Assert.AreEqual(TechType.Aerogel, recipe[0].ItemID);
            Assert.AreEqual(1, recipe[0].AmountCrafted);

            Assert.AreEqual(2, recipe[0].IngredientsCount);
            Assert.AreEqual(TechType.Titanium, recipe[0].GetIngredient(0).ItemID);
            Assert.AreEqual(2, recipe[0].GetIngredient(0).Required);
            Assert.AreEqual(TechType.Copper, recipe[0].GetIngredient(1).ItemID);
            Assert.AreEqual(3, recipe[0].GetIngredient(1).Required);

            Assert.AreEqual(2, recipe[0].LinkedItemsCount);
            Assert.AreEqual(TechType.Silver, recipe[0].GetLinkedItem(0));
            Assert.AreEqual(TechType.Gold, recipe[0].GetLinkedItem(1));
        }
        public void CreateFromClases_ThenTest_SampleModifiedRecipes()
        {
            var curedReginaldRecipe = new ModifiedRecipe()
            {
                ItemID        = TechType.CuredReginald,
                AmountCrafted = 1,
            };

            curedReginaldRecipe.AddUnlock(TechType.NutrientBlock);
            curedReginaldRecipe.AddIngredient(TechType.Reginald, 1);
            curedReginaldRecipe.AddIngredient(TechType.Salt, 1);

            var origRecipeList = new ModifiedRecipeList
            {
                curedReginaldRecipe
            };

            string serialized = origRecipeList.PrettyPrint();

            string samples2File = SampleFileDirectory + "ModifiedRecipes_Samples2.txt";

            File.WriteAllText(samples2File, serialized);

            var readingRecipeList = new ModifiedRecipeList();

            string reserialized = File.ReadAllText(samples2File);

            bool success = readingRecipeList.FromString(reserialized);

            Assert.IsTrue(success);

            Assert.AreEqual(origRecipeList.Count, readingRecipeList.Count);

            // nutrientBlockRecipe
            ModifiedRecipe curedReginald = origRecipeList[0];

            Assert.AreEqual(curedReginald.ItemID, curedReginaldRecipe.ItemID);
            Assert.AreEqual(curedReginald.AmountCrafted, curedReginaldRecipe.AmountCrafted);
            Assert.AreEqual(curedReginald.IngredientsCount, curedReginaldRecipe.IngredientsCount);
            Assert.AreEqual(curedReginald.GetIngredient(0).ItemID, curedReginaldRecipe.GetIngredient(0).ItemID);
            Assert.AreEqual(curedReginald.GetIngredient(1).ItemID, curedReginaldRecipe.GetIngredient(1).ItemID);
            Assert.AreEqual(curedReginald.GetIngredient(0).Required, curedReginaldRecipe.GetIngredient(0).Required);
            Assert.AreEqual(curedReginald.GetIngredient(1).Required, curedReginaldRecipe.GetIngredient(1).Required);
            Assert.AreEqual(curedReginald.ForceUnlockAtStart, curedReginaldRecipe.ForceUnlockAtStart);
            Assert.AreEqual(curedReginald.UnlocksCount, curedReginaldRecipe.UnlocksCount);
            Assert.AreEqual(curedReginald.GetUnlock(0), curedReginaldRecipe.GetUnlock(0));
        }
        public void Deserialize_ModifiedRecipesList_Unlocks()
        {
            const string serialized = "ModifiedRecipes:" + "\r\n" +
                                      "(" + "\r\n" +
                                      "    ItemID:Aerogel;" + "\r\n" +
                                      "    AmountCrafted:1;" + "\r\n" +
                                      "    Ingredients:" + "\r\n" +
                                      "        (" + "\r\n" +
                                      "            ItemID:Titanium;" + "\r\n" +
                                      "            Required:2;" + "\r\n" +
                                      "        )," + "\r\n" +
                                      "        (" + "\r\n" +
                                      "            ItemID:Copper;" + "\r\n" +
                                      "            Required:3;" + "\r\n" +
                                      "        );" + "\r\n" +
                                      "    LinkedItemIDs:Silver,Gold;" + "\r\n" +
                                      "    ForceUnlockAtStart:NO;" + "\r\n" +
                                      "    Unlocks:ComputerChip,Cyclops;" + "\r\n" +
                                      ");" + "\r\n";


            var recipeList = new ModifiedRecipeList();

            recipeList.FromString(serialized);
            ModifiedRecipe recipe = recipeList[0];


            Assert.AreEqual(TechType.Aerogel, recipe.ItemID);
            Assert.AreEqual(1, recipe.AmountCrafted);

            Assert.AreEqual(2, recipe.IngredientsCount);
            Assert.AreEqual(TechType.Titanium, recipe.GetIngredient(0).ItemID);
            Assert.AreEqual(2, recipe.GetIngredient(0).Required);
            Assert.AreEqual(TechType.Copper, recipe.GetIngredient(1).ItemID);
            Assert.AreEqual(3, recipe.GetIngredient(1).Required);

            Assert.AreEqual(2, recipe.LinkedItemsCount);
            Assert.AreEqual(TechType.Silver, recipe.GetLinkedItem(0));
            Assert.AreEqual(TechType.Gold, recipe.GetLinkedItem(1));

            Assert.AreEqual(false, recipe.ForceUnlockAtStart);

            Assert.AreEqual(2, recipe.UnlocksCount);
            Assert.AreEqual(TechType.ComputerChip, recipe.GetUnlock(0));
            Assert.AreEqual(TechType.Cyclops, recipe.GetUnlock(1));
        }
        public static ModifiedRecipeList GetOriginals(CraftTree.Type treeType)
        {
            CraftTree tree = CraftTree.GetTree(treeType);

            IEnumerator <CraftNode> mover = tree.nodes.Traverse(true);

            var originals = new ModifiedRecipeList($"{treeType}Originals");

            while (mover.MoveNext())
            {
                if (mover.Current.action == TreeAction.Craft && mover.Current.techType0 < TechType.Databox)
                {
                    originals.Collections.Add(new ModifiedRecipe(mover.Current.techType0));
                }
            }
            ;

            return(originals);
        }
Esempio n. 9
0
        public void Sample_ModifiedRecipes_Ok()
        {
            var mRecipes = new ModifiedRecipeList();

            string sample = File.ReadAllText(SampleFileDirectory + "ModifiedRecipes_Samples.txt");

            bool result = mRecipes.FromString(sample);

            Assert.IsTrue(result);

            ModifiedRecipe reactorRodChange = mRecipes[2];

            Assert.AreEqual(TechType.ReactorRod.ToString(), reactorRodChange.ItemID);
            Assert.AreEqual(false, reactorRodChange.Ingredients.Count > 0);
            Assert.AreEqual(false, reactorRodChange.LinkedItemIDs.Count > 0);

            Assert.AreEqual(1, reactorRodChange.Unlocks.Count);
            Assert.AreEqual(TechType.DepletedReactorRod.ToString(), reactorRodChange.Unlocks[0]);
        }
        public void Deserialize_Other()
        {
            const string sample = "ModdifiedRecipes: " +
                                  "(ItemID:FiberMesh; AmountCrafted:1; Ingredients:(ItemID:CreepvinePiece; Required:1; ); )," +
                                  "(ItemID:Silicone; AmountCrafted:1; Ingredients:(ItemID:CreepvineSeedCluster; Required:1; ); )," +
                                  "(ItemID:PrecursorIonBattery; AmountCrafted:1; Ingredients:(ItemID:PrecursorIonCrystal; Required:1; ), (ItemID:Gold; Required:1; ), (ItemID:Silver; Required:1; ), (ItemID:Battery; Required:1; ); )," +
                                  "(ItemID:PrecursorIonPowerCell; AmountCrafted:1;Ingredients:(ItemID:PrecursorIonBattery; Required:2; ), (ItemID:Silicone; Required:1; ), (ItemID:PowerCell; Required:1; ); )," +
                                  "(ItemID:FilteredWater; AmountCrafted:2; Ingredients:(ItemID:Bladderfish; Required:1; ); )," +
                                  "(ItemID:FireExtinguisher; AmountCrafted:1; Ingredients:(ItemID:Titanium; Required:1; ); )," +
                                  "(ItemID:PrecursorKey_Purple; AmountCrafted:1; Ingredients:(ItemID:PrecursorIonCrystal; Required:1; ), (ItemID:Diamond; Required:1; ); ); ";

            var recipes = new ModifiedRecipeList();

            bool success = recipes.FromString(sample);

            Assert.IsTrue(success);

            Console.WriteLine(recipes.PrettyPrint());
        }
        public void Deserialize_ModifiedRecipesList_NoAmounts_Defaults()
        {
            const string serialized = "ModifiedRecipes:" + "\r\n" +
                                      "(" + "\r\n" +
                                      "    ItemID:Aerogel;" + "\r\n" +
                                      "    Ingredients:" + "\r\n" +
                                      "        (" + "\r\n" +
                                      "            ItemID:Titanium;" + "\r\n" +
                                      "        )," + "\r\n" +
                                      "        (" + "\r\n" +
                                      "            ItemID:Copper;" + "\r\n" +
                                      "        );" + "\r\n" +
                                      ")," + "\r\n" +
                                      "(" + "\r\n" +
                                      "    ItemID:Aerogel;" + "\r\n" +
                                      "    Ingredients:" + "\r\n" +
                                      "        (" + "\r\n" +
                                      "            ItemID:Titanium;" + "\r\n" +
                                      "        )," + "\r\n" +
                                      "        (" + "\r\n" +
                                      "            ItemID:Copper;" + "\r\n" +
                                      "        );" + "\r\n" +
                                      ");" + "\r\n";


            var recipe = new ModifiedRecipeList();

            recipe.FromString(serialized);

            Assert.AreEqual(TechType.Aerogel, recipe[0].ItemID);
            Assert.AreEqual(false, recipe[0].AmountCrafted.HasValue);

            Assert.AreEqual(2, recipe[0].IngredientsCount);
            Assert.AreEqual(TechType.Titanium, recipe[0].GetIngredient(0).ItemID);
            Assert.AreEqual(1, recipe[0].GetIngredient(0).Required);
            Assert.AreEqual(TechType.Copper, recipe[0].GetIngredient(1).ItemID);
            Assert.AreEqual(1, recipe[0].GetIngredient(1).Required);

            Assert.AreEqual(false, recipe[0].LinkedItemsCount.HasValue);
            Assert.AreEqual(false, recipe[0].UnlocksCount.HasValue);
            Assert.AreEqual(false, recipe[0].ForceUnlockAtStart);
        }
        public void Deserialize_ModifiedRecipesList_NoAmounts_DefaultTo1()
        {
            const string serialized = "ModifiedRecipes:" + "\r\n" +
                                      "(" + "\r\n" +
                                      "    ItemID:Aerogel;" + "\r\n" +
                                      "    Ingredients:" + "\r\n" +
                                      "        (" + "\r\n" +
                                      "            ItemID:Titanium;" + "\r\n" +
                                      "        )," + "\r\n" +
                                      "        (" + "\r\n" +
                                      "            ItemID:Copper;" + "\r\n" +
                                      "        );" + "\r\n" +
                                      ")," + "\r\n" +
                                      "(" + "\r\n" +
                                      "    ItemID:Aerogel;" + "\r\n" +
                                      "    Ingredients:" + "\r\n" +
                                      "        (" + "\r\n" +
                                      "            ItemID:Titanium;" + "\r\n" +
                                      "        )," + "\r\n" +
                                      "        (" + "\r\n" +
                                      "            ItemID:Copper;" + "\r\n" +
                                      "        );" + "\r\n" +
                                      ");" + "\r\n";


            var recipe = new ModifiedRecipeList();

            recipe.FromString(serialized);

            Assert.AreEqual(TechType.Aerogel, recipe[0].ItemID);
            Assert.AreEqual(1, recipe[0].AmountCrafted);

            Assert.AreEqual(2, recipe[0].SmlIngredients.Count);
            Assert.AreEqual(TechType.Titanium, recipe[0].SmlIngredients[0].techType);
            Assert.AreEqual(1, recipe[0].SmlIngredients[0].amount);
            Assert.AreEqual(TechType.Copper, recipe[0].SmlIngredients[1].techType);
            Assert.AreEqual(1, recipe[0].SmlIngredients[1].amount);

            Assert.AreEqual(0, recipe[0].LinkedItems.Count);
        }
Esempio n. 13
0
        private static void PatchModifiedRecipes()
        {
            modifiedRecipeList = new ModifiedRecipeList();
            if (File.Exists(ModifiedRecipesFile))
            {
                string serializedData = File.ReadAllText(ModifiedRecipesFile);
                if (!string.IsNullOrEmpty(serializedData) && modifiedRecipeList.Deserialize(serializedData) && modifiedRecipeList.Count > 0)
                {
                    foreach (IModifiedRecipe item in modifiedRecipeList)
                    {
                        try
                        {
                            CustomCraft.ModifyRecipe(item.ItemID, item.SmlHelperRecipe());
                        }
                        catch
                        {
                            Logger.Log($"Error on ModifyRecipe{Environment.NewLine}" +
                                       $"Entry with error:{Environment.NewLine}" +
                                       $"{item}");
                        }
                    }

                    Logger.Log($"ModifiedRecipes loaded. File reformatted.");
                    File.WriteAllText(ModifiedRecipesFile, modifiedRecipeList.PrintyPrint());
                }
                else
                {
                    Logger.Log($"No ModifiedRecipes were loaded. File was empty or malformed.");
                }
            }
            else
            {
                File.WriteAllText(ModifiedRecipesFile, $"# Modified Recipes #{Environment.NewLine}" +
                                  $"# Check the ModifiedRecipes_Samples.txt file in the SampleFiles folder for details on how to alter existing crafting recipes #{Environment.NewLine}");
                Logger.Log($"{ModifiedRecipesFile} file not found. Empty file created.");
            }
        }
Esempio n. 14
0
        private static void GenerateOriginalsFile(string key, List <TechType> list, string fileName)
        {
            var printyPrints = new List <string>();

            printyPrints.AddRange(EmUtils.CommentTextLinesCentered(new string[]
            {
                "This file was generated with original recipes in the game",
                "You can copy individual entries from this file to use in your personal overrides",
                "--------------------------------------------------------------------------------",
            }));

            var originals = new ModifiedRecipeList();

            foreach (TechType craftable in list)
            {
                originals.Add(new ModifiedRecipe(craftable));
            }

            printyPrints.Add(originals.PrettyPrint());

            File.WriteAllLines(OriginalsFolder + fileName, printyPrints.ToArray());

            Logger.Log($"{fileName} file not found. File generated.");
        }