private void RecipePageInit(DialogPage page) { var model = GetDataModel <Model>(); var player = GetPC(); var meetsRequirements = true; string BuildHeader() { var recipe = Craft.GetRecipe(model.SelectedRecipe); var category = Craft.GetCategoryDetail(recipe.Category); var skill = Skill.GetSkillDetails(recipe.Skill); // Recipe quantity and name. var header = $"{ColorToken.Green("Recipe:")} {recipe.Quantity}x {recipe.Name} \n"; // Associated skill header += $"{ColorToken.Green("Craft:")} {skill.Name}\n"; // Associated category header += $"{ColorToken.Green("Category:")} {category.Name}\n"; // Recipe's description, if available. if (!string.IsNullOrWhiteSpace(recipe.Description)) { header += $"{ColorToken.Green("Description:")} {recipe.Description} \n"; } // Chance to craft header += $"{ColorToken.Green("Chance to Auto-Craft:")} {Craft.CalculateChanceToCraft(player, model.SelectedRecipe)}%"; // List of requirements, if applicable. if (recipe.Requirements.Count > 0) { header += $"\n{ColorToken.Green("Requirements:")}\n\n"; foreach (var req in recipe.Requirements) { // If the player meets the requirement, show it in green. Otherwise show it in red. if (string.IsNullOrWhiteSpace(req.CheckRequirements(player))) { header += $"{ColorToken.Green(req.RequirementText)}\n"; } else { header += $"{ColorToken.Red(req.RequirementText)}\n"; meetsRequirements = false; } } } // List of components header += $"\n\n{ColorToken.Green("Components:")}\n\n"; foreach (var(resref, quantity) in recipe.Components) { var name = Cache.GetItemNameByResref(resref); header += $"{quantity}x {name}\n"; } return(header); } page.Header = BuildHeader(); if (model.IsFabricator && meetsRequirements) { page.AddResponse("Select Recipe", () => { var state = Craft.GetPlayerCraftingState(player); state.SelectedRecipe = model.SelectedRecipe; EndConversation(); Player.ForcePlaceableInventoryWindow(player, OBJECT_SELF); }); } }