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 Flash Patch v1.1.1
FlashPatch.dll
Decompiled a year agousing System; using System.Collections; using System.Collections.Generic; 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.Configuration; using BepInEx.Logging; using HarmonyLib; 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-firstpass")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("Autodesk.Fbx")] [assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")] [assembly: IgnoresAccessChecksTo("FbxBuildTestAssets")] [assembly: IgnoresAccessChecksTo("Klattersynth")] [assembly: IgnoresAccessChecksTo("Photon3Unity3D")] [assembly: IgnoresAccessChecksTo("PhotonChat")] [assembly: IgnoresAccessChecksTo("PhotonRealtime")] [assembly: IgnoresAccessChecksTo("PhotonUnityNetworking")] [assembly: IgnoresAccessChecksTo("PhotonUnityNetworking.Utilities")] [assembly: IgnoresAccessChecksTo("PhotonVoice.API")] [assembly: IgnoresAccessChecksTo("PhotonVoice")] [assembly: IgnoresAccessChecksTo("PhotonVoice.PUN")] [assembly: IgnoresAccessChecksTo("SingularityGroup.HotReload.Runtime")] [assembly: IgnoresAccessChecksTo("SingularityGroup.HotReload.Runtime.Public")] [assembly: IgnoresAccessChecksTo("Sirenix.OdinInspector.Attributes")] [assembly: IgnoresAccessChecksTo("Sirenix.Serialization.Config")] [assembly: IgnoresAccessChecksTo("Sirenix.Serialization")] [assembly: IgnoresAccessChecksTo("Sirenix.Utilities")] [assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")] [assembly: IgnoresAccessChecksTo("Unity.Formats.Fbx.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")] [assembly: IgnoresAccessChecksTo("Unity.Postprocessing.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")] [assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")] [assembly: IgnoresAccessChecksTo("Unity.Timeline")] [assembly: IgnoresAccessChecksTo("Unity.VisualScripting.Antlr3.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.VisualScripting.Core")] [assembly: IgnoresAccessChecksTo("Unity.VisualScripting.Flow")] [assembly: IgnoresAccessChecksTo("Unity.VisualScripting.State")] [assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.UI")] [assembly: IgnoresAccessChecksTo("websocket-sharp")] [assembly: AssemblyCompany("Netotic")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("FlashPatch")] [assembly: AssemblyTitle("FlashPatch")] [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.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] [Microsoft.CodeAnalysis.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] [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 FlashPatch { [BepInPlugin("Netotic.FlashPatch", "FlashPatch", "1.0")] public class FlashPatch : BaseUnityPlugin { internal ConfigEntry<float> flickerChanceConfig; internal ConfigEntry<bool> flicker; internal static FlashPatch Instance { get; private set; } internal static ManualLogSource Logger => Instance._logger; private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger; internal Harmony? Harmony { get; set; } private void Awake() { //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Expected O, but got Unknown Instance = this; ((Component)this).gameObject.transform.parent = null; ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; Patch(); Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} has loaded!"); flickerChanceConfig = ((BaseUnityPlugin)this).Config.Bind<float>("General", "FlashLight flicker chance", 0.05f, new ConfigDescription("Set the chance of the flashlight flickering.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), Array.Empty<object>())); flicker = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Toggle flicker", true, "Set whether you want the flashlight to flicker. True is On, False is Off"); } internal void Patch() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown //IL_0026: Expected O, but got Unknown if (Harmony == null) { Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); Harmony val2 = val; Harmony = val; } Harmony.PatchAll(); } internal void Unpatch() { Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } } } [HarmonyPatch(typeof(FlashlightController), "Update")] public static class FlashlightControllerPatch { public class FlashlightData { public bool manualToggleState = false; public bool isOn = false; } [CompilerGenerated] private sealed class <FlickerCoroutine>d__8 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public FlashlightController __instance; public FlashlightData value; private int <i>5__1; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <FlickerCoroutine>d__8(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Expected O, but got Unknown //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; terrorMode = true; <i>5__1 = 0; break; case 1: <>1__state = -1; value.manualToggleState = !value.manualToggleState; <>2__current = (object)new WaitForSeconds(Random.Range(0.1f, 0.5f)); <>1__state = 2; return true; case 2: <>1__state = -1; <i>5__1++; break; } if (<i>5__1 < Random.Range(1, 10)) { value.manualToggleState = !value.manualToggleState; <>2__current = (object)new WaitForSeconds(Random.Range(0.1f, 0.5f)); <>1__state = 1; return true; } terrorMode = false; currentCoroutine = null; isFlickering = false; if (terrorMode) { terrorMode = false; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private static readonly Dictionary<FlashlightController, FlashlightData> flashlightData = new Dictionary<FlashlightController, FlashlightData>(); private static Coroutine? currentCoroutine; private static bool isFlickering = false; private static float flickerCheckInterval = Random.Range(5, 10); private static float lastFlickerCheckTime = 0f; private static bool terrorMode = false; private static bool Prefix(FlashlightController __instance) { //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) if (!__instance.PlayerAvatar.isLocal) { return true; } if (!flashlightData.TryGetValue(__instance, out FlashlightData value)) { value = new FlashlightData(); flashlightData[__instance] = value; } if (SemiFunc.MenuLevel()) { value.manualToggleState = false; value.isOn = false; ((Renderer)__instance.mesh).enabled = true; ((Behaviour)__instance.spotlight).enabled = false; __instance.halo.enabled = false; __instance.LightActive = false; __instance.spotlight.intensity = 0f; return false; } bool isOn = value.isOn; if (Input.GetKeyDown((KeyCode)102) && !terrorMode) { value.manualToggleState = !value.manualToggleState; } value.isOn = value.manualToggleState; if (!isOn && value.isOn) { if (__instance.lightOnAudio != null) { __instance.lightOnAudio.Play(((Component)__instance).transform.position, 1f, 1f, 1f, 1f); } } else if (isOn && !value.isOn && __instance.lightOffAudio != null) { __instance.lightOffAudio.Play(((Component)__instance).transform.position, 1f, 1f, 1f, 1f); } if (value.isOn && FlashPatch.Instance.flicker.Value && Time.time - lastFlickerCheckTime >= flickerCheckInterval) { lastFlickerCheckTime = Time.time; float num = Mathf.Clamp(FlashPatch.Instance.flickerChanceConfig.Value, 0f, 100f); float value2 = Random.value; if (value2 < num && !isFlickering) { isFlickering = true; if (currentCoroutine == null) { currentCoroutine = ((MonoBehaviour)FlashPatch.Instance).StartCoroutine(FlickerCoroutine(__instance, value)); flickerCheckInterval = Random.Range(5, 10); } } } ((Renderer)__instance.mesh).enabled = true; if (value.isOn) { ((Behaviour)__instance.spotlight).enabled = true; __instance.halo.enabled = true; __instance.LightActive = true; __instance.spotlight.intensity = 0.7f; } else { ((Behaviour)__instance.spotlight).enabled = false; __instance.halo.enabled = false; __instance.LightActive = false; __instance.spotlight.intensity = 0f; } return false; } [IteratorStateMachine(typeof(<FlickerCoroutine>d__8))] private static IEnumerator FlickerCoroutine(FlashlightController __instance, FlashlightData value) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <FlickerCoroutine>d__8(0) { __instance = __instance, value = value }; } } }