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); } }