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 BlindingLights v1.0.0
BepInEx/plugins/BlindingLights.dll
Decompiled a year agousing System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using BlindingLights.Patches; using HarmonyLib; using UnityEngine; using UnityEngine.Networking; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("BlindingLights")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("BlindingLights")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("0a6763fc-1d9f-411b-a929-4c8aacb117ef")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace BlindingLights { public class Config { public static ConfigEntry<float> volumePercentage; public Config(ConfigFile configFile) { volumePercentage = configFile.Bind<float>("General", "Volume", 100f, "Volume multiplier for the music in %. Caution: Setting this value too high may damage your ears."); } } [BepInPlugin("KamenVacuumCleaner.BlindingLights", "BlindingLights", "1.0.0")] internal class Plugin : BaseUnityPlugin { private const string GUID = "KamenVacuumCleaner.BlindingLights"; private const string NAME = "BlindingLights"; private const string VERSION = "1.0.0"; internal ManualLogSource mls; private Harmony harmony = new Harmony("BlindingLights"); private static Plugin instance; public static AudioClip blindingLightsClip; private static bool loadingSuccess = true; public static Config config { get; internal set; } private void Awake() { if ((Object)(object)instance == (Object)null) { instance = this; } config = new Config(((BaseUnityPlugin)this).Config); mls = Logger.CreateLogSource("BlindingLights"); mls.LogInfo((object)"Loading: BlindingLights v1.0.0..."); blindingLightsClip = LoadAudio("BlindingLights.wav", (AudioType)20); if (!loadingSuccess) { LogError("Unable to load plugin!"); return; } harmony.PatchAll(typeof(EnemyAIPatch)); mls.LogInfo((object)"Plugin BlindingLights is loaded!"); } private AudioClip LoadAudio(string path, AudioType type) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Invalid comparison between Unknown and I4 AudioClip result = null; string text = ((BaseUnityPlugin)this).Info.Location.TrimEnd("BlindingLights.dll".ToCharArray()); UnityWebRequest audioClip = UnityWebRequestMultimedia.GetAudioClip("File://" + text + path, type); audioClip.SendWebRequest(); while (!audioClip.isDone) { } if ((int)audioClip.result == 1) { result = DownloadHandlerAudioClip.GetContent(audioClip); } else { loadingSuccess = false; mls.LogInfo((object)"Could not load audio file"); } return result; } public static void Log(string message) { instance.mls.LogInfo((object)message); } public static void LogError(string message) { instance.mls.LogError((object)message); } } } namespace BlindingLights.Patches { [HarmonyPatch(typeof(EnemyAI))] internal class EnemyAIPatch { private static float startTime = -1f; private static Dictionary<EnemyAI, AudioSource> stunAudioSources = new Dictionary<EnemyAI, AudioSource>(); private const float SONG_OFFSET = 118.48f; public static AudioSource CreateAudioSource(EnemyAI __instance) { AudioSource val = ((Component)__instance.creatureVoice).gameObject.AddComponent<AudioSource>(); if ((Object)(object)val == (Object)null) { Plugin.LogError("Failed to create audio source on " + ((Object)__instance.enemyType).name); return null; } val.volume *= Config.volumePercentage.Value * 0.01f; val.clip = Plugin.blindingLightsClip; val.loop = true; val.spatialBlend = 1f; val.dopplerLevel = 0.8f; val.spread = 50f; val.minDistance = 3f; val.maxDistance = 30f; val.rolloffMode = (AudioRolloffMode)2; return val; } [HarmonyPatch("SetEnemyStunned")] [HarmonyPostfix] public static void SetEnemyStunnedPatch(EnemyAI __instance) { if (!stunAudioSources.ContainsKey(__instance)) { PlayStunAudio(__instance); } } [HarmonyPatch("Update")] [HarmonyPrefix] public static void UpdatePatch(EnemyAI __instance) { if (!stunAudioSources.ContainsKey(__instance) || __instance.stunnedIndefinitely > 0 || !(__instance.stunNormalizedTimer <= 0f)) { return; } AudioSource val = stunAudioSources[__instance]; if (!((Object)(object)val == (Object)null)) { val.Stop(); Object.Destroy((Object)(object)val); stunAudioSources.Remove(__instance); if (stunAudioSources.Count <= 0) { startTime = -1f; } } } private static void PlayStunAudio(EnemyAI __instance) { AudioSource val = CreateAudioSource(__instance); if (!((Object)(object)val == (Object)null)) { if (startTime > 0f) { val.time = Time.time - startTime; } else { startTime = Time.time; } val.time += 118.48f; stunAudioSources.Add(__instance, val); val.Play(); } } } }