using HarmonyLib; using GadgetCore.API; using UnityEngine; using System.Collections; using System.Reflection; using System.Collections.Generic; namespace RecipeMenuCore.Patches { [HarmonyPatch(typeof(GameScript))] [HarmonyPatch("RefreshRecipeUnlock")] [HarmonyGadget("RecipeMenuCore")] public static class Patch_GameScript_RefreshRecipeUnlock { private static Material recipeLockSmall = new Material(Shader.Find("Unlit/Transparent")) { mainTexture = GadgetCoreAPI.LoadTexture2D("recipeLockSmall.png") }; private static Material recipeLock = new Material(Shader.Find("Unlit/Transparent")) { mainTexture = GadgetCoreAPI.LoadTexture2D("recipeLock.png") }; [HarmonyPrefix] public static bool Prefix(GameScript __instance, int ___craftType, int ___curRecipePage, GameObject ___ultLocksObj, GameObject ___recipeButtons, GameObject[] ___recipeLock, GameObject[] ___ultLocks, int[,] ___ultLocksUnlocked) { if (___craftType == 0 || ___craftType == 1 || ___craftType == MenuRegistry.Singleton["Gadget Core:Crafter Menu"].GetID() || CraftTypeHelper.IsCraftTypeRegisteredAsCustom(___craftType)) { for (int i = 0; i < 12; i++) { ___recipeButtons.transform.GetChild(i).gameObject.SetActive(true); ___recipeLock[i].GetComponent().material = recipeLock; } } var hoverElements = ___ultLocksObj.transform.parent.Find("hoverElements").gameObject; hoverElements.SetActive(false); if (___craftType == 2 && ___curRecipePage < 6 && Core.pageUltimateForgeInfoListVanilla[___curRecipePage] == null) { hoverElements.SetActive(true); for (int i = 0; i < 36; i++) { if (___ultLocksUnlocked[___curRecipePage, i] == 0) { hoverElements.transform.GetChild(i).gameObject.SetActive(false); } else { hoverElements.transform.GetChild(i).gameObject.SetActive(true); } } } if (___craftType == 0 && (___curRecipePage >= 6 || Core.pageGearForgeInfoListVanilla[___curRecipePage] != null)) { ___ultLocksObj.SetActive(false); ___recipeButtons.SetActive(true); var page = ___curRecipePage >= 6 ? Core.pageGearForgeInfoList[___curRecipePage - 6] : Core.pageGearForgeInfoListVanilla[___curRecipePage]; for (int i = 0; i < 12; i++) { if (page.GetRecipePageEntries().Length > i) { int itemID = page.GetRecipePageEntries()[i].ItemIdBase; if (__instance.RecipeCraftedAlready(itemID, page.GetRecipePageEntries()[i].MinAmount)) ___recipeLock[i].SetActive(false); else { if (page.GetRecipePageEntries()[i].AllwaysShowInput) ___recipeLock[i].GetComponent().material = recipeLockSmall; ___recipeLock[i].SetActive(true); } } else { ___recipeLock[i].SetActive(false); ___recipeButtons.transform.GetChild(i).gameObject.SetActive(false); } } return false; } else if (___craftType == 1 && (___curRecipePage >= 2 || Core.pageAlchemyStationInfoListVanilla[___curRecipePage] != null)) { ___ultLocksObj.SetActive(false); ___recipeButtons.SetActive(true); var page = ___curRecipePage >= 6 ? Core.pageAlchemyStationInfoList[___curRecipePage - 2] : Core.pageAlchemyStationInfoListVanilla[___curRecipePage]; for (int i = 0; i < 12; i++) { if (page.GetRecipePageEntries().Length > i) { int itemID = page.GetRecipePageEntries()[i].ItemIdBase; if (__instance.RecipeCraftedAlready(itemID, page.GetRecipePageEntries()[i].MinAmount)) ___recipeLock[i].SetActive(false); else { if (page.GetRecipePageEntries()[i].AllwaysShowInput) ___recipeLock[i].GetComponent().material = recipeLockSmall; ___recipeLock[i].SetActive(true); } } else { ___recipeLock[i].SetActive(false); ___recipeButtons.transform.GetChild(i).gameObject.SetActive(false); } } return false; } else if (___craftType == 2 && (___curRecipePage >= 6 || Core.pageUltimateForgeInfoListVanilla[___curRecipePage] != null)) { hoverElements.SetActive(true); ___ultLocksObj.SetActive(true); ___recipeButtons.SetActive(false); var page = ___curRecipePage >= 6 ? Core.pageUltimateForgeInfoList[___curRecipePage - 6] : Core.pageUltimateForgeInfoListVanilla[___curRecipePage]; for (int i = 0; i < 36; i++) { if (i < 12) { ___recipeLock[i].SetActive(false); } if (page.GetRecipePageEntries().Length > i / 3) { int itemID = page.GetRecipePageEntries()[i / 3].ItemIdExtension[i % 3]; if (__instance.RecipeCraftedAlready(itemID, 1)) { ___ultLocks[i].SetActive(false); hoverElements.transform.GetChild(i).gameObject.SetActive(true); } else { ___ultLocks[i].SetActive(true); hoverElements.transform.GetChild(i).gameObject.SetActive(false); } } else { ___ultLocks[i].SetActive(false); hoverElements.transform.GetChild(i).gameObject.SetActive(false); } } return false; } else if (___craftType == MenuRegistry.Singleton["Gadget Core:Crafter Menu"].GetID()) { ___ultLocksObj.SetActive(false); ___recipeButtons.SetActive(true); var page = Core.pageUniversalCrafterInfoList[___curRecipePage]; for (int i = 0; i < 12; i++) { if (page.GetRecipePageEntries().Length > i) { int itemID = page.GetRecipePageEntries()[i].ItemIdBase; if (((CraftMenuInfo)MenuRegistry.Singleton["Gadget Core:Crafter Menu"]).IsRecipeUnlocked(itemID)) ___recipeLock[i].SetActive(false); else { if (page.GetRecipePageEntries()[i].AllwaysShowInput) ___recipeLock[i].GetComponent().material = recipeLockSmall; ___recipeLock[i].SetActive(true); } } else { ___recipeLock[i].SetActive(false); ___recipeButtons.transform.GetChild(i).gameObject.SetActive(false); } } return false; } else if (CraftTypeHelper.IsCraftTypeRegisteredAsCustom(___craftType)) { string s = CraftTypeHelper.GetNameFromCraftTypeRegisteredAsCustom(___craftType); ___ultLocksObj.SetActive(false); ___recipeButtons.SetActive(true); var page = Core.pageCustomCrafterInfoLists[s][___curRecipePage]; for (int i = 0; i < 12; i++) { if (page.GetRecipePageEntries().Length > i) { var revers = page.GetRecipePageEntries()[i].IsReverse; int itemID = page.GetRecipePageEntries()[i].ItemIds[revers ? 0 : 3]; if (((CraftMenuInfo)MenuRegistry.Singleton[s]).IsRecipeUnlocked(itemID)) ___recipeLock[i].SetActive(false); else { if (page.GetRecipePageEntries()[i].AllwaysShowInput) ___recipeLock[i].GetComponent().material = recipeLockSmall; ___recipeLock[i].SetActive(true); } } else { ___recipeLock[i].SetActive(false); ___recipeButtons.transform.GetChild(i).gameObject.SetActive(false); } } return false; } return true; } } }