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 Rebindables v1.0.4
Rebindables.dll
Decompiled 6 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using Microsoft.CodeAnalysis; using MonoMod.RuntimeDetour; using On.RoR2; using On.RoR2.UI; using Rewired; using Rewired.Data; using Rewired.Data.Mapping; using RoR2; using RoR2.UI; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Rebindables")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+92a073609133a40c801e07c71061ab4ac98901f0")] [assembly: AssemblyProduct("Rebindables")] [assembly: AssemblyTitle("Rebindables")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Rebindables { public static class InputBankExtensions { public static ButtonState GetButtonState(this InputBankTest bank, ModKeybind bind) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) return bind.GetButtonState(bank); } } public class RebindAPI { internal delegate void orig_RewiredMoment(UserData self); [CompilerGenerated] private static class <>O { public static hook_LoadUserProfiles <0>__LoadProfiles; public static hook_Start <1>__SPCStart; public static hook_Start <2>__IBTStart; public static hook_LoadDefaultProfile <3>__LoadDefault; public static hook_FillDefaultJoystickMaps <4>__FillJoystickMaps; } private static int lastClaimedID = 940; public static List<ModKeybind> Keybinds = new List<ModKeybind>(); public static Dictionary<ModKeybind, InputAction> KeybindActions = new Dictionary<ModKeybind, InputAction>(); internal static void ApplyHooks() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Expected O, but got Unknown //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Expected O, but got Unknown object obj = <>O.<0>__LoadProfiles; if (obj == null) { hook_LoadUserProfiles val = LoadProfiles; <>O.<0>__LoadProfiles = val; obj = (object)val; } SaveSystem.LoadUserProfiles += (hook_LoadUserProfiles)obj; object obj2 = <>O.<1>__SPCStart; if (obj2 == null) { hook_Start val2 = SPCStart; <>O.<1>__SPCStart = val2; obj2 = (object)val2; } SettingsPanelController.Start += (hook_Start)obj2; object obj3 = <>O.<2>__IBTStart; if (obj3 == null) { hook_Start val3 = IBTStart; <>O.<2>__IBTStart = val3; obj3 = (object)val3; } InputBankTest.Start += (hook_Start)obj3; object obj4 = <>O.<3>__LoadDefault; if (obj4 == null) { hook_LoadDefaultProfile val4 = LoadDefault; <>O.<3>__LoadDefault = val4; obj4 = (object)val4; } UserProfile.LoadDefaultProfile += (hook_LoadDefaultProfile)obj4; object obj5 = <>O.<4>__FillJoystickMaps; if (obj5 == null) { hook_FillDefaultJoystickMaps val5 = FillJoystickMaps; <>O.<4>__FillJoystickMaps = val5; obj5 = (object)val5; } UserProfile.FillDefaultJoystickMaps += (hook_FillDefaultJoystickMaps)obj5; new Hook((MethodBase)typeof(UserData).GetMethod("gLOOAxUFAvrvUufkVjaYyZoeLbLE", (BindingFlags)(-1)), typeof(RebindAPI).GetMethod("RewiredMoment", (BindingFlags)(-1))); } private static void FillJoystickMaps(orig_FillDefaultJoystickMaps orig, UserProfile self) { orig.Invoke(self); AddMaps(self); self.RequestEventualSave(); } private static void LoadDefault(orig_LoadDefaultProfile orig) { orig.Invoke(); AddMaps(UserProfile.defaultProfile); UserProfile.defaultProfile.RequestEventualSave(); } private static void IBTStart(orig_Start orig, InputBankTest self) { orig.Invoke(self); ((Component)self).gameObject.AddComponent<ModdedInputBank>(); } private static void RewiredMoment(orig_RewiredMoment orig, UserData self) { foreach (ModKeybind keybind in Keybinds) { self.actions?.Add(KeybindActions[keybind]); FillAction(keybind, self.keyboardMaps, self.joystickMaps, self.mouseMaps); } orig(self); } private static void SPCStart(orig_Start orig, SettingsPanelController self) { orig.Invoke(self); if (!(((Object)self).name == "SettingsSubPanel, Controls (M&KB)") && !(((Object)self).name == "SettingsSubPanel, Controls (Gamepad)")) { return; } GameObject gameObject = ((Component)((Component)self).transform.Find("Scroll View").Find("Viewport").Find("VerticalLayout") .Find("SettingsEntryButton, Binding (Jump)")).gameObject; Transform val = ((Component)self).transform.Find("Scroll View").Find("Viewport").Find("VerticalLayout"); foreach (ModKeybind keybind in Keybinds) { GameObject val2 = Object.Instantiate<GameObject>(gameObject, val); InputBindingControl component = val2.GetComponent<InputBindingControl>(); component.actionName = keybind.InternalName; component.Awake(); if (keybind.Position != null) { int num = FindSiblingIndex(keybind.Position, val); if (num != -1) { val2.transform.SetSiblingIndex(num + 1); } } } } private static int FindSiblingIndex(string input, Transform target) { Transform val = target.Find("SettingsEntryButton, Binding (" + input + ")"); Transform val2 = target.Find("SettingsEntryButton, Bool (" + input + ")"); Transform val3 = target.Find("SettingsEntryButton, Slider (" + input + ")"); return ((Object)(object)val != (Object)null) ? val.GetSiblingIndex() : (((Object)(object)val2 != (Object)null) ? val2.GetSiblingIndex() : (((Object)(object)val3 != (Object)null) ? val3.GetSiblingIndex() : (-1))); } private static void LoadProfiles(orig_LoadUserProfiles orig, SaveSystem self) { orig.Invoke(self); foreach (KeyValuePair<string, UserProfile> loadedUserProfile in self.loadedUserProfiles) { UserProfile value = loadedUserProfile.Value; AddMaps(value); value.RequestEventualSave(); } } private static void AddMaps(UserProfile prof) { //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_0295: Unknown result type (might be due to invalid IL or missing references) //IL_02b5: Unknown result type (might be due to invalid IL or missing references) //IL_02c5: Unknown result type (might be due to invalid IL or missing references) ActionElementMap val = default(ActionElementMap); ActionElementMap val2 = default(ActionElementMap); foreach (ModKeybind bind in Keybinds) { if (((ControllerMap)prof.keyboardMap).AllMaps.All((ActionElementMap x) => x.actionId != bind.Id) && ((ControllerMap)prof.mouseMap).AllMaps.All((ActionElementMap x) => x.actionId != bind.Id) && !bind.IsMouse()) { ((ControllerMap)prof.keyboardMap).CreateElementMap(bind.kbMap.actionId, bind.kbMap.axisContribution, bind.kbMap.elementIdentifierId, bind.kbMap.elementType, bind.kbMap.axisRange, bind.kbMap.invert, ref val); val._keyboardKeyCode = (KeyboardKeyCode)bind.DefaultKeyboardInput; val.keyCode = bind.DefaultKeyboardInput; bind.kbMap.cVYzDXVDMNXvRMrklCVdVyeXGAlK((ControllerMap)(object)prof.keyboardMap); } if (((ControllerMap)prof.keyboardMap).AllMaps.All((ActionElementMap x) => x.actionId != bind.Id) && ((ControllerMap)prof.mouseMap).AllMaps.All((ActionElementMap x) => x.actionId != bind.Id) && !bind.IsMouse()) { ((ControllerMap)prof.mouseMap).CreateElementMap(bind.mMap.actionId, bind.mMap.axisContribution, bind.mMap.elementIdentifierId, bind.mMap.elementType, bind.mMap.axisRange, bind.mMap.invert, ref val2); val2.keyCode = bind.DefaultKeyboardInput; bind.mMap.cVYzDXVDMNXvRMrklCVdVyeXGAlK((ControllerMap)(object)prof.mouseMap); } foreach (var (_, val4) in prof.HardwareJoystickMaps2) { if (((ControllerMap)val4).AllMaps.All((ActionElementMap x) => x.actionId != bind.Id)) { ((ControllerMap)val4).CreateElementMap(bind.jsMap.actionId, bind.jsMap.axisContribution, bind.jsMap.elementIdentifierId, bind.jsMap.elementType, bind.jsMap.axisRange, bind.jsMap.invert); bind.jsMap.cVYzDXVDMNXvRMrklCVdVyeXGAlK((ControllerMap)(object)prof.joystickMap); } } } } private static void FillAction(ModKeybind bind, List<ControllerMap_Editor> kb, List<ControllerMap_Editor> ctrl, List<ControllerMap_Editor> m) { foreach (ControllerMap_Editor item in kb) { if (item.categoryId == 0 && item.actionElementMaps.All((ActionElementMap x) => x.actionId != bind.Id)) { item.actionElementMaps.Add(bind.kbMap); } } foreach (ControllerMap_Editor item2 in ctrl) { if (item2.categoryId == 0 && item2.actionElementMaps.All((ActionElementMap x) => x.actionId != bind.Id)) { item2.actionElementMaps.Add(bind.jsMap); } } foreach (ControllerMap_Editor item3 in m) { if (item3.categoryId == 0 && item3.actionElementMaps.All((ActionElementMap x) => x.actionId != bind.Id)) { item3.actionElementMaps.Add(bind.kbMap); } } } public static ModKeybind RegisterModKeybind(ModKeybind keybind) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) InputAction val = new InputAction(); int num = Rebindables.ReadID(keybind.InternalName); while (num == -1) { int num2 = lastClaimedID++; if (!Rebindables.CheckIDExists(num2)) { num = num2; break; } } val.QurFqcdYtHIEpCpYBddZfQQtnImHA(num); Rebindables.WriteID(keybind.InternalName, num); val.MFwTFVDRoziRWNJMARlSUXIebtLw(0); val.nfWwbfSEwQCdVSicPaIBIPkMqJfu(keybind.InternalName); val.LEWtVuPGPZtPpCUSAMYCEbPqyAuf(keybind.InternalName); val.REsRGcKFtjbUwlqUSreCTUubayPb(0); val.BSFQAxJApIZsVFnOmINQEGShHPvFb(true); val.nLGCfekdjaMIxCLlcjdYgcEjEDxz(keybind.InputType); keybind.Id = val.id; keybind.action = val; ActionAxisPair key = default(ActionAxisPair); ((ActionAxisPair)(ref key))..ctor(val.name, keybind.AxisRange); InputCatalog.actionToToken[key] = keybind.DisplayToken; Keybinds.Add(keybind); KeybindActions.Add(keybind, val); return keybind; } } public class ModKeybind { internal string InternalName; public string DisplayToken; public KeyCode DefaultKeyboardInput; public int DefaultJoystickInput; public InputActionType InputType; public AxisRange AxisRange; private ActionElementMap _kbMap; private ActionElementMap _jsMap; private ActionElementMap _mMap; public string Position; internal int Id; internal InputAction action; internal ActionElementMap kbMap { get { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Expected O, but got Unknown //IL_002e: Expected O, but got Unknown ActionElementMap obj = _kbMap; if (obj == null) { ActionElementMap val = new ActionElementMap(action.id, (ControllerElementType)1, ToElementId(DefaultKeyboardInput)); ActionElementMap val2 = val; _kbMap = val; obj = val2; } return obj; } } internal ActionElementMap jsMap { get { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Invalid comparison between Unknown and I4 //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Invalid comparison between Unknown and I4 //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Expected O, but got Unknown //IL_0048: Expected O, but got Unknown ActionElementMap obj = _jsMap; if (obj == null) { ActionElementMap val = new ActionElementMap(action.id, (ControllerElementType)((int)InputType == 1), DefaultJoystickInput, (Pole)((int)AxisRange == 2), AxisRange); ActionElementMap val2 = val; _jsMap = val; obj = val2; } return obj; } } internal ActionElementMap mMap { get { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Expected O, but got Unknown //IL_002e: Expected O, but got Unknown ActionElementMap obj = _mMap; if (obj == null) { ActionElementMap val = new ActionElementMap(action.id, (ControllerElementType)1, ToElementId(DefaultKeyboardInput)); ActionElementMap val2 = val; _mMap = val; obj = val2; } return obj; } } public ModKeybind(string displayToken, KeyCode defaultKeyboardInput, int defaultJoystickInput, string position = null, InputActionType type = 1, AxisRange range = 0) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) InternalName = displayToken.Replace("_", ""); DisplayToken = displayToken; DefaultKeyboardInput = defaultKeyboardInput; DefaultJoystickInput = defaultJoystickInput; Position = position; } public ButtonState GetButtonState(InputBankTest inputBank) { //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)inputBank != (Object)null && ModdedInputBank.BankMap.ContainsKey(inputBank)) { return ModdedInputBank.BankMap[inputBank].ButtonStates[this]; } Rebindables.ModLogger.LogError((object)("Attempted to get state for " + InternalName + " on a InputBankTest that does not exist!")); return default(ButtonState); } public bool IsMouse() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Invalid comparison between Unknown and I4 //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Invalid comparison between Unknown and I4 KeyCode defaultKeyboardInput = DefaultKeyboardInput; KeyCode val = defaultKeyboardInput; if (val - 323 <= 1 || val - 326 <= 2) { return true; } return false; } public static int ToElementId(KeyCode key) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Expected I4, but got Unknown //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0213: Unknown result type (might be due to invalid IL or missing references) //IL_033d: Expected I4, but got Unknown switch ((int)key) { default: switch (key - 256) { case 0: return 37; case 1: return 38; case 2: return 39; case 3: return 40; case 4: return 41; case 5: return 42; case 6: return 43; case 7: return 44; case 8: return 45; case 9: return 46; case 10: return 47; case 11: return 48; case 12: return 49; case 13: return 50; case 14: return 51; case 15: return 52; case 16: return 53; case 17: return 89; case 18: return 90; case 19: return 91; case 20: return 92; case 21: return 93; case 22: return 94; case 23: return 95; case 24: return 96; case 25: return 97; case 26: return 98; case 27: return 99; case 28: return 100; case 29: return 101; case 30: return 102; case 31: return 103; case 32: return 104; case 33: return 105; case 34: return 106; case 35: return 107; case 36: return 108; case 37: return 109; case 38: return 110; case 39: return 111; case 40: return 112; case 44: return 113; case 45: return 114; case 46: return 115; case 47: return 116; case 48: return 117; case 49: return 118; case 50: return 119; case 51: return 120; case 52: return 121; case 53: return 122; case 54: return 123; case 55: return 124; case 56: return 125; case 57: return 126; case 59: return 127; case 60: return 128; case 61: return 129; case 62: return 130; case 63: return 131; case 67: return 3; case 68: return 4; case 70: return 5; case 71: return 6; case 72: return 7; } break; case 0: return 0; case 97: return 1; case 98: return 2; case 99: return 3; case 100: return 4; case 101: return 5; case 102: return 6; case 103: return 7; case 104: return 8; case 105: return 9; case 106: return 10; case 107: return 11; case 108: return 12; case 109: return 13; case 110: return 14; case 111: return 15; case 112: return 16; case 113: return 17; case 114: return 18; case 115: return 19; case 116: return 20; case 117: return 21; case 118: return 22; case 119: return 23; case 120: return 24; case 121: return 25; case 122: return 26; case 48: return 27; case 49: return 28; case 50: return 29; case 51: return 30; case 52: return 31; case 53: return 32; case 54: return 33; case 55: return 34; case 56: return 35; case 57: return 36; case 32: return 54; case 8: return 55; case 9: return 56; case 12: return 57; case 13: return 58; case 19: return 59; case 27: return 60; case 33: return 61; case 34: return 62; case 35: return 63; case 36: return 64; case 38: return 65; case 39: return 66; case 40: return 67; case 41: return 68; case 42: return 69; case 43: return 70; case 44: return 71; case 45: return 72; case 46: return 73; case 47: return 74; case 58: return 75; case 59: return 76; case 60: return 77; case 61: return 78; case 62: return 79; case 63: return 80; case 64: return 81; case 91: return 82; case 92: return 83; case 93: return 84; case 94: return 85; case 95: return 86; case 96: return 87; case 127: return 88; case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 10: case 11: case 14: case 15: case 16: case 17: case 18: case 20: case 21: case 22: case 23: case 24: case 25: case 26: case 28: case 29: case 30: case 31: case 37: case 65: case 66: case 67: case 68: case 69: case 70: case 71: case 72: case 73: case 74: case 75: case 76: case 77: case 78: case 79: case 80: case 81: case 82: case 83: case 84: case 85: case 86: case 87: case 88: case 89: case 90: case 123: case 124: case 125: case 126: break; } return -1; } } internal class ModdedInputBank : MonoBehaviour { public PlayerCharacterMasterController pcmc; public Dictionary<ModKeybind, ButtonState> ButtonStates = new Dictionary<ModKeybind, ButtonState>(); public static Dictionary<InputBankTest, ModdedInputBank> BankMap = new Dictionary<InputBankTest, ModdedInputBank>(); public void Start() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) foreach (ModKeybind keybind in RebindAPI.Keybinds) { ButtonStates.Add(keybind, default(ButtonState)); } BankMap.Add(((Component)this).GetComponent<InputBankTest>(), this); } public void OnDestroy() { BankMap.Remove(((Component)this).GetComponent<InputBankTest>()); } public void FixedUpdate() { //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) LocalUser val = default(LocalUser); Player val2 = default(Player); CameraRigController val3 = default(CameraRigController); bool flag = default(bool); if (!Object.op_Implicit((Object)(object)pcmc)) { CharacterBody component = ((Component)this).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { pcmc = (Object.op_Implicit((Object)(object)component.master) ? component.master.playerCharacterMasterController : null); } } else if (PlayerCharacterMasterController.CanSendBodyInput(pcmc.networkUser, ref val, ref val2, ref val3, ref flag)) { for (int i = 0; i < RebindAPI.Keybinds.Count; i++) { ModKeybind modKeybind = RebindAPI.Keybinds[i]; ButtonState value = ButtonStates[modKeybind]; ((ButtonState)(ref value)).PushState(val2.GetButton(modKeybind.Id)); ButtonStates[modKeybind] = value; } } } } [BepInPlugin("pseudopulse.Rebindables", "Rebindables", "1.0.4")] public class Rebindables : BaseUnityPlugin { public const string PluginGUID = "pseudopulse.Rebindables"; public const string PluginAuthor = "pseudopulse"; public const string PluginName = "Rebindables"; public const string PluginVersion = "1.0.4"; public static ManualLogSource ModLogger; public static string RebindablesSaveInfoPath; public void Awake() { ModLogger = ((BaseUnityPlugin)this).Logger; RebindAPI.ApplyHooks(); VerifyFile(); } public static void VerifyFile() { RebindablesSaveInfoPath = Path.Combine(Application.persistentDataPath, "RebindablesInfo"); try { if (!File.Exists(RebindablesSaveInfoPath)) { File.CreateText(RebindablesSaveInfoPath).Close(); } } catch { RebindablesSaveInfoPath = Assembly.GetExecutingAssembly().Location.Replace("Rebindables.dll", "RebindablesInfo"); if (!File.Exists(RebindablesSaveInfoPath)) { File.CreateText(RebindablesSaveInfoPath).Close(); } } } public static int ReadID(string internalName) { string text = File.ReadAllText(RebindablesSaveInfoPath); List<string> list = text.Split("|").ToList(); int num = list.IndexOf(internalName); if (num == -1) { return -1; } if (num > list.Count || num + 1 > list.Count) { return -1; } return int.Parse(list[num + 1]); } public static bool CheckIDExists(int id) { string text = File.ReadAllText(RebindablesSaveInfoPath); List<string> list = text.Split("|").ToList(); for (int i = 0; i < list.Count; i++) { if (i % 2 != 0 && int.TryParse(list[i], out var result) && result == id) { return true; } } return false; } public static void WriteID(string internalName, int id) { string text = File.ReadAllText(RebindablesSaveInfoPath); int num = ReadID(internalName); if (num != -1) { text = text.Replace($"{internalName}|{num}|", ""); } text += $"{internalName}|{id}|"; File.WriteAllText(RebindablesSaveInfoPath, text); } } }