Decompiled source of HuntHaymaker v1.0.4
HuntHaymaker.dll
Decompiled 3 days 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 FistVR; using HarmonyLib; using OtherLoader; using UnityEditor; using UnityEngine; [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 BitWizrd.HuntHaymaker { [BepInPlugin("BitWizrd.HuntHaymaker", "HuntHaymaker", "1.0.4")] [BepInProcess("h3vr.exe")] [Description("Built with MeatKit")] [BepInDependency("h3vr.otherloader", "1.3.0")] public class HuntHaymakerPlugin : BaseUnityPlugin { private static readonly string BasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); internal static ManualLogSource Logger; private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; LoadAssets(); } private void LoadAssets() { Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "BitWizrd.HuntHaymaker"); OtherLoader.RegisterDirectLoad(BasePath, "BitWizrd.HuntHaymaker", "", "haymaker", "", ""); } } } public class BloodBondSR : MonoBehaviour { private void Awake() { string name = "Ammo_69_CashMoney_D100(Clone)"; ((Object)((Component)this).gameObject).name = name; Collider[] componentsInChildren = ((Component)this).GetComponentsInChildren<Collider>(true); for (int i = 0; i < componentsInChildren.Length; i++) { ((Object)((Component)componentsInChildren[i]).gameObject).name = name; } } } public class CooldownSound : MonoBehaviour { public ClosedBoltWeapon weapon; public AudioClip[] audioClips; public float volume = 1f; public int minShots = 5; public int maxShots = 10; public float minDelay = 0.5f; public float maxDelay = 2f; public float resetTime = 1.5f; private AudioSource audioSource; private int shotCounter = 0; private float lastShotTime; private bool lastRoundSpent; private int nextShotThreshold; private bool isPlayingSound = false; private void Start() { if ((Object)(object)weapon == (Object)null) { weapon = ((Component)this).GetComponent<ClosedBoltWeapon>(); } if ((Object)(object)weapon == (Object)null) { Debug.LogError((object)"CooldownSound: Weapon reference is missing. Attach this script to a ClosedBoltWeapon."); return; } audioSource = ((Component)weapon).gameObject.GetComponent<AudioSource>(); if ((Object)(object)audioSource == (Object)null) { audioSource = ((Component)weapon).gameObject.AddComponent<AudioSource>(); } audioSource.spatialBlend = 1f; audioSource.playOnAwake = false; audioSource.rolloffMode = (AudioRolloffMode)0; lastRoundSpent = weapon.Chamber.IsSpent; SetNewShotThreshold(); } private void Update() { DetectFiring(); } private void DetectFiring() { if (weapon.Chamber.IsFull && weapon.Chamber.IsSpent && !lastRoundSpent) { OnWeaponFired(); } lastRoundSpent = weapon.Chamber.IsSpent; } private void OnWeaponFired() { float num = Time.time - lastShotTime; if (num > resetTime) { shotCounter = 0; SetNewShotThreshold(); } shotCounter++; lastShotTime = Time.time; if (shotCounter >= nextShotThreshold) { ((MonoBehaviour)this).StartCoroutine(PlaySoundWithDelay()); shotCounter = 0; SetNewShotThreshold(); } } private IEnumerator PlaySoundWithDelay() { if (!isPlayingSound) { isPlayingSound = true; float delay = Random.Range(minDelay, maxDelay); yield return (object)new WaitForSeconds(delay); if (audioClips.Length > 0) { int index = Random.Range(0, audioClips.Length); audioSource.clip = audioClips[index]; audioSource.PlayOneShot(audioSource.clip, volume); yield return (object)new WaitForSeconds(audioSource.clip.length); } isPlayingSound = false; } } private void SetNewShotThreshold() { nextShotThreshold = Random.Range(minShots, maxShots + 1); } } public class CustomWaggleJoint : MonoBehaviour { public float distanceLimit = 0.25f; public float angleLimitLeft = 45f; public float angleLimitRight = 45f; public float gravityScale = 1f; public bool useSpring; public float springApproachRate = 0.95f; public float damping; public Transform hingeGraphic; public Vector3 hingeGraphicRotationOffset; public bool invertWaggleAxis; public bool ManualExecution; public float onHitLimitCooldown = 0.05f; public Vector3 waggleAxis = Vector3.up; public Vector3 rotationAxis = Vector3.up; [Header("Gizmo Options")] public bool debugGizmos = false; public bool showRotationExtremes = false; public bool showRotationDirectionArrows = false; private Vector3 particlePos; private Vector3 particleVel; private bool leftCatchState; private bool rightCatchState; private float lastTouchTime = float.MinValue; private Vector3 EffectiveWaggleDir() { //IL_0023: 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_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) return ((Component)this).transform.TransformDirection((!invertWaggleAxis) ? waggleAxis : (-waggleAxis)); } private void GetEffectiveAngleLimits(out float effectiveAngleMin, out float effectiveAngleMax) { if (invertWaggleAxis) { effectiveAngleMin = 0f - angleLimitLeft; effectiveAngleMax = angleLimitRight; } else { effectiveAngleMin = 0f - angleLimitRight; effectiveAngleMax = angleLimitLeft; } } public void ResetParticlePos() { //IL_0008: 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_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) particlePos = ((Component)this).transform.position + EffectiveWaggleDir() * distanceLimit; particleVel = Vector3.zero; } private void OnHitLimit(float angularVelocity) { } public void Execute() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: 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_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: 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_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0101: 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_0092: 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_009c: 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) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) float deltaTime = Time.deltaTime; Transform transform = ((Component)this).transform; Vector3 val = Physics.gravity * gravityScale; Vector3 val2 = particlePos; Vector3 val3 = particleVel * Mathf.Pow(1f - damping, deltaTime) + val * deltaTime; Vector3 val4 = val2 + val3 * deltaTime; Vector3 val5 = transform.TransformDirection(((Vector3)(ref rotationAxis)).normalized); Vector3 val6 = EffectiveWaggleDir(); Vector3 position = transform.position; if (useSpring) { val4 = Vector3.Lerp(val4, position + val6 * distanceLimit, 1f - Mathf.Pow(1f - springApproachRate, deltaTime)); } GetEffectiveAngleLimits(out var effectiveAngleMin, out var effectiveAngleMax); particlePos = ProjectOnHinge(val4, position, val5, val6, distanceLimit, effectiveAngleMin, effectiveAngleMax); particleVel = (particlePos - val2) / deltaTime; if ((Object)(object)hingeGraphic != (Object)null) { hingeGraphic.rotation = Quaternion.LookRotation(particlePos - transform.position, val5) * Quaternion.Euler(hingeGraphicRotationOffset); } } private Vector3 ProjectOnHinge(Vector3 point, Vector3 hingePivot, Vector3 hingeAxis, Vector3 hingeDirection, float distanceLimit, float angleMin, float angleMax) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: 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_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_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) float num = ToHingeAngle(point, hingePivot, hingeAxis, hingeDirection); num = Mathf.Clamp(num, angleMin, angleMax); Vector3 val = Quaternion.AngleAxis(num, hingeAxis) * hingeDirection; return val * distanceLimit + hingePivot; } private float ToHingeAngle(Vector3 point, Vector3 hingePivot, Vector3 hingeAxis, Vector3 hingeDirection) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: 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_001c: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) Vector3 val = point - hingePivot; Vector3 val2 = Vector3.ProjectOnPlane(val, hingeAxis); Vector3 normalized = ((Vector3)(ref val2)).normalized; return SignedAngle(hingeDirection, normalized, hingeAxis); } private float SignedAngle(Vector3 from, Vector3 to, Vector3 axis) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) float num = Vector3.Angle(from, to); return num * Mathf.Sign(Vector3.Dot(axis, Vector3.Cross(from, to))); } private void Start() { ResetParticlePos(); } private void Update() { if (!ManualExecution) { Execute(); } } private void OnDrawGizmosSelected() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: 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) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00de: 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_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_0172: 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_017a: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: 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_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_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_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: 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_0202: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0212: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Unknown result type (might be due to invalid IL or missing references) //IL_021e: Unknown result type (might be due to invalid IL or missing references) //IL_0229: 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_0235: Unknown result type (might be due to invalid IL or missing references) //IL_023a: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) if (debugGizmos && !((Object)(object)Selection.activeGameObject != (Object)(object)((Component)this).gameObject)) { Transform transform = ((Component)this).transform; Vector3 position = transform.position; Vector3 val = EffectiveWaggleDir(); Vector3 val2 = transform.TransformDirection(((Vector3)(ref rotationAxis)).normalized); Vector3 val3 = position + val * distanceLimit; Gizmos.color = Color.white; float num = 0.01f; Gizmos.DrawLine(position + Vector3.left * num, position + Vector3.right * num); Gizmos.DrawLine(position + Vector3.up * num, position + Vector3.down * num); Gizmos.DrawLine(position + Vector3.forward * num, position + Vector3.back * num); Handles.BeginGUI(); Handles.Label(position, "Pivot"); Handles.EndGUI(); Gizmos.color = Color.green; Gizmos.DrawLine(position, val3); GetEffectiveAngleLimits(out var effectiveAngleMin, out var effectiveAngleMax); Vector3 val4 = Quaternion.AngleAxis(effectiveAngleMax, val2) * val; Vector3 val5 = Quaternion.AngleAxis(effectiveAngleMin, val2) * val; Vector3 val6 = position + val4 * distanceLimit; Vector3 val7 = position + val5 * distanceLimit; Gizmos.color = Color.cyan; Gizmos.DrawLine(position, val6); Gizmos.DrawLine(position, val7); Handles.color = Color.yellow; Handles.DrawWireArc(position, val2, val5, effectiveAngleMax - effectiveAngleMin, distanceLimit * 0.5f); if (Application.isPlaying) { Gizmos.color = Color.red; float num2 = 0.01f; Gizmos.DrawLine(particlePos + Vector3.left * num2, particlePos + Vector3.right * num2); Gizmos.DrawLine(particlePos + Vector3.up * num2, particlePos + Vector3.down * num2); Gizmos.DrawLine(particlePos + Vector3.forward * num2, particlePos + Vector3.back * num2); } } } } namespace BitWizrd.RevolverMod { public class DoubleActionEjectorRod : FVRInteractiveObject { public DoubleActionLoadingGateRevolver revolver; } public class DoubleActionLoadingGateEjectorRod : FVRInteractiveObject { public DoubleActionLoadingGateRevolver Revolver; public override void SimpleInteraction(FVRViveHand hand) { ((FVRInteractiveObject)this).SimpleInteraction(hand); Revolver.EjectPrevCylinder(); } } public class DoubleActionLoadingGateRevolver : FVRFireArm { [Header("Single Action Revolver")] public bool AllowsSuppressor; public Transform Hammer; public Transform LoadingGate; public Transform Trigger; public Transform EjectorRod; public SingleActionRevolverCylinder Cylinder; public Transform HammerFanDir; private int m_curChamber; private float m_curChamberLerp; private float m_tarChamberLerp; [Header("Component Movement Params")] public float Hammer_Rot_Uncocked; public float Hammer_Rot_Halfcocked; public float Hammer_Rot_Cocked; public float LoadingGate_Rot_Closed; public float LoadingGate_Rot_Open; public float Trigger_Rot_Forward; public float Trigger_Rot_Rearward; public Vector3 EjectorRod_Pos_Forward; public Vector3 EjectorRod_Pos_Rearward; public bool DoesCylinderTranslateForward; public bool IsAccessTwoChambersBack; public Vector3 CylinderBackPos; public Vector3 CylinderFrontPos; [Header("Spinning Config")] public Transform PoseSpinHolder; public bool CanSpin = true; private bool m_isSpinning; [Header("StateToggling")] public bool StateToggles = true; private bool m_isStateToggled; public Transform Pose_Main; public Transform Pose_Toggled; public float TriggerThreshold = 0.9f; private float m_triggerFloat; private bool m_isHammerCocking; private bool m_isHammerCocked; private float m_hammerCockLerp; private float m_hammerCockSpeed = 10f; private float xSpinRot; private float xSpinVel; private float timeSinceColFire; [Header("DoubleAction Config")] private float m_tarTriggerFloat; private float m_tarRealTriggerFloat; private float m_triggerCurrentRot; private float m_curTriggerFloat; private float m_curRealTriggerFloat; private float lastTriggerRot; private RecockingState m_recockingState; private float m_recockingLerp; private bool m_shouldRecock; private bool DoesFiringRecock; private bool m_hasTriggerCycled; public bool CanManuallyCockHammer; private bool m_isHammerLocked; private float m_hammerCurrentRot; private Vector2 RecockingSpeeds = new Vector2(8f, 3f); public Transform RecockingPiece; public Transform RecockingPoint_Forward; public Transform RecockingPoint_Rearward; public float ejectedRoundOffset; public bool doesToggleStateHalfRotatesCylinder; public int CurChamber { get { return m_curChamber; } set { m_curChamber = value % Cylinder.NumChambers; } } public int NextChamber => (m_curChamber + 1) % Cylinder.NumChambers; public int PrevChamber { get { int num = m_curChamber - 1; return (num >= 0) ? num : (Cylinder.NumChambers - 1); } } public int PrevChamber2 { get { int num = m_curChamber - 2; return (num >= 0) ? num : (Cylinder.NumChambers + num); } } public override void Awake() { //IL_0058: 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) ((FVRFireArm)this).Awake(); FVRFireArmChamber[] chambers = Cylinder.Chambers; foreach (FVRFireArmChamber item in chambers) { base.FChambers.Add(item); } if ((Object)(object)((FVRInteractiveObject)this).PoseOverride_Touch != (Object)null) { Pose_Main.localPosition = ((FVRInteractiveObject)this).PoseOverride_Touch.localPosition; Pose_Main.localRotation = ((FVRInteractiveObject)this).PoseOverride_Touch.localRotation; } } public override void BeginInteraction(FVRViveHand hand) { //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: 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_0046: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: 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_0084: Unknown result type (might be due to invalid IL or missing references) ((FVRFireArm)this).BeginInteraction(hand); if (((FVRPhysicalObject)this).IsAltHeld) { return; } if (!m_isStateToggled) { ((FVRInteractiveObject)this).PoseOverride.localPosition = Pose_Main.localPosition; ((FVRInteractiveObject)this).PoseOverride.localRotation = Pose_Main.localRotation; if ((Object)(object)((FVRInteractiveObject)this).m_grabPointTransform != (Object)null) { ((FVRInteractiveObject)this).m_grabPointTransform.localPosition = Pose_Main.localPosition; ((FVRInteractiveObject)this).m_grabPointTransform.localRotation = Pose_Main.localRotation; } } else { ((FVRInteractiveObject)this).PoseOverride.localPosition = Pose_Toggled.localPosition; ((FVRInteractiveObject)this).PoseOverride.localRotation = Pose_Toggled.localRotation; if ((Object)(object)((FVRInteractiveObject)this).m_grabPointTransform != (Object)null) { ((FVRInteractiveObject)this).m_grabPointTransform.localPosition = Pose_Toggled.localPosition; ((FVRInteractiveObject)this).m_grabPointTransform.localRotation = Pose_Toggled.localRotation; } } } public override void UpdateInteraction(FVRViveHand hand) { //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0182: 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_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) ((FVRPhysicalObject)this).UpdateInteraction(hand); m_isSpinning = false; if (!((FVRPhysicalObject)this).IsAltHeld) { if (!m_isStateToggled) { if (hand.Input.TouchpadPressed && !hand.IsInStreamlinedMode && (double)Vector2.Angle(hand.Input.TouchpadAxes, Vector2.up) < 45.0) { m_isSpinning = true; } if (hand.IsInStreamlinedMode) { if (hand.Input.BYButtonDown && StateToggles) { ToggleState(); ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)17, 1f); } } else if (hand.Input.TouchpadDown && (double)Vector2.Angle(hand.Input.TouchpadAxes, Vector2.left) < 45.0 && StateToggles) { ToggleState(); ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)17, 1f); } } else { if (hand.IsInStreamlinedMode) { if (hand.Input.AXButtonDown) { AdvanceCylinder(); } if (hand.Input.BYButtonDown && StateToggles) { ToggleState(); ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)17, 1f); } } else if (hand.Input.TouchpadDown) { if ((double)Vector2.Angle(hand.Input.TouchpadAxes, Vector2.left) < 45.0 && StateToggles) { ToggleState(); ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)18, 1f); } else if ((double)Vector2.Angle(hand.Input.TouchpadAxes, Vector2.right) < 45.0) { AdvanceCylinder(); } } if (hand.Input.TriggerDown) { EjectPrevCylinder(); } } } UpdateTriggerHammer(); UpdateCylinderRot(); UpdateCylinderRelease(); if (!((FVRInteractiveObject)this).IsHeld) { m_isSpinning = false; } } public override void EndInteraction(FVRViveHand hand) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) m_triggerFloat = 0f; ((FVRFireArm)this).EndInteraction(hand); ((FVRPhysicalObject)this).RootRigidbody.AddRelativeTorque(new Vector3(xSpinVel, 0f, 0f), (ForceMode)1); } public override void FVRFixedUpdate() { UpdateSpinning(); if ((double)timeSinceColFire < 3.0) { timeSinceColFire += Time.deltaTime; } ((FVRFireArm)this).FVRFixedUpdate(); UpdateRecocking(); } private void UpdateRecocking() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Invalid comparison between Unknown and I4 //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Invalid comparison between Unknown and I4 //IL_0085: 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_009b: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0121: 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) RecockingState recockingState = m_recockingState; if ((int)recockingState != 1) { if ((int)recockingState == 2) { m_recockingLerp -= Time.deltaTime * RecockingSpeeds.y; if ((double)m_recockingLerp <= 0.0) { m_recockingState = (RecockingState)0; } m_recockingLerp = Mathf.Clamp(m_recockingLerp, 0f, 1f); RecockingPiece.position = Vector3.Lerp(RecockingPoint_Forward.position, RecockingPoint_Rearward.position, m_recockingLerp); } } else { m_recockingLerp += Time.deltaTime * RecockingSpeeds.x; if ((double)m_recockingLerp >= 1.0) { m_recockingState = (RecockingState)2; m_isHammerLocked = true; } m_recockingLerp = Mathf.Clamp(m_recockingLerp, 0f, 1f); RecockingPiece.position = Vector3.Lerp(RecockingPoint_Forward.position, RecockingPoint_Rearward.position, m_recockingLerp); } } private void InitiateRecock() { //IL_0002: 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) if ((int)m_recockingState == 0) { m_recockingLerp = 0f; m_recockingState = (RecockingState)1; } } private void UpdateTriggerHammer() { //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_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_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_02a1: Unknown result type (might be due to invalid IL or missing references) //IL_0523: Unknown result type (might be due to invalid IL or missing references) //IL_057b: Unknown result type (might be due to invalid IL or missing references) //IL_0561: Unknown result type (might be due to invalid IL or missing references) //IL_0379: Unknown result type (might be due to invalid IL or missing references) //IL_03fb: Unknown result type (might be due to invalid IL or missing references) //IL_0400: Unknown result type (might be due to invalid IL or missing references) if (((FVRInteractiveObject)this).IsHeld && !m_isStateToggled && !m_isHammerCocked && !m_isHammerCocking && (Object)(object)((FVRInteractiveObject)this).m_hand.OtherHand != (Object)null) { Vector3 velLinearWorld = ((FVRInteractiveObject)this).m_hand.OtherHand.Input.VelLinearWorld; if (Vector3.Distance(((FVRInteractiveObject)this).m_hand.OtherHand.PalmTransform.position, HammerFanDir.position) < 0.15f && Vector3.Angle(velLinearWorld, HammerFanDir.forward) < 60f && ((Vector3)(ref velLinearWorld)).magnitude > 1f) { CockHammer(10f); } } if (((FVRInteractiveObject)this).m_hasTriggeredUpSinceBegin && !m_isSpinning && !m_isStateToggled) { m_tarTriggerFloat = ((FVRInteractiveObject)this).m_hand.Input.TriggerFloat; m_tarRealTriggerFloat = ((FVRInteractiveObject)this).m_hand.Input.TriggerFloat; } else { m_tarTriggerFloat = 0f; m_tarRealTriggerFloat = 0f; } if (m_isHammerLocked) { m_tarTriggerFloat += 0.8f; m_triggerCurrentRot = Mathf.Lerp(Trigger_Rot_Forward, Trigger_Rot_Rearward, m_curTriggerFloat); } else { m_triggerCurrentRot = Mathf.Lerp(Trigger_Rot_Forward, Trigger_Rot_Rearward, m_curTriggerFloat); } m_curTriggerFloat = Mathf.MoveTowards(m_curTriggerFloat, m_tarTriggerFloat, Time.deltaTime * 14f); m_curRealTriggerFloat = Mathf.MoveTowards(m_curRealTriggerFloat, m_tarRealTriggerFloat, Time.deltaTime * 14f); if (DoesCylinderTranslateForward) { ((Component)Cylinder).transform.localPosition = Vector3.Lerp(CylinderBackPos, CylinderFrontPos, m_curTriggerFloat); } if (Mathf.Abs(m_triggerCurrentRot - lastTriggerRot) > 0.01f && (Object)(object)Trigger != (Object)null) { Trigger.localEulerAngles = new Vector3(m_triggerCurrentRot, 0f, 0f); } lastTriggerRot = m_triggerCurrentRot; if (m_shouldRecock) { m_shouldRecock = false; InitiateRecock(); } if (!m_hasTriggerCycled && !DoesFiringRecock) { bool flag = false; if (DoesFiringRecock && (int)m_recockingState != 0) { flag = true; } if (!flag && m_curTriggerFloat >= 0.98f && !((FVRInteractiveObject)this).m_hand.Input.TouchpadPressed) { if (!m_isStateToggled) { m_hasTriggerCycled = true; m_isHammerLocked = false; CurChamber++; m_curChamberLerp = 0f; m_tarChamberLerp = 0f; ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)6, 1f); Fire(); if (DoesFiringRecock) { m_shouldRecock = true; } } } else if (m_curTriggerFloat <= 0.08f && !m_isHammerLocked && CanManuallyCockHammer) { bool flag2 = false; if (DoesFiringRecock && (int)m_recockingState != 0) { flag2 = true; } if (!((FVRPhysicalObject)this).IsAltHeld && !flag2 && !m_isStateToggled) { if (((FVRInteractiveObject)this).m_hand.IsInStreamlinedMode) { if (((FVRInteractiveObject)this).m_hand.Input.AXButtonDown) { CockHammer(5f); } } else if (((FVRInteractiveObject)this).m_hand.Input.TouchpadDown && Vector2.Angle(((FVRInteractiveObject)this).m_hand.Input.TouchpadAxes, Vector2.down) < 45f) { CockHammer(5f); } } } } else if (m_hasTriggerCycled && m_curRealTriggerFloat <= 0.08f) { m_hasTriggerCycled = false; ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)16, 1f); } m_hammerCurrentRot = (m_hasTriggerCycled ? (m_isHammerLocked ? Mathf.Lerp(m_hammerCurrentRot, Hammer_Rot_Cocked, Time.deltaTime * 10f) : Mathf.Lerp(m_hammerCurrentRot, Hammer_Rot_Uncocked, Time.deltaTime * 30f)) : (m_isHammerLocked ? Mathf.Lerp(m_hammerCurrentRot, Hammer_Rot_Cocked, Time.deltaTime * 10f) : Mathf.Lerp(Hammer_Rot_Uncocked, Hammer_Rot_Cocked, m_curTriggerFloat))); if ((Object)(object)Hammer != (Object)null) { Hammer.localEulerAngles = new Vector3(m_hammerCurrentRot, 0f, 0f); } if ((Object)(object)LoadingGate != (Object)null) { LoadingGate.localEulerAngles = ((!m_isStateToggled) ? new Vector3(0f, 0f, LoadingGate_Rot_Closed) : new Vector3(0f, 0f, LoadingGate_Rot_Open)); } } private void UpdateCylinderRelease() { //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) if (m_isHammerLocked) { m_tarChamberLerp = 1f; } else if (!m_hasTriggerCycled && doesToggleStateHalfRotatesCylinder && m_isStateToggled) { m_tarChamberLerp = 0.5f; } else if (!m_hasTriggerCycled) { m_tarChamberLerp = m_curTriggerFloat * 1.4f; } m_curChamberLerp = Mathf.Lerp(m_curChamberLerp, m_tarChamberLerp, Time.deltaTime * 16f); int num = (CurChamber + 1) % Cylinder.NumChambers; ((Component)Cylinder).transform.localRotation = Quaternion.Slerp(Cylinder.GetLocalRotationFromCylinder(CurChamber), Cylinder.GetLocalRotationFromCylinder(num), m_curChamberLerp); } private void AdvanceCylinder() { CurChamber++; ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)15, 1f); } public void EjectPrevCylinder() { //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) if (m_isStateToggled) { int num = PrevChamber; if (IsAccessTwoChambersBack) { num = PrevChamber2; } FVRFireArmChamber val = Cylinder.Chambers[num]; if (val.IsFull) { ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)29, 1f); } val.EjectRound(((Component)val).transform.position + ((Component)val).transform.forward * ejectedRoundOffset, -((Component)val).transform.forward, Vector3.zero, false); } } private void Fire() { //IL_008f: Unknown result type (might be due to invalid IL or missing references) ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)6, 1f); if (Cylinder.Chambers[CurChamber].Fire()) { FVRFireArmChamber val = Cylinder.Chambers[CurChamber]; ((FVRFireArm)this).Fire(val, ((FVRFireArm)this).GetMuzzle(), true, 1f, -1f); ((FVRFireArm)this).FireMuzzleSmoke(); ((FVRFireArm)this).Recoil(((FVRFireArm)this).IsTwoHandStabilized(), (Object)(object)((FVRPhysicalObject)this).AltGrip != (Object)null, ((FVRFireArm)this).IsShoulderStabilized(), (FVRFireArmRecoilProfile)null, 1f); ((FVRFireArm)this).PlayAudioGunShot(val.GetRound(), GM.CurrentPlayerBody.GetCurrentSoundEnvironment(), 1f); if (GM.CurrentSceneSettings.IsAmmoInfinite || GM.CurrentPlayerBody.IsInfiniteAmmo) { val.IsSpent = false; val.UpdateProxyDisplay(); } } } private void UpdateCylinderRot() { //IL_0073: Unknown result type (might be due to invalid IL or missing references) if (m_isStateToggled) { int num = PrevChamber; if (IsAccessTwoChambersBack) { num = PrevChamber2; } for (int i = 0; i < Cylinder.Chambers.Length; i++) { Cylinder.Chambers[i].IsAccessible = i == num; } ((Component)Cylinder).transform.localRotation = Cylinder.GetLocalRotationFromCylinder(CurChamber); } else { for (int j = 0; j < Cylinder.Chambers.Length; j++) { Cylinder.Chambers[j].IsAccessible = false; } } } private void UpdateSpinning() { //IL_022a: Unknown result type (might be due to invalid IL or missing references) //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Unknown result type (might be due to invalid IL or missing references) //IL_0255: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0049: 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_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_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) if (!((FVRInteractiveObject)this).IsHeld) { m_isSpinning = false; } if (m_isSpinning) { Vector3 val = Vector3.zero; if ((Object)(object)((FVRInteractiveObject)this).m_hand != (Object)null) { val = ((FVRInteractiveObject)this).m_hand.Input.VelLinearLocal; } float num = Mathf.Clamp(Vector3.Dot(((Vector3)(ref val)).normalized, ((Component)this).transform.up), 0f - ((Vector3)(ref val)).magnitude, ((Vector3)(ref val)).magnitude); if (Mathf.Abs(xSpinVel) < 90f) { xSpinVel += num * Time.deltaTime * 600f; } else if (Mathf.Sign(num) == Mathf.Sign(xSpinVel)) { xSpinVel += num * Time.deltaTime * 600f; } if (Mathf.Abs(xSpinVel) < 90f) { if (Vector3.Dot(((Component)this).transform.up, Vector3.down) >= 0f && Mathf.Sign(xSpinVel) == 1f) { xSpinVel += Time.deltaTime * 50f; } if (Vector3.Dot(((Component)this).transform.up, Vector3.down) < 0f && Mathf.Sign(xSpinVel) == -1f) { xSpinVel -= Time.deltaTime * 50f; } } xSpinVel = Mathf.Clamp(xSpinVel, -500f, 500f); xSpinRot += xSpinVel * Time.deltaTime * 5f; PoseSpinHolder.localEulerAngles = new Vector3(xSpinRot, 0f, 0f); xSpinVel = Mathf.Lerp(xSpinVel, 0f, Time.deltaTime * 0.6f); } else { xSpinRot = 0f; xSpinVel = 0f; PoseSpinHolder.localRotation = Quaternion.RotateTowards(PoseSpinHolder.localRotation, Quaternion.identity, Time.deltaTime * 500f); PoseSpinHolder.localEulerAngles = new Vector3(PoseSpinHolder.localEulerAngles.x, 0f, 0f); } } private void CockHammer(float speed) { if (!m_isHammerLocked && !m_isHammerCocking && !m_isStateToggled) { m_isHammerLocked = true; ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)7, 1f); } } private void ToggleState() { //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) m_isHammerLocked = false; m_isStateToggled = !m_isStateToggled; if (!((FVRPhysicalObject)this).IsAltHeld) { if (!m_isStateToggled) { ((FVRInteractiveObject)this).PoseOverride.localPosition = Pose_Main.localPosition; ((FVRInteractiveObject)this).PoseOverride.localRotation = Pose_Main.localRotation; if ((Object)(object)((FVRInteractiveObject)this).m_grabPointTransform != (Object)null) { ((FVRInteractiveObject)this).m_grabPointTransform.localPosition = Pose_Main.localPosition; ((FVRInteractiveObject)this).m_grabPointTransform.localRotation = Pose_Main.localRotation; } } else { ((FVRInteractiveObject)this).PoseOverride.localPosition = Pose_Toggled.localPosition; ((FVRInteractiveObject)this).PoseOverride.localRotation = Pose_Toggled.localRotation; if ((Object)(object)((FVRInteractiveObject)this).m_grabPointTransform != (Object)null) { ((FVRInteractiveObject)this).m_grabPointTransform.localPosition = Pose_Toggled.localPosition; ((FVRInteractiveObject)this).m_grabPointTransform.localRotation = Pose_Toggled.localRotation; } } } m_isHammerCocking = false; m_isHammerCocked = false; m_hammerCockLerp = 0f; } public override void OnCollisionEnter(Collision col) { ((FVRPhysicalObject)this).OnCollisionEnter(col); } public override List<FireArmRoundClass> GetChamberRoundList() { //IL_003c: Unknown result type (might be due to invalid IL or missing references) bool flag = false; List<FireArmRoundClass> list = new List<FireArmRoundClass>(); for (int i = 0; i < Cylinder.Chambers.Length; i++) { if (Cylinder.Chambers[i].IsFull) { list.Add(Cylinder.Chambers[i].GetRound().RoundClass); flag = true; } } return (!flag) ? null : list; } public override void SetLoadedChambers(List<FireArmRoundClass> rounds) { //IL_0035: Unknown result type (might be due to invalid IL or missing references) if (rounds.Count <= 0) { return; } for (int i = 0; i < Cylinder.Chambers.Length; i++) { if (i < rounds.Count) { Cylinder.Chambers[i].Autochamber(rounds[i]); } } } } } public class GunStockLace : MonoBehaviour { public float length = 0.5f; public float gravity = 9.81f; public float damping = 0.05f; public float maxDeviationAngle = 45f; public LayerMask collisionMask; public bool showGizmos = false; private Vector3 pendulumDirection; private Vector3 angularVelocity; private Quaternion baseRotation; private Vector3 restDirection; private Vector3 previousPosition; private void Start() { //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_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: 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_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) baseRotation = ((Component)this).transform.rotation; restDirection = baseRotation * -Vector3.up; pendulumDirection = restDirection; previousPosition = ((Component)this).transform.position; } private void FixedUpdate() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_006f: 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_0075: 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_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: 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_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((Component)this).transform.position - previousPosition; previousPosition = ((Component)this).transform.position; float fixedDeltaTime = Time.fixedDeltaTime; Vector3 val2 = Vector3.Cross(((Vector3)(ref pendulumDirection)).normalized, Vector3.down) * gravity / length; Vector3 val3 = val * 10f / fixedDeltaTime; angularVelocity += (val2 + val3) * fixedDeltaTime; angularVelocity *= Mathf.Clamp01(1f - damping * fixedDeltaTime); Quaternion val4 = Quaternion.Euler(angularVelocity * fixedDeltaTime * 57.29578f); pendulumDirection = val4 * pendulumDirection; HandleCollisionLimits(); ClampToMaxAngle(); ((Component)this).transform.rotation = Quaternion.FromToRotation(-Vector3.up, pendulumDirection) * baseRotation; } private void HandleCollisionLimits() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: 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_003e: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0070: 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_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) RaycastHit val = default(RaycastHit); if (Physics.Raycast(((Component)this).transform.position, pendulumDirection, ref val, length, LayerMask.op_Implicit(collisionMask))) { Vector3 normal = ((RaycastHit)(ref val)).normal; Vector3 val2 = Vector3.ProjectOnPlane(pendulumDirection, normal); Vector3 normalized = ((Vector3)(ref val2)).normalized; float num = Vector3.Angle(pendulumDirection, normalized); pendulumDirection = Vector3.RotateTowards(pendulumDirection, normalized, num * ((float)Math.PI / 180f), 0f); angularVelocity = Vector3.ProjectOnPlane(angularVelocity, normal); } } private void ClampToMaxAngle() { //IL_0002: 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_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004a: 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) float num = Vector3.Angle(restDirection, pendulumDirection); if (num > maxDeviationAngle) { pendulumDirection = Vector3.RotateTowards(restDirection, pendulumDirection, maxDeviationAngle * ((float)Math.PI / 180f), 0f); angularVelocity *= 0.5f; } } private void OnDrawGizmos() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003d: 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_004c: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) if (showGizmos) { Gizmos.color = Color.yellow; Gizmos.DrawLine(((Component)this).transform.position, ((Component)this).transform.position + pendulumDirection * length); Gizmos.color = Color.red; Gizmos.DrawWireSphere(((Component)this).transform.position + pendulumDirection * length, 0.02f); } } } public class HuntDollarSR : MonoBehaviour { private IEnumerator Start() { yield return (object)new WaitForSeconds(3f); string str = "CharcoalBriquette(Clone)"; ((Object)((Component)this).gameObject).name = str; Collider[] componentsInChildren = ((Component)this).GetComponentsInChildren<Collider>(true); for (int i = 0; i < componentsInChildren.Length; i++) { Component val = (Component)(object)componentsInChildren[i]; ((Object)val.gameObject).name = str; } } } namespace BitWizrd.Revolver { public class Lemat : BreakActionWeapon { public enum FireMode { Revolver, Shotgun } [Header("Shotgun Hinge Setup")] public HingeJoint hinge; public float hingeLimit = 45f; public float hingeEjectLimit = 30f; [Header("Lemat Mode (Default Revolver)")] public FireMode CurrentMode = FireMode.Revolver; [Header("Barrels & Chambers")] public Transform RevolverMuzzle; public Transform ShotgunMuzzle; public FVRFireArmChamber ShotgunChamber; [Header("Shotgun Ejection")] public float ShotgunEjectOffset = -0.06f; public float ShotgunEjectSpeed = -2.5f; [Header("Selector Pin")] public Transform FireSelectorPin; public Vector3 RevolverPinRotation = Vector3.zero; public Vector3 ShotgunPinRotation = new Vector3(90f, 0f, 0f); [Header("Revolver Cylinder")] public SingleActionRevolverCylinder Cylinder; [Header("Revolver Mechanics")] public Transform Hammer; public Transform LoadingGate; public Transform Trigger; [Tooltip("Trigger rotates on X-axis.")] public float Trigger_Rot_Forward = 0f; public float Trigger_Rot_Rearward = 25f; private bool hasTriggeredUpSinceBegin = false; [Tooltip("Rotate revolve gate around Z-axis.")] public float LoadingGate_Rot_Closed = 0f; public float LoadingGate_Rot_Open = 40f; [Tooltip("Revolver hammer angles (X-axis).")] public float Hammer_Rot_Uncocked_Revolver = 0f; public float Hammer_Rot_Cocked_Revolver = 30f; [Tooltip("Shotgun hammer angles (X-axis).")] public float Hammer_Rot_Uncocked_Shotgun = 0f; public float Hammer_Rot_Cocked_Shotgun = 30f; [Tooltip("Revolver hammer angle for half-cock (X-axis).")] public float Hammer_Rot_Halfcock_Revolver = 15f; [Tooltip("Trigger threshold to fire.")] public float TriggerThreshold = 0.9f; [Header("Cylinder Mechanics (Classic Single-Action)")] public bool DoesCylinderTranslateForward; public bool DoesHalfCockHalfRotCylinder; public bool HasTransferBarSafety; public bool IsAccessTwoChambersBack; public Vector3 CylinderBackPos; public Vector3 CylinderFrontPos; [Header("Optional Spin Feature (Revolver Only)")] public Transform PoseSpinHolder; public bool CanSpin = true; [Tooltip("Allows revolve gate toggling (half-cock).")] public bool StateToggles = true; [Header("Revolver Muzzle Effects")] public int RevolverMuzzleFireIndex = 0; public int RevolverMuzzleSmokeIndex = 1; public int RevolverGasOutIndex = 2; [Header("Shotgun Muzzle Effects")] public int ShotgunMuzzleFireIndex = 0; public int ShotgunMuzzleSmokeIndex = 1; public int ShotgunGasOutIndex = 2; [Header("Revolver Pose Toggling (like SingleActionRevolver)")] public Transform Pose_Main; public Transform Pose_Toggled; public bool StateTogglesPose = true; [Header("LematMk2-Style Audio / Recoil")] public FVRFireArmRecoilProfile ShotgunRecoilProfile; [Header("Fanning")] public bool CanFan = true; public Transform HammerFanDir; public float FanDistance = 0.15f; public float FanAngle = 60f; public float FanVelocityThreshold = 1f; [Header("Foregrip Reference")] public LematForegrip ForegripRef; private bool _inputsBlocked = false; private bool m_isGateOpen; public bool m_isShotgunOpen; public bool foregripLatch; private bool m_isHammerCocked; private bool m_isHammerCocking; private float m_hammerCockLerp; private float m_hammerCockSpeed = 10f; private float Hammer_Rot_Uncocked; private float Hammer_Rot_Cocked; private int m_curChamber; private float m_curChamberLerp; private float m_tarChamberLerp; private float timeSinceColFire = 999f; private bool m_isSpinning; private float xSpinRot; private float xSpinVel; private bool mWasShotgunChamberFull; private bool mToggleDebounce; private Vector3 m_TargetSelectorRotation; private float m_SelectorPinSpeed = 10f; private bool mLemat_HasUnlockedBreak; private bool mLemat_HasEjectedThisOpen; private Vector3 m_HingeStartPos; public bool m_IsLatchHeldOpen; public bool TriggerReset = true; private float prevTriggerFloat = 0f; private bool m_isStateToggled = false; public int CurChamber { get { return m_curChamber; } set { m_curChamber = value % Cylinder.NumChambers; } } public int PrevChamber { get { int num = m_curChamber - 1; return (num >= 0) ? num : (Cylinder.NumChambers - 1); } } public int PrevChamber2 { get { int num = m_curChamber - 2; return (num >= 0) ? num : (Cylinder.NumChambers + num); } } public override void Awake() { //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) ((BreakActionWeapon)this).Awake(); ((BreakActionWeapon)this).SetHasLatchButton(false); ((FVRFireArm)this).FChambers = new List<FVRFireArmChamber>(); if ((Object)(object)Cylinder != (Object)null && Cylinder.Chambers != null) { FVRFireArmChamber[] chambers = Cylinder.Chambers; foreach (FVRFireArmChamber val in chambers) { if ((Object)(object)val != (Object)null) { val.Firearm = (FVRFireArm)(object)this; ((FVRFireArm)this).FChambers.Add(val); } } } CurrentMode = FireMode.Revolver; Hammer_Rot_Uncocked = Hammer_Rot_Uncocked_Revolver; Hammer_Rot_Cocked = Hammer_Rot_Cocked_Revolver; m_TargetSelectorRotation = RevolverPinRotation; if ((Object)(object)FireSelectorPin != (Object)null) { FireSelectorPin.localEulerAngles = RevolverPinRotation; } m_IsLatchHeldOpen = false; m_isShotgunOpen = false; mLemat_HasUnlockedBreak = false; mLemat_HasEjectedThisOpen = false; ((BreakActionWeapon)this).SetIsExternallyUnlatched(false); if ((Object)(object)hinge != (Object)null) { m_HingeStartPos = ((Component)hinge).transform.localPosition; } } public override void BeginInteraction(FVRViveHand hand) { ((FVRFireArm)this).BeginInteraction(hand); if ((Object)(object)hand != (Object)null && hand.Input.TriggerFloat <= 0.45f) { hasTriggeredUpSinceBegin = true; } else { hasTriggeredUpSinceBegin = false; } } public override Transform GetMuzzle() { return (CurrentMode != 0) ? ShotgunMuzzle : RevolverMuzzle; } private void FireMuzzleFire(int index) { ((FVRFireArm)this).FireMuzzleSmoke(index); } public void Fire() { if ((CurrentMode == FireMode.Revolver && m_isGateOpen) || (CurrentMode == FireMode.Shotgun && m_isShotgunOpen)) { ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)6, 1f); } else if (CurrentMode == FireMode.Revolver) { if ((Object)(object)Cylinder == (Object)null || Cylinder.Chambers == null || Cylinder.NumChambers == 0) { ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)6, 1f); return; } FVRFireArmChamber val = Cylinder.Chambers[m_curChamber]; if ((Object)(object)val == (Object)null || !val.IsFull || val.IsSpent || (Object)(object)val.GetRound() == (Object)null) { ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)6, 1f); } else if (val.Fire()) { FVRFireArmRound round = val.GetRound(); ((FVRFireArm)this).Fire(val, ((FVRFireArm)this).GetMuzzle(), true, 1f, -1f); FireMuzzleFire(RevolverMuzzleFireIndex); ((FVRFireArm)this).FireMuzzleSmoke(RevolverMuzzleSmokeIndex); ((FVRFireArm)this).AddGas(RevolverGasOutIndex); ((FVRFireArm)this).Recoil(((FVRFireArm)this).IsTwoHandStabilized(), (Object)(object)((FVRPhysicalObject)this).AltGrip != (Object)null, ((FVRFireArm)this).IsShoulderStabilized(), (FVRFireArmRecoilProfile)null, 1f); HandleRoundDischarge(val, round); } } else if ((Object)(object)ShotgunChamber == (Object)null || !ShotgunChamber.IsFull || ShotgunChamber.IsSpent || (Object)(object)ShotgunChamber.GetRound() == (Object)null) { ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)6, 1f); } else if (ShotgunChamber.Fire()) { FVRFireArmRound round2 = ShotgunChamber.GetRound(); ((FVRFireArm)this).Fire(ShotgunChamber, ((FVRFireArm)this).GetMuzzle(), true, 1f, -1f); FireMuzzleFire(ShotgunMuzzleFireIndex); ((FVRFireArm)this).FireMuzzleSmoke(ShotgunMuzzleSmokeIndex); ((FVRFireArm)this).AddGas(ShotgunGasOutIndex); ((FVRFireArm)this).Recoil(((FVRFireArm)this).IsTwoHandStabilized(), (Object)(object)((FVRPhysicalObject)this).AltGrip != (Object)null, ((FVRFireArm)this).IsShoulderStabilized(), ShotgunRecoilProfile, 1f); HandleRoundDischarge(ShotgunChamber, round2); } } private void HandleRoundDischarge(FVRFireArmChamber chamber, FVRFireArmRound round) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)round != (Object)null) { ((FVRFireArm)this).PlayAudioGunShot(round, GM.CurrentPlayerBody.GetCurrentSoundEnvironment(), 1f); if (round.IsCaseless && !chamber.SuppressCaselessDeletion) { chamber.SetRound((FVRFireArmRound)null, false); } } if (GM.CurrentSceneSettings.IsAmmoInfinite || GM.CurrentPlayerBody.IsInfiniteAmmo) { chamber.IsSpent = false; chamber.UpdateProxyDisplay(); } } public override void FVRUpdate() { ((FVRFireArm)this).FVRUpdate(); UpdateHammerShared(); UpdateFanning(); UpdateSpinning(); UpdateTriggerLogic(); if (CurrentMode == FireMode.Revolver) { UpdateCylinderRot(); } UpdateChamberStateFeedback(); UpdateSelectorPin(); UpdateLoadingGate(); if (StateTogglesPose && CurrentMode == FireMode.Revolver) { ToggleRevolverPose(m_isGateOpen); } } private void UpdateSelectorPin() { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)FireSelectorPin == (Object)null) && (CurrentMode != 0 || !m_isGateOpen)) { float x = FireSelectorPin.localEulerAngles.x; float x2 = m_TargetSelectorRotation.x; float num = Mathf.LerpAngle(x, x2, Time.deltaTime * m_SelectorPinSpeed); FireSelectorPin.localEulerAngles = new Vector3(num, 0f, 0f); } } private void UpdateLoadingGate() { //IL_0034: 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_008e: Unknown result type (might be due to invalid IL or missing references) if (m_isShotgunOpen) { if ((Object)(object)LoadingGate != (Object)null) { LoadingGate.localEulerAngles = new Vector3(0f, 0f, LoadingGate_Rot_Closed); } } else if (CurrentMode == FireMode.Revolver && (Object)(object)LoadingGate != (Object)null) { float num = ((!m_isGateOpen) ? LoadingGate_Rot_Closed : LoadingGate_Rot_Open); LoadingGate.localEulerAngles = new Vector3(0f, 0f, num); } else if ((Object)(object)LoadingGate != (Object)null) { LoadingGate.localEulerAngles = new Vector3(0f, 0f, LoadingGate_Rot_Closed); } } public override void FVRFixedUpdate() { ((BreakActionWeapon)this).FVRFixedUpdate(); timeSinceColFire += Time.deltaTime; if (m_isShotgunOpen && !((BreakActionWeapon)this).IsLatched && (Object)(object)hinge != (Object)null && !mLemat_HasEjectedThisOpen && Mathf.Abs(hinge.angle) >= hingeEjectLimit) { mLemat_HasEjectedThisOpen = true; if (base.m_EjectsOnOpen) { PopOutEmpties(); } } UpdateChamberAccessibility(); } private void UpdateChamberAccessibility() { if (CurrentMode == FireMode.Shotgun && (Object)(object)ShotgunChamber != (Object)null) { ShotgunChamber.IsAccessible = m_isShotgunOpen && !((BreakActionWeapon)this).IsLatched; } } private void UpdateChamberStateFeedback() { if ((Object)(object)ShotgunChamber != (Object)null && ShotgunChamber.IsFull && !mWasShotgunChamberFull) { ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)20, 1f); } mWasShotgunChamberFull = (Object)(object)ShotgunChamber != (Object)null && ShotgunChamber.IsFull; } public override void UpdateInteraction(FVRViveHand hand) { //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_0164: 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_0170: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0340: Unknown result type (might be due to invalid IL or missing references) //IL_0345: Unknown result type (might be due to invalid IL or missing references) ((BreakActionWeapon)this).UpdateInteraction(hand); if ((Object)(object)hand == (Object)null) { return; } if (hand.IsInStreamlinedMode) { if (CurrentMode == FireMode.Revolver) { if (hand.Input.BYButtonDown) { ToggleRevolverGate(!m_isGateOpen); } if (hand.Input.AXButtonDown) { if (m_isGateOpen) { AdvanceCylinder(); } else if (!m_isHammerCocked && !m_isHammerCocking) { CockHammerRevolver(5f); } else if (m_isHammerCocked) { ToggleFireMode(); } } } else { if (hand.Input.BYButtonPressed) { m_IsLatchHeldOpen = true; } else { m_IsLatchHeldOpen = false; } if (hand.Input.AXButtonDown) { if (!m_isHammerCocked && !m_isHammerCocking) { CockHammerShotgun(5f); } else if (m_isHammerCocked) { ToggleFireMode(); } } } } else { Vector2 touchpadAxes = hand.Input.TouchpadAxes; if (CurrentMode == FireMode.Revolver) { if (hand.Input.TouchpadDown) { float num = Vector2.Angle(touchpadAxes, Vector2.up); float num2 = Vector2.Angle(touchpadAxes, Vector2.down); float num3 = Vector2.Angle(touchpadAxes, Vector2.left); float num4 = Vector2.Angle(touchpadAxes, Vector2.right); if (num < 45f) { m_isSpinning = true; } else if (num2 < 45f) { if (!m_isHammerCocked && !m_isHammerCocking) { CockHammerRevolver(5f); } else if (m_isHammerCocked) { ToggleFireMode(); } } else if (num3 < 45f) { ToggleRevolverGate(!m_isGateOpen); } else if (num4 < 45f && m_isGateOpen) { AdvanceCylinder(); } } } else if (hand.Input.TouchpadPressed) { if (touchpadAxes.y > 0.1f) { m_IsLatchHeldOpen = true; } else { m_IsLatchHeldOpen = false; } if (hand.Input.TouchpadDown && touchpadAxes.y < -0.1f) { if (!m_isHammerCocked && !m_isHammerCocking) { CockHammerShotgun(5f); } else if (m_isHammerCocked) { ToggleFireMode(); } } } else { m_IsLatchHeldOpen = false; } } m_IsLatchHeldOpen = m_IsLatchHeldOpen || foregripLatch; if (m_IsLatchHeldOpen) { if (!m_isShotgunOpen && !m_isGateOpen) { ((BreakActionWeapon)this).SetIsExternallyUnlatched(true); BreakOpen(); } } else if ((Object)(object)hinge != (Object)null && ((Component)hinge).transform.localEulerAngles.x <= 1f) { BreakClose(); } } public override void EndInteraction(FVRViveHand hand) { //IL_0046: Unknown result type (might be due to invalid IL or missing references) ((BreakActionWeapon)this).EndInteraction(hand); if (m_isSpinning && (Object)(object)PoseSpinHolder != (Object)null && (Object)(object)hand != (Object)null) { ((FVRPhysicalObject)this).RootRigidbody.AddRelativeTorque(new Vector3(xSpinVel, 0f, 0f), (ForceMode)1); } m_isSpinning = false; } private void UpdateTriggerLogic() { //IL_0061: Unknown result type (might be due to invalid IL or missing references) float num = ((!((Object)(object)((FVRInteractiveObject)this).m_hand != (Object)null)) ? 0f : ((FVRInteractiveObject)this).m_hand.Input.TriggerFloat); if ((Object)(object)Trigger != (Object)null) { Trigger.localEulerAngles = new Vector3(Mathf.Lerp(Trigger_Rot_Forward, Trigger_Rot_Rearward, num), 0f, 0f); } if (num <= 0.45f) { hasTriggeredUpSinceBegin = true; TriggerReset = true; } float num2 = ((!hasTriggeredUpSinceBegin) ? 0f : num); if (!(num2 > TriggerThreshold)) { return; } if (CurrentMode == FireMode.Revolver) { if (m_isGateOpen && !m_isShotgunOpen) { if (TriggerReset) { EjectAccessibleRevolverChamber(); TriggerReset = false; } } else if (!m_isGateOpen && m_isShotgunOpen) { if (m_isHammerCocked && TriggerReset) { ResetHammerState(); ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)6, 1f); TriggerReset = false; } } else if (m_isHammerCocked) { m_isHammerCocked = false; m_isHammerCocking = false; m_hammerCockLerp = 0f; Fire(); } } else { if (CurrentMode != FireMode.Shotgun) { return; } if (m_isShotgunOpen) { if (m_isHammerCocked && TriggerReset) { ResetHammerState(); ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)6, 1f); TriggerReset = false; } } else if (m_isHammerCocked) { ResetHammerState(); Fire(); } } } private void ResetHammerState() { m_isHammerCocked = false; m_isHammerCocking = false; m_hammerCockLerp = 0f; } private void UpdateHammerShared() { //IL_016f: Unknown result type (might be due to invalid IL or missing references) if (m_isHammerCocking) { if (m_hammerCockLerp < 1f) { m_hammerCockLerp += Time.deltaTime * m_hammerCockSpeed; } else { m_hammerCockLerp = 1f; m_isHammerCocking = false; m_isHammerCocked = true; if (CurrentMode == FireMode.Revolver && (Object)(object)Cylinder != (Object)null && Cylinder.Chambers != null) { m_curChamber++; if (m_curChamber >= Cylinder.NumChambers) { m_curChamber = 0; } m_curChamberLerp = 0f; m_tarChamberLerp = 0f; } } } if (CurrentMode == FireMode.Revolver && m_isGateOpen && !m_isHammerCocking && !m_isHammerCocked) { float num = Hammer_Rot_Cocked_Revolver - Hammer_Rot_Uncocked_Revolver; if (Mathf.Abs(num) > 0.001f) { float num2 = (Hammer_Rot_Halfcock_Revolver - Hammer_Rot_Uncocked_Revolver) / num; num2 = Mathf.Clamp01(num2); m_hammerCockLerp = num2; } } if ((Object)(object)Hammer != (Object)null) { float num3 = Mathf.Lerp(Hammer_Rot_Uncocked, Hammer_Rot_Cocked, m_hammerCockLerp); Hammer.localEulerAngles = new Vector3(num3, 0f, 0f); } } private void UpdateFanning() { //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) if (!CanFan || !((FVRInteractiveObject)this).IsHeld || (Object)(object)((FVRInteractiveObject)this).m_hand == (Object)null || (Object)(object)((FVRInteractiveObject)this).m_hand.OtherHand == (Object)null || (Object)(object)HammerFanDir == (Object)null || m_isHammerCocked || m_isHammerCocking || (CurrentMode == FireMode.Revolver && m_isGateOpen)) { return; } Vector3 velLinearWorld = ((FVRInteractiveObject)this).m_hand.OtherHand.Input.VelLinearWorld; float num = Vector3.Distance(((FVRInteractiveObject)this).m_hand.OtherHand.PalmTransform.position, HammerFanDir.position); if (num < FanDistance && Vector3.Angle(velLinearWorld, HammerFanDir.forward) < FanAngle && ((Vector3)(ref velLinearWorld)).magnitude > FanVelocityThreshold) { if (CurrentMode == FireMode.Revolver) { CockHammerRevolver(10f); } else { CockHammerShotgun(10f); } } } private void UpdateSpinning() { //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_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: 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_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) if (!CanSpin || !((FVRInteractiveObject)this).IsHeld || (Object)(object)PoseSpinHolder == (Object)null) { return; } bool isSpinning = false; if (!m_isGateOpen && (Object)(object)((FVRInteractiveObject)this).m_hand != (Object)null && !m_isHammerCocking && !m_isHammerCocked && !((FVRInteractiveObject)this).m_hand.IsInStreamlinedMode && ((FVRInteractiveObject)this).m_hand.Input.TouchpadPressed) { Vector2 touchpadAxes = ((FVRInteractiveObject)this).m_hand.Input.TouchpadAxes; if (Vector2.Angle(touchpadAxes, Vector2.up) < 45f) { isSpinning = true; } } m_isSpinning = isSpinning; if (m_isSpinning) { Vector3 velLinearLocal = ((FVRInteractiveObject)this).m_hand.Input.VelLinearLocal; float num = Vector3.Dot(((Vector3)(ref velLinearLocal)).normalized, ((Component)this).transform.up); if (Mathf.Abs(xSpinVel) < 90f) { xSpinVel += num * Time.deltaTime * 600f; } else if (Mathf.Sign(num) == Mathf.Sign(xSpinVel)) { xSpinVel += num * Time.deltaTime * 600f; } xSpinVel = Mathf.Clamp(xSpinVel, -500f, 500f); xSpinRot += xSpinVel * Time.deltaTime * 5f; PoseSpinHolder.localEulerAngles = new Vector3(xSpinRot, 0f, 0f); xSpinVel = Mathf.Lerp(xSpinVel, 0f, Time.deltaTime * 0.6f); } else { xSpinRot = 0f; xSpinVel = 0f; PoseSpinHolder.localRotation = Quaternion.RotateTowards(PoseSpinHolder.localRotation, Quaternion.identity, Time.deltaTime * 500f); PoseSpinHolder.localEulerAngles = new Vector3(PoseSpinHolder.localEulerAngles.x, 0f, 0f); } } private void UpdateCylinderRot() { //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_020a: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_023c: 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_0146: Unknown result type (might be due to invalid IL or missing references) if (m_isShotgunOpen) { for (int i = 0; i < Cylinder.Chambers.Length; i++) { Cylinder.Chambers[i].IsAccessible = false; } } else if (m_isStateToggled || m_isGateOpen) { int num = PrevChamber; if (IsAccessTwoChambersBack) { num = PrevChamber2; } for (int j = 0; j < Cylinder.Chambers.Length; j++) { Cylinder.Chambers[j].IsAccessible = j == num; } if (DoesHalfCockHalfRotCylinder) { int num2 = (CurChamber + 1) % Cylinder.NumChambers; ((Component)Cylinder).transform.localRotation = Quaternion.Slerp(Cylinder.GetLocalRotationFromCylinder(CurChamber), Cylinder.GetLocalRotationFromCylinder(num2), 0.5f); } else { ((Component)Cylinder).transform.localRotation = Cylinder.GetLocalRotationFromCylinder(CurChamber); } if (DoesCylinderTranslateForward) { ((Component)Cylinder).transform.localPosition = CylinderBackPos; } } else { for (int k = 0; k < Cylinder.Chambers.Length; k++) { Cylinder.Chambers[k].IsAccessible = false; } m_tarChamberLerp = ((!m_isHammerCocking) ? 0f : m_hammerCockLerp); m_curChamberLerp = Mathf.Lerp(m_curChamberLerp, m_tarChamberLerp, Time.deltaTime * 16f); int num3 = (CurChamber + 1) % Cylinder.NumChambers; ((Component)Cylinder).transform.localRotation = Quaternion.Slerp(Cylinder.GetLocalRotationFromCylinder(CurChamber), Cylinder.GetLocalRotationFromCylinder(num3), m_curChamberLerp); if (DoesCylinderTranslateForward) { ((Component)Cylinder).transform.localPosition = Vector3.Lerp(CylinderBackPos, CylinderFrontPos, m_hammerCockLerp); } } } private void CockHammerRevolver(float speed) { if (!m_isHammerCocked && !m_isHammerCocking) { m_hammerCockSpeed = speed; m_isHammerCocking = true; ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)7, 1f); } } private void CockHammerShotgun(float speed) { if (!m_isHammerCocked && !m_isHammerCocking) { m_hammerCockSpeed = speed; m_isHammerCocking = true; ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)7, 1f); } } private void ToggleFireMode() { //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) if (!m_isGateOpen) { bool isHammerCocked = m_isHammerCocked; bool isHammerCocking = m_isHammerCocking; float hammerCockLerp = m_hammerCockLerp; if (CurrentMode == FireMode.Revolver) { CurrentMode = FireMode.Shotgun; Hammer_Rot_Uncocked = Hammer_Rot_Uncocked_Shotgun; Hammer_Rot_Cocked = Hammer_Rot_Cocked_Shotgun; } else { CurrentMode = FireMode.Revolver; Hammer_Rot_Uncocked = Hammer_Rot_Uncocked_Revolver; Hammer_Rot_Cocked = Hammer_Rot_Cocked_Revolver; } m_TargetSelectorRotation = ((CurrentMode != 0) ? ShotgunPinRotation : RevolverPinRotation); ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)15, 1f); m_isHammerCocked = isHammerCocked; m_isHammerCocking = isHammerCocking; m_hammerCockLerp = hammerCockLerp; } } private void ToggleRevolverPose(bool openGatePose) { //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0118: 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_00a6: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)Pose_Main == (Object)null || (Object)(object)Pose_Toggled == (Object)null || ((FVRPhysicalObject)this).IsAltHeld || !((FVRInteractiveObject)this).IsHeld) { return; } if (!openGatePose) { ((FVRInteractiveObject)this).PoseOverride.localPosition = Pose_Main.localPosition; ((FVRInteractiveObject)this).PoseOverride.localRotation = Pose_Main.localRotation; if ((Object)(object)((FVRInteractiveObject)this).m_grabPointTransform != (Object)null) { ((FVRInteractiveObject)this).m_grabPointTransform.localPosition = Pose_Main.localPosition; ((FVRInteractiveObject)this).m_grabPointTransform.localRotation = Pose_Main.localRotation; } } else { ((FVRInteractiveObject)this).PoseOverride.localPosition = Pose_Toggled.localPosition; ((FVRInteractiveObject)this).PoseOverride.localRotation = Pose_Toggled.localRotation; if ((Object)(object)((FVRInteractiveObject)this).m_grabPointTransform != (Object)null) { ((FVRInteractiveObject)this).m_grabPointTransform.localPosition = Pose_Toggled.localPosition; ((FVRInteractiveObject)this).m_grabPointTransform.localRotation = Pose_Toggled.localRotation; } } } private void ToggleRevolverGate(bool open) { //IL_0087: Unknown result type (might be due to invalid IL or missing references) if (m_isShotgunOpen || CurrentMode != 0 || m_isGateOpen == open) { return; } m_isGateOpen = open; ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)((!open) ? 31 : 30), 1f); if (!open) { ResetHammerState(); if ((Object)(object)Hammer != (Object)null) { Hammer.localEulerAngles = new Vector3(Hammer_Rot_Uncocked, 0f, 0f); } return; } m_isHammerCocking = false; m_isHammerCocked = false; float num = Hammer_Rot_Cocked_Revolver - Hammer_Rot_Uncocked_Revolver; if (Mathf.Abs(num) > 0.001f) { float num2 = (Hammer_Rot_Halfcock_Revolver - Hammer_Rot_Uncocked_Revolver) / num; num2 = Mathf.Clamp01(num2); m_hammerCockLerp = num2; } } private void AdvanceCylinder() { m_curChamber++; if (m_curChamber >= Cylinder.NumChambers) { m_curChamber = 0; } ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)0, 1f); } private void EjectAccessibleRevolverChamber() { //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)Cylinder == (Object)null || Cylinder.Chambers == null) { return; } for (int i = 0; i < Cylinder.Chambers.Length; i++) { FVRFireArmChamber val = Cylinder.Chambers[i]; if (val.IsAccessible) { if (val.IsFull) { ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)29, 1f); } val.EjectRound(((Component)val).transform.position + ((Component)val).transform.forward * 0.0025f, -((Component)val).transform.forward, Vector3.zero, false); break; } } } public void PopOutEmpties() { if ((Object)(object)ShotgunChamber != (Object)null && ShotgunChamber.IsFull && ShotgunChamber.IsSpent) { PopOutRound(ShotgunChamber); } } public void PopOutRound(FVRFireArmChamber chamber) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003b: 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_004b: Unknown result type (might be due to invalid IL or missing references) ((FVRFireArm)this).PlayAudioEvent((FirearmAudioEventType)21, 1f); chamber.EjectRound(((Component)chamber).transform.position + ((Component)chamber).transform.forward * base.EjectOffset, ((Component)chamber).transform.forward * base.EjectSpeed, Vector3.right, false); ((FVRFireArm)this).AddGas(ShotgunGasOutIndex); } public void BreakOpen() { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) if (!m_isShotgunOpen && !m_isGateOpen) { m_isShotgunOpen = true; ((BreakActionWeapon)this).SetIsExternallyUnlatched(true); if ((Object)(object)hinge != (Object)null) { JointLimits limits = hinge.limits; ((JointLimits)(ref limits)).max = hingeLimit; hinge.limits = limits; } if ((Object)(object)ShotgunChamber != (Object)null) { ShotgunChamber.IsAccessible = true; } } } public void BreakClose() { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) if (m_isShotgunOpen) { m_isShotgunOpen = false; mLemat_HasEjectedThisOpen = false; ((BreakActionWeapon)this).SetIsExternallyUnlatched(false); if ((Object)(object)hinge != (Object)null) { JointLimits limits = hinge.limits; ((JointLimits)(ref limits)).max = 0f; hinge.limits = limits; ((Component)hinge).transform.localPosition = m_HingeStartPos; } if ((Object)(object)ShotgunChamber != (Object)null) { ShotgunChamber.IsAccessible = false; } } } } public class LematForegrip : FVRAlternateGrip { [Header("Shotgun Setup")] public Transform ShotgunBase; public HingeJoint Hinge; private Vector3 localPosStart; private Rigidbody RB; private Lemat Wep; private float m_initialDamp = 0.05f; private float m_initialSpring = 0.05f; public override void Awake() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: 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) ((FVRAlternateGrip)this).Awake(); localPosStart = ((Component)Hinge).transform.localPosition; RB = ((Component)Hinge).gameObject.GetComponent<Rigidbody>(); Wep = ((Component)((Joint)Hinge).connectedBody).gameObject.GetComponent<Lemat>(); if ((Object)(object)Wep != (Object)null) { Wep.ForegripRef = this; } JointSpring spring = Hinge.spring; m_initialSpring = spring.spring; m_initialDamp = spring.damper; } public override void FVRUpdate() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: 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) ((FVRInteractiveObject)this).FVRUpdate(); if (Vector3.Distance(((Component)Hinge).transform.localPosition, localPosStart) > 0.01f) { ((Component)Hinge).transform.localPosition = localPosStart; } } public override void FVRFixedUpdate() { ((FVRInteractiveObject)this).FVRFixedUpdate(); if (((FVRInteractiveObject)Wep).IsHeld && ((FVRPhysicalObject)Wep).IsAltHeld) { RB.mass = 0.001f; } else { RB.mass = 0.1f; } } public override bool IsInteractable() { return true; } public override void UpdateInteraction(FVRViveHand hand) { //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_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_0199: 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_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result