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); }
public void Sample_ModifiedRecipes2_Ok() { var mRecipes = new ModifiedRecipeList(); string sample = File.ReadAllText(SampleFileDirectory + "Mattus666.txt"); bool result = mRecipes.FromString(sample); Assert.IsTrue(result); }
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); }
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); }
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."); } }
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."); }