Ejemplo n.º 1
0
        public static void TryRegisterRecipes()
        {
            if (ObjectDB.instance == null)
            {
                return;
            }

            var wrongTime = (ObjectDB.instance?.m_items?.Count == 0);

            if (!wrongTime)
            {
                Log("TryRegisterRecipes (" + ObjectDB.instance?.m_items?.Count + " items in the database).");
            }

            var resources = new List <string>();

            foreach (var data in runesData)
            {
                foreach (var item in data.resources)
                {
                    if (!resources.Contains(item))
                    {
                        resources.Add(item);
                    }
                }
            }

            var missing = new List <string>();

            foreach (var value in resources)
            {
                var parts = value.Split(':');
                var item  = parts[0];
                var pref  = ObjectDB.instance.GetItemPrefab(item);
                if (pref == null)
                {
                    missing.Add(item);
                }
            }

            if (missing.Count > 0)
            {
                if (!wrongTime)
                {
                    Log("Some requeriments are not ready yet (" + string.Join(", ", missing) + "). Let's try again in few miliseconds...");
                }
                tryAgain     = true;
                tryAgainTime = 0f;
                return;
            }
            else
            {
                Log("All requeriments are ready!");
            }

            TryRegisterItems();

            PrefabCreator.Reset();
            foreach (var data in runesData)
            {
                var mats = new List <RecipeRequirementConfig>();

                var min = data.rank - 3;
                if (min < 0)
                {
                    min = 0;
                }

                for (var i = min; i < data.rank; i++)
                {
                    var value  = data.resources[i];
                    var parts  = value.Split(':');
                    var item   = parts[0];
                    var amount = 1;
                    if (parts.Length == 2)
                    {
                        amount = int.Parse(parts[1]);
                    }
                    mats.Add(new RecipeRequirementConfig {
                        item = item, amount = amount
                    });
                }

                data.recipe.craftingStation = null;

                if (data.recipe.amount == 0)
                {
                    data.recipe.amount = runesConfig.defRecipes.amount;
                }
                if (data.recipe.minStationLevel == 0)
                {
                    data.recipe.minStationLevel = runesConfig.defRecipes.minStationLevel;
                }
                if (data.recipe.repairStation == "")
                {
                    data.recipe.repairStation = runesConfig.defRecipes.repairStation;
                }

                data.recipe.resources = mats;
                data.recipe.enabled   = true;

                data.itemDrop.m_itemData.m_shared.m_name         = data.name;
                data.itemDrop.m_itemData.m_shared.m_description  = data.description;
                data.itemDrop.m_itemData.m_shared.m_maxStackSize = 100;
                data.itemDrop.m_itemData.m_shared.m_weight       = 0.1f;
                PrefabCreator.AddNewRuneRecipe(data);
                var rune = new Rune(data, null);
                runes.Add(rune);
            }
        }