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 LightsOut v0.2.1
LightsOut.dll
Decompiled 3 weeks agousing System; 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.Logging; using GeneralImprovements.Items; using HarmonyLib; using LightsOut.Patches; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("LightsOut")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("A template for Lethal Company")] [assembly: AssemblyFileVersion("0.2.1.0")] [assembly: AssemblyInformationalVersion("0.2.1+f8e310059a99cc28744a17ef8ec074061c9d359a")] [assembly: AssemblyProduct("LightsOut")] [assembly: AssemblyTitle("LightsOut")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.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; } } } namespace LightsOut { public static class LightSourceToggle { public static void Disable(GrabbableObject item, bool stopAudio = false) { //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown if (!ShouldReturn(item)) { Plugin.Logger.LogDebug((object)("Disabling light of " + item.itemProperties.itemName)); CollectionExtensions.Do<Light>((IEnumerable<Light>)((Component)item).GetComponentsInChildren<Light>(), (Action<Light>)delegate(Light l) { ((Behaviour)l).enabled = false; }); if ("LungProp" == item.__getTypeName() && stopAudio) { Plugin.Logger.LogDebug((object)"Disabling sound of LungProp"); LungProp val = (LungProp)item; val.isLungDocked = false; val.isLungDockedInElevator = false; val.isLungPowered = false; ((Component)val).GetComponent<AudioSource>().Stop(); } if (item.__getTypeName() == "ToggleableFancyLamp") { GeneralImprovementsPatch.DisableGILamp(item); } } } public static void Enable(GrabbableObject item) { if (!ShouldReturn(item)) { Plugin.Logger.LogDebug((object)("Enabling light of " + item.itemProperties.itemName)); CollectionExtensions.Do<Light>((IEnumerable<Light>)((Component)item).GetComponentsInChildren<Light>(), (Action<Light>)delegate(Light l) { ((Behaviour)l).enabled = true; }); if (item.__getTypeName() == "ToggleableFancyLamp") { GeneralImprovementsPatch.EnableGILamp(item); } } } private static bool ShouldReturn(GrabbableObject item) { if (!item.isInShipRoom) { Plugin.Logger.LogDebug((object)(item.__getTypeName() + " is not in ship room")); return true; } if (item.__getTypeName() != "PhysicsProp" && item.__getTypeName() != "LungProp" && item.__getTypeName() != "ToggleableFancyLamp") { Plugin.Logger.LogDebug((object)(item.__getTypeName() + " is not a predefined type")); return true; } if ((Object)(object)((Component)item).GetComponentInChildren<Light>() == (Object)null) { Plugin.Logger.LogDebug((object)(item.__getTypeName() + " has no light")); return true; } return false; } } [BepInPlugin("mrov.LightsOut", "LightsOut", "0.2.1")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { internal static ManualLogSource Logger; private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "mrov.LightsOut"); Logger.LogInfo((object)"Plugin mrov.LightsOut 0.2.1 is loaded!"); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "mrov.LightsOut"; public const string PLUGIN_NAME = "LightsOut"; public const string PLUGIN_VERSION = "0.2.1"; } } namespace LightsOut.Patches { internal class GeneralImprovementsPatch { public static void DisableGILamp(GrabbableObject lamp) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown try { ToggleableFancyLamp val = (ToggleableFancyLamp)lamp; ((GrabbableObject)val).ItemActivate(false, false); ((GrabbableObject)val).isBeingUsed = false; } catch { Plugin.Logger.LogWarning((object)"Failed to disable GI lamp"); } } public static void EnableGILamp(GrabbableObject lamp) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown try { ToggleableFancyLamp val = (ToggleableFancyLamp)lamp; ((GrabbableObject)val).ItemActivate(true, false); ((GrabbableObject)val).isBeingUsed = true; } catch { Plugin.Logger.LogWarning((object)"Failed to enable GI lamp"); } } } [HarmonyPatch(typeof(GrabbableObject))] public static class GrabbableObjectPatch { [HarmonyPatch("DiscardItem")] [HarmonyPostfix] public static void DiscardItemClientRpc(GrabbableObject __instance) { Plugin.Logger.LogDebug((object)("DiscardItem " + __instance.itemProperties.itemName)); if (__instance.isInShipRoom) { LightSourceToggle.Disable(__instance, stopAudio: true); } } [HarmonyPatch("GrabItem")] [HarmonyPostfix] public static void GrabClientRpc(GrabbableObject __instance) { Plugin.Logger.LogDebug((object)("GrabItem " + __instance.itemProperties.itemName)); LightSourceToggle.Enable(__instance); } } [HarmonyPatch(typeof(StartOfRound))] public static class LoadItemPatch { [HarmonyPatch("LoadShipGrabbableItems")] [HarmonyPostfix] public static void ServerTurnOffLights() { GameObject val = GameObject.Find("/Environment/HangarShip"); GrabbableObject[] componentsInChildren = val.GetComponentsInChildren<GrabbableObject>(); GrabbableObject[] array = componentsInChildren; foreach (GrabbableObject item in array) { LightSourceToggle.Disable(item, stopAudio: true); } } [HarmonyPatch("SyncShipUnlockablesClientRpc")] [HarmonyPostfix] public static void ClientTurnOffLights() { GameObject val = GameObject.Find("/Environment/HangarShip"); GrabbableObject[] componentsInChildren = val.GetComponentsInChildren<GrabbableObject>(); GrabbableObject[] array = componentsInChildren; foreach (GrabbableObject item in array) { LightSourceToggle.Disable(item, stopAudio: true); } } } [HarmonyPatch(typeof(StartOfRound))] public static class SetShipReadyToLandPatch { [HarmonyPatch("SetShipReadyToLand")] [HarmonyPostfix] public static void TurnOffLights() { GameObject val = GameObject.Find("/Environment/HangarShip"); GrabbableObject[] componentsInChildren = val.GetComponentsInChildren<GrabbableObject>(); GrabbableObject[] array = componentsInChildren; foreach (GrabbableObject item in array) { LightSourceToggle.Disable(item, stopAudio: true); } } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }