using GadgetCore.API; using GadgetCore.Util; using HarmonyLib; using System; using System.Collections; using System.Collections.Generic; using System.Reflection; using System.Reflection.Emit; using UnityEngine; namespace IronmanChest.Patches { [HarmonyPatch(typeof(PlayerScript))] [HarmonyPatch("Update")] [HarmonyGadget("IronmanChest")] public static class Patch_PlayerScript_Update { [HarmonyPrefix] public static bool Prefix(PlayerScript __instance, GameScript ___gameScript, int ___curNPC, ref bool ___interacting, bool ___canInteract, GameObject ___w, Rigidbody ___r, bool ___immobile, bool ___startingMission, bool ___knocking) { if (__instance.GetComponent().isMine && !___startingMission && !___knocking) { if (!GameScript.pausing && !GameScript.dead) { if (Input.GetButtonDown("Up") && !___immobile && !GameScript.talking && ___curNPC == 8) { __instance.w.SetActive(false); if (!___interacting && ___canInteract) { ___interacting = true; __instance.StartCoroutine(Action(__instance, ___gameScript, ___w, ___r)); return false; } } } } return true; } public static readonly FieldInfo interactingField = typeof(PlayerScript).GetField("interacting", BindingFlags.NonPublic | BindingFlags.Instance); private static IEnumerator Action(PlayerScript __instance, GameScript ___gameScript, GameObject ___w, Rigidbody ___r) { ___r.velocity = new Vector3(0f, 0f, 0f); if (GameScript.combatMode) ___gameScript.ExitCM(); if (GameScript.buildMode) ___gameScript.ExitBuildMode(); ___w.SetActive(false); ___gameScript.Storage(); yield return new WaitForSeconds(0.5f); interactingField.SetValue(InstanceTracker.PlayerScript, false); yield break; } } }