Decompiled source of MW19 Airstrike Binocular v1.0.3

MW19_Airstrike_Binocular.dll

Decompiled a week ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Logging;
using FistVR;
using HarmonyLib;
using OpenScripts2;
using OtherLoader;
using Sodalite;
using Sodalite.Api;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using theWNbotMods;

[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 theWNbotMods
{
	public class RemoteFire : FVRPhysicalObject
	{
		[Header("Binding")]
		[Tooltip("The firearm to control. Can be assigned in Inspector or at runtime via BindFirearm().")]
		public FVRFireArm targetFirearm;

		[Tooltip("If true and targetFirearm is null, will try to auto-find a FVRFireArm on the same GameObject or its children in Start().")]
		public bool autoFindFirearm = true;

		[Header("Trigger Settings")]
		[Tooltip("If true, a single TriggerDown will attempt a single fire call.")]
		public bool fireOnTriggerDown = true;

		[Tooltip("If true, holding trigger will repeatedly call the fire method each frame while held (use with caution).")]
		public bool continuousWhileHeld = false;

		[Header("Debug")]
		[Tooltip("In Inspector, toggle to simulate a trigger press (auto-resets).")]
		public bool DebugTriggerOnce = false;

		private bool _wasTriggerHeld = false;

		private void Start()
		{
			if ((Object)(object)targetFirearm == (Object)null && autoFindFirearm)
			{
				targetFirearm = ((Component)this).GetComponentInChildren<FVRFireArm>();
			}
		}

		private void OnValidate()
		{
			if (!Application.isPlaying && DebugTriggerOnce)
			{
				DebugTriggerOnce = false;
			}
		}

		private void Update()
		{
			if (DebugTriggerOnce)
			{
				DebugTriggerOnce = false;
				TryTriggerFire();
			}
			if (!((Object)(object)((FVRInteractiveObject)this).m_hand != (Object)null))
			{
				return;
			}
			if (fireOnTriggerDown && ((FVRInteractiveObject)this).m_hand.Input.TriggerDown)
			{
				TryTriggerFire();
			}
			if (continuousWhileHeld)
			{
				bool triggerPressed = ((FVRInteractiveObject)this).m_hand.Input.TriggerPressed;
				if (triggerPressed && !_wasTriggerHeld)
				{
					TryTriggerFire();
				}
				else if (triggerPressed && _wasTriggerHeld)
				{
					TryTriggerFire();
				}
				_wasTriggerHeld = triggerPressed;
			}
		}

		public void BindFirearm(FVRFireArm firearm)
		{
			targetFirearm = firearm;
		}

		public void UnbindFirearm()
		{
			targetFirearm = null;
		}

		private void TryTriggerFire()
		{
			if ((Object)(object)targetFirearm == (Object)null)
			{
				return;
			}
			Type type = ((object)targetFirearm).GetType();
			MethodInfo method = type.GetMethod("Fire", BindingFlags.Instance | BindingFlags.Public);
			if ((object)method != null)
			{
				try
				{
					method.Invoke(targetFirearm, null);
					return;
				}
				catch (Exception)
				{
				}
			}
			MethodInfo method2 = type.GetMethod("DropHammer", BindingFlags.Instance | BindingFlags.Public);
			if ((object)method2 != null)
			{
				try
				{
					method2.Invoke(targetFirearm, null);
					return;
				}
				catch (Exception)
				{
				}
			}
			MethodInfo method3 = type.GetMethod("CockHammer", BindingFlags.Instance | BindingFlags.Public);
			if ((object)method3 != null)
			{
				try
				{
					ParameterInfo[] parameters = method3.GetParameters();
					if (parameters.Length == 1 && (object)parameters[0].ParameterType == typeof(bool))
					{
						method3.Invoke(targetFirearm, new object[1] { true });
					}
					else
					{
						method3.Invoke(targetFirearm, null);
					}
					method2?.Invoke(targetFirearm, null);
					return;
				}
				catch (Exception)
				{
				}
			}
			try
			{
				((Component)targetFirearm).gameObject.SendMessage("Fire", (SendMessageOptions)1);
			}
			catch (Exception)
			{
			}
		}
	}
	public class AC130TabletLeftHand : FVRInteractiveObject
	{
		[Header("平板主控制器")]
		public AC130TabletRightHand tabletController;

		[Header("干扰弹 Prefab")]
		public GameObject countermeasurePrefab;

		[Header("Debug 模拟输入")]
		public bool SimTrigger = false;

		public bool SimStickLeft = false;

		public bool SimStickRight = false;

		public bool SimStickUp = false;

		public bool SimStickDown = false;

		private Vector2 _lAxes;

		public override void UpdateInteraction(FVRViveHand hand)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Invalid comparison between Unknown and I4
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Invalid comparison between Unknown and I4
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: 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_0028: Invalid comparison between Unknown and I4
			//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)
			((FVRInteractiveObject)this).UpdateInteraction(hand);
			if ((int)hand.HandSource != 1)
			{
				return;
			}
			if ((int)hand.CMode == 3 || (int)hand.CMode == 1)
			{
				_lAxes = hand.Input.Secondary2AxisInputAxes;
			}
			else
			{
				_lAxes = hand.Input.TouchpadAxes;
			}
			if (SimStickLeft)
			{
				_lAxes.x = -1f;
				SimStickLeft = false;
			}
			if (SimStickRight)
			{
				_lAxes.x = 1f;
				SimStickRight = false;
			}
			if (SimStickUp)
			{
				_lAxes.y = 1f;
				SimStickUp = false;
			}
			if (SimStickDown)
			{
				_lAxes.y = -1f;
				SimStickDown = false;
			}
			if (_lAxes.x > 0.8f)
			{
				tabletController.CurrentIndex++;
			}
			else if (_lAxes.x < -0.8f)
			{
				tabletController.CurrentIndex--;
			}
			if (hand.Input.TriggerDown || SimTrigger)
			{
				if ((Object)(object)countermeasurePrefab != (Object)null)
				{
					countermeasurePrefab.SetActive(true);
				}
				SimTrigger = false;
			}
		}
	}
	public class AC130TabletRightHand : FVRPhysicalObject
	{
		[Header("炮艇控制器")]
		public OrbitalStrikeController[] strikeControllers;

		public GameObject[] cannonUIPrefabs;

		[Header("摄像头角度限制")]
		public Transform cameraPivot;

		public float yawLimit = 60f;

		public float pitchLimit = 30f;

		public float rotationSpeed = 2f;

		[Header("Debug 模拟输入")]
		public bool SimTrigger = false;

		public bool SimStickLeft = false;

		public bool SimStickRight = false;

		public bool SimStickUp = false;

		public bool SimStickDown = false;

		private Vector2 _rAxes;

		private int currentIndex = 0;

		public int CurrentIndex
		{
			get
			{
				return currentIndex;
			}
			set
			{
				currentIndex = Mathf.Clamp(value, 0, strikeControllers.Length - 1);
				UpdateUI();
			}
		}

		public override void UpdateInteraction(FVRViveHand hand)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Invalid comparison between Unknown and I4
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Invalid comparison between Unknown and I4
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: 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_0028: Invalid comparison between Unknown and I4
			//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_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: 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)
			((FVRPhysicalObject)this).UpdateInteraction(hand);
			if ((int)hand.HandSource != 2)
			{
				return;
			}
			if ((int)hand.CMode == 3 || (int)hand.CMode == 1)
			{
				_rAxes = hand.Input.Secondary2AxisInputAxes;
			}
			else
			{
				_rAxes = hand.Input.TouchpadAxes;
			}
			if (SimStickLeft)
			{
				_rAxes.x = -1f;
				SimStickLeft = false;
			}
			if (SimStickRight)
			{
				_rAxes.x = 1f;
				SimStickRight = false;
			}
			if (SimStickUp)
			{
				_rAxes.y = 1f;
				SimStickUp = false;
			}
			if (SimStickDown)
			{
				_rAxes.y = -1f;
				SimStickDown = false;
			}
			float num = Mathf.Clamp(cameraPivot.localEulerAngles.y + _rAxes.x * rotationSpeed, 0f - yawLimit, yawLimit);
			float num2 = Mathf.Clamp(cameraPivot.localEulerAngles.x - _rAxes.y * rotationSpeed, 0f - pitchLimit, pitchLimit);
			cameraPivot.localRotation = Quaternion.Euler(num2, num, 0f);
			if (!hand.Input.TriggerDown && !SimTrigger)
			{
				return;
			}
			if (strikeControllers != null && strikeControllers.Length > 0)
			{
				OrbitalStrikeController orbitalStrikeController = strikeControllers[currentIndex];
				if ((Object)(object)orbitalStrikeController != (Object)null)
				{
					orbitalStrikeController.shouldFire = true;
				}
			}
			SimTrigger = false;
		}

		public void UpdateUI()
		{
			for (int i = 0; i < cannonUIPrefabs.Length; i++)
			{
				if ((Object)(object)cannonUIPrefabs[i] != (Object)null)
				{
					cannonUIPrefabs[i].SetActive(i == currentIndex);
				}
			}
		}

		public void SetCurrentIndex(int index)
		{
			CurrentIndex = index;
		}
	}
	public class AirstrikeBinocular : FVRPhysicalObject
	{
		[Header("望远镜镜头中心(Ray 起点)")]
		public Transform RayOrigin;

		[Header("默认空袭 Prefab")]
		public GameObject defaultAirstrikePrefab;

		[Header("最大射程")]
		public float MaxDistance = 500f;

		[Header("可命中的层(地面、环境等)")]
		public LayerMask HitLayers;

		[Header("菜单 UI Canvas")]
		public GameObject menuCanvas;

		[Header("音效播放")]
		public AudioSource audioSource;

		private GameObject currentAirstrikePrefab;

		private AudioClip[] currentAirstrikeClips;

		[Header("调试信息")]
		[SerializeField]
		private string currentTypeName = "None";

		[Header("部署方向设置")]
		[SerializeField]
		private Vector3 rotationOffsetEuler = Vector3.zero;

		[Header("冷却时间设置")]
		[SerializeField]
		private float cooldownTime = 5f;

		private float lastDeployTime = -999f;

		[Header("调试开关")]
		[SerializeField]
		private bool debugTrigger = false;

		private void Start()
		{
			currentAirstrikePrefab = defaultAirstrikePrefab;
			currentTypeName = ((!((Object)(object)defaultAirstrikePrefab != (Object)null)) ? "None" : ((Object)defaultAirstrikePrefab).name);
			if ((Object)(object)menuCanvas != (Object)null)
			{
				menuCanvas.SetActive(false);
			}
			Debug.Log((object)("AirstrikeBinocular当前空袭类型: " + currentTypeName));
		}

		private void Update()
		{
			if (debugTrigger)
			{
				Debug.Log((object)("调试Inspector触发空袭 → " + currentTypeName));
				DeployAirstrike(null);
				debugTrigger = false;
			}
		}

		public void ToggleMenu(bool isOpen)
		{
			if ((Object)(object)menuCanvas != (Object)null)
			{
				menuCanvas.SetActive(isOpen);
			}
		}

		public void SetAirstrikeType(GameObject prefab, AudioClip[] clips)
		{
			currentAirstrikePrefab = prefab;
			currentAirstrikeClips = clips;
			currentTypeName = ((!((Object)(object)prefab != (Object)null)) ? "None" : ((Object)prefab).name);
			Debug.Log((object)("当前空袭类型切换为: " + currentTypeName));
		}

		public override void UpdateInteraction(FVRViveHand hand)
		{
			((FVRPhysicalObject)this).UpdateInteraction(hand);
			if (hand.Input.TriggerFloat > 0.8f)
			{
				DeployAirstrike(hand);
			}
		}

		public void DeployAirstrike(FVRViveHand hand)
		{
			//IL_0058: 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_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: 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_00b5: 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_00bb: 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_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: 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_00e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_010c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: 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_00b4: Unknown result type (might be due to invalid IL or missing references)
			RaycastHit val = default(RaycastHit);
			if (Time.time - lastDeployTime < cooldownTime)
			{
				Debug.Log((object)("冷却中,剩余时间: " + (cooldownTime - (Time.time - lastDeployTime)).ToString("F1") + " 秒"));
			}
			else if (Physics.Raycast(RayOrigin.position, RayOrigin.forward, ref val, MaxDistance, LayerMask.op_Implicit(HitLayers)))
			{
				Vector3 forward = RayOrigin.forward;
				forward.y = 0f;
				if (((Vector3)(ref forward)).sqrMagnitude < 0.001f)
				{
					forward = Vector3.forward;
				}
				Quaternion val2 = Quaternion.LookRotation(forward, Vector3.up);
				Quaternion val3 = val2 * Quaternion.Euler(rotationOffsetEuler);
				Object.Instantiate<GameObject>(currentAirstrikePrefab, ((RaycastHit)(ref val)).point, val3);
				Debug.Log((object)string.Concat("释放空袭: ", currentTypeName, " 于位置 ", ((RaycastHit)(ref val)).point, ",旋转: ", ((Quaternion)(ref val3)).eulerAngles));
				lastDeployTime = Time.time;
				if ((Object)(object)audioSource != (Object)null && currentAirstrikeClips != null && currentAirstrikeClips.Length > 0)
				{
					AudioClip val4 = currentAirstrikeClips[Random.Range(0, currentAirstrikeClips.Length)];
					audioSource.PlayOneShot(val4);
				}
				if ((Object)(object)hand != (Object)null)
				{
					hand.Buzz(hand.Buzzer.Buzz_OnHoverInteractive);
				}
			}
		}
	}
	public class AirstrikeDebugger : MonoBehaviour
	{
		[Header("移动速度")]
		public float moveSpeed = 5f;

		[Header("鼠标灵敏度")]
		public float mouseSensitivity = 2f;

		[Header("头部对象(联动 UILookAtPlayer)")]
		public Transform headTransform;

		private float rotationX = 0f;

		private float rotationY = 0f;

		private void Start()
		{
			Cursor.lockState = (CursorLockMode)1;
			Cursor.visible = false;
		}

		private void Update()
		{
			//IL_001d: 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_002e: 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_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: 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_00df: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_010c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0116: Unknown result type (might be due to invalid IL or missing references)
			//IL_011b: 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)
			float axis = Input.GetAxis("Horizontal");
			float axis2 = Input.GetAxis("Vertical");
			Vector3 val = (((Component)this).transform.right * axis + ((Component)this).transform.forward * axis2) * moveSpeed * Time.deltaTime;
			Transform transform = ((Component)this).transform;
			transform.position += val;
			float num = Input.GetAxis("Mouse X") * mouseSensitivity;
			float num2 = Input.GetAxis("Mouse Y") * mouseSensitivity;
			rotationY += num;
			rotationX -= num2;
			rotationX = Mathf.Clamp(rotationX, -80f, 80f);
			((Component)this).transform.rotation = Quaternion.Euler(rotationX, rotationY, 0f);
			if ((Object)(object)headTransform != (Object)null)
			{
				headTransform.position = ((Component)this).transform.position + Vector3.up * 1.6f;
				headTransform.rotation = ((Component)this).transform.rotation;
			}
		}
	}
	public class ChangeTypeWhenAwake : MonoBehaviour
	{
		public GameObject airstrikePrefab;

		public AudioClip[] airstrikeClips;

		public AirstrikeBinocular binocular;

		private void OnEnable()
		{
			if ((Object)(object)binocular != (Object)null && (Object)(object)airstrikePrefab != (Object)null)
			{
				binocular.SetAirstrikeType(airstrikePrefab, airstrikeClips);
			}
		}
	}
}
public class ScopeScript : MonoBehaviour
{
	[SerializeField]
	[Range(0f, 1f)]
	private float zoom;

	[SerializeField]
	private float minFOV;

	[SerializeField]
	private float maxFOV;

	[SerializeField]
	private Camera myCamera;

	[SerializeField]
	private Transform myCrossHair;

	[SerializeField]
	private float minCrossHairScale;

	[SerializeField]
	private float maxCrossHairScale;

	[SerializeField]
	private Material imageMat;

	[SerializeField]
	private float minDistortion;

	[SerializeField]
	private float maxDistortion;

	private void Start()
	{
	}

	private void Update()
	{
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		myCamera.fieldOfView = Mathf.Lerp(maxFOV, minFOV, zoom);
		float num = Mathf.Lerp(minCrossHairScale, maxCrossHairScale, zoom);
		myCrossHair.localScale = new Vector3(num, num, 1f);
		imageMat.SetFloat("_Constant", Mathf.Lerp(minDistortion, maxDistortion, zoom));
	}
}
namespace theWNbotMods
{
	public class scopeFocusScript : MonoBehaviour
	{
		[Header("眼睛位置(VR Head 或 Debug Head)")]
		[SerializeField]
		private Transform eye;

		[Header("瞄具参考点(通常是镜片中心)")]
		[SerializeField]
		private Transform eyeDistPos;

		[Header("聚焦参数")]
		[SerializeField]
		private float fadedDist = 0.2f;

		[SerializeField]
		private float maxAngle = 15f;

		[Header("材质控制")]
		[SerializeField]
		private Material focusMat;

		[SerializeField]
		private float minMult = 0f;

		[SerializeField]
		private float maxMult = 1f;

		private Vector2 posInput;

		private float circleCenterMovement;

		private void LateUpdate()
		{
			//IL_003f: 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_0077: 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_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: 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_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_00d3: 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)
			//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)
			if (!((Object)(object)eye == (Object)null) && !((Object)(object)eyeDistPos == (Object)null) && !((Object)(object)focusMat == (Object)null))
			{
				float num = Vector3.Distance(eyeDistPos.position, eye.position);
				float num2 = num / fadedDist;
				num2 = Mathf.Clamp(num2, minMult, maxMult);
				Vector3 val = ((Component)this).transform.position - eye.position;
				float num3 = Vector3.Angle(val, ((Component)this).transform.forward);
				circleCenterMovement = num3 / maxAngle;
				Vector3 val2 = ((Component)this).transform.InverseTransformDirection(val);
				Vector2 val3 = default(Vector2);
				((Vector2)(ref val3))..ctor(val2.x, val2.y);
				posInput = ((Vector2)(ref val3)).normalized * circleCenterMovement / 2f;
				focusMat.SetFloat("_Mult", num2);
				focusMat.SetFloat("_XPos", 0.5f + posInput.x);
				focusMat.SetFloat("_YPos", 0.5f + posInput.y);
			}
		}
	}
}
[HelpURL("https://geom.io/bakery/wiki/index.php?title=Manual#Bakery_Light_Filter")]
[DisallowMultipleComponent]
public class BakeryLightFilter : MonoBehaviour
{
	public Texture2D texture;

	[HideInInspector]
	public int lmid = 0;
}
namespace theWNbotMods
{
	public class CQCFists : MonoBehaviour
	{
		[Header("CQC Settings")]
		public float GrabRange = 1f;

		public float FollowStrength = 10f;

		public float ThrowForce = 10f;

		public float DownSwingThreshold = 1.2f;

		public float ReleaseDistance = 0.8f;

		[Header("Audio Settings")]
		public AudioClip CQC_GrabSFX;

		public AudioClip CQC_ThrowSFX;

		[Header("Effect Durations")]
		public float HostageConfuseDuration = 999f;

		public float UnconsciousDuration = 5f;

		private FVRViveHand hand;

		private bool isGrabbing = false;

		private bool readyToThrow = false;

		private SosigLink grabbedLink = null;

		private Vector3 grabOffset;

		private Vector3 initialGrabPos;

		private void Update()
		{
			if (!((Component)this).gameObject.activeSelf)
			{
				return;
			}
			hand = FindHand();
			if (!((Object)(object)hand == (Object)null))
			{
				float triggerFloat = hand.Input.TriggerFloat;
				if (triggerFloat > 0.75f && !isGrabbing)
				{
					TryGrabNearestLink();
				}
				if (isGrabbing && (Object)(object)grabbedLink != (Object)null)
				{
					FollowHandMovement();
					DetectDownSwing();
					DetectPullRelease();
				}
				if (isGrabbing && triggerFloat <= 0.75f)
				{
					PerformThrow();
				}
			}
		}

		private FVRViveHand FindHand()
		{
			if ((Object)(object)((Component)this).transform.parent == (Object)(object)((Component)GM.CurrentPlayerBody.LeftHand).transform)
			{
				return GM.CurrentMovementManager.Hands[0];
			}
			if ((Object)(object)((Component)this).transform.parent == (Object)(object)((Component)GM.CurrentPlayerBody.RightHand).transform)
			{
				return GM.CurrentMovementManager.Hands[1];
			}
			return null;
		}

		private void TryGrabNearestLink()
		{
			//IL_0028: 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_0094: 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_00ba: 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_00fa: 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_0129: Unknown result type (might be due to invalid IL or missing references)
			SosigLink[] array = Object.FindObjectsOfType<SosigLink>();
			float num = float.PositiveInfinity;
			SosigLink val = null;
			SosigLink[] array2 = array;
			foreach (SosigLink val2 in array2)
			{
				float num2 = Vector3.Distance(((Component)val2).transform.position, ((Component)this).transform.position);
				if (num2 < GrabRange && num2 < num)
				{
					num = num2;
					val = val2;
				}
			}
			if (!((Object)(object)val != (Object)null))
			{
				return;
			}
			grabbedLink = val;
			isGrabbing = true;
			grabOffset = ((Component)grabbedLink).transform.position - ((Component)this).transform.position;
			initialGrabPos = ((Component)grabbedLink).transform.position;
			Sosig s = val.S;
			if ((Object)(object)s != (Object)null)
			{
				s.m_isConfused = true;
				s.m_confusedTime = HostageConfuseDuration;
				s.SetBodyPose((SosigBodyPose)0);
				s.ObjectUsageFocus = (SosigObjectUsageFocus)0;
				if ((Object)(object)s.Agent != (Object)null)
				{
					((Behaviour)s.Agent).enabled = false;
				}
				s.SetCurrentOrder((SosigOrder)0);
				s.FallbackOrder = (SosigOrder)0;
			}
			if ((Object)(object)CQC_GrabSFX != (Object)null)
			{
				AudioSource.PlayClipAtPoint(CQC_GrabSFX, ((Component)val).transform.position);
			}
		}

		private void FollowHandMovement()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//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_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_0040: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = ((Component)this).transform.position + grabOffset;
			((Component)grabbedLink).transform.position = Vector3.Lerp(((Component)grabbedLink).transform.position, val, Time.deltaTime * FollowStrength);
		}

		private void DetectDownSwing()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: 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)
			Vector3 throwLinearVelWorld = hand.GetThrowLinearVelWorld();
			if (Vector3.Dot(((Vector3)(ref throwLinearVelWorld)).normalized, Vector3.down) > 0.6f && ((Vector3)(ref throwLinearVelWorld)).magnitude > DownSwingThreshold)
			{
				readyToThrow = true;
			}
		}

		private void DetectPullRelease()
		{
			//IL_000c: 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_003a: 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_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: 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_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			float num = Vector3.Distance(((Component)grabbedLink).transform.position, ((Component)this).transform.position);
			if (!(num > ReleaseDistance))
			{
				return;
			}
			Vector3 val = ((Component)grabbedLink).transform.position - initialGrabPos;
			Vector3 normalized = ((Vector3)(ref val)).normalized;
			Sosig s = grabbedLink.S;
			if ((Object)(object)s != (Object)null && (Object)(object)s.CoreRB != (Object)null)
			{
				s.CoreRB.AddForce(normalized * ThrowForce, (ForceMode)2);
				s.KnockUnconscious(UnconsciousDuration);
				if ((Object)(object)CQC_ThrowSFX != (Object)null)
				{
					AudioSource.PlayClipAtPoint(CQC_ThrowSFX, ((Component)s).transform.position);
				}
			}
			ResetCQC();
		}

		private void PerformThrow()
		{
			//IL_0053: 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_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_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			if (!readyToThrow || (Object)(object)grabbedLink == (Object)null)
			{
				ResetCQC();
				return;
			}
			Sosig s = grabbedLink.S;
			if ((Object)(object)s == (Object)null)
			{
				ResetCQC();
				return;
			}
			Vector3 throwLinearVelWorld = hand.GetThrowLinearVelWorld();
			Vector3 normalized = ((Vector3)(ref throwLinearVelWorld)).normalized;
			if ((Object)(object)s.CoreRB != (Object)null)
			{
				s.CoreRB.AddForce(normalized * ThrowForce, (ForceMode)2);
			}
			s.KnockUnconscious(UnconsciousDuration);
			if ((Object)(object)CQC_ThrowSFX != (Object)null)
			{
				AudioSource.PlayClipAtPoint(CQC_ThrowSFX, ((Component)s).transform.position);
			}
			ResetCQC();
		}

		private void ResetCQC()
		{
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			isGrabbing = false;
			readyToThrow = false;
			if ((Object)(object)grabbedLink != (Object)null && (Object)(object)grabbedLink.S != (Object)null)
			{
				Sosig s = grabbedLink.S;
				s.m_isConfused = false;
				s.ObjectUsageFocus = (SosigObjectUsageFocus)1;
				if ((Object)(object)s.Agent != (Object)null)
				{
					((Behaviour)s.Agent).enabled = true;
				}
				s.SetCurrentOrder((SosigOrder)9);
				s.FallbackOrder = (SosigOrder)9;
			}
			grabbedLink = null;
		}

		private void OnDrawGizmosSelected()
		{
			//IL_0001: 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_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			Gizmos.color = Color.red;
			Gizmos.DrawWireSphere(((Component)this).transform.position, GrabRange);
			Gizmos.color = Color.yellow;
			Gizmos.DrawWireSphere(((Component)this).transform.position, ReleaseDistance);
		}
	}
	public class CQCFistsSystem : MonoBehaviour
	{
		[Header("Prefabs")]
		public GameObject CQCHandLeftPrefab;

		public GameObject CQCHandRightPrefab;

		private GameObject leftHandObj;

		private GameObject rightHandObj;

		private void Update()
		{
			if ((Object)(object)GM.CurrentPlayerBody == (Object)null)
			{
				return;
			}
			if ((Object)(object)GM.CurrentMovementManager.Hands[0].m_currentInteractable == (Object)null && GM.CurrentMovementManager.Hands[0].Input.TriggerPressed)
			{
				if ((Object)(object)leftHandObj == (Object)null)
				{
					leftHandObj = Object.Instantiate<GameObject>(CQCHandLeftPrefab, ((Component)GM.CurrentPlayerBody.LeftHand).transform);
				}
				leftHandObj.SetActive(true);
			}
			else if ((Object)(object)leftHandObj != (Object)null)
			{
				leftHandObj.SetActive(false);
			}
			if ((Object)(object)GM.CurrentMovementManager.Hands[1].m_currentInteractable == (Object)null && GM.CurrentMovementManager.Hands[1].Input.TriggerPressed)
			{
				if ((Object)(object)rightHandObj == (Object)null)
				{
					rightHandObj = Object.Instantiate<GameObject>(CQCHandRightPrefab, ((Component)GM.CurrentPlayerBody.RightHand).transform);
				}
				rightHandObj.SetActive(true);
			}
			else if ((Object)(object)rightHandObj != (Object)null)
			{
				rightHandObj.SetActive(false);
			}
		}

		private void OnDestroy()
		{
			if ((Object)(object)leftHandObj != (Object)null)
			{
				Object.Destroy((Object)(object)leftHandObj);
			}
			if ((Object)(object)rightHandObj != (Object)null)
			{
				Object.Destroy((Object)(object)rightHandObj);
			}
		}
	}
	[BepInProcess("h3vr.exe")]
	[BepInPlugin("theWNbotMods.CQCFistsToggle", "CQCFistsToggle", "1.0.0")]
	public class CQCFistsToggle : BaseUnityPlugin
	{
		private static class CQCFistsPatch
		{
			[HarmonyPatch(typeof(FVRWristMenu2), "Awake")]
			[HarmonyPostfix]
			public static void MenuButton(FVRWristMenu2 __instance)
			{
				//IL_0090: Unknown result type (might be due to invalid IL or missing references)
				//IL_009a: Expected O, but got Unknown
				//IL_0095: Unknown result type (might be due to invalid IL or missing references)
				//IL_009f: Expected O, but got Unknown
				if ((Object)(object)__instance == (Object)null)
				{
					Logger.LogMessage((object)"No FVRWristMenu2");
					return;
				}
				bool flag = false;
				foreach (WristMenuButton button in WristMenuAPI.Buttons)
				{
					if (button.Text == "CQCFistsToggle")
					{
						flag = true;
						break;
					}
				}
				if (!flag)
				{
					WristMenuAPI.Buttons.Add(new WristMenuButton("CQCFistsToggle", new ButtonClickEvent(ToggleCQCFistsSystem)));
					Logger.LogMessage((object)"CQCFistsToggle button added to wrist menu!");
				}
			}

			public static void ToggleCQCFistsSystem(object sender, ButtonClickEventArgs args)
			{
				GameObject val = GameObject.Find("CQCFistsSystem(Clone)");
				if ((Object)(object)val != (Object)null)
				{
					Logger.LogMessage((object)"CQCFistsSystem found, destroying...");
					Object.Destroy((Object)(object)val);
					return;
				}
				Logger.LogMessage((object)"Spawning CQCFistsSystem from Inspector reference...");
				CQCFistsToggle component = Chainloader.ManagerObject.GetComponent<CQCFistsToggle>();
				if ((Object)(object)component != (Object)null && (Object)(object)component.CQCFistsSystemPrefab != (Object)null)
				{
					GameObject val2 = Object.Instantiate<GameObject>(component.CQCFistsSystemPrefab);
					Object.DontDestroyOnLoad((Object)(object)val2);
					((Object)val2).name = "CQCFistsSystem(Clone)";
				}
				else
				{
					Logger.LogMessage((object)"CQCFistsSystem Prefab not assigned in Inspector!");
				}
			}
		}

		public GameObject CQCFistsSystemPrefab;

		internal static ManualLogSource Logger { get; private set; }

		public void Awake()
		{
			Logger = ((BaseUnityPlugin)this).Logger;
			Harmony.CreateAndPatchAll(typeof(CQCFistsPatch), (string)null);
			Logger.LogMessage((object)"CQCFistsToggle loaded!");
		}
	}
	public class CQCMelee : MonoBehaviour
	{
		[Header("CQC Settings")]
		public float GrabRange = 1f;

		public float FollowStrength = 10f;

		public float ThrowForce = 10f;

		public float DownSwingThreshold = 1.2f;

		public float ReleaseDistance = 0.8f;

		[Header("Audio Settings")]
		public AudioClip CQC_GrabSFX;

		public AudioClip CQC_ThrowSFX;

		[Header("Effect Durations")]
		public float HostageConfuseDuration = 999f;

		public float UnconsciousDuration = 5f;

		[Header("Disable Prefabs on Grab")]
		public GameObject[] disableOnGrab;

		private FVRMeleeWeapon weapon;

		private FVRViveHand hand;

		private bool isGrabbing = false;

		private bool readyToThrow = false;

		private SosigLink grabbedLink = null;

		private Vector3 grabOffset;

		private Vector3 initialGrabPos;

		private void Start()
		{
			weapon = ((Component)this).GetComponent<FVRMeleeWeapon>();
		}

		private void Update()
		{
			if ((Object)(object)weapon == (Object)null || !((FVRInteractiveObject)weapon).IsHeld)
			{
				return;
			}
			hand = ((FVRInteractiveObject)weapon).m_hand;
			if (!((Object)(object)hand == (Object)null))
			{
				float triggerFloat = hand.Input.TriggerFloat;
				if (triggerFloat > 0.75f && !isGrabbing)
				{
					TryGrabNearestLink();
				}
				if (isGrabbing && (Object)(object)grabbedLink != (Object)null)
				{
					FollowWeaponMovement();
					DetectDownSwing();
					DetectPullRelease();
				}
				if (isGrabbing && triggerFloat <= 0.75f)
				{
					PerformThrow();
				}
			}
		}

		private void TryGrabNearestLink()
		{
			//IL_0028: 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_0099: 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_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_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_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_0156: 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)
			SosigLink[] array = Object.FindObjectsOfType<SosigLink>();
			float num = float.PositiveInfinity;
			SosigLink val = null;
			SosigLink[] array2 = array;
			foreach (SosigLink val2 in array2)
			{
				float num2 = Vector3.Distance(((Component)val2).transform.position, ((Component)weapon).transform.position);
				if (num2 < GrabRange && num2 < num)
				{
					num = num2;
					val = val2;
				}
			}
			if (!((Object)(object)val != (Object)null))
			{
				return;
			}
			grabbedLink = val;
			isGrabbing = true;
			grabOffset = ((Component)grabbedLink).transform.position - ((Component)weapon).transform.position;
			initialGrabPos = ((Component)grabbedLink).transform.position;
			Sosig s = val.S;
			if ((Object)(object)s != (Object)null)
			{
				s.m_isConfused = true;
				s.m_confusedTime = HostageConfuseDuration;
				s.SetBodyPose((SosigBodyPose)0);
				s.ObjectUsageFocus = (SosigObjectUsageFocus)0;
				if ((Object)(object)s.Agent != (Object)null)
				{
					((Behaviour)s.Agent).enabled = false;
				}
				s.SetCurrentOrder((SosigOrder)0);
				s.FallbackOrder = (SosigOrder)0;
			}
			if ((Object)(object)CQC_GrabSFX != (Object)null)
			{
				AudioSource.PlayClipAtPoint(CQC_GrabSFX, ((Component)val).transform.position);
			}
			if (disableOnGrab == null)
			{
				return;
			}
			GameObject[] array3 = disableOnGrab;
			foreach (GameObject val3 in array3)
			{
				if ((Object)(object)val3 != (Object)null)
				{
					val3.SetActive(false);
				}
			}
		}

		private void FollowWeaponMovement()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//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_001c: 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_0038: 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)
			Vector3 val = ((Component)weapon).transform.position + grabOffset;
			((Component)grabbedLink).transform.position = Vector3.Lerp(((Component)grabbedLink).transform.position, val, Time.deltaTime * FollowStrength);
		}

		private void DetectDownSwing()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: 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)
			Vector3 throwLinearVelWorld = hand.GetThrowLinearVelWorld();
			if (Vector3.Dot(((Vector3)(ref throwLinearVelWorld)).normalized, Vector3.down) > 0.6f && ((Vector3)(ref throwLinearVelWorld)).magnitude > DownSwingThreshold)
			{
				readyToThrow = true;
			}
		}

		private void DetectPullRelease()
		{
			//IL_000c: 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_003f: 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_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_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			float num = Vector3.Distance(((Component)grabbedLink).transform.position, ((Component)weapon).transform.position);
			if (!(num > ReleaseDistance))
			{
				return;
			}
			Vector3 val = ((Component)grabbedLink).transform.position - initialGrabPos;
			Vector3 normalized = ((Vector3)(ref val)).normalized;
			Sosig s = grabbedLink.S;
			if ((Object)(object)s != (Object)null && (Object)(object)s.CoreRB != (Object)null)
			{
				s.CoreRB.AddForce(normalized * ThrowForce, (ForceMode)2);
				s.KnockUnconscious(UnconsciousDuration);
				if ((Object)(object)CQC_ThrowSFX != (Object)null)
				{
					AudioSource.PlayClipAtPoint(CQC_ThrowSFX, ((Component)s).transform.position);
				}
			}
			ResetCQC();
		}

		private void PerformThrow()
		{
			//IL_0053: 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_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_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			if (!readyToThrow || (Object)(object)grabbedLink == (Object)null)
			{
				ResetCQC();
				return;
			}
			Sosig s = grabbedLink.S;
			if ((Object)(object)s == (Object)null)
			{
				ResetCQC();
				return;
			}
			Vector3 throwLinearVelWorld = hand.GetThrowLinearVelWorld();
			Vector3 normalized = ((Vector3)(ref throwLinearVelWorld)).normalized;
			if ((Object)(object)s.CoreRB != (Object)null)
			{
				s.CoreRB.AddForce(normalized * ThrowForce, (ForceMode)2);
			}
			s.KnockUnconscious(UnconsciousDuration);
			if ((Object)(object)CQC_ThrowSFX != (Object)null)
			{
				AudioSource.PlayClipAtPoint(CQC_ThrowSFX, ((Component)s).transform.position);
			}
			ResetCQC();
		}

		private void ResetCQC()
		{
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			isGrabbing = false;
			readyToThrow = false;
			if ((Object)(object)grabbedLink != (Object)null && (Object)(object)grabbedLink.S != (Object)null)
			{
				Sosig s = grabbedLink.S;
				s.m_isConfused = false;
				s.ObjectUsageFocus = (SosigObjectUsageFocus)1;
				if ((Object)(object)s.Agent != (Object)null)
				{
					((Behaviour)s.Agent).enabled = true;
				}
				s.SetCurrentOrder((SosigOrder)9);
				s.FallbackOrder = (SosigOrder)9;
			}
			grabbedLink = null;
			if (disableOnGrab == null)
			{
				return;
			}
			GameObject[] array = disableOnGrab;
			foreach (GameObject val in array)
			{
				if ((Object)(object)val != (Object)null)
				{
					val.SetActive(true);
				}
			}
		}

		private void OnDrawGizmosSelected()
		{
			//IL_0001: 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_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			Gizmos.color = Color.red;
			Gizmos.DrawWireSphere(((Component)this).transform.position, GrabRange);
			Gizmos.color = Color.yellow;
			Gizmos.DrawWireSphere(((Component)this).transform.position, ReleaseDistance);
		}
	}
	public class CigaretteAttach : MonoBehaviour
	{
		[Header("Attach Settings")]
		public float attachDistance = 0.2f;

		public Vector3 positionOffset = new Vector3(0f, -0.05f, 0.05f);

		public Vector3 rotationOffsetEuler = new Vector3(0f, 0f, 0f);

		[Header("Smoke Settings")]
		public GameObject PuffedSmokePrefab;

		public float puffDelay = 3f;

		public float puffCooldown = 2f;

		public Vector3 smokeOffset = new Vector3(0f, -0.1f, 0.1f);

		[Header("References")]
		public FVRCigarette cigarette;

		[Header("Attach Prefab Control")]
		public GameObject[] enableOnAttach;

		public GameObject[] disableOnAttach;

		[Header("Detach Prefab Control")]
		public GameObject[] enableOnDetach;

		public GameObject[] disableOnDetach;

		private bool isAttachedToHead = false;

		private Transform headTransform;

		private FVRPhysicalObject fvrObject;

		private Rigidbody rb;

		private float puffTimer = 0f;

		private bool inCooldown = false;

		private void Awake()
		{
			if ((Object)(object)GM.CurrentPlayerBody != (Object)null && (Object)(object)GM.CurrentPlayerBody.Head != (Object)null)
			{
				headTransform = GM.CurrentPlayerBody.Head;
			}
			fvrObject = ((Component)this).GetComponent<FVRPhysicalObject>();
			rb = ((Component)this).GetComponent<Rigidbody>();
		}

		private void Update()
		{
			//IL_0029: 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)
			if ((Object)(object)headTransform == (Object)null)
			{
				return;
			}
			if (!isAttachedToHead)
			{
				float num = Vector3.Distance(((Component)this).transform.position, headTransform.position);
				if (num <= attachDistance)
				{
					AttachToHead();
				}
			}
			if (isAttachedToHead)
			{
				if ((Object)(object)fvrObject != (Object)null && ((FVRInteractiveObject)fvrObject).m_isHeld)
				{
					DetachFromHead();
				}
				else
				{
					HandleSmokeLogic();
				}
			}
		}

		private void AttachToHead()
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: 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)
			isAttachedToHead = true;
			((Component)this).transform.SetParent(headTransform);
			((Component)this).transform.localPosition = positionOffset;
			((Component)this).transform.localRotation = Quaternion.Euler(rotationOffsetEuler);
			if ((Object)(object)rb != (Object)null)
			{
				rb.isKinematic = true;
				rb.useGravity = false;
			}
			puffTimer = 0f;
			inCooldown = false;
			GameObject[] array = enableOnAttach;
			foreach (GameObject val in array)
			{
				if ((Object)(object)val != (Object)null)
				{
					val.SetActive(true);
				}
			}
			GameObject[] array2 = disableOnAttach;
			foreach (GameObject val2 in array2)
			{
				if ((Object)(object)val2 != (Object)null)
				{
					val2.SetActive(false);
				}
			}
		}

		private void DetachFromHead()
		{
			isAttachedToHead = false;
			((Component)this).transform.SetParent((Transform)null);
			if ((Object)(object)rb != (Object)null)
			{
				rb.isKinematic = false;
				rb.useGravity = true;
			}
			puffTimer = 0f;
			inCooldown = false;
			GameObject[] array = enableOnDetach;
			foreach (GameObject val in array)
			{
				if ((Object)(object)val != (Object)null)
				{
					val.SetActive(true);
				}
			}
			GameObject[] array2 = disableOnDetach;
			foreach (GameObject val2 in array2)
			{
				if ((Object)(object)val2 != (Object)null)
				{
					val2.SetActive(false);
				}
			}
		}

		private void HandleSmokeLogic()
		{
			//IL_006e: 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_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_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)cigarette == (Object)null || !cigarette.IsBurning())
			{
				return;
			}
			puffTimer += Time.deltaTime;
			if (!inCooldown && puffTimer >= puffDelay)
			{
				if ((Object)(object)PuffedSmokePrefab != (Object)null)
				{
					Vector3 val = headTransform.position + headTransform.TransformVector(smokeOffset);
					Object.Instantiate<GameObject>(PuffedSmokePrefab, val, headTransform.rotation);
				}
				inCooldown = true;
				puffTimer = 0f;
			}
			else if (inCooldown && puffTimer >= puffCooldown)
			{
				inCooldown = false;
				puffTimer = 0f;
			}
		}
	}
	public class CigaretteBox : FVRPhysicalObject
	{
		private bool triggerPressedLastFrame = false;

		private bool isOpen = false;

		private bool isTouching = false;

		private Vector2 initTouch = Vector2.zero;

		private Vector2 LastTouchPoint = Vector2.zero;

		public Transform CaseLid;

		public float openRotationX = 90f;

		public float openRotationY = 0f;

		public float openRotationZ = 0f;

		public float closeRotationX = 0f;

		public float closeRotationY = 0f;

		public float closeRotationZ = 0f;

		public float rotationSpeed = 5f;

		public AudioSource audioSource;

		public AudioClip openSound;

		public AudioClip closeSound;

		public GameObject objectToToggle;

		public List<Transform> Dings;

		public int m_numDings;

		public CigaretteBoxTrigger cigaretteBoxTrigger;

		private Quaternion targetRotation;

		public override void Start()
		{
			//IL_0019: 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)
			CaseLid.localRotation = Quaternion.Euler(closeRotationX, closeRotationY, closeRotationZ);
			targetRotation = CaseLid.localRotation;
		}

		private void Update()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			CaseLid.localRotation = Quaternion.Lerp(CaseLid.localRotation, targetRotation, Time.deltaTime * rotationSpeed);
		}

		public override void UpdateInteraction(FVRViveHand hand)
		{
			//IL_016b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: 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_012b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_0158: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: Unknown result type (might be due to invalid IL or missing references)
			((FVRPhysicalObject)this).UpdateInteraction(hand);
			if (hand.Input.TriggerFloat > 0.8f && !triggerPressedLastFrame && (Object)(object)hand.CurrentInteractable == (Object)(object)this)
			{
				ToggleLid();
				triggerPressedLastFrame = true;
			}
			else if (hand.Input.TriggerFloat < 0.2f)
			{
				triggerPressedLastFrame = false;
			}
			if (hand.IsInStreamlinedMode)
			{
				if (hand.Input.BYButtonDown || hand.Input.AXButtonDown)
				{
					ToggleLid();
				}
				return;
			}
			if (hand.Input.TouchpadTouched && !isTouching && hand.Input.TouchpadAxes != Vector2.zero)
			{
				isTouching = true;
				initTouch = hand.Input.TouchpadAxes;
			}
			if (hand.Input.TouchpadTouchUp && isTouching)
			{
				isTouching = false;
				Vector2 lastTouchPoint = LastTouchPoint;
				float y = (lastTouchPoint - initTouch).y;
				if (y > 0.5f || y < -0.5f)
				{
					ToggleLid();
				}
				initTouch = Vector2.zero;
				lastTouchPoint = Vector2.zero;
			}
			LastTouchPoint = hand.Input.TouchpadAxes;
		}

		private void ToggleLid()
		{
			//IL_004a: 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_004f: Unknown result type (might be due to invalid IL or missing references)
			isOpen = !isOpen;
			targetRotation = (isOpen ? Quaternion.Euler(openRotationX, openRotationY, openRotationZ) : Quaternion.Euler(closeRotationX, closeRotationY, closeRotationZ));
			if (isOpen)
			{
				if ((Object)(object)audioSource != (Object)null && (Object)(object)openSound != (Object)null)
				{
					audioSource.PlayOneShot(openSound);
				}
				if ((Object)(object)objectToToggle != (Object)null)
				{
					objectToToggle.SetActive(true);
				}
				Open();
			}
			else
			{
				if ((Object)(object)audioSource != (Object)null && (Object)(object)closeSound != (Object)null)
				{
					audioSource.PlayOneShot(closeSound);
				}
				if ((Object)(object)objectToToggle != (Object)null)
				{
					objectToToggle.SetActive(false);
				}
				Close();
			}
		}

		public bool IsOpen()
		{
			return isOpen;
		}

		public bool HasADing()
		{
			return m_numDings > 0;
		}

		public override void FVRUpdate()
		{
			((FVRPhysicalObject)this).FVRUpdate();
		}

		public void Open()
		{
			isOpen = true;
			if ((Object)(object)audioSource != (Object)null && (Object)(object)openSound != (Object)null)
			{
				audioSource.PlayOneShot(openSound);
			}
			UpdateDingDisplay();
		}

		public void Close()
		{
			isOpen = false;
			if ((Object)(object)audioSource != (Object)null && (Object)(object)closeSound != (Object)null)
			{
				audioSource.PlayOneShot(closeSound);
			}
			UpdateDingDisplay();
		}

		public void RemoveDing()
		{
			if (m_numDings > 0)
			{
				m_numDings--;
				UpdateDingDisplay();
			}
		}

		private void UpdateDingDisplay()
		{
			for (int i = 0; i < Dings.Count; i++)
			{
				if (i < m_numDings)
				{
					((Component)Dings[i]).gameObject.SetActive(true);
				}
				else
				{
					((Component)Dings[i]).gameObject.SetActive(false);
				}
			}
		}
	}
}
public class CigaretteBoxTrigger : FVRInteractiveObject
{
	public CigaretteBox cigaretteBox;

	public GameObject cigarPrefab;

	public override bool IsInteractable()
	{
		return cigaretteBox.HasADing() && ((FVRInteractiveObject)this).IsInteractable();
	}

	public override void BeginInteraction(FVRViveHand hand)
	{
		((FVRInteractiveObject)this).SimpleInteraction(hand);
	}

	public override void SimpleInteraction(FVRViveHand hand)
	{
		//IL_0030: 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)
		((FVRInteractiveObject)this).SimpleInteraction(hand);
		if (cigaretteBox.IsOpen())
		{
			cigaretteBox.RemoveDing();
			GameObject val = Object.Instantiate<GameObject>(cigarPrefab, ((HandInput)(ref hand.Input)).Pos, ((HandInput)(ref hand.Input)).Rot);
			FVRPhysicalObject component = val.GetComponent<FVRPhysicalObject>();
			hand.ForceSetInteractable((FVRInteractiveObject)(object)component);
			((FVRInteractiveObject)component).BeginInteraction(hand);
		}
		else
		{
			cigaretteBox.Open();
		}
	}
}
namespace theWNbotMods
{
	[Serializable]
	public class MotionPart
	{
		public GameObject motionPrefab;

		public GameObject startPrefab;

		public GameObject endPrefab;
	}
	public class FVRCigarette : QBArmorHelmet
	{
		[Header("Visual Prefabs")]
		public GameObject Unlit;

		public GameObject Lit;

		[Header("Motion Parts")]
		public MotionPart[] motionParts;

		[Header("Animation Settings")]
		public float burnAnimDuration = 10f;

		private float burnAnimTimer = 0f;

		private bool animPlaying = false;

		[Header("Burn Settings")]
		public float BurnDuration = 120f;

		public float DestructionDelay = 10f;

		private bool m_isBurning = false;

		private bool m_hasBeenLit = false;

		private float m_burnTimer;

		[Header("Fire Prefabs Control")]
		public GameObject[] fireOnPrefabs;

		public GameObject[] fireOffPrefabs;

		[Header("Torch Prefab Control")]
		public GameObject torchPrefab;

		[Header("Extinguish Collider")]
		public Collider ExtinguishCollider;

		[Header("Extinguish Settings")]
		public LayerMask ExtinguishLayers;

		[Header("Audio Settings")]
		public AudioSource audioSource;

		public AudioClip extinguishSound;

		public override void Awake()
		{
			((QBArmorHelmet)this).Awake();
			if ((Object)(object)Unlit != (Object)null)
			{
				Unlit.SetActive(true);
			}
			if ((Object)(object)Lit != (Object)null)
			{
				Lit.SetActive(false);
			}
			if (motionParts == null)
			{
				return;
			}
			MotionPart[] array = motionParts;
			foreach (MotionPart motionPart in array)
			{
				if ((Object)(object)motionPart.motionPrefab != (Object)null)
				{
					motionPart.motionPrefab.SetActive(false);
				}
			}
		}

		public override void FVRUpdate()
		{
			//IL_00b4: 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_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fa: 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_0120: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			((QBArmorPiece)this).FVRUpdate();
			if (!m_isBurning)
			{
				return;
			}
			m_burnTimer -= Time.deltaTime;
			if (animPlaying)
			{
				burnAnimTimer += Time.deltaTime;
				float num = Mathf.Clamp01(burnAnimTimer / burnAnimDuration);
				MotionPart[] array = motionParts;
				foreach (MotionPart motionPart in array)
				{
					if ((Object)(object)motionPart.motionPrefab != (Object)null && (Object)(object)motionPart.startPrefab != (Object)null && (Object)(object)motionPart.endPrefab != (Object)null)
					{
						motionPart.motionPrefab.transform.position = Vector3.Lerp(motionPart.startPrefab.transform.position, motionPart.endPrefab.transform.position, num);
						motionPart.motionPrefab.transform.rotation = Quaternion.Lerp(motionPart.startPrefab.transform.rotation, motionPart.endPrefab.transform.rotation, num);
						motionPart.motionPrefab.transform.localScale = Vector3.Lerp(motionPart.startPrefab.transform.localScale, motionPart.endPrefab.transform.localScale, num);
					}
				}
				if (num >= 1f)
				{
					animPlaying = false;
				}
			}
			if (m_burnTimer <= 0f)
			{
				StopBurning();
			}
		}

		public void Ignite()
		{
			if (m_isBurning)
			{
				return;
			}
			m_hasBeenLit = true;
			m_isBurning = true;
			if (m_burnTimer <= 0f)
			{
				m_burnTimer = BurnDuration;
			}
			if ((Object)(object)Unlit != (Object)null)
			{
				Unlit.SetActive(false);
			}
			if ((Object)(object)Lit != (Object)null)
			{
				Lit.SetActive(true);
			}
			animPlaying = true;
			if (motionParts != null)
			{
				MotionPart[] array = motionParts;
				foreach (MotionPart motionPart in array)
				{
					if ((Object)(object)motionPart.motionPrefab != (Object)null && (Object)(object)motionPart.startPrefab != (Object)null)
					{
						motionPart.motionPrefab.SetActive(true);
					}
				}
			}
			GameObject[] array2 = fireOnPrefabs;
			foreach (GameObject val in array2)
			{
				if ((Object)(object)val != (Object)null)
				{
					val.SetActive(true);
				}
			}
			if ((Object)(object)torchPrefab != (Object)null)
			{
				torchPrefab.SetActive(false);
			}
		}

		private void Extinguish()
		{
			if (!m_isBurning)
			{
				return;
			}
			m_isBurning = false;
			animPlaying = false;
			if ((Object)(object)Lit != (Object)null)
			{
				Lit.SetActive(true);
			}
			if ((Object)(object)Unlit != (Object)null)
			{
				Unlit.SetActive(false);
			}
			GameObject[] array = fireOffPrefabs;
			foreach (GameObject val in array)
			{
				if ((Object)(object)val != (Object)null)
				{
					val.SetActive(false);
				}
			}
			if ((Object)(object)torchPrefab != (Object)null)
			{
				torchPrefab.SetActive(true);
			}
			if ((Object)(object)audioSource != (Object)null && (Object)(object)extinguishSound != (Object)null)
			{
				audioSource.PlayOneShot(extinguishSound);
			}
		}

		private void StopBurning()
		{
			m_isBurning = false;
			animPlaying = false;
			if (motionParts == null)
			{
				return;
			}
			MotionPart[] array = motionParts;
			foreach (MotionPart motionPart in array)
			{
				if ((Object)(object)motionPart.motionPrefab != (Object)null)
				{
					motionPart.motionPrefab.SetActive(false);
				}
			}
		}

		private void OnCollisionEnter(Collision collision)
		{
			//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_0062: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)ExtinguishCollider == (Object)null)
			{
				return;
			}
			ContactPoint[] contacts = collision.contacts;
			for (int i = 0; i < contacts.Length; i++)
			{
				ContactPoint val = contacts[i];
				if ((Object)(object)((ContactPoint)(ref val)).thisCollider == (Object)(object)ExtinguishCollider && ((1 << ((Component)collision.collider).gameObject.layer) & LayerMask.op_Implicit(ExtinguishLayers)) != 0)
				{
					Extinguish();
					break;
				}
			}
		}

		public bool IsBurning()
		{
			return m_isBurning;
		}
	}
	public class TorchCigaretteTrigger : MonoBehaviour
	{
		[Header("Cigarette Reference")]
		public FVRCigarette Cigarette;

		[Header("Torch Prefab")]
		public GameObject torchPrefab;

		private void OnTriggerEnter(Collider col)
		{
			if ((Object)(object)Cigarette != (Object)null)
			{
				Cigarette.Ignite();
				if ((Object)(object)torchPrefab != (Object)null)
				{
					torchPrefab.SetActive(false);
				}
			}
		}
	}
}
namespace JerryComponent
{
	public class control_component : MonoBehaviour
	{
		public GameObject Comp;

		public GameObject Comp2;

		public GameObject Rot;

		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)
			if (Rot.transform.localEulerAngles.x >= 45f)
			{
				Comp.SetActive(false);
				Comp2.SetActive(true);
			}
			else
			{
				Comp.SetActive(true);
				Comp2.SetActive(false);
			}
		}
	}
	public class FIATSAR : MonoBehaviour
	{
		public Rigidbody RIG;

		public FSO125P Vehicle;

		[Header("RPM Digits (Text)")]
		public Text rpmThousands;

		public Text rpmHundreds;

		public Text rpmTens;

		public Text rpmOnes;

		[Header("Speed Needle (Transform)")]
		public Transform speedNeedle;

		public float minX = 0f;

		public float maxX = 180f;

		public float minSpeed = 0f;

		public float maxSpeed = 180f;

		private void Update()
		{
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_0109: Unknown result type (might be due to invalid IL or missing references)
			//IL_014a: Unknown result type (might be due to invalid IL or missing references)
			//IL_014f: 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)
			int num = Mathf.RoundToInt(Vehicle.currentRPM);
			num = Mathf.Clamp(num, 0, 7000);
			int num2 = num / 1000;
			int num3 = num % 1000 / 100;
			int num4 = num % 100 / 10;
			int num5 = num % 10;
			if ((Object)(object)rpmThousands != (Object)null)
			{
				rpmThousands.text = num2.ToString();
			}
			if ((Object)(object)rpmHundreds != (Object)null)
			{
				rpmHundreds.text = num3.ToString();
			}
			if ((Object)(object)rpmTens != (Object)null)
			{
				rpmTens.text = num4.ToString();
			}
			if ((Object)(object)rpmOnes != (Object)null)
			{
				rpmOnes.text = num5.ToString();
			}
			if ((Object)(object)speedNeedle != (Object)null)
			{
				Vector3 velocity = RIG.velocity;
				float num6 = ((Vector3)(ref velocity)).magnitude * 2.7f;
				float num7 = Mathf.InverseLerp(minSpeed, maxSpeed, num6);
				float x = Mathf.Lerp(minX, maxX, num7);
				Vector3 localPosition = speedNeedle.localPosition;
				localPosition.x = x;
				speedNeedle.localPosition = localPosition;
			}
		}
	}
	public class FIATSteeringWheel : FVRInteractiveObject
	{
		public float resetLerpSpeed;

		public float maxRot;

		public bool reverseRot;

		[Header("Debug Values")]
		public Text rotText;

		public float rot;

		public float rh;

		public float lr;

		public float inlerp;

		public float lerp;

		public float rotAmt;

		public float CurSteer;

		public override void BeginInteraction(FVRViveHand hand)
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: 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_0051: 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)
			((FVRInteractiveObject)this).BeginInteraction(hand);
			Transform child = ((Component)this).transform.GetChild(0);
			child.parent = null;
			Vector3 localEulerAngles = ((Component)this).transform.localEulerAngles;
			((Component)this).transform.LookAt(((Component)hand).transform);
			((Component)this).transform.localEulerAngles = new Vector3(localEulerAngles.x, ((Component)this).transform.localEulerAngles.y, localEulerAngles.z);
			child.parent = ((Component)this).transform;
		}

		public override void EndInteraction(FVRViveHand hand)
		{
			//IL_0028: 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_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_004d: Unknown result type (might be due to invalid IL or missing references)
			((FVRInteractiveObject)this).EndInteraction(hand);
			Transform child = ((Component)this).transform.GetChild(0);
			child.parent = null;
			((Component)this).transform.localEulerAngles = new Vector3(((Component)this).transform.localEulerAngles.x, 0f, ((Component)this).transform.localEulerAngles.z);
			child.parent = ((Component)this).transform;
		}

		public override void UpdateInteraction(FVRViveHand hand)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_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_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			((FVRInteractiveObject)this).UpdateInteraction(hand);
			Vector3 localEulerAngles = ((Component)this).transform.localEulerAngles;
			((Component)this).transform.LookAt(((Component)hand).transform);
			Vector3 localEulerAngles2 = ((Component)this).transform.localEulerAngles;
			rot = Mathf.DeltaAngle((float)Math.Round(localEulerAngles2.y), (float)Math.Round(localEulerAngles.y));
			rotAmt += rot;
			if (rotAmt >= maxRot)
			{
				rotAmt = maxRot;
				((Component)this).transform.localEulerAngles = localEulerAngles;
			}
			else if (rotAmt <= 0f - maxRot)
			{
				rotAmt = 0f - maxRot;
				((Component)this).transform.localEulerAngles = localEulerAngles;
			}
			else
			{
				((Component)this).transform.localEulerAngles = new Vector3(localEulerAngles.x, localEulerAngles2.y, localEulerAngles.z);
			}
			rh = localEulerAngles2.y;
			lr = localEulerAngles.y;
			CurSteer = SetRot();
		}

		private float SetRot()
		{
			bool flag = rotAmt <= 0f;
			lerp = Mathf.Abs(rotAmt) / maxRot;
			lerp *= -1f;
			if (flag)
			{
				lerp *= -1f;
			}
			if (reverseRot)
			{
				lerp = 0f - lerp;
			}
			if ((Object)(object)rotText != (Object)null)
			{
				rotText.text = lerp.ToString();
			}
			return lerp;
		}
	}
	public class FSO125P : MonoBehaviour
	{
		public GameObject HBGeo;

		public FVRInteractiveObject grabobjHB;

		public GameObject HandRefHB;

		public bool IsIgniting;

		public GameObject IgnitionKeyHole;

		public FVRInteractiveObject IgnitionInt;

		public FIATSteeringWheel SteeringwheelInt;

		public FVRInteractiveObject DriveShiftInt;

		public GameObject HandRef;

		public bool shiftPressed;

		public bool altPressed;

		public GameObject SteeringWheelGeo;

		public float StallCD = 0.1f;

		public int PrevGear = -1;

		public Rigidbody CarRig;

		public float MaxVel = 75f;

		public Transform CarMassC;

		public GameObject WheelGeoLF;

		public GameObject WheelGeoRF;

		public GameObject WheelGeoLR;

		public GameObject WheelGeoRR;

		public WheelCollider WheelColLF;

		public WheelCollider WheelColRF;

		public WheelCollider WheelColLR;

		public WheelCollider WheelColRR;

		public AudioSource EngineIdle;

		public AudioSource EngineOn;

		public AudioSource EngineOff;

		public AudioSource ShiftGear;

		public AudioSource HandBrakeOn;

		public AudioSource HandBrakeOff;

		public float EnginePower = 100f;

		public float MaxRPM = 6000f;

		public float currentRPM;

		public float curRPMRef;

		public float curRPMRef2;

		public float torque;

		public float torqueRef;

		public float wheelTorque;

		public AnimationCurve torqueCurve = new AnimationCurve((Keyframe[])(object)new Keyframe[6]
		{
			new Keyframe(1000f, 80f),
			new Keyframe(2000f, 110f),
			new Keyframe(3000f, 125f),
			new Keyframe(4000f, 130f),
			new Keyframe(5000f, 120f),
			new Keyframe(6000f, 100f)
		});

		public float maxTorque = 250f;

		public float idleRPM = 900f;

		private float clutchInput;

		public bool isclutchstepped;

		public float finalDriveRatio = 4.1f;

		public float[] gearRatios = new float[6] { -3.8f, 0f, 3.75f, 2.12f, 1.36f, 1f };

		private float throttleInput;

		public GameObject shiftGeo;

		public GameObject GearGeo;

		public GameObject Gear1Failed;

		public GameObject Gear2Failed;

		public GameObject Gear3Failed;

		public GameObject Gear4Failed;

		public GameObject GearRFailed;

		public GameObject Left;

		public GameObject Right;

		public GameObject Middle;

		public float MaxSteer = 35f;

		public float curSteer;

		public float curSteerRef;

		public float speedlim = 200f;

		public float steerMul = 2.5f;

		public float ShiftCD = 1f;

		public float BrakeForce = 1000f;

		public float HandBrakeForce = 1500f;

		public float BrakeInput;

		public float curVel;

		public bool isEngineOn;

		public bool isIgnited;

		public bool isHandBrakeOn;

		public bool isHBToggled;

		public int curGear = 1;

		public bool shifted;

		public float RPMRef;

		public float RPMRefref;

		public GameObject ReverseLight;

		public GameObject BrakeLight;

		public GameObject LightTotal;

		public Vector3 WLFPos;

		public Vector3 WLRPos;

		public Vector3 WRFPos;

		public Vector3 WRRPos;

		public Quaternion WLFRot;

		public Quaternion WLRRot;

		public Quaternion WRFRot;

		public Quaternion WRRRot;

		public float rotLF;

		public float rotLR;

		public float rotRF;

		public float rotRR;

		public float rotLF2;

		public float rotRF2;

		public float maxspeed;

		public float upforce;

		public float rotforce;

		public void Start()
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			CarRig.centerOfMass = ((Component)CarMassC).transform.position;
			CarRig.ResetCenterOfMass();
		}

		private void AxisLookAtXZ(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);
		}

		private void AxisLookAtY(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_006a: 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, 0f, 0f);
		}

		private void Update()
		{
			//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_003d: 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_01b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0248: Unknown result type (might be due to invalid IL or missing references)
			//IL_024d: 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_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_0274: 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_020d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: Unknown result type (might be due to invalid IL or missing references)
			//IL_0231: 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_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_010c: Unknown result type (might be due to invalid IL or missing references)
			//IL_042b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0430: Unknown result type (might be due to invalid IL or missing references)
			//IL_0444: Unknown result type (might be due to invalid IL or missing references)
			//IL_0449: Unknown result type (might be due to invalid IL or missing references)
			//IL_045d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0462: Unknown result type (might be due to invalid IL or missing references)
			//IL_0480: Unknown result type (might be due to invalid IL or missing references)
			//IL_0485: Unknown result type (might be due to invalid IL or missing references)
			//IL_0499: Unknown result type (might be due to invalid IL or missing references)
			//IL_049e: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_04bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_050a: Unknown result type (might be due to invalid IL or missing references)
			//IL_050f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0523: 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_0546: 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_055f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0564: 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)
			//IL_0583: Unknown result type (might be due to invalid IL or missing references)
			//IL_0597: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_05b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_05cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0311: 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_062c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0631: Unknown result type (might be due to invalid IL or missing references)
			//IL_0646: Unknown result type (might be due to invalid IL or missing references)
			//IL_064b: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0608: Unknown result type (might be due to invalid IL or missing references)
			//IL_060d: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0770: Unknown result type (might be due to invalid IL or missing references)
			//IL_0775: Unknown result type (might be due to invalid IL or missing references)
			//IL_066f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0674: Unknown result type (might be due to invalid IL or missing references)
			//IL_0688: Unknown result type (might be due to invalid IL or missing references)
			//IL_068d: Unknown result type (might be due to invalid IL or missing references)
			//IL_06b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_06bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_06d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_06d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_070d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0712: Unknown result type (might be due to invalid IL or missing references)
			//IL_0726: Unknown result type (might be due to invalid IL or missing references)
			//IL_072b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0745: Unknown result type (might be due to invalid IL or missing references)
			//IL_074a: 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_07e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_07e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a60: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a65: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a79: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a7e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0808: Unknown result type (might be due to invalid IL or missing references)
			//IL_080d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0821: Unknown result type (might be due to invalid IL or missing references)
			//IL_0826: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c0d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c12: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c26: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c2b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a9e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aa3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ab7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0abc: Unknown result type (might be due to invalid IL or missing references)
			//IL_088e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0893: Unknown result type (might be due to invalid IL or missing references)
			//IL_08ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_08b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_08c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_08ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_08e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0845: Unknown result type (might be due to invalid IL or missing references)
			//IL_084a: Unknown result type (might be due to invalid IL or missing references)
			//IL_085e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0863: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f2a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f2f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f43: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f48: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c4b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c50: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c64: Unknown result type (might be due to invalid IL or missing references)
			//IL_0c69: Unknown result type (might be due to invalid IL or missing references)
			//IL_08f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_08fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0912: Unknown result type (might be due to invalid IL or missing references)
			//IL_0917: Unknown result type (might be due to invalid IL or missing references)
			//IL_1284: Unknown result type (might be due to invalid IL or missing references)
			//IL_1289: Unknown result type (might be due to invalid IL or missing references)
			//IL_129d: Unknown result type (might be due to invalid IL or missing references)
			//IL_12a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f67: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f6c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f80: Unknown result type (might be due to invalid IL or missing references)
			//IL_0f85: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dba: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dbf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dd3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0dd8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0af3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0af8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b0c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b11: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b3a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b3f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b53: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b58: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b77: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a1e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a23: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a3c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a41: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a4a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0936: Unknown result type (might be due to invalid IL or missing references)
			//IL_093b: Unknown result type (might be due to invalid IL or missing references)
			//IL_094f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0954: Unknown result type (might be due to invalid IL or missing references)
			//IL_140c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1411: Unknown result type (might be due to invalid IL or missing references)
			//IL_1425: Unknown result type (might be due to invalid IL or missing references)
			//IL_142a: Unknown result type (might be due to invalid IL or missing references)
			//IL_12c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_12c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_12da: Unknown result type (might be due to invalid IL or missing references)
			//IL_12df: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fa5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0faa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fbe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fc3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ca0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ca5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cb9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cbe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ce7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0cec: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d00: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d05: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d24: Unknown result type (might be due to invalid IL or missing references)
			//IL_097f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0984: Unknown result type (might be due to invalid IL or missing references)
			//IL_0998: Unknown result type (might be due to invalid IL or missing references)
			//IL_099d: Unknown result type (might be due to invalid IL or missing references)
			//IL_09c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_09cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_09df: Unknown result type (might be due to invalid IL or missing references)
			//IL_09e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_09fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_14d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_14d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_14ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_14f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_145a: Unknown result type (might be due to invalid IL or missing references)
			//IL_145f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1473: Unknown result type (might be due to invalid IL or missing references)
			//IL_1478: Unknown result type (might be due to invalid IL or missing references)
			//IL_148c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1491: Unknown result type (might be due to invalid IL or missing references)
			//IL_14af: Unknown result type (might be due to invalid IL or missing references)
			//IL_14b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_14bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_1114: Unknown result type (might be due to invalid IL or missing references)
			//IL_1119: Unknown result type (might be due to invalid IL or missing references)
			//IL_112d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1132: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e0f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e14: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e28: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e2d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e56: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e5b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e6f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e74: Unknown result type (might be due to invalid IL or missing references)
			//IL_0e93: Unknown result type (might be due to invalid IL or missing references)
			//IL_17f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_17fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_180e: Unknown result type (might be due to invalid IL or missing references)
			//IL_1813: Unknown result type (might be due to invalid IL or missing references)
			//IL_1516: Unknown result type (might be due to invalid IL or missing references)
			//IL_151b: Unknown result type (might be due to invalid IL or missing references)
			//IL_152f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1534: Unknown result type (might be due to invalid IL or missing references)
			//IL_1324: Unknown result type (might be due to invalid IL or missing references)
			//IL_1329: Unknown result type (might be due to invalid IL or missing references)
			//IL_133d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1342: Unknown result type (might be due to invalid IL or missing references)
			//IL_136b: Unknown result type (might be due to invalid IL or missing references)
			//IL_1370: Unknown result type (might be due to invalid IL or missing references)
			//IL_1384: Unknown result type (might be due to invalid IL or missing references)
			//IL_1389: Unknown result type (might be due to invalid IL or missing references)
			//IL_13a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ffa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0fff: Unknown result type (might be due to invalid IL or missing references)
			//IL_1013: Unknown result type (might be due to invalid IL or missing references)
			//IL_1018: Unknown result type (might be due to invalid IL or missing references)
			//IL_1041: Unknown result type (might be due to invalid IL or missing references)
			//IL_1046: Unknown result type (might be due to invalid IL or missing references)
			//IL_105a: Unknown result type (might be due to invalid IL or missing references)
			//IL_105f: Unknown result type (might be due to invalid IL or missing references)
			//IL_107e: Unknown result type (might be due to invalid IL or missing references)
			//IL_183c: Unknown result type (might be due to invalid IL or missing references)
			//IL_1841: Unknown result type (might be due to invalid IL or missing references)
			//IL_1855: Unknown result type (might be due to invalid IL or missing references)
			//IL_185a: Unknown result type (might be due to invalid IL or missing references)
			//IL_15de: Unknown result type (might be due to invalid IL or missing references)
			//IL_15e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_15f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_15fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_155f: Unknown result type (might be due to invalid IL or missing references)
			//IL_1564: Unknown result type (might be due to invalid IL or missing references)
			//IL_1578: Unknown result type (might be due to invalid IL or missing references)
			//IL_157d: Unknown result type (might be due to invalid IL or missing references)
			//IL_1591: Unknown result type (might be due to invalid IL or missing references)
			//IL_1596: Unknown result type (might be due to invalid IL or missing references)
			//IL_15ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_15bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_15c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_1169: Unknown result type (might be due to invalid IL or missing references)
			//IL_116e: Unknown result type (might be due to invalid IL or missing references)
			//IL_1182: Unknown result type (might be due to invalid IL or missing references)
			//IL_1187: Unknown result type (might be due to invalid IL or missing references)
			//IL_11b0: Unknown result t