using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using ComputerysModdingUtilities; using HarmonyLib; using HoverInfo; using ImprovedRebinds; using Microsoft.CodeAnalysis; using ModMenu.Api; using Steamworks; using TMPro; using UnityEngine; using UnityEngine.InputSystem; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: StraftatMod(true)] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Koki")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+d8adf90da0eaad24bf63b94004fe95fd7f9d472d")] [assembly: AssemblyProduct("StraftTweaks")] [assembly: AssemblyTitle("StraftTweaks")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] 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; } } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.koki.tweaks", "STRAFTAT Tweaks", "1.3.3")] public class STRAFTweakPlugin : BaseUnityPlugin { internal static STRAFTweakPlugin Instance; private Harmony _harmony = new Harmony("com.koki.tweaks"); private void Awake() { _harmony.PatchAll(); Instance = this; ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; InitConfig(); if (Chainloader.PluginInfos.ContainsKey("kestrel.straftat.modmenu")) { STRAFTweakModMenuCompat.Start(); } } private void InitConfig() { //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) SetJoinMessage.message = ((BaseUnityPlugin)this).Config.Bind("Custom Join Message", "Message", "{USER} has joined the lobby", "{USER} will be replaced with your username."); ScrollJump.isEnabled = ((BaseUnityPlugin)this).Config.Bind("Binding", "Scroll to jump", false, (ConfigDescription)null); OutlineColor.weaponColor = ((BaseUnityPlugin)this).Config.Bind("Outline Colors", "Weapon Outline Color", new Color(1f, 0.8196079f, 0.427451f), (ConfigDescription)null); OutlineColor.weaponTextColor = ((BaseUnityPlugin)this).Config.Bind("Outline Colors", "Weapon Interact Text Color", OutlineColor.DefaultTextColor, (ConfigDescription)null); OutlineColor.weaponTextBrightness = ((BaseUnityPlugin)this).Config.Bind("Outline Colors", "Weapon Interact Text Brightness", 1f, (ConfigDescription)null); ApplyRainbow.enable = ((BaseUnityPlugin)this).Config.Bind("Outline Colors", "Enable Rainbow Outlines", false, (ConfigDescription)null); ApplyRainbow.rainbowSpeed = ((BaseUnityPlugin)this).Config.Bind("Outline Colors", "Rainbow Fluctuation Speed", 0.2f, "i have no idea what the unit is for this"); WeaponInteractPrompt.enablePrompt = ((BaseUnityPlugin)this).Config.Bind("Text Popups", "Enable Weapon Interact Text", true, (ConfigDescription)null); DoorInteractPrompt.enablePrompt = ((BaseUnityPlugin)this).Config.Bind("Text Popups", "Enable Door Interact Text", true, (ConfigDescription)null); WeaponInteractPrompt.disableKey = ((BaseUnityPlugin)this).Config.Bind("Text Popups", "Disable Key Prompt", true, "Transform \"Handgun [F]\" into just \"Handgun\". Does the same for door interactions."); MinHUDPatch.hideFPS = ((BaseUnityPlugin)this).Config.Bind("HUD", "Hide FPS Display", true, (ConfigDescription)null); MinHUDPatch.hidePing = ((BaseUnityPlugin)this).Config.Bind("HUD", "Hide Ping Display", true, (ConfigDescription)null); OutlineColor.weaponColor.SettingChanged += OutlineColor.UpdateColorsFromConfig; OutlineColor.weaponTextColor.SettingChanged += OutlineColor.UpdateColorsFromConfig; OutlineColor.weaponTextBrightness.SettingChanged += OutlineColor.UpdateColorsFromConfig; ScrollJump.isEnabled.SettingChanged += delegate { ScrollJump.Postfix(); }; ApplyRainbow.enable.SettingChanged += OutlineColor.UpdateColorsFromConfig; } private void OnDestroy() { _harmony.UnpatchSelf(); OutlineColor.weaponColor.SettingChanged -= OutlineColor.UpdateColorsFromConfig; OutlineColor.weaponTextColor.SettingChanged -= OutlineColor.UpdateColorsFromConfig; OutlineColor.weaponTextBrightness.SettingChanged -= OutlineColor.UpdateColorsFromConfig; ScrollJump.isEnabled.SettingChanged -= delegate { ScrollJump.Postfix(); }; ApplyRainbow.enable.SettingChanged -= OutlineColor.UpdateColorsFromConfig; } } internal static class STRAFTweakModMenuCompat { internal static void Start() { try { ModMenuCustomisation.SetPluginDescription("Tweak things like weapon outline color or mouse wheel binds :D\n\nChanges are applied immediately.\n\n"); } catch (InvalidOperationException) { } } private static void ConfigBuilder(OptionListContext c) { } } [HarmonyPatch(typeof(PlayerHealth), "Update")] internal static class MinHUDPatch { internal static ConfigEntry hidePing; internal static ConfigEntry hideFPS; private static void Postfix(PlayerHealth __instance) { if (hidePing.Value) { ((TMP_Text)__instance.controller.pauseManager.minimalPingText).text = ""; } if (hideFPS.Value) { ((TMP_Text)__instance.controller.pauseManager.minimalFpsText).text = ""; } } } [HarmonyPatch(typeof(ClientInstance), "OnStartClient")] internal static class SetJoinMessage { internal static ConfigEntry message; private static IEnumerable Transpiler(IEnumerable instructions) { //IL_0019: 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_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Expected O, but got Unknown MethodInfo methodInfo = AccessTools.Method(typeof(SetJoinMessage), "JoinMessage", (Type[])null, (Type[])null); return new CodeMatcher(instructions, (ILGenerator)null).MatchForward(false, (CodeMatch[])(object)new CodeMatch[1] { new CodeMatch((OpCode?)OpCodes.Ldstr, (object)" joined the lobby", (string)null) }).Advance(-1).RemoveInstructions(3) .Insert((CodeInstruction[])(object)new CodeInstruction[1] { new CodeInstruction(OpCodes.Call, (object)methodInfo) }) .InstructionEnumeration(); } private static string JoinMessage() { return message.Value.Replace("{USER}", SteamFriends.GetPersonaName()); } } namespace StraftTweaks { public static class MyPluginInfo { public const string PLUGIN_GUID = "com.koki.tweaks"; public const string PLUGIN_NAME = "STRAFTAT Tweaks"; public const string PLUGIN_VERSION = "1.3.3"; } } namespace ImprovedRebinds { [HarmonyPatch(typeof(InputManager), "LoadBindingOverride")] internal static class AddKeyPressInput { private static void Prefix(string actionName) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: 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_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) if (actionName != "ChangeWeapon") { return; } InputAction val = InputManager.inputActions.asset.FindAction(actionName, false); if (val.bindings.Count == 1) { BindingSyntax val2 = InputActionSetupExtensions.ChangeBinding(val, 0); ((BindingSyntax)(ref val2)).Erase(); CompositeSyntax val3 = InputActionSetupExtensions.AddCompositeBinding(val, "2DVector", (string)null, (string)null); ((CompositeSyntax)(ref val3)).With("Up", "", (string)null, (string)null); if (Utility.IsNullOrWhiteSpace(PlayerPrefs.GetString("PlayerControls (UnityEngine.InputSystem.InputActionAsset):PlayerChangeWeapon1"))) { InputActionSetupExtensions.AddBinding(val, "/scroll", (string)null, (string)null, (string)null); } } } } [HarmonyPatch(typeof(InputManager), "DoRebind")] internal static class OnBind { private static void Prefix(InputAction actionToRebind, ref bool allCompositeParts) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) if (actionToRebind.name == "ChangeWeapon") { if (actionToRebind.bindings.Count == 3) { BindingSyntax val = InputActionSetupExtensions.ChangeBinding(actionToRebind, 2); ((BindingSyntax)(ref val)).Erase(); } actionToRebind.expectedControlType = "Button"; allCompositeParts = false; } } } [HarmonyPatch(typeof(ReBindUI), "UpdateUI")] internal static class UpdateBindUI { private static void Postfix(ReBindUI __instance) { //IL_004c: Unknown result type (might be due to invalid IL or missing references) if (__instance.inputActionReference.action.name == "ChangeWeapon") { string @string = PlayerPrefs.GetString("PlayerControls (UnityEngine.InputSystem.InputActionAsset):PlayerChangeWeapon1"); if (Utility.IsNullOrWhiteSpace(@string)) { InputActionSetupExtensions.AddBinding(InputManager.inputActions.asset.FindAction("ChangeWeapon", false), "/scroll", (string)null, (string)null, (string)null); ((TMP_Text)__instance.rebindText).text = "Scroll"; return; } TextMeshProUGUI rebindText = __instance.rebindText; string text = @string; int num = @string.IndexOf("/") + 1; ((TMP_Text)rebindText).text = text.Substring(num, text.Length - num).ToUpper(); } } } [HarmonyPatch(typeof(InputManager), "LoadBindingOverride")] internal static class ScrollJump { internal static ConfigEntry isEnabled; internal static void Postfix() { //IL_0017: 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_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) InputAction val = InputManager.inputActions.asset.FindAction("Jump", false); int num = val.bindings.IndexOf((Predicate)((InputBinding b) => ((InputBinding)(ref b)).path == "/scroll")); if (isEnabled.Value) { if (num == -1) { InputActionSetupExtensions.AddBinding(val, "/scroll", (string)null, (string)null, "Keyboard&Mouse"); } } else if (num != -1) { BindingSyntax val2 = InputActionSetupExtensions.ChangeBinding(val, num); ((BindingSyntax)(ref val2)).Erase(); } } } } namespace HoverInfo { [HarmonyPatch(typeof(PauseManager), "Awake")] internal static class OutlineColor { internal static readonly Color DefaultTextColor = new Color(2f, 1.106f, 0f); internal static ConfigEntry weaponColor; internal static ConfigEntry weaponTextColor; internal static ConfigEntry weaponTextBrightness; private static bool HasRanOnStartup = false; internal static readonly int weaponOutline = Shader.PropertyToID("_Color_Outline"); internal static readonly int textOutline = Shader.PropertyToID("_OutlineColor"); internal static readonly int outlineShaderID = ((Object)Shader.Find("S_WeaponOutline_00")).GetInstanceID(); private static Lazy _weaponMaterials = new Lazy(() => (from mat in Resources.FindObjectsOfTypeAll() where ((Object)mat.shader).GetInstanceID() == outlineShaderID select mat).ToArray()); private static void Postfix() { if (!HasRanOnStartup) { UpdateColorsFromConfig(); HasRanOnStartup = true; } } internal static void UpdateColorsFromConfig(object sender, EventArgs args) { UpdateColorsFromConfig(); } internal static void UpdateColorsFromConfig() { //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) CollectionExtensions.Do((IEnumerable)_weaponMaterials.Value, (Action)delegate(Material mat) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) mat.SetColor(weaponOutline, weaponColor.Value); }); Renderer[] array = Object.FindObjectsOfType(); for (int i = 0; i < array.Length; i++) { Material[] sharedMaterials = array[i].sharedMaterials; foreach (Material val in sharedMaterials) { if (Object.op_Implicit((Object)(object)val) && ((Object)val.shader).GetInstanceID() == outlineShaderID) { val.SetColor(weaponOutline, weaponColor.Value); } } } Color val2 = ((!(weaponTextColor.Value == new Color(1f, 1f, 0f)) && !(weaponTextColor.Value == DefaultTextColor)) ? (weaponTextColor.Value * Color.op_Implicit(Vector4.one) * weaponTextBrightness.Value) : DefaultTextColor); ((TMP_Text)PauseManager.Instance.grabPopup).fontSharedMaterial.SetColor(textOutline, val2); ((TMP_Text)PauseManager.Instance.interactPopup).fontSharedMaterial.SetColor(textOutline, val2); } } [HarmonyPatch(typeof(ItemBehaviour), "OnFocus")] internal static class WeaponInteractPrompt { internal static ConfigEntry enablePrompt; internal static ConfigEntry disableKey; private static void Postfix(ItemBehaviour __instance) { ((Component)PauseManager.Instance.grabPopup).gameObject.SetActive(enablePrompt.Value); if (disableKey.Value) { ((TMP_Text)PauseManager.Instance.grabPopup).text = __instance.weaponName.ToLower(); } } } [HarmonyPatch(typeof(PhysicsProp), "OnFocus")] internal static class BarrelInteractPrompt { private static void Postfix(PhysicsProp __instance) { ((Component)PauseManager.Instance.interactPopup).gameObject.SetActive(WeaponInteractPrompt.enablePrompt.Value); if (WeaponInteractPrompt.disableKey.Value) { ((TMP_Text)PauseManager.Instance.interactPopup).text = (__instance.sync___get_value_grabbed() ? "drop" : "grab") + " " + ((InteractEnvironment)__instance).popupText.ToLower(); } } } [HarmonyPatch(typeof(Door), "OnFocus")] internal static class DoorInteractPrompt { internal static ConfigEntry enablePrompt; private static void Postfix(Door __instance) { ((Component)PauseManager.Instance.interactPopup).gameObject.SetActive(enablePrompt.Value); if (WeaponInteractPrompt.disableKey.Value) { ((TMP_Text)PauseManager.Instance.interactPopup).text = (__instance.sync___get_value_isOpen() ? __instance.closeDoor.ToLower() : ((InteractEnvironment)__instance).popupText.ToLower()); } } } [HarmonyPatch(typeof(ItemBehaviour), "OnFocus")] internal static class ApplyRainbow { internal static ConfigEntry enable; internal static ConfigEntry rainbowSpeed; private static void Postfix(ItemBehaviour __instance) { if (enable.Value && !Object.op_Implicit((Object)(object)((Component)__instance).gameObject.GetComponent())) { ((Component)__instance).gameObject.AddComponent().mats = __instance.hoveredObjectMat; } } } [HarmonyPatch(typeof(ItemBehaviour), "OnLoseFocus")] internal static class RemoveRainbow { private static void Postfix(ItemBehaviour __instance) { if (Object.op_Implicit((Object)(object)((Component)__instance).gameObject.GetComponent())) { Object.Destroy((Object)(object)((Component)__instance).gameObject.GetComponent()); } } } internal class RainbowOutline : MonoBehaviour { internal List mats; private void Update() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0040: 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_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) Color val = Color.HSVToRGB(Time.time * ApplyRainbow.rainbowSpeed.Value % 1f, 1f, 1f); foreach (Material mat in mats) { mat.SetColor(OutlineColor.weaponOutline, val); } Color val2 = val * Color.op_Implicit(Vector4.one) * OutlineColor.weaponTextBrightness.Value; ((TMP_Text)PauseManager.Instance.grabPopup).fontSharedMaterial.SetColor(OutlineColor.textOutline, val2); ((TMP_Text)PauseManager.Instance.interactPopup).fontSharedMaterial.SetColor(OutlineColor.textOutline, val2); } } }