Patch_GameScript_AddMod.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using GadgetCore.API;
  2. using HarmonyLib;
  3. using UnityEngine;
  4. namespace Subworlds.Patches
  5. {
  6. [HarmonyPatch(typeof(GameScript))]
  7. [HarmonyPatch("AddMod")]
  8. [HarmonyGadget("SubworldCore")]
  9. public static class Patch_GameScript_AddMod
  10. {
  11. [HarmonyPrefix]
  12. public static bool Prefix(GameScript __instance, int a, Item ___holdingItem, GameObject[] ___modObj, Item[] ___modSlot)
  13. {
  14. int n = 5;
  15. int id = ___modSlot[0].id;
  16. if (id > 0)
  17. for (int i = 0; i < 3; i++)
  18. if (___modSlot[0].aspect[i] > 0 && ___modSlot[0].aspect[i] == Core.itemOldTexMod.GetID())
  19. n += ___modSlot[0].aspectLvl[i];
  20. ItemInfo itemInfo = ItemRegistry.GetItem(___holdingItem.id);
  21. if ((___holdingItem.id > 200 && ___holdingItem.id < 230) || (itemInfo != null && ((itemInfo.Type & ItemType.MOD) == (ItemType.MOD))))
  22. {
  23. if (___modSlot[0].id != 0)
  24. {
  25. if (___modSlot[0].aspectLvl[a] < 5 || (___modSlot[0].aspectLvl[a] < n && ___holdingItem.id != Core.itemOldTexMod.GetID()))
  26. {
  27. if (___modSlot[0].aspect[a] == ___holdingItem.id || ___modSlot[0].aspect[a] == 0)
  28. {
  29. if (__instance.CanAddMod(a))
  30. {
  31. ___modSlot[0].aspectLvl[a]++;
  32. ___modObj[a].GetComponent<Animation>().Play();
  33. __instance.GetComponent<AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/addmod"), Menuu.soundLevel / 10f);
  34. ___modSlot[0].aspect[a] = ___holdingItem.id;
  35. ___holdingItem.q--;
  36. __instance.RefreshHoldingSlot();
  37. __instance.RefreshGearMods();
  38. }
  39. }
  40. else if (___modSlot[0].aspectLvl[a] == 0 && __instance.CanAddMod(a))
  41. {
  42. ___modSlot[0].aspectLvl[a]++;
  43. ___modObj[a].GetComponent<Animation>().Play();
  44. __instance.GetComponent<AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/addmod"), Menuu.soundLevel / 10f);
  45. ___modSlot[0].aspect[a] = ___holdingItem.id;
  46. ___holdingItem.q--;
  47. __instance.RefreshHoldingSlot();
  48. __instance.RefreshGearMods();
  49. }
  50. }
  51. }
  52. }
  53. return false;
  54. }
  55. }
  56. }