Decompiled source of AudibleHydraulics v1.0.1

dragonmcmx.AudibleHydraulics.dll

Decompiled 4 days ago
using 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 AudibleHydraulics.Hooks;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using On;
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("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("dragonmcmx.AudibleHydraulics")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.1.0")]
[assembly: AssemblyInformationalVersion("1.0.1")]
[assembly: AssemblyProduct("AudibleHydraulics")]
[assembly: AssemblyTitle("dragonmcmx.AudibleHydraulics")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.1.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 AudibleHydraulics
{
	[BepInPlugin("dragonmcmx.AudibleHydraulics", "AudibleHydraulics", "1.0.1")]
	public class AudibleHydraulics : BaseUnityPlugin
	{
		internal class AudibleHydraulicsConfig
		{
			public static ConfigEntry<float>? NoiseRange;

			public static ConfigEntry<float>? NoiseLoudness;

			public AudibleHydraulicsConfig(ConfigFile cfg)
			{
				cfg.SaveOnConfigSet = false;
				NoiseRange = cfg.Bind<float>("Variables", "noiseRange", 20f, "Distance from which enemies can hear the ship door (does not affect the actual audio clip players hear)");
				NoiseLoudness = cfg.Bind<float>("Variables", "noiseLoudness", 0.6f, "Loudness at which enemies will hear the ship door (affects the distance at which dogs will begin charging at the noise right away rather than slowly investigate. Does not affect the actual audio clip players hear)");
				ClearOrphanedEntries(cfg);
				cfg.Save();
				cfg.SaveOnConfigSet = true;
			}

			private static void ClearOrphanedEntries(ConfigFile cfg)
			{
				PropertyInfo propertyInfo = AccessTools.Property(typeof(ConfigFile), "OrphanedEntries");
				Dictionary<ConfigDefinition, string> dictionary = (Dictionary<ConfigDefinition, string>)propertyInfo.GetValue(cfg);
				dictionary.Clear();
			}
		}

		[CompilerGenerated]
		private static class <>O
		{
			public static hook_SetDoorOpen <0>__ShipDoorOpenPatch;

			public static hook_SetDoorClosed <1>__ShipDoorClosePatch;
		}

		public static AudibleHydraulics Instance { get; private set; }

		internal static ManualLogSource Logger { get; private set; }

		internal static AudibleHydraulicsConfig BoundConfig { get; private set; }

		private void Awake()
		{
			Logger = ((BaseUnityPlugin)this).Logger;
			Instance = this;
			Hook();
			Logger.LogInfo((object)"dragonmcmx.AudibleHydraulics v1.0.1 has loaded!");
			BoundConfig = new AudibleHydraulicsConfig(((BaseUnityPlugin)this).Config);
			Logger.LogInfo((object)$"Config noiseRange = {AudibleHydraulicsConfig.NoiseRange.Value}, noiseLoudness = {AudibleHydraulicsConfig.NoiseLoudness.Value}");
		}

		internal static void Hook()
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Expected O, but got Unknown
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Expected O, but got Unknown
			Logger.LogDebug((object)"Hooking...");
			object obj = <>O.<0>__ShipDoorOpenPatch;
			if (obj == null)
			{
				hook_SetDoorOpen val = HangarShipDoorPatch.ShipDoorOpenPatch;
				<>O.<0>__ShipDoorOpenPatch = val;
				obj = (object)val;
			}
			HangarShipDoor.SetDoorOpen += (hook_SetDoorOpen)obj;
			object obj2 = <>O.<1>__ShipDoorClosePatch;
			if (obj2 == null)
			{
				hook_SetDoorClosed val2 = HangarShipDoorPatch.ShipDoorClosePatch;
				<>O.<1>__ShipDoorClosePatch = val2;
				obj2 = (object)val2;
			}
			HangarShipDoor.SetDoorClosed += (hook_SetDoorClosed)obj2;
			Logger.LogDebug((object)"Finished Hooking!");
		}

		internal static void Unhook()
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Expected O, but got Unknown
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Expected O, but got Unknown
			Logger.LogDebug((object)"Unhooking...");
			object obj = <>O.<0>__ShipDoorOpenPatch;
			if (obj == null)
			{
				hook_SetDoorOpen val = HangarShipDoorPatch.ShipDoorOpenPatch;
				<>O.<0>__ShipDoorOpenPatch = val;
				obj = (object)val;
			}
			HangarShipDoor.SetDoorOpen -= (hook_SetDoorOpen)obj;
			object obj2 = <>O.<1>__ShipDoorClosePatch;
			if (obj2 == null)
			{
				hook_SetDoorClosed val2 = HangarShipDoorPatch.ShipDoorClosePatch;
				<>O.<1>__ShipDoorClosePatch = val2;
				obj2 = (object)val2;
			}
			HangarShipDoor.SetDoorClosed -= (hook_SetDoorClosed)obj2;
			Logger.LogDebug((object)"Finished Unhooking!");
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "dragonmcmx.AudibleHydraulics";

		public const string PLUGIN_NAME = "AudibleHydraulics";

		public const string PLUGIN_VERSION = "1.0.1";
	}
}
namespace AudibleHydraulics.Hooks
{
	public class HangarShipDoorPatch
	{
		internal static void ShipDoorOpenPatch(orig_SetDoorOpen original, HangarShipDoor self)
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			original.Invoke(self);
			RoundManager.Instance.PlayAudibleNoise(((Component)StartOfRound.Instance.shipDoorAudioSource).transform.position, AudibleHydraulics.AudibleHydraulicsConfig.NoiseRange.Value, AudibleHydraulics.AudibleHydraulicsConfig.NoiseLoudness.Value, 0, false, 0);
		}

		internal static void ShipDoorClosePatch(orig_SetDoorClosed original, HangarShipDoor self)
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			original.Invoke(self);
			RoundManager.Instance.PlayAudibleNoise(((Component)StartOfRound.Instance.shipDoorAudioSource).transform.position, AudibleHydraulics.AudibleHydraulicsConfig.NoiseRange.Value, AudibleHydraulics.AudibleHydraulicsConfig.NoiseLoudness.Value, 0, false, 0);
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}