Decompiled source of LambdaCompany v1.0.2

LambdaCompany.dll

Decompiled 4 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
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 GameNetcodeStuff;
using Microsoft.CodeAnalysis;
using On;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.Audio;
using UnityEngine.Rendering.HighDefinition;

[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("Noosh")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("A mod that adds scrap and items and various other things from Half Life 2 and other source games!")]
[assembly: AssemblyFileVersion("1.0.2.0")]
[assembly: AssemblyInformationalVersion("1.0.2+81fc1a73240fac591eac3173fcf50b6b6f4c4a5d")]
[assembly: AssemblyProduct("LambdaCompany")]
[assembly: AssemblyTitle("LambdaCompany")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.2.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 LambdaCompany
{
	public class ExplosiveBarrel : GrabbableObject, IHittable
	{
		public bool exploded;

		public AudioSource barrelAudio;

		public AudioSource barrelFarAudio;

		public AudioClip barrelBlast;

		public AudioClip dropSFX;

		public AudioClip intenseSFX;

		[HideInInspector]
		internal static float explodeChance = 1f / 3f;

		[HideInInspector]
		public float distanceFallen
		{
			get
			{
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				//IL_0006: Unknown result type (might be due to invalid IL or missing references)
				//IL_0013: Unknown result type (might be due to invalid IL or missing references)
				//IL_0018: Unknown result type (might be due to invalid IL or missing references)
				if (base.startFallingPosition == Vector3.zero || base.targetFloorPosition == Vector3.zero)
				{
					return 0f;
				}
				return base.startFallingPosition.y - base.targetFloorPosition.y;
			}
		}

		public override void Start()
		{
			((GrabbableObject)this).Start();
			explodeChance = P.explodeChance.Value;
		}

		bool IHittable.Hit(int force, Vector3 hitDirection, PlayerControllerB playerWhoHit, bool playHitSFX, int hitID)
		{
			if (playHitSFX)
			{
				barrelAudio.PlayOneShot(intenseSFX, 1f);
				WalkieTalkie.TransmitOneShotAudio(barrelAudio, intenseSFX, 1f);
			}
			P.Log("Hit barrel with shovel, setting off.", (LogLevel)8);
			SetOffServerRpc();
			return true;
		}

		public override void OnHitGround()
		{
			((GrabbableObject)this).OnHitGround();
			if (exploded)
			{
				return;
			}
			P.Log($"Fall distance = {distanceFallen}", (LogLevel)4);
			if (!((NetworkBehaviour)this).IsOwner)
			{
				return;
			}
			bool flag = false;
			bool safeDrop = false;
			float num = distanceFallen;
			if (!(num > 2f))
			{
				if (num > 1f)
				{
					flag = Random.Range(0f, 1f) <= explodeChance;
					P.Log(flag ? "Setting off explosion due to failed roll!" : "Barrel explosion avoided!", (LogLevel)8);
				}
				else
				{
					safeDrop = true;
					P.Log("Barrel not exploding, drop too short.", (LogLevel)8);
				}
			}
			else
			{
				flag = true;
				P.Log("Setting off guarunteed barrel explosion!", (LogLevel)8);
			}
			if (StartOfRound.Instance.inShipPhase)
			{
				flag = false;
			}
			if (flag)
			{
				if (!exploded)
				{
					SetOffServerRpc();
				}
			}
			else
			{
				DropSoundServerRPC(safeDrop);
			}
		}

		[ServerRpc(RequireOwnership = false)]
		public void DropSoundServerRPC(bool safeDrop)
		{
			DropSoundClientRPC(safeDrop);
		}

		[ClientRpc]
		public void DropSoundClientRPC(bool safeDrop)
		{
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			barrelAudio.PlayOneShot(safeDrop ? dropSFX : intenseSFX);
			WalkieTalkie.TransmitOneShotAudio(barrelAudio, safeDrop ? dropSFX : intenseSFX, 1f);
			if (((NetworkBehaviour)this).IsOwner)
			{
				RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, 8f + distanceFallen, 0.5f, 0, base.isInElevator && StartOfRound.Instance.hangarDoorsClosed, 941);
			}
		}

		[ServerRpc(RequireOwnership = false)]
		public void SetOffServerRpc()
		{
			SetOffClientRpc();
		}

		[ClientRpc]
		public void SetOffClientRpc()
		{
			Detonate();
		}

		public void Detonate()
		{
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			exploded = true;
			barrelAudio.PlayOneShot(barrelBlast, 1f);
			WalkieTalkie.TransmitOneShotAudio(barrelAudio, barrelBlast, 1f);
			Landmine.SpawnExplosion(((Component)this).transform.position + Vector3.up, true, 5f, 8f, 50, 0f, (GameObject)null, false);
			StunGrenadeItem.StunExplosion(((Component)this).transform.position + Vector3.up, true, 0.1f, 3f, 0.5f, false, (PlayerControllerB)null, (PlayerControllerB)null, 0f);
			if (((NetworkBehaviour)this).IsOwner)
			{
				RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, 11f, 1f, 0, base.isInElevator && StartOfRound.Instance.hangarDoorsClosed, 941);
				RemoveScrapServerRpc();
			}
		}

		[ServerRpc(RequireOwnership = false)]
		private void RemoveScrapServerRpc()
		{
			base.grabbable = false;
			base.grabbableToEnemies = false;
			base.deactivated = true;
			P.Log("Despawning barrel object.", (LogLevel)8);
			((NetworkBehaviour)this).NetworkObject.Despawn(true);
		}
	}
	internal static class NetPatcher
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_Start <0>__GameNetworkManager_Start;
		}

		internal static List<GameObject> netPrefabs = new List<GameObject>();

		private static void Collect()
		{
			foreach (ScrapEntry value in ScrapPatcher.scrapCatelog.Values)
			{
				if (!netPrefabs.Contains(value.item.spawnPrefab))
				{
					netPrefabs.Add(value.item.spawnPrefab);
				}
			}
		}

		private static void GameNetworkManager_Start(orig_Start orig, GameNetworkManager self)
		{
			orig.Invoke(self);
			foreach (GameObject netPrefab in netPrefabs)
			{
				if (!NetworkManager.Singleton.NetworkConfig.Prefabs.Contains(netPrefab))
				{
					NetworkManager.Singleton.AddNetworkPrefab(netPrefab);
					P.Log("Added prefab " + ((Object)netPrefab).name, (LogLevel)8);
				}
			}
		}

		internal static void Patch()
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Expected O, but got Unknown
			Collect();
			object obj = <>O.<0>__GameNetworkManager_Start;
			if (obj == null)
			{
				hook_Start val = GameNetworkManager_Start;
				<>O.<0>__GameNetworkManager_Start = val;
				obj = (object)val;
			}
			GameNetworkManager.Start += (hook_Start)obj;
			Type[] types = Assembly.GetExecutingAssembly().GetTypes();
			Type[] array = types;
			foreach (Type type in array)
			{
				MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
				MethodInfo[] array2 = methods;
				foreach (MethodInfo methodInfo in array2)
				{
					object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false);
					if (customAttributes.Length != 0)
					{
						methodInfo.Invoke(null, null);
						P.Log("Invoked " + methodInfo.Name, (LogLevel)8);
					}
				}
			}
		}
	}
	[BepInPlugin("LambdaCompany", "LambdaCompany", "1.0.2")]
	public class P : BaseUnityPlugin
	{
		internal static AssetBundle assets;

		internal static P Instance;

		internal static ConfigEntry<float> explodeChance;

		private void Awake()
		{
			Instance = this;
			assets = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "lambdacompany"));
			explodeChance = ((BaseUnityPlugin)this).Config.Bind<float>("Chance", "Explode Chance", 1f / 3f, "Chance for Explosive Barrel to explode when dropped from standing height. (0.0 - 1.0)");
			Scrap();
			NetPatcher.Patch();
			((BaseUnityPlugin)this).Logger.LogInfo((object)"LambdaCompany [1.0.2] loaded");
		}

		private void Scrap()
		{
			Dictionary<string, int[]> dictionary = new Dictionary<string, int[]>();
			dictionary.Add("GnomeScrap", new int[11]
			{
				2, 5, 4, 4, 1, 1, 10, 15, 1, 15,
				20
			});
			dictionary.Add("DollScrap", new int[11]
			{
				30, 10, 10, -1, -1, 25, 60, -1, 10, 50,
				15
			});
			dictionary.Add("LanternScrap", new int[11]
			{
				-1, -1, -1, 12, 12, 20, 15, 15, 5, 15,
				30
			});
			dictionary.Add("ExplosiveBarrelScrap", new int[11]
			{
				10, 18, -1, 25, -1, 8, -1, 30, 15, 12,
				28
			});
			Dictionary<string, int[]> dictionary2 = dictionary;
			ScrapPatcher.scrapCatelog.Add("GnomeScrap", new ScrapEntry("Assets/Scrap/Gnome/GnomeScrap.asset", dictionary2["GnomeScrap"]));
			ScrapPatcher.scrapCatelog.Add("DollScrap", new ScrapEntry("Assets/Scrap/Doll/DollScrap.asset", dictionary2["DollScrap"]));
			ScrapPatcher.scrapCatelog.Add("LanternScrap", new ScrapEntry("Assets/Scrap/Lantern/LanternScrap.asset", dictionary2["LanternScrap"]));
			ScrapPatcher.scrapCatelog.Add("ExplosiveBarrelScrap", new ScrapEntry("Assets/Scrap/ExplosiveBarrel/ExplosiveBarrelScrap.asset", dictionary2["ExplosiveBarrelScrap"]));
			ScrapPatcher.Activate();
		}

		[MethodImpl(MethodImplOptions.NoInlining)]
		public static void Log(object data, LogLevel lvl = 8)
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			((BaseUnityPlugin)Instance).Logger.Log(lvl, data);
		}
	}
	public static class ScrapPatcher
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_Awake <0>__StartOfRound_Awake;

			public static hook_Start <1>__StartOfRound_Start;

			public static hook_Start <2>__MenuManager_Start;
		}

		internal static Dictionary<string, ScrapEntry> scrapCatelog = new Dictionary<string, ScrapEntry>();

		internal static List<GameObject> prefabsToFix = new List<GameObject>();

		internal static List<GameObject> fixedPrefabs = new List<GameObject>();

		internal static Dictionary<string, int> MoonIndex = new Dictionary<string, int>
		{
			{ "ExperimentationLevel", 0 },
			{ "AssuranceLevel", 1 },
			{ "VowLevel", 2 },
			{ "OffenseLevel", 3 },
			{ "MarchLevel", 4 },
			{ "RendLevel", 5 },
			{ "DineLevel", 6 },
			{ "TitanLevel", 7 },
			{ "ModdedLevel", 8 },
			{ "ModdedLevel15", 9 },
			{ "ModdedLevel30", 10 }
		};

		public static void Activate()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Expected O, but got Unknown
			object obj = <>O.<0>__StartOfRound_Awake;
			if (obj == null)
			{
				hook_Awake val = StartOfRound_Awake;
				<>O.<0>__StartOfRound_Awake = val;
				obj = (object)val;
			}
			StartOfRound.Awake += (hook_Awake)obj;
			object obj2 = <>O.<1>__StartOfRound_Start;
			if (obj2 == null)
			{
				hook_Start val2 = StartOfRound_Start;
				<>O.<1>__StartOfRound_Start = val2;
				obj2 = (object)val2;
			}
			StartOfRound.Start += (hook_Start)obj2;
			object obj3 = <>O.<2>__MenuManager_Start;
			if (obj3 == null)
			{
				hook_Start val3 = MenuManager_Start;
				<>O.<2>__MenuManager_Start = val3;
				obj3 = (object)val3;
			}
			MenuManager.Start += (hook_Start)obj3;
		}

		public static ScrapEntry GetEntry(string item)
		{
			return scrapCatelog[item];
		}

		private static void StartOfRound_Awake(orig_Awake orig, StartOfRound self)
		{
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Expected O, but got Unknown
			orig.Invoke(self);
			SelectableLevel[] levels = self.levels;
			foreach (SelectableLevel val in levels)
			{
				foreach (ScrapEntry scrap in scrapCatelog.Values)
				{
					if (!val.spawnableScrap.Any((SpawnableItemWithRarity x) => (Object)(object)x.spawnableItem == (Object)(object)scrap.item))
					{
						int num = MoonIndex.GetValueOrDefault(((Object)val).name, -9);
						if (num == -9)
						{
							int maxScrap = val.maxScrap;
							num = ((maxScrap >= 30) ? MoonIndex["ModdedLevel30"] : ((maxScrap < 15) ? MoonIndex["ModdedLevel"] : MoonIndex["ModdedLevel15"]));
						}
						if (scrap.rarity[num] != -1)
						{
							val.spawnableScrap.Add(new SpawnableItemWithRarity
							{
								spawnableItem = scrap.item,
								rarity = scrap.rarity[num]
							});
						}
					}
				}
			}
			foreach (ScrapEntry value in scrapCatelog.Values)
			{
				if (!self.allItemsList.itemsList.Contains(value.item))
				{
					P.Log("Registered item: " + value.item.itemName, (LogLevel)8);
					self.allItemsList.itemsList.Add(value.item);
				}
			}
		}

		private static void StartOfRound_Start(orig_Start orig, StartOfRound self)
		{
			AudioMixer diageticMixer = SoundManager.Instance.diageticMixer;
			List<GameObject> list = new List<GameObject>();
			for (int num = prefabsToFix.Count - 1; num >= 0; num--)
			{
				GameObject val = prefabsToFix[num];
				AudioSource[] componentsInChildren = val.GetComponentsInChildren<AudioSource>();
				AudioSource[] array = componentsInChildren;
				foreach (AudioSource val2 in array)
				{
					if (!((Object)(object)val2.outputAudioMixerGroup == (Object)null) && ((Object)val2.outputAudioMixerGroup.audioMixer).name == "Diagetic")
					{
						AudioMixerGroup val3 = diageticMixer.FindMatchingGroups(((Object)val2.outputAudioMixerGroup).name)[0];
						if ((Object)(object)val3 != (Object)null)
						{
							val2.outputAudioMixerGroup = val3;
							P.Log("Set mixer group for " + ((Object)val2).name + " in " + ((Object)val).name + " to Diagetic:" + ((Object)val3).name, (LogLevel)8);
							list.Add(val);
						}
					}
				}
			}
			foreach (GameObject item in list)
			{
				prefabsToFix.Remove(item);
			}
			orig.Invoke(self);
		}

		private static void MenuManager_Start(orig_Start orig, MenuManager self)
		{
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Expected O, but got Unknown
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Expected O, but got Unknown
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			//IL_0142: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self);
			PropertyInfo property = typeof(HDRenderPipeline).GetProperty("currentPipeline", BindingFlags.Static | BindingFlags.NonPublic);
			HDRenderPipeline val = (HDRenderPipeline)property.GetValue(typeof(HDRenderPipeline));
			PropertyInfo property2 = ((object)val).GetType().GetProperty("defaultDiffusionProfile", BindingFlags.Instance | BindingFlags.NonPublic);
			DiffusionProfileSettings val2 = (DiffusionProfileSettings)property2.GetValue(val);
			val2.scatteringDistance = new Color(0.5f, 0.5f, 0.5f, 1f);
			FieldInfo field = ((object)val2).GetType().GetField("profile", BindingFlags.Instance | BindingFlags.NonPublic);
			object value = field.GetValue(val2);
			value.GetType().GetField("scatteringDistanceMultiplier").SetValue(value, 1f);
			value.GetType().GetField("transmissionTint").SetValue(value, (object)new Color(1f, 1f, 1f, 1f));
			value.GetType().GetField("texturingMode").SetValue(value, 1u);
			value.GetType().GetField("transmissionMode").SetValue(value, 1u);
			value.GetType().GetField("thicknessRemap").SetValue(value, (object)new Vector2(0f, 5f));
			value.GetType().GetField("worldScale").SetValue(value, 1f);
			value.GetType().GetField("ior").SetValue(value, 1.8f);
			P.Log("Patched the default diffusion profile!", (LogLevel)8);
			if ((Object)(object)((Component)self).GetComponent<AudioSource>() == (Object)null)
			{
				return;
			}
			AudioMixer audioMixer = ((Component)self).GetComponent<AudioSource>().outputAudioMixerGroup.audioMixer;
			List<GameObject> list = new List<GameObject>();
			for (int num = prefabsToFix.Count - 1; num >= 0; num--)
			{
				GameObject val3 = prefabsToFix[num];
				AudioSource[] componentsInChildren = val3.GetComponentsInChildren<AudioSource>();
				AudioSource[] array = componentsInChildren;
				foreach (AudioSource val4 in array)
				{
					if (!((Object)(object)val4.outputAudioMixerGroup == (Object)null) && ((Object)val4.outputAudioMixerGroup.audioMixer).name == "NonDiagetic")
					{
						AudioMixerGroup val5 = audioMixer.FindMatchingGroups(((Object)val4.outputAudioMixerGroup).name)[0];
						if ((Object)(object)val5 != (Object)null)
						{
							val4.outputAudioMixerGroup = val5;
							P.Log("Set mixer group for " + ((Object)val4).name + " in " + ((Object)val3).name + " to NonDiagetic:" + ((Object)val5).name, (LogLevel)8);
							list.Add(val3);
						}
					}
				}
			}
			foreach (GameObject item in list)
			{
				prefabsToFix.Remove(item);
			}
		}

		public static void FixMixerGroups(GameObject prefab)
		{
			if (!fixedPrefabs.Contains(prefab))
			{
				fixedPrefabs.Add(prefab);
				prefabsToFix.Add(prefab);
			}
		}
	}
	public struct ScrapEntry
	{
		internal Item item;

		internal int[] rarity;

		public ScrapEntry(string assetpath, int[] rarity)
		{
			this = default(ScrapEntry);
			item = P.assets.LoadAsset<Item>(assetpath);
			this.rarity = rarity;
			ScrapPatcher.FixMixerGroups(item.spawnPrefab);
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "LambdaCompany";

		public const string PLUGIN_NAME = "LambdaCompany";

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