public static Recipe BuildRecipe(RecipeStub rs, ObjectDB odb) { var recipe = ScriptableObject.CreateInstance <Recipe>(); recipe.m_item = rs.Item; recipe.m_craftingStation = odb.GetItemPrefab(rs.CraftingStation)?.GetComponentInChildren <CraftingStation>(true); if (recipe.m_craftingStation == null) { recipe.m_craftingStation = ZNetScene.instance?.GetPrefab(rs.CraftingStation)?.GetComponentInChildren <CraftingStation>(true); if (recipe.m_craftingStation == null) { Plugin.Log.LogInfo("BuildRecipe couldn't find crafting station " + rs.CraftingStation + " for " + rs.Name); return(null); } } if (!string.IsNullOrWhiteSpace(rs.RepairStation)) { recipe.m_repairStation = odb.GetItemPrefab(rs.RepairStation)?.GetComponentInChildren <CraftingStation>(true); if (recipe.m_repairStation == null) { recipe.m_repairStation = ZNetScene.instance?.GetPrefab(rs.RepairStation)?.GetComponentInChildren <CraftingStation>(true); if (recipe.m_repairStation == null) { Plugin.Log.LogInfo("BuildRecipe couldn't find declared repair station " + rs.RepairStation + " for " + rs.Name); return(null); } } if (recipe.m_repairStation == null) { return(null); } } recipe.m_minStationLevel = Mathf.Max(1, rs.MinStationLevel); List <Piece.Requirement> reqs = new List <Piece.Requirement>(); foreach (RecipeStub.RequirementStub r in rs.Requirements) { ItemDrop id = odb.GetItemPrefab(r.Component)?.GetComponentInChildren <ItemDrop>(true); if (!id) { Plugin.Log.LogInfo("BuildRecipe couldn't get requirement component " + r.Component + " for " + rs.Name); return(null); } Piece.Requirement pr = new Piece.Requirement(); pr.m_resItem = id; pr.m_amount = r.Amount; pr.m_amountPerLevel = r.AmountPerLevel; pr.m_recover = r.Recoverable; reqs.Add(pr); } recipe.m_resources = reqs.ToArray(); return(recipe); }
public static void RegisterRecipe(RecipeStub rs) { RecipeStubs.Add(rs); }