using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using ComputerysModdingUtilities;
using HarmonyLib;
using SettingsMod;
using UnityEngine;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: StraftatMod(true)]
[assembly: AssemblyTitle("ConfigRemedy")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ConfigRemedy")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("78d7866a-3e8b-4a94-8469-7f3ff67cb5ea")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
[BepInPlugin("Shiina.straftat.ConfigRemedy", "Config Remedy", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
[HarmonyPatch(typeof(PlayerPrefs), "Save")]
private static class PlayerPrefsSavePatch
{
private static void Postfix()
{
Instance.PopulateSettings(((BaseUnityPlugin)Instance).Config);
}
}
public static Plugin Instance { get; private set; }
private void Awake()
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Expected O, but got Unknown
//IL_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Expected O, but got Unknown
Instance = this;
ConfigFile config = ((BaseUnityPlugin)this).Config;
Harmony val = new Harmony("Shiina.straftat.settingsmod");
string[] array = new string[5] { "ChangeMasterVolumeSlider", "ChangeMusicVolumeSlider", "ChangeEffectVolumeSlider", "ChangeAmbientVolumeSlider", "ChangeMenuMusicVolumeSlider" };
foreach (string text in array)
{
MethodInfo methodInfo = AccessTools.Method(typeof(SoundManager), text, new Type[1] { typeof(Slider) }, (Type[])null);
val.Patch((MethodBase)methodInfo, (HarmonyMethod)null, new HarmonyMethod(typeof(Plugin), "CommonPostfix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
}
val.PatchAll();
ModConfig.BindTo(config);
if (!ModConfig.firstRun.Value)
{
LoadConfig();
((BaseUnityPlugin)this).Logger.LogInfo((object)"Current config loaded, for bug reports, suggestions contact .shiina. on discord");
}
else
{
PopulateSettings(config);
((BaseUnityPlugin)this).Logger.LogWarning((object)"This is first run of the mod cashing settings!");
}
}
public static void CommonPostfix(SoundManager __instance, Slider value, MethodBase __originalMethod)
{
Instance.PopulateSettings(((BaseUnityPlugin)Instance).Config);
}
private void LoadConfig()
{
PlayerPrefs.SetInt("toggleTwoAxis", ModConfig.toggleTwoAxis.Value ? 1 : 0);
PlayerPrefs.SetInt("invertMouseX", ModConfig.invertMouseX.Value ? 1 : 0);
PlayerPrefs.SetInt("invertMouseY", ModConfig.invertMouseY.Value ? 1 : 0);
PlayerPrefs.SetInt("sprintToggle", ModConfig.sprintToggle.Value ? 1 : 0);
PlayerPrefs.SetInt("aimToggle", ModConfig.aimToggle.Value ? 1 : 0);
PlayerPrefs.SetInt("leanToggle", ModConfig.leanToggle.Value ? 1 : 0);
PlayerPrefs.SetInt("crouchToggle", ModConfig.crouchToggle.Value ? 1 : 0);
PlayerPrefs.SetInt("reverseSprintBind", ModConfig.reverseSprintBind.Value ? 1 : 0);
PlayerPrefs.SetInt("isFullscreen", ModConfig.isFullscreen.Value ? 1 : 0);
PlayerPrefs.SetInt("enableVoiceChat", ModConfig.enableVoiceChat.Value ? 1 : 0);
PlayerPrefs.SetInt("minimalistUi", ModConfig.minimalistUi.Value ? 1 : 0);
PlayerPrefs.SetInt("motionBlur", ModConfig.motionBlur.Value ? 1 : 0);
PlayerPrefs.SetInt("inverseFireBinding", ModConfig.inverseFireBinding.Value ? 1 : 0);
PlayerPrefs.SetFloat("mouseSensitivity", ModConfig.mouseSensitivity.Value);
PlayerPrefs.SetFloat("mouseAimScopeSensitivity", ModConfig.mouseAimScopeSensitivity.Value);
PlayerPrefs.SetFloat("mouseAimSensitivity", ModConfig.mouseAimSensitivity.Value);
PlayerPrefs.SetFloat("mouseXSensitivity", ModConfig.mouseXSensitivity.Value);
PlayerPrefs.SetFloat("mouseYSensitivity", ModConfig.mouseYSensitivity.Value);
PlayerPrefs.SetFloat("fovValue", ModConfig.fovValue.Value);
PlayerPrefs.SetFloat("brightness", ModConfig.brightness.Value);
PlayerPrefs.SetFloat("damageIntensity", ModConfig.damageIntensity.Value);
PlayerPrefs.SetFloat("voiceChatVolume", ModConfig.voiceChatVolume.Value);
PlayerPrefs.SetInt("qualitySetting", 3);
PlayerPrefs.SetInt("targetFps", ModConfig.targetFps.Value);
PlayerPrefs.SetInt("targetFpsToggle", ModConfig.targetFpsToggle.Value ? 1 : 0);
PlayerPrefs.SetInt("useVsync", ModConfig.useVsync.Value ? 1 : 0);
PlayerPrefs.SetInt("exclusiveFullscreen", ModConfig.exclusiveFullscreen.Value ? 1 : 0);
PlayerPrefs.SetInt("pushToTalk", ModConfig.pushToTalk.Value ? 1 : 0);
PlayerPrefs.SetInt("reduceVFX", ModConfig.reduceVFX.Value ? 1 : 0);
PlayerPrefs.SetInt("inGameMusic", ModConfig.inGameMusic.Value ? 1 : 0);
PlayerPrefs.SetInt("enableFixedCrosshair", ModConfig.enableFixedCrosshair.Value ? 1 : 0);
PlayerPrefs.SetInt("showSpeedometer", ModConfig.showSpeedometer.Value ? 1 : 0);
PlayerPrefs.SetInt("disableCrosshair", ModConfig.disableCrosshair.Value ? 1 : 0);
PlayerPrefs.SetInt("qualitySetting", ModConfig.qualitySetting.Value);
PlayerPrefs.SetFloat("masterVolume", ModConfig.masterVolume.Value);
PlayerPrefs.SetFloat("effectsVolume", ModConfig.effectsVolume.Value);
PlayerPrefs.SetFloat("musicVolume", ModConfig.musicVolume.Value);
PlayerPrefs.SetFloat("ambientVolume", ModConfig.ambientVolume.Value);
PlayerPrefs.SetFloat("menuMusicVolume", ModConfig.menuMusicVolume.Value);
PlayerPrefs.Save();
}
private void PopulateSettings(ConfigFile config)
{
ModConfig.firstRun.Value = false;
ModConfig.toggleTwoAxis.Value = PlayerPrefs.GetInt("toggleTwoAxis", ModConfig.toggleTwoAxis.Value ? 1 : 0) == 1;
ModConfig.invertMouseX.Value = PlayerPrefs.GetInt("invertMouseX", ModConfig.invertMouseX.Value ? 1 : 0) == 1;
ModConfig.invertMouseY.Value = PlayerPrefs.GetInt("invertMouseY", ModConfig.invertMouseY.Value ? 1 : 0) == 1;
ModConfig.sprintToggle.Value = PlayerPrefs.GetInt("sprintToggle", ModConfig.sprintToggle.Value ? 1 : 0) == 1;
ModConfig.aimToggle.Value = PlayerPrefs.GetInt("aimToggle", ModConfig.aimToggle.Value ? 1 : 0) == 1;
ModConfig.leanToggle.Value = PlayerPrefs.GetInt("leanToggle", ModConfig.leanToggle.Value ? 1 : 0) == 1;
ModConfig.crouchToggle.Value = PlayerPrefs.GetInt("crouchToggle", ModConfig.crouchToggle.Value ? 1 : 0) == 1;
ModConfig.reverseSprintBind.Value = PlayerPrefs.GetInt("reverseSprintBind", ModConfig.reverseSprintBind.Value ? 1 : 0) == 1;
ModConfig.isFullscreen.Value = PlayerPrefs.GetInt("isFullscreen", ModConfig.isFullscreen.Value ? 1 : 0) == 1;
ModConfig.enableVoiceChat.Value = PlayerPrefs.GetInt("enableVoiceChat", ModConfig.enableVoiceChat.Value ? 1 : 0) == 1;
ModConfig.minimalistUi.Value = PlayerPrefs.GetInt("minimalistUi", ModConfig.minimalistUi.Value ? 1 : 0) == 1;
ModConfig.motionBlur.Value = PlayerPrefs.GetInt("motionBlur", ModConfig.motionBlur.Value ? 1 : 0) == 1;
ModConfig.inverseFireBinding.Value = PlayerPrefs.GetInt("inverseFireBinding", ModConfig.inverseFireBinding.Value ? 1 : 0) == 1;
ModConfig.pushToTalk.Value = PlayerPrefs.GetInt("pushToTalk", ModConfig.pushToTalk.Value ? 1 : 0) == 1;
ModConfig.reduceVFX.Value = PlayerPrefs.GetInt("reduceVFX", ModConfig.reduceVFX.Value ? 1 : 0) == 1;
ModConfig.inGameMusic.Value = PlayerPrefs.GetInt("inGameMusic", ModConfig.inGameMusic.Value ? 1 : 0) == 1;
ModConfig.enableFixedCrosshair.Value = PlayerPrefs.GetInt("enableFixedCrosshair", ModConfig.enableFixedCrosshair.Value ? 1 : 0) == 1;
ModConfig.showSpeedometer.Value = PlayerPrefs.GetInt("showSpeedometer", ModConfig.showSpeedometer.Value ? 1 : 0) == 1;
ModConfig.disableCrosshair.Value = PlayerPrefs.GetInt("disableCrosshair", ModConfig.disableCrosshair.Value ? 1 : 0) == 1;
ModConfig.targetFpsToggle.Value = PlayerPrefs.GetInt("targetFpsToggle", ModConfig.targetFpsToggle.Value ? 1 : 0) == 1;
ModConfig.useVsync.Value = PlayerPrefs.GetInt("useVsync", ModConfig.useVsync.Value ? 1 : 0) == 1;
ModConfig.exclusiveFullscreen.Value = PlayerPrefs.GetInt("exclusiveFullscreen", ModConfig.exclusiveFullscreen.Value ? 1 : 0) == 1;
ModConfig.qualitySetting.Value = PlayerPrefs.GetInt("qualitySetting", ModConfig.qualitySetting.Value);
ModConfig.targetFps.Value = PlayerPrefs.GetInt("targetFps", ModConfig.targetFps.Value);
ModConfig.mouseSensitivity.Value = PlayerPrefs.GetFloat("mouseSensitivity", ModConfig.mouseSensitivity.Value);
ModConfig.mouseAimScopeSensitivity.Value = PlayerPrefs.GetFloat("mouseAimScopeSensitivity", ModConfig.mouseAimScopeSensitivity.Value);
ModConfig.mouseAimSensitivity.Value = PlayerPrefs.GetFloat("mouseAimSensitivity", ModConfig.mouseAimSensitivity.Value);
ModConfig.mouseXSensitivity.Value = PlayerPrefs.GetFloat("mouseXSensitivity", ModConfig.mouseXSensitivity.Value);
ModConfig.mouseYSensitivity.Value = PlayerPrefs.GetFloat("mouseYSensitivity", ModConfig.mouseYSensitivity.Value);
ModConfig.fovValue.Value = PlayerPrefs.GetFloat("fovValue", ModConfig.fovValue.Value);
ModConfig.brightness.Value = PlayerPrefs.GetFloat("brightness", ModConfig.brightness.Value);
ModConfig.damageIntensity.Value = PlayerPrefs.GetFloat("damageIntensity", ModConfig.damageIntensity.Value);
ModConfig.voiceChatVolume.Value = PlayerPrefs.GetFloat("voiceChatVolume", ModConfig.voiceChatVolume.Value);
ModConfig.masterVolume.Value = PlayerPrefs.GetFloat("masterVolume", ModConfig.masterVolume.Value);
ModConfig.effectsVolume.Value = PlayerPrefs.GetFloat("effectsVolume", ModConfig.effectsVolume.Value);
ModConfig.musicVolume.Value = PlayerPrefs.GetFloat("musicVolume", ModConfig.musicVolume.Value);
ModConfig.ambientVolume.Value = PlayerPrefs.GetFloat("ambientVolume", ModConfig.ambientVolume.Value);
ModConfig.menuMusicVolume.Value = PlayerPrefs.GetFloat("menuMusicVolume", ModConfig.menuMusicVolume.Value);
ModConfig.Save(config);
}
}
namespace SettingsMod;
public static class ModConfig
{
public static ConfigEntry<bool> firstRun;
public static ConfigEntry<float> mouseSensitivity;
public static ConfigEntry<float> mouseAimSensitivity;
public static ConfigEntry<float> mouseAimScopeSensitivity;
public static ConfigEntry<bool> toggleTwoAxis;
public static ConfigEntry<float> mouseYSensitivity;
public static ConfigEntry<float> mouseXSensitivity;
public static ConfigEntry<bool> crouchToggle;
public static ConfigEntry<bool> leanToggle;
public static ConfigEntry<bool> aimToggle;
public static ConfigEntry<bool> sprintToggle;
public static ConfigEntry<bool> invertMouseY;
public static ConfigEntry<bool> invertMouseX;
public static ConfigEntry<bool> reverseSprintBind;
public static ConfigEntry<bool> inverseFireBinding;
public static ConfigEntry<float> masterVolume;
public static ConfigEntry<float> ambientVolume;
public static ConfigEntry<float> voiceChatVolume;
public static ConfigEntry<float> effectsVolume;
public static ConfigEntry<float> musicVolume;
public static ConfigEntry<float> menuMusicVolume;
public static ConfigEntry<bool> enableVoiceChat;
public static ConfigEntry<bool> pushToTalk;
public static ConfigEntry<bool> inGameMusic;
public static ConfigEntry<bool> isFullscreen;
public static ConfigEntry<int> targetFps;
public static ConfigEntry<int> qualitySetting;
public static ConfigEntry<bool> targetFpsToggle;
public static ConfigEntry<bool> exclusiveFullscreen;
public static ConfigEntry<bool> useVsync;
public static ConfigEntry<bool> showSpeedometer;
public static ConfigEntry<bool> reduceVFX;
public static ConfigEntry<bool> minimalistUi;
public static ConfigEntry<bool> motionBlur;
public static ConfigEntry<float> fovValue;
public static ConfigEntry<bool> enableFixedCrosshair;
public static ConfigEntry<bool> disableCrosshair;
public static ConfigEntry<float> brightness;
public static ConfigEntry<float> damageIntensity;
public static void BindTo(ConfigFile config)
{
firstRun = config.Bind<bool>("Internal", "First Run", true, "IF TRUE YOUR CURRENT CONFIG WILL BE OVERWRITTEN!");
mouseSensitivity = config.Bind<float>("Controls", "Mouse Sensitivity", 2f, (ConfigDescription)null);
mouseAimSensitivity = config.Bind<float>("Controls", "Aming Mouse Sensitivity", 2f, (ConfigDescription)null);
mouseAimScopeSensitivity = config.Bind<float>("Controls", "Sniper Rifle Mouse Sensitivity", 0.8f, (ConfigDescription)null);
toggleTwoAxis = config.Bind<bool>("Controls", "Two Axis Sensitivity", false, (ConfigDescription)null);
mouseYSensitivity = config.Bind<float>("Controls", "Vertical Sensitivity", 2f, (ConfigDescription)null);
mouseXSensitivity = config.Bind<float>("Controls", "Horizontal Sensitivity", 2f, (ConfigDescription)null);
crouchToggle = config.Bind<bool>("Controls", "Toggle Crouch", false, (ConfigDescription)null);
leanToggle = config.Bind<bool>("Controls", "Toggle Camera Lean", false, (ConfigDescription)null);
aimToggle = config.Bind<bool>("Controls", "Toggle Aim", false, (ConfigDescription)null);
sprintToggle = config.Bind<bool>("Controls", "Toggle Sprint", false, (ConfigDescription)null);
invertMouseY = config.Bind<bool>("Controls", "Invert Vertical Look", false, (ConfigDescription)null);
invertMouseX = config.Bind<bool>("Controls", "Invert Horizontal Look", false, (ConfigDescription)null);
reverseSprintBind = config.Bind<bool>("Controls", "Reverse Sprint Bind (Hold sprint key to walk when enabled)", false, (ConfigDescription)null);
inverseFireBinding = config.Bind<bool>("Controls", "Invert Fire Binding when holding two weapons", false, (ConfigDescription)null);
effectsVolume = config.Bind<float>("Audio", "Effects Music Volume", 1f, (ConfigDescription)null);
ambientVolume = config.Bind<float>("Audio", "Ambient Volume", 1f, (ConfigDescription)null);
voiceChatVolume = config.Bind<float>("Audio", "Voice Chat Volume", 1f, (ConfigDescription)null);
musicVolume = config.Bind<float>("Audio", "Victory Music Volume", 1f, (ConfigDescription)null);
menuMusicVolume = config.Bind<float>("Audio", "Music Volume", 1f, (ConfigDescription)null);
masterVolume = config.Bind<float>("Audio", "Main Volume", 1f, (ConfigDescription)null);
enableVoiceChat = config.Bind<bool>("Audio", "Enable Proximity Voice Chat", true, (ConfigDescription)null);
pushToTalk = config.Bind<bool>("Audio", "Push To Talk", true, (ConfigDescription)null);
inGameMusic = config.Bind<bool>("Audio", "Enable In Game Music", false, (ConfigDescription)null);
isFullscreen = config.Bind<bool>("Graphics", "Fullscreen", true, (ConfigDescription)null);
targetFps = config.Bind<int>("Graphics", "Target FPS", 120, (ConfigDescription)null);
targetFpsToggle = config.Bind<bool>("Graphics", "Enable FPS Cap", true, (ConfigDescription)null);
qualitySetting = config.Bind<int>("Graphics", "Graphics Settings Low - 0 Medium - 1 High - 2 Ultra - 3", 3, (ConfigDescription)null);
minimalistUi = config.Bind<bool>("Graphics", "Minimalist HUD (Enabling this improves performance)", true, (ConfigDescription)null);
motionBlur = config.Bind<bool>("Graphics", "Motion Blur", true, (ConfigDescription)null);
fovValue = config.Bind<float>("Graphics", "FOV Value", 90f, (ConfigDescription)null);
enableFixedCrosshair = config.Bind<bool>("Graphics", "Enable Static Crosshair", false, (ConfigDescription)null);
disableCrosshair = config.Bind<bool>("Graphics", "Disable Crosshair", false, (ConfigDescription)null);
brightness = config.Bind<float>("Graphics", "Brightness", 1f, (ConfigDescription)null);
damageIntensity = config.Bind<float>("Graphics", "Damage Overlay Intensity", 1f, (ConfigDescription)null);
exclusiveFullscreen = config.Bind<bool>("Graphics", "Exclusive Fullscreen", false, (ConfigDescription)null);
useVsync = config.Bind<bool>("Graphics", "Use VSync", false, (ConfigDescription)null);
showSpeedometer = config.Bind<bool>("Graphics", "Show Speedometer", true, (ConfigDescription)null);
reduceVFX = config.Bind<bool>("Graphics", "Reduce VFX", true, (ConfigDescription)null);
}
public static void Save(ConfigFile config)
{
config.Save();
}
}