Decompiled source of BongoMod v1.0.0

BepInEx/plugins/BongoMod/me.loaforc.bongomod.dll

Decompiled 3 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using BongoMod.Patches;
using BongoMod.Revive;
using BongoMod.SoundAPI;
using Dawn;
using Dawn.Utils;
using GameNetcodeStuff;
using LethalNetworkAPI;
using Microsoft.CodeAnalysis;
using On;
using On.GameNetcodeStuff;
using TMPro;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.SceneManagement;
using loaforcsSoundAPI;
using loaforcsSoundAPI.Core;
using loaforcsSoundAPI.SoundPacks;
using loaforcsSoundAPI.SoundPacks.Data;
using loaforcsSoundAPI.SoundPacks.Data.Conditions;

[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("me.loaforc.soundapi")]
[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.Components")]
[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.AccessibilityModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.AIModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.AndroidJNIModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.AnimationModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.AssetBundleModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.AudioModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ClothModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ClusterInputModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ClusterRendererModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ContentLoadModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.CoreModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.CrashReportingModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.DirectorModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine")]
[assembly: IgnoresAccessChecksTo("UnityEngine.DSPGraphModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.GameCenterModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.GIModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.GridModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.HotReloadModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ImageConversionModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.IMGUIModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.InputLegacyModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.InputModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.JSONSerializeModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.LocalizationModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ParticleSystemModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.PerformanceReportingModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.Physics2DModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.PhysicsModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ProfilerModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.PropertiesModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ScreenCaptureModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.SharedInternalsModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.SpriteMaskModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.SpriteShapeModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.StreamingModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.SubstanceModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.SubsystemsModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.TerrainModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.TerrainPhysicsModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.TextCoreFontEngineModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.TextCoreTextEngineModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.TextRenderingModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.TilemapModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.TLSModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UI")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UIElementsModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UIModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UmbraModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityAnalyticsCommonModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityAnalyticsModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityConnectModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityCurlModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityTestProtocolModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityWebRequestAssetBundleModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityWebRequestAudioModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityWebRequestModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityWebRequestTextureModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UnityWebRequestWWWModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.VehiclesModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.VFXModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.VideoModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.VirtualTexturingModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.VRModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.WindModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.XRModule")]
[assembly: AssemblyCompany("me.loaforc.bongomod")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("BongoMod")]
[assembly: AssemblyTitle("me.loaforc.bongomod")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.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 BongoMod
{
	[BepInPlugin("me.loaforc.bongomod", "BongoMod", "1.0.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class BongoMod : BaseUnityPlugin
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static hook_Start <>9__7_1;

			internal void <Awake>b__7_1(orig_Start orig, GameNetworkManager self)
			{
				NetworkManager.Singleton.AddNetworkPrefab(NetworkerPrefab);
				orig.Invoke(self);
			}
		}

		internal static GameObject NetworkerPrefab;

		internal static IReviveMechanic ReviveMechanic;

		internal static LNetworkMessage<int> PlayerRevive;

		internal static ManualLogSource Logger { get; private set; }

		private void Awake()
		{
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Expected O, but got Unknown
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_0116: Expected O, but got Unknown
			Logger = Logger.CreateLogSource("me.loaforc.bongomod");
			BongoModConfig.Init(((BaseUnityPlugin)this).Config);
			BongoModSoundAPI.Init(((BaseUnityPlugin)this).Config);
			HUDManagerPatches.Init();
			StartOfRoundPatches.Init();
			TimeOfDayPatches.Init();
			RoundManagerPatches.Init();
			PlayerControllerPatches.Init();
			HangarShipDoorPatches.Init();
			DeadBodyInfoPatches.Init();
			VehicleControllerPatches.Init();
			PlayerRevive = LNetworkMessage<int>.Connect("BongoMod.PlayerRevive", (Action<int, ulong>)null, (Action<int>)null, (Action<int, ulong>)null);
			PlayerRevive.OnServerReceived += delegate(int player, ulong _)
			{
				PlayerControllerB val3 = StartOfRound.Instance.allPlayerScripts[player];
				Logger.LogInfo((object)("playerrevive.onServerRecieved = " + val3.playerUsername));
				PlayerReviveOnOnClientReceived(player);
				PlayerRevive.SendClients(player);
			};
			PlayerRevive.OnClientReceived += PlayerReviveOnOnClientReceived;
			NetworkerPrefab = new GameObject("BongoNetworker")
			{
				hideFlags = (HideFlags)61
			};
			NetworkerPrefab.AddComponent<BongoModManager>();
			NetworkObject val = NetworkerPrefab.AddComponent<NetworkObject>();
			val.GlobalObjectIdHash = BitConverter.ToUInt32(Encoding.UTF8.GetBytes(((Object)NetworkerPrefab).name), 0);
			Logger.LogDebug((object)$"NetworkerHash: {val.GlobalObjectIdHash}");
			object obj = <>c.<>9__7_1;
			if (obj == null)
			{
				hook_Start val2 = delegate(orig_Start orig, GameNetworkManager self)
				{
					NetworkManager.Singleton.AddNetworkPrefab(NetworkerPrefab);
					orig.Invoke(self);
				};
				<>c.<>9__7_1 = val2;
				obj = (object)val2;
			}
			GameNetworkManager.Start += (hook_Start)obj;
			Logger.LogInfo((object)"me.loaforc.bongomod v1.0.0 has loaded!");
		}

		private void PlayerReviveOnOnClientReceived(int id)
		{
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0189: Unknown result type (might be due to invalid IL or missing references)
			//IL_0279: Unknown result type (might be due to invalid IL or missing references)
			//IL_027e: Unknown result type (might be due to invalid IL or missing references)
			PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[id];
			if (!val.isPlayerDead)
			{
				Logger.LogWarning((object)("Tried to revive: " + val.playerUsername + " but they are still alive!"));
				return;
			}
			StartOfRound instance = StartOfRound.Instance;
			instance.livingPlayers++;
			int num = Array.IndexOf(StartOfRound.Instance.allPlayerScripts, val);
			val.ResetPlayerBloodObjects(val.isPlayerDead);
			if (!val.isPlayerDead && !val.isPlayerControlled)
			{
				return;
			}
			val.isClimbingLadder = false;
			if (!val.inSpecialInteractAnimation || (Object)(object)val.currentTriggerInAnimationWith == (Object)null || !Object.op_Implicit((Object)(object)((Component)val.currentTriggerInAnimationWith).GetComponentInChildren<MoveToExitSpecialAnimation>()))
			{
				val.clampLooking = false;
				((Component)val.gameplayCamera).transform.localEulerAngles = new Vector3(((Component)val.gameplayCamera).transform.localEulerAngles.x, 0f, ((Component)val.gameplayCamera).transform.localEulerAngles.z);
				val.inVehicleAnimation = false;
			}
			val.disableMoveInput = false;
			val.ResetZAndXRotation();
			((Collider)val.thisController).enabled = true;
			val.health = 100;
			val.hasBeenCriticallyInjured = false;
			val.disableLookInput = false;
			val.disableInteract = false;
			((Behaviour)val.nightVisionRadar).enabled = false;
			if (val.isPlayerDead)
			{
				val.isPlayerDead = false;
				val.isPlayerControlled = true;
				val.isInElevator = true;
				val.isInHangarShipRoom = true;
				val.isInsideFactory = false;
				val.parentedToElevatorLastFrame = false;
				val.overrideGameOverSpectatePivot = null;
				StartOfRound.Instance.SetPlayerObjectExtrapolate(false);
				val.TeleportPlayer(StartOfRound.Instance.GetPlayerSpawnPosition(0, false), false, 0f, false, true);
				val.setPositionOfDeadPlayer = false;
				val.DisablePlayerModel(StartOfRound.Instance.allPlayerObjects[num], true, true);
				((Behaviour)val.helmetLight).enabled = false;
				val.Crouch(false);
				val.criticallyInjured = false;
				if ((Object)(object)val.playerBodyAnimator != (Object)null)
				{
					val.playerBodyAnimator.SetBool("Limp", false);
				}
				val.bleedingHeavily = false;
				val.activatingItem = false;
				val.twoHanded = false;
				val.inShockingMinigame = false;
				val.inSpecialInteractAnimation = false;
				val.freeRotationInInteractAnimation = false;
				val.disableSyncInAnimation = false;
				val.inAnimationWithEnemy = null;
				val.holdingWalkieTalkie = false;
				val.speakingToWalkieTalkie = false;
				val.isSinking = false;
				val.isUnderwater = false;
				val.sinkingValue = 0f;
				val.statusEffectAudio.Stop();
				val.DisableJetpackControlsLocally();
				val.health = 100;
				val.mapRadarDotAnimator.SetBool("dead", false);
				val.externalForceAutoFade = Vector3.zero;
				if (((NetworkBehaviour)val).IsOwner)
				{
					HUDManager.Instance.gasHelmetAnimator.SetBool("gasEmitting", false);
					val.hasBegunSpectating = false;
					HUDManager.Instance.RemoveSpectateUI();
					HUDManager.Instance.gameOverAnimator.SetTrigger("revive");
					val.hinderedMultiplier = 1f;
					val.isMovementHindered = 0;
					val.sourcesCausingSinking = 0;
					val.reverbPreset = StartOfRound.Instance.shipReverb;
				}
			}
			SoundManager.Instance.earsRingingTimer = 0f;
			val.voiceMuffledByEnemy = false;
			SoundManager.Instance.playerVoicePitchTargets[num] = 1f;
			SoundManager.Instance.SetPlayerPitch(1f, num);
			if ((Object)(object)val.currentVoiceChatIngameSettings == (Object)null)
			{
				StartOfRound.Instance.RefreshPlayerVoicePlaybackObjects();
			}
			if ((Object)(object)val.currentVoiceChatIngameSettings != (Object)null)
			{
				if ((Object)(object)val.currentVoiceChatIngameSettings.voiceAudio == (Object)null)
				{
					val.currentVoiceChatIngameSettings.InitializeComponents();
				}
				if (!((Object)(object)val.currentVoiceChatIngameSettings.voiceAudio == (Object)null))
				{
					((Component)val.currentVoiceChatIngameSettings.voiceAudio).GetComponent<OccludeAudio>().overridingLowPass = false;
				}
			}
		}
	}
	internal static class BongoModConfig
	{
		public enum ReviveMode
		{
			None,
			IndividualTimed,
			WaveTimed
		}

		[Flags]
		public enum ReviveHintMode
		{
			SpotBody = 2,
			CollectBody = 4
		}

		[CompilerGenerated]
		private sealed class <GetStartingUnlockables>d__32 : IEnumerable<DawnUnlockableItemInfo>, IEnumerable, IEnumerator<DawnUnlockableItemInfo>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private DawnUnlockableItemInfo <>2__current;

			private int <>l__initialThreadId;

			private IEnumerator<DawnUnlockableItemInfo> <>7__wrap1;

			DawnUnlockableItemInfo IEnumerator<DawnUnlockableItemInfo>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <GetStartingUnlockables>d__32(int <>1__state)
			{
				this.<>1__state = <>1__state;
				<>l__initialThreadId = Environment.CurrentManagedThreadId;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				int num = <>1__state;
				if (num == -3 || num == 1)
				{
					try
					{
					}
					finally
					{
						<>m__Finally1();
					}
				}
				<>7__wrap1 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				try
				{
					switch (<>1__state)
					{
					default:
						return false;
					case 0:
						<>1__state = -1;
						<>7__wrap1 = ((Registry<DawnUnlockableItemInfo>)(object)LethalContent.Unlockables).Values.GetEnumerator();
						<>1__state = -3;
						break;
					case 1:
						<>1__state = -3;
						break;
					}
					while (<>7__wrap1.MoveNext())
					{
						DawnUnlockableItemInfo current = <>7__wrap1.Current;
						if (_file.Bind<bool>("Start Unlockables", ((object)((DawnBaseInfo<DawnUnlockableItemInfo>)(object)current).Key).ToString(), false, "Start with this unlockable? Note that not all will be supported here probably").Value)
						{
							<>2__current = current;
							<>1__state = 1;
							return true;
						}
					}
					<>m__Finally1();
					<>7__wrap1 = null;
					return false;
				}
				catch
				{
					//try-fault
					((IDisposable)this).Dispose();
					throw;
				}
			}

			bool IEnumerator.MoveNext()
			{
				//ILSpy generated this explicit interface implementation from .override directive in MoveNext
				return this.MoveNext();
			}

			private void <>m__Finally1()
			{
				<>1__state = -1;
				if (<>7__wrap1 != null)
				{
					<>7__wrap1.Dispose();
				}
			}

			[DebuggerHidden]
			void IEnumerator.Reset()
			{
				throw new NotSupportedException();
			}

			[DebuggerHidden]
			IEnumerator<DawnUnlockableItemInfo> IEnumerable<DawnUnlockableItemInfo>.GetEnumerator()
			{
				if (<>1__state == -2 && <>l__initialThreadId == Environment.CurrentManagedThreadId)
				{
					<>1__state = 0;
					return this;
				}
				return new <GetStartingUnlockables>d__32(0);
			}

			[DebuggerHidden]
			IEnumerator IEnumerable.GetEnumerator()
			{
				return ((IEnumerable<DawnUnlockableItemInfo>)this).GetEnumerator();
			}
		}

		private static ConfigFile _file;

		public static ReviveMode ReviveMechanic { get; private set; }

		public static float IndividualTimer { get; private set; }

		public static float WaveTimer { get; private set; }

		public static float ReviveScrapPercentage { get; private set; }

		public static ReviveHintMode ReviveScrapHint { get; private set; }

		public static int MaximumRevives { get; private set; }

		public static bool BodyReviveRequirement { get; private set; }

		internal static void Init(ConfigFile file)
		{
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Expected O, but got Unknown
			_file = file;
			ReviveMechanic = file.Bind<ReviveMode>("Revive Mechanics", "Revive Mechanic", ReviveMode.None, "Implement a revive mechanic? Setting to something other than None will disable voting the ship to leave.").Value;
			MaximumRevives = file.Bind<int>("Revive Mechanics", "Maximum Revives", 0, new ConfigDescription("Maximum amount of times a player can revive in a single round. Setting to 0 will allow infinite revives.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 10), Array.Empty<object>())).Value;
			IndividualTimer = file.Bind<int>("Revive Mechanics", "Individual Timer", 40, "(IndividualTimed) How long a revive will take").Value;
			WaveTimer = file.Bind<int>("Revive Mechanics", "Wave Timer", 90, "(WaveTimed) How long a revive will take. The timer starts when the first person in a wave dies.").Value;
		}

		[IteratorStateMachine(typeof(<GetStartingUnlockables>d__32))]
		internal static IEnumerable<DawnUnlockableItemInfo> GetStartingUnlockables()
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <GetStartingUnlockables>d__32(-2);
		}
	}
	public class BongoModManager : NetworkSingleton<BongoModManager>
	{
		public override void OnNetworkSpawn()
		{
			base.OnNetworkSpawn();
			BongoMod.ReviveMechanic = BongoModConfig.ReviveMechanic switch
			{
				BongoModConfig.ReviveMode.None => new NoOpReviveMechanic(), 
				BongoModConfig.ReviveMode.IndividualTimed => new IndividualTimedRevive(BongoModConfig.IndividualTimer), 
				BongoModConfig.ReviveMode.WaveTimed => ((Component)this).GetComponent<WaveTimedRevive>(), 
				_ => throw new ArgumentOutOfRangeException(), 
			};
		}

		[ServerRpc(RequireOwnership = false)]
		public void RevivePlayerServerRPC(PlayerControllerReference reference)
		{
			RevivePlayerClientRPC(reference);
		}

		[ClientRpc]
		private void RevivePlayerClientRPC(PlayerControllerReference reference)
		{
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0183: Unknown result type (might be due to invalid IL or missing references)
			//IL_0273: Unknown result type (might be due to invalid IL or missing references)
			//IL_0278: Unknown result type (might be due to invalid IL or missing references)
			PlayerControllerB val = PlayerControllerReference.op_Implicit(reference);
			if (!val.isPlayerDead)
			{
				BongoMod.Logger.LogWarning((object)("Tried to revive: " + val.playerUsername + " but they are still alive!"));
				return;
			}
			StartOfRound instance = StartOfRound.Instance;
			instance.livingPlayers++;
			int num = Array.IndexOf(StartOfRound.Instance.allPlayerScripts, val);
			val.ResetPlayerBloodObjects(val.isPlayerDead);
			if (!val.isPlayerDead && !val.isPlayerControlled)
			{
				return;
			}
			val.isClimbingLadder = false;
			if (!val.inSpecialInteractAnimation || (Object)(object)val.currentTriggerInAnimationWith == (Object)null || !Object.op_Implicit((Object)(object)((Component)val.currentTriggerInAnimationWith).GetComponentInChildren<MoveToExitSpecialAnimation>()))
			{
				val.clampLooking = false;
				((Component)val.gameplayCamera).transform.localEulerAngles = new Vector3(((Component)val.gameplayCamera).transform.localEulerAngles.x, 0f, ((Component)val.gameplayCamera).transform.localEulerAngles.z);
				val.inVehicleAnimation = false;
			}
			val.disableMoveInput = false;
			val.ResetZAndXRotation();
			((Collider)val.thisController).enabled = true;
			val.health = 100;
			val.hasBeenCriticallyInjured = false;
			val.disableLookInput = false;
			val.disableInteract = false;
			((Behaviour)val.nightVisionRadar).enabled = false;
			if (val.isPlayerDead)
			{
				val.isPlayerDead = false;
				val.isPlayerControlled = true;
				val.isInElevator = true;
				val.isInHangarShipRoom = true;
				val.isInsideFactory = false;
				val.parentedToElevatorLastFrame = false;
				val.overrideGameOverSpectatePivot = null;
				StartOfRound.Instance.SetPlayerObjectExtrapolate(false);
				val.TeleportPlayer(StartOfRound.Instance.GetPlayerSpawnPosition(0, false), false, 0f, false, true);
				val.setPositionOfDeadPlayer = false;
				val.DisablePlayerModel(StartOfRound.Instance.allPlayerObjects[num], true, true);
				((Behaviour)val.helmetLight).enabled = false;
				val.Crouch(false);
				val.criticallyInjured = false;
				if ((Object)(object)val.playerBodyAnimator != (Object)null)
				{
					val.playerBodyAnimator.SetBool("Limp", false);
				}
				val.bleedingHeavily = false;
				val.activatingItem = false;
				val.twoHanded = false;
				val.inShockingMinigame = false;
				val.inSpecialInteractAnimation = false;
				val.freeRotationInInteractAnimation = false;
				val.disableSyncInAnimation = false;
				val.inAnimationWithEnemy = null;
				val.holdingWalkieTalkie = false;
				val.speakingToWalkieTalkie = false;
				val.isSinking = false;
				val.isUnderwater = false;
				val.sinkingValue = 0f;
				val.statusEffectAudio.Stop();
				val.DisableJetpackControlsLocally();
				val.health = 100;
				val.mapRadarDotAnimator.SetBool("dead", false);
				val.externalForceAutoFade = Vector3.zero;
				if (((NetworkBehaviour)val).IsOwner)
				{
					HUDManager.Instance.gasHelmetAnimator.SetBool("gasEmitting", false);
					val.hasBegunSpectating = false;
					HUDManager.Instance.RemoveSpectateUI();
					HUDManager.Instance.gameOverAnimator.SetTrigger("revive");
					val.hinderedMultiplier = 1f;
					val.isMovementHindered = 0;
					val.sourcesCausingSinking = 0;
					val.reverbPreset = StartOfRound.Instance.shipReverb;
				}
			}
			SoundManager.Instance.earsRingingTimer = 0f;
			val.voiceMuffledByEnemy = false;
			SoundManager.Instance.playerVoicePitchTargets[num] = 1f;
			SoundManager.Instance.SetPlayerPitch(1f, num);
			if ((Object)(object)val.currentVoiceChatIngameSettings == (Object)null)
			{
				StartOfRound.Instance.RefreshPlayerVoicePlaybackObjects();
			}
			if ((Object)(object)val.currentVoiceChatIngameSettings != (Object)null)
			{
				if ((Object)(object)val.currentVoiceChatIngameSettings.voiceAudio == (Object)null)
				{
					val.currentVoiceChatIngameSettings.InitializeComponents();
				}
				if (!((Object)(object)val.currentVoiceChatIngameSettings.voiceAudio == (Object)null))
				{
					((Component)val.currentVoiceChatIngameSettings.voiceAudio).GetComponent<OccludeAudio>().overridingLowPass = false;
				}
			}
		}
	}
	public class PossibleStringGroup : NetworkBehaviour
	{
		public List<string> PossibleValues = new List<string>();

		public NetworkVariable<string> CurrentValue = new NetworkVariable<string>((string)null, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0);

		private Random _random = new Random();

		public override void OnNetworkSpawn()
		{
			((NetworkBehaviour)this).OnNetworkSpawn();
			ChooseNew();
		}

		public void ChooseNew()
		{
			CurrentValue.Value = RandomExtensions.NextItem<string>(_random, (IList<string>)PossibleValues);
		}
	}
	internal static class BongoModSoundAPI
	{
		public class BongoModSAPIEmitter
		{
			public string MatchString { get; private set; }

			public bool Enabled { get; private set; }

			public BongoModSAPIEmitter(string matchString, ConfigFile file)
			{
				MatchString = matchString;
				Enabled = file.Bind<bool>("SoundAPI Emitters", matchString, true, "").Value;
			}

			internal void Emit()
			{
				if (Enabled)
				{
					PlaySound(MatchString);
				}
			}
		}

		private static AudioSource _currentEmitter;

		private static bool _isEnabled;

		public static BongoModSAPIEmitter LocalPlayerDied;

		public static BongoModSAPIEmitter LocalPlayerRevived;

		public static BongoModSAPIEmitter ShipOpen;

		internal static void Init(ConfigFile file)
		{
			LocalPlayerDied = new BongoModSAPIEmitter("BongoMod:local_player_died", file);
			LocalPlayerRevived = new BongoModSAPIEmitter("BongoMod:local_player_revived", file);
			ShipOpen = new BongoModSAPIEmitter("BongoMod:ship_open", file);
			_isEnabled = true;
			SoundAPI.RegisterAll(Assembly.GetExecutingAssembly());
			SceneManager.sceneLoaded += delegate
			{
				//IL_0011: Unknown result type (might be due to invalid IL or missing references)
				if (!Object.op_Implicit((Object)(object)_currentEmitter))
				{
					_currentEmitter = new GameObject("BongoModSoundAPI-Emitter").AddComponent<AudioSource>();
					_currentEmitter.spatialize = false;
					AudioSourceAdditionalData orCreate = AudioSourceAdditionalData.GetOrCreate(_currentEmitter);
					orCreate.DisableReplacing = true;
					Object.DontDestroyOnLoad((Object)(object)((Component)_currentEmitter).gameObject);
				}
			};
		}

		private static void PlaySound(string matchString)
		{
			if (_isEnabled)
			{
				string text = "*";
				string[] array = matchString.Split(":");
				int num = 0;
				string[] array2 = new string[1 + array.Length];
				array2[num] = text;
				num++;
				ReadOnlySpan<string> readOnlySpan = new ReadOnlySpan<string>(array);
				readOnlySpan.CopyTo(new Span<string>(array2).Slice(num, readOnlySpan.Length));
				num += readOnlySpan.Length;
				string[] array3 = array2;
				SoundReplacementGroup val = default(SoundReplacementGroup);
				AudioClip val2 = default(AudioClip);
				if (SoundReplacementHandler.TryGetReplacementClip(array3, ref val, ref val2, (IContext)(object)DefaultConditionContext.DEFAULT))
				{
					_currentEmitter.PlayOneShot(val2);
				}
			}
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "me.loaforc.bongomod";

		public const string PLUGIN_NAME = "BongoMod";

		public const string PLUGIN_VERSION = "1.0.0";
	}
}
namespace BongoMod.SoundAPI
{
	[SoundAPICondition("BongoMod:synced_random", false, null)]
	public class SyncedValueCondition : Condition
	{
		public static Dictionary<string, int> IDToValue = new Dictionary<string, int>();

		public static Dictionary<string, int> IDToMaxValue = new Dictionary<string, int>();

		public string SyncID { get; private set; }

		public int Value { get; private set; }

		public override bool Evaluate(IContext context)
		{
			return Value == IDToValue.GetValueOrDefault(SyncID, 0);
		}

		public override void OnRegistered()
		{
			((Condition)this).OnRegistered();
			if (Value > IDToMaxValue.GetValueOrDefault(SyncID, 0))
			{
				IDToMaxValue[SyncID] = Value;
			}
		}
	}
}
namespace BongoMod.Revive
{
	public class CollectScrapRevive : NetworkBehaviour, IReviveMechanic
	{
		public void OnLocalPlayerRevive()
		{
			throw new NotImplementedException();
		}

		public float GetLocalPlayerProgress()
		{
			throw new NotImplementedException();
		}

		public string GetText()
		{
			throw new NotImplementedException();
		}
	}
	public class IndividualTimedRevive : IReviveMechanic
	{
		[CompilerGenerated]
		private float <duration>P;

		private float _time;

		public IndividualTimedRevive(float duration)
		{
			<duration>P = duration;
			base..ctor();
		}

		public void OnLocalPlayerRevive()
		{
			_time = 0f;
		}

		public float GetLocalPlayerProgress()
		{
			_time += Time.deltaTime;
			return _time / <duration>P;
		}

		public string GetText()
		{
			return "Waiting to revive...";
		}
	}
	public interface IReviveMechanic
	{
		void OnLocalPlayerRevive();

		float GetLocalPlayerProgress();

		string GetText();
	}
	public class NoOpReviveMechanic : IReviveMechanic
	{
		public void OnLocalPlayerRevive()
		{
		}

		public float GetLocalPlayerProgress()
		{
			return 0f;
		}

		public string GetText()
		{
			return "[error: NoOpReviveMechanic]";
		}
	}
	public class WaveTimedRevive : NetworkBehaviour, IReviveMechanic
	{
		private float _time;

		private NetworkVariable<bool> _isTicking = new NetworkVariable<bool>(false, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0);

		public void OnLocalPlayerRevive()
		{
		}

		public float GetLocalPlayerProgress()
		{
			if (!_isTicking.Value && _time == 0f)
			{
				_time = 0.1f;
				StartTickingRPC();
			}
			return _time / BongoModConfig.WaveTimer;
		}

		public string GetText()
		{
			return "Reviving everyone...";
		}

		[Rpc(/*Could not decode attribute arguments.*/)]
		public void StartTickingRPC()
		{
			_isTicking.Value = true;
		}

		private void Update()
		{
			if (_isTicking.Value || _time > 1f)
			{
				_time += Time.deltaTime;
			}
		}

		private void LateUpdate()
		{
			if (!(GetLocalPlayerProgress() < 1f))
			{
				_time = 0f;
				if (((NetworkBehaviour)this).IsServer)
				{
					_isTicking.Value = false;
				}
			}
		}
	}
}
namespace BongoMod.Patches
{
	internal static class DeadBodyInfoPatches
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_Update <0>__CheckIfBodyRecovered;
		}

		internal static bool BodyRecovered { get; private set; }

		internal static void Init()
		{
			//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
			object obj = <>O.<0>__CheckIfBodyRecovered;
			if (obj == null)
			{
				hook_Update val = CheckIfBodyRecovered;
				<>O.<0>__CheckIfBodyRecovered = val;
				obj = (object)val;
			}
			DeadBodyInfo.Update += (hook_Update)obj;
		}

		private static void CheckIfBodyRecovered(orig_Update orig, DeadBodyInfo self)
		{
			orig.Invoke(self);
			if ((Object)(object)self.playerScript == (Object)(object)GameNetworkManager.Instance.localPlayerController)
			{
				BodyRecovered = self.isInShip;
			}
		}
	}
	internal static class HangarShipDoorPatches
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_SetDoorButtonsEnabled <0>__HangarShipDoorOnSetDoorButtonsEnabled;
		}

		internal static void Init()
		{
			//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
			object obj = <>O.<0>__HangarShipDoorOnSetDoorButtonsEnabled;
			if (obj == null)
			{
				hook_SetDoorButtonsEnabled val = HangarShipDoorOnSetDoorButtonsEnabled;
				<>O.<0>__HangarShipDoorOnSetDoorButtonsEnabled = val;
				obj = (object)val;
			}
			HangarShipDoor.SetDoorButtonsEnabled += (hook_SetDoorButtonsEnabled)obj;
		}

		private static void HangarShipDoorOnSetDoorButtonsEnabled(orig_SetDoorButtonsEnabled orig, HangarShipDoor self, bool doorbuttonsenabled)
		{
			orig.Invoke(self, doorbuttonsenabled);
			if (doorbuttonsenabled)
			{
				BongoModSoundAPI.ShipOpen.Emit();
			}
		}
	}
	internal static class HUDManagerPatches
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_Update <0>__UpdateVotingMeter;
		}

		internal static int RevivesThisRound;

		internal static void Init()
		{
			//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
			object obj = <>O.<0>__UpdateVotingMeter;
			if (obj == null)
			{
				hook_Update val = UpdateVotingMeter;
				<>O.<0>__UpdateVotingMeter = val;
				obj = (object)val;
			}
			HUDManager.Update += (hook_Update)obj;
		}

		private static void UpdateVotingMeter(orig_Update orig, HUDManager self)
		{
			orig.Invoke(self);
			if (!GameNetworkManager.Instance.localPlayerController.isPlayerDead || StartOfRound.Instance.allPlayersDead || BongoMod.ReviveMechanic is NoOpReviveMechanic)
			{
				return;
			}
			if (BongoModConfig.MaximumRevives > 0 && RevivesThisRound >= BongoModConfig.MaximumRevives)
			{
				((Component)self.holdButtonToEndGameEarlyMeter).gameObject.SetActive(false);
				((TMP_Text)self.holdButtonToEndGameEarlyText).text = "Out of revives!";
				((TMP_Text)self.holdButtonToEndGameEarlyVotesText).text = string.Empty;
				return;
			}
			float localPlayerProgress = BongoMod.ReviveMechanic.GetLocalPlayerProgress();
			((Component)self.holdButtonToEndGameEarlyMeter).gameObject.SetActive(localPlayerProgress > 0f);
			self.holdButtonToEndGameEarlyMeter.fillAmount = localPlayerProgress;
			((TMP_Text)self.holdButtonToEndGameEarlyText).text = BongoMod.ReviveMechanic.GetText();
			((TMP_Text)self.holdButtonToEndGameEarlyVotesText).text = string.Empty;
			if (localPlayerProgress >= 1f)
			{
				BongoMod.PlayerRevive.SendServer(Array.IndexOf(StartOfRound.Instance.allPlayerScripts, GameNetworkManager.Instance.localPlayerController));
				BongoMod.ReviveMechanic.OnLocalPlayerRevive();
				RevivesThisRound++;
				BongoModSoundAPI.LocalPlayerRevived.Emit();
			}
		}
	}
	internal static class PlayerControllerPatches
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_KillPlayer <0>__TryTriggerDeathSound;
		}

		internal static void Init()
		{
			//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
			object obj = <>O.<0>__TryTriggerDeathSound;
			if (obj == null)
			{
				hook_KillPlayer val = TryTriggerDeathSound;
				<>O.<0>__TryTriggerDeathSound = val;
				obj = (object)val;
			}
			PlayerControllerB.KillPlayer += (hook_KillPlayer)obj;
		}

		private static void TryTriggerDeathSound(orig_KillPlayer orig, PlayerControllerB self, Vector3 bodyvelocity, bool spawnbody, CauseOfDeath causeofdeath, int deathanimation, Vector3 positionoffset)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			orig.Invoke(self, bodyvelocity, spawnbody, causeofdeath, deathanimation, positionoffset);
			BongoModSoundAPI.LocalPlayerDied.Emit();
		}
	}
	internal static class RoundManagerPatches
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_GenerateNewLevelClientRpc <0>__RefreshSoundAPIValues;
		}

		internal static void Init()
		{
			//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
			object obj = <>O.<0>__RefreshSoundAPIValues;
			if (obj == null)
			{
				hook_GenerateNewLevelClientRpc val = RefreshSoundAPIValues;
				<>O.<0>__RefreshSoundAPIValues = val;
				obj = (object)val;
			}
			RoundManager.GenerateNewLevelClientRpc += (hook_GenerateNewLevelClientRpc)obj;
		}

		private static void RefreshSoundAPIValues(orig_GenerateNewLevelClientRpc orig, RoundManager self, int randomseed, int levelid, int molditerations, int moldstartposition, int[] syncdestroyedmold)
		{
			orig.Invoke(self, randomseed, levelid, molditerations, moldstartposition, syncdestroyedmold);
			Random random = new Random(randomseed + 395823);
			foreach (var (text2, num2) in SyncedValueCondition.IDToMaxValue.OrderBy((KeyValuePair<string, int> it) => it.Key))
			{
				SyncedValueCondition.IDToValue[text2] = random.Next(0, num2 + 1);
				BongoMod.Logger.LogInfo((object)$"synced_random: {text2} -> {SyncedValueCondition.IDToValue[text2]} (0-{num2 + 1})");
			}
			HUDManagerPatches.RevivesThisRound = 0;
		}
	}
	internal static class StartOfRoundPatches
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_Awake <0>__StartOfRoundOnAwake;

			public static hook_ReviveDeadPlayers <1>__StartOfRoundOnReviveDeadPlayers;
		}

		internal static void Init()
		{
			//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
			object obj = <>O.<0>__StartOfRoundOnAwake;
			if (obj == null)
			{
				hook_Awake val = StartOfRoundOnAwake;
				<>O.<0>__StartOfRoundOnAwake = val;
				obj = (object)val;
			}
			StartOfRound.Awake += (hook_Awake)obj;
			object obj2 = <>O.<1>__StartOfRoundOnReviveDeadPlayers;
			if (obj2 == null)
			{
				hook_ReviveDeadPlayers val2 = StartOfRoundOnReviveDeadPlayers;
				<>O.<1>__StartOfRoundOnReviveDeadPlayers = val2;
				obj2 = (object)val2;
			}
			StartOfRound.ReviveDeadPlayers += (hook_ReviveDeadPlayers)obj2;
		}

		private static void StartOfRoundOnReviveDeadPlayers(orig_ReviveDeadPlayers orig, StartOfRound self)
		{
			if (GameNetworkManager.Instance.localPlayerController.isPlayerDead)
			{
				BongoModSoundAPI.LocalPlayerRevived.Emit();
			}
			orig.Invoke(self);
		}

		private static void StartOfRoundOnAwake(orig_Awake orig, StartOfRound self)
		{
			orig.Invoke(self);
			NetworkObjectExtensions.OnSpawn(((NetworkBehaviour)self).NetworkObject, (Action)delegate
			{
				if (((NetworkBehaviour)self).IsServer)
				{
					GameObject val = Object.Instantiate<GameObject>(BongoMod.NetworkerPrefab, ((Component)self).transform.parent);
					val.GetComponent<NetworkObject>().Spawn(false);
				}
			});
		}
	}
	internal static class TimeOfDayPatches
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static hook_VoteShipToLeaveEarly <>9__0_0;

			internal void <Init>b__0_0(orig_VoteShipToLeaveEarly orig, TimeOfDay self)
			{
			}
		}

		internal static void Init()
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Expected O, but got Unknown
			object obj = <>c.<>9__0_0;
			if (obj == null)
			{
				hook_VoteShipToLeaveEarly val = delegate
				{
				};
				<>c.<>9__0_0 = val;
				obj = (object)val;
			}
			TimeOfDay.VoteShipToLeaveEarly += (hook_VoteShipToLeaveEarly)obj;
		}
	}
	internal static class VehicleControllerPatches
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_Awake <0>__SetVehicleRadio;

			public static hook_SetRadioStationClientRpc <1>__FixZeekerss;
		}

		internal static void Init()
		{
			//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
			object obj = <>O.<0>__SetVehicleRadio;
			if (obj == null)
			{
				hook_Awake val = SetVehicleRadio;
				<>O.<0>__SetVehicleRadio = val;
				obj = (object)val;
			}
			VehicleController.Awake += (hook_Awake)obj;
			object obj2 = <>O.<1>__FixZeekerss;
			if (obj2 == null)
			{
				hook_SetRadioStationClientRpc val2 = FixZeekerss;
				<>O.<1>__FixZeekerss = val2;
				obj2 = (object)val2;
			}
			VehicleController.SetRadioStationClientRpc += (hook_SetRadioStationClientRpc)obj2;
		}

		private static void FixZeekerss(orig_SetRadioStationClientRpc orig, VehicleController self, int radiostation, int signalquality)
		{
			orig.Invoke(self, radiostation, signalquality);
			self.SetRadioOnLocalClient(true, true);
		}

		private static void SetVehicleRadio(orig_Awake orig, VehicleController self)
		{
			orig.Invoke(self);
			if (SoundPackDataHandler.SoundReplacements.TryGetValue("VehicleRadio", out var value))
			{
				IContext context = (IContext)(object)DefaultConditionContext.DEFAULT;
				value = value.Where((SoundReplacementGroup it) => ((Conditional)it.Parent).Evaluate(context) && ((Conditional)it).Evaluate(context) && SoundReplacementHandler.CheckGroupMatches(it, new string[3] { "*", "BongoMod", "VehicleRadio" })).ToList();
				AudioClip[] radioClips = (from it in value.SelectMany((SoundReplacementGroup it) => it.Sounds)
					where ((Conditional)it).Evaluate(context)
					select it.Clip).ToArray();
				self.radioClips = radioClips;
			}
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
}