Decompiled source of Hamburgess Helper v1.0.0
Hamburgess_Helper.dll
Decompiled a day ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using DigitalRuby.LightningBolt; using FistVR; using H3VRUtils; using HarmonyLib; using ModularWorkshop; using MuzzleScripts; using OpenScripts2; using OtherLoader; using ShermanJumbo; using UnityEngine; using UnityEngine.Audio; using UnityEngine.Rendering; using UnityEngine.UI; [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 ShermanJumbo { public class AdvancedFireSelector : MonoBehaviour { [Serializable] public class AdvancedFiremode { public FireSelectorModeType Firemode; public string DisplayText; public int SuperBurstAmount = 7; public bool ChangesBoltSpeed = false; public Vector3 ForwardRearwardStiffness; public bool BlastJumpOnFire = false; public float BlastJumpAmnt = 0.25f; } public OpenBoltReceiver Gun; private int CurrentFiremode = 0; public Text TextObject; public AdvancedFiremode[] Firemodes; private void Start() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown //IL_005c: 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) GM.CurrentSceneSettings.ShotFiredEvent += new ShotFired(ShotFired); TextObject.text = Firemodes[0].DisplayText; Gun.SuperBurstAmount = Firemodes[0].SuperBurstAmount; Gun.FireSelector_Modes[0].ModeType = Firemodes[0].Firemode; if (Firemodes[0].ChangesBoltSpeed) { Gun.Bolt.BoltSpeed_Forward = Firemodes[0].ForwardRearwardStiffness.x; Gun.Bolt.BoltSpeed_Rearward = Firemodes[0].ForwardRearwardStiffness.y; Gun.Bolt.BoltSpringStiffness = Firemodes[0].ForwardRearwardStiffness.z; } } private void ShotFired(FVRFireArm firearm) { //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) if ((Object)(object)firearm == (Object)(object)Gun && Firemodes[CurrentFiremode].BlastJumpOnFire) { GM.CurrentMovementManager.Blast(-((Component)((FVRFireArm)Gun).GetMuzzle()).transform.forward, Firemodes[CurrentFiremode].BlastJumpAmnt, true); } } public void OnDestroy() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown GM.CurrentSceneSettings.ShotFiredEvent -= new ShotFired(ShotFired); } private void Update() { //IL_0074: 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) FVRViveHand hand = ((FVRInteractiveObject)Gun).m_hand; if (!((Object)(object)hand == (Object)null) && ((hand.IsInStreamlinedMode && hand.Input.AXButtonDown) || (!hand.IsInStreamlinedMode && hand.Input.TouchpadDown && ((Vector2)(ref hand.Input.TouchpadAxes)).magnitude > 0.2f && Vector2.Angle(hand.Input.TouchpadAxes, Vector2.left) <= 45f))) { SwapFiremodes(); } } public void SwapFiremodes() { //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) CurrentFiremode++; if (CurrentFiremode > Firemodes.Length - 1) { CurrentFiremode = 0; } ((FVRFireArm)Gun).PlayAudioEvent((FirearmAudioEventType)15, 1f); TextObject.text = Firemodes[CurrentFiremode].DisplayText; Gun.FireSelector_Modes[0].ModeType = Firemodes[CurrentFiremode].Firemode; Gun.SuperBurstAmount = Firemodes[CurrentFiremode].SuperBurstAmount; if (Firemodes[CurrentFiremode].ChangesBoltSpeed) { Gun.Bolt.BoltSpeed_Forward = Firemodes[CurrentFiremode].ForwardRearwardStiffness.x; Gun.Bolt.BoltSpeed_Rearward = Firemodes[CurrentFiremode].ForwardRearwardStiffness.y; Gun.Bolt.BoltSpringStiffness = Firemodes[CurrentFiremode].ForwardRearwardStiffness.z; } } } public class AnimationPlayOnFire : MonoBehaviour { public FVRFireArm FireArm; public Animator Animator; public string FiringAnimationNode = "GunFire"; public void Awake() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown GM.CurrentSceneSettings.ShotFiredEvent += new ShotFired(ShotFired); } public void OnDestroy() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown GM.CurrentSceneSettings.ShotFiredEvent -= new ShotFired(ShotFired); } private void ShotFired(FVRFireArm firearm) { if ((Object)(object)firearm == (Object)(object)FireArm) { Animator.Play(FiringAnimationNode); } } } public class BallisticProjLightningBolt : MonoBehaviour { public GameObject TransformToMove; private Vector3 SpawnLocation; private void Start() { //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) SpawnLocation = ((Component)this).gameObject.transform.position; } private void Update() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) TransformToMove.transform.position = SpawnLocation; } } public class BallisticProjectileKillIfBelowSpeed : MonoBehaviour { public BallisticProjectile Projectile; public float KillIfVelBelowThisMagnitude = 20f; private void Update() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) if (((Vector3)(ref Projectile.m_velocity)).magnitude <= KillIfVelBelowThisMagnitude) { Projectile.m_velocity = Vector3.zero; } } } public class BeckerShotgun : FVRFireArm { [Header("Becker Parts")] public Transform Trigger; public float Trigger_ForwardValue; public float Trigger_RearwardValue; public Axis TriggerAxis; public InterpStyle TriggerInterpStyle = (InterpStyle)1; private float m_triggerFloat; public Transform Safety; public float SafetyOn; public bool IsSafetyOn = true; public bool HammerCocked = false; public Transform Cylinder; private float currentAngle; private float targetAngle; public float WindingRate; public AudioEvent WindingSound; private bool IsWinding = false; public float UnwindingRate; public AudioEvent UnwindingSound; private bool IsUnwinding = false; public FVRFireArmChamber[] Chambers; public FVRFireArmChamber FiringChamber; public FVRFireArmChamber ExposedChamber; public Transform EjectionPosition; public Vector3 EjectionVelocity; public Vector3 EjectionSpin; public int WindingStage; public BeckerShotgunBarrel Barrel; public override void Awake() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) ((FVRFireArm)this).Awake(); if ((Object)(object)Cylinder != (Object)null) { currentAngle = Cylinder.localEulerAngles.z; } } public override void FVRUpdate() { //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) ((FVRFireArm)this).FVRUpdate(); if (IsWinding) { currentAngle = Mathf.MoveTowardsAngle(currentAngle, targetAngle, WindingRate * Time.deltaTime); Cylinder.localRotation = Quaternion.Euler(0f, 0f, currentAngle); if (Mathf.Abs(Mathf.DeltaAngle(currentAngle, targetAngle)) < 0.1f) { IsWinding = false; WindingStage++; FiringChamber = Chambers[WindingStage]; ExposedChamber = Chambers[WindingStage + 1]; } } if (IsUnwinding) { currentAngle = Mathf.MoveTowardsAngle(currentAngle, targetAngle, UnwindingRate * Time.deltaTime); Cylinder.localRotation = Quaternion.Euler(0f, 0f, currentAngle); if (Mathf.Abs(Mathf.DeltaAngle(currentAngle, targetAngle)) < 0.1f) { IsUnwinding = false; WindingStage--; FiringChamber = Chambers[WindingStage]; ExposedChamber = Chambers[WindingStage + 1]; } } } public void WindCylinder() { //IL_0044: Unknown result type (might be due to invalid IL or missing references) if (!IsWinding && WindingStage <= 5) { float num = 60f; targetAngle = currentAngle + num; IsWinding = true; SM.PlayGenericSound(WindingSound, ((Component)this).transform.position); } } public void UnwindCylinder() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) if (!IsUnwinding && WindingStage != 0) { float num = 60f; targetAngle = currentAngle - num; IsUnwinding = true; SM.PlayGenericSound(UnwindingSound, ((Component)this).transform.position); } } public void Fire() { //IL_0098: Unknown result type (might be due to invalid IL or missing references) ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)6, 1f); if (FiringChamber.IsFull && !FiringChamber.IsSpent) { FiringChamber.Fire(); ((FVRFireArm)this).Fire(FiringChamber, ((FVRFireArm)this).GetMuzzle(), true, 1f, -1f); ((FVRFireArm)this).FireMuzzleSmoke(); bool flag = ((FVRFireArm)this).IsTwoHandStabilized(); bool flag2 = (Object)(object)((FVRPhysicalObject)this).AltGrip != (Object)null; bool flag3 = ((FVRFireArm)this).IsShoulderStabilized(); ((FVRFireArm)this).Recoil(flag, flag2, flag3, (FVRFireArmRecoilProfile)null, 1f); ((FVRFireArm)this).PlayAudioGunShot(FiringChamber.GetRound(), GM.CurrentPlayerBody.GetCurrentSoundEnvironment(), 1f); if (GM.CurrentSceneSettings.IsAmmoInfinite || GM.CurrentPlayerBody.IsInfiniteAmmo) { FiringChamber.IsSpent = false; FiringChamber.UpdateProxyDisplay(); } EjectExposedChamber(); Barrel.RecockBarrel(); } else { UnwindCylinder(); } } public override void UpdateInteraction(FVRViveHand hand) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) ((FVRPhysicalObject)this).UpdateInteraction(hand); m_triggerFloat = hand.Input.TriggerFloat; if ((Object)(object)Trigger != (Object)null) { ((FVRPhysicalObject)this).SetAnimatedComponent(Trigger, Mathf.Lerp(Trigger_ForwardValue, Trigger_RearwardValue, m_triggerFloat), TriggerInterpStyle, TriggerAxis); } if (!((FVRPhysicalObject)this).IsAltHeld && hand.Input.TriggerDown && ((FVRInteractiveObject)this).m_hasTriggeredUpSinceBegin) { if (!Barrel.IsLocked || IsSafetyOn) { return; } Barrel.ReleaseBarrel(); } if ((hand.IsInStreamlinedMode && hand.Input.AXButtonDown) || (!hand.IsInStreamlinedMode && hand.Input.TouchpadDown && ((Vector2)(ref hand.Input.TouchpadAxes)).magnitude > 0.2f && Vector2.Angle(hand.Input.TouchpadAxes, Vector2.left) <= 45f)) { SwapFiremodes(); } } public void SwapFiremodes() { //IL_0058: 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) IsSafetyOn = !IsSafetyOn; if (IsSafetyOn) { Safety.localEulerAngles = new Vector3(SafetyOn, 0f, 0f); } else { Safety.localEulerAngles = new Vector3(0f, 0f, 0f); } ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)14, 1f); } public void EjectExposedChamber() { //IL_001e: 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_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_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0064: 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) //IL_0079: 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_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_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) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: 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_00ea: Unknown result type (might be due to invalid IL or missing references) if (ExposedChamber.IsFull) { ExposedChamber.EjectRound(EjectionPosition.position, ((Component)this).transform.right * EjectionVelocity.x + ((Component)this).transform.up * EjectionVelocity.y + ((Component)this).transform.forward * EjectionVelocity.z, ((Component)this).transform.right * EjectionSpin.x + ((Component)this).transform.up * EjectionSpin.y + ((Component)this).transform.forward * EjectionSpin.z, EjectionPosition.position, EjectionPosition.rotation, false); } } } public class BeckerShotgunBarrel : FVRInteractiveObject { public enum BarrelPos { Forward, Middle, Rear } [Header("Becker Barrel Params")] public BeckerShotgun Becker; public Transform ForwardPoint; public Transform RearwardPoint; public float ForwardSpeed = 1f; private float OGForwardSpeed; private float m_boltZ_forward; private float m_boltZ_rear; private float m_currentHandleZ; public BarrelPos CurPos; public BarrelPos LastPos; public bool IsLocked = false; public bool IsSlidingForward = false; public override void Awake() { //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_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: 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) ((FVRInteractiveObject)this).Awake(); m_boltZ_forward = ForwardPoint.localPosition.z; m_boltZ_rear = RearwardPoint.localPosition.z; m_currentHandleZ = ((Component)this).transform.localPosition.z; OGForwardSpeed = ForwardSpeed; } public override void UpdateInteraction(FVRViveHand hand) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0048: 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).UpdateInteraction(hand); Vector3 closestValidPoint = ((FVRInteractiveObject)this).GetClosestValidPoint(ForwardPoint.position, RearwardPoint.position, ((HandInput)(ref base.m_hand.Input)).Pos); ((Component)this).transform.position = closestValidPoint; m_currentHandleZ = ((Component)this).transform.localPosition.z; } public override void EndInteraction(FVRViveHand hand) { ((FVRInteractiveObject)this).EndInteraction(hand); } public override void FVRUpdate() { //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_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: 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) ((FVRInteractiveObject)this).FVRUpdate(); if (!((FVRInteractiveObject)this).IsHeld && Mathf.Abs(m_currentHandleZ - m_boltZ_forward) > 0.001f) { m_currentHandleZ = Mathf.MoveTowards(m_currentHandleZ, m_boltZ_forward, Time.deltaTime * ForwardSpeed); ((Component)this).transform.localPosition = new Vector3(((Component)this).transform.localPosition.x, ((Component)this).transform.localPosition.y, m_currentHandleZ); } if (Mathf.Abs(m_currentHandleZ - m_boltZ_forward) < 0.005f) { CurPos = BarrelPos.Forward; } else if (Mathf.Abs(m_currentHandleZ - m_boltZ_rear) < 0.005f) { CurPos = BarrelPos.Rear; } else { CurPos = BarrelPos.Middle; } if (CurPos == BarrelPos.Forward && LastPos != 0) { if ((Object)(object)Becker != (Object)null) { ((FVRFireArm)Becker).PlayAudioEvent((FirearmAudioEventType)0, 1f); if (IsSlidingForward) { IsSlidingForward = false; Becker.Fire(); } } } else if (CurPos == BarrelPos.Rear && LastPos != BarrelPos.Rear) { ((FVRFireArm)Becker).PlayAudioEvent((FirearmAudioEventType)3, 1f); ForwardSpeed = 0f; IsLocked = true; } LastPos = CurPos; } public void ReleaseBarrel() { if (IsLocked) { IsLocked = false; IsSlidingForward = true; ForwardSpeed = OGForwardSpeed; } } public void RecockBarrel() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_002c: 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_003f: Unknown result type (might be due to invalid IL or missing references) m_currentHandleZ = m_boltZ_rear; ((Component)this).transform.localPosition = new Vector3(((Component)this).transform.localPosition.x, ((Component)this).transform.localPosition.y, m_currentHandleZ); CurPos = BarrelPos.Rear; LastPos = BarrelPos.Rear; IsLocked = true; ForwardSpeed = 0f; IsSlidingForward = false; if ((Object)(object)Becker != (Object)null) { ((FVRFireArm)Becker).PlayAudioEvent((FirearmAudioEventType)3, 1f); } Becker.UnwindCylinder(); } public override bool IsInteractable() { return !IsLocked; } } } public class BeckerShotgunCylinderTrigger : FVRInteractiveObject { public BeckerShotgun Becker; public float RotationMagnitude = 5f; private bool hasTriggered = false; public AudioEvent RotateSound; public override void UpdateInteraction(FVRViveHand hand) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: 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) ((FVRInteractiveObject)this).UpdateInteraction(hand); if (!((Object)(object)Becker == (Object)null)) { float z = ((Component)this).transform.InverseTransformDirection(hand.Input.VelAngularWorld).z; if (z > RotationMagnitude && !hasTriggered && Becker.WindingStage < 5) { hasTriggered = true; Becker.WindCylinder(); SM.PlayGenericSound(RotateSound, ((Component)this).transform.position); } else if (z < 1f) { hasTriggered = false; } } } } public class BeckerShotgunEjectorRod : FVRInteractiveObject { public enum EjectorPos { Forward, Middle, Rear } [Header("Becker Rod Params")] public BeckerShotgun Becker; public Transform ForwardPoint; public Transform RearwardPoint; public float ForwardSpeed = 1f; private float m_boltZ_forward; private float m_boltZ_rear; private float m_currentHandleZ; public EjectorPos CurPos; public EjectorPos LastPos; public override void Awake() { //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_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: 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) ((FVRInteractiveObject)this).Awake(); m_boltZ_forward = ForwardPoint.localPosition.z; m_boltZ_rear = RearwardPoint.localPosition.z; m_currentHandleZ = ((Component)this).transform.localPosition.z; } public override void UpdateInteraction(FVRViveHand hand) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0048: 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).UpdateInteraction(hand); Vector3 closestValidPoint = ((FVRInteractiveObject)this).GetClosestValidPoint(ForwardPoint.position, RearwardPoint.position, ((HandInput)(ref base.m_hand.Input)).Pos); ((Component)this).transform.position = closestValidPoint; m_currentHandleZ = ((Component)this).transform.localPosition.z; } public override void EndInteraction(FVRViveHand hand) { ((FVRInteractiveObject)this).EndInteraction(hand); } public override void FVRUpdate() { //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_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: 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_0173: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: Unknown result type (might be due to invalid IL or missing references) //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_0208: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) //IL_022d: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Unknown result type (might be due to invalid IL or missing references) //IL_0247: Unknown result type (might be due to invalid IL or missing references) //IL_0257: Unknown result type (might be due to invalid IL or missing references) //IL_0267: Unknown result type (might be due to invalid IL or missing references) ((FVRInteractiveObject)this).FVRUpdate(); if (!((FVRInteractiveObject)this).IsHeld && Mathf.Abs(m_currentHandleZ - m_boltZ_forward) > 0.001f) { m_currentHandleZ = Mathf.MoveTowards(m_currentHandleZ, m_boltZ_forward, Time.deltaTime * ForwardSpeed); ((Component)this).transform.localPosition = new Vector3(((Component)this).transform.localPosition.x, ((Component)this).transform.localPosition.y, m_currentHandleZ); } if (Mathf.Abs(m_currentHandleZ - m_boltZ_forward) < 0.005f) { CurPos = EjectorPos.Forward; } else if (Mathf.Abs(m_currentHandleZ - m_boltZ_rear) < 0.005f) { CurPos = EjectorPos.Rear; } else { CurPos = EjectorPos.Middle; } if (CurPos == EjectorPos.Forward && LastPos != 0) { if ((Object)(object)Becker != (Object)null) { ((FVRFireArm)Becker).PlayAudioEvent((FirearmAudioEventType)11, 1f); } } else if (CurPos == EjectorPos.Rear && LastPos != EjectorPos.Rear) { if (Becker.ExposedChamber.IsFull) { Becker.ExposedChamber.EjectRound(Becker.EjectionPosition.position, ((Component)this).transform.right * Becker.EjectionVelocity.x + ((Component)this).transform.up * Becker.EjectionVelocity.y + ((Component)this).transform.forward * Becker.EjectionVelocity.z, ((Component)this).transform.right * Becker.EjectionSpin.x + ((Component)this).transform.up * Becker.EjectionSpin.y + ((Component)this).transform.forward * Becker.EjectionSpin.z, Becker.EjectionPosition.position, Becker.EjectionPosition.rotation, false); ((FVRFireArm)Becker).PlayAudioEvent((FirearmAudioEventType)29, 1f); } ((FVRFireArm)Becker).PlayAudioEvent((FirearmAudioEventType)10, 1f); } LastPos = CurPos; } } public class BreakActionMainHandFireSelector : MonoBehaviour { public BreakActionWeapon Weapon; public Transform SelectorSwitch; public Vector3 PosSingleFire; public Vector3 PosMultiFire; public bool IsRot = false; public Vector3 RotEngaged; public bool SwapsTrigger = false; public Transform SecondTrigger; public float SecondTriggerPulledAngle = 20f; private Transform OriginalTrigger; private float OriginalTriggerPulled; private void Awake() { OriginalTrigger = Weapon.Triggers[0]; OriginalTriggerPulled = Weapon.TriggerPulled; } private void Update() { //IL_0074: 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) FVRViveHand hand = ((FVRInteractiveObject)Weapon).m_hand; if (!((Object)(object)hand == (Object)null) && ((hand.IsInStreamlinedMode && hand.Input.AXButtonDown) || (!hand.IsInStreamlinedMode && hand.Input.TouchpadDown && ((Vector2)(ref hand.Input.TouchpadAxes)).magnitude > 0.2f && Vector2.Angle(hand.Input.TouchpadAxes, Vector2.down) <= 45f))) { SwapFiremodes(); } } public void SwapFiremodes() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_0060: 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) ((FVRFireArm)Weapon).PlayAudioEvent((FirearmAudioEventType)15, 1f); if (Weapon.FireAllBarrels) { Weapon.FireAllBarrels = false; if (!IsRot) { SelectorSwitch.localPosition = PosSingleFire; } if (IsRot) { SelectorSwitch.localEulerAngles = Vector3.zero; } if (SwapsTrigger) { Weapon.Triggers[0] = OriginalTrigger; Weapon.TriggerPulled = OriginalTriggerPulled; } } else if (!Weapon.FireAllBarrels) { Weapon.FireAllBarrels = true; if (!IsRot) { SelectorSwitch.localPosition = PosMultiFire; } if (IsRot) { SelectorSwitch.localEulerAngles = RotEngaged; } if (SwapsTrigger) { Weapon.Triggers[0] = SecondTrigger; Weapon.TriggerPulled = SecondTriggerPulledAngle; } } } } namespace ShermanJumbo { public class BreakActionPullableLatch : FVRInteractiveObject { public enum BoltHandlePos { Forward, Middle, Rear } [Header("ChargingHandle")] public bool EjectsOnOpen = true; public bool HasLatchButton = true; public BreakActionWeapon Weapon; public bool IsCartridgeEjector = true; public Transform Point_Fore; public Transform Point_Rear; public float ForwardSpeed = 1f; private float m_boltZ_forward; private float m_boltZ_rear; private float m_currentHandleZ; public BoltHandlePos CurPos; public BoltHandlePos LastPos; [Header("Rotating Bit")] public bool HasRotatingPart; public Transform RotatingPart; public Vector3 RotatingPartNeutralEulers; public Vector3 RotatingPartLeftEulers; public Vector3 RotatingPartRightEulers; public override void Awake() { //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_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: 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) ((FVRInteractiveObject)this).Awake(); m_boltZ_forward = Point_Fore.localPosition.z; m_boltZ_rear = Point_Rear.localPosition.z; m_currentHandleZ = ((Component)this).transform.localPosition.z; Weapon.SetEjectOnOpen(EjectsOnOpen); Weapon.SetHasLatchButton(HasLatchButton); } public override void UpdateInteraction(FVRViveHand hand) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0048: 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_0084: 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_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) ((FVRInteractiveObject)this).UpdateInteraction(hand); Vector3 closestValidPoint = ((FVRInteractiveObject)this).GetClosestValidPoint(Point_Fore.position, Point_Rear.position, ((HandInput)(ref base.m_hand.Input)).Pos); ((Component)this).transform.position = closestValidPoint; m_currentHandleZ = ((Component)this).transform.localPosition.z; float num = Mathf.InverseLerp(m_boltZ_forward, m_boltZ_rear, m_currentHandleZ); if (HasRotatingPart) { Vector3 val = ((Component)this).transform.position - base.m_hand.PalmTransform.position; Vector3 normalized = ((Vector3)(ref val)).normalized; if (Vector3.Dot(normalized, ((Component)this).transform.right) > 0f) { RotatingPart.localEulerAngles = RotatingPartLeftEulers; } else { RotatingPart.localEulerAngles = RotatingPartRightEulers; } } } public override void EndInteraction(FVRViveHand hand) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) if (HasRotatingPart) { RotatingPart.localEulerAngles = RotatingPartNeutralEulers; } ((FVRInteractiveObject)this).EndInteraction(hand); } public override void FVRUpdate() { //IL_00ae: 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_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: 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_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Invalid comparison between Unknown and I4 //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Invalid comparison between Unknown and I4 //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_022a: Unknown result type (might be due to invalid IL or missing references) ((FVRInteractiveObject)this).FVRUpdate(); if (!((FVRInteractiveObject)this).IsHeld && Mathf.Abs(m_currentHandleZ - m_boltZ_forward) > 0.001f) { m_currentHandleZ = Mathf.MoveTowards(m_currentHandleZ, m_boltZ_forward, Time.deltaTime * ForwardSpeed); ((Component)this).transform.localPosition = new Vector3(((Component)this).transform.localPosition.x, ((Component)this).transform.localPosition.y, m_currentHandleZ); } if (Mathf.Abs(m_currentHandleZ - m_boltZ_forward) < 0.005f) { CurPos = (BoltHandlePos)0; } else if (Mathf.Abs(m_currentHandleZ - m_boltZ_rear) < 0.005f) { CurPos = (BoltHandlePos)2; } else { CurPos = (BoltHandlePos)1; } if ((int)CurPos == 0 && (int)LastPos != 0) { if (IsCartridgeEjector && (Object)(object)Weapon != (Object)null) { ((FVRFireArm)Weapon).PlayAudioEvent((FirearmAudioEventType)11, 1f); } if (!IsCartridgeEjector && (Object)(object)Weapon != (Object)null) { ((FVRFireArm)Weapon).PlayAudioEvent((FirearmAudioEventType)31, 1f); } } else if ((int)CurPos == 2 && (int)LastPos != 2) { if (IsCartridgeEjector && (Object)(object)Weapon != (Object)null) { ((FVRFireArm)Weapon).PlayAudioEvent((FirearmAudioEventType)10, 1f); } if (!IsCartridgeEjector && (Object)(object)Weapon != (Object)null) { ((FVRFireArm)Weapon).PlayAudioEvent((FirearmAudioEventType)30, 1f); } if (IsCartridgeEjector && !Weapon.IsLatched) { Weapon.PopOutRound(Weapon.Barrels[0].Chamber); } } if (!IsCartridgeEjector) { if ((int)CurPos == 0) { Weapon.SetIsExternallyUnlatched(false); } else { Weapon.SetIsExternallyUnlatched(true); } } LastPos = CurPos; } } public class BreakActionSpeedloaderInsertTrigger : MonoBehaviour { public BreakActionWeapon Weapon; } public class BreakActionSpeedloaderTrigger : MonoBehaviour { public FVRFireArmMagazine Loader; private void OnTriggerEnter(Collider collider) { //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)Loader != (Object)null) || !((Object)(object)Loader.FireArm == (Object)null) || !((Object)(object)((FVRPhysicalObject)Loader).QuickbeltSlot == (Object)null) || !((Object)(object)((Component)collider).gameObject.GetComponent<BreakActionSpeedloaderInsertTrigger>() != (Object)null)) { return; } BreakActionSpeedloaderInsertTrigger component = ((Component)collider).gameObject.GetComponent<BreakActionSpeedloaderInsertTrigger>(); BreakActionWeapon weapon = component.Weapon; if (((FVRFireArm)weapon).RoundType != Loader.RoundType || weapon.m_isLatched) { return; } for (int i = 0; i < weapon.Barrels.Length; i++) { if (Loader.HasARound() && !weapon.Barrels[i].Chamber.IsFull) { FVRLoadedRound val = Loader.RemoveRound(0); Transform transform = Loader.DisplayBullets[Mathf.Clamp(0, Loader.DisplayBullets.Length - 1, i)].transform; weapon.Barrels[i].Chamber.Autochamber(val.LR_Class, transform.position, transform.rotation); ((FVRFireArm)weapon).PlayAudioEvent((FirearmAudioEventType)20, 1f); } } } } public class CSGCapTrigger : FVRInteractiveObject { public CappedStickyGrenade Grenade; public override void SimpleInteraction(FVRViveHand hand) { ((FVRInteractiveObject)this).SimpleInteraction(hand); if (!Grenade.m_isArmed) { Grenade.Arm(); } } } public class CSGDestroyNotifier : MonoBehaviour { public delegate void DestroyedAction(); public event DestroyedAction OnDestroyed; private void OnDestroy() { if (this.OnDestroyed != null) { this.OnDestroyed(); } } } public class CannonballSecondaryRenderer : MonoBehaviour { public Renderer Rend; public CannonBall Cannonball; private void Update() { if (Cannonball.TurnsOffRends && !Cannonball.hasTurnedOffRends) { Rend.enabled = false; } } } public class CappedStickyGrenade : FVRPhysicalObject { [Serializable] public class CSGDetonationStage { public bool HasFired = false; public float FireWhenFuseHits = 0f; public GameObject[] PrefabToSpawn; } [Header("Grenade Settings")] public Rigidbody grenadeRigidbody; public bool m_isArmed = false; public float FuseTime = 0f; public List<GameObject> SpawnOnSplode; public AudioEvent ArmedSound; public int IFF; private float m_fuseTime = 0f; private bool m_hasSploded = false; public bool UsesStagedDetonation = false; public CSGDetonationStage[] DetonationStages; [Header("Cap Settings")] public bool UsesCapSystem = false; public GameObject DummyCap; public GameObject CapPrefab; public Transform CapPrefabSpawnPos; [Header("Sticky Grenade Settings")] public bool isStickyGrenade = true; public Collider stickyCollider; public float stickingDistance = 0.1f; public LayerMask stickyLayers; public float embeddingDistance = 0.02f; public bool playStickSoundForRigidbodiesOnly = true; public AudioEvent stickSounds; public float minimumStickVelocity = 2f; public float regrabActivationDelay = 0.5f; public float massWhileStuck = 10f; private bool wasHeld = false; private bool armChecked = false; private bool shouldCheckVelocity = false; private bool hasReleasedLever = false; private bool isSticking = false; private bool canStick = false; private float timeSinceRelease = 0f; private GameObject parentObject; private Vector3 savedPosition; private Quaternion savedRotation; private Vector3 savedScale; private FVRInteractiveObject interactiveObject; private bool isCookingCoroutineRunning = false; [Header("Extra Settings")] public bool UsesArmedPfx = false; public ParticleSystem[] Pfx; public float ActivateParticlesWhenFuseHits = 3f; private bool HasActivatedParticles = false; public bool PlaysAnimationOnArm = false; public Animator Animator; public string ArmingAnimationNode = "animation"; public bool PlaysSoundWhileArmed = false; public AudioSource ArmedSounds; public float ActivateSoundsWhenFuseHits = 0f; private bool HasPlayedArmedSounds = false; private void Start() { interactiveObject = ((Component)this).GetComponent<FVRInteractiveObject>(); if (UsesArmedPfx) { ParticleSystem[] pfx = Pfx; foreach (ParticleSystem val in pfx) { if (val.isPlaying) { val.Stop(); } } } if (PlaysSoundWhileArmed && ArmedSounds.isPlaying) { ArmedSounds.Stop(); } } public override void UpdateInteraction(FVRViveHand hand) { ((FVRPhysicalObject)this).UpdateInteraction(hand); IFF = GM.CurrentPlayerBody.GetPlayerIFF(); } public override void FVRUpdate() { //IL_030f: Unknown result type (might be due to invalid IL or missing references) //IL_0314: Unknown result type (might be due to invalid IL or missing references) //IL_0453: Unknown result type (might be due to invalid IL or missing references) //IL_045e: Unknown result type (might be due to invalid IL or missing references) ((FVRPhysicalObject)this).FVRUpdate(); if (!armChecked && m_isArmed) { armChecked = true; shouldCheckVelocity = true; if (isStickyGrenade) { EnableStickyCollider(); } } if (!wasHeld && ((FVRInteractiveObject)this).IsHeld) { timeSinceRelease = 0f; if (m_isArmed) { EnableStickyCollider(); } shouldCheckVelocity = m_isArmed; wasHeld = true; canStick = true; isSticking = false; FixedJoint component = ((Component)this).GetComponent<FixedJoint>(); if ((Object)(object)component != (Object)null) { Object.Destroy((Object)(object)component); grenadeRigidbody.isKinematic = false; grenadeRigidbody.detectCollisions = true; grenadeRigidbody.useGravity = true; grenadeRigidbody.constraints = (RigidbodyConstraints)0; Debug.Log((object)"FixedJoint grenade unstuck upon being picked up."); } else if ((Object)(object)((Component)this).transform.parent != (Object)null && ((Object)((Component)((Component)this).transform.parent).gameObject).name == "DummyParent") { GameObject gameObject = ((Component)((Component)this).transform.parent).gameObject; ((Component)this).transform.SetParent((Transform)null, true); Object.Destroy((Object)(object)gameObject); grenadeRigidbody.isKinematic = false; grenadeRigidbody.detectCollisions = true; grenadeRigidbody.useGravity = true; grenadeRigidbody.constraints = (RigidbodyConstraints)0; Debug.Log((object)"Static-stuck grenade unstuck upon being picked up."); } if (isStickyGrenade) { DisableStickyColliderTemporarily(); } } if (wasHeld && !((FVRInteractiveObject)this).IsHeld) { isSticking = false; wasHeld = false; } if (m_isArmed || !((FVRInteractiveObject)this).IsHeld) { DisableMeleeDamage((FVRPhysicalObject)(object)this); } else { EnableMeleeDamage((FVRPhysicalObject)(object)this); } if (!m_isArmed) { return; } m_fuseTime -= Time.deltaTime; if (m_fuseTime < ActivateParticlesWhenFuseHits && !HasActivatedParticles) { HasActivatedParticles = true; ParticleSystem[] pfx = Pfx; foreach (ParticleSystem val in pfx) { val.Play(); } } if (m_fuseTime < ActivateSoundsWhenFuseHits && !HasPlayedArmedSounds) { HasPlayedArmedSounds = true; ArmedSounds.Play(); } if (m_fuseTime <= 0.05f) { if (!m_hasSploded) { m_hasSploded = true; ParticleSystem[] pfx2 = Pfx; foreach (ParticleSystem val2 in pfx2) { if (val2.isPlaying) { val2.Stop(); } } for (int k = 0; k < SpawnOnSplode.Count; k++) { GameObject val3 = Object.Instantiate<GameObject>(SpawnOnSplode[k], ((Component)this).transform.position, Quaternion.identity); Explosion component2 = val3.GetComponent<Explosion>(); if ((Object)(object)component2 != (Object)null) { component2.IFF = IFF; } ExplosionSound component3 = val3.GetComponent<ExplosionSound>(); if ((Object)(object)component3 != (Object)null) { component3.IFF = IFF; } GrenadeExplosion component4 = val3.GetComponent<GrenadeExplosion>(); if ((Object)(object)component4 != (Object)null) { component4.IFF = IFF; } } } else { if (((FVRInteractiveObject)this).IsHeld) { FVRViveHand hand = ((FVRInteractiveObject)this).m_hand; ((FVRInteractiveObject)this).m_hand.ForceSetInteractable((FVRInteractiveObject)null); ((FVRInteractiveObject)this).EndInteraction(hand); } Object.Destroy((Object)(object)((Component)this).gameObject); } } if (!UsesStagedDetonation) { return; } CSGDetonationStage[] detonationStages = DetonationStages; foreach (CSGDetonationStage cSGDetonationStage in detonationStages) { if (!cSGDetonationStage.HasFired && m_fuseTime <= cSGDetonationStage.FireWhenFuseHits) { cSGDetonationStage.HasFired = true; GameObject[] prefabToSpawn = cSGDetonationStage.PrefabToSpawn; foreach (GameObject val4 in prefabToSpawn) { Object.Instantiate<GameObject>(val4, ((Component)this).transform.position, ((Component)this).transform.rotation); } } } } public override void FVRFixedUpdate() { //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) ((FVRPhysicalObject)this).FVRFixedUpdate(); if (shouldCheckVelocity && ((FVRInteractiveObject)this).IsHeld) { Vector3 velocity = grenadeRigidbody.velocity; if (((Vector3)(ref velocity)).magnitude >= minimumStickVelocity) { canStick = true; } else { canStick = false; } } } private void DisableMeleeDamage(FVRPhysicalObject physicalObject) { if (physicalObject.MP != null && physicalObject.MP.IsMeleeWeapon) { physicalObject.MP.IsMeleeWeapon = false; } } private void EnableMeleeDamage(FVRPhysicalObject physicalObject) { if (physicalObject.MP != null && !physicalObject.MP.IsMeleeWeapon) { physicalObject.MP.IsMeleeWeapon = true; } } private void OnCollisionEnter(Collision collision) { //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: 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_0103: Unknown result type (might be due to invalid IL or missing references) if (!m_isArmed || isSticking || !isStickyGrenade || !((Object)(object)stickyCollider != (Object)null) || (Object)(object)collision.gameObject.GetComponent<BreakableGlass>() != (Object)null || (Object)(object)collision.gameObject.GetComponent<PinnedGrenade>() != (Object)null || (Object)(object)collision.gameObject.GetComponent<PinnedGrenadePin>() != (Object)null || (Object)(object)collision.gameObject.GetComponent<SosigWeapon>() != (Object)null) { return; } ContactPoint[] contacts = collision.contacts; for (int i = 0; i < contacts.Length; i++) { ContactPoint contact = contacts[i]; if (!((Object)(object)((ContactPoint)(ref contact)).thisCollider == (Object)(object)stickyCollider)) { continue; } if ((LayerMask.op_Implicit(stickyLayers) & (1 << collision.gameObject.layer)) == 0 || !IsContactPointWithinStickingDistance(((ContactPoint)(ref contact)).point)) { break; } isSticking = true; StickToSurface(collision, contact); PlayStickingSound(collision); parentObject = collision.gameObject; if ((Object)(object)parentObject != (Object)null) { CSGDestroyNotifier cSGDestroyNotifier = parentObject.GetComponent<CSGDestroyNotifier>(); if ((Object)(object)cSGDestroyNotifier == (Object)null) { cSGDestroyNotifier = parentObject.AddComponent<CSGDestroyNotifier>(); } cSGDestroyNotifier.OnDestroyed += OnDestroyUnstickGrenade; } break; } } private bool IsContactPointWithinStickingDistance(Vector3 contactPoint) { //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_000d: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) Vector3 val = stickyCollider.ClosestPoint(contactPoint); float num = Vector3.Distance(contactPoint, val); return num < stickingDistance; } private void StickToSurface(Collision collision, ContactPoint contact) { //IL_0048: 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_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0078: 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_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Expected O, but got Unknown //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: 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) if ((Object)(object)stickyCollider == (Object)null) { return; } if ((Object)(object)interactiveObject != (Object)null && interactiveObject.IsHeld) { interactiveObject.ForceBreakInteraction(); } savedPosition = ((Component)this).transform.position; savedRotation = ((Component)this).transform.rotation; Vector3 lossyScale = ((Component)this).transform.lossyScale; Rigidbody rigidbody = collision.rigidbody; Vector3 val = ((ContactPoint)(ref contact)).normal * embeddingDistance; if ((Object)(object)rigidbody != (Object)null) { ((Component)this).transform.position = ((ContactPoint)(ref contact)).point + val; FixedJoint component = ((Component)this).GetComponent<FixedJoint>(); if ((Object)(object)component != (Object)null) { Object.Destroy((Object)(object)component); } FixedJoint val2 = ((Component)this).gameObject.AddComponent<FixedJoint>(); ((Joint)val2).connectedBody = rigidbody; ((Joint)val2).breakForce = float.MaxValue; ((Joint)val2).breakTorque = float.MaxValue; grenadeRigidbody.useGravity = false; grenadeRigidbody.isKinematic = false; grenadeRigidbody.constraints = (RigidbodyConstraints)0; grenadeRigidbody.mass = massWhileStuck; SetCollidersToLayer(stickyCollider, "NoCol"); } else { GameObject val3 = new GameObject("DummyParent"); val3.transform.position = ((ContactPoint)(ref contact)).point; val3.transform.rotation = collision.transform.rotation; grenadeRigidbody.isKinematic = true; val3.transform.SetParent(collision.transform, true); ((Component)this).transform.SetParent(val3.transform, false); ((Component)this).transform.localScale = new Vector3(lossyScale.x / ((Component)this).transform.lossyScale.x, lossyScale.y / ((Component)this).transform.lossyScale.y, lossyScale.z / ((Component)this).transform.lossyScale.z); ((Component)this).transform.position = ((ContactPoint)(ref contact)).point + val; ((Component)this).transform.rotation = savedRotation; } } private void EnableStickyCollider() { if ((Object)(object)stickyCollider != (Object)null) { stickyCollider.enabled = true; } } private void DisableStickyColliderTemporarily() { if ((Object)(object)stickyCollider != (Object)null) { stickyCollider.enabled = false; } ((MonoBehaviour)this).StartCoroutine(ReenableStickyColliderAfterDelay()); } private IEnumerator ReenableStickyColliderAfterDelay() { yield return (object)new WaitForSeconds(regrabActivationDelay); EnableStickyCollider(); } private void PlayStickingSound(Collision collision) { //IL_0037: Unknown result type (might be due to invalid IL or missing references) if ((playStickSoundForRigidbodiesOnly && (Object)(object)collision.rigidbody != (Object)null) || !playStickSoundForRigidbodiesOnly) { SM.PlayCoreSound((FVRPooledAudioType)10, stickSounds, ((Component)this).transform.position); } } private void OnDestroyUnstickGrenade() { if ((Object)(object)this == (Object)null) { return; } if ((Object)(object)parentObject != (Object)null) { CSGDestroyNotifier component = parentObject.GetComponent<CSGDestroyNotifier>(); if ((Object)(object)component != (Object)null) { component.OnDestroyed -= OnDestroyUnstickGrenade; } parentObject = null; } FixedJoint component2 = ((Component)this).GetComponent<FixedJoint>(); if ((Object)(object)component2 != (Object)null) { Object.Destroy((Object)(object)component2); } else if ((Object)(object)((Component)this).transform.parent != (Object)null) { ((Component)this).transform.SetParent((Transform)null); } if ((Object)(object)grenadeRigidbody != (Object)null) { grenadeRigidbody.isKinematic = false; grenadeRigidbody.detectCollisions = true; grenadeRigidbody.useGravity = true; grenadeRigidbody.constraints = (RigidbodyConstraints)0; } isSticking = false; if ((Object)(object)stickyCollider != (Object)null) { stickyCollider.enabled = false; } canStick = false; } private void SetCollidersToLayer(Collider collider, string layer) { ((Component)collider).gameObject.layer = LayerMask.NameToLayer(layer); } private void OnDestroy() { if ((Object)(object)parentObject != (Object)null) { CSGDestroyNotifier component = parentObject.GetComponent<CSGDestroyNotifier>(); if ((Object)(object)component != (Object)null) { component.OnDestroyed -= OnDestroyUnstickGrenade; } } } public void Arm() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) if (!m_isArmed) { m_isArmed = true; m_fuseTime = FuseTime; SM.PlayCoreSound((FVRPooledAudioType)10, ArmedSound, ((Component)this).transform.position); if (PlaysAnimationOnArm) { Animator.Play(ArmingAnimationNode); } if (UsesCapSystem) { DummyCap.SetActive(false); Object.Instantiate<GameObject>(CapPrefab, CapPrefabSpawnPos.position, CapPrefabSpawnPos.rotation); } } } } public class ChamberDependentParticlesAndSounds : MonoBehaviour { public FVRFireArmChamber ChamberToRead; public ParticleSystem ParticlesToEnable; public AudioSource SoundsToEnable; private void Update() { if (ChamberToRead.IsFull) { if (!ParticlesToEnable.isPlaying) { ParticlesToEnable.Play(); } if (!SoundsToEnable.isPlaying) { SoundsToEnable.Play(); } } else { ParticlesToEnable.Stop(); SoundsToEnable.Stop(); } } } public class ClosedBoltBeltFedDualFeedFix : MonoBehaviour { public ClosedBoltWeapon Weapon; public ClosedBoltMagEjectionTrigger MagGrabTrigger; public Vector3 TriggerPosForBeltBox; public Vector3 ScaleForBeltBoxTrigger; private Vector3 TriggerPosForMag; private Vector3 ScaleForMagTrigger; private void Start() { //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_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) TriggerPosForMag = ((FVRInteractiveObject)MagGrabTrigger).Transform.localPosition; ScaleForMagTrigger = ((FVRInteractiveObject)MagGrabTrigger).Transform.localScale; } private void Update() { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) FVRFireArmMagazine magazine = ((FVRFireArm)Weapon).Magazine; ClosedBoltMagEjectionTrigger magGrabTrigger = MagGrabTrigger; if ((Object)(object)magazine == (Object)null) { return; } if (!magazine.IsBeltBox) { ((Component)magGrabTrigger).gameObject.SetActive(true); ((FVRInteractiveObject)magGrabTrigger).Transform.localPosition = TriggerPosForMag; ((FVRInteractiveObject)magGrabTrigger).Transform.localScale = ScaleForMagTrigger; } if (magazine.IsBeltBox) { if (!((FVRFireArm)Weapon).ConnectedToBox) { ((Component)magGrabTrigger).gameObject.SetActive(true); ((FVRInteractiveObject)magGrabTrigger).Transform.localPosition = TriggerPosForBeltBox; ((FVRInteractiveObject)magGrabTrigger).Transform.localScale = ScaleForBeltBoxTrigger; } else { ((Component)MagGrabTrigger).gameObject.SetActive(false); } } } } public class ClosedBoltMagReleaseSelector : MonoBehaviour { public ClosedBoltWeapon Gun; public Vector3 MagReleaseUnpress_Safe; public Vector3 MagReleaseUnpress_NotSafe; private void Update() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //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) if ((int)Gun.FireSelector_Modes[Gun.m_fireSelectorMode].ModeType == 0) { Gun.MagReleaseUnpressed = MagReleaseUnpress_Safe; } else { Gun.MagReleaseUnpressed = MagReleaseUnpress_NotSafe; } } } public class ClosedBoltPokeToChamberRound : FVRInteractiveObject { public ClosedBoltWeapon Weapon; public FVRFireArmChamber Chamber; public override void Poke(FVRViveHand hand) { if (((Object)(object)((FVRInteractiveObject)Weapon).m_hand == (Object)null || (Object)(object)hand != (Object)(object)((FVRInteractiveObject)Weapon).m_hand) && !Chamber.IsFull) { Weapon.Bolt.ImpartFiringImpulse(); } } } public class Commando : FVRFireArm { [Serializable] public class CommandoMovingPart { public MovableObjectPart ObjectPart; public E_State DesiredState; } [Header("Commando")] public FVRFireArmChamber[] CommandoChambers; public Transform[] CommandoMuzzles; public int CurrentChamber = 0; public bool AlsoPlaysSecondFireSound = true; public AudioEvent SecondFireSound; public Transform SecondFireSoundPosition; public bool DeletesCartridgeOnFire = true; public bool DestroyWhenEmpty = false; public float KillDelay = 30f; public bool IsEmpty = false; public bool UseEnableDisablePerChamberSystem = true; public GameObject[] EnableIfCorrespondingChamberIsSpent; public GameObject[] DisableIfCorrespondingChamberIsSpent; public Transform Trigger; public float Trigger_ForwardValue; public float Trigger_RearwardValue; public Axis TriggerAxis; public InterpStyle TriggerInterpStyle = (InterpStyle)1; private float m_triggerFloat; [Header("Moving Parts Stuff")] public bool UsesMovingPartSystem = false; public bool AllMovingPartsReady = false; public CommandoMovingPart[] MovingParts; public override void Awake() { ((FVRFireArm)this).Awake(); FVRFireArmChamber[] commandoChambers = CommandoChambers; foreach (FVRFireArmChamber item in commandoChambers) { base.FChambers.Add(item); } } public override void UpdateInteraction(FVRViveHand hand) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) ((FVRPhysicalObject)this).UpdateInteraction(hand); m_triggerFloat = hand.Input.TriggerFloat; if ((Object)(object)Trigger != (Object)null) { ((FVRPhysicalObject)this).SetAnimatedComponent(Trigger, Mathf.Lerp(Trigger_ForwardValue, Trigger_RearwardValue, m_triggerFloat), TriggerInterpStyle, TriggerAxis); } if (!((FVRPhysicalObject)this).IsAltHeld && hand.Input.TriggerDown && ((FVRInteractiveObject)this).m_hasTriggeredUpSinceBegin && CurrentChamber <= CommandoChambers.Length - 1) { Fire(); } IsEmpty = true; FVRFireArmChamber[] commandoChambers = CommandoChambers; foreach (FVRFireArmChamber val in commandoChambers) { if (val.IsFull && !val.IsSpent) { IsEmpty = false; break; } } if (IsEmpty && DestroyWhenEmpty) { Object.Destroy((Object)(object)((Component)this).gameObject, KillDelay); } } public override Transform GetMuzzle() { return CommandoMuzzles[CurrentChamber]; } public void Fire() { //IL_0104: 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_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) if (!CommandoChambers[CurrentChamber].IsFull || CommandoChambers[CurrentChamber].IsSpent) { return; } if (UsesMovingPartSystem) { AllMovingPartsReady = true; CommandoMovingPart[] movingParts = MovingParts; foreach (CommandoMovingPart commandoMovingPart in movingParts) { if (commandoMovingPart.ObjectPart.State != commandoMovingPart.DesiredState) { AllMovingPartsReady = false; } } if (!AllMovingPartsReady) { return; } } FVRFireArmChamber val = CommandoChambers[CurrentChamber]; val.Fire(); ((FVRFireArm)this).Fire(val, ((FVRFireArm)this).GetMuzzle(), true, 1f, -1f); ((FVRFireArm)this).FireMuzzleSmoke(); bool flag = ((FVRFireArm)this).IsTwoHandStabilized(); bool flag2 = (Object)(object)((FVRPhysicalObject)this).AltGrip != (Object)null; bool flag3 = ((FVRFireArm)this).IsShoulderStabilized(); ((FVRFireArm)this).Recoil(flag, flag2, flag3, (FVRFireArmRecoilProfile)null, 1f); ((FVRFireArm)this).PlayAudioGunShot(val.GetRound(), GM.CurrentPlayerBody.GetCurrentSoundEnvironment(), 1f); if (AlsoPlaysSecondFireSound) { SM.PlayCoreSound((FVRPooledAudioType)0, SecondFireSound, ((Component)SecondFireSoundPosition).transform.position); } if (GM.CurrentSceneSettings.IsAmmoInfinite || GM.CurrentPlayerBody.IsInfiniteAmmo) { val.IsSpent = false; val.UpdateProxyDisplay(); } else if (DeletesCartridgeOnFire) { val.SetRound((FVRFireArmRound)null, false); } if (UseEnableDisablePerChamberSystem) { EnableIfCorrespondingChamberIsSpent[CurrentChamber].SetActive(true); DisableIfCorrespondingChamberIsSpent[CurrentChamber].SetActive(false); } CurrentChamber++; if (CurrentChamber >= CommandoChambers.Length) { CurrentChamber = 0; } } public override List<FireArmRoundClass> GetChamberRoundList() { //IL_003a: Unknown result type (might be due to invalid IL or missing references) if (CommandoChambers[0].IsFull && !CommandoChambers[0].IsSpent) { List<FireArmRoundClass> list = new List<FireArmRoundClass>(); list.Add(CommandoChambers[0].GetRound().RoundClass); return list; } return null; } public override void SetLoadedChambers(List<FireArmRoundClass> rounds) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) FVRFireArmChamber[] commandoChambers = CommandoChambers; foreach (FVRFireArmChamber val in commandoChambers) { if (rounds.Count > 0) { val.Autochamber(rounds[0]); } } } } public class DemonadeBouncySounds : MonoBehaviour, IFVRDamageable { private bool m_hasExploded; public Vector2 FuseTimeRange = new Vector2(2.3f, 2.3f); public float m_fuseTime = 2.3f; public bool ExplodesOnContact = true; public string ExplodeOnContactLayerName; public bool ExplodesWhenShot = true; public List<GameObject> SpawnOnExplode; public int IFF; public AudioEvent BouncySound; public bool ReduceFuseOnBounce = false; public float FuseReduction = 1f; private int BounceCount = 0; private void Start() { m_fuseTime = Random.Range(FuseTimeRange.x, FuseTimeRange.y); } private void Update() { m_fuseTime -= Time.deltaTime; if (m_fuseTime <= 0f) { Explode(); } } public void Damage(Damage d) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Invalid comparison between Unknown and I4 if ((int)d.Class != 2 && ExplodesWhenShot) { Explode(); } } public void Explode() { //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) if (m_hasExploded) { return; } m_hasExploded = true; for (int i = 0; i < SpawnOnExplode.Count; i++) { GameObject val = Object.Instantiate<GameObject>(SpawnOnExplode[i], ((Component)this).transform.position, Random.rotation); Explosion component = val.GetComponent<Explosion>(); if ((Object)(object)component != (Object)null) { component.IFF = IFF; } ExplosionSound component2 = val.GetComponent<ExplosionSound>(); if ((Object)(object)component2 != (Object)null) { component2.IFF = IFF; } } Object.Destroy((Object)(object)((Component)this).gameObject); } private void OnCollisionEnter(Collision collision) { //IL_0042: Unknown result type (might be due to invalid IL or missing references) if (!ExplodesOnContact) { return; } if ((Object)(object)((ContactPoint)(ref collision.contacts[0])).otherCollider.attachedRigidbody == (Object)null) { SM.PlayCoreSound((FVRPooledAudioType)10, BouncySound, ((Component)this).transform.position); if (ReduceFuseOnBounce) { m_fuseTime -= FuseReduction; BounceCount++; } } else { string text = LayerMask.LayerToName(((Component)((ContactPoint)(ref collision.contacts[0])).otherCollider).gameObject.layer); if (ExplodeOnContactLayerName == text) { Explode(); } } } } public class DemonadeProximityDetonate : MonoBehaviour { public MF2_Demonade Demonade; public DemonadeBouncySounds DemonadeBouncy; public float ActivationDelay = 1f; private float m_timetoDelay = 0f; private bool isArmed = false; private void Update() { if (m_timetoDelay < ActivationDelay) { m_timetoDelay += Time.deltaTime; } if (m_timetoDelay >= ActivationDelay) { isArmed = true; } } private void OnTriggerEnter(Collider other) { if (isArmed) { string text = LayerMask.LayerToName(((Component)other).gameObject.layer); if ((Object)(object)Demonade != (Object)null && Demonade.ExplodeOnContactLayerName == text) { Demonade.Explode(); } if ((Object)(object)DemonadeBouncy != (Object)null && DemonadeBouncy.ExplodeOnContactLayerName == text) { DemonadeBouncy.Explode(); } } } } public class DisableIfCurrentMagIsBeltBox : MonoBehaviour { public FVRFireArm Firearm; public GameObject GameObjectToDisable; private void Update() { GameObjectToDisable.SetActive(true); } } public class DoubleBarrelLeverAction : FVRFireArm { public enum ZPos { Forward, Middle, Rear } [Serializable] public class LeverActuatedPiece { public Transform Piece; public Vector3 PosBack; public Vector3 PosForward; public InterpStyle InterpStyle; public ActuationType ActuationType; } public enum ActuationType { Lever, Hammer } [Header("LeverAction Config")] public FVRFireArmChamber Chamber; public bool UsesSecondChamber; public FVRFireArmChamber Chamber2; public Transform SecondEjectionSpot; public Transform SecondMuzzle; private bool m_isHammerCocked2; private bool m_isSecondaryMuzzlePos; public Transform Lever; public Transform LeverRoot; public Transform Hammer; public Transform LoadingGate; public Transform Trigger; public Vector2 TriggerRotRange; public FVRAlternateGrip ForeGrip; public Vector2 LeverAngleRange = new Vector2(-68f, 0f); public Vector2 HammerAngleRange = new Vector2(-36f, 0f); public Vector2 LoadingGateAngleRange = new Vector2(-24f, 0f); public Vector3 EjectionDir = new Vector3(0f, 2f, 0f); public Vector3 EjectionSpin = new Vector3(80f, 0f, 0f); private bool m_isLeverReleasePressed; private float m_curLeverRot; private float m_tarLeverRot; private float m_leverRotSpeed = 700f; private bool m_isActionMovingForward; private ZPos m_curLeverPos = (ZPos)2; private ZPos m_lastLeverPos = (ZPos)2; private FVRFirearmMovingProxyRound m_proxy; private FVRFirearmMovingProxyRound m_proxy2; [Header("Round Positions Config")] public Transform ReceiverLowerPathForward; public Transform ReceiverLowerPathRearward; public Transform ReceiverUpperPathForward; public Transform ReceiverUpperPathRearward; public Transform ReceiverEjectionPathForward; public Transform ReceiverEjectionPathRearward; public Transform ReceiverEjectionPoint; public bool GrabsRoundFromMagOnBoltForward; private bool m_isHammerCocked; [Header("Spinning Config")] public Transform PoseSpinHolder; public bool CanSpin; private bool m_isSpinning; public LeverActuatedPiece[] ActuatedPieces; private bool useLinearRacking = true; private float baseDistance = 1f; private float BaseAngleOffset; private bool m_wasLeverLocked; private Vector3 m_baseSpinPosition = Vector3.zero; private float curDistanceBetweenGrips = 1f; private float lastDistanceBetweenGrips = -1f; private float m_rackingDisplacement; private float xSpinRot; private float xSpinVel; [Header("Double Barrel Params")] public Transform MuzzleTwo; public Transform RLPF2; public Transform RLPR2; public Transform RUPF2; public Transform RUPR2; public Transform REPF2; public Transform REPR2; public Transform REP2; public Vector3 EjectionVector2; public bool IsHammerCocked => m_isHammerCocked; public override void Awake() { //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Expected O, but got Unknown //IL_00b1: 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_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Expected O, but got Unknown ((FVRFireArm)this).Awake(); base.FChambers.Add(Chamber); if (UsesSecondChamber && (Object)(object)Chamber2 != (Object)null) { base.FChambers.Add(Chamber2); } GameObject val = new GameObject("m_proxyRound"); m_proxy = val.AddComponent<FVRFirearmMovingProxyRound>(); m_proxy.Init(((Component)this).transform); if ((Object)(object)Chamber2 != (Object)null) { GameObject val2 = new GameObject("m_proxyRound2"); m_proxy2 = val2.AddComponent<FVRFirearmMovingProxyRound>(); m_proxy2.Init(((Component)this).transform); } m_baseSpinPosition = PoseSpinHolder.localPosition; } public override Transform GetMuzzle() { if (!UsesSecondChamber) { return ((FVRFireArm)this).GetMuzzle(); } if (m_isSecondaryMuzzlePos) { return SecondMuzzle; } return base.MuzzlePos; } public override void BeginInteraction(FVRViveHand hand) { ((FVRFireArm)this).BeginInteraction(hand); SetBaseHandAngle(hand); } public override void UpdateInteraction(FVRViveHand hand) { //IL_0044: 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) //IL_0070: Invalid comparison between Unknown and I4 //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) ((FVRPhysicalObject)this).UpdateInteraction(hand); UpdateLever(); Trigger.localEulerAngles = new Vector3(Mathf.Lerp(TriggerRotRange.x, TriggerRotRange.y, hand.Input.TriggerFloat), 0f, 0f); if (hand.Input.TriggerDown && !((FVRPhysicalObject)this).IsAltHeld && (int)m_curLeverPos == 2 && ((FVRInteractiveObject)this).m_hasTriggeredUpSinceBegin && m_isHammerCocked) { Fire(); } float num = Mathf.InverseLerp(LeverAngleRange.y, LeverAngleRange.x, m_curLeverRot); if ((Object)(object)Hammer != (Object)null) { if (m_isHammerCocked) { Hammer.localEulerAngles = new Vector3(HammerAngleRange.x, 0f, 0f); } else { Hammer.localEulerAngles = new Vector3(Mathf.Lerp(HammerAngleRange.y, HammerAngleRange.x, num), 0f, 0f); } } } public override void EndInteraction(FVRViveHand hand) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) Trigger.localEulerAngles = new Vector3(0f, 0f, 0f); ((FVRFireArm)this).EndInteraction(hand); } private void SetBaseHandAngle(FVRViveHand hand) { //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_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_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_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004d: 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) Vector3 val = Vector3.ProjectOnPlane(((FVRInteractiveObject)this).m_hand.PoseOverride.forward, LeverRoot.right); Vector3 normalized = ((Vector3)(ref val)).normalized; Vector3 forward = LeverRoot.forward; float baseAngleOffset = Mathf.Atan2(Vector3.Dot(LeverRoot.right, Vector3.Cross(forward, normalized)), Vector3.Dot(forward, normalized)) * 57.29578f; BaseAngleOffset = baseAngleOffset; } private void UpdateLever() { //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Invalid comparison between Unknown and I4 //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Invalid comparison between Unknown and I4 //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_04d6: Unknown result type (might be due to invalid IL or missing references) //IL_0504: Unknown result type (might be due to invalid IL or missing references) //IL_039d: Unknown result type (might be due to invalid IL or missing references) //IL_03a8: Unknown result type (might be due to invalid IL or missing references) //IL_03ad: Unknown result type (might be due to invalid IL or missing references) //IL_03b2: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: Unknown result type (might be due to invalid IL or missing references) //IL_03bb: Unknown result type (might be due to invalid IL or missing references) //IL_03c3: Unknown result type (might be due to invalid IL or missing references) //IL_03c8: Unknown result type (might be due to invalid IL or missing references) //IL_03d0: Unknown result type (might be due to invalid IL or missing references) //IL_03d5: Unknown result type (might be due to invalid IL or missing references) //IL_03d7: Unknown result type (might be due to invalid IL or missing references) //IL_03d9: Unknown result type (might be due to invalid IL or missing references) //IL_03e3: Unknown result type (might be due to invalid IL or missing references) //IL_03e5: Unknown result type (might be due to invalid IL or missing references) //IL_0253: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_0587: Unknown result type (might be due to invalid IL or missing references) //IL_0555: Unknown result type (might be due to invalid IL or missing references) //IL_055b: Invalid comparison between Unknown and I4 //IL_051f: Unknown result type (might be due to invalid IL or missing references) //IL_0511: Unknown result type (might be due to invalid IL or missing references) //IL_0595: Unknown result type (might be due to invalid IL or missing references) //IL_059b: Invalid comparison between Unknown and I4 //IL_0571: Unknown result type (might be due to invalid IL or missing references) //IL_0563: Unknown result type (might be due to invalid IL or missing references) //IL_06c2: Unknown result type (might be due to invalid IL or missing references) //IL_05a1: Unknown result type (might be due to invalid IL or missing references) //IL_05a7: Invalid comparison between Unknown and I4 //IL_06cd: Unknown result type (might be due to invalid IL or missing references) //IL_0329: Unknown result type (might be due to invalid IL or missing references) //IL_032e: Unknown result type (might be due to invalid IL or missing references) //IL_0339: Unknown result type (might be due to invalid IL or missing references) //IL_0343: Unknown result type (might be due to invalid IL or missing references) //IL_0348: Unknown result type (might be due to invalid IL or missing references) //IL_0983: Unknown result type (might be due to invalid IL or missing references) //IL_0989: Invalid comparison between Unknown and I4 //IL_0a54: Unknown result type (might be due to invalid IL or missing references) //IL_0a5a: Invalid comparison between Unknown and I4 //IL_098f: Unknown result type (might be due to invalid IL or missing references) //IL_0995: Invalid comparison between Unknown and I4 //IL_0a60: Unknown result type (might be due to invalid IL or missing references) //IL_0bfd: Unknown result type (might be due to invalid IL or missing references) //IL_0c08: Unknown result type (might be due to invalid IL or missing references) //IL_0c0f: Unknown result type (might be due to invalid IL or missing references) //IL_0c2a: Unknown result type (might be due to invalid IL or missing references) //IL_0c35: Unknown result type (might be due to invalid IL or missing references) //IL_0c3c: Unknown result type (might be due to invalid IL or missing references) //IL_0b64: Unknown result type (might be due to invalid IL or missing references) //IL_0b6f: Unknown result type (might be due to invalid IL or missing references) //IL_0b76: Unknown result type (might be due to invalid IL or missing references) //IL_0b91: Unknown result type (might be due to invalid IL or missing references) //IL_0b9c: Unknown result type (might be due to invalid IL or missing references) //IL_0ba3: Unknown result type (might be due to invalid IL or missing references) //IL_0764: Unknown result type (might be due to invalid IL or missing references) //IL_076f: Unknown result type (might be due to invalid IL or missing references) //IL_077f: Unknown result type (might be due to invalid IL or missing references) //IL_078a: Unknown result type (might be due to invalid IL or missing references) //IL_079a: Unknown result type (might be due to invalid IL or missing references) //IL_079f: Unknown result type (might be due to invalid IL or missing references) //IL_07aa: Unknown result type (might be due to invalid IL or missing references) //IL_07ba: Unknown result type (might be due to invalid IL or missing references) //IL_07bf: Unknown result type (might be due to invalid IL or missing references) //IL_07ca: Unknown result type (might be due to invalid IL or missing references) //IL_07da: Unknown result type (might be due to invalid IL or missing references) //IL_07e5: Unknown result type (might be due to invalid IL or missing references) //IL_07f5: Unknown result type (might be due to invalid IL or missing references) //IL_07fa: Unknown result type (might be due to invalid IL or missing references) //IL_0805: Unknown result type (might be due to invalid IL or missing references) //IL_0815: Unknown result type (might be due to invalid IL or missing references) //IL_081a: Unknown result type (might be due to invalid IL or missing references) //IL_0825: Unknown result type (might be due to invalid IL or missing references) //IL_0830: Unknown result type (might be due to invalid IL or missing references) //IL_0d8c: Unknown result type (might be due to invalid IL or missing references) //IL_0d0f: Unknown result type (might be due to invalid IL or missing references) //IL_0d1a: Unknown result type (might be due to invalid IL or missing references) //IL_0d21: Unknown result type (might be due to invalid IL or missing references) //IL_0d3c: Unknown result type (might be due to invalid IL or missing references) //IL_0d47: Unknown result type (might be due to invalid IL or missing references) //IL_0d4e: Unknown result type (might be due to invalid IL or missing references) //IL_0cae: 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_0cc0: Unknown result type (might be due to invalid IL or missing references) //IL_0cdb: Unknown result type (might be due to invalid IL or missing references) //IL_0ce6: Unknown result type (might be due to invalid IL or missing references) //IL_0ced: Unknown result type (might be due to invalid IL or missing references) //IL_0c73: Unknown result type (might be due to invalid IL or missing references) //IL_0bda: Unknown result type (might be due to invalid IL or missing references) //IL_0db9: Unknown result type (might be due to invalid IL or missing references) //IL_0dc4: Unknown result type (might be due to invalid IL or missing references) //IL_0dcb: Unknown result type (might be due to invalid IL or missing references) //IL_0de6: Unknown result type (might be due to invalid IL or missing references) //IL_0df1: Unknown result type (might be due to invalid IL or missing references) //IL_0df8: Unknown result type (might be due to invalid IL or missing references) //IL_0e7b: Unknown result type (might be due to invalid IL or missing references) //IL_0e81: Invalid comparison between Unknown and I4 //IL_0891: Unknown result type (might be due to invalid IL or missing references) //IL_089c: 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_08b7: Unknown result type (might be due to invalid IL or missing references) //IL_08c7: Unknown result type (might be due to invalid IL or missing references) //IL_08cc: Unknown result type (might be due to invalid IL or missing references) //IL_08d7: Unknown result type (might be due to invalid IL or missing references) //IL_08e7: Unknown result type (might be due to invalid IL or missing references) //IL_08ec: Unknown result type (might be due to invalid IL or missing references) //IL_08f7: Unknown result type (might be due to invalid IL or missing references) //IL_0907: 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_0922: Unknown result type (might be due to invalid IL or missing references) //IL_0927: Unknown result type (might be due to invalid IL or missing references) //IL_0932: Unknown result type (might be due to invalid IL or missing references) //IL_0942: Unknown result type (might be due to invalid IL or missing references) //IL_0947: Unknown result type (might be due to invalid IL or missing references) //IL_0952: Unknown result type (might be due to invalid IL or missing references) //IL_095d: Unknown result type (might be due to invalid IL or missing references) //IL_0e30: Unknown result type (might be due to invalid IL or missing references) //IL_0e3b: Unknown result type (might be due to invalid IL or missing references) //IL_0e42: Unknown result type (might be due to invalid IL or missing references) //IL_0e5d: Unknown result type (might be due to invalid IL or missing references) //IL_0e68: 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_0ec4: Unknown result type (might be due to invalid IL or missing references) //IL_0eca: Invalid comparison between Unknown and I4 //IL_0f13: 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_0faf: Unknown result type (might be due to invalid IL or missing references) //IL_0f72: 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_0f87: Unknown result type (might be due to invalid IL or missing references) //IL_0f35: 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_0f4a: Unknown result type (might be due to invalid IL or missing references) bool flag = false; bool flag2 = false; if (((FVRInteractiveObject)this).IsHeld) { if (((FVRInteractiveObject)this).m_hand.IsInStreamlinedMode) { flag = ((FVRInteractiveObject)this).m_hand.Input.BYButtonPressed; flag2 = ((FVRInteractiveObject)this).m_hand.Input.BYButtonUp; } else { flag = ((FVRInteractiveObject)this).m_hand.Input.TouchpadPressed; flag2 = ((FVRInteractiveObject)this).m_hand.Input.TouchpadUp; } } m_isLeverReleasePressed = false; bool flag3 = false; if (!((FVRPhysicalObject)this).IsAltHeld && (Object)(object)((FVRInteractiveObject)ForeGrip).m_hand != (Object)null) { if (((FVRInteractiveObject)ForeGrip).m_hand.Input.TriggerPressed && ((FVRInteractiveObject)ForeGrip).m_hasTriggeredUpSinceBegin && (int)GM.Options.ControlOptions.LongGunSnipingAssist != 1) { flag3 = true; } m_isLeverReleasePressed = true; curDistanceBetweenGrips = Vector3.Distance(((FVRInteractiveObject)this).m_hand.PalmTransform.position, ((FVRInteractiveObject)((FVRPhysicalObject)this).AltGrip).m_hand.PalmTransform.position); if (lastDistanceBetweenGrips < 0f) { lastDistanceBetweenGrips = curDistanceBetweenGrips; } } else { lastDistanceBetweenGrips = -1f; } m_isSpinning = false; if (!((FVRPhysicalObject)this).IsAltHeld && CanSpin && flag) { m_isSpinning = true; } bool flag4 = false; if (m_isHammerCocked && !m_isSpinning && (int)m_curLeverPos == 2) { flag4 = true; } if (flag3) { flag4 = false; } if ((Object)(object)((FVRPhysicalObject)this).AltGrip == (Object)null && !((FVRPhysicalObject)this).IsAltHeld) { flag4 = true; } if (flag4 && useLinearRacking) { SetBaseHandAngle(((FVRInteractiveObject)this).m_hand); } m_wasLeverLocked = flag4; if (flag2) { m_tarLeverRot = 0f; PoseSpinHolder.localPosition = m_baseSpinPosition; lastDistanceBetweenGrips = curDistanceBetweenGrips; m_rackingDisplacement = 0f; } else if (m_isLeverReleasePressed && !flag4) { if (useLinearRacking) { curDistanceBetweenGrips = Vector3.Distance(((FVRInteractiveObject)this).m_hand.PalmTransform.position, ((FVRInteractiveObject)((FVRPhysicalObject)this).AltGrip).m_hand.PalmTransform.position); if (curDistanceBetweenGrips < lastDistanceBetweenGrips) { float num = lastDistanceBetweenGrips - curDistanceBetweenGrips; m_rackingDisplacement += num; } else { float num2 = curDistanceBetweenGrips - lastDistanceBetweenGrips; m_rackingDisplacement -= num2; } m_rackingDisplacement = Mathf.Clamp(m_rackingDisplacement, 0f, 0.04f); if (m_rackingDisplacement < 0.005f) { m_rackingDisplacement = 0f; } if (m_rackingDisplacement > 0.035f) { m_rackingDisplacement = 0.04f; } PoseSpinHolder.localPosition = m_baseSpinPosition + Vector3.forward * m_rackingDisplacement * 2f; m_tarLeverRot = Mathf.Lerp(LeverAngleRange.y, LeverAngleRange.x, m_rackingDisplacement * 25f); lastDistanceBetweenGrips = curDistanceBetweenGrips; } else { Vector3 val = Vector3.ProjectOnPlane(((FVRInteractiveObject)this).m_hand.PoseOverride.forward, LeverRoot.right); Vector3 normalized = ((Vector3)(ref val)).normalized; Vector3 forward = LeverRoot.forward; float num3 = Mathf.Atan2(Vector3.Dot(LeverRoot.right, Vector3.Cross(forward, normalized)), Vector3.Dot(forward, normalized)) * 57.29578f; num3 -= BaseAngleOffset; num3 *= 3f; num3 = Mathf.Clamp(num3, LeverAngleRange.x, LeverAngleRange.y); m_tarLeverRot = num3; } } else if (m_isSpinning) { float num4 = Mathf.Clamp(((Vector3)(ref ((FVRInteractiveObject)this).m_hand.Input.VelLinearWorld)).magnitude - 1f, 0f, 3f); float num5 = num4 * 120f; float num6 = Mathf.Repeat(Mathf.Abs(xSpinRot), 360f); num5 = Mathf.Clamp(num5, 0f, num6 * 0.5f); m_tarLeverRot = Mathf.Clamp(0f - num5, LeverAngleRange.x, LeverAngleRange.y); PoseSpinHolder.localPosition = m_baseSpinPosition; } if (Mathf.Abs(m_curLeverRot - LeverAngleRange.y) < 1f) { if ((int)m_lastLeverPos == 0) { m_curLeverPos = (ZPos)1; } else { m_curLeverPos = (ZPos)2; base.IsBreachOpenForGasOut = false; } } else if (Mathf.Abs(m_curLeverRot - LeverAngleRange.x) < 1f) { if ((int)m_lastLeverPos == 2) { m_curLeverPos = (ZPos)1; } else { m_curLeverPos = (ZPos)0; base.IsBreachOpenForGasOut = true; } } else { m_curLeverPos = (ZPos)1; base.IsBreachOpenForGasOut = true; } if ((int)m_curLeverPos == 2 && (int)m_lastLeverPos != 2) { m_tarLeverRot = LeverAngleRange.y; m_curLeverRot = LeverAngleRange.y; if (m_isActionMovingForward && m_proxy.IsFull && !Chamber.IsFull) { ((FVRInteractiveObject)this).m_hand.Buzz(((FVRInteractiveObject)this).m_hand.Buzzer.Buzz_OnHoverInteractive); Chamber.SetRound(m_proxy.Round, false); m_proxy.ClearProxy(); ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)10, 1f); } else { ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)41, 1f); } if (UsesSecondChamber && m_isActionMovingForward && m_proxy2.IsFull && !Chamber2.IsFull) { Chamber2.SetRound(m_proxy2.Round, false); m_proxy2.ClearProxy(); } m_isActionMovingForward = false; } else if ((int)m_curLeverPos == 0 && (int)m_lastLeverPos != 0) { m_tarLeverRot = LeverAngleRange.x; m_curLeverRot = LeverAngleRange.x; m_isHammerCocked = true; if (UsesSecondChamber) { m_isHammerCocked2 = true; } ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)7, 1f); if (!m_isActionMovingForward && Chamber.IsFull) { ((FVRInteractiveObject)this).m_hand.Buzz(((FVRInteractiveObject)this).m_hand.Buzzer.Buzz_OnHoverInteractive); Chamber.EjectRound(ReceiverEjectionPoint.position, ((Component)this).transform.right * EjectionDir.x + ((Component)this).transform.up * EjectionDir.y + ((Component)this).transform.forward * EjectionDir.z, ((Component)this).transform.right * EjectionSpin.x + ((Component)this).transform.up * EjectionSpin.y + ((Component)this).transform.forward * EjectionSpin.z, ReceiverEjectionPoint.position, ReceiverEjectionPoint.rotation, false); ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)11, 1f); } else { ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)40, 1f); } if (UsesSecondChamber && !m_isActionMovingForward && Chamber2.IsFull) { Chamber2.EjectRound(REP2.position, ((Component)this).transform.right * EjectionVector2.x + ((Component)this).transform.up * EjectionVector2.y + ((Component)this).transform.forward * EjectionVector2.z, ((Component)this).transform.right * EjectionSpin.x + ((Component)this).transform.up * EjectionSpin.y + ((Component)this).transform.forward * EjectionSpin.z, ReceiverEjectionPoint.position, ReceiverEjectionPoint.rotation, false); } m_isActionMovingForward = true; } else if (!GrabsRoundFromMagOnBoltForward && (int)m_curLeverPos == 1 && (int)m_lastLeverPos == 2) { if ((Object)(object)base.Magazine != (Object)null && !m_proxy.IsFull && base.Magazine.HasARound()) { GameObject fromPrefabReference = base.Magazine.RemoveRound(false); m_proxy.SetFromPrefabReference(fromPrefabReference); } if (UsesSecondChamber && (Object)(object)base.Magazine != (Object)null && !m_proxy2.IsFull && base.Magazine.HasARound()) { GameObject fromPrefabReference2 = base.Magazine.RemoveRound(false); m_proxy2.SetFromPrefabReference(fromPrefabReference2); } } else if (GrabsRoundFromMagOnBoltForward && (int)m_curLeverPos == 1 && (int)m_lastLeverPos == 0) { if ((Object)(object)base.Magazine != (Object)null && !m_proxy.IsFull && base.Magazine.HasARound()) { GameObject fromPrefabReference3 = base.Magazine.RemoveRound(false); m_proxy.SetFromPrefabReference(fromPrefabReference3); } if (UsesSecondChamber && (Object)(object)base.Magazine != (Object)null && !m_proxy2.IsFull && base.Magazine.HasARound()) { GameObject fromPrefabReference4 = base.Magazine.RemoveRound(false); m_proxy2.SetFromPrefabReference(fromPrefabReference4); } } float num7 = Mathf.InverseLerp(LeverAngleRange.y, LeverAngleRange.x, m_curLeverRot); if (m_proxy.IsFull) { if (m_isActionMovingForward) { m_proxy.ProxyRound.position = Vector3.Lerp(ReceiverUpperPathForward.position, ReceiverUpperPathRearward.position, num7); m_proxy.ProxyRound.rotation = Quaternion.Slerp(ReceiverUpperPathForward.rotation, ReceiverUpperPathRearward.rotation, num7); if ((Object)(object)LoadingGate != (Object)null) { LoadingGate.localEulerAngles = new Vector3(LoadingGateAngleRange.x, 0f, 0f); } } else { m_proxy.ProxyRound.position = Vector3.Lerp(ReceiverLowerPathForward.position, ReceiverLowerPathRearward.position, num7); m_proxy.ProxyRound.rotation = Quaternion.Slerp(ReceiverLowerPathForward.rotation, ReceiverLowerPathRearward.rotation, num7); if ((Object)(object)LoadingGate != (Object)null) { LoadingGate.localEulerAngles = new Vector3(LoadingGateAngleRange.y, 0f, 0f); } } } if (m_proxy2.IsFull) { if (m_isActionMovingForward) { m_proxy2.ProxyRound.position = Vector3.Lerp(RUPF2.position, RUPR2.position, num7); m_proxy2.ProxyRound.rotation = Quaternion.Slerp(RUPF2.rotation, RUPR2.rotation, num7); } else { m_proxy2.ProxyRound.position = Vector3.Lerp(RLPF2.position, RLPR2.position, num7); m_proxy2.ProxyRound.rotation = Quaternion.Slerp(RLPF2.rotation, RLPR2.rotation, num7); } } else if ((Object)(object)LoadingGate != (Object)null) { LoadingGate.localEulerAngles = new Vector3(LoadingGateAngleRange.y, 0f, 0f); } if (Chamber.IsFull) { Chamber.ProxyRound.position = Vector3.Lerp(ReceiverEjectionPathForward.position, ReceiverEjectionPathRearward.position, num7); Chamber.ProxyRound.rotation = Quaternion.Slerp(ReceiverEjectionPathForward.rotation, ReceiverEjectionPathRearward.rotation, num7); } if (UsesSecondChamber && Chamber2.IsFull) { Chamber2.ProxyRound.position = Vector3.Lerp(ReceiverEjectionPathForward.position, ReceiverEjectionPathRearward.position, num7); Chamber2.ProxyRound.rotation = Quaternion.Slerp(ReceiverEjectionPathForward.rotation, ReceiverEjectionPathRearward.rotation, num7); } if ((int)m_curLeverPos != 2 && !m_proxy.IsFull) { Chamber.IsAccessible = true; } else { Chamber.IsAccessible = false; } if (UsesSecondChamber) { if ((int)m_curLeverPos != 2 && !m_proxy2.IsFull) { Chamber2.IsAccessible = true; } else { Chamber2.IsAccessible = false; } } for (int i = 0; i < ActuatedPieces.Length; i++) { if ((int)ActuatedPieces[i].InterpStyle == 0) { ActuatedPieces[i].Piece.localPosition = Vector3.Lerp(ActuatedPieces[i].PosBack, ActuatedPieces[i].PosForward, num7); } else { ActuatedPieces[i].Piece.localEulerAngles = Vector3.Lerp(ActuatedPieces[i].PosBack, ActuatedPieces[i].PosForward, num7); } } m_lastLeverPos = m_curLeverPos; } private void Fire() { //IL_00d9: Unknown result type (might be due to invalid IL or missing references) if (m_isHammerCocked) { m_isHammerCocked = false; } else if (m_isHammerCocked2) { m_isHammerCocked2 = false; } ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)6, 1f); if (Chamber.Fire()) { ((FVRFireArm)this).Fire(Chamber, ((FVRFireArm)this).GetMuzzle(), true, 1f, -1f); } if (Chamber2.Fire()) { ((FVRFireArm)this).Fire(Chamber2, MuzzleTwo, true, 1f, -1f); } ((FVRFireArm)this).FireMuzzleSmoke(); bool flag = ((FVRFireArm)this).IsTwoHandStabilized()