using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using HarmonyLib; using Microsoft.CodeAnalysis; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("BeardnBlade.ReclaimButtonDefFix")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("BeardnBlade.ReclaimButtonDefFix")] [assembly: AssemblyTitle("BeardnBlade.ReclaimButtonDefFix")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [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 BeardnBlade.ReclaimButtonDefFix { [BepInPlugin("BeardnBlade.ReclaimButtonDefFix", "BeardnBlade Reclaim Button Definition Fix", "1.0.1")] public sealed class Plugin : BaseUnityPlugin { public const string PluginGuid = "BeardnBlade.ReclaimButtonDefFix"; public const string PluginName = "BeardnBlade Reclaim Button Definition Fix"; public const string PluginVersion = "1.0.1"; private void Awake() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) new Harmony("BeardnBlade.ReclaimButtonDefFix").PatchAll(); } } [HarmonyPatch] internal static class LocalizationGetBoundKeyStringPatch { private static readonly Dictionary FallbackLabels = new Dictionary { ["LStick"] = "LS", ["LeftStick"] = "LS", ["RStick"] = "RS", ["RightStick"] = "RS", ["LTrigger"] = "LT", ["LeftTrigger"] = "LT", ["RTrigger"] = "RT", ["RightTrigger"] = "RT", ["LBumper"] = "LB", ["LeftBumper"] = "LB", ["RBumper"] = "RB", ["RightBumper"] = "RB", ["ButtonA"] = "A", ["ButtonB"] = "B", ["ButtonX"] = "X", ["ButtonY"] = "Y" }; private static MethodBase TargetMethod() { return AccessTools.Method("Localization:GetBoundKeyString", new Type[2] { typeof(string), typeof(bool) }, (Type[])null); } private static void Postfix(string bindingName, bool emptyStringOnMissing, ref string __result) { if (!string.IsNullOrEmpty(bindingName) && !(string.IsNullOrEmpty(__result) && emptyStringOnMissing) && FallbackLabels.TryGetValue(bindingName, out string value) && LooksMissing(__result, bindingName)) { __result = value; } } private static bool LooksMissing(string value, string bindingName) { if (!string.IsNullOrEmpty(value) && value.Contains(bindingName)) { if (!value.Contains("Missing def") && !value.Contains("Missing button def")) { return value.Contains("MissingInputButtonDef"); } return true; } return false; } } }