private void CreateStation(FactoryType factoryType, string codename, int maxStack, LocalizedString name, LocalizedString desc, string guidString, Sprite icon, string variantname, RecipeCategory[] categories) { var category = GameResources.Instance.Items.FirstOrDefault(s => s.AssetId == productionStationGUID)?.Category; var item = ScriptableObject.CreateInstance <ItemDefinition>(); if (item == null) { Debug.Log("Item is null"); return; } if (category == null) { Debug.Log("Category is null"); return; } item.name = codename; item.Category = category; item.MaxStack = maxStack; item.Icon = icon; var prefabParent = new GameObject(); var olditem = GameResources.Instance.Items.FirstOrDefault(s => s.AssetId == productionStationGUID); prefabParent.SetActive(false); var newmodule = Instantiate(olditem.Prefabs[0], prefabParent.transform); var module = newmodule.GetComponentInChildren <FactoryStation>(); var producer = newmodule.GetComponentInChildren <Producer>(); newmodule.SetName("AlloyForgeStation"); var gridmodule = newmodule.GetComponent <GridModule>(); gridmodule.VariantName = variantname; gridmodule.Item = item; var productionGroup = QuestingReferences.GetOrCreateTyping(factoryType); LocalizedString nameStr = name; LocalizedString descStr = desc; Initialize(ref nameStr); Initialize(ref descStr); item.SetPrivateField("m_name", nameStr); item.SetPrivateField("m_description", descStr); typeof(FactoryStation).GetField("m_factoryType", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(module, factoryType); typeof(FactoryStation).GetField("m_productionGroup", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(module, productionGroup); typeof(Producer).GetField("m_categories", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(producer, categories); var guid = GUID.Parse(guidString); typeof(Definition).GetField("m_assetId", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).SetValue(item, guid); item.Prefabs = new GameObject[] { newmodule }; AssetReference[] assets = new AssetReference[] { new AssetReference() { Object = item, Guid = guid, Labels = new string[0] } }; RuntimeAssetStorage.Add(assets, default); QuestingDict.questingRegistry[codename] = guid; }
public void InitCategories() { foreach (KeyValuePair <Category, GUID> dict in questingCategories) { if (dict.Key.category_type == "recipe") { CreateRecipeCategory(dict.Key.name, dict.Key.guid); } else if (dict.Key.category_type == "factory") { CreateFactoryCategory(dict.Key.name, dict.Key.guid); } else if (dict.Key.category_type == "module") { CreateModuleCategory(dict.Key.name, dict.Key.guid); } else { return; } } QuestingStations stations = new QuestingStations(); QuestingReferences.GetOrCreateTyping(stations.FindFactoryCategories("AlloyForge")); QuestLog.Log("[Questing Update | Categories]: Categories Loaded..."); }
public void CreateProductionModule(string codename, string variantname, int maxstack, string baseitem, LocalizedString name, LocalizedString desc, string guidstring, string categoryname, string factorytypename, Sprite icon, RecipeCategory[] categories) { var category = GameResources.Instance.Items.FirstOrDefault(s => s.name == categoryname).Category; var item = ScriptableObject.CreateInstance <ItemDefinition>(); item.name = codename; item.Category = category; item.MaxStack = maxstack; item.Icon = icon; var prefabParent = new GameObject(); var olditem = GameResources.Instance.Items.FirstOrDefault(s => s.name == baseitem); var factorytype = GameResources.Instance.FactoryTypes.FirstOrDefault(s => s.name == factorytypename); prefabParent.SetActive(false); var newmodule = Instantiate(olditem.Prefabs[0], prefabParent.transform); var module = newmodule.GetComponentInChildren <ProductionModule>(); var gridmodule = newmodule.GetComponent <GridModule>(); gridmodule.VariantName = variantname; gridmodule.Item = item; item.Prefabs = new GameObject[] { newmodule }; var modulecategory = RuntimeAssetCacheLookup.Get <ModuleCategory>().First(s => s.name == factorytypename); modulecategory.Modules = modulecategory.Modules.Concat(new ItemDefinition[] { item }).ToArray(); var productionGroup = QuestingReferences.GetOrCreateTyping(factorytype); LocalizedString nameStr = name; LocalizedString descStr = desc; Initialize(ref nameStr); Initialize(ref descStr); typeof(ProductionModule).GetField("m_factoryType", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(module, factorytype); typeof(ProductionModule).GetField("m_module", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(module, gridmodule); typeof(ProductionModule).GetField("m_categories", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(module, categories); typeof(ProductionModule).GetField("m_productionGroup", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(module, productionGroup); typeof(ItemDefinition).GetField("m_name", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(item, nameStr); typeof(ItemDefinition).GetField("m_description", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(item, descStr); var guid = GUID.Parse(guidstring); typeof(Definition).GetField("m_assetId", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).SetValue(item, guid); AssetReference[] assets = new AssetReference[] { new AssetReference() { Object = item, Guid = guid, Labels = new string[0] } }; RuntimeAssetStorage.Add(assets, default); using (StreamWriter writer = new StreamWriter(QuestingMod.path, true)) { writer.WriteLine("[Questing Update | Modules]: Module " + codename + " has been loaded"); writer.Dispose(); } }
public void InitCategories() { CreateRecipeCategory("ForgeTier1", "DF5145974CB54D7F972367F70CA75099"); CreateRecipeCategory("ForgeTier2", "EF4888B484944B4DB20B100FE3ED4760"); CreateRecipeCategory("ForgeTier3", "52BACA27F2744A11AC5A8FDDFD393426"); CreateFactoryCategory("AlloyForge", ALLOY_FORGE_FACTORY_GUID); CreateModuleCategory("AlloyForge", "EAB2EA1154F34FFF8CC74CA0C23ECACD"); QuestingStations stations = new QuestingStations(); QuestingReferences.GetOrCreateTyping(stations.FindFactoryCategories("AlloyForge")); using (StreamWriter writer = new StreamWriter(QuestingMod.path, true)) { writer.WriteLine("[Questing Update | Categories]: Categories Loaded..."); writer.Dispose(); } Debug.Log("[Questing Update | Categories]: Categories Loaded..."); }