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 OrbitRecharge v0.1.1
OrbitRecharge.dll
Decompiled 9 months 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.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using MrovLib; using Unity.Netcode; 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: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("ClientNetworkTransform")] [assembly: IgnoresAccessChecksTo("com.olegknyazev.softmask")] [assembly: IgnoresAccessChecksTo("DissonanceVoip")] [assembly: IgnoresAccessChecksTo("EasyTextEffects")] [assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")] [assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")] [assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")] [assembly: IgnoresAccessChecksTo("Unity.Burst")] [assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")] [assembly: IgnoresAccessChecksTo("Unity.Collections")] [assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")] [assembly: IgnoresAccessChecksTo("Unity.Jobs")] [assembly: IgnoresAccessChecksTo("Unity.Mathematics")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")] [assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")] [assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")] [assembly: IgnoresAccessChecksTo("Unity.Services.QoS")] [assembly: IgnoresAccessChecksTo("Unity.Services.Relay")] [assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")] [assembly: IgnoresAccessChecksTo("Unity.Timeline")] [assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")] [assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.UI")] [assembly: AssemblyCompany("OrbitRecharge")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("Recharge all items on ship when in orbit")] [assembly: AssemblyFileVersion("0.1.1.0")] [assembly: AssemblyInformationalVersion("0.1.1+d1802d7426f0367ac08de7655c76b7d43cc7194c")] [assembly: AssemblyProduct("OrbitRecharge")] [assembly: AssemblyTitle("OrbitRecharge")] [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 OrbitRecharge { public class ConfigManager { public static ConfigFile configFile; public static ConfigEntry<bool> TurnOffFlashlights; public static ConfigEntry<bool> TurnOffWalkies; public static ConfigEntry<bool> TurnOffBoosters; public static ConfigEntry<bool> RefillSprayCans; public static ConfigEntry<bool> RefillTZPs; public static ConfigEntry<bool> Debug; public static ConfigManager Instance { get; internal set; } public static void Init(ConfigFile config) { Instance = new ConfigManager(config); } public ConfigManager(ConfigFile config) { configFile = config; TurnOffFlashlights = configFile.Bind<bool>("General", "TurnOffFlashlights", true, "Turn off flashlights at the end of the round"); TurnOffWalkies = configFile.Bind<bool>("General", "TurnOffWalkies", true, "Turn off walkies at the end of the round"); TurnOffBoosters = configFile.Bind<bool>("General", "TurnOffBoosters", true, "Turn off boosters at the end of the round"); RefillSprayCans = configFile.Bind<bool>("General", "RefillSprayCans", true, "Refill spray cans at the end of the round"); RefillTZPs = configFile.Bind<bool>("General", "RefillTZPs", true, "Refill TZPs at the end of the round"); Debug = configFile.Bind<bool>("Debug", "Debug", false, "Enable debug logging"); } } public class ImprovedBattery : Battery { public ImprovedBattery(bool isRechargeable, float charge) : base(isRechargeable, charge) { } public override string ToString() { return $"Charged {base.charge * 100f}%"; } } public class Logger : Logger { public Logger(string SourceName, LoggingType defaultLoggingType = 1) : base(SourceName, defaultLoggingType) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) ((Logger)this).ModName = SourceName; ((Logger)this).LogSource = Logger.CreateLogSource("TestingTools"); ((Logger)this)._name = SourceName; } } [HarmonyPatch(typeof(StartOfRound))] public static class StartOfRoundPatch { private static Logger Logger = new Logger("Debug", (LoggingType)1); private static void RechargeItem(GrabbableObject itemToCharge, string playerHeldBy = "on ship") { if (!((NetworkBehaviour)StartOfRound.Instance).IsHost) { Plugin.logger.LogDebug((object)"Not a host!!"); return; } ((Logger)Logger).LogDebug($"Recharging {itemToCharge.itemProperties.itemName} ({playerHeldBy}) - {Math.Ceiling(itemToCharge.insertedBattery.charge) * 100.0}%"); itemToCharge.SyncBatteryServerRpc(100); } [HarmonyPatch("SetShipReadyToLand")] [HarmonyPrefix] public static void Prefix(StartOfRound __instance) { Stopwatch stopwatch = Stopwatch.StartNew(); GrabbableObject[] array = Object.FindObjectsOfType<GrabbableObject>(); ((Logger)Logger).LogCustom($"Time to find all Grabbables: {stopwatch.ElapsedMilliseconds}ms", (LogLevel)32, (LoggingType)2); GrabbableObject[] array2 = array; foreach (GrabbableObject val in array2) { if (!((Object)(object)val == (Object)null) && val.insertedBattery != null) { RechargeItem(val); } } if (ConfigManager.TurnOffFlashlights.Value) { FlashlightItem[] array3 = Object.FindObjectsOfType<FlashlightItem>(); FlashlightItem[] array4 = array3; foreach (FlashlightItem val2 in array4) { try { if (!((GrabbableObject)val2).heldByPlayerOnServer) { val2.SwitchFlashlight(false); ((Behaviour)val2.flashlightBulb).enabled = false; ((Behaviour)val2.flashlightBulbGlow).enabled = false; ((GrabbableObject)val2).isBeingUsed = false; } } catch { ((Logger)Logger).LogWarning("Failed to turn off flashlight"); } } } if (ConfigManager.TurnOffWalkies.Value) { WalkieTalkie[] array5 = Object.FindObjectsOfType<WalkieTalkie>(); WalkieTalkie[] array6 = array5; foreach (WalkieTalkie val3 in array6) { try { if (!((GrabbableObject)val3).heldByPlayerOnServer) { val3.SwitchWalkieTalkieOn(false); } } catch { ((Logger)Logger).LogWarning("Failed to turn off walkie"); } } } if (ConfigManager.TurnOffBoosters.Value) { RadarBoosterItem[] array7 = Object.FindObjectsOfType<RadarBoosterItem>(); RadarBoosterItem[] array8 = array7; foreach (RadarBoosterItem val4 in array8) { try { val4.EnableRadarBooster(false); } catch { ((Logger)Logger).LogWarning("Failed to turn off radar booster"); } } } if (ConfigManager.RefillSprayCans.Value) { SprayPaintItem[] array9 = Object.FindObjectsOfType<SprayPaintItem>(); SprayPaintItem[] array10 = array9; foreach (SprayPaintItem val5 in array10) { try { val5.sprayCanTank = 100f; } catch { ((Logger)Logger).LogWarning("Failed to turn off spray paint"); } } } if (ConfigManager.RefillTZPs.Value) { TetraChemicalItem[] array11 = Object.FindObjectsOfType<TetraChemicalItem>(); TetraChemicalItem[] array12 = array11; foreach (TetraChemicalItem val6 in array12) { try { val6.fuel = 100f; } catch { ((Logger)Logger).LogWarning("Failed to turn off spray paint"); } } } LungProp[] array13 = Object.FindObjectsOfType<LungProp>(); LungProp[] array14 = array13; foreach (LungProp val7 in array14) { try { ((Component)val7).gameObject.GetComponent<AudioSource>().Stop(); ((Component)val7).gameObject.GetComponentInChildren<Light>().intensity = 5f; } catch { ((Logger)Logger).LogWarning("Failed to turn off lung"); } } ((Logger)Logger).LogCustom($"Time to finish the function: {stopwatch.ElapsedMilliseconds}ms", (LogLevel)32, (LoggingType)2); stopwatch.Stop(); } } [BepInPlugin("mrov.OrbitRecharge", "OrbitRecharge", "0.1.1")] public class Plugin : BaseUnityPlugin { internal static ManualLogSource logger = new ManualLogSource("OrbitRecharge"); private void Awake() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin mrov.OrbitRecharge is loaded!"); ConfigManager.Init(((BaseUnityPlugin)this).Config); Harmony val = new Harmony("mrov.OrbitRecharge"); val.PatchAll(); } } public static class PluginInfo { public const string PLUGIN_GUID = "mrov.OrbitRecharge"; public const string PLUGIN_NAME = "OrbitRecharge"; public const string PLUGIN_VERSION = "0.1.1"; } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }