Esempio n. 1
0
        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...");
        }
Esempio n. 3
0
        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();
            }
        }
Esempio n. 4
0
        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...");
        }