Patch_GameScript_RefreshRecipeUnlock.cs 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. using HarmonyLib;
  2. using GadgetCore.API;
  3. using UnityEngine;
  4. using System.Collections;
  5. using System.Reflection;
  6. using System.Collections.Generic;
  7. namespace RecipeMenuCore.Patches
  8. {
  9. [HarmonyPatch(typeof(GameScript))]
  10. [HarmonyPatch("RefreshRecipeUnlock")]
  11. [HarmonyGadget("RecipeMenuCore")]
  12. public static class Patch_GameScript_RefreshRecipeUnlock
  13. {
  14. private static Material recipeLockSmall = new Material(Shader.Find("Unlit/Transparent"))
  15. {
  16. mainTexture = GadgetCoreAPI.LoadTexture2D("recipeLockSmall.png")
  17. };
  18. private static Material recipeLock = new Material(Shader.Find("Unlit/Transparent"))
  19. {
  20. mainTexture = GadgetCoreAPI.LoadTexture2D("recipeLock.png")
  21. };
  22. [HarmonyPrefix]
  23. public static bool Prefix(GameScript __instance, int ___craftType, int ___curRecipePage, GameObject ___ultLocksObj, GameObject ___recipeButtons,
  24. GameObject[] ___recipeLock, GameObject[] ___ultLocks, int[,] ___ultLocksUnlocked)
  25. {
  26. if (___craftType == 0 || ___craftType == 1 || ___craftType == MenuRegistry.Singleton["Gadget Core:Crafter Menu"].GetID()
  27. || CraftTypeHelper.IsCraftTypeRegisteredAsCustom(___craftType))
  28. {
  29. for (int i = 0; i < 12; i++)
  30. {
  31. ___recipeButtons.transform.GetChild(i).gameObject.SetActive(true);
  32. ___recipeLock[i].GetComponent<Renderer>().material = recipeLock;
  33. }
  34. }
  35. var hoverElements = ___ultLocksObj.transform.parent.Find("hoverElements").gameObject;
  36. hoverElements.SetActive(false);
  37. if (___craftType == 2 && ___curRecipePage < 6 && Core.pageUltimateForgeInfoListVanilla[___curRecipePage] == null)
  38. {
  39. hoverElements.SetActive(true);
  40. for (int i = 0; i < 36; i++)
  41. {
  42. if (___ultLocksUnlocked[___curRecipePage, i] == 0)
  43. {
  44. hoverElements.transform.GetChild(i).gameObject.SetActive(false);
  45. }
  46. else
  47. {
  48. hoverElements.transform.GetChild(i).gameObject.SetActive(true);
  49. }
  50. }
  51. }
  52. if (___craftType == 0 && (___curRecipePage >= 6 || Core.pageGearForgeInfoListVanilla[___curRecipePage] != null))
  53. {
  54. ___ultLocksObj.SetActive(false);
  55. ___recipeButtons.SetActive(true);
  56. var page = ___curRecipePage >= 6 ? Core.pageGearForgeInfoList[___curRecipePage - 6] : Core.pageGearForgeInfoListVanilla[___curRecipePage];
  57. for (int i = 0; i < 12; i++)
  58. {
  59. if (page.GetRecipePageEntries().Length > i)
  60. {
  61. int itemID = page.GetRecipePageEntries()[i].ItemIdBase;
  62. if (__instance.RecipeCraftedAlready(itemID, page.GetRecipePageEntries()[i].MinAmount))
  63. ___recipeLock[i].SetActive(false);
  64. else
  65. {
  66. if (page.GetRecipePageEntries()[i].AllwaysShowInput)
  67. ___recipeLock[i].GetComponent<Renderer>().material = recipeLockSmall;
  68. ___recipeLock[i].SetActive(true);
  69. }
  70. }
  71. else
  72. {
  73. ___recipeLock[i].SetActive(false);
  74. ___recipeButtons.transform.GetChild(i).gameObject.SetActive(false);
  75. }
  76. }
  77. return false;
  78. }
  79. else if (___craftType == 1 && (___curRecipePage >= 2 || Core.pageAlchemyStationInfoListVanilla[___curRecipePage] != null))
  80. {
  81. ___ultLocksObj.SetActive(false);
  82. ___recipeButtons.SetActive(true);
  83. var page = ___curRecipePage >= 6 ? Core.pageAlchemyStationInfoList[___curRecipePage - 2] : Core.pageAlchemyStationInfoListVanilla[___curRecipePage];
  84. for (int i = 0; i < 12; i++)
  85. {
  86. if (page.GetRecipePageEntries().Length > i)
  87. {
  88. int itemID = page.GetRecipePageEntries()[i].ItemIdBase;
  89. if (__instance.RecipeCraftedAlready(itemID, page.GetRecipePageEntries()[i].MinAmount))
  90. ___recipeLock[i].SetActive(false);
  91. else
  92. {
  93. if (page.GetRecipePageEntries()[i].AllwaysShowInput)
  94. ___recipeLock[i].GetComponent<Renderer>().material = recipeLockSmall;
  95. ___recipeLock[i].SetActive(true);
  96. }
  97. }
  98. else
  99. {
  100. ___recipeLock[i].SetActive(false);
  101. ___recipeButtons.transform.GetChild(i).gameObject.SetActive(false);
  102. }
  103. }
  104. return false;
  105. }
  106. else if (___craftType == 2 && (___curRecipePage >= 6 || Core.pageUltimateForgeInfoListVanilla[___curRecipePage] != null))
  107. {
  108. hoverElements.SetActive(true);
  109. ___ultLocksObj.SetActive(true);
  110. ___recipeButtons.SetActive(false);
  111. var page = ___curRecipePage >= 6 ? Core.pageUltimateForgeInfoList[___curRecipePage - 6] : Core.pageUltimateForgeInfoListVanilla[___curRecipePage];
  112. for (int i = 0; i < 36; i++)
  113. {
  114. if (i < 12)
  115. {
  116. ___recipeLock[i].SetActive(false);
  117. }
  118. if (page.GetRecipePageEntries().Length > i / 3)
  119. {
  120. int itemID = page.GetRecipePageEntries()[i / 3].ItemIdExtension[i % 3];
  121. if (__instance.RecipeCraftedAlready(itemID, 1))
  122. {
  123. ___ultLocks[i].SetActive(false);
  124. hoverElements.transform.GetChild(i).gameObject.SetActive(true);
  125. }
  126. else
  127. {
  128. ___ultLocks[i].SetActive(true);
  129. hoverElements.transform.GetChild(i).gameObject.SetActive(false);
  130. }
  131. }
  132. else
  133. {
  134. ___ultLocks[i].SetActive(false);
  135. hoverElements.transform.GetChild(i).gameObject.SetActive(false);
  136. }
  137. }
  138. return false;
  139. }
  140. else if (___craftType == MenuRegistry.Singleton["Gadget Core:Crafter Menu"].GetID())
  141. {
  142. ___ultLocksObj.SetActive(false);
  143. ___recipeButtons.SetActive(true);
  144. var page = Core.pageUniversalCrafterInfoList[___curRecipePage];
  145. for (int i = 0; i < 12; i++)
  146. {
  147. if (page.GetRecipePageEntries().Length > i)
  148. {
  149. int itemID = page.GetRecipePageEntries()[i].ItemIdBase;
  150. if (((CraftMenuInfo)MenuRegistry.Singleton["Gadget Core:Crafter Menu"]).IsRecipeUnlocked(itemID))
  151. ___recipeLock[i].SetActive(false);
  152. else
  153. {
  154. if (page.GetRecipePageEntries()[i].AllwaysShowInput)
  155. ___recipeLock[i].GetComponent<Renderer>().material = recipeLockSmall;
  156. ___recipeLock[i].SetActive(true);
  157. }
  158. }
  159. else
  160. {
  161. ___recipeLock[i].SetActive(false);
  162. ___recipeButtons.transform.GetChild(i).gameObject.SetActive(false);
  163. }
  164. }
  165. return false;
  166. }
  167. else if (CraftTypeHelper.IsCraftTypeRegisteredAsCustom(___craftType))
  168. {
  169. string s = CraftTypeHelper.GetNameFromCraftTypeRegisteredAsCustom(___craftType);
  170. ___ultLocksObj.SetActive(false);
  171. ___recipeButtons.SetActive(true);
  172. var page = Core.pageCustomCrafterInfoLists[s][___curRecipePage];
  173. for (int i = 0; i < 12; i++)
  174. {
  175. if (page.GetRecipePageEntries().Length > i)
  176. {
  177. var revers = page.GetRecipePageEntries()[i].IsReverse;
  178. int itemID = page.GetRecipePageEntries()[i].ItemIds[revers ? 0 : 3];
  179. if (((CraftMenuInfo)MenuRegistry.Singleton[s]).IsRecipeUnlocked(itemID))
  180. ___recipeLock[i].SetActive(false);
  181. else
  182. {
  183. if (page.GetRecipePageEntries()[i].AllwaysShowInput)
  184. ___recipeLock[i].GetComponent<Renderer>().material = recipeLockSmall;
  185. ___recipeLock[i].SetActive(true);
  186. }
  187. }
  188. else
  189. {
  190. ___recipeLock[i].SetActive(false);
  191. ___recipeButtons.transform.GetChild(i).gameObject.SetActive(false);
  192. }
  193. }
  194. return false;
  195. }
  196. return true;
  197. }
  198. }
  199. }