Browse Source

[RecipeMenuCore] [2.0.2.2] added vanilla page overwrite

Zariteis 4 years ago
parent
commit
df4fccbd25

+ 21 - 0
RecipeMenuCore/API/RecipePage.cs

@@ -71,6 +71,27 @@ namespace RecipeMenuCore.API
       return this;
     }
 
+    /// <summary>
+    /// Used to register the page to repalce a vanilla one and make it show.
+    /// </summary>
+    public virtual RecipePage RegisterAsVanilla(int i)
+    {
+      PostRegister();
+      switch (Type)
+      {
+        case RecipePageType.GearForge:
+          Core.pageGearForgeInfoListVanilla[i] = this;
+          break;
+        case RecipePageType.AlchemyStation:
+          Core.pageAlchemyStationInfoListVanilla[i] = this;
+          break;
+        case RecipePageType.UltimateForge:
+          Core.pageUltimateForgeInfoListVanilla[i] = this;
+          break;
+      }
+      return this;
+    }
+
     protected void PostRegister()
     {
       if (Mat == null)

+ 4 - 0
RecipeMenuCore/Core.cs

@@ -11,6 +11,10 @@ namespace RecipeMenuCore
     internal static List<RecipePage> pageAlchemyStationInfoList = new List<RecipePage>();
     internal static List<RecipePage> pageUltimateForgeInfoList = new List<RecipePage>();
 
+    internal static RecipePage[] pageGearForgeInfoListVanilla = new RecipePage[6];
+    internal static RecipePage[] pageAlchemyStationInfoListVanilla = new RecipePage[2];
+    internal static RecipePage[] pageUltimateForgeInfoListVanilla = new RecipePage[6];
+
     internal static bool settingUseDialog;
 
     internal static GadgetLogger logger;

+ 8 - 2
RecipeMenuCore/Patches/Patch_GameScript_HoverRecipeSelect.cs

@@ -21,7 +21,7 @@ namespace RecipeMenuCore.Patches
       if (!Core.settingUseDialog)
         return true;
 
-      if(___craftType == 0 || ___craftType == 1)
+      if (___craftType == 0 || ___craftType == 1)
       {
         if (id >= 12 || ___recipeLock[id].active)
           return false;
@@ -87,7 +87,7 @@ namespace RecipeMenuCore.Patches
 
     private static string GenerateDescription(ItemInfo item)
     {
-      if ((item.GetID() >= 1000 && item.GetID() < 1000 + 6 )
+      if ((item.GetID() >= 1000 && item.GetID() < 1000 + 6)
         || (item.GetID() >= 1012 && item.GetID() < 1012 + 3 * 6))
         return "";
       var desc = item.Desc;
@@ -125,6 +125,12 @@ namespace RecipeMenuCore.Patches
         return Core.pageAlchemyStationInfoList[curRecipePage - 2].GetRecipePageEntries()[index].ItemIdBase;
       else if (craftType == 2 && curRecipePage >= 6)
         return Core.pageUltimateForgeInfoList[curRecipePage - 6].GetRecipePageEntries()[index].ItemIdBase;
+      else if (craftType == 1 && curRecipePage >= 2 && Core.pageGearForgeInfoListVanilla[curRecipePage] != null)
+        return Core.pageGearForgeInfoListVanilla[curRecipePage].GetRecipePageEntries()[index].ItemIdBase;
+      else if (craftType == 1 && curRecipePage >= 2 && Core.pageAlchemyStationInfoListVanilla[curRecipePage] != null)
+        return Core.pageAlchemyStationInfoListVanilla[curRecipePage].GetRecipePageEntries()[index].ItemIdBase;
+      else if (craftType == 1 && Core.pageUltimateForgeInfoListVanilla[curRecipePage] != null)
+        return Core.pageUltimateForgeInfoListVanilla[curRecipePage].GetRecipePageEntries()[index].ItemIdBase;
       return __instance.GetRecipeItem(curRecipePage, index).id;
     }
     private static int CalculateUltimaleWeapon(int index, int page)

+ 24 - 9
RecipeMenuCore/Patches/Patch_GameScript_RefreshRecipe.cs

@@ -32,9 +32,9 @@ namespace RecipeMenuCore.Patches
       __instance.txtRecipeName[0].gameObject.GetComponent<Animation>().Play();
       __instance.txtRecipeName[1].text = __instance.txtRecipeName[0].text;
       __instance.txtRecipeUnlocked[1].text = __instance.txtRecipeUnlocked[0].text;
-      if ((___craftType != 0 || ___curRecipePage <= 5)
-        && (___craftType != 1 || ___curRecipePage <= 1)
-        && (___craftType != 2 || ___curRecipePage <= 5))
+      if ((___craftType != 0 || (___curRecipePage <= 5 && Core.pageGearForgeInfoListVanilla[___curRecipePage] == null))
+        && (___craftType != 1 || (___curRecipePage <= 1 && Core.pageAlchemyStationInfoListVanilla[___curRecipePage] == null))
+        && (___craftType != 2 || (___curRecipePage <= 5 && Core.pageUltimateForgeInfoListVanilla[___curRecipePage] == null)))
       {
         __instance.menuRecipe.GetComponent<Renderer>().material = (Material)Resources.Load(string.Concat(new object[] { "mat/r", ___curRecipePage, "t", ___craftType }));
       }
@@ -42,25 +42,40 @@ namespace RecipeMenuCore.Patches
       {
         if (___craftType == 0)
         {
-          __instance.txtRecipeName[0].text = Core.pageGearForgeInfoList[___curRecipePage - 6].Title;
+          var page = ___curRecipePage >= 6 ? Core.pageGearForgeInfoList[___curRecipePage - 6] : Core.pageGearForgeInfoListVanilla[___curRecipePage];
+          __instance.txtRecipeName[0].text = page.Title;
           __instance.txtRecipeName[1].text = __instance.txtRecipeName[0].text;
-          __instance.menuRecipe.GetComponent<Renderer>().material = Core.pageGearForgeInfoList[___curRecipePage - 6].Mat;
+          __instance.menuRecipe.GetComponent<Renderer>().material = page.Mat;
         }
         else if (___craftType == 1)
         {
-          __instance.txtRecipeName[0].text = Core.pageAlchemyStationInfoList[___curRecipePage - 2].Title;
+          var page = ___curRecipePage >= 2 ? Core.pageAlchemyStationInfoList[___curRecipePage - 2] : Core.pageAlchemyStationInfoListVanilla[___curRecipePage];
+          __instance.txtRecipeName[0].text = page.Title;
           __instance.txtRecipeName[1].text = __instance.txtRecipeName[0].text;
-          __instance.menuRecipe.GetComponent<Renderer>().material = Core.pageAlchemyStationInfoList[___curRecipePage - 2].Mat;
+          __instance.menuRecipe.GetComponent<Renderer>().material = page.Mat;
         }
         else if (___craftType == 2)
         {
-          __instance.txtRecipeName[0].text = Core.pageUltimateForgeInfoList[___curRecipePage - 6].Title;
+          var page = ___curRecipePage >= 6 ? Core.pageUltimateForgeInfoList[___curRecipePage - 6] : Core.pageUltimateForgeInfoListVanilla[___curRecipePage];
+          __instance.txtRecipeName[0].text = page.Title;
           __instance.txtRecipeName[1].text = __instance.txtRecipeName[0].text;
-          __instance.menuRecipe.GetComponent<Renderer>().material = Core.pageUltimateForgeInfoList[___curRecipePage - 6].Mat;
+          __instance.menuRecipe.GetComponent<Renderer>().material = page.Mat;
         }
       }
       __instance.RefreshRecipeUnlock();
       return false;
     }
+
+
+    [HarmonyPostfix]
+    [HarmonyAfter("URP.URP.gadget")]
+    public static void Postfix(GameScript __instance, int ___curRecipePage, int ___craftType)
+    {
+      if (___curRecipePage == 1 && ___craftType == 1 && Core.pageAlchemyStationInfoListVanilla[1] != null)
+      {
+        var page = Core.pageAlchemyStationInfoListVanilla[1];
+        __instance.menuRecipe.GetComponent<Renderer>().material = page.Mat;
+      }
+    }
   }
 }

+ 13 - 10
RecipeMenuCore/Patches/Patch_GameScript_RefreshRecipeUnlock.cs

@@ -27,7 +27,7 @@ namespace RecipeMenuCore.Patches
       var hoverElements = ___ultLocksObj.transform.parent.Find("hoverElements").gameObject;
       hoverElements.SetActive(false);
 
-      if (___craftType == 2 && ___curRecipePage < 6)
+      if (___craftType == 2 && ___curRecipePage < 6 && Core.pageUltimateForgeInfoListVanilla[___curRecipePage] == null)
       {
         hoverElements.SetActive(true);
         for (int i = 0; i < 36; i++)
@@ -43,15 +43,16 @@ namespace RecipeMenuCore.Patches
         }
       }
 
-      if (___craftType == 0 && ___curRecipePage >= 6)
+      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 (Core.pageGearForgeInfoList[___curRecipePage - 6].GetRecipePageEntries().Length > i)
+          if (page.GetRecipePageEntries().Length > i)
           {
-            int itemID = Core.pageGearForgeInfoList[___curRecipePage - 6].GetRecipePageEntries()[i].ItemIdBase;
+            int itemID = page.GetRecipePageEntries()[i].ItemIdBase;
             if (__instance.RecipeCraftedAlready(itemID, 0))
               ___recipeLock[i].SetActive(false);
             else
@@ -65,15 +66,16 @@ namespace RecipeMenuCore.Patches
         }
         return false;
       }
-      else if (___craftType == 1 && ___curRecipePage >= 2)
+      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 (Core.pageAlchemyStationInfoList[___curRecipePage - 2].GetRecipePageEntries().Length > i)
+          if (page.GetRecipePageEntries().Length > i)
           {
-            int itemID = Core.pageAlchemyStationInfoList[___curRecipePage - 2].GetRecipePageEntries()[i].ItemIdBase;
+            int itemID = page.GetRecipePageEntries()[i].ItemIdBase;
             if (__instance.RecipeCraftedAlready(itemID, 0))
               ___recipeLock[i].SetActive(false);
             else
@@ -87,20 +89,21 @@ namespace RecipeMenuCore.Patches
         }
         return false;
       }
-      else if (___craftType == 2 && ___curRecipePage >= 6)
+      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 (Core.pageUltimateForgeInfoList[___curRecipePage - 6].GetRecipePageEntries().Length > i / 3)
+          if (page.GetRecipePageEntries().Length > i / 3)
           {
-            int itemID = Core.pageUltimateForgeInfoList[___curRecipePage - 6].GetRecipePageEntries()[i / 3].ItemIdExtension[i % 3];
+            int itemID = page.GetRecipePageEntries()[i / 3].ItemIdExtension[i % 3];
             if (__instance.RecipeCraftedAlready(itemID, 0))
             {
               ___ultLocks[i].SetActive(false);

+ 7 - 6
RecipeMenuCore/Patches/Patch_GameScript_Update.cs

@@ -32,17 +32,17 @@ namespace RecipeMenuCore.Patches
                 {
                   var slotID = int.Parse(hit.transform.gameObject.name);
                   MonoBehaviour.print("hit recipe");
-                  if (___craftType == 0 && ___curRecipePage >= 6)
+                  if (___craftType == 0 && (___curRecipePage >= 6 || Core.pageGearForgeInfoListVanilla[___curRecipePage] != null))
                   {
                     __instance.StartCoroutine(QuickCraft(__instance, ___curRecipePage, slotID, ___craftType, ___inventory, ___craft));
                     acted = true;
                   }
-                  else if (___craftType == 1 && ___curRecipePage >= 2)
+                  else if (___craftType == 1 && (___curRecipePage >= 2 || Core.pageAlchemyStationInfoListVanilla[___curRecipePage] != null))
                   {
                     __instance.StartCoroutine(QuickCraft(__instance, ___curRecipePage, slotID, ___craftType, ___inventory, ___craft));
                     acted = true;
                   }
-                  else if (___craftType == 2 && ___curRecipePage >= 6)
+                  else if (___craftType == 2 && (___curRecipePage >= 6 || Core.pageUltimateForgeInfoListVanilla[___curRecipePage] != null))
                   {
                     acted = true;
                   }
@@ -75,8 +75,9 @@ namespace RecipeMenuCore.Patches
           bool hasAllItems = true;
           if (___craftType == 0)
           {
-            var recipePageEntry = Core.pageGearForgeInfoList[___curRecipePage - 6].GetRecipePageEntries()[slot];
+            var recipePageEntry = ___curRecipePage >= 6 ? Core.pageGearForgeInfoList[___curRecipePage - 6].GetRecipePageEntries()[slot] : Core.pageGearForgeInfoListVanilla[___curRecipePage].GetRecipePageEntries()[slot];
             craftingItemID = recipePageEntry.ItemIdBase;
+            craftingItemAmount = recipePageEntry.MinAmount + Random.Range(0, 1 + recipePageEntry.MaxBonusAmount);
             for (int i = 0; i < recipePageEntry.ItemIdExtension.Length; i++)
             {
               var itemID = recipePageEntry.ItemIdExtension[i];
@@ -86,9 +87,9 @@ namespace RecipeMenuCore.Patches
           }
           else if (___craftType == 1)
           {
-            var recipePageEntry = Core.pageAlchemyStationInfoList[___curRecipePage - 2].GetRecipePageEntries()[slot];
+            var recipePageEntry = ___curRecipePage >= 2 ? Core.pageAlchemyStationInfoList[___curRecipePage - 2].GetRecipePageEntries()[slot] : Core.pageAlchemyStationInfoListVanilla[___curRecipePage].GetRecipePageEntries()[slot];
             craftingItemID = recipePageEntry.ItemIdBase;
-            craftingItemAmount = Random.Range(recipePageEntry.MinAmount, recipePageEntry.MinAmount + recipePageEntry.MaxBonusAmount);
+            craftingItemAmount = recipePageEntry.MinAmount + Random.Range(0, 1 + recipePageEntry.MaxBonusAmount);
             for (int i = 0; i < recipePageEntry.ItemIdExtension.Length; i++)
             {
               var itemID = recipePageEntry.ItemIdExtension[i];

+ 1 - 1
RecipeMenuCore/RecipeMenuCore.cs

@@ -11,7 +11,7 @@ namespace RecipeMenuCore
   [Gadget("RecipeMenuCore", RequiredOnClients: false)]
   public class RecipeMenuCore : Gadget<RecipeMenuCore>
   {
-    public const string MOD_VERSION = "1.0"; // Set this to the version of your mod.
+    public const string MOD_VERSION = "1.1"; // Set this to the version of your mod.
     public const string CONFIG_VERSION = "1.0"; // Increment this whenever you change your mod's config file.
 
     protected override void LoadConfig()