Decompiled source of A Box of Gun Parts v1.4.1

A_Box_of_Gun_Parts.dll

Decompiled 6 months ago
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using FistVR;
using H3VRUtils.MonoScripts.VisualModifiers;
using HarmonyLib;
using OtherLoader;
using TheNext;
using UnityEditor;
using UnityEngine;
using Valve.VR;

[assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
namespace JerryComponent
{
	public class EnableIfDisabled : MonoBehaviour
	{
		public FVRFireArmRound Bullet;

		public GameObject Obj;

		public GameObject Renderer;

		private void Start()
		{
		}

		private void Update()
		{
			if (Bullet.IsSpent)
			{
				Obj.SetActive(true);
			}
			if (Bullet.IsChambered)
			{
				Renderer.SetActive(true);
			}
			if (!Bullet.IsChambered)
			{
				Renderer.SetActive(false);
			}
		}
	}
	public class Syringe : FVRFireArmAttachment
	{
		public enum CartridgeState
		{
			Whole,
			BitOpen,
			Jammed
		}

		public List<Renderer> Rends;

		public CartridgeState CState;

		public int numPowderChunksLeft = 20;

		public AudioEvent AudEvent_Bite;

		public AudioEvent AudEvent_Tap;

		public Transform PowderSpawnPoint;

		public GameObject PowderPrefab;

		public GameObject BitPart;

		public AudioEvent AudEvent_Spit;

		public GameObject Splode;

		[NonSerialized]
		public bool m_isDestroyed;

		[NonSerialized]
		public float m_tickDownToSpit = 0.2f;

		[NonSerialized]
		public bool m_tickingDownToSpit;

		[NonSerialized]
		public float timeSinceSpawn = 1f;

		public PowerupType put;

		public PowerUpIntensity pui;

		public PowerUpDuration pud;

		public AudioEvent AudEvent_DIng;

		public FVRPhysicalObject PenObject;

		public bool isAlreadyInHeadRange = false;

		public bool isUsed = false;

		public KillAfter ka;

		public void SetRenderer(CartridgeState s)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Invalid comparison between Unknown and I4
			for (int i = 0; i < Rends.Count; i++)
			{
				if ((int)s == i)
				{
					Rends[i].enabled = true;
				}
				else
				{
					Rends[i].enabled = false;
				}
			}
		}

		public override void Awake()
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			((FVRFireArmAttachment)this).Awake();
			SetRenderer(CState);
		}

		public override void UpdateInteraction(FVRViveHand hand)
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			((FVRFireArmAttachment)this).UpdateInteraction(hand);
			if (((FVRInteractiveObject)this).m_hasTriggeredUpSinceBegin)
			{
				float num = Vector3.Angle(-((Component)this).transform.forward, Vector3.up);
			}
			if ((int)CState == 0)
			{
				Vector3 val = ((Component)GM.CurrentPlayerBody.Head).transform.position + ((Component)GM.CurrentPlayerBody.Head).transform.up * -0.2f;
				if (Vector3.Distance(((Component)this).transform.position, val) < 0.15f)
				{
					SM.PlayGenericSound(AudEvent_Bite, ((Component)this).transform.position);
					CState = (CartridgeState)1;
					SetRenderer(CState);
					m_tickingDownToSpit = true;
					m_tickDownToSpit = Random.Range(0.3f, 0.6f);
				}
			}
		}

		public override void FVRUpdate()
		{
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Invalid comparison between Unknown and I4
			//IL_0125: 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_012f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: 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)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: 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_00e2: 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_00f2: 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_0187: Unknown result type (might be due to invalid IL or missing references)
			//IL_018c: Unknown result type (might be due to invalid IL or missing references)
			((FVRPhysicalObject)this).FVRUpdate();
			if (timeSinceSpawn < 1f)
			{
				timeSinceSpawn += Time.deltaTime;
			}
			if (m_tickingDownToSpit)
			{
				m_tickDownToSpit -= Time.deltaTime;
				if (m_tickDownToSpit <= 0f)
				{
					m_tickingDownToSpit = false;
					Vector3 val = ((Component)GM.CurrentPlayerBody.Head).transform.position + ((Component)GM.CurrentPlayerBody.Head).transform.up * -0.2f;
					SM.PlayGenericSound(AudEvent_Spit, val);
					GameObject val2 = Object.Instantiate<GameObject>(BitPart, val, Random.rotation);
					Rigidbody component = val2.GetComponent<Rigidbody>();
					component.velocity = GM.CurrentPlayerBody.Head.forward * Random.Range(2f, 4f) + Random.onUnitSphere;
					component.angularVelocity = Random.onUnitSphere * Random.Range(1f, 5f);
				}
			}
			if ((int)CState == 1)
			{
				float num = Vector3.Angle(-((Component)this).transform.forward, Vector3.up);
				if (num > 120f && numPowderChunksLeft > 0 && timeSinceSpawn > 0.04f)
				{
					numPowderChunksLeft--;
					timeSinceSpawn = 0f;
					Object.Instantiate<GameObject>(PowderPrefab, PowderSpawnPoint.position, Random.rotation);
				}
			}
		}

		private void Update()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Invalid comparison between Unknown and I4
			float num = Vector3.Distance(((Component)this).transform.position, ((Component)GM.CurrentPlayerBody.Head).transform.position + Vector3.up * -0.1f);
			if ((double)num >= 0.19)
			{
				isAlreadyInHeadRange = false;
			}
			if ((double)num < 0.15)
			{
				if (!isAlreadyInHeadRange && (int)CState == 1 && !isUsed)
				{
					PowerUp(((FVRInteractiveObject)PenObject).m_hand);
					Console.Write("Yummy");
					isUsed = true;
				}
				isAlreadyInHeadRange = true;
			}
		}

		public void PowerUp(FVRViveHand hand)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			SM.PlayCoreSound((FVRPooledAudioType)10, AudEvent_DIng, ((Component)this).transform.position);
			GM.CurrentSceneSettings.OnPowerupUse(put);
			GM.CurrentPlayerBody.ActivatePower(put, pui, pud, false, false, -1f);
			((Behaviour)ka).enabled = true;
		}
	}
	public class BuletSearcher : MonoBehaviour
	{
		private BallisticProjectile boolet;

		public GameObject booletcam;

		private GameObject bullet;

		private bool spawned = false;

		private GameObject bc;

		private RaycastHit hit;

		private Ray ray;

		public LayerMask mask;

		private float timeb = 1f;

		private void Awake()
		{
		}

		private void Start()
		{
		}

		private void Update()
		{
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: 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)
			timeb += Time.deltaTime;
			boolet = Object.FindObjectOfType<BallisticProjectile>();
			if ((Object)(object)boolet != (Object)null)
			{
				bullet = ((Component)boolet).gameObject;
			}
			if ((Object)(object)boolet == (Object)null)
			{
			}
			if ((Object)(object)bullet != (Object)null && !spawned)
			{
				if (timeb >= 1f)
				{
					ray = new Ray(bullet.transform.position, bullet.transform.forward);
					if (Physics.Raycast(ray, ref hit, 2000f, LayerMask.op_Implicit(mask)) && ((Object)((Component)((RaycastHit)(ref hit)).collider).gameObject).name == "Geo_Head")
					{
						Time.timeScale = Mathf.Clamp(0.0001f, 0.0001f, 1f);
						Time.fixedDeltaTime = Time.timeScale / SteamVR.instance.hmd_DisplayFrequency;
						bc = Object.Instantiate<GameObject>(booletcam, bullet.transform.localPosition, Quaternion.identity);
						bc.transform.parent = bullet.transform;
						bc.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
						timeb = 0f;
					}
				}
				if (!(timeb < 1f))
				{
				}
			}
			if (spawned)
			{
			}
			if ((Object)(object)bc == (Object)null)
			{
				spawned = false;
			}
			if ((Object)(object)bc != (Object)null)
			{
				spawned = true;
			}
		}
	}
	public class Lookat : MonoBehaviour
	{
		public GameObject mark;

		public Transform nearestAI;

		public SosigLink[] currentAI = null;

		public GameObject lookAtObj;

		public LAPD2019Laser laser;

		public Transform player;

		private void OnTriggerEnter(Collider other)
		{
			currentAI = ((Component)other).gameObject.GetComponents<SosigLink>();
		}

		private void Update()
		{
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: Unknown result type (might be due to invalid IL or missing references)
			if (currentAI == null || (Object)(object)nearestAI == (Object)null)
			{
				laser.TurnOff();
				mark.SetActive(false);
				mark.transform.localPosition = new Vector3(0f, 0f, 0f);
				lookAtObj.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
			}
			if ((Object)(object)nearestAI != (Object)null)
			{
				laser.TurnOn();
				mark.SetActive(true);
				mark.transform.position = ((Component)nearestAI).transform.position;
				AxisLookAt(lookAtObj.transform, nearestAI.position, Vector3.forward);
			}
			AxisLookAt(mark.transform, lookAtObj.transform.position, Vector3.forward);
			if (currentAI != null)
			{
				nearestAI = GetNearestGameObject(player, currentAI);
			}
		}

		private void AxisLookAt(Transform tr_self, Vector3 lookPos, Vector3 directionAxis)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: 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)
			//IL_000a: 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)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: 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_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			Quaternion rotation = tr_self.rotation;
			Vector3 val = lookPos - tr_self.position;
			Vector3 val2 = tr_self.rotation * directionAxis;
			Vector3 val3 = Vector3.Cross(val2, val);
			Vector3 normalized = ((Vector3)(ref val3)).normalized;
			float num = Vector3.Angle(val2, val);
			tr_self.rotation = Quaternion.AngleAxis(num, normalized) * rotation;
			tr_self.localEulerAngles = new Vector3(tr_self.localEulerAngles.x, tr_self.localEulerAngles.y, 0f);
		}

		public Transform GetNearestGameObject(Transform player, SosigLink[] objects)
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			Transform val = null;
			if (objects == null || (Object)(object)val == (Object)null)
			{
			}
			if (objects.Length > 0)
			{
				val = ((Component)objects[0]).transform;
				float num = Vector3.Distance(player.position, ((Component)objects[0]).transform.position);
				for (int i = 1; i < objects.Length; i++)
				{
					float num2 = Vector3.Distance(player.position, ((Component)objects[i]).transform.position);
					if (num > num2)
					{
						num = num2;
						val = ((Component)objects[i]).transform;
					}
				}
			}
			return val;
		}
	}
	public class Slotarea : MonoBehaviour
	{
		public GameObject parent;

		public void OnTriggerStay(Collider other)
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			GameObject gameObject = ((Component)other).gameObject;
			FVRPhysicalObject component = gameObject.GetComponent<FVRPhysicalObject>();
			if (!((Object)(object)component != (Object)null) || !((Object)(object)gameObject != (Object)(object)parent) || (int)component.QBSlotType != 0 || ((FVRInteractiveObject)component).m_isHeld || !((Object)(object)component.m_quickbeltSlot == (Object)null))
			{
				return;
			}
			float num = Vector3.Distance(((Component)component).transform.position, ((Component)GM.CurrentPlayerBody.LeftHand).transform.position);
			float num2 = Vector3.Distance(((Component)component).transform.position, ((Component)GM.CurrentPlayerBody.RightHand).transform.position);
			if (num < 0.25f || num2 < 0.25f)
			{
				Rigidbody component2 = gameObject.GetComponent<Rigidbody>();
				if ((Object)(object)component2 != (Object)null)
				{
					gameObject.transform.SetParent(parent.transform);
					component2.useGravity = false;
					component2.isKinematic = true;
				}
			}
		}

		public void OnTriggerExit(Collider other)
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			GameObject gameObject = ((Component)other).gameObject;
			FVRPhysicalObject component = gameObject.GetComponent<FVRPhysicalObject>();
			if ((Object)(object)component != (Object)null && (Object)(object)gameObject != (Object)(object)parent && (int)component.QBSlotType == 0 && ((FVRInteractiveObject)component).m_isHeld && (Object)(object)component.m_quickbeltSlot == (Object)null)
			{
				Rigidbody component2 = gameObject.GetComponent<Rigidbody>();
				if ((Object)(object)component2 != (Object)null)
				{
					gameObject.transform.SetParent(parent.transform);
					component2.useGravity = true;
					component2.isKinematic = false;
				}
			}
		}

		private void Update()
		{
		}
	}
}
[ExecuteInEditMode]
[RequireComponent(typeof(Camera))]
public class DeferredNightVisionEffect : MonoBehaviour
{
	[SerializeField]
	[Tooltip("The main color of the NV effect")]
	public Color m_NVColor = new Color(0f, 1f, 0.1724138f, 0f);

	[SerializeField]
	[Tooltip("The color that the NV effect will 'bleach' towards (white = default)")]
	public Color m_TargetBleachColor = new Color(1f, 1f, 1f, 0f);

	[Range(0f, 0.1f)]
	[Tooltip("How much base lighting does the NV effect pick up")]
	public float m_baseLightingContribution = 0.025f;

	[Range(0f, 128f)]
	[Tooltip("The higher this value, the more bright areas will get 'bleached out'")]
	public float m_LightSensitivityMultiplier = 100f;

	private Material m_Material;

	private Shader m_Shader;

	[Tooltip("Do we want to apply a vignette to the edges of the screen?")]
	public bool useVignetting = true;

	public Shader NightVisionShader => m_Shader;

	private void DestroyMaterial(Material mat)
	{
		if (Object.op_Implicit((Object)(object)mat))
		{
			Object.DestroyImmediate((Object)(object)mat);
			mat = null;
		}
	}

	private void CreateMaterials()
	{
		if ((Object)(object)m_Shader == (Object)null)
		{
			m_Shader = Shader.Find("Custom/DeferredNightVisionShader");
		}
		if ((Object)(object)m_Material == (Object)null && (Object)(object)m_Shader != (Object)null && m_Shader.isSupported)
		{
			m_Material = CreateMaterial(m_Shader);
		}
	}

	private Material CreateMaterial(Shader shader)
	{
		//IL_0014: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Expected O, but got Unknown
		if (!Object.op_Implicit((Object)(object)shader))
		{
			return null;
		}
		Material val = new Material(shader);
		((Object)val).hideFlags = (HideFlags)61;
		return val;
	}

	private void OnDisable()
	{
		DestroyMaterial(m_Material);
		m_Material = null;
		m_Shader = null;
	}

	[ContextMenu("UpdateShaderValues")]
	public void UpdateShaderValues()
	{
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0043: Unknown result type (might be due to invalid IL or missing references)
		if (!((Object)(object)m_Material == (Object)null))
		{
			m_Material.SetVector("_NVColor", Color.op_Implicit(m_NVColor));
			m_Material.SetVector("_TargetWhiteColor", Color.op_Implicit(m_TargetBleachColor));
			m_Material.SetFloat("_BaseLightingContribution", m_baseLightingContribution);
			m_Material.SetFloat("_LightSensitivityMultiplier", m_LightSensitivityMultiplier);
			m_Material.shaderKeywords = null;
			if (useVignetting)
			{
				Shader.EnableKeyword("USE_VIGNETTE");
			}
			else
			{
				Shader.DisableKeyword("USE_VIGNETTE");
			}
		}
	}

	private void OnEnable()
	{
		CreateMaterials();
		UpdateShaderValues();
	}

	public void ReloadShaders()
	{
		OnDisable();
	}

	private void OnRenderImage(RenderTexture source, RenderTexture destination)
	{
		UpdateShaderValues();
		CreateMaterials();
		Graphics.Blit((Texture)(object)source, destination, m_Material);
	}
}
namespace JerryComponent
{
	public class guitarreset : MonoBehaviour
	{
		public AudioSource song;

		public GameObject rot;

		private bool is45 = false;

		private void Start()
		{
		}

		private void over45()
		{
			if (is45)
			{
				song.Stop();
			}
			is45 = false;
		}

		private void under45()
		{
			if (!is45)
			{
				song.Play();
				song.Pause();
			}
			is45 = true;
		}

		private void Update()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			if (rot.transform.localEulerAngles.x > 45f)
			{
				over45();
			}
			if (rot.transform.localEulerAngles.x < 45f)
			{
				under45();
			}
		}
	}
	public class guitarscript : MonoBehaviour
	{
		public GameObject reset;

		public AudioSource song;

		public GameObject resetvolume;

		private bool slaponce;

		private void Start()
		{
		}

		private void OnTriggerEnter(Collider other)
		{
			slaponce = true;
		}

		private void Update()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: 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_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_013c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0180: Unknown result type (might be due to invalid IL or missing references)
			//IL_0185: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
			if (reset.transform.localEulerAngles.x > 15f)
			{
				resetvolume.SetActive(true);
				resetvolume.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
				if (resetvolume.transform.localEulerAngles.x > 25f)
				{
					resetvolume.transform.localEulerAngles = new Vector3(25f, 0f, 0f);
					resetvolume.SetActive(false);
				}
			}
			if (reset.transform.localEulerAngles.x < 15f)
			{
				resetvolume.SetActive(false);
				resetvolume.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
			}
			if (reset.transform.localEulerAngles.x < 25f)
			{
				song.UnPause();
			}
			if (reset.transform.localEulerAngles.x > 25f)
			{
				reset.transform.localEulerAngles = new Vector3(25f, 0f, 0f);
			}
			if (reset.transform.localEulerAngles.x >= 25f)
			{
				song.Pause();
			}
			song.volume = 1f - resetvolume.transform.localEulerAngles.x * 0.04f;
			if (slaponce)
			{
				reset.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
				slaponce = false;
			}
		}
	}
	public class guitarslap : MonoBehaviour
	{
		public GameObject slide;

		public AudioSource asa1;

		public AudioSource asa2;

		private void Start()
		{
		}

		private void Update()
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: 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_003a: Unknown result type (might be due to invalid IL or missing references)
			asa1.pitch = slide.transform.localPosition.z;
			asa2.pitch = slide.transform.localPosition.z;
		}
	}
	public class guitarslap2 : MonoBehaviour
	{
		public int start = 0;

		public SphereCollider cols;

		public int[] notes1;

		public int[] notes2;

		public int[] notes3;

		public int[] notes4;

		public AudioEvent[] clips;

		public GameObject foregrip;

		public GameObject hold1;

		public GameObject hold2;

		public GameObject hold3;

		public GameObject hold4;

		public Transform pos;

		private void Start()
		{
		}

		private void OnTriggerEnter(Collider col)
		{
			//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_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: 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_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_019a: Unknown result type (might be due to invalid IL or missing references)
			//IL_019f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_021e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0223: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_025a: 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)
			//IL_0326: Unknown result type (might be due to invalid IL or missing references)
			//IL_032b: 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_0302: Unknown result type (might be due to invalid IL or missing references)
			//IL_0362: Unknown result type (might be due to invalid IL or missing references)
			//IL_0386: Unknown result type (might be due to invalid IL or missing references)
			col = (Collider)(object)cols;
			if (hold1.transform.localEulerAngles.x < 45f && hold2.transform.localEulerAngles.x < 45f && hold3.transform.localEulerAngles.x < 45f && hold4.transform.localEulerAngles.x < 45f)
			{
				SM.PlayGenericSound(clips[0], pos.localPosition);
				start = 0;
			}
			if ((hold1.transform.localEulerAngles.x > 45f && notes1[start] == 0) || (hold2.transform.localEulerAngles.x > 45f && notes2[start] == 0) || (hold3.transform.localEulerAngles.x > 45f && notes3[start] == 0) || (hold4.transform.localEulerAngles.x > 45f && notes4[start] == 0))
			{
				start = 0;
			}
			if (hold1.transform.localEulerAngles.x > 45f)
			{
				foregrip.transform.localPosition = new Vector3(0f, 0f, (float)notes1[start]);
				SM.PlayGenericSound(clips[notes1[start]], pos.localPosition);
				start++;
			}
			if (hold2.transform.localEulerAngles.x > 45f)
			{
				foregrip.transform.localPosition = new Vector3(0f, 0f, (float)notes2[start]);
				SM.PlayGenericSound(clips[notes2[start]], pos.localPosition);
				start++;
			}
			if (hold3.transform.localEulerAngles.x > 45f)
			{
				foregrip.transform.localPosition = new Vector3(0f, 0f, (float)notes3[start]);
				SM.PlayGenericSound(clips[notes3[start]], pos.localPosition);
				start++;
			}
			if (hold4.transform.localEulerAngles.x > 45f)
			{
				foregrip.transform.localPosition = new Vector3(0f, 0f, (float)notes4[start]);
				SM.PlayGenericSound(clips[notes4[start]], pos.localPosition);
				start++;
			}
		}

		private void FixedUpdate()
		{
		}

		private void Update()
		{
		}
	}
	public class LebelHandle : MonoBehaviour
	{
		public Mac11_Stock fakeboltt;

		public BoltActionRifle_Handle realbolt;

		public GameObject rot;

		public GameObject fakebolt;

		public FVRAlternateGrip foregrip;

		private GameObject _player = null;

		private FVRViveHand leftHand = null;

		private FVRViveHand rightHand = null;

		public bool istransfterd = true;

		private void Awake()
		{
			_player = ((Component)Object.FindObjectOfType<FVRPlayerBody>()).gameObject;
		}

		private void Start()
		{
			leftHand = ((Component)_player.transform.Find("Controller (left)")).GetComponent<FVRViveHand>();
			rightHand = ((Component)_player.transform.Find("Controller (right)")).GetComponent<FVRViveHand>();
		}

		private void BoltTransfer()
		{
			if (!istransfterd)
			{
				((FVRInteractiveObject)fakeboltt).EndInteraction(rightHand);
				rightHand.ForceSetInteractable((FVRInteractiveObject)(object)realbolt);
				((FVRInteractiveObject)realbolt).BeginInteraction(rightHand);
				istransfterd = true;
			}
			if (!istransfterd)
			{
			}
		}

		private void Update()
		{
			if (!fakebolt.activeInHierarchy)
			{
				BoltTransfer();
			}
			if (fakebolt.activeInHierarchy)
			{
				istransfterd = false;
			}
			if (!((Object)(object)_player == (Object)null) && !((Object)(object)leftHand == (Object)null) && !((Object)(object)rightHand == (Object)null))
			{
			}
		}
	}
	public class DshapeGrip : MonoBehaviour
	{
		public ClosedBoltWeapon gun;

		public GameObject trigL;

		public GameObject trigR;

		public GameObject magrel;

		private void Start()
		{
		}

		private void Update()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			if (trigL.transform.localEulerAngles.x > 45f || trigR.transform.localEulerAngles.x > 45f)
			{
				gun.Fire();
			}
			if (magrel.transform.localEulerAngles.x > 45f && (Object)(object)((FVRFireArm)gun).Magazine != (Object)null)
			{
				((FVRFireArm)gun).EjectMag(false);
			}
		}
	}
	public class FireRopeOB : MonoBehaviour
	{
		public OpenBoltReceiver gun;

		public GameObject trigger;

		private void Start()
		{
		}

		private void Update()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			if (trigger.transform.localPosition.z >= 0.1f)
			{
				gun.Fire();
			}
			else if (!(trigger.transform.localPosition.z < 0.1f))
			{
			}
		}
	}
	public class KeepMeAlive : MonoBehaviour
	{
		public Rigidbody rb;

		private void Start()
		{
		}

		private void Update()
		{
			rb.isKinematic = false;
		}
	}
	public class MountedMG : MonoBehaviour
	{
		public GameObject elev;

		public GameObject hori;

		public GameObject XGEO;

		public GameObject YGEO;

		public WaggleJoint X;

		public WaggleJoint Y;

		public Rigidbody j1;

		public Rigidbody j2;

		public Rigidbody j3;

		public GameObject trig;

		public ClosedBoltWeapon gun;

		private void Start()
		{
		}

		private void Update()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0177: Unknown result type (might be due to invalid IL or missing references)
			//IL_017c: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0203: Unknown result type (might be due to invalid IL or missing references)
			//IL_0208: Unknown result type (might be due to invalid IL or missing references)
			//IL_019a: Unknown result type (might be due to invalid IL or missing references)
			//IL_019f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: Unknown result type (might be due to invalid IL or missing references)
			//IL_028f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0294: Unknown result type (might be due to invalid IL or missing references)
			//IL_0226: Unknown result type (might be due to invalid IL or missing references)
			//IL_022b: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_031b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0320: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0259: Unknown result type (might be due to invalid IL or missing references)
			//IL_0384: Unknown result type (might be due to invalid IL or missing references)
			//IL_0389: Unknown result type (might be due to invalid IL or missing references)
			//IL_034e: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0410: Unknown result type (might be due to invalid IL or missing references)
			//IL_0415: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_049c: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0433: Unknown result type (might be due to invalid IL or missing references)
			//IL_0438: Unknown result type (might be due to invalid IL or missing references)
			//IL_03da: Unknown result type (might be due to invalid IL or missing references)
			//IL_0528: Unknown result type (might be due to invalid IL or missing references)
			//IL_052d: Unknown result type (might be due to invalid IL or missing references)
			//IL_04bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0466: Unknown result type (might be due to invalid IL or missing references)
			//IL_054b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0550: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_057e: Unknown result type (might be due to invalid IL or missing references)
			if (trig.transform.localPosition.x > 1f)
			{
				gun.Fire();
			}
			if (trig.transform.localPosition.x < 1f)
			{
			}
			j1.isKinematic = false;
			j2.isKinematic = false;
			j3.isKinematic = false;
			if (elev.transform.localPosition.y < 0.5f)
			{
				XGEO.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
				X.angleLimitLeft = 15f;
				X.angleLimitRight = 15f;
			}
			if (elev.transform.localPosition.y > 0.5f && elev.transform.localPosition.y < 1.5f)
			{
				XGEO.transform.localEulerAngles = new Vector3(15f, 0f, 0f);
				X.angleLimitLeft = 0f;
				X.angleLimitRight = 30f;
			}
			if (elev.transform.localPosition.y > 1.5f && elev.transform.localPosition.y < 2.5f)
			{
				XGEO.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
				X.angleLimitLeft = 15f;
				X.angleLimitRight = 15f;
			}
			if (elev.transform.localPosition.y > 2.5f && elev.transform.localPosition.y < 3.5f)
			{
				XGEO.transform.localEulerAngles = new Vector3(345f, 0f, 0f);
				X.angleLimitLeft = 30f;
				X.angleLimitRight = 0f;
			}
			if (elev.transform.localPosition.y > 3.5f && elev.transform.localPosition.y < 4.5f)
			{
				XGEO.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
				X.angleLimitLeft = 15f;
				X.angleLimitRight = 15f;
			}
			if (hori.transform.localPosition.y < 0.5f)
			{
				YGEO.transform.localEulerAngles = new Vector3(0f, 90f, 0f);
				Y.angleLimitLeft = 15f;
				Y.angleLimitRight = 15f;
			}
			if (hori.transform.localPosition.y > 0.5f && hori.transform.localPosition.y < 1.5f)
			{
				YGEO.transform.localEulerAngles = new Vector3(15f, 90f, 0f);
				Y.angleLimitLeft = 0f;
				Y.angleLimitRight = 30f;
			}
			if (hori.transform.localPosition.y > 1.5f && hori.transform.localPosition.y < 2.5f)
			{
				YGEO.transform.localEulerAngles = new Vector3(0f, 90f, 0f);
				Y.angleLimitLeft = 15f;
				Y.angleLimitRight = 15f;
			}
			if (hori.transform.localPosition.y > 2.5f && hori.transform.localPosition.y < 3.5f)
			{
				YGEO.transform.localEulerAngles = new Vector3(345f, 90f, 0f);
				Y.angleLimitLeft = 30f;
				Y.angleLimitRight = 0f;
			}
			if (hori.transform.localPosition.y > 3.5f && hori.transform.localPosition.y < 4.5f)
			{
				YGEO.transform.localEulerAngles = new Vector3(0f, 90f, 0f);
				Y.angleLimitLeft = 15f;
				Y.angleLimitRight = 15f;
			}
		}
	}
	public class BarrelLatch : MonoBehaviour
	{
		public Collider boltgrab;

		public GameObject knob;

		public GameObject bolt;

		public GameObject grab;

		public GameObject barrel;

		public float speed = 0f;

		public float speed_multi = 0.001f;

		public float fore = 0.2344f;

		public float rear = 0f;

		public WaggleJoint dustcover;

		public bool islocked = true;

		public GameObject audioopen;

		public GameObject audioclose;

		public GameObject audioflipopen;

		public GameObject audioflipclose;

		private void Start()
		{
		}

		private void Update()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_012d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0132: 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)
			//IL_031c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0321: Unknown result type (might be due to invalid IL or missing references)
			//IL_029c: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_020a: Unknown result type (might be due to invalid IL or missing references)
			//IL_020f: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_023f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
			if (barrel.transform.localPosition.z > 0.2f && bolt.transform.localPosition.z > 0.2f && dustcover.hingeGraphic.localRotation.x >= 20f)
			{
				dustcover.angleLimitLeft = 115f;
				dustcover.angleLimitRight = -115f;
				audioflipclose.SetActive(true);
				audioflipopen.SetActive(false);
			}
			if (barrel.transform.localPosition.z <= 0.2f || bolt.transform.localPosition.z <= 0.2f)
			{
				dustcover.angleLimitLeft = 100f;
				dustcover.angleLimitRight = 0f;
				audioflipclose.SetActive(false);
				audioflipopen.SetActive(true);
			}
			if (grab.transform.localEulerAngles.x < 45f && !islocked)
			{
				if (barrel.transform.localPosition.z < fore)
				{
					boltgrab.enabled = false;
					audioopen.SetActive(false);
					speed += speed_multi;
					if (speed > 1f)
					{
						speed = 1f;
					}
					barrel.transform.localPosition = Vector3.MoveTowards(barrel.transform.localPosition, new Vector3(0f, 0f, fore), speed);
				}
				if (barrel.transform.localPosition.z >= fore)
				{
					barrel.transform.localPosition = new Vector3(0f, 0f, fore);
					speed = 0f;
					audioopen.SetActive(true);
					boltgrab.enabled = true;
				}
			}
			if (grab.transform.localPosition.x > 45f && barrel.transform.localPosition.z < 0.01f && knob.transform.localEulerAngles.x < 45f)
			{
				barrel.transform.localPosition = new Vector3(0f, 0f, rear);
				islocked = true;
				audioclose.SetActive(true);
			}
			if (knob.transform.localEulerAngles.x > 45f)
			{
				islocked = false;
				audioclose.SetActive(false);
			}
		}
	}
}
namespace JerryAr.A_Box_of_Gun_Parts
{
	[BepInPlugin("JerryAr.A_Box_of_Gun_Parts", "A_Box_of_Gun_Parts", "1.4.1")]
	[BepInProcess("h3vr.exe")]
	[Description("Built with MeatKit")]
	[BepInDependency("h3vr.otherloader", "1.3.0")]
	public class A_Box_of_Gun_PartsPlugin : BaseUnityPlugin
	{
		private static readonly string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

		internal static ManualLogSource Logger;

		private void Awake()
		{
			Logger = ((BaseUnityPlugin)this).Logger;
			LoadAssets();
		}

		private void LoadAssets()
		{
			Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "JerryAr.A_Box_of_Gun_Parts");
			OtherLoader.RegisterDirectLoad(BasePath, "JerryAr.A_Box_of_Gun_Parts", "", "", "aboxofgunparts", "");
		}
	}
}
namespace JerryComponent
{
	public class AutoGrabMagWell : MonoBehaviour
	{
		public GameObject rot;

		public FVRFireArm gun;

		public MagFold fold;

		private void Awake()
		{
		}

		private void Start()
		{
		}

		private void Update()
		{
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: Unknown result type (might be due to invalid IL or missing references)
			//IL_0146: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)gun.Magazine))
			{
				if (gun.Magazine.IsBeltBox && GM.CurrentMovementManager.Hands[1].Input.IsGrabbing && rot.transform.localEulerAngles.y < 45f)
				{
					if ((Object)(object)GM.CurrentMovementManager.Hands[1].CurrentInteractable == (Object)null)
					{
						GM.CurrentMovementManager.Hands[1].ForceSetInteractable((FVRInteractiveObject)(object)fold);
						((FVRInteractiveObject)fold).BeginInteraction(GM.CurrentMovementManager.Hands[1]);
					}
				}
				else if (gun.Magazine.IsBeltBox && !GM.CurrentMovementManager.Hands[1].Input.IsGrabbing && rot.transform.localEulerAngles.y < 45f)
				{
					gun.EjectMag(false);
				}
				else if (gun.Magazine.IsBeltBox && rot.transform.localEulerAngles.y != 45f)
				{
				}
			}
			else if (Object.op_Implicit((Object)(object)gun.Magazine))
			{
			}
		}
	}
	public class BeltAppear : MonoBehaviour
	{
		public FVRFireArmTopCover cover;

		public FVRFoldingStockXAxis lifter;

		public BoxCollider col;

		public OpenBoltReceiver gun;

		public FVRObject[] beltempt;

		public Transform beltpos;

		public GameObject follower;

		public int followerX = 0;

		public int beltL = 20;

		public float a = 45f;

		private void Start()
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			follower.transform.localPosition = new Vector3(0f, 0f, 0f);
			followerX = 0;
		}

		private void OnPKMShotFired(FVRFireArm fireArm)
		{
			if ((Object)(object)fireArm == (Object)(object)gun)
			{
				followerX++;
				if (followerX >= beltL)
				{
					Object.Instantiate<GameObject>(((AnvilAsset)beltempt[beltL]).GetGameObject(), beltpos);
					followerX = 0;
				}
			}
		}

		private void Awake()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Expected O, but got Unknown
			GM.CurrentSceneSettings.ShotFiredEvent += new ShotFired(OnPKMShotFired);
		}

		private void Update()
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0176: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_0160: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
			follower.transform.localPosition = new Vector3((float)followerX, 0f, 0f);
			if (!((FVRFireArm)gun).HasBelt && ((Component)cover).transform.localEulerAngles.x >= 45f)
			{
				((Collider)col).enabled = true;
			}
			if (((FVRFireArm)gun).HasBelt && ((Component)cover).transform.localEulerAngles.x < 45f)
			{
				((Collider)col).enabled = false;
			}
			if (((Component)lifter).transform.localEulerAngles.x <= 22.5f && followerX != 0)
			{
				Object.Instantiate<GameObject>(((AnvilAsset)beltempt[followerX]).GetGameObject(), beltpos);
				followerX = 0;
			}
			if (((Component)lifter).transform.localEulerAngles.x < 45f)
			{
				a = ((Component)lifter).transform.localEulerAngles.x;
				((Component)lifter).transform.localEulerAngles = new Vector3(a + 5f, 0f, 0f);
			}
			if (((Component)lifter).transform.localEulerAngles.x == 45f)
			{
				a = 45f;
			}
			if (((Component)lifter).transform.localEulerAngles.x > 45f)
			{
				((Component)lifter).transform.localEulerAngles = new Vector3(45f, 0f, 0f);
			}
		}

		private void OnDestroy()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Expected O, but got Unknown
			GM.CurrentSceneSettings.ShotFiredEvent -= new ShotFired(OnPKMShotFired);
		}
	}
	public class BeltChange : MonoBehaviour
	{
		public OpenBoltReceiver gun2;

		public FVRFirearmBeltDisplayData data1;

		public FVRFirearmBeltDisplayData data2;

		public GameObject rot;

		public Transform _Magpos;

		public Transform _Boxpos;

		private void Start()
		{
		}

		private void Update()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			if (rot.transform.localEulerAngles.x < 45f)
			{
				((FVRFireArm)gun2).BeltDD = data1;
			}
			if (rot.transform.localEulerAngles.x >= 45f)
			{
				((FVRFireArm)gun2).BeltDD = data2;
			}
			((FVRFireArm)gun2).BeltBoxMountPos = _Boxpos;
			((FVRFireArm)gun2).MagazineMountPos = _Magpos;
		}
	}
	public class BeltGrab : MonoBehaviour
	{
		public FVRFireArm gun;

		public GameObject grabpos;

		private void Start()
		{
		}

		private void Update()
		{
			//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_010f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)gun.Magazine != (Object)null && gun.Magazine.IsBeltBox)
			{
				if ((Object)(object)((FVRInteractiveObject)gun.Magazine.BeltGrabTrigger).m_hand != (Object)null)
				{
					((Component)((FVRInteractiveObject)gun.Magazine.BeltGrabTrigger).PoseOverride).transform.position = grabpos.transform.position;
					((Component)((FVRInteractiveObject)gun.Magazine.BeltGrabTrigger).PoseOverride_Touch).transform.position = grabpos.transform.position;
				}
				else
				{
					((Component)((FVRInteractiveObject)gun.Magazine.BeltGrabTrigger).PoseOverride).transform.localPosition = new Vector3(0f, 0f, 0f);
					((Component)((FVRInteractiveObject)gun.Magazine.BeltGrabTrigger).PoseOverride_Touch).transform.localPosition = new Vector3(0f, 0f, 0f);
				}
			}
		}
	}
	public class Control_Enable : MonoBehaviour
	{
		public GameObject objToRead;

		public GameObject objToAffect;

		private void Start()
		{
		}

		private void Update()
		{
			if (objToRead.activeInHierarchy)
			{
				objToAffect.SetActive(true);
			}
			else
			{
				objToAffect.SetActive(false);
			}
		}
	}
	public class DoveTail : MonoBehaviour
	{
		public GameObject topcoverRot;

		public Collider topCover;

		public GameObject dovetail;

		public WaggleJoint wag;

		public GameObject switchToRelease;

		public GameObject barrel;

		public GameObject grip;

		public GameObject stock;

		public GameObject lockpiece;

		private void Start()
		{
		}

		private void Update()
		{
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//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_0078: 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_013a: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_015e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
			if (barrel.activeInHierarchy && grip.activeInHierarchy && stock.activeInHierarchy)
			{
				dovetail.SetActive(true);
				if (switchToRelease.transform.localEulerAngles.x > 45f)
				{
					topCover.enabled = true;
					if (topcoverRot.transform.localEulerAngles.x < 2f)
					{
						wag.angleLimitLeft = 32f;
						wag.angleLimitRight = 0f;
					}
					else if (topcoverRot.transform.localEulerAngles.x > 2f)
					{
						wag.angleLimitLeft = 10f;
						wag.angleLimitRight = 0f;
					}
				}
				else
				{
					if (!(switchToRelease.transform.localEulerAngles.x < 45f))
					{
						return;
					}
					topCover.enabled = false;
					if (topcoverRot.transform.localEulerAngles.x < 2f)
					{
						if (lockpiece.transform.localEulerAngles.x > 45f)
						{
							wag.angleLimitLeft = 32f;
							wag.angleLimitRight = 0f;
						}
						else if (lockpiece.transform.localEulerAngles.x < 45f)
						{
							wag.angleLimitLeft = 32f;
							wag.angleLimitRight = -32f;
						}
					}
					else if (topcoverRot.transform.localEulerAngles.x > 2f)
					{
						wag.angleLimitLeft = 10f;
						wag.angleLimitRight = 0f;
					}
				}
			}
			else
			{
				wag.angleLimitLeft = 32f;
				wag.angleLimitRight = -32f;
				dovetail.SetActive(false);
				topCover.enabled = true;
			}
		}
	}
	public class MagFold : FVRInteractiveObject
	{
		public enum StockPos
		{
			Closed,
			Mid,
			Open
		}

		public Transform Root;

		public Transform Stock;

		public float rotAngle;

		public float MinRot;

		public float MaxRot;

		public StockPos m_curPos;

		public StockPos m_lastPos;

		public bool isMinClosed = true;

		public FVRFireArm FireArm;

		public override void UpdateInteraction(FVRViveHand hand)
		{
			//IL_000e: 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_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: 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)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: 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_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: 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_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: 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_018d: Unknown result type (might be due to invalid IL or missing references)
			//IL_014c: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c1: Invalid comparison between Unknown and I4
			//IL_0173: Unknown result type (might be due to invalid IL or missing references)
			//IL_0165: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: Invalid comparison between Unknown and I4
			//IL_0212: Unknown result type (might be due to invalid IL or missing references)
			//IL_0217: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
			((FVRInteractiveObject)this).UpdateInteraction(hand);
			Vector3 val = ((HandInput)(ref hand.Input)).Pos - Root.position;
			Vector3 val2 = Vector3.ProjectOnPlane(val, Root.up);
			val = ((Vector3)(ref val2)).normalized;
			Vector3 val3 = -((Component)Root).transform.forward;
			rotAngle = Mathf.Atan2(Vector3.Dot(Root.up, Vector3.Cross(val3, val)), Vector3.Dot(val3, val)) * 57.29578f;
			if (Mathf.Abs(rotAngle - MinRot) < 5f)
			{
				rotAngle = MinRot;
			}
			if (Mathf.Abs(rotAngle - MaxRot) < 5f)
			{
				rotAngle = MaxRot;
			}
			if (!(rotAngle >= MinRot) || !(rotAngle <= MaxRot))
			{
				return;
			}
			Stock.localEulerAngles = new Vector3(0f, rotAngle, 0f);
			float num = Mathf.InverseLerp(MinRot, MaxRot, rotAngle);
			if (isMinClosed)
			{
				if (num < 0.02f)
				{
					m_curPos = (StockPos)0;
				}
				else if (num > 0.9f)
				{
					m_curPos = (StockPos)2;
				}
				else
				{
					m_curPos = (StockPos)1;
				}
			}
			else if (num < 0.1f)
			{
				m_curPos = (StockPos)2;
			}
			else if (num > 0.98f)
			{
				m_curPos = (StockPos)0;
			}
			else
			{
				m_curPos = (StockPos)1;
			}
			if ((int)m_curPos == 2 && (int)m_lastPos != 2)
			{
				FireArm.PlayAudioEvent((FirearmAudioEventType)30, 1f);
			}
			if ((int)m_curPos == 0 && (int)m_lastPos != 0)
			{
				FireArm.PlayAudioEvent((FirearmAudioEventType)31, 1f);
			}
			m_lastPos = m_curPos;
		}
	}
	public class MagMani : MonoBehaviour
	{
		public OpenBoltReceiver gun;

		public GameObject magmount;

		public GameObject well;

		public Collider col;

		public Collider col2;

		private void Start()
		{
		}

		private void Update()
		{
			//IL_010f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0114: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0190: Unknown result type (might be due to invalid IL or missing references)
			//IL_0195: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: Unknown result type (might be due to invalid IL or missing references)
			//IL_0160: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c3: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)((FVRFireArm)gun).Magazine))
			{
				if ((float)((FVRFireArm)gun).Magazine.m_numRounds == 0f)
				{
					col.enabled = true;
					if (magmount.transform.localEulerAngles.z < 5f)
					{
						((FVRFireArm)gun).EjectMag(true);
					}
					else if (!(magmount.transform.localEulerAngles.z >= 5f))
					{
					}
				}
				else if ((float)((FVRFireArm)gun).Magazine.m_numRounds > 0f && magmount.transform.localEulerAngles.z == 45f)
				{
					col.enabled = false;
				}
			}
			else if (!Object.op_Implicit((Object)(object)((FVRFireArm)gun).Magazine) && magmount.transform.localEulerAngles.z < 5f)
			{
				well.transform.localEulerAngles = new Vector3(0f, 0f, 20f);
				((Component)this).transform.localEulerAngles = new Vector3(0f, 0f, 0f);
			}
			else if (Object.op_Implicit((Object)(object)((FVRFireArm)gun).Magazine) && magmount.transform.localEulerAngles.z < 5f)
			{
				well.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
			}
			if (Object.op_Implicit((Object)(object)((FVRFireArm)gun).Magazine))
			{
				col2.enabled = false;
			}
			if (!Object.op_Implicit((Object)(object)((FVRFireArm)gun).Magazine))
			{
				col2.enabled = true;
			}
		}
	}
}
public class MagPosChange : MonoBehaviour
{
	private void Start()
	{
	}

	private void Update()
	{
	}
}
namespace JerryComponent
{
	public class MagRotate : MonoBehaviour
	{
		public GameObject rot;

		public FVRFireArm gun;

		public FVRFoldingStockYAxis fold;

		private GameObject _player = null;

		private FVRViveHand leftHand = null;

		private FVRViveHand rightHand = null;

		public bool leftGrab;

		public bool rightGrab;

		private void Awake()
		{
			_player = ((Component)Object.FindObjectOfType<FVRPlayerBody>()).gameObject;
		}

		private void Start()
		{
			leftHand = ((Component)_player.transform.Find("Controller (left)")).GetComponent<FVRViveHand>();
			rightHand = ((Component)_player.transform.Find("Controller (right)")).GetComponent<FVRViveHand>();
		}

		private void Update()
		{
			//IL_021b: 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)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_014c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0196: Unknown result type (might be due to invalid IL or missing references)
			//IL_019b: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)gun.Magazine))
			{
				if (rightHand.Input.IsGrabbing && rot.transform.localEulerAngles.y < 30f)
				{
					if ((Object)(object)rightHand.CurrentInteractable != (Object)null)
					{
						rightGrab = false;
					}
					else
					{
						rightHand.ForceSetInteractable((FVRInteractiveObject)(object)fold);
						((FVRInteractiveObject)fold).BeginInteraction(rightHand);
						rightGrab = true;
					}
				}
				if (leftHand.Input.IsGrabbing && rot.transform.localEulerAngles.y < 30f)
				{
					if ((Object)(object)leftHand.CurrentInteractable != (Object)null)
					{
						leftGrab = false;
						return;
					}
					leftHand.ForceSetInteractable((FVRInteractiveObject)(object)fold);
					((FVRInteractiveObject)fold).BeginInteraction(leftHand);
					leftGrab = true;
				}
				else if (!rightHand.Input.IsGrabbing && rot.transform.localEulerAngles.y < 30f)
				{
					gun.EjectMag(false);
				}
				else if (!leftHand.Input.IsGrabbing && rot.transform.localEulerAngles.y < 30f)
				{
					gun.EjectMag(false);
				}
				else if (rot.transform.localEulerAngles.y != 30f)
				{
				}
			}
			else if (!Object.op_Implicit((Object)(object)gun.Magazine))
			{
				rot.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
			}
		}
	}
	public class MagRotate2 : MonoBehaviour
	{
		public GameObject rot;

		public FVRFireArm gun;

		public MagFold fold;

		private void Awake()
		{
		}

		private void Start()
		{
		}

		private void Update()
		{
			//IL_0236: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: 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_0134: Unknown result type (might be due to invalid IL or missing references)
			//IL_0139: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)gun.Magazine))
			{
				if ((Object)(object)((FVRInteractiveObject)gun).m_hand != (Object)null)
				{
					if (((FVRInteractiveObject)gun).m_hand.OtherHand.Input.IsGrabbing && rot.transform.localEulerAngles.y < 30f)
					{
						if (!((Object)(object)((FVRInteractiveObject)gun).m_hand.OtherHand.CurrentInteractable != (Object)null))
						{
							((FVRInteractiveObject)gun).m_hand.OtherHand.ForceSetInteractable((FVRInteractiveObject)(object)fold);
							((FVRInteractiveObject)fold).BeginInteraction(((FVRInteractiveObject)gun).m_hand.OtherHand);
						}
					}
					else if (!((FVRInteractiveObject)gun).m_hand.OtherHand.Input.IsGrabbing && rot.transform.localEulerAngles.y < 30f)
					{
						gun.EjectMag(false);
					}
					else if (rot.transform.localEulerAngles.y >= 30f && (Object)(object)((FVRInteractiveObject)gun).m_hand.OtherHand.m_currentInteractable == (Object)(object)fold)
					{
						fold.MinRot = 30f;
						fold.MaxRot = 30f;
					}
				}
				else if ((Object)(object)((FVRInteractiveObject)gun).m_hand == (Object)null && rot.transform.localEulerAngles.y < 30f)
				{
					gun.EjectMag(false);
				}
			}
			else if (!Object.op_Implicit((Object)(object)gun.Magazine))
			{
				fold.MinRot = 0f;
				fold.MaxRot = 30f;
				rot.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
			}
		}
	}
	public class Assem : FVRPhysicalObject, IFVRDamageable
	{
		public Transform Tip;

		public Vector2 TipRange;

		[NonSerialized]
		public bool m_isSpraying;

		[NonSerialized]
		public bool m_wasSpraying;

		[NonSerialized]
		public bool m_isIgnited;

		[NonSerialized]
		public bool m_wasIgnited;

		public LayerMask LM_sprayCast;

		[NonSerialized]
		public RaycastHit m_hit;

		public string Filltag;

		public float SprayDistance;

		public float SprayAngle;

		public AudioEvent AudEvent_Head;

		public AudioEvent AudEvent_Tail;

		public AudioSource AudSource_Loop;

		public AudioClip AudClip_Spray;

		public AudioClip AudClip_Fire;

		public Transform Muzzle;

		public ParticleSystem PSystem_Spray;

		public GameObject Proj_Fire;

		public GameObject IgnitorTrigger;

		public AudioEvent AudEvent_Rattle;

		public float RattleRadius;

		public float RattleHeight;

		[NonSerialized]
		public Vector3 m_rattlePos = Vector3.zero;

		[NonSerialized]
		public Vector3 m_rattleLastPos = Vector3.zero;

		[NonSerialized]
		public Vector3 m_rattleVel = Vector3.zero;

		[NonSerialized]
		public bool m_israttleSide;

		[NonSerialized]
		public bool m_wasrattleSide;

		public Transform ballviz;

		[NonSerialized]
		public bool m_hasExploed;

		public GameObject Splode;

		[NonSerialized]
		public float m_timeTilCast = 0.03f;

		public void Damage(Damage d)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Invalid comparison between Unknown and I4
			if ((int)d.Class == 1 || (d.Dam_Thermal > 0f && m_isSpraying))
			{
				Explode();
			}
		}

		public void Explode()
		{
			//IL_0025: 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)
			if (!m_hasExploed)
			{
				m_hasExploed = true;
				Object.Instantiate<GameObject>(Splode, ((Component)this).transform.position, ((Component)this).transform.rotation);
				Object.Destroy((Object)(object)((Component)this).gameObject);
			}
		}

		public void RattleUpdate()
		{
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: 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_0111: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0121: 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_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			//IL_014c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: Unknown result type (might be due to invalid IL or missing references)
			//IL_019e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01af: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0250: Unknown result type (might be due to invalid IL or missing references)
			//IL_0255: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_021f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0234: Unknown result type (might be due to invalid IL or missing references)
			//IL_0243: Unknown result type (might be due to invalid IL or missing references)
			m_wasrattleSide = m_israttleSide;
			if (m_wasrattleSide)
			{
				m_rattleVel = ((FVRPhysicalObject)this).RootRigidbody.velocity;
			}
			else
			{
				m_rattleVel -= ((FVRPhysicalObject)this).RootRigidbody.GetPointVelocity(((Component)this).transform.TransformPoint(m_rattlePos)) * Time.deltaTime;
			}
			m_rattleVel += Vector3.up * -0.5f * Time.deltaTime;
			Vector3 val = ((Component)this).transform.InverseTransformDirection(m_rattleVel);
			m_rattlePos += val * Time.deltaTime;
			float num = m_rattlePos.y;
			Vector2 val2 = default(Vector2);
			((Vector2)(ref val2))..ctor(m_rattlePos.x, m_rattlePos.z);
			m_israttleSide = false;
			float magnitude = ((Vector2)(ref val2)).magnitude;
			if (magnitude > RattleRadius)
			{
				float num2 = RattleRadius - magnitude;
				val2 = Vector2.op_Implicit(Vector3.ClampMagnitude(Vector2.op_Implicit(val2), RattleRadius));
				num += num2 * Mathf.Sign(num);
				val = Vector3.ProjectOnPlane(val, new Vector3(val2.x, 0f, val2.y));
				m_israttleSide = true;
			}
			if (Mathf.Abs(num) > RattleHeight)
			{
				num = RattleHeight * Mathf.Sign(num);
				val.y = 0f;
				m_israttleSide = true;
			}
			m_rattlePos = new Vector3(val2.x, num, val2.y);
			m_rattleVel = ((Component)this).transform.TransformDirection(val);
			ballviz.localPosition = m_rattlePos;
			if (m_israttleSide && !m_wasrattleSide)
			{
				float num3 = Mathf.Clamp(4f * (Vector3.Distance(m_rattlePos, m_rattleLastPos) / RattleRadius), 0f, 1f);
				SM.PlayCoreSoundOverrides((FVRPooledAudioType)40, AudEvent_Rattle, ballviz.position, new Vector2(num3 * 0.4f, num3 * 0.4f), new Vector2(1f, 1f));
			}
			m_rattleLastPos = m_rattlePos;
		}

		public override void UpdateInteraction(FVRViveHand hand)
		{
			((FVRPhysicalObject)this).UpdateInteraction(hand);
			m_isSpraying = false;
			if (((FVRInteractiveObject)this).m_hasTriggeredUpSinceBegin)
			{
				((FVRPhysicalObject)this).SetAnimatedComponent(Tip, Mathf.Lerp(TipRange.x, TipRange.y, hand.Input.TriggerFloat), (InterpStyle)0, (Axis)1);
				if (hand.Input.TriggerFloat > 0.8f)
				{
					m_isSpraying = true;
				}
			}
		}

		public override void EndInteraction(FVRViveHand hand)
		{
			((FVRPhysicalObject)this).EndInteraction(hand);
			((FVRPhysicalObject)this).SetAnimatedComponent(Tip, TipRange.x, (InterpStyle)0, (Axis)1);
			m_isSpraying = false;
		}

		public void Ignite()
		{
			if (m_isSpraying)
			{
				m_isIgnited = true;
			}
		}

		public override void FVRUpdate()
		{
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_004e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0207: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: 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_0117: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_011d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0122: Unknown result type (might be due to invalid IL or missing references)
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			//IL_014c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: Unknown result type (might be due to invalid IL or missing references)
			//IL_0152: Unknown result type (might be due to invalid IL or missing references)
			//IL_0157: Unknown result type (might be due to invalid IL or missing references)
			//IL_015e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0169: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0259: Unknown result type (might be due to invalid IL or missing references)
			((FVRPhysicalObject)this).FVRUpdate();
			RattleUpdate();
			if (m_isSpraying)
			{
				m_timeTilCast -= Time.deltaTime;
				if (m_isIgnited)
				{
					GameObject val = Object.Instantiate<GameObject>(Proj_Fire, Muzzle.position, Muzzle.rotation);
					val.transform.Rotate(new Vector3(Random.Range(0f - SprayAngle, SprayAngle), Random.Range(0f - SprayAngle, SprayAngle), 0f));
					BallisticProjectile component = val.GetComponent<BallisticProjectile>();
					component.Fire(component.MuzzleVelocityBase, val.transform.forward, (FVRFireArm)null, true);
				}
				else
				{
					PSystem_Spray.Emit(10);
					if (m_timeTilCast < 0f)
					{
						m_timeTilCast = 0.03f;
						Vector3 forward = Muzzle.forward;
						forward = Quaternion.AngleAxis(Random.Range((0f - SprayAngle) * 3f, SprayAngle * 3f), Muzzle.up) * forward;
						forward = Quaternion.AngleAxis(Random.Range((0f - SprayAngle) * 3f, SprayAngle * 3f), Muzzle.right) * forward;
						if (Physics.Raycast(Muzzle.position, Muzzle.forward, ref m_hit, SprayDistance, LayerMask.op_Implicit(LM_sprayCast), (QueryTriggerInteraction)1) && ((Component)((RaycastHit)(ref m_hit)).collider).gameObject.CompareTag(Filltag))
						{
							maufunctions component2 = ((Component)((RaycastHit)(ref m_hit)).collider.attachedRigidbody).gameObject.GetComponent<maufunctions>();
							component2.wetness += 25f;
						}
					}
				}
			}
			if (m_isSpraying && !m_wasSpraying)
			{
				SM.PlayCoreSound((FVRPooledAudioType)10, AudEvent_Head, Muzzle.position);
				AudSource_Loop.clip = AudClip_Spray;
				AudSource_Loop.Play();
			}
			else if (m_wasSpraying && !m_isSpraying)
			{
				SM.PlayCoreSound((FVRPooledAudioType)10, AudEvent_Tail, Muzzle.position);
				AudSource_Loop.Stop();
			}
			if (m_isSpraying && !m_isIgnited)
			{
				if (!IgnitorTrigger.activeSelf)
				{
					IgnitorTrigger.SetActive(true);
				}
			}
			else if (IgnitorTrigger.activeSelf)
			{
				IgnitorTrigger.SetActive(false);
			}
			if (!m_isSpraying)
			{
				m_isIgnited = false;
			}
			if (m_isIgnited && !m_wasIgnited)
			{
				AudSource_Loop.clip = AudClip_Fire;
				AudSource_Loop.Play();
			}
			m_wasSpraying = m_isSpraying;
			m_wasIgnited = m_isIgnited;
		}
	}
	public class DisableInterfaceAndcolliders : MonoBehaviour
	{
		public bool locked = true;

		public Handgun gun;

		public GameObject triggerguradrot;

		public GameObject safetyrot;

		public FVRFireArmAttachmentMount maglatch;

		public FVRFireArmAttachmentMount barrel;

		public FVRFireArmAttachmentMount spring;

		public FVRFireArmAttachmentMount slide;

		public FVRFireArmAttachmentMount trigger;

		public FVRFireArmAttachmentMount triggerguard;

		public FVRFireArmAttachmentMount safety;

		public FVRFireArmAttachmentMount lever;

		public FVRFireArmAttachmentMount hammer;

		public FVRFireArmAttachmentMount hammerstop;

		public FVRFireArmAttachmentMount sliderelease;

		public Collider safetycol;

		public Collider springcol;

		public Collider slidecol;

		public Collider SlideGrab;

		public GameObject slidepiece;

		public ManipulateObject springmani;

		private void Start()
		{
		}

		private void Update()
		{
			//IL_024c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0573: Unknown result type (might be due to invalid IL or missing references)
			//IL_0578: Unknown result type (might be due to invalid IL or missing references)
			//IL_05db: Unknown result type (might be due to invalid IL or missing references)
			//IL_05e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0504: Unknown result type (might be due to invalid IL or missing references)
			//IL_0509: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a26: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a56: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ad9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0afd: Unknown result type (might be due to invalid IL or missing references)
			if (slide.HasAttachmentsOnIt())
			{
				((Behaviour)springmani).enabled = true;
				if (spring.HasAttachmentsOnIt())
				{
					((Component)spring.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(false);
				}
				if (barrel.HasAttachmentsOnIt())
				{
					((Component)barrel.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(false);
				}
				if (trigger.HasAttachmentsOnIt())
				{
					((Component)trigger.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(false);
				}
				if (triggerguard.HasAttachmentsOnIt())
				{
					((Component)triggerguard.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(false);
				}
				if (lever.HasAttachmentsOnIt())
				{
					((Component)lever.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(false);
					if (((FVRPhysicalObject)lever.AttachmentsList[0]).AttachmentMounts[0].HasAttachmentsOnIt())
					{
						((Component)((FVRPhysicalObject)lever.AttachmentsList[0]).AttachmentsList[0].AttachmentInterface).gameObject.SetActive(false);
					}
				}
				if (hammer.HasAttachmentsOnIt())
				{
					((Component)hammer.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(false);
				}
				if (hammerstop.HasAttachmentsOnIt())
				{
					((Component)hammerstop.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(false);
				}
				if (sliderelease.HasAttachmentsOnIt())
				{
					((Component)sliderelease.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(false);
				}
			}
			else if (!slide.HasAttachmentsOnIt())
			{
				((Behaviour)springmani).enabled = false;
				((Component)spring).gameObject.transform.localScale = new Vector3(1f, 1f, 1f);
				if (spring.HasAttachmentsOnIt())
				{
					((Component)spring.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(true);
					if (barrel.HasAttachmentsOnIt())
					{
						((Component)barrel.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(false);
					}
				}
				else if (!spring.HasAttachmentsOnIt() && barrel.HasAttachmentsOnIt())
				{
					((Component)barrel.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(true);
				}
				if (trigger.HasAttachmentsOnIt())
				{
					((Component)trigger.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(true);
				}
				if (triggerguard.HasAttachmentsOnIt())
				{
					((Component)triggerguard.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(true);
				}
				if (lever.HasAttachmentsOnIt())
				{
					((Component)lever.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(true);
					if (((FVRPhysicalObject)lever.AttachmentsList[0]).AttachmentMounts[0].HasAttachmentsOnIt())
					{
						((Component)((FVRPhysicalObject)lever.AttachmentsList[0]).AttachmentsList[0].AttachmentInterface).gameObject.SetActive(true);
					}
				}
				if (hammer.HasAttachmentsOnIt())
				{
					((Component)hammer.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(true);
				}
				if (hammerstop.HasAttachmentsOnIt())
				{
					((Component)hammerstop.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(true);
				}
				if (sliderelease.HasAttachmentsOnIt())
				{
					((Component)sliderelease.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(true);
				}
			}
			if (safety.HasAttachmentsOnIt())
			{
				if (slide.HasAttachmentsOnIt())
				{
					((Component)slide.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(false);
				}
			}
			else if (!safety.HasAttachmentsOnIt() && slide.HasAttachmentsOnIt())
			{
				if (triggerguradrot.transform.localEulerAngles.x > 10f)
				{
					((Component)slide.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(true);
				}
				else
				{
					((Component)slide.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(false);
				}
			}
			if (triggerguradrot.transform.localEulerAngles.x < 10f)
			{
				SlideGrab.enabled = true;
				if (safety.HasAttachmentsOnIt())
				{
					((Component)safety.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(false);
				}
			}
			else if (triggerguradrot.transform.localEulerAngles.x > 10f)
			{
				SlideGrab.enabled = false;
				if (safety.HasAttachmentsOnIt())
				{
					((Component)safety.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(true);
				}
			}
			if (!maglatch.HasAttachmentsOnIt())
			{
				((FVRFireArm)gun).EjectMag(false);
			}
			else if (!maglatch.HasAttachmentsOnIt())
			{
			}
			if (barrel.HasAttachmentsOnIt())
			{
				springcol.enabled = true;
			}
			else if (!barrel.HasAttachmentsOnIt())
			{
				springcol.enabled = false;
			}
			if (barrel.HasAttachmentsOnIt() && spring.HasAttachmentsOnIt() && lever.HasAttachmentsOnIt() && hammer.HasAttachmentsOnIt() && hammerstop.HasAttachmentsOnIt() && sliderelease.HasAttachmentsOnIt())
			{
				if (lever.HasAttachmentsOnIt())
				{
					slidecol.enabled = true;
				}
				else
				{
					slidecol.enabled = false;
				}
			}
			else if (!barrel.HasAttachmentsOnIt() || !spring.HasAttachmentsOnIt() || !lever.HasAttachmentsOnIt() || !hammer.HasAttachmentsOnIt() || !hammerstop.HasAttachmentsOnIt() || !sliderelease.HasAttachmentsOnIt())
			{
				slidecol.enabled = false;
			}
			if (slide.HasAttachmentsOnIt())
			{
				safetycol.enabled = true;
			}
			else if (!slide.HasAttachmentsOnIt())
			{
				safetycol.enabled = false;
			}
			if (maglatch.HasAttachmentsOnIt())
			{
				if (((FVRPhysicalObject)maglatch.AttachmentsList[0]).AttachmentMounts[0].HasAttachmentsOnIt())
				{
					((Component)maglatch.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(false);
					if (((FVRPhysicalObject)((FVRPhysicalObject)maglatch.AttachmentsList[0]).AttachmentsList[0]).AttachmentMounts[0].HasAttachmentsOnIt())
					{
						((Component)((FVRPhysicalObject)maglatch.AttachmentsList[0]).AttachmentsList[0].AttachmentInterface).gameObject.SetActive(false);
						if (((FVRPhysicalObject)((FVRPhysicalObject)((FVRPhysicalObject)maglatch.AttachmentsList[0]).AttachmentsList[0]).AttachmentsList[0]).AttachmentMounts[0].HasAttachmentsOnIt())
						{
							((Component)((FVRPhysicalObject)((FVRPhysicalObject)maglatch.AttachmentsList[0]).AttachmentsList[0]).AttachmentsList[0].AttachmentInterface).gameObject.SetActive(false);
						}
						else
						{
							((Component)((FVRPhysicalObject)((FVRPhysicalObject)maglatch.AttachmentsList[0]).AttachmentsList[0]).AttachmentsList[0].AttachmentInterface).gameObject.SetActive(true);
						}
					}
					else
					{
						((Component)((FVRPhysicalObject)maglatch.AttachmentsList[0]).AttachmentsList[0].AttachmentInterface).gameObject.SetActive(true);
					}
				}
				else
				{
					((Component)maglatch.AttachmentsList[0].AttachmentInterface).gameObject.SetActive(true);
				}
			}
			if (!slide.HasAttachmentsOnIt() || !trigger.HasAttachmentsOnIt() || !triggerguard.HasAttachmentsOnIt() || !safety.HasAttachmentsOnIt())
			{
				locked = true;
				gun.m_isSafetyEngaged = true;
				slidepiece.transform.localPosition = new Vector3(0f, 0.0266f, 0.001f);
				SlideGrab.enabled = false;
				safetyrot.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
			}
			else if (slide.HasAttachmentsOnIt() && trigger.HasAttachmentsOnIt() && triggerguard.HasAttachmentsOnIt() && safety.HasAttachmentsOnIt() && locked)
			{
				gun.m_isSafetyEngaged = false;
				safetyrot.transform.localEulerAngles = new Vector3(30f, 0f, 0f);
				slidepiece.transform.localPosition = new Vector3(0f, 0.0266f, 0.0394f);
				locked = false;
			}
		}
	}
	public class brush : MonoBehaviour
	{
		public Transform holder;

		public maufunctions mauf;

		public float cd = 0.5f;

		public GameObject particle;

		public AudioEvent sweep;

		public void OnTriggerStay(Collider col)
		{
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: 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_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			if (((Object)((Component)col).gameObject).name == "BarrelBrush(Clone)")
			{
				cd -= Time.deltaTime;
				if (cd < 0f)
				{
					cd = 0.5f;
					mauf.malfB += Random.Range(0.1f, 0.25f);
					Object.Instantiate<GameObject>(particle, ((Component)this).transform.position, ((Component)this).transform.rotation);
					SM.PlayGenericSound(sweep, ((Component)this).transform.position);
				}
				((Component)col).gameObject.transform.SetParent(holder);
				((Component)col).gameObject.transform.localPosition = new Vector3(0f, 0f, ((Component)col).gameObject.transform.localPosition.z);
				((Component)col).gameObject.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
			}
		}

		public void OnTriggerExit(Collider col)
		{
			if (((Object)((Component)col).gameObject).name == "BarrelBrush(Clone)")
			{
				cd = 0.5f;
				((Component)col).gameObject.transform.SetParent((Transform)null);
			}
		}

		private void Start()
		{
		}

		private void Update()
		{
		}
	}
	public class maufunctions : MonoBehaviour
	{
		public Handgun gun;

		public DisableInterfaceAndcolliders diac;

		public float malf;

		public float malfB;

		public Material mat1;

		public Material mat2;

		public Material matB;

		public Material mat3;

		public GameObject exp;

		public Transform exppos;

		public GameObject particle;

		public float wetness = 0f;

		public float cd = 0.5f;

		public AudioEvent sweep;

		public void OnCollisionStay(Collision col)
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			if (!(((Object)col.gameObject).name == "TuthBrush") && !(((Object)col.gameObject).name == "ToothBrush(Clone)"))
			{
				return;
			}
			Vector3 relativeVelocity = col.relativeVelocity;
			if (((Vector3)(ref relativeVelocity)).magnitude > 0.1f && wetness > 0f)
			{
				cd -= Time.deltaTime;
				if (cd < 0f)
				{
					cd = 0.5f;
					wetness -= Random.Range(0.5f, 1f);
					malf += Random.Range(0.1f, 0.25f);
					Object.Instantiate<GameObject>(particle, ((Component)this).transform.position, ((Component)this).transform.rotation);
					SM.PlayGenericSound(sweep, ((Component)this).transform.position);
				}
			}
			else
			{
				cd = 0.5f;
			}
		}

		public void OnCollisionExit(Collision col)
		{
			if (((Object)col.gameObject).name == "TuthBrush" || ((Object)col.gameObject).name == "ToothBrush(Clone)")
			{
				cd = 0.5f;
			}
		}

		private void Start()
		{
			malf = Random.Range(75, 100);
			malfB = Random.Range(75, 100);
		}

		private void OnShotFired(FVRFireArm firearm)
		{
			if ((Object)(object)firearm == (Object)(object)gun)
			{
				malfB -= 0.1f;
				if (malf >= 10f)
				{
					malf -= Random.Range(0.5f, 2f);
				}
				else if (malf < 10f)
				{
					malf -= Random.Range(0f, 0.5f);
				}
			}
		}

		private void Awake()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Expected O, but got Unknown
			GM.CurrentSceneSettings.ShotFiredEvent += new ShotFired(OnShotFired);
		}

		private void Update()
		{
			//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01af: Expected O, but got Unknown
			//IL_0212: Unknown result type (might be due to invalid IL or missing references)
			//IL_021d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0228: Unknown result type (might be due to invalid IL or missing references)
			//IL_027f: Unknown result type (might be due to invalid IL or missing references)
			//IL_028f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0752: Unknown result type (might be due to invalid IL or missing references)
			//IL_075e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0791: Unknown result type (might be due to invalid IL or missing references)
			//IL_079d: Unknown result type (might be due to invalid IL or missing references)
			//IL_07d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_07dd: Unknown result type (might be due to invalid IL or missing references)
			if (wetness > 100f)
			{
				wetness = 100f;
			}
			else if (wetness < 0f)
			{
				wetness = 0f;
			}
			matB.SetFloat("_DetailWeight", 1f - malfB * 0.01f);
			mat1.SetFloat("_WetWeight", wetness * 0.01f);
			mat2.SetFloat("_WetWeight", wetness * 0.01f);
			mat3.SetFloat("_WetWeight", wetness * 0.01f);
			mat1.SetFloat("_DetailWeight", 1f - malf * 0.01f);
			mat2.SetFloat("_DetailWeight", 1f - malf * 0.01f);
			mat1.SetFloat("_DecalWeight", 1f - malf * 0.01f);
			mat2.SetFloat("_DecalWeight", 1f - malf * 0.01f);
			if (malfB < 0f)
			{
				malfB = 0f;
			}
			else if (malfB > 100f)
			{
				malfB = 100f;
			}
			if (malf < 0f)
			{
				malf = 0f;
				GM.CurrentSceneSettings.ShotFiredEvent -= new ShotFired(OnShotFired);
				((FVRPhysicalObject)gun).Harnessable = false;
				((FVRPhysicalObject)gun).m_isHardnessed = false;
				if ((Object)(object)((FVRPhysicalObject)gun).m_quickbeltSlot != (Object)null)
				{
					((FVRPhysicalObject)gun).m_quickbeltSlot.CurObject = null;
					((FVRPhysicalObject)gun).m_quickbeltSlot = null;
				}
				gun.Chamber.EjectRound(gun.RoundPos_Ejection.position, gun.RoundEjectionSpeed, gun.RoundEjectionSpin, false);
				gun.Chamber.IsAccessible = false;
				gun.Chamber.IsManuallyChamberable = false;
				((FVRInteractiveObject)gun).IsSimpleInteract = true;
				((FVRPhysicalObject)gun).DistantGrabbable = false;
				Object.Instantiate<GameObject>(exp, ((Component)exppos).transform.position, ((Component)exppos).transform.rotation);
				((FVRInteractiveObject)gun).ForceBreakInteraction();
				if (diac.barrel.HasAttachmentsOnIt())
				{
					((FVRInteractiveObject)diac.barrel.AttachmentsList[0]).IsSimpleInteract = true;
					((FVRPhysicalObject)diac.barrel.AttachmentsList[0]).DistantGrabbable = false;
					diac.barrel.AttachmentsList[0].DetachFromMount();
				}
				if (diac.spring.HasAttachmentsOnIt())
				{
					((FVRInteractiveObject)diac.spring.AttachmentsList[0]).IsSimpleInteract = true;
					((FVRPhysicalObject)diac.spring.AttachmentsList[0]).DistantGrabbable = false;
					diac.spring.AttachmentsList[0].DetachFromMount();
				}
				if (diac.slide.HasAttachmentsOnIt())
				{
					((FVRInteractiveObject)diac.slide.AttachmentsList[0]).IsSimpleInteract = true;
					((FVRPhysicalObject)diac.slide.AttachmentsList[0]).DistantGrabbable = false;
					diac.slide.AttachmentsList[0].DetachFromMount();
				}
				if (diac.trigger.HasAttachmentsOnIt())
				{
					((FVRInteractiveObject)diac.trigger.AttachmentsList[0]).IsSimpleInteract = true;
					((FVRPhysicalObject)diac.trigger.AttachmentsList[0]).DistantGrabbable = false;
					diac.trigger.AttachmentsList[0].DetachFromMount();
				}
				if (diac.safety.HasAttachmentsOnIt())
				{
					((FVRInteractiveObject)diac.safety.AttachmentsList[0]).IsSimpleInteract = true;
					((FVRPhysicalObject)diac.safety.AttachmentsList[0]).DistantGrabbable = false;
					diac.safety.AttachmentsList[0].DetachFromMount();
				}
				if (diac.hammer.HasAttachmentsOnIt())
				{
					((FVRInteractiveObject)diac.hammer.AttachmentsList[0]).IsSimpleInteract = true;
					((FVRPhysicalObject)diac.hammer.AttachmentsList[0]).DistantGrabbable = false;
					diac.hammer.AttachmentsList[0].DetachFromMount();
				}
				if (diac.hammerstop.HasAttachmentsOnIt())
				{
					((FVRInteractiveObject)diac.hammerstop.AttachmentsList[0]).IsSimpleInteract = true;
					((FVRPhysicalObject)diac.hammerstop.AttachmentsList[0]).DistantGrabbable = false;
					diac.hammerstop.AttachmentsList[0].DetachFromMount();
				}
				if (diac.sliderelease.HasAttachmentsOnIt())
				{
					((FVRInteractiveObject)diac.sliderelease.AttachmentsList[0]).IsSimpleInteract = true;
					((FVRPhysicalObject)diac.sliderelease.AttachmentsList[0]).DistantGrabbable = false;
					diac.sliderelease.AttachmentsList[0].DetachFromMount();
				}
				if (diac.lever.HasAttachmentsOnIt())
				{
					if (((FVRPhysicalObject)diac.lever.AttachmentsList[0]).AttachmentMounts[0].HasAttachmentsOnIt())
					{
						((FVRInteractiveObject)((FVRPhysicalObject)diac.lever.AttachmentsList[0]).AttachmentsList[0]).IsSimpleInteract = true;
						((FVRPhysicalObject)((FVRPhysicalObject)diac.lever.AttachmentsList[0]).AttachmentsList[0]).DistantGrabbable = false;
						((FVRPhysicalObject)diac.lever.AttachmentsList[0]).AttachmentsList[0].DetachFromMount();
					}
					((FVRInteractiveObject)diac.lever.AttachmentsList[0]).IsSimpleInteract = true;