| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- using GadgetCore;
- using GadgetCore.API;
- using HarmonyLib;
- using System;
- using System.Reflection;
- using UnityEngine;
- namespace CombatChipChest.Patches
- {
- [HarmonyPatch(typeof(GameScript))]
- [HarmonyPatch("Update")]
- [HarmonyGadget("CombatChipChest")]
- public static class Patch_GameScript_Update
- {
- [HarmonyPrefix]
- public static void Prefix(GameScript __instance, ref Item ___holdingItem, ref int ___curhoveringstat, ref bool ___holdingCombatChip, bool ___exitingcombatmode)
- {
- try
- {
- if (MenuScript.player)
- {
- if (GameScript.inventoryOpen)
- {
- var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
- RaycastHit hit;
- if (Physics.Raycast(ray, out hit, 5f))
- {
- if (hit.transform.gameObject.name.StartsWith("combat_storage_slot"))
- {
- var slot = int.Parse(hit.transform.gameObject.name.Substring("combat_storage_slot".Length));
- HoverCombatChipChest(__instance, slot, ref ___curhoveringstat);
- }
- }
- }
- if (!GameScript.pausing && Input.GetMouseButtonDown(0) && GameScript.inventoryOpen)
- {
- var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
- RaycastHit hit;
- if (Physics.Raycast(ray, out hit, 7f))
- {
- if (hit.transform.gameObject.name.StartsWith("combat_storage_slot"))
- {
- var slot = int.Parse(hit.transform.gameObject.name.Substring("combat_storage_slot".Length));
- if (slot >= 0 && slot < 16)
- {
- if (___holdingItem.id != 0)
- {
- if (Core.combatChipStore.ChipIDs[slot] != ___holdingItem.id)
- {
- if (Core.combatChipStore.ChipIDs[slot] == 0)
- {
- Place(__instance, slot, ref ___holdingItem, ref ___holdingCombatChip);
- }
- else
- {
- Swap(__instance, slot, ref ___holdingItem);
- }
- }
- }
- else if (Core.combatChipStore.ChipIDs[slot] != 0)
- {
- Select(__instance, slot, ref ___holdingItem, ref ___holdingCombatChip, ___exitingcombatmode);
- }
- }
- }
- }
- }
- }
- }
- catch (Exception e) { Core.logger.LogConsole(e.Message); }
- }
- public static void HoverCombatChipChest(GameScript __instance, int slot, ref int ___curhoveringstat)
- {
- try
- {
- if (slot >= 0 && slot < 16)
- {
- if (slot != ___curhoveringstat)
- {
- ___curhoveringstat = slot;
- if (Core.combatChipStore.ChipIDs[slot] != 0)
- {
- __instance.GetComponent<AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/hover"), Menuu.soundLevel / 10f);
- }
- }
- Core.combatChipStore.UpdateText(Core.combatChipStore.ChipIDs[slot]);
- }
- }
- catch { }
- }
- private static void Swap(GameScript __instance, int slot, ref Item ___holdingItem)
- {
- try
- {
- if (slot >= 0 && slot < 16)
- {
- if (slot >= 0 && slot < 16)
- {
- __instance.GetComponent<AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/CLICK1"), Menuu.soundLevel / 10f);
- int id = ___holdingItem.id;
- ___holdingItem.id = Core.combatChipStore.ChipIDs[slot];
- Core.combatChipStore.ChipIDs[slot] = id;
- __instance.RefreshCombatChipMenu();
- __instance.RefreshHoldingSlot();
- Core.combatChipStore.UpdateLatestUI();
- __instance.UpdateHP();
- __instance.UpdateMana();
- }
- }
- }
- catch (Exception e) { Core.logger.LogConsole(e.Message); }
- }
- private static void Select(GameScript __instance, int slot, ref Item ___holdingItem, ref bool ___holdingCombatChip, bool ___exitingcombatmode)
- {
- try
- {
- if (slot >= 0 && slot < 16)
- {
- if (!___exitingcombatmode)
- {
- __instance.GetComponent<AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/CLICK1"), Menuu.soundLevel / 10f);
-
- ___holdingItem = __instance.EmptyItem();
- ___holdingCombatChip = true;
-
- ___holdingItem.id = Core.combatChipStore.ChipIDs[slot];
-
- Core.combatChipStore.ChipIDs[slot] = 0;
-
- __instance.RefreshCombatChipMenu();
- __instance.RefreshHoldingSlot();
-
- Core.combatChipStore.UpdateLatestUI();
-
- __instance.UpdateHP();
- __instance.UpdateMana();
- }
- }
- }
- catch (Exception e) { Core.logger.LogConsole(e.Message); }
- }
- private static void Place(GameScript __instance, int slot, ref Item ___holdingItem, ref bool ___holdingCombatChip)
- {
- try
- {
- if (slot >= 0 && slot < 16)
- {
- __instance.GetComponent<AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/CLICK1"), Menuu.soundLevel / 10f);
- Core.combatChipStore.ChipIDs[slot] = ___holdingItem.id;
- ___holdingItem = __instance.EmptyItem();
- __instance.RefreshCombatChipMenu();
- ___holdingCombatChip = false;
- __instance.RefreshHoldingSlot();
- Core.combatChipStore.UpdateLatestUI();
- __instance.UpdateHP();
- __instance.UpdateMana();
- }
- }
- catch (Exception e) { Core.logger.LogConsole(e.Message); }
- }
- private static void set(GameScript __instance, string prop, object o)
- {
- var field = typeof(GameScript).GetField(prop, BindingFlags.NonPublic | BindingFlags.Instance);
- field.SetValue(__instance, o);
- }
- private static T get<T>(GameScript __instance, string prop)
- {
- var field = typeof(GameScript).GetField(prop, BindingFlags.NonPublic | BindingFlags.Instance);
- return (T)field.GetValue(__instance);
- }
- private static object call(GameScript __instance, string meth, object[] o = null)
- {
- MethodInfo dynMethod = __instance.GetType().GetMethod(meth, BindingFlags.NonPublic | BindingFlags.Instance);
- return dynMethod.Invoke(__instance, o ?? new object[0]);
- }
- }
- }
|