Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of KeyRing v1.1.0
KeyRing.dll
Decompiled 2 years agousing System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using LethalCompanyInputUtils.Api; using UnityEngine; using UnityEngine.AI; using UnityEngine.InputSystem; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("KeyRing")] [assembly: AssemblyDescription("Tired of the key taking up an entire inventory slot? Then this mod will be perfect for you!")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("ic23")] [assembly: AssemblyProduct("KeyRing")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("7ce99b51-6182-441e-8c40-e7937f89de2e")] [assembly: AssemblyFileVersion("1.1.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.1.0.0")] namespace KeyRing; public class KeyRingButton : LcInputActions { [InputAction("<Keyboard>/x", Name = "KeyRing")] public InputAction KeyRing { get; set; } } public class KeyRingVar { public ManualLogSource mls; public bool MasterKey; public int KeyRingCount; } [BepInPlugin("ic23.KeyRing", "KeyRing", "1.1.0")] public class Modbase : BaseUnityPlugin { [HarmonyPatch(typeof(PlayerControllerB))] internal class PlayerControllerBPatch { [HarmonyPatch("Update")] [HarmonyPostfix] private static void OpenDoorPatch(ref PlayerControllerB __instance) { //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) RaycastHit val = default(RaycastHit); if ((Object)(object)GameNetworkManager.Instance == (Object)null || (Object)(object)GameNetworkManager.Instance.localPlayerController == (Object)null || !(InputActionInstance.KeyRing.ReadValue<float>() > 0f) || KeyRingVar.KeyRingCount <= 0 || !Physics.Raycast(new Ray(((Component)GameNetworkManager.Instance.localPlayerController.gameplayCamera).transform.position, ((Component)GameNetworkManager.Instance.localPlayerController.gameplayCamera).transform.forward), ref val, 3f, 2816)) { return; } DoorLock component = ((Component)((RaycastHit)(ref val)).transform).GetComponent<DoorLock>(); if ((Object)(object)component != (Object)null && component.isLocked && !component.isPickingLock) { if (!KeyRingVar.MasterKey) { KeyRingVar.KeyRingCount--; } component.UnlockDoorSyncWithServer(); } } [HarmonyPatch("GrabObjectClientRpc")] [HarmonyPostfix] private static void InventoryCheckPatch(ref PlayerControllerB __instance) { try { if (((object)GameNetworkManager.Instance.localPlayerController.ItemSlots[GameNetworkManager.Instance.localPlayerController.currentItemSlot]).GetType() == typeof(KeyItem) && (!KeyRingVar.MasterKey || KeyRingVar.KeyRingCount < 1)) { KeyRingVar.KeyRingCount++; GameNetworkManager.Instance.localPlayerController.DespawnHeldObject(); KeyRingVar.mls.LogInfo((object)"[KeyRing] The Key is taken!"); } } catch { } } [HarmonyPatch("KillPlayer")] [HarmonyPostfix] private static void KeyRingLoss(ref PlayerControllerB __instance) { try { if (!((Object)(object)GameNetworkManager.Instance.localPlayerController == (Object)null)) { if (GameNetworkManager.Instance.localPlayerController.isPlayerDead) { KeyRingVar.KeyRingCount = 0; } KeyRingVar.mls.LogInfo((object)"[KeyRing] All the keys have been lost!"); } } catch { } } } [HarmonyPatch(typeof(DoorLock))] internal class DoorLockPatch { [HarmonyPatch("Update")] [HarmonyPostfix] public static void KeyRingPatch(ref bool ___isLocked, ref InteractTrigger ___doorTrigger, ref int ___playersPickingDoor, ref float ___playerPickingLockProgress, ref NavMeshObstacle ___navMeshObstacle, ref bool ___isPickingLock, ref float ___lockPickTimeLeft, ref DoorLock __instance) { if (!___isLocked || ___isPickingLock || (Object)(object)GameNetworkManager.Instance == (Object)null || (Object)(object)GameNetworkManager.Instance.localPlayerController == (Object)null) { return; } if (KeyRingVar.KeyRingCount > 0) { if (StartOfRound.Instance.localPlayerUsingController) { if (KeyRingVar.MasterKey) { ___doorTrigger.disabledHoverTip = "MasterKey | Use key: [R-trigger]"; } else { ___doorTrigger.disabledHoverTip = "Keys: " + KeyRingVar.KeyRingCount + " | Use key: [R-trigger]"; } return; } if (KeyRingVar.MasterKey) { ___doorTrigger.disabledHoverTip = "MasterKey | Use key: [ " + InputActionRebindingExtensions.GetBindingDisplayString(InputActionInstance.KeyRing, 0, (DisplayStringOptions)0) + " ]"; return; } ___doorTrigger.disabledHoverTip = "Keys: " + KeyRingVar.KeyRingCount + " | Use key: [ " + InputActionRebindingExtensions.GetBindingDisplayString(InputActionInstance.KeyRing, 0, (DisplayStringOptions)0) + " ]"; } else { ___doorTrigger.disabledHoverTip = "Keys: 0 | Locked"; } } } private const string modGUID = "ic23.KeyRing"; private const string modName = "KeyRing"; private const string modVersion = "1.1.0"; internal static KeyRingButton InputActionInstance = new KeyRingButton(); internal static KeyRingVar KeyRingVar = new KeyRingVar(); private ConfigEntry<bool> configMasterKey; private readonly Harmony harmony = new Harmony("ic23.KeyRing"); private static Modbase Instance; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } configMasterKey = ((BaseUnityPlugin)this).Config.Bind<bool>("General.Toggles", "MasterKey", false, "Open any door with one key"); KeyRingVar.MasterKey = configMasterKey.Value; KeyRingVar.mls = Logger.CreateLogSource("ic23.KeyRing"); KeyRingVar.mls.LogInfo((object)"[KeyRing] Mod is loaded!"); harmony.PatchAll(typeof(Modbase)); harmony.PatchAll(typeof(PlayerControllerBPatch)); harmony.PatchAll(typeof(DoorLockPatch)); } }