Decompiled source of OrbitRecharge v0.1.0

OrbitRecharge.dll

Decompiled a week ago
using 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 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("DissonanceVoip")]
[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.0.0")]
[assembly: AssemblyInformationalVersion("0.1.0+0762f91fbde6bae0e83e73675748f906c01c1d93")]
[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}%";
		}
	}
	[BepInPlugin("OrbitRecharge", "OrbitRecharge", "0.1.0")]
	public class Plugin : BaseUnityPlugin
	{
		internal static Logger logger;

		private void Awake()
		{
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Expected O, but got Unknown
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin OrbitRecharge is loaded!");
			logger = new Logger("OrbitRecharge", ConfigManager.Debug);
			ConfigManager.Init(((BaseUnityPlugin)this).Config);
			Harmony val = new Harmony("OrbitRecharge");
			val.PatchAll();
		}
	}
	[HarmonyPatch(typeof(StartOfRound))]
	public static class StartOfRound_SetShipReadyToLand_Patch
	{
		private static void RechargeItem(GrabbableObject itemToCharge, string playerHeldBy = "on ship")
		{
			if (!((NetworkBehaviour)StartOfRound.Instance).IsHost)
			{
				Plugin.logger.LogDebug((object)"Not a host!!");
				return;
			}
			Plugin.logger.LogDebug((object)$"Recharging {itemToCharge.itemProperties.itemName} ({playerHeldBy}) - {Math.Ceiling(itemToCharge.insertedBattery.charge) * 100.0}%");
			itemToCharge.SyncBatteryServerRpc(100);
		}

		[HarmonyPatch("SetShipReadyToLand")]
		[HarmonyPrefix]
		public static void Prefix(StartOfRound __instance)
		{
			GrabbableObject[] array = Object.FindObjectsOfType<GrabbableObject>();
			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 (Exception ex)
					{
						Plugin.logger.LogDebug((object)"Failed to turn off flashlight");
						Plugin.logger.LogDebug((object)ex);
					}
				}
			}
			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
					{
						Plugin.logger.LogDebug((object)"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
					{
						Plugin.logger.LogDebug((object)"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
					{
						Plugin.logger.LogDebug((object)"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
					{
						Plugin.logger.LogDebug((object)"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();
				}
				catch
				{
					Plugin.logger.LogDebug((object)"Failed to turn off lung");
				}
			}
		}
	}
	public static class PluginInfo
	{
		public const string PLUGIN_GUID = "OrbitRecharge";

		public const string PLUGIN_NAME = "OrbitRecharge";

		public const string PLUGIN_VERSION = "0.1.0";
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}