예제 #1
0
        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);
        }
예제 #2
0
 public static void RegisterRecipe(RecipeStub rs)
 {
     RecipeStubs.Add(rs);
 }