private void InvokeOnItemsRegisteredFejd(On.ObjectDB.orig_CopyOtherDB orig, ObjectDB self, ObjectDB other) { orig(self, other); if (SceneManager.GetActiveScene().name == "start" && self.IsValid()) { OnItemsRegisteredFejd?.SafeInvoke(); } }
/// <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(); } } }
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); }
// 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); }
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); }