예제 #1
0
        private void InvokeOnItemsRegisteredFejd(On.ObjectDB.orig_CopyOtherDB orig, ObjectDB self, ObjectDB other)
        {
            orig(self, other);

            if (SceneManager.GetActiveScene().name == "start" && self.IsValid())
            {
                OnItemsRegisteredFejd?.SafeInvoke();
            }
        }
예제 #2
0
        /// <summary>
        ///     Hook on <see cref="ObjectDB.CopyOtherDB"/> to add custom items to FejdStartup screen (aka main menu)
        /// </summary>
        /// <param name="orig"></param>
        /// <param name="self"></param>
        /// <param name="other"></param>
        private void RegisterCustomDataFejd(On.ObjectDB.orig_CopyOtherDB orig, ObjectDB self, ObjectDB other)
        {
            OnVanillaItemsAvailable?.SafeInvoke();

            orig(self, other);

            if (SceneManager.GetActiveScene().name == "start")
            {
                var isValid = self.IsValid();
                ItemDropMockFix.Switch(!isValid);

                if (isValid)
                {
                    RegisterCustomItems(self);

                    self.UpdateItemHashes();
                }
            }
        }
예제 #3
0
        private void AddClonedItems(On.ObjectDB.orig_CopyOtherDB orig, ObjectDB self, ObjectDB other)
        {
            // You want that to run only once, JotunnLib has the item cached for the game session
            if (!clonedItemsProcessed)
            {
                coreSlot = new OverclockCoreSlotPrefabConfig();
                ItemManager.Instance.AddItem(coreSlot);
                coreSlot.PrefabCreated();
                speedCore = new OverclockSpeedCorePrefabConfig();
                ItemManager.Instance.AddItem(speedCore);
                speedCore.PrefabCreated();
                efficiencyCore = new OverclockEfficiencyCorePrefabConfig();
                ItemManager.Instance.AddItem(efficiencyCore);
                efficiencyCore.PrefabCreated();
                productivityCore = new OverclockProductivityCorePrefabConfig();
                ItemManager.Instance.AddItem(productivityCore);
                productivityCore.PrefabCreated();

                clonedItemsProcessed = true;
            }
            orig(self, other);
        }
예제 #4
0
        // Implementation of cloned items
        private void AddClonedItems(On.ObjectDB.orig_CopyOtherDB orig, ObjectDB self, ObjectDB other)
        {
            // You want that to run only once, JotunnLib has the item cached for the game session
            if (!clonedItemsProcessed)
            {
                try
                {
                    // Create a custom resource based on Wood
                    CustomItem recipeComponent = new CustomItem("CustomWood", "Wood");
                    ItemManager.Instance.AddItem(recipeComponent);
                    recipeComponent.ItemDrop.m_itemData.m_shared.m_name        = "$item_customWood";
                    recipeComponent.ItemDrop.m_itemData.m_shared.m_description = "$item_customWood_desc";

                    // Create and add a custom item based on SwordBlackmetal
                    CustomItem CI = new CustomItem("EvilSword", "SwordBlackmetal");
                    ItemManager.Instance.AddItem(CI);

                    // Replace vanilla properties of the custom item
                    var itemDrop = CI.ItemDrop;
                    itemDrop.m_itemData.m_shared.m_name        = "$item_evilsword";
                    itemDrop.m_itemData.m_shared.m_description = "$item_evilsword_desc";

                    RecipeEvilSword(itemDrop);

                    KeyHintsEvilSword();
                }
                catch (Exception ex)
                {
                    Jotunn.Logger.LogError($"Error while adding cloned item: {ex.Message}");
                }
                finally
                {
                    clonedItemsProcessed = true;
                }
            }

            // Hook is prefix, we just need to be able to get the vanilla prefabs, JotunnLib registers them in ObjectDB
            orig(self, other);
        }
예제 #5
0
        private void AddClonedItems(On.ObjectDB.orig_CopyOtherDB orig, ObjectDB self, ObjectDB other)
        {
            try
            {
                PieceManager.Instance.AddPieceTable(PlanHammerPrefabConfig.pieceTableName);
                PlanCrystalPrefabConfig.startPlanCrystalEffectPrefab = PrefabManager.Instance.CreateClonedPrefab(PlanCrystalPrefabConfig.prefabName + "StartEffect", "vfx_blocked");
                PlanCrystalPrefabConfig.startPlanCrystalEffectPrefab.AddComponent <StartPlanCrystalStatusEffect>();
                PlanCrystalPrefabConfig.stopPlanCrystalEffectPrefab = PrefabManager.Instance.CreateClonedPrefab(PlanCrystalPrefabConfig.prefabName + "StopEffect", "vfx_blocked");
                PlanCrystalPrefabConfig.stopPlanCrystalEffectPrefab.AddComponent <StopPlanCrystalStatusEffect>();
                planHammerPrefabConfig  = new PlanHammerPrefabConfig();
                planCrystalPrefabConfig = new PlanCrystalPrefabConfig();

                ItemManager.Instance.AddItem(planHammerPrefabConfig);
                ItemManager.Instance.AddItem(planCrystalPrefabConfig);
                planHammerPrefabConfig.Register();
                planCrystalPrefabConfig.Register();
            }
            finally
            {
                On.ObjectDB.CopyOtherDB -= AddClonedItems;
            }
            orig(self, other);
        }