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 BetterScanVision v0.0.6
BetterScanVision.dll
Decompiled 2 years agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using CSync.Extensions; using CSync.Lib; using GameNetcodeStuff; using HarmonyLib; using LethalConfig; using LethalConfig.ConfigItems; using Microsoft.CodeAnalysis; 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: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("LethalConfig")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")] [assembly: AssemblyCompany("BetterScanVision")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Light your way through the darkness with every scan. Highly configurable.")] [assembly: AssemblyFileVersion("0.0.6.0")] [assembly: AssemblyInformationalVersion("0.0.6")] [assembly: AssemblyProduct("BetterScanVision")] [assembly: AssemblyTitle("BetterScanVision")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.6.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; } } } namespace BetterScanVision { [BepInPlugin("DBJ.BetterScanVision", "BetterScanVision", "0.0.6")] [BepInDependency("com.sigurd.csync", "5.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class BetterScanVisionBase : BaseUnityPlugin { internal const string modGUID = "DBJ.BetterScanVision"; internal const string modName = "BetterScanVision"; internal const string internalmodVersion = "0.0.6"; internal static readonly Harmony harmony = new Harmony("DBJ.BetterScanVision"); internal static readonly ManualLogSource mls = Logger.CreateLogSource("DBJ.BetterScanVision"); internal static ConfigFile configFile; internal static SyncedConfigValues configValues; internal static readonly AnimationCurve scanTimeCurve = new AnimationCurve((Keyframe[])(object)new Keyframe[4] { new Keyframe(0f, 0f), new Keyframe(0.43f, 1f), new Keyframe(0.72f, 1f), new Keyframe(1f, 0f) }); private void LocalConfigUpdate_visionColor(object sender = null, EventArgs e = null) { //IL_007e: Unknown result type (might be due to invalid IL or missing references) ConfigEntry<string> entry = configValues.visionColor.Entry; entry.SettingChanged -= LocalConfigUpdate_visionColor; Color val = default(Color); if (!ColorUtility.TryParseHtmlString("#" + entry.Value, ref val)) { ColorUtility.TryParseHtmlString("#0E154C", ref val); mls.LogWarning((object)("[Local] Night Vision Color \"" + entry.Value + "\" could not be parsed; it will be replaced with the default value \"0E154C\"!")); } val.a = 1f; entry.Value = ColorUtility.ToHtmlStringRGB(val); entry.SettingChanged += LocalConfigUpdate_visionColor; } private void Awake() { mls.LogInfo((object)"[Awake Log 1 / 3] Initializing BetterScanVision..."); configFile = ((BaseUnityPlugin)this).Config; configValues = new SyncedConfigValues(configFile); LocalConfigUpdate_visionColor(); if (LethalConfigCompat.IsAvailable) { LethalConfigCompat.AddConfigItem(configValues.visionRangeMaxScalar.Entry); LethalConfigCompat.AddConfigItem(configValues.visionIntensityMaxScalar.Entry); LethalConfigCompat.AddConfigItem(configValues.visionDuration.Entry); LethalConfigCompat.AddConfigItem(configValues.visionColor.Entry); LethalConfigCompat.AddConfigItem(configValues.outdoorsVisionRangeScalar.Entry); LethalConfigCompat.AddConfigItem(configValues.outdoorsVisionIntensityScalar.Entry); } mls.LogInfo((object)"[Awake Log 2 / 3] Config initialized..."); harmony.PatchAll(); mls.LogInfo((object)"[Awake Log 3 / 3] Patched PlayerControllerB methods!"); } } internal class SyncedConfigValues : SyncedConfig2<SyncedConfigValues> { [SyncedEntryField] internal SyncedEntry<float> visionRangeMaxScalar = null; [SyncedEntryField] internal SyncedEntry<float> visionIntensityMaxScalar = null; [SyncedEntryField] internal SyncedEntry<float> visionDuration = null; [SyncedEntryField] internal SyncedEntry<string> visionColor = null; [SyncedEntryField] internal SyncedEntry<float> outdoorsVisionRangeScalar = null; [SyncedEntryField] internal SyncedEntry<float> outdoorsVisionIntensityScalar = null; internal const float scanDuration = 1.3f; internal const float visionDurationDefault = 0.49f; internal const string visionColorDefault = "0E154C"; internal Color visionColorParsed; private void ConfigUpdate_visionColor(object sender = null, EventArgs e = null) { //IL_009e: Unknown result type (might be due to invalid IL or missing references) visionColor.Changed -= ConfigUpdate_visionColor; if (!ColorUtility.TryParseHtmlString("#" + visionColor.Value, ref visionColorParsed)) { ColorUtility.TryParseHtmlString("#0E154C", ref visionColorParsed); BetterScanVisionBase.mls.LogWarning((object)("[Synced] Night Vision Color \"" + visionColor.Value + "\" could not be parsed; it will be replaced with the default value \"0E154C\"!")); } visionColorParsed.a = 1f; if ((Object)(object)PlayerControllerBPatches.nightVision != (Object)null) { PlayerControllerBPatches.nightVision.color = visionColorParsed; } visionColor.Changed += ConfigUpdate_visionColor; } internal SyncedConfigValues(ConfigFile configFile) : base("DBJ.BetterScanVision") { //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Expected O, but got Unknown //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Expected O, but got Unknown //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Expected O, but got Unknown //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Expected O, but got Unknown //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Expected O, but got Unknown //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Expected O, but got Unknown //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Expected O, but got Unknown //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Expected O, but got Unknown //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Expected O, but got Unknown visionRangeMaxScalar = SyncedBindingExtensions.BindSyncedEntry<float>(configFile, "Night Vision Parameters", "Night Vision Range Maximum Scalar", 2.8f, new ConfigDescription("Scales the night vision's maximum range in relation to the vanilla night vision's range. A higher number means an extended night vision range at the scan's peak | a lower number means a decreased night vision range.\n\n1 = unchanged | 0 = disabled", (AcceptableValueBase)new AcceptableValueRange<float>(0f, 1000f), Array.Empty<object>())); visionIntensityMaxScalar = SyncedBindingExtensions.BindSyncedEntry<float>(configFile, "Night Vision Parameters", "Night Vision Intensity Maximum Scalar", 10f, new ConfigDescription("Scales the night vision's maximum intensity in relation to the vanilla night vision's intensity. A higher number means an extended night vision intensity at the scan's peak | a lower number means a decreased night vision range.\n\n1 = unchanged | 0 = disabled", (AcceptableValueBase)new AcceptableValueRange<float>(0f, 1000f), Array.Empty<object>())); visionDuration = SyncedBindingExtensions.BindSyncedEntry<float>(configFile, "Night Vision Parameters", "Night Vision Duration", 0.49f, new ConfigDescription("Sets the night vision's duration in seconds. A higher number means an extended night vision duration | a lower number means a decreased night vision duration.", (AcceptableValueBase)new AcceptableValueRange<float>(0.001f, 1.3f), Array.Empty<object>())); visionColor = SyncedBindingExtensions.BindSyncedEntry<string>(configFile, "Night Vision Parameters", "Night Vision Color", "0E154C", "Sets the night vision's color in the form of a hex color code (\"RRGGBB\"). Alpha values will be discarded."); outdoorsVisionRangeScalar = SyncedBindingExtensions.BindSyncedEntry<float>(configFile, "Outdoors Night Vision Parameters", "Outdoors Night Vision Range Scalar", 150f, new ConfigDescription("Scales the night vision's range while outdoors. A higher number means an extended night vision range while outdoors | a lower number means a decreased night vision range.\n\n1 = unchanged | 0 = disabled", (AcceptableValueBase)new AcceptableValueRange<float>(0f, 1000f), Array.Empty<object>())); outdoorsVisionIntensityScalar = SyncedBindingExtensions.BindSyncedEntry<float>(configFile, "Outdoors Night Vision Parameters", "Outdoors Night Vision Intensity Scalar", 12f, new ConfigDescription("Scales the night vision's intensity while outdoors. A higher number means an extended night vision intensity while outdoors | a lower number means a decreased night vision intensity.\n\n1 = unchanged | 0 = disabled", (AcceptableValueBase)new AcceptableValueRange<float>(0f, 1000f), Array.Empty<object>())); ConfigUpdate_visionColor(); ConfigManager.Register<SyncedConfigValues>((SyncedConfig2<SyncedConfigValues>)this); } } [HarmonyPatch(typeof(PlayerControllerB))] internal class PlayerControllerBPatches { internal const float base_intensity = 366.9317f; internal const float base_range = 12f; internal static Light nightVision; [HarmonyPatch("LateUpdate")] [HarmonyPostfix] public static void LateUpdatePostfix(PlayerControllerB __instance) { //IL_01f8: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)__instance != (Object)(object)StartOfRound.Instance?.localPlayerController) { return; } if ((Object)(object)nightVision == (Object)null || !((Behaviour)nightVision).isActiveAndEnabled || (Object)(object)((Component)nightVision).transform.parent != (Object)(object)((Component)__instance).transform) { Light component = __instance.nightVision; if ((Object)(object)component == (Object)null) { BetterScanVisionBase.mls.LogError((object)"[PlayerControllerB.LateUpdate() Postfix] Could not find PlayerControllerB.nightVision (another mod has tampered with it). Attempting to find any equivalent in the scene (another error will be thrown if this attempt fails; even if it succeeds, the results may not look correct)"); GameObject val = GameObject.Find("NightVision"); if ((Object)(object)val == (Object)null || (Object)(object)val.GetComponent<Light>() == (Object)null) { BetterScanVisionBase.mls.LogError((object)"[PlayerControllerB.LateUpdate() Postfix] Could not find a PlayerControllerB.nightVision equivalent! Unpatching and aborting!"); Harmony.UnpatchAll(); return; } component = val.GetComponent<Light>(); } nightVision = Object.Instantiate<Light>(component, ((Component)__instance).transform); nightVision.type = (LightType)2; nightVision.shape = (LightShape)0; nightVision.spotAngle = 30f; nightVision.innerSpotAngle = 21.80208f; nightVision.colorTemperature = 11762f; nightVision.useColorTemperature = true; nightVision.bounceIntensity = 0f; nightVision.useBoundingSphereOverride = false; nightVision.useViewFrustumForShadowCasterCull = true; nightVision.shadowCustomResolution = -1; nightVision.shadowBias = 0.05f; nightVision.shadowNormalBias = 0.4f; nightVision.shadowNearPlane = 0.2f; nightVision.useShadowMatrixOverride = false; nightVision.cullingMask = -1; nightVision.renderingLayerMask = 1; nightVision.lightShadowCasterMode = (LightShadowCasterMode)2; nightVision.shadows = (LightShadows)0; nightVision.renderMode = (LightRenderMode)0; nightVision.color = BetterScanVisionBase.configValues.visionColorParsed; } float num = 0.3f - (HUDManager.Instance?.playerPingingScan ?? (-1f)); float num2 = Mathf.Clamp(num / BetterScanVisionBase.configValues.visionDuration.Value, 0f, 1f); float num3 = BetterScanVisionBase.scanTimeCurve.Evaluate(num2); float num4 = BetterScanVisionBase.configValues.visionIntensityMaxScalar.Value; float num5 = BetterScanVisionBase.configValues.visionRangeMaxScalar.Value; if (!__instance.isInsideFactory && !__instance.isInHangarShipRoom) { num4 *= BetterScanVisionBase.configValues.outdoorsVisionIntensityScalar.Value; num5 *= BetterScanVisionBase.configValues.outdoorsVisionRangeScalar.Value; } nightVision.intensity = Mathf.Lerp(0f, 366.9317f * num4, num3); nightVision.range = Mathf.Lerp(0f, 12f * num5, num3); ((Behaviour)nightVision).enabled = true; } } internal static class LethalConfigCompat { private const string GUID = "ainavt.lc.lethalconfig"; internal static bool IsAvailable => Chainloader.PluginInfos.ContainsKey("ainavt.lc.lethalconfig"); [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] internal static void AddConfigItem(ConfigEntry<int> entry, bool isSlider = true, bool restartRequired = false) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Expected O, but got Unknown //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown if (IsAvailable) { if (isSlider) { LethalConfigManager.AddConfigItem((BaseConfigItem)new IntSliderConfigItem(entry, restartRequired)); } else { LethalConfigManager.AddConfigItem((BaseConfigItem)new IntInputFieldConfigItem(entry, restartRequired)); } } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] internal static void AddConfigItem(ConfigEntry<float> entry, bool isSlider = true, bool restartRequired = false) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Expected O, but got Unknown //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown if (IsAvailable) { if (isSlider) { LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatSliderConfigItem(entry, restartRequired)); } else { LethalConfigManager.AddConfigItem((BaseConfigItem)new FloatInputFieldConfigItem(entry, restartRequired)); } } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] internal static void AddConfigItem(ConfigEntry<bool> entry, bool restartRequired = false) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown if (IsAvailable) { LethalConfigManager.AddConfigItem((BaseConfigItem)new BoolCheckBoxConfigItem(entry, restartRequired)); } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] internal static void AddConfigItem(ConfigEntry<string> entry, bool isDropdown = false, bool restartRequired = false) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Expected O, but got Unknown //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown if (IsAvailable) { if (isDropdown) { LethalConfigManager.AddConfigItem((BaseConfigItem)new TextDropDownConfigItem(entry, restartRequired)); } else { LethalConfigManager.AddConfigItem((BaseConfigItem)new TextInputFieldConfigItem(entry, restartRequired)); } } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] internal static void AddConfigItem(ConfigEntry<Enum> entry, bool restartRequired = false) { if (IsAvailable) { LethalConfigManager.AddConfigItem((BaseConfigItem)(object)new EnumDropDownConfigItem<Enum>(entry, restartRequired)); } } } public static class PluginInfo { public const string PLUGIN_GUID = "BetterScanVision"; public const string PLUGIN_NAME = "BetterScanVision"; public const string PLUGIN_VERSION = "0.0.6"; } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }