Decompiled source of ArtemCompanyV3 v2.3.1

ACScripts.dll

Decompiled 7 months ago
using System;
using System.Collections;
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 ACScripts.Managers;
using ACScripts.Utils;
using BepInEx;
using BepInEx.Configuration;
using GameNetcodeStuff;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using TMPro;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.UI;

[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: AssemblyVersion("0.0.0.0")]
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;
		}
	}
}
namespace ACScripts
{
	public class DollItem : GrabbableObject
	{
		[CompilerGenerated]
		private sealed class <CumShot>d__13 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public DollItem <>4__this;

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

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

			[DebuggerHidden]
			public <CumShot>d__13(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_0044: Unknown result type (might be due to invalid IL or missing references)
				//IL_004e: Expected O, but got Unknown
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<>4__this.isOnCooldown = true;
					<>4__this.CumShotParticle.Play(true);
					<>2__current = (object)new WaitForSeconds(3f);
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					<>4__this.CumShotParticle.Stop(true, (ParticleSystemStopBehavior)1);
					<>4__this.isOnCooldown = false;
					return false;
				}
			}

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

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

		public ParticleSystem CumShotParticle;

		public AudioSource audioSource;

		public AudioClip clapSound;

		private float clapTimer = 0f;

		private float useTimer = 0f;

		private bool isUsing = false;

		private bool isOnCooldown = false;

		public override void EquipItem()
		{
			((GrabbableObject)this).EquipItem();
			base.playerHeldBy.equippedUsableItemQE = true;
		}

		public override void PocketItem()
		{
			StopUsing();
			((GrabbableObject)this).PocketItem();
		}

		public override void DiscardItem()
		{
			StopUsing();
			((GrabbableObject)this).DiscardItem();
		}

		public override void ItemActivate(bool used, bool buttonDown = true)
		{
			((GrabbableObject)this).ItemActivate(used, buttonDown);
			if (buttonDown)
			{
				isUsing = true;
				base.playerHeldBy.playerBodyAnimator.SetInteger("RockBaby", 1);
			}
			else
			{
				StopUsing();
			}
		}

		public override void Update()
		{
			((GrabbableObject)this).Update();
			if (isUsing)
			{
				useTimer += Time.deltaTime;
				clapTimer += Time.deltaTime;
				if (clapTimer >= 0.5f)
				{
					audioSource.PlayOneShot(clapSound);
					clapTimer = 0f;
				}
				if (useTimer >= 10f && !isOnCooldown)
				{
					((MonoBehaviour)this).StartCoroutine(CumShot());
					useTimer = 0f;
				}
			}
		}

		private void StopUsing()
		{
			isUsing = false;
			useTimer = 0f;
			clapTimer = 0f;
			if ((Object)(object)base.playerHeldBy != (Object)null)
			{
				base.playerHeldBy.playerBodyAnimator.SetInteger("RockBaby", 0);
				base.playerHeldBy.activatingItem = false;
				base.playerHeldBy.equippedUsableItemQE = false;
			}
		}

		[IteratorStateMachine(typeof(<CumShot>d__13))]
		private IEnumerator CumShot()
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <CumShot>d__13(0)
			{
				<>4__this = this
			};
		}
	}
	public class PenetratorItem : GrabbableObject
	{
		[CompilerGenerated]
		private sealed class <delayedEarsRinging>d__41 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public float effectSeverity;

			public PenetratorItem <>4__this;

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

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

			[DebuggerHidden]
			public <delayedEarsRinging>d__41(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_0026: Unknown result type (might be due to invalid IL or missing references)
				//IL_0030: Expected O, but got Unknown
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<>2__current = (object)new WaitForSeconds(0.6f);
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					SoundManager.Instance.earsRingingTimer = effectSeverity;
					return false;
				}
			}

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

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

		[CompilerGenerated]
		private sealed class <reloadGunAnimation>d__48 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public PenetratorItem <>4__this;

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

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

			[DebuggerHidden]
			public <reloadGunAnimation>d__48(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_013e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0148: Expected O, but got Unknown
				//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
				//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
				//IL_01db: Unknown result type (might be due to invalid IL or missing references)
				//IL_01e5: Expected O, but got Unknown
				//IL_02a8: Unknown result type (might be due to invalid IL or missing references)
				//IL_02b2: Expected O, but got Unknown
				//IL_00de: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e8: Expected O, but got Unknown
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<>4__this.isReloading = true;
					if (<>4__this.shellsLoaded <= 0)
					{
						((GrabbableObject)<>4__this).playerHeldBy.playerBodyAnimator.SetBool("ReloadShotgun", true);
						((Renderer)<>4__this.shotgunShellLeft).enabled = false;
						((Renderer)<>4__this.shotgunShellRight).enabled = false;
					}
					else
					{
						((GrabbableObject)<>4__this).playerHeldBy.playerBodyAnimator.SetBool("ReloadShotgun2", true);
						((Renderer)<>4__this.shotgunShellRight).enabled = false;
					}
					<>2__current = (object)new WaitForSeconds(0.3f);
					<>1__state = 1;
					return true;
				case 1:
					<>1__state = -1;
					<>4__this.gunAudio.PlayOneShot(<>4__this.gunReloadSFX);
					<>4__this.gunAnimator.SetBool("Reloading", true);
					<>4__this.ReloadGunEffectsServerRpc();
					<>2__current = (object)new WaitForSeconds(0.95f);
					<>1__state = 2;
					return true;
				case 2:
					<>1__state = -1;
					((Renderer)<>4__this.shotgunShellInHand).enabled = true;
					<>4__this.shotgunShellInHandTransform.SetParent(((GrabbableObject)<>4__this).playerHeldBy.leftHandItemTarget);
					<>4__this.shotgunShellInHandTransform.localPosition = new Vector3(-0.0555f, 0.1469f, -0.0655f);
					<>4__this.shotgunShellInHandTransform.localEulerAngles = new Vector3(-1.956f, 143.856f, -16.427f);
					<>2__current = (object)new WaitForSeconds(0.95f);
					<>1__state = 3;
					return true;
				case 3:
					<>1__state = -1;
					((GrabbableObject)<>4__this).playerHeldBy.DestroyItemInSlotAndSync(<>4__this.ammoSlotToUse);
					<>4__this.ammoSlotToUse = -1;
					<>4__this.shellsLoaded = Mathf.Clamp(<>4__this.shellsLoaded + 1, 0, 2);
					((Renderer)<>4__this.shotgunShellLeft).enabled = true;
					if (<>4__this.shellsLoaded == 2)
					{
						((Renderer)<>4__this.shotgunShellRight).enabled = true;
					}
					((Renderer)<>4__this.shotgunShellInHand).enabled = false;
					<>4__this.shotgunShellInHandTransform.SetParent(((Component)<>4__this).transform);
					<>2__current = (object)new WaitForSeconds(0.45f);
					<>1__state = 4;
					return true;
				case 4:
					<>1__state = -1;
					<>4__this.gunAudio.PlayOneShot(<>4__this.gunReloadFinishSFX);
					<>4__this.gunAnimator.SetBool("Reloading", false);
					((GrabbableObject)<>4__this).playerHeldBy.playerBodyAnimator.SetBool("ReloadShotgun", false);
					((GrabbableObject)<>4__this).playerHeldBy.playerBodyAnimator.SetBool("ReloadShotgun2", false);
					<>4__this.isReloading = false;
					<>4__this.ReloadGunEffectsServerRpc(start: false);
					return false;
				}
			}

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

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

		public int gunCompatibleAmmoID = 69420;

		public bool isReloading;

		public int shellsLoaded = 2;

		public Animator gunAnimator;

		public AudioSource gunAudio;

		public AudioSource gunShootAudio;

		public AudioSource gunBulletsRicochetAudio;

		private Coroutine gunCoroutine;

		public AudioClip[] gunShootSFX;

		public AudioClip gunReloadSFX;

		public AudioClip gunReloadFinishSFX;

		public AudioClip noAmmoSFX;

		public AudioClip gunSafetySFX;

		public AudioClip switchSafetyOnSFX;

		public AudioClip switchSafetyOffSFX;

		public bool safetyOn;

		private float misfireTimer = 30f;

		private bool hasHitGroundWithSafetyOff = true;

		private int ammoSlotToUse = -1;

		private bool localClientSendingShootGunRPC;

		private PlayerControllerB previousPlayerHeldBy;

		public ParticleSystem gunShootParticle;

		public Transform shotgunRayPoint;

		public MeshRenderer shotgunShellLeft;

		public MeshRenderer shotgunShellRight;

		public MeshRenderer shotgunShellInHand;

		public Transform shotgunShellInHandTransform;

		private RaycastHit[] enemyColliders;

		private EnemyAI heldByEnemy;

		public override void Start()
		{
			((GrabbableObject)this).Start();
			misfireTimer = 30f;
			hasHitGroundWithSafetyOff = true;
		}

		public override int GetItemDataToSave()
		{
			((GrabbableObject)this).GetItemDataToSave();
			return shellsLoaded;
		}

		public override void LoadItemSaveData(int saveData)
		{
			((GrabbableObject)this).LoadItemSaveData(saveData);
			safetyOn = true;
			shellsLoaded = saveData;
		}

		public override void Update()
		{
			((GrabbableObject)this).Update();
			if (!((NetworkBehaviour)this).IsOwner || shellsLoaded <= 0 || isReloading || (Object)(object)heldByEnemy != (Object)null || base.isPocketed)
			{
				return;
			}
			if (base.hasHitGround && !safetyOn && !hasHitGroundWithSafetyOff && !base.isHeld)
			{
				if (Random.Range(0, 100) < 5)
				{
					ShootGunAndSync(heldByPlayer: false);
				}
				hasHitGroundWithSafetyOff = true;
			}
			else if (!safetyOn && misfireTimer <= 0f && !StartOfRound.Instance.inShipPhase)
			{
				if (Random.Range(0, 100) < 4)
				{
					ShootGunAndSync(base.isHeld);
				}
				if (Random.Range(0, 100) < 5)
				{
					misfireTimer = 2f;
				}
				else
				{
					misfireTimer = Random.Range(28f, 50f);
				}
			}
			else if (!safetyOn)
			{
				misfireTimer -= Time.deltaTime;
			}
		}

		public override void EquipItem()
		{
			((GrabbableObject)this).EquipItem();
			previousPlayerHeldBy = base.playerHeldBy;
			previousPlayerHeldBy.equippedUsableItemQE = true;
			hasHitGroundWithSafetyOff = false;
		}

		public override void GrabItemFromEnemy(EnemyAI enemy)
		{
			((GrabbableObject)this).GrabItemFromEnemy(enemy);
			heldByEnemy = enemy;
			hasHitGroundWithSafetyOff = false;
		}

		public override void DiscardItemFromEnemy()
		{
			((GrabbableObject)this).DiscardItemFromEnemy();
			heldByEnemy = null;
		}

		public override void ItemActivate(bool used, bool buttonDown = true)
		{
			((GrabbableObject)this).ItemActivate(used, buttonDown);
			if (!isReloading)
			{
				if (shellsLoaded == 0)
				{
					StartReloadGun();
				}
				else if (safetyOn)
				{
					gunAudio.PlayOneShot(gunSafetySFX);
				}
				else if (((NetworkBehaviour)this).IsOwner)
				{
					ShootGunAndSync(heldByPlayer: true);
				}
			}
		}

		public void ShootGunAndSync(bool heldByPlayer)
		{
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: 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_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//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_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			Vector3 shotgunPosition;
			Vector3 forward;
			if (!heldByPlayer)
			{
				shotgunPosition = shotgunRayPoint.position;
				forward = shotgunRayPoint.forward;
			}
			else
			{
				shotgunPosition = ((Component)GameNetworkManager.Instance.localPlayerController.gameplayCamera).transform.position - ((Component)GameNetworkManager.Instance.localPlayerController.gameplayCamera).transform.up * 0.45f;
				forward = ((Component)GameNetworkManager.Instance.localPlayerController.gameplayCamera).transform.forward;
			}
			Debug.Log((object)"Calling shoot gun....");
			ShootGun(shotgunPosition, forward);
			Debug.Log((object)"Calling shoot gun and sync");
			localClientSendingShootGunRPC = true;
			ShootGunServerRpc(shotgunPosition, forward);
		}

		[ServerRpc(RequireOwnership = false)]
		public void ShootGunServerRpc(Vector3 shotgunPosition, Vector3 shotgunForward)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			ShootGunClientRpc(shotgunPosition, shotgunForward);
		}

		[ClientRpc]
		public void ShootGunClientRpc(Vector3 shotgunPosition, Vector3 shotgunForward)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)"Shoot gun client rpc received");
			if (localClientSendingShootGunRPC)
			{
				localClientSendingShootGunRPC = false;
				Debug.Log((object)"localClientSendingShootGunRPC was true");
			}
			else
			{
				ShootGun(shotgunPosition, shotgunForward);
			}
		}

		public void ShootGun(Vector3 shotgunPosition, Vector3 shotgunForward)
		{
			//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_010c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0111: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0126: Unknown result type (might be due to invalid IL or missing references)
			//IL_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_012a: Unknown result type (might be due to invalid IL or missing references)
			//IL_020d: Unknown result type (might be due to invalid IL or missing references)
			//IL_020e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0214: Unknown result type (might be due to invalid IL or missing references)
			//IL_024e: Unknown result type (might be due to invalid IL or missing references)
			//IL_027c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0286: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_02de: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_040c: Unknown result type (might be due to invalid IL or missing references)
			//IL_047a: Unknown result type (might be due to invalid IL or missing references)
			isReloading = false;
			bool flag = false;
			if (base.isHeld && (Object)(object)base.playerHeldBy != (Object)null && (Object)(object)base.playerHeldBy == (Object)(object)GameNetworkManager.Instance.localPlayerController)
			{
				base.playerHeldBy.playerBodyAnimator.SetTrigger("ShootShotgun");
				flag = true;
			}
			RoundManager.PlayRandomClip(gunShootAudio, gunShootSFX, true, 1f, 1840, 1000);
			WalkieTalkie.TransmitOneShotAudio(gunShootAudio, gunShootSFX[0], 1f);
			gunShootParticle.Play(true);
			shellsLoaded = Mathf.Clamp(shellsLoaded - 1, 0, 2);
			PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController;
			if ((Object)(object)localPlayerController == (Object)null)
			{
				return;
			}
			float num = Vector3.Distance(((Component)localPlayerController).transform.position, ((Component)shotgunRayPoint).transform.position);
			bool flag2 = false;
			int num2 = 0;
			float num3 = 0f;
			Vector3 val = localPlayerController.playerCollider.ClosestPoint(shotgunPosition);
			if (!flag && !Physics.Linecast(shotgunPosition, val, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1) && Vector3.Angle(shotgunForward, val - shotgunPosition) < 30f)
			{
				flag2 = true;
			}
			if (num < 5f)
			{
				num3 = 0.8f;
				HUDManager.Instance.ShakeCamera((ScreenShakeType)1);
				num2 = 200;
			}
			if (num < 15f)
			{
				num3 = 0.5f;
				HUDManager.Instance.ShakeCamera((ScreenShakeType)1);
				num2 = 200;
			}
			else if (num < 23f)
			{
				HUDManager.Instance.ShakeCamera((ScreenShakeType)0);
				num2 = 150;
			}
			else if (num < 30f)
			{
				num2 = 100;
			}
			if (num3 > 0f && SoundManager.Instance.timeSinceEarsStartedRinging > 16f)
			{
				((MonoBehaviour)this).StartCoroutine(delayedEarsRinging(num3));
			}
			Ray val2 = default(Ray);
			((Ray)(ref val2))..ctor(shotgunPosition, shotgunForward);
			RaycastHit val3 = default(RaycastHit);
			if (Physics.Raycast(val2, ref val3, 30f, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1))
			{
				((Component)gunBulletsRicochetAudio).transform.position = ((Ray)(ref val2)).GetPoint(((RaycastHit)(ref val3)).distance - 0.5f);
				gunBulletsRicochetAudio.Play();
			}
			if (flag2)
			{
				localPlayerController.DamagePlayer(num2, true, true, (CauseOfDeath)7, 0, false, shotgunRayPoint.forward * 30f);
			}
			if (!((NetworkBehaviour)this).IsOwner)
			{
				return;
			}
			if (enemyColliders == null)
			{
				enemyColliders = (RaycastHit[])(object)new RaycastHit[10];
			}
			((Ray)(ref val2))..ctor(shotgunPosition - shotgunForward * 10f, shotgunForward);
			int num4 = Physics.SphereCastNonAlloc(val2, 5f, enemyColliders, 15f, 524288, (QueryTriggerInteraction)2);
			List<EnemyAI> list = new List<EnemyAI>();
			IHittable val4 = default(IHittable);
			for (int i = 0; i < num4; i++)
			{
				if (!Object.op_Implicit((Object)(object)((Component)((RaycastHit)(ref enemyColliders[i])).transform).GetComponent<EnemyAICollisionDetect>()))
				{
					continue;
				}
				EnemyAI mainScript = ((Component)((RaycastHit)(ref enemyColliders[i])).transform).GetComponent<EnemyAICollisionDetect>().mainScript;
				if ((Object)(object)heldByEnemy != (Object)null && (Object)(object)heldByEnemy == (Object)(object)mainScript)
				{
					continue;
				}
				if (((RaycastHit)(ref enemyColliders[i])).distance == 0f)
				{
					Debug.Log((object)"Spherecast started inside enemy collider");
				}
				else if (!Physics.Linecast(shotgunPosition, ((RaycastHit)(ref enemyColliders[i])).point, ref val3, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1) && ((Component)((RaycastHit)(ref enemyColliders[i])).transform).TryGetComponent<IHittable>(ref val4))
				{
					float num5 = Vector3.Distance(shotgunPosition, ((RaycastHit)(ref enemyColliders[i])).point);
					int num6 = ((num5 < 3.7f) ? 10 : ((!(num5 < 6f)) ? 4 : 6));
					EnemyAICollisionDetect component = ((Component)((RaycastHit)(ref enemyColliders[i])).collider).GetComponent<EnemyAICollisionDetect>();
					if ((!((Object)(object)component != (Object)null) || (!((Object)(object)component.mainScript == (Object)null) && !list.Contains(component.mainScript))) && val4.Hit(num6, shotgunForward, base.playerHeldBy, true, -1) && (Object)(object)component != (Object)null)
					{
						list.Add(component.mainScript);
					}
				}
			}
		}

		[IteratorStateMachine(typeof(<delayedEarsRinging>d__41))]
		private IEnumerator delayedEarsRinging(float effectSeverity)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <delayedEarsRinging>d__41(0)
			{
				<>4__this = this,
				effectSeverity = effectSeverity
			};
		}

		public override void ItemInteractLeftRight(bool right)
		{
			((GrabbableObject)this).ItemInteractLeftRight(right);
			if ((Object)(object)base.playerHeldBy == (Object)null)
			{
				return;
			}
			Debug.Log((object)$"r/l activate: {right}");
			if (!right)
			{
				if (safetyOn)
				{
					safetyOn = false;
					gunAudio.PlayOneShot(switchSafetyOffSFX);
					WalkieTalkie.TransmitOneShotAudio(gunAudio, switchSafetyOffSFX, 1f);
					SetSafetyControlTip();
				}
				else
				{
					safetyOn = true;
					gunAudio.PlayOneShot(switchSafetyOnSFX);
					WalkieTalkie.TransmitOneShotAudio(gunAudio, switchSafetyOnSFX, 1f);
					SetSafetyControlTip();
				}
				base.playerHeldBy.playerBodyAnimator.SetTrigger("SwitchGunSafety");
			}
			else if (!isReloading && shellsLoaded < 2)
			{
				StartReloadGun();
			}
		}

		public override void SetControlTipsForItem()
		{
			string[] toolTips = base.itemProperties.toolTips;
			if (toolTips.Length <= 2)
			{
				Debug.LogError((object)"Shotgun control tips array length is too short to set tips!");
				return;
			}
			if (safetyOn)
			{
				toolTips[2] = "Turn safety off: [Q]";
			}
			else
			{
				toolTips[2] = "Turn safety on: [Q]";
			}
			HUDManager.Instance.ChangeControlTipMultiple(toolTips, true, base.itemProperties);
		}

		private void SetSafetyControlTip()
		{
			string text = ((!safetyOn) ? "Turn safety on: [Q]" : "Turn safety off: [Q]");
			if (((NetworkBehaviour)this).IsOwner)
			{
				HUDManager.Instance.ChangeControlTip(3, text, false);
			}
		}

		private void StartReloadGun()
		{
			if (ReloadedGun())
			{
				if (((NetworkBehaviour)this).IsOwner)
				{
					if (gunCoroutine != null)
					{
						((MonoBehaviour)this).StopCoroutine(gunCoroutine);
					}
					gunCoroutine = ((MonoBehaviour)this).StartCoroutine(reloadGunAnimation());
				}
			}
			else
			{
				gunAudio.PlayOneShot(noAmmoSFX);
			}
		}

		[ServerRpc]
		public void ReloadGunEffectsServerRpc(bool start = true)
		{
			ReloadGunEffectsClientRpc(start);
		}

		[ClientRpc]
		public void ReloadGunEffectsClientRpc(bool start = true)
		{
			if (!((NetworkBehaviour)this).IsOwner)
			{
				if (start)
				{
					gunAudio.PlayOneShot(gunReloadSFX);
					WalkieTalkie.TransmitOneShotAudio(gunAudio, gunReloadSFX, 1f);
					gunAnimator.SetBool("Reloading", true);
					isReloading = true;
				}
				else
				{
					shellsLoaded = Mathf.Clamp(shellsLoaded + 1, 0, 2);
					gunAudio.PlayOneShot(gunReloadFinishSFX);
					gunAnimator.SetBool("Reloading", false);
					isReloading = false;
				}
			}
		}

		[IteratorStateMachine(typeof(<reloadGunAnimation>d__48))]
		private IEnumerator reloadGunAnimation()
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <reloadGunAnimation>d__48(0)
			{
				<>4__this = this
			};
		}

		private bool ReloadedGun()
		{
			int num = FindAmmoInInventory();
			if (num == -1)
			{
				Debug.Log((object)"not reloading");
				return false;
			}
			Debug.Log((object)"reloading!");
			ammoSlotToUse = num;
			return true;
		}

		private int FindAmmoInInventory()
		{
			for (int i = 0; i < base.playerHeldBy.ItemSlots.Length; i++)
			{
				if (!((Object)(object)base.playerHeldBy.ItemSlots[i] == (Object)null))
				{
					GrabbableObject obj = base.playerHeldBy.ItemSlots[i];
					GunAmmo val = (GunAmmo)(object)((obj is GunAmmo) ? obj : null);
					Debug.Log((object)$"Ammo null in slot #{i}?: {(Object)(object)val == (Object)null}");
					if ((Object)(object)val != (Object)null)
					{
						Debug.Log((object)$"Ammo in slot #{i} id: {val.ammoType}");
					}
					if ((Object)(object)val != (Object)null && val.ammoType == gunCompatibleAmmoID)
					{
						return i;
					}
				}
			}
			return -1;
		}

		public override void PocketItem()
		{
			((GrabbableObject)this).PocketItem();
			StopUsingGun();
		}

		public override void DiscardItem()
		{
			((GrabbableObject)this).DiscardItem();
			StopUsingGun();
		}

		private void StopUsingGun()
		{
			previousPlayerHeldBy.equippedUsableItemQE = false;
			if (isReloading)
			{
				if (gunCoroutine != null)
				{
					((MonoBehaviour)this).StopCoroutine(gunCoroutine);
				}
				gunAnimator.SetBool("Reloading", false);
				gunAudio.Stop();
				if ((Object)(object)previousPlayerHeldBy != (Object)null)
				{
					previousPlayerHeldBy.playerBodyAnimator.SetBool("ReloadShotgun", false);
					previousPlayerHeldBy.playerBodyAnimator.SetBool("ReloadShotgun2", false);
				}
				((Renderer)shotgunShellInHand).enabled = false;
				shotgunShellInHandTransform.SetParent(((Component)this).transform);
				isReloading = false;
			}
		}
	}
	[BepInPlugin("WaterGun.AC", "Artem Company", "2.3.1")]
	public class Plugin : BaseUnityPlugin
	{
		[HarmonyPatch(typeof(MenuManager), "OnEnable")]
		internal class MenuManager_patch
		{
			[HarmonyPostfix]
			public static void MenuManagerInstance(MenuManager __instance)
			{
				((MonoBehaviour)__instance).StartCoroutine(Instance.HandleMenuChanges(__instance));
			}
		}

		[HarmonyPatch(typeof(StartOfRound))]
		internal class StartOfRoundStart_patch
		{
			[HarmonyPostfix]
			[HarmonyPatch("Start")]
			public static void StartOfRoundInstance(StartOfRound __instance)
			{
				foreach (Item items in __instance.allItemsList.itemsList)
				{
					if (items.itemName == "Painting" && Instance.EnablePaintings.Value)
					{
						Material[] materials = ((Renderer)items.spawnPrefab.GetComponent<MeshRenderer>()).materials;
						materials[0] = Instance.painting1;
						((Renderer)items.spawnPrefab.GetComponent<MeshRenderer>()).materials = materials;
						List<Material> list = new List<Material>();
						list.Add(Instance.painting1);
						list.Add(Instance.painting2);
						list.Add(Instance.painting3);
						list.Add(Instance.painting4);
						list.Add(Instance.painting5);
						list.Add(Instance.painting6);
						list.Add(Instance.painting7);
						Material[] materialVariants = list.ToArray();
						items.materialVariants = materialVariants;
					}
				}
				if (NetworkManager.Singleton.IsServer)
				{
					GameObject val = Object.Instantiate<GameObject>(Instance.NMAC);
					val.GetComponent<NetworkObject>().Spawn(false);
				}
			}
		}

		[HarmonyPatch(typeof(GameNetworkManager), "Start")]
		internal class GameNetworkManager_Start
		{
			[HarmonyPostfix]
			public static void Postfix()
			{
				foreach (GameObject item in NetworkPrefabs.prefabsToRegister)
				{
					if (!NetworkManager.Singleton.NetworkConfig.Prefabs.Contains(item))
					{
						NetworkManager.Singleton.AddNetworkPrefab(item);
					}
				}
			}
		}

		[HarmonyPatch(typeof(Terminal), "Awake")]
		internal class Terminal_Awake
		{
			[HarmonyPrefix]
			public static void Prefix(Terminal __instance)
			{
				//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
				//IL_0101: Unknown result type (might be due to invalid IL or missing references)
				//IL_0117: Expected O, but got Unknown
				foreach (KeyValuePair<Item, int> item in Instance.itemsToRegister)
				{
					if (StartOfRound.Instance.allItemsList.itemsList.Any((Item itemObject) => itemObject.itemName == item.Key.itemName))
					{
						continue;
					}
					StartOfRound.Instance.allItemsList.itemsList.Add(item.Key);
					if (item.Value == 0)
					{
						continue;
					}
					SelectableLevel[] levels = StartOfRound.Instance.levels;
					foreach (SelectableLevel val in levels)
					{
						if (!val.spawnableScrap.Any((SpawnableItemWithRarity scrap) => (Object)(object)scrap.spawnableItem == (Object)(object)item.Key))
						{
							val.spawnableScrap.Add(new SpawnableItemWithRarity
							{
								rarity = item.Value,
								spawnableItem = item.Key
							});
						}
					}
				}
			}
		}

		[HarmonyPatch(typeof(NutcrackerEnemyAI))]
		internal class nutcracker_patch
		{
			[HarmonyPatch("Start")]
			[HarmonyPrefix]
			public static void nutcrackersounds(NutcrackerEnemyAI __instance)
			{
				if (Instance.EnableNutcrackerSounds.Value)
				{
					Transform obj = ((Component)__instance).transform.Find("CreatureVoice");
					AudioSource val = ((obj != null) ? ((Component)obj).GetComponent<AudioSource>() : null);
					val.clip = Instance.nuttheme;
					((EnemyAI)__instance).enemyType.deathSFX = Instance.nutdie;
					((EnemyAI)__instance).enemyType.audioClips[2] = Instance.nutreload;
					((EnemyAI)__instance).dieSFX = Instance.nutdie;
					((EnemyAI)__instance).enemyType.audioClips[3] = null;
					if ((Object)(object)((EnemyAI)__instance).enemyType.audioClips[3] == (Object)null)
					{
						((EnemyAI)__instance).enemyType.audioClips[3] = Instance.nutheadgoup;
					}
					__instance.aimSFX = Instance.nutaimsfxnew;
				}
			}
		}

		[HarmonyPatch(typeof(JesterAI))]
		internal class jester_patch
		{
			[HarmonyPatch("Start")]
			[HarmonyPrefix]
			public static void jestersounds(JesterAI __instance)
			{
				if (Instance.EnableJesterSounds.Value)
				{
					__instance.popUpSFX = Instance.jesterpop;
					__instance.screamingSFX = Instance.jesterscream;
					__instance.popGoesTheWeaselTheme = Instance.jestertheme;
				}
			}
		}

		[HarmonyPatch(typeof(Landmine))]
		internal class landmine_patch
		{
			[HarmonyPatch("Start")]
			[HarmonyPrefix]
			public static void landminesounds(Landmine __instance)
			{
				if (Instance.EnableLandMineSounds.Value)
				{
					__instance.mineDetonate = Instance.mineexplode;
				}
			}
		}

		[HarmonyPatch(typeof(HoarderBugAI))]
		internal class bug_patch
		{
			[HarmonyPatch("Start")]
			[HarmonyPrefix]
			public static void hoarderbugsounds(HoarderBugAI __instance)
			{
				if (Instance.EnableHoardingBugSounds.Value)
				{
					__instance.chitterSFX[0] = Instance.chitter;
					__instance.chitterSFX[1] = Instance.chitter;
					__instance.chitterSFX[2] = Instance.chitter;
				}
			}
		}

		[HarmonyPatch(typeof(RedLocustBees))]
		internal class bees_patch
		{
			[HarmonyPatch("Start")]
			[HarmonyPrefix]
			public static void beessounds(RedLocustBees __instance)
			{
				if (Instance.EnableCircuitBeesSounds.Value)
				{
					Transform obj = ((Component)__instance).transform.Find("AngrySFX");
					AudioSource val = ((obj != null) ? ((Component)obj).GetComponent<AudioSource>() : null);
					val.clip = Instance.angry;
				}
			}
		}

		[HarmonyPatch(typeof(ForestGiantAI))]
		internal class giant_patch
		{
			[HarmonyPatch("Start")]
			[HarmonyPostfix]
			public static void giantsounds(ForestGiantAI __instance)
			{
				if (Instance.EnableForestGiantSounds.Value)
				{
					Transform val = ((Component)__instance).transform.Find("FGiantModelContainer/AnimContainer");
					PlayAudioAnimationEvent component = ((Component)val).GetComponent<PlayAudioAnimationEvent>();
					component.audioClip2 = Instance.eatplayeraudio;
				}
			}
		}

		[HarmonyPatch(typeof(MouthDogAI))]
		internal class dog_patch
		{
			[HarmonyPatch("Start")]
			[HarmonyPrefix]
			public static void dogsounds(MouthDogAI __instance)
			{
				if (Instance.EnableEyelessDogSounds.Value)
				{
					__instance.breathingSFX = Instance.breathe;
				}
			}
		}

		[HarmonyPatch(typeof(DressGirlAI))]
		internal class girl_patch
		{
			[HarmonyPatch("Start")]
			[HarmonyPrefix]
			public static void girlsounds(DressGirlAI __instance)
			{
				if (Instance.EnableDressGirlSounds.Value)
				{
					__instance.breathingSFX = Instance.spy;
				}
			}
		}

		[HarmonyPatch(typeof(VehicleController))]
		internal class cruiser_patch
		{
			[HarmonyPatch("Start")]
			[HarmonyPostfix]
			public static void cruiserprefab(VehicleController __instance)
			{
				if (Instance.EnableCruiserSkinPatch.Value)
				{
					Transform obj = ((Component)__instance).transform.Find("Meshes/MainBody");
					MeshRenderer val = ((obj != null) ? ((Component)obj).GetComponent<MeshRenderer>() : null);
					Transform obj2 = ((Component)__instance).transform.Find("Meshes/MainBody/MainBody (1)");
					MeshRenderer val2 = ((obj2 != null) ? ((Component)obj2).GetComponent<MeshRenderer>() : null);
					Transform obj3 = ((Component)__instance).transform.Find("Meshes/MainBody/MainBody (2)");
					MeshRenderer val3 = ((obj3 != null) ? ((Component)obj3).GetComponent<MeshRenderer>() : null);
					Transform obj4 = ((Component)__instance).transform.Find("Meshes/CarHoodContainer/CarHoodMesh");
					MeshRenderer val4 = ((obj4 != null) ? ((Component)obj4).GetComponent<MeshRenderer>() : null);
					Transform obj5 = ((Component)__instance).transform.Find("Meshes/DoorRightContainer/Door");
					MeshRenderer val5 = ((obj5 != null) ? ((Component)obj5).GetComponent<MeshRenderer>() : null);
					Transform obj6 = ((Component)__instance).transform.Find("Meshes/DoorLeftContainer/Door");
					MeshRenderer val6 = ((obj6 != null) ? ((Component)obj6).GetComponent<MeshRenderer>() : null);
					Transform obj7 = ((Component)__instance).transform.Find("Meshes/DriverSeatContainer/Seat/DriverSeat");
					MeshRenderer val7 = ((obj7 != null) ? ((Component)obj7).GetComponent<MeshRenderer>() : null);
					Transform obj8 = ((Component)__instance).transform.Find("Meshes/BackDoorContainer/BackDoor/BackDoorMesh");
					SkinnedMeshRenderer val8 = ((obj8 != null) ? ((Component)obj8).GetComponent<SkinnedMeshRenderer>() : null);
					Material[] materials = ((Renderer)val).materials;
					Material[] materials2 = ((Renderer)val2).materials;
					Material[] materials3 = ((Renderer)val3).materials;
					Material[] materials4 = ((Renderer)val4).materials;
					Material[] materials5 = ((Renderer)val5).materials;
					Material[] materials6 = ((Renderer)val6).materials;
					Material[] materials7 = ((Renderer)val7).materials;
					Material[] materials8 = ((Renderer)val8).materials;
					materials[0] = Instance.cruisermat;
					materials2[0] = Instance.cruisermat;
					materials3[0] = Instance.cruisermat;
					materials4[0] = Instance.cruisermat;
					materials5[0] = Instance.cruisermat;
					materials6[0] = Instance.cruisermat;
					materials7[0] = Instance.cruisermat;
					materials8[0] = Instance.cruisermat;
					((Renderer)val).materials = materials;
					((Renderer)val2).materials = materials2;
					((Renderer)val3).materials = materials3;
					((Renderer)val4).materials = materials4;
					((Renderer)val5).materials = materials5;
					((Renderer)val6).materials = materials6;
					((Renderer)val7).materials = materials7;
					((Renderer)val8).materials = materials8;
					__instance.turboBoostSFX = Instance.jesterpop;
					Transform val9 = ((Component)__instance).transform.Find("Meshes/GearStickContainer/GearStick");
					((Renderer)((Component)val9).GetComponent<MeshRenderer>()).enabled = false;
					GameObject val10 = Object.Instantiate<GameObject>(Instance.newgearstick, val9);
				}
			}
		}

		[HarmonyPatch(typeof(Turret))]
		internal class turret_patch
		{
			[HarmonyPatch("Start")]
			[HarmonyPrefix]
			public static void turretassets(Turret __instance)
			{
				Transform val = ((Component)__instance).transform.parent.Find("MeshContainer/Mount");
				Transform val2 = ((Component)__instance.turretRod).transform.Find("Rod/GunBody");
				GameObject val3 = Object.Instantiate<GameObject>(Instance.turretpatchcontainer, val2);
				Transform obj = ((Component)__instance.aimPoint).transform.Find("BulletParticle");
				ParticleSystemRenderer val4 = ((obj != null) ? ((Component)obj).GetComponent<ParticleSystemRenderer>() : null);
				Transform obj2 = ((Component)__instance.aimPoint).transform.Find("BulletParticle/BulletParticleFlare");
				ParticleSystemRenderer val5 = ((obj2 != null) ? ((Component)obj2).GetComponent<ParticleSystemRenderer>() : null);
				MeshRenderer component = ((Component)val).GetComponent<MeshRenderer>();
				MeshRenderer component2 = ((Component)val3.transform.Find("default")).GetComponent<MeshRenderer>();
				Material material = ((Renderer)component2).materials[0];
				((Renderer)((Component)val2).gameObject.GetComponent<MeshRenderer>()).enabled = false;
				((Renderer)((Component)((Component)val2).transform.Find("Magazine")).GetComponent<MeshRenderer>()).enabled = false;
				val4.trailMaterial = Instance.TurretFlame;
				((Renderer)val5).material = Instance.FlameTurret;
				((Renderer)component).material = material;
				Transform obj3 = ((Component)val2).transform.Find("LightSphere/Point Light");
				Light val6 = ((obj3 != null) ? ((Component)obj3).GetComponent<Light>() : null);
				val6.colorTemperature = 6307f;
				Transform obj4 = ((Component)val5).transform.Find("FlareLight");
				Light val7 = ((obj4 != null) ? ((Component)obj4).GetComponent<Light>() : null);
				val7.colorTemperature = 6307f;
				Transform obj5 = ((Component)__instance.aimPoint).transform.Find("Spot Light");
				Light val8 = ((obj5 != null) ? ((Component)obj5).GetComponent<Light>() : null);
				val8.colorTemperature = 6307f;
			}
		}

		[HarmonyPatch(typeof(StartOfRound))]
		internal class StartOfRound_PatchOnSceneLoad
		{
			[HarmonyPatch("SceneManager_OnLoadComplete1")]
			[HarmonyPostfix]
			public static void StartOfRoundInstanceLoad(StartOfRound __instance)
			{
				if (Instance.EnableSexShop.Value && __instance.currentLevel.PlanetName == "71 Gordion" && __instance.currentLevel.levelID == 3 && NetworkManager.Singleton.IsServer && !__instance.inShipPhase)
				{
					NetworkManagerAC.Instance.SetupShop();
				}
			}
		}

		[HarmonyPatch(typeof(StartOfRound))]
		internal class StartOfRound_PatchOnSceneUnload
		{
			[HarmonyPatch("SceneManager_OnUnloadComplete")]
			[HarmonyPostfix]
			public static void StartOfRoundInstanceUnLoad(StartOfRound __instance)
			{
				if (Instance.EnableSexShop.Value && __instance.currentLevel.PlanetName == "71 Gordion" && __instance.currentLevel.levelID == 3 && NetworkManager.Singleton.IsServer)
				{
					NetworkManagerAC.Instance.RemoveShop();
				}
			}
		}

		[CompilerGenerated]
		private sealed class <HandleMenuChanges>d__76 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public MenuManager Instance;

			public Plugin <>4__this;

			private Transform <Title>5__1;

			private Transform <LoadingTitle>5__2;

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

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

			[DebuggerHidden]
			public <HandleMenuChanges>d__76(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<Title>5__1 = null;
				<LoadingTitle>5__2 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				//IL_0073: Unknown result type (might be due to invalid IL or missing references)
				//IL_007d: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
				//IL_0136: Unknown result type (might be due to invalid IL or missing references)
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					break;
				case 1:
					<>1__state = -1;
					break;
				}
				if ((Object)(object)Instance.versionNumberText == (Object)null)
				{
					<>2__current = null;
					<>1__state = 1;
					return true;
				}
				((TMP_Text)Instance.versionNumberText).rectTransform.sizeDelta = new Vector2(400f, ((TMP_Text)Instance.versionNumberText).rectTransform.sizeDelta.y);
				TextMeshProUGUI versionNumberText = Instance.versionNumberText;
				((TMP_Text)versionNumberText).text = ((TMP_Text)versionNumberText).text + " (Artem Company 2.3.1)";
				((Graphic)Instance.versionNumberText).color = Color.white;
				<Title>5__1 = Instance.menuButtons.transform.Find("HeaderImage");
				((Component)<Title>5__1).GetComponent<Image>().sprite = ACTitle;
				<LoadingTitle>5__2 = Instance.loadingScreen.transform.Find("Image");
				((Component)<LoadingTitle>5__2).GetComponent<Image>().sprite = ACTitle;
				((Graphic)Instance.loadingText).color = Color.white;
				return false;
			}

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

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

		private const string GUID = "WaterGun.AC";

		private const string NAME = "Artem Company";

		private const string VERSION = "2.3.1";

		public static Plugin Instance;

		public static AssetBundle bundle;

		public GameObject NMAC;

		private static Sprite ACTitle;

		public ConfigEntry<bool> CensorMode;

		public ConfigEntry<bool> EnableWaterGun;

		public ConfigEntry<bool> EnableDildo;

		public ConfigEntry<bool> EnableHeadShoulders;

		public ConfigEntry<bool> EnableAnalBeads;

		public ConfigEntry<bool> EnablePussyDestroyer;

		public ConfigEntry<bool> EnableAnalDestroyer;

		public ConfigEntry<bool> EnableDurex;

		public ConfigEntry<bool> EnableSexDoll;

		public ConfigEntry<bool> EnableNutcrackerSounds;

		public ConfigEntry<bool> EnableJesterSounds;

		public ConfigEntry<bool> EnableLandMineSounds;

		public ConfigEntry<bool> EnableCircuitBeesSounds;

		public ConfigEntry<bool> EnableHoardingBugSounds;

		public ConfigEntry<bool> EnableForestGiantSounds;

		public ConfigEntry<bool> EnableDressGirlSounds;

		public ConfigEntry<bool> EnableEyelessDogSounds;

		public ConfigEntry<bool> EnableSexShop;

		public ConfigEntry<int> PenetratorPrice;

		public ConfigEntry<int> PenetratorAmmoPrice;

		public ConfigEntry<bool> EnableCruiserSkinPatch;

		public ConfigEntry<bool> EnableTurretSkinPatch;

		public ConfigEntry<bool> EnablePaintings;

		public GameObject SexShopprefab;

		public AudioClip nutaimsfxnew;

		public AudioClip nutheadgoup;

		public AudioClip nutdie;

		public AudioClip nuttheme;

		public AudioClip nutreload;

		public AudioClip jestertheme;

		public AudioClip jesterscream;

		public AudioClip jesterpop;

		public AudioClip mineexplode;

		public AudioClip chitter;

		public AudioClip angry;

		public AudioClip eatplayeraudio;

		public AudioClip breathe;

		public AudioClip spy;

		public Material cruisermat;

		public GameObject newgearstick;

		public Item Dildo;

		public Item WaterGun;

		public Item HeadShoulders;

		public Item AnalBeads;

		public Item PussyDestroyer;

		public Item AnalDestroyer;

		public Item Durex;

		public Item SexDoll;

		public Material painting1;

		public Material painting2;

		public Material painting3;

		public Material painting4;

		public Material painting5;

		public Material painting6;

		public Material painting7;

		public GameObject turretpatchcontainer;

		public Material FlameTurret;

		public Material TurretFlame;

		public GameObject SpawnedShop;

		public Item Penetrator;

		public Item Penetratorshell;

		public AudioClip gunReloadSFX;

		public AudioClip gunSafetySFX;

		public AudioClip switchSafetyOnSFX;

		public AudioClip switchSafetyOffSFX;

		public AudioClip gunblastfail;

		public AudioClip gunblast;

		public Dictionary<Item, int> itemsToRegister = new Dictionary<Item, int>();

		private void Awake()
		{
			//IL_03ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f4: Expected O, but got Unknown
			//IL_051c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0521: Unknown result type (might be due to invalid IL or missing references)
			//IL_06c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_06c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_07a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_07a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0884: Unknown result type (might be due to invalid IL or missing references)
			//IL_0889: Unknown result type (might be due to invalid IL or missing references)
			//IL_0965: Unknown result type (might be due to invalid IL or missing references)
			//IL_096a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a47: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a4c: Unknown result type (might be due to invalid IL or missing references)
			Instance = this;
			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);
					}
				}
			}
			EnableWaterGun = ((BaseUnityPlugin)this).Config.Bind<bool>("Scraps", "Enable WaterGun", true, "Enables WaterGun Spawning");
			EnableDildo = ((BaseUnityPlugin)this).Config.Bind<bool>("Scraps", "Enable Dildo", true, "Enables Dildo Spawning");
			EnableAnalBeads = ((BaseUnityPlugin)this).Config.Bind<bool>("Scraps", "Enable AnalBeads", true, "Enables AnalBeads Spawning");
			EnableHeadShoulders = ((BaseUnityPlugin)this).Config.Bind<bool>("Scraps", "Enable Head&Shoulders", true, "Enables Head&Shoulders Spawning");
			EnablePussyDestroyer = ((BaseUnityPlugin)this).Config.Bind<bool>("Scraps", "Enable PussyDestroyer", true, "Enables PussyDestroyer Spawning");
			EnableAnalDestroyer = ((BaseUnityPlugin)this).Config.Bind<bool>("Scraps", "Enable AnalDestroyer", true, "Enables AnalDestroyer Spawning");
			EnableDurex = ((BaseUnityPlugin)this).Config.Bind<bool>("Scraps", "Enable Durex", true, "Enables Durex Spawning");
			EnableSexDoll = ((BaseUnityPlugin)this).Config.Bind<bool>("Scraps", "Enable SexDoll", true, "Enables SexDoll Spawning");
			EnableNutcrackerSounds = ((BaseUnityPlugin)this).Config.Bind<bool>("Sounds", "Enable Nutcracker", true, "Enables Nutcracker Sound patches");
			EnableJesterSounds = ((BaseUnityPlugin)this).Config.Bind<bool>("Sounds", "Enable Jester", true, "Enables Jester Sound patches");
			EnableLandMineSounds = ((BaseUnityPlugin)this).Config.Bind<bool>("Sounds", "Enable LandMine", true, "Enables Landmine Sound patches");
			EnableCircuitBeesSounds = ((BaseUnityPlugin)this).Config.Bind<bool>("Sounds", "Enable Circuit Bees", true, "Enables Circuit Bees Sound patches");
			EnableHoardingBugSounds = ((BaseUnityPlugin)this).Config.Bind<bool>("Sounds", "Enable Hoarding Bug", true, "Enables Hoarding Bug Sound patches");
			EnableDressGirlSounds = ((BaseUnityPlugin)this).Config.Bind<bool>("Sounds", "Enable Dress Girl", true, "Enables Dress Girl Sound patches");
			EnableEyelessDogSounds = ((BaseUnityPlugin)this).Config.Bind<bool>("Sounds", "Enable Eyeless dog", true, "Enables Eyeless Dog Sound patches");
			EnableForestGiantSounds = ((BaseUnityPlugin)this).Config.Bind<bool>("Sounds", "Enable Forest Giant", true, "Enables Forest Giant sound patches");
			EnableSexShop = ((BaseUnityPlugin)this).Config.Bind<bool>("SexShop", "Enable Sex Shop", true, "[WIP] Enables sex shop at the company");
			PenetratorPrice = ((BaseUnityPlugin)this).Config.Bind<int>("SexShop", "Penetrator price", 3000, "Allows tweaking penetrator price");
			PenetratorAmmoPrice = ((BaseUnityPlugin)this).Config.Bind<int>("SexShop", "PenetratorAmmo Price", 100, "Allows tweaking penetrator ammo price");
			EnableCruiserSkinPatch = ((BaseUnityPlugin)this).Config.Bind<bool>("Cruiser", "Enable CruiserSkinPatch", true, "Enables Cruiser Skin Patch");
			EnableTurretSkinPatch = ((BaseUnityPlugin)this).Config.Bind<bool>("Turret", "Enable TurretSkinPatch", true, "Enables Turret Skin Patch");
			CensorMode = ((BaseUnityPlugin)this).Config.Bind<bool>("CensorMode", "Enabled", false, "Enables Censor mode for the mod");
			EnablePaintings = ((BaseUnityPlugin)this).Config.Bind<bool>("Paintings", "Enable PaintingsSkinPatch", true, "Enables paintings patch");
			string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "acassets");
			bundle = AssetBundle.LoadFromFile(text);
			ACTitle = bundle.LoadAsset<Sprite>("Assets/LethalCompany/Mods/AC/Menu/ACTitle.png");
			NMAC = bundle.LoadAsset<GameObject>("Assets/LethalCompany/Mods/AC/ACNM.prefab");
			NMAC.AddComponent<NetworkManagerAC>();
			NetworkPrefabs.RegisterNetworkPrefab(NMAC);
			Harmony val = new Harmony("WaterGun.AC");
			val.PatchAll();
			Instance.Penetrator = bundle.LoadAsset<Item>("Assets/LethalCompany/Mods/AC/ACSexShop/Items/Penetrator/Penetrator.asset");
			NetworkPrefabs.RegisterNetworkPrefab(Instance.Penetrator.spawnPrefab);
			Instance.itemsToRegister.Add(Instance.Penetrator, 0);
			Instance.Penetratorshell = bundle.LoadAsset<Item>("Assets/LethalCompany/Mods/AC/ACSexShop/Items/Penetrator/PenetratorAmmo.asset");
			NetworkPrefabs.RegisterNetworkPrefab(Instance.Penetratorshell.spawnPrefab);
			Instance.itemsToRegister.Add(Instance.Penetratorshell, 0);
			if (Instance.EnableDildo.Value)
			{
				Instance.Dildo = bundle.LoadAsset<Item>("Assets/LethalCompany/Mods/AC/Scraps/Dildo/Dildo.asset");
				if (Instance.CensorMode.Value)
				{
					ParticleSystem[] componentsInChildren = Instance.Dildo.spawnPrefab.GetComponentsInChildren<ParticleSystem>();
					ParticleSystem[] array3 = componentsInChildren;
					foreach (ParticleSystem val2 in array3)
					{
						if (((Object)((Component)val2).gameObject).name == "CensorPart")
						{
							MainModule main = val2.main;
							((MainModule)(ref main)).playOnAwake = true;
						}
					}
				}
				NetworkPrefabs.RegisterNetworkPrefab(Instance.Dildo.spawnPrefab);
				Instance.itemsToRegister.Add(Instance.Dildo, 50);
			}
			if (Instance.EnableWaterGun.Value)
			{
				Instance.WaterGun = bundle.LoadAsset<Item>("Assets/LethalCompany/Mods/AC/Scraps/WaterGun/WaterGun.asset");
				NetworkPrefabs.RegisterNetworkPrefab(Instance.WaterGun.spawnPrefab);
				Instance.itemsToRegister.Add(Instance.WaterGun, 50);
			}
			if (Instance.EnableHeadShoulders.Value)
			{
				Instance.HeadShoulders = bundle.LoadAsset<Item>("Assets/LethalCompany/Mods/AC/Scraps/Head&Shoulders/HeadShoulders.asset");
				NetworkPrefabs.RegisterNetworkPrefab(Instance.HeadShoulders.spawnPrefab);
				Instance.itemsToRegister.Add(Instance.HeadShoulders, 50);
			}
			if (Instance.EnableAnalBeads.Value)
			{
				Instance.AnalBeads = bundle.LoadAsset<Item>("Assets/LethalCompany/Mods/AC/Scraps/AnalBeads/Kulki.asset");
				if (Instance.CensorMode.Value)
				{
					ParticleSystem[] componentsInChildren2 = Instance.AnalBeads.spawnPrefab.GetComponentsInChildren<ParticleSystem>();
					ParticleSystem[] array4 = componentsInChildren2;
					foreach (ParticleSystem val3 in array4)
					{
						if (((Object)((Component)val3).gameObject).name == "CensorPart")
						{
							MainModule main2 = val3.main;
							((MainModule)(ref main2)).playOnAwake = true;
						}
					}
				}
				NetworkPrefabs.RegisterNetworkPrefab(Instance.AnalBeads.spawnPrefab);
				Instance.itemsToRegister.Add(Instance.AnalBeads, 50);
			}
			if (Instance.EnablePussyDestroyer.Value)
			{
				Instance.PussyDestroyer = bundle.LoadAsset<Item>("Assets/LethalCompany/Mods/AC/Scraps/PussyDestroyer/PussyDestroyer.asset");
				if (Instance.CensorMode.Value)
				{
					ParticleSystem[] componentsInChildren3 = Instance.PussyDestroyer.spawnPrefab.GetComponentsInChildren<ParticleSystem>();
					ParticleSystem[] array5 = componentsInChildren3;
					foreach (ParticleSystem val4 in array5)
					{
						if (((Object)((Component)val4).gameObject).name == "CensorPart")
						{
							MainModule main3 = val4.main;
							((MainModule)(ref main3)).playOnAwake = true;
						}
					}
				}
				NetworkPrefabs.RegisterNetworkPrefab(Instance.PussyDestroyer.spawnPrefab);
				Instance.itemsToRegister.Add(Instance.PussyDestroyer, 9);
			}
			if (Instance.EnableAnalDestroyer.Value)
			{
				Instance.AnalDestroyer = bundle.LoadAsset<Item>("Assets/LethalCompany/Mods/AC/Scraps/AnalDestroyer/AnalDestroyer.asset");
				if (Instance.CensorMode.Value)
				{
					ParticleSystem[] componentsInChildren4 = Instance.AnalDestroyer.spawnPrefab.GetComponentsInChildren<ParticleSystem>();
					ParticleSystem[] array6 = componentsInChildren4;
					foreach (ParticleSystem val5 in array6)
					{
						if (((Object)((Component)val5).gameObject).name == "CensorPart")
						{
							MainModule main4 = val5.main;
							((MainModule)(ref main4)).playOnAwake = true;
						}
					}
				}
				NetworkPrefabs.RegisterNetworkPrefab(Instance.AnalDestroyer.spawnPrefab);
				Instance.itemsToRegister.Add(Instance.AnalDestroyer, 3);
			}
			if (Instance.EnableDurex.Value)
			{
				Instance.Durex = bundle.LoadAsset<Item>("Assets/LethalCompany/Mods/AC/Scraps/Durex/Durex.asset");
				if (Instance.CensorMode.Value)
				{
					ParticleSystem[] componentsInChildren5 = Instance.Durex.spawnPrefab.GetComponentsInChildren<ParticleSystem>();
					ParticleSystem[] array7 = componentsInChildren5;
					foreach (ParticleSystem val6 in array7)
					{
						if (((Object)((Component)val6).gameObject).name == "CensorPart")
						{
							MainModule main5 = val6.main;
							((MainModule)(ref main5)).playOnAwake = true;
						}
					}
				}
				NetworkPrefabs.RegisterNetworkPrefab(Instance.Durex.spawnPrefab);
				Instance.itemsToRegister.Add(Instance.Durex, 25);
			}
			if (Instance.EnableSexDoll.Value)
			{
				Instance.SexDoll = bundle.LoadAsset<Item>("Assets/LethalCompany/Mods/AC/Scraps/SexDoll/SexDoll.asset");
				if (Instance.CensorMode.Value)
				{
					ParticleSystem[] componentsInChildren6 = Instance.SexDoll.spawnPrefab.GetComponentsInChildren<ParticleSystem>();
					ParticleSystem[] array8 = componentsInChildren6;
					foreach (ParticleSystem val7 in array8)
					{
						if (((Object)((Component)val7).gameObject).name == "CensorPart")
						{
							MainModule main6 = val7.main;
							((MainModule)(ref main6)).playOnAwake = true;
						}
					}
				}
				NetworkPrefabs.RegisterNetworkPrefab(Instance.SexDoll.spawnPrefab);
				Instance.itemsToRegister.Add(Instance.SexDoll, 20);
			}
			if (Instance.EnableNutcrackerSounds.Value)
			{
				Instance.nutaimsfxnew = bundle.LoadAsset<AudioClip>("Assets/LethalCompany/Mods/AC/Enemies/CustomSounds/Nutcracker/AlertedSFX.wav");
				Instance.nutheadgoup = bundle.LoadAsset<AudioClip>("Assets/LethalCompany/Mods/AC/Enemies/CustomSounds/Nutcracker/HeadGoUp.wav");
				Instance.nutdie = bundle.LoadAsset<AudioClip>("Assets/LethalCompany/Mods/AC/Enemies/CustomSounds/Nutcracker/NutcrackerDie.wav");
				Instance.nuttheme = bundle.LoadAsset<AudioClip>("Assets/LethalCompany/Mods/AC/Enemies/CustomSounds/Nutcracker/NutcrackerAngry.wav");
				Instance.nutreload = bundle.LoadAsset<AudioClip>("Assets/LethalCompany/Mods/AC/Enemies/CustomSounds/Nutcracker/ShotgunReloadNutcracker.wav");
			}
			if (Instance.EnableJesterSounds.Value)
			{
				Instance.jestertheme = bundle.LoadAsset<AudioClip>("Assets/LethalCompany/Mods/AC/Enemies/CustomSounds/Jester/JackInTheBoxTheme.wav");
				Instance.jesterscream = bundle.LoadAsset<AudioClip>("Assets/LethalCompany/Mods/AC/Enemies/CustomSounds/Jester/Scream1.wav");
				Instance.jesterpop = bundle.LoadAsset<AudioClip>("Assets/LethalCompany/Mods/AC/Enemies/CustomSounds/Jester/Pop1.wav");
			}
			if (Instance.EnableLandMineSounds.Value)
			{
				Instance.mineexplode = bundle.LoadAsset<AudioClip>("Assets/LethalCompany/Mods/AC/Enemies/CustomSounds/Landmine/MineDetonate.wav");
			}
			if (Instance.EnableHoardingBugSounds.Value)
			{
				Instance.chitter = bundle.LoadAsset<AudioClip>("Assets/LethalCompany/Mods/AC/Enemies/CustomSounds/HoardingBug/Chitter.wav");
			}
			if (Instance.EnableCircuitBeesSounds.Value)
			{
				Instance.angry = bundle.LoadAsset<AudioClip>("Assets/LethalCompany/Mods/AC/Enemies/CustomSounds/CircuitBees/AngrySFX.wav");
			}
			if (Instance.EnableForestGiantSounds.Value)
			{
				Instance.eatplayeraudio = bundle.LoadAsset<AudioClip>("Assets/LethalCompany/Mods/AC/Enemies/CustomSounds/ForestGiant/FGiantEatPlayerSFX.wav");
			}
			if (Instance.EnableEyelessDogSounds.Value)
			{
				Instance.breathe = bundle.LoadAsset<AudioClip>("Assets/LethalCompany/Mods/AC/Enemies/CustomSounds/EyelessDog/Breathe1.wav");
			}
			if (Instance.EnableDressGirlSounds.Value)
			{
				Instance.spy = bundle.LoadAsset<AudioClip>("Assets/LethalCompany/Mods/AC/Enemies/CustomSounds/GhostGirl/Breathing.wav");
			}
			if (Instance.EnableCruiserSkinPatch.Value)
			{
				Instance.newgearstick = bundle.LoadAsset<GameObject>("Assets/LethalCompany/Mods/AC/Skins/GearBoxPatch.prefab");
				Instance.cruisermat = bundle.LoadAsset<Material>("Assets/LethalCompany/Mods/AC/Skins/MainBodyPatch.mat");
			}
			if (Instance.EnableCruiserSkinPatch.Value)
			{
				Instance.newgearstick = bundle.LoadAsset<GameObject>("Assets/LethalCompany/Mods/AC/Skins/GearBoxPatch.prefab");
				Instance.cruisermat = bundle.LoadAsset<Material>("Assets/LethalCompany/Mods/AC/Skins/MainBodyPatch.mat");
			}
			if (Instance.EnableTurretSkinPatch.Value)
			{
				Instance.FlameTurret = bundle.LoadAsset<Material>("Assets/LethalCompany/Mods/AC/Enemies/Turret/FlameTurret.mat");
				Instance.TurretFlame = bundle.LoadAsset<Material>("Assets/LethalCompany/Mods/AC/Enemies/Turret/TurretFlame.mat");
				Instance.turretpatchcontainer = bundle.LoadAsset<GameObject>("Assets/LethalCompany/Mods/AC/Enemies/Turret/TurretPatchContainer.prefab");
			}
			if (Instance.EnablePaintings.Value)
			{
				Instance.painting1 = bundle.LoadAsset<Material>("Assets/LethalCompany/Mods/AC/Paintings/Painting1Material.mat");
				Instance.painting2 = bundle.LoadAsset<Material>("Assets/LethalCompany/Mods/AC/Paintings/Painting2Material.mat");
				Instance.painting3 = bundle.LoadAsset<Material>("Assets/LethalCompany/Mods/AC/Paintings/Painting3Material.mat");
				Instance.painting4 = bundle.LoadAsset<Material>("Assets/LethalCompany/Mods/AC/Paintings/Painting4Material.mat");
				Instance.painting5 = bundle.LoadAsset<Material>("Assets/LethalCompany/Mods/AC/Paintings/Painting5Material.mat");
				Instance.painting6 = bundle.LoadAsset<Material>("Assets/LethalCompany/Mods/AC/Paintings/Painting6Material.mat");
				Instance.painting7 = bundle.LoadAsset<Material>("Assets/LethalCompany/Mods/AC/Paintings/Painting7Material.mat");
			}
			Instance.SexShopprefab = bundle.LoadAsset<GameObject>("Assets/LethalCompany/Mods/AC/ACSexShop/PatchContainer.prefab");
			NetworkPrefabs.RegisterNetworkPrefab(Instance.SexShopprefab);
			((BaseUnityPlugin)this).Logger.LogInfo((object)("Finished Loading, config values:\n\nSEXSHOP:\n\n" + $"EnableSexShop: {EnableSexShop.Value}\n" + $"PenetratorPrice: {PenetratorPrice.Value}\n" + $"PenetratorAmmoPrice: {PenetratorAmmoPrice.Value}\n\n" + "SOUNDS:\n\n" + $"EnableForestGiantSounds: {EnableForestGiantSounds.Value}\n" + $"EnableDressGirlSounds: {EnableDressGirlSounds.Value}\n" + $"EnableEyelessDogSounds: {EnableEyelessDogSounds.Value}\n" + $"EnableCircuitBeesSounds: {EnableCircuitBeesSounds.Value}\n" + $"EnableJesterSounds: {EnableJesterSounds.Value}\n" + $"EnableNutcrackerSounds: {EnableNutcrackerSounds.Value}\n" + $"EnableLandMineSounds: {EnableLandMineSounds.Value}\n" + $"EnableHoardingBugSounds: {EnableHoardingBugSounds.Value}\n\n" + "SCRAPS:\n\n" + $"EnableSexDoll: {EnableSexDoll.Value}\n" + $"EnableWaterGun: {EnableWaterGun.Value}\n" + $"EnableHeadShoulders: {EnableHeadShoulders.Value}\n" + $"EnableDildo: {EnableDildo.Value}\n" + $"EnableDurex: {EnableDurex.Value}\n" + $"EnableAnalDestroyer: {EnableAnalDestroyer.Value}\n" + $"EnablePussyDestroyer: {EnablePussyDestroyer.Value}\n" + $"EnableAnalBeads: {EnableAnalBeads.Value}\n\n" + "TURRET:\n\n" + $"EnableTurretSkinPatch: {EnableTurretSkinPatch.Value}\n\n" + "CRUISER:\n\n" + $"EnableCruiserSkinPatch: {EnableCruiserSkinPatch.Value}\n\n" + "PAINTINGS:\n\n" + $"EnablePaintingSkinPatch: {EnablePaintings.Value}\n\n"));
		}

		[IteratorStateMachine(typeof(<HandleMenuChanges>d__76))]
		public IEnumerator HandleMenuChanges(MenuManager Instance)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <HandleMenuChanges>d__76(0)
			{
				<>4__this = this,
				Instance = Instance
			};
		}
	}
	public class WaterGunItem : GrabbableObject
	{
		public ParticleSystem WaterBubbles;

		public AudioSource WaterAudio;

		public override void EquipItem()
		{
			((GrabbableObject)this).EquipItem();
			base.playerHeldBy.equippedUsableItemQE = true;
		}

		public override void PocketItem()
		{
			if ((Object)(object)base.playerHeldBy != (Object)null)
			{
				base.playerHeldBy.activatingItem = false;
				base.playerHeldBy.equippedUsableItemQE = false;
			}
			((GrabbableObject)this).PocketItem();
			StopSpraying();
		}

		public override void DiscardItem()
		{
			if ((Object)(object)base.playerHeldBy != (Object)null)
			{
				base.playerHeldBy.activatingItem = false;
				base.playerHeldBy.equippedUsableItemQE = false;
			}
			((GrabbableObject)this).DiscardItem();
			StopSpraying();
		}

		public override void ItemActivate(bool used, bool buttonDown = true)
		{
			((GrabbableObject)this).ItemActivate(used, buttonDown);
			if (buttonDown)
			{
				StartSpraying();
			}
			else
			{
				StopSpraying();
			}
		}

		public void StopSpraying()
		{
			WaterBubbles.Stop(true, (ParticleSystemStopBehavior)1);
			WaterAudio.Stop();
		}

		public void StartSpraying()
		{
			WaterBubbles.Play(true);
			WaterAudio.Play();
		}
	}
}
namespace ACScripts.Utils
{
	public class NetworkPrefabs
	{
		public static List<GameObject> prefabsToRegister = new List<GameObject>();

		public static void RegisterNetworkPrefab(GameObject prefab)
		{
			if (!prefabsToRegister.Contains(prefab))
			{
				prefabsToRegister.Add(prefab);
				Debug.Log((object)(((Object)prefab).name + " registered"));
			}
			else
			{
				Debug.LogError((object)(((Object)prefab).name + " Already registered"));
			}
		}
	}
}
namespace ACScripts.Managers
{
	public class NetworkManagerAC : NetworkBehaviour
	{
		[CompilerGenerated]
		private sealed class <HandleShopSpawn>d__5 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public int PenetratorPrice;

			public int PenetratorAmmoPrice;

			public NetworkManagerAC <>4__this;

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

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

			[DebuggerHidden]
			public <HandleShopSpawn>d__5(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					goto IL_0050;
				case 1:
					<>1__state = -1;
					goto IL_0050;
				case 2:
					<>1__state = -1;
					goto IL_00c4;
				case 3:
					{
						<>1__state = -1;
						break;
					}
					IL_0050:
					if ((Object)(object)Plugin.Instance.SpawnedShop.transform.Find("PenetratorAmmoManager/penetratorammospawner") == (Object)null)
					{
						<>2__current = null;
						<>1__state = 1;
						return true;
					}
					((Component)Plugin.Instance.SpawnedShop.transform.Find("PenetratorAmmoManager/penetratorammospawner")).GetComponent<InteractTrigger>().hoverTip = $"Buy SpermBall ■{PenetratorAmmoPrice} : [LMB]";
					goto IL_00c4;
					IL_00c4:
					if ((Object)(object)Plugin.Instance.SpawnedShop.transform.Find("PenetratorManager/penetratorspawner") == (Object)null)
					{
						<>2__current = null;
						<>1__state = 2;
						return true;
					}
					break;
				}
				if ((Object)(object)Plugin.Instance.SpawnedShop.transform.Find("ShopAC/SexShopPropContainer (1)/Boombox") == (Object)null)
				{
					<>2__current = null;
					<>1__state = 3;
					return true;
				}
				((Component)Plugin.Instance.SpawnedShop.transform.Find("ShopAC/SexShopPropContainer (1)/Boombox")).GetComponent<AudioSource>().Play();
				((Component)Plugin.Instance.SpawnedShop.transform.Find("PenetratorManager/penetratorspawner")).GetComponent<InteractTrigger>().hoverTip = $"Buy Penetrator ■{PenetratorPrice} : [LMB]";
				return false;
			}

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

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

		[CompilerGenerated]
		private sealed class <WaitForShop>d__6 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public NetworkObjectReference shopRef;

			public int penetratorPrice;

			public int penetratorAmmoPrice;

			public NetworkManagerAC <>4__this;

			private NetworkObject <netObj>5__1;

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

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

			[DebuggerHidden]
			public <WaitForShop>d__6(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<netObj>5__1 = null;
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					<netObj>5__1 = null;
					break;
				case 1:
					<>1__state = -1;
					break;
				}
				if (!((NetworkObjectReference)(ref shopRef)).TryGet(ref <netObj>5__1, (NetworkManager)null))
				{
					<>2__current = null;
					<>1__state = 1;
					return true;
				}
				Plugin.Instance.SpawnedShop = ((Component)<netObj>5__1).gameObject;
				Debug.Log((object)$"[Shop READY] Client {NetworkManager.Singleton.LocalClientId}");
				((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.HandleShopSpawn(penetratorPrice, penetratorAmmoPrice));
				return false;
			}

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

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

		public static NetworkManagerAC Instance;

		private void Awake()
		{
			Instance = this;
		}

		public void SetupShop()
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)Plugin.Instance.SpawnedShop == (Object)null && !StartOfRound.Instance.inShipPhase)
			{
				GameObject val = Object.Instantiate<GameObject>(Plugin.Instance.SexShopprefab, Vector3.zero, Quaternion.identity);
				val.GetComponent<SexShopManager>().PenetratorAmmoPrice = Plugin.Instance.PenetratorAmmoPrice.Value;
				val.GetComponent<SexShopManager>().PenetratorPrice = Plugin.Instance.PenetratorPrice.Value;
				val.GetComponent<NetworkObject>().Spawn(false);
				Plugin.Instance.SpawnedShop = val;
			}
		}

		public void RemoveShop()
		{
			if ((Object)(object)Plugin.Instance.SpawnedShop != (Object)null)
			{
				Plugin.Instance.SpawnedShop.GetComponent<NetworkObject>().Despawn(true);
			}
		}

		[ClientRpc]
		public void DisplayPurchaseClientRpc(string Header, string SubText, bool isWarning)
		{
			HUDManager.Instance.DisplayTip(Header, SubText, isWarning, false, "LC_Tip1");
			Debug.Log((object)$"[SexShop] Displaying purchase on {NetworkManager.Singleton.LocalClientId}");
		}

		[IteratorStateMachine(typeof(<HandleShopSpawn>d__5))]
		public IEnumerator HandleShopSpawn(int PenetratorPrice, int PenetratorAmmoPrice)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <HandleShopSpawn>d__5(0)
			{
				<>4__this = this,
				PenetratorPrice = PenetratorPrice,
				PenetratorAmmoPrice = PenetratorAmmoPrice
			};
		}

		[IteratorStateMachine(typeof(<WaitForShop>d__6))]
		private IEnumerator WaitForShop(NetworkObjectReference shopRef, int penetratorPrice, int penetratorAmmoPrice)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <WaitForShop>d__6(0)
			{
				<>4__this = this,
				shopRef = shopRef,
				penetratorPrice = penetratorPrice,
				penetratorAmmoPrice = penetratorAmmoPrice
			};
		}

		[ClientRpc]
		public void ApplyShopOnClientsClientRpc(int penetratorPrice, int penetratorAmmoPrice, NetworkObjectReference shopRef)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			((MonoBehaviour)this).StartCoroutine(WaitForShop(shopRef, penetratorPrice, penetratorAmmoPrice));
		}

		[ServerRpc(RequireOwnership = false)]
		public void SlowEnemyOnServerRpc(NetworkObjectReference enemyObj, float speed)
		{
			NetworkObject val = default(NetworkObject);
			if (((NetworkObjectReference)(ref enemyObj)).TryGet(ref val, (NetworkManager)null))
			{
				((Component)val).GetComponent<EnemyAI>().agent.speed = speed;
				Debug.Log((object)((Component)val).GetComponent<EnemyAI>().agent.speed);
			}
		}
	}
	public class SexShopManager : NetworkBehaviour
	{
		[CompilerGenerated]
		private sealed class <HandleContainers>d__6 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public SexShopManager <>4__this;

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

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

			[DebuggerHidden]
			public <HandleContainers>d__6(int <>1__state)
			{
				this.<>1__state = <>1__state;
			}

			[DebuggerHidden]
			void IDisposable.Dispose()
			{
				<>1__state = -2;
			}

			private bool MoveNext()
			{
				switch (<>1__state)
				{
				default:
					return false;
				case 0:
					<>1__state = -1;
					goto IL_0044;
				case 1:
					<>1__state = -1;
					goto IL_0044;
				case 2:
					{
						<>1__state = -1;
						break;
					}
					IL_0044:
					if ((Object)(object)GameObject.Find("Map/ShippingContainers/ShippingContainer (1)") == (Object)null)
					{
						<>2__current = null;
						<>1__state = 1;
						return true;
					}
					break;
				}
				if ((Object)(object)GameObject.Find("Map/ShippingContainers/ShippingContainer (4)") == (Object)null)
				{
					<>2__current = null;
					<>1__state = 2;
					return true;
				}
				GameObject.Find("Map/ShippingContainers/ShippingContainer (1)").SetActive(false);
				GameObject.Find("Map/ShippingContainers/ShippingContainer (4)").SetActive(false);
				return false;
			}

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

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

		public static SexShopManager Instance;

		private Terminal terminal;

		public Vector3 spawnpos;

		public int PenetratorPrice;

		public int PenetratorAmmoPrice;

		private void Awake()
		{
			Instance = this;
			if (((NetworkBehaviour)this).NetworkManager.IsServer)
			{
				terminal = Object.FindObjectOfType<Terminal>();
			}
			((MonoBehaviour)this).StartCoroutine(HandleContainers());
		}

		[IteratorStateMachine(typeof(<HandleContainers>d__6))]
		public IEnumerator HandleContainers()
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <HandleContainers>d__6(0)
			{
				<>4__this = this
			};
		}

		public override void OnNetworkSpawn()
		{
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			((NetworkBehaviour)this).OnNetworkSpawn();
			if (NetworkManager.Singleton.IsServer)
			{
				NetworkManagerAC.Instance.ApplyShopOnClientsClientRpc(PenetratorPrice, PenetratorAmmoPrice, NetworkObjectReference.op_Implicit(((Component)Instance).GetComponent<NetworkObject>()));
			}
		}

		public void PurchasePenetrator(PlayerControllerB player)
		{
			ulong playerClientId = player.playerClientId;
			PurchasePenetratorServerRpc(playerClientId);
		}

		public void PurchasePenetratorAmmo(PlayerControllerB player)
		{
			ulong playerClientId = player.playerClientId;
			PurchasePenetratorAmmoServerRpc(playerClientId);
		}

		public void PlayCashRegisterAnim(PlayerControllerB player)
		{
			ulong playerClientId = player.playerClientId;
			PlayCashRegisterAnimServerRpc(playerClientId);
		}

		[ServerRpc(RequireOwnership = false)]
		public void PurchasePenetratorServerRpc(ulong clientid)
		{
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts;
			foreach (PlayerControllerB val in allPlayerScripts)
			{
				if (val.playerClientId == clientid)
				{
					if (terminal.groupCredits >= Plugin.Instance.PenetratorPrice.Value)
					{
						Debug.Log((object)("[SexShop] penetrator purchased by: " + val.playerUsername));
						GameObject val2 = Object.Instantiate<GameObject>(Plugin.Instance.Penetrator.spawnPrefab, spawnpos, Quaternion.identity, StartOfRound.Instance.propsContainer);
						Terminal obj = terminal;
						obj.groupCredits -= Instance.PenetratorPrice;
						PlayCashRegisterAnim(val);
						NetworkManagerAC.Instance.DisplayPurchaseClientRpc("SexShop", $"Bought Penetrator for ■{PenetratorPrice}\nCurrent group credits: ■{terminal.groupCredits}", isWarning: false);
						Debug.Log((object)"[SexShop] Penetrator spawned.");
						val2.GetComponent<NetworkObject>().Spawn(false);
					}
					else
					{
						Debug.Log((object)("[SexShop] penetrator purchase denied to: " + val.playerUsername));
						NetworkManagerAC.Instance.DisplayPurchaseClientRpc("SexShop", $"Can't affort Penetrator\nCurrent group credits: ■{terminal.groupCredits}", isWarning: true);
					}
				}
			}
		}

		[ServerRpc(RequireOwnership = false)]
		public void PurchasePenetratorAmmoServerRpc(ulong clientid)
		{
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts;
			foreach (PlayerControllerB val in allPlayerScripts)
			{
				if (val.playerClientId == clientid)
				{
					if (terminal.groupCredits >= Plugin.Instance.PenetratorAmmoPrice.Value)
					{
						Debug.Log((object)("[SexShop] penetrator purchased by: " + val.playerUsername));
						GameObject val2 = Object.Instantiate<GameObject>(Plugin.Instance.Penetratorshell.spawnPrefab, spawnpos, Quaternion.identity, StartOfRound.Instance.propsContainer);
						Terminal obj = terminal;
						obj.groupCredits -= Instance.PenetratorAmmoPrice;
						PlayCashRegisterAnim(val);
						NetworkManagerAC.Instance.DisplayPurchaseClientRpc("SexShop", $"Bought SpermBall for ■{PenetratorAmmoPrice}\nCurrent group credits: ■{terminal.groupCredits}", isWarning: false);
						Debug.Log((object)"[SexShop] PenetratorShell spawned.");
						val2.GetComponent<NetworkObject>().Spawn(false);
					}
					else
					{
						Debug.Log((object)("[SexShop] penetratorAmmo purchase denied to: " + val.playerUsername));
						NetworkManagerAC.Instance.DisplayPurchaseClientRpc("SexShop", $"Can't affort SpermBall\nCurrent group credits: ■{terminal.groupCredits}", isWarning: true);
					}
				}
			}
		}

		[ServerRpc(RequireOwnership = false)]
		public void PlayCashRegisterAnimServerRpc(ulong clientid)
		{
			PlayCashRegisterAnimClientRpc(clientid);
			Debug.Log((object)"[SexShop] Playing cashregisteranim on server");
		}

		[ClientRpc]
		public void PlayCashRegisterAnimClientRpc(ulong clientid)
		{
			PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts;
			foreach (PlayerControllerB val in allPlayerScripts)
			{
				if (val.actualClientId == clientid)
				{
					AnimatedObjectTrigger component = GameObject.Find("SexShopCashRegister").GetComponent<AnimatedObjectTrigger>();
					component.TriggerAnimation(val);
					((Component)component).GetComponent<AudioSource>().Play();
					Debug.Log((object)$"[SexShop] Playing cashregisteranim on {NetworkManager.Singleton.LocalClientId}");
				}
			}
		}
	}
}