Please disclose if your mod was created primarily using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of LCThirdPersonFork v1.0.26
LCThirdPerson.dll
Decompiled a year agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using LCThirdPerson.Patches; using Microsoft.CodeAnalysis; using Steamworks; using TooManyEmotes.Patches; using UniVRM10; using UnityEngine; using UnityEngine.Events; using UnityEngine.Rendering; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("LCThirdPerson")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+e332d53288328a7c246dac5ccd9641cda1e952db")] [assembly: AssemblyProduct("LCThirdPerson")] [assembly: AssemblyTitle("LCThirdPerson")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace LCThirdPerson { [BepInPlugin("LCThirdPerson", "LCThirdPerson", "1.0.0")] public class ThirdPersonPlugin : BaseUnityPlugin { private readonly Harmony harmony = new Harmony("LCThirdPerson"); private bool tpEnabled; public bool ShoulderSwapActive; private bool enablePressed; private bool shoulderSwapPressed; private bool TooManyEmotesPatchActive; public static ThirdPersonPlugin Instance { get; private set; } public static Transform Camera { get; internal set; } public static Transform OriginalTransform { get; internal set; } public static Sprite CrosshairSprite { get; internal set; } public ConfigEntry<KeyboardShortcut> Enable { get; internal set; } public ConfigEntry<KeyboardShortcut> ShoulderSwap { get; internal set; } public ConfigEntry<bool> ShowCursor { get; set; } public ConfigEntry<bool> StartEnabled { get; set; } public ConfigEntry<Vector3> Offset { get; set; } public ConfigEntry<float> CameraMaxHeight { get; set; } public ConfigEntry<float> CameraLookDownOffset { get; set; } public ConfigEntry<bool> AlwaysHideVisor { get; set; } public ConfigEntry<bool> FirstPersonVrm { get; set; } public ConfigEntry<float> FirstPersonVrmHeadHideDistance { get; set; } public ConfigEntry<bool> TooManyEmotesSyncFirstPersonSetting { get; set; } public bool Enabled { get { return tpEnabled; } set { SetEnabled(value); } } internal static ManualLogSource Log { get; set; } internal UnityEvent OnEnable { get; private set; } internal UnityEvent OnDisable { get; private set; } private void Awake() { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin LCThirdPerson is loaded!"); if ((Object)(object)Instance == (Object)null) { Instance = this; } Log = Logger.CreateLogSource("LCThirdPerson"); OnEnable = new UnityEvent(); OnDisable = new UnityEvent(); SetConfig(); SetCrosshairSprite(); harmony.PatchAll(typeof(ThirdPersonPlugin)); harmony.PatchAll(typeof(CameraPatch)); harmony.PatchAll(typeof(CursorPatch)); harmony.PatchAll(typeof(HUDPatch)); harmony.PatchAll(typeof(ShovelPatch)); harmony.PatchAll(typeof(EnemyAIPatch)); } internal void SetConfig() { //IL_0018: 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_00ad: Unknown result type (might be due to invalid IL or missing references) Enable = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("Keybinds", "Toggle", new KeyboardShortcut((KeyCode)118, Array.Empty<KeyCode>()), (ConfigDescription)null); ShoulderSwap = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("Keybinds", "ShoulderSwap", new KeyboardShortcut((KeyCode)301, Array.Empty<KeyCode>()), (ConfigDescription)null); ShowCursor = ((BaseUnityPlugin)this).Config.Bind<bool>("Options", "ShowCursor", true, (ConfigDescription)null); StartEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Options", "StartEnabled", true, (ConfigDescription)null); Offset = ((BaseUnityPlugin)this).Config.Bind<Vector3>("Options", "CameraOffset", new Vector3(0.4f, 0f, -2f), (ConfigDescription)null); CameraMaxHeight = ((BaseUnityPlugin)this).Config.Bind<float>("Options", "CameraMaxHeight", 1f, (ConfigDescription)null); CameraLookDownOffset = ((BaseUnityPlugin)this).Config.Bind<float>("Options", "CameraLookDownOffset", 0.2f, (ConfigDescription)null); AlwaysHideVisor = ((BaseUnityPlugin)this).Config.Bind<bool>("Options", "AlwaysHideVisor", false, (ConfigDescription)null); FirstPersonVrm = ((BaseUnityPlugin)this).Config.Bind<bool>("Options", "FirstPersonVRM", false, (ConfigDescription)null); FirstPersonVrmHeadHideDistance = ((BaseUnityPlugin)this).Config.Bind<float>("Options", "VrmHeadHideDistance", 0.8f, (ConfigDescription)null); Enabled = StartEnabled.Value; } internal void SetCrosshairSprite() { CrosshairSprite = CursorPatch.CreateCrosshairSprite(); } internal void CheckEnable() { //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) IInputSystem current = UnityInput.Current; KeyboardShortcut value = Enable.Value; if (current.GetKey(((KeyboardShortcut)(ref value)).MainKey)) { if (!enablePressed) { Enabled = !Enabled; enablePressed = true; } } else { enablePressed = false; } } public void SetEnabled(bool value) { tpEnabled = value; if (tpEnabled) { OnEnable.Invoke(); } else { OnDisable.Invoke(); } } public void ForceEnabled(bool value) { if (value) { OnEnable.Invoke(); } else { OnDisable.Invoke(); } } internal void CheckShoulderSwap() { //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) IInputSystem current = UnityInput.Current; KeyboardShortcut value = ShoulderSwap.Value; if (current.GetKey(((KeyboardShortcut)(ref value)).MainKey)) { if (!shoulderSwapPressed) { ShoulderSwapActive = !ShoulderSwapActive; shoulderSwapPressed = true; } } else { shoulderSwapPressed = false; } } public void PatchTooManyEmotes() { if (!TooManyEmotesPatchActive) { harmony.PatchAll(typeof(TooManyEmotesPatch)); TooManyEmotesPatchActive = true; } } } public static class PluginInfo { public const string PLUGIN_GUID = "LCThirdPerson"; public const string PLUGIN_NAME = "LCThirdPerson"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace LCThirdPerson.Patches { [HarmonyPatch(typeof(PlayerControllerB))] internal class CameraPatch { [CompilerGenerated] private static class <>O { public static UnityAction <0>__OnEnable; public static UnityAction <1>__OnDisable; } private static PlayerControllerB Instance; private static bool TriggerAwake; private static float ShoulderSwapCurrentOffset = 1f; private static MeshRenderer VisorMesh = null; private static bool VrmAssemblyExists = false; private static GameObject VrmRootObject = null; private static Transform VrmHeadTransform = null; private static List<Renderer> VrmHeadMeshes = new List<Renderer>(); private static bool TooManyEmotesExists = false; private static bool VrmTriggerAwake = false; private static bool VrmHeadVisible = true; private static readonly string[] IgnoreGameObjectPrefixes = new string[1] { "VolumeMain" }; public static void OnEnable() { //IL_00ac: Unknown result type (might be due to invalid IL or missing references) ThirdPersonPlugin.Log.LogInfo((object)"Enabled"); Transform localVisor = Instance.localVisor; SkinnedMeshRenderer thisPlayerModel = Instance.thisPlayerModel; VisorMesh = ((Component)localVisor).GetComponentInChildren<MeshRenderer>(); if (Object.op_Implicit((Object)(object)VisorMesh)) { ((Renderer)VisorMesh).enabled = false; } if (ThirdPersonPlugin.Instance.FirstPersonVrm.Value) { SetVrmHeadVisibility(visible: true); } ((Renderer)thisPlayerModel).shadowCastingMode = (ShadowCastingMode)1; ((Renderer)Instance.thisPlayerModelArms).enabled = false; Instance.gameplayCamera.cullingMask = Instance.gameplayCamera.cullingMask | 0x800000; Instance.grabDistance = Math.Max(5f - ThirdPersonPlugin.Instance.Offset.Value.z, 5f); } public static void OnDisable() { ThirdPersonPlugin.Log.LogInfo((object)"Disabled"); Transform localVisor = Instance.localVisor; SkinnedMeshRenderer thisPlayerModel = Instance.thisPlayerModel; VisorMesh = ((Component)localVisor).GetComponentInChildren<MeshRenderer>(); if (Object.op_Implicit((Object)(object)VisorMesh)) { ((Renderer)VisorMesh).enabled = !ThirdPersonPlugin.Instance.AlwaysHideVisor.Value; } if (VrmAssemblyExists && ThirdPersonPlugin.Instance.FirstPersonVrm.Value && SetVrmHeadVisibility(visible: false)) { ((Renderer)thisPlayerModel).shadowCastingMode = (ShadowCastingMode)1; ((Renderer)Instance.thisPlayerModelArms).enabled = false; Instance.gameplayCamera.cullingMask = Instance.gameplayCamera.cullingMask | 0x800000; } else { ((Renderer)thisPlayerModel).shadowCastingMode = (ShadowCastingMode)3; ((Renderer)Instance.thisPlayerModelArms).enabled = true; Instance.gameplayCamera.cullingMask = Instance.gameplayCamera.cullingMask & -8388609; } Instance.grabDistance = 5f; } [HarmonyPostfix] [HarmonyPatch("Awake")] private static void Awake() { TriggerAwake = true; } [HarmonyPrefix] [HarmonyPatch("Update")] private static void PatchUpdate(ref PlayerControllerB __instance, ref bool ___isCameraDisabled, ref bool ___isPlayerControlled) { //IL_014f: 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_015a: Expected O, but got Unknown //IL_02c3: Unknown result type (might be due to invalid IL or missing references) //IL_02e1: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Expected O, but got Unknown //IL_031c: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) if (ThirdPersonPlugin.Instance.FirstPersonVrm.Value && (Object)(object)Instance != (Object)null && VrmAssemblyExists) { VrmInit(); if ((Object)(object)ThirdPersonPlugin.Camera != (Object)null && (Object)(object)VrmHeadTransform != (Object)null) { bool flag = ((ThirdPersonPlugin.Instance.Enabled || Instance.isPlayerDead || Vector3.Distance(VrmHeadTransform.position, ThirdPersonPlugin.Camera.position) > ThirdPersonPlugin.Instance.FirstPersonVrmHeadHideDistance.Value) ? true : false); if (VrmHeadVisible != flag || VrmTriggerAwake) { SetVrmHeadVisibility(flag); ((Renderer)Instance.thisPlayerModel).shadowCastingMode = (ShadowCastingMode)1; ((Renderer)Instance.thisPlayerModelArms).enabled = false; Instance.gameplayCamera.cullingMask = Instance.gameplayCamera.cullingMask | 0x800000; VrmTriggerAwake = false; } } } if (!___isPlayerControlled | ___isCameraDisabled) { return; } if (TriggerAwake) { Instance = __instance; ((UnityEventBase)ThirdPersonPlugin.Instance.OnEnable).RemoveAllListeners(); ((UnityEventBase)ThirdPersonPlugin.Instance.OnDisable).RemoveAllListeners(); UnityEvent onEnable = ThirdPersonPlugin.Instance.OnEnable; object obj = <>O.<0>__OnEnable; if (obj == null) { UnityAction val = OnEnable; <>O.<0>__OnEnable = val; obj = (object)val; } onEnable.AddListener((UnityAction)obj); UnityEvent onDisable = ThirdPersonPlugin.Instance.OnDisable; object obj2 = <>O.<1>__OnDisable; if (obj2 == null) { UnityAction val2 = OnDisable; <>O.<1>__OnDisable = val2; obj2 = (object)val2; } onDisable.AddListener((UnityAction)obj2); if (ThirdPersonPlugin.Instance.Enabled) { OnEnable(); } else { OnDisable(); } Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); bool flag2 = false; bool flag3 = false; bool flag4 = false; Assembly[] array = assemblies; foreach (Assembly assembly in array) { if (assembly.FullName.StartsWith("VRM10,")) { flag2 = true; } else if (assembly.FullName.StartsWith("UniHumanoid,")) { flag3 = true; } else if (assembly.FullName.StartsWith("TooManyEmotes,")) { flag4 = true; } } if (flag2 && flag3) { VrmAssemblyExists = true; ThirdPersonPlugin.Log.LogInfo((object)"VRM Compatibility Enabled"); } if (flag4) { TooManyEmotesExists = true; ThirdPersonPlugin.Instance.PatchTooManyEmotes(); ThirdPersonPlugin.Log.LogInfo((object)"TooManyEmotes Compatibility Enabled"); } TriggerAwake = false; VrmTriggerAwake = true; } if ((Object)(object)Instance == (Object)null) { return; } if ((Object)(object)ThirdPersonPlugin.OriginalTransform == (Object)null) { ThirdPersonPlugin.OriginalTransform = CopyTransform(((Component)Instance.gameplayCamera).transform, "LCThirdPerson_Original Camera Position"); ThirdPersonPlugin.Camera = CopyTransform(((Component)Instance.gameplayCamera).transform, "LCThirdPerson_Camera Position"); } ThirdPersonPlugin.Camera.position = ((Component)Instance.gameplayCamera).transform.position; ThirdPersonPlugin.Camera.rotation = ((Component)Instance.gameplayCamera).transform.rotation; if (!Instance.isClimbingLadder && !Instance.inVehicleAnimation) { ((Component)Instance.gameplayCamera).transform.position = ((Component)ThirdPersonPlugin.OriginalTransform).transform.position; } if (!Instance.inTerminalMenu && !Instance.isTypingChat) { ThirdPersonPlugin.Instance.CheckEnable(); if (ThirdPersonPlugin.Instance.Enabled) { ThirdPersonPlugin.Instance.CheckShoulderSwap(); } if (TooManyEmotesExists && TooManyEmotesPatch.isPerformingEmote) { TooManyEmotesPatch.FixCamera(); } } } [HarmonyPostfix] [HarmonyPatch("LateUpdate")] private static void PatchCamera(ref bool ___isCameraDisabled, ref bool ___isPlayerControlled) { //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_003d: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_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_0175: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: 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_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0213: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_0257: Unknown result type (might be due to invalid IL or missing references) //IL_025c: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_0262: Unknown result type (might be due to invalid IL or missing references) //IL_0264: 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_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_01f8: Unknown result type (might be due to invalid IL or missing references) Transform originalTransform = ThirdPersonPlugin.OriginalTransform; if ((!___isPlayerControlled | ___isCameraDisabled) || (Object)(object)originalTransform == (Object)null) { return; } Camera gameplayCamera = Instance.gameplayCamera; Vector3 up = ((Component)gameplayCamera).transform.up; up.y = 0f; up *= ThirdPersonPlugin.Instance.CameraLookDownOffset.Value; bool flag = false; if (!ThirdPersonPlugin.Instance.Enabled || Instance.inTerminalMenu) { if (ThirdPersonPlugin.Instance.FirstPersonVrm.Value && (Object)(object)VisorMesh != (Object)null && !((Renderer)VisorMesh).enabled) { ((Component)gameplayCamera).transform.position = ((Component)originalTransform).transform.position + up; flag = true; } } else { float num = (ThirdPersonPlugin.Instance.ShoulderSwapActive ? (-1f) : 1f); float num2 = (ShoulderSwapCurrentOffset = Mathf.Lerp(ShoulderSwapCurrentOffset, num, Mathf.Min(1f, 15f * Time.deltaTime))); Vector3 val = ((Component)originalTransform).transform.right * (ThirdPersonPlugin.Instance.Offset.Value.x * num2) + ((Component)originalTransform).transform.up * ThirdPersonPlugin.Instance.Offset.Value.y; Vector3 position = ((Component)originalTransform).transform.position; Vector3 val2 = ((Component)originalTransform).transform.position + up + val + ((Component)gameplayCamera).transform.forward * ThirdPersonPlugin.Instance.Offset.Value.z; RaycastHit val3 = default(RaycastHit); val = ((!Physics.Linecast(position, val2, ref val3, StartOfRound.Instance.collidersAndRoomMask) || IgnoreCollision(((Object)((RaycastHit)(ref val3)).transform).name)) ? (val + ((Component)gameplayCamera).transform.forward * ThirdPersonPlugin.Instance.Offset.Value.z) : (val + ((Component)gameplayCamera).transform.forward * (0f - Mathf.Max(((RaycastHit)(ref val3)).distance, 0f)))); val.y = Math.Min(val.y, ThirdPersonPlugin.Instance.CameraMaxHeight.Value); ((Component)gameplayCamera).transform.position = ((Component)originalTransform).transform.position + up + val; flag = true; } if (Instance.isClimbingLadder) { flag = false; } if (flag) { typeof(PlayerControllerB).GetMethod("SetHoverTipAndCurrentInteractTrigger", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(Instance, new object[0]); } } [HarmonyPrefix] [HarmonyPatch("SetFaceUnderwaterFilters")] private static void UnderwaterPrepatch() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)Instance == (Object)null) && !((Object)(object)ThirdPersonPlugin.Camera == (Object)null)) { ((Component)Instance.gameplayCamera).transform.position = ((Component)ThirdPersonPlugin.Camera).transform.position; } } [HarmonyPostfix] [HarmonyPatch("SetFaceUnderwaterFilters")] private static void UnderwaterPostpatch() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)Instance == (Object)null) && !((Object)(object)ThirdPersonPlugin.OriginalTransform == (Object)null)) { ((Component)Instance.gameplayCamera).transform.position = ((Component)ThirdPersonPlugin.OriginalTransform).transform.position; } } [HarmonyPostfix] [HarmonyPatch("SpawnPlayerAnimation")] private static void SpawnPlayerPostpatch(ref bool ___isPlayerControlled) { if (!((Object)(object)Instance == (Object)null) && ___isPlayerControlled) { if (ThirdPersonPlugin.Instance.Enabled) { OnEnable(); } else { OnDisable(); } } } private static Transform CopyTransform(Transform copyTransform, string gameObjectName) { //IL_0001: 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_0019: Unknown result type (might be due to invalid IL or missing references) Transform transform = new GameObject(gameObjectName).transform; transform.position = copyTransform.position; transform.rotation = copyTransform.rotation; transform.parent = copyTransform.parent; return transform; } private static bool IgnoreCollision(string name) { return IgnoreGameObjectPrefixes.Any((string prefix) => name.StartsWith(prefix)); } private static void VrmInit() { //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_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_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_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Invalid comparison between Unknown and I4 if ((Object)(object)VrmRootObject != (Object)null) { return; } VrmHeadVisible = true; VrmTriggerAwake = true; SteamId steamId = SteamClient.SteamId; string name = SteamClient.Name; if (name == null) { return; } SteamId val = steamId; string value = "LethalVRM Character Model " + name + " " + ((object)(SteamId)(ref val)).ToString(); Scene scene = ((Component)Instance.localVisor).gameObject.scene; GameObject[] rootGameObjects = ((Scene)(ref scene)).GetRootGameObjects(); foreach (GameObject val2 in rootGameObjects) { if (((Object)val2).name.EndsWith(value)) { VrmRootObject = val2; break; } } if ((Object)(object)VrmRootObject == (Object)null) { return; } Vrm10Instance component = VrmRootObject.GetComponent<Vrm10Instance>(); if ((Object)(object)component == (Object)null || (Object)(object)component.Humanoid == (Object)null) { VrmHeadTransform = RecursiveFindChild(VrmRootObject.transform, "Neck"); if ((Object)(object)VrmHeadTransform == (Object)null) { VrmHeadTransform = RecursiveFindChild(VrmRootObject.transform, "Head"); } } else { VrmHeadTransform = component.Humanoid.Neck; } VrmHeadMeshes.Clear(); if ((Object)(object)component != (Object)null && (Object)(object)component.Vrm != (Object)null && component.Vrm.FirstPerson != null && component.Vrm.FirstPerson.Renderers != null) { foreach (RendererFirstPersonFlags renderer2 in component.Vrm.FirstPerson.Renderers) { RendererFirstPersonFlags current = renderer2; if ((int)current.FirstPersonFlag == 2) { Renderer renderer = ((RendererFirstPersonFlags)(ref current)).GetRenderer(VrmRootObject.transform); if ((Object)(object)renderer != (Object)null) { VrmHeadMeshes.Add(renderer); } } } } ThirdPersonPlugin.Log.LogInfo((object)"Local VRM Model Initialized"); } private static bool SetVrmHeadVisibility(bool visible) { //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0092: 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_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) if (!VrmAssemblyExists) { return false; } VrmInit(); if ((Object)(object)VrmRootObject == (Object)null) { return false; } if (VrmHeadMeshes.Count > 0) { ShadowCastingMode shadowCastingMode = (ShadowCastingMode)(visible ? 1 : 3); foreach (Renderer vrmHeadMesh in VrmHeadMeshes) { vrmHeadMesh.shadowCastingMode = shadowCastingMode; } } else { Vector3 localScale = (visible ? new Vector3(1f, 1f, 1f) : new Vector3(0f, 0f, 0f)); VrmHeadTransform.localScale = localScale; } VrmHeadVisible = visible; return true; } private static Transform RecursiveFindChild(Transform parent, string childName) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Expected O, but got Unknown foreach (Transform item in parent) { Transform val = item; if (((Object)val).name.ToLower() == childName.ToLower()) { return val; } Transform val2 = RecursiveFindChild(val, childName); if ((Object)(object)val2 != (Object)null) { return val2; } } return null; } } [HarmonyPatch(typeof(PlayerControllerB))] internal class CursorPatch { internal static Sprite CreateCrosshairSprite() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown //IL_0060: 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) string name = "LCThirdPerson.crosshair.png"; Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(name); Texture2D val = new Texture2D(2, 2); using (MemoryStream memoryStream = new MemoryStream()) { manifestResourceStream.CopyTo(memoryStream); ImageConversion.LoadImage(val, memoryStream.ToArray()); } ((Texture)val).filterMode = (FilterMode)0; return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2((float)(((Texture)val).width / 2), (float)(((Texture)val).height / 2))); } [HarmonyPostfix] [HarmonyPatch("LateUpdate")] private static void PatchUpdate(ref PlayerControllerB __instance, ref bool ___isCameraDisabled) { if (!(!__instance.isPlayerControlled | ___isCameraDisabled) && ThirdPersonPlugin.Instance.Enabled && ThirdPersonPlugin.Instance.ShowCursor.Value && !__instance.inTerminalMenu && !((Behaviour)__instance.cursorIcon).enabled) { ((Behaviour)__instance.cursorIcon).enabled = true; __instance.cursorIcon.sprite = ThirdPersonPlugin.CrosshairSprite; } } } [HarmonyPatch(typeof(EnemyAI))] internal class EnemyAIPatch { [HarmonyPostfix] [HarmonyPatch("EnableEnemyMesh")] private static void EnableEnemyMeshPostfix(ref EnemyAI __instance, bool enable, bool overrideDoNotSet) { if (!(__instance is DressGirlAI)) { return; } for (int i = 0; i < __instance.skinnedMeshRenderers.Length; i++) { if (!((Component)__instance.skinnedMeshRenderers[i]).CompareTag("DoNotSet") || overrideDoNotSet) { ((Renderer)__instance.skinnedMeshRenderers[i]).forceRenderingOff = !enable; } } for (int j = 0; j < __instance.meshRenderers.Length; j++) { if (!((Component)__instance.meshRenderers[j]).CompareTag("DoNotSet") || overrideDoNotSet) { ((Renderer)__instance.meshRenderers[j]).forceRenderingOff = !enable; } } } } [HarmonyPatch(typeof(HUDManager))] internal class HUDPatch { [HarmonyPrefix] [HarmonyPatch("UpdateScanNodes")] private static void UnderwaterPrepatch(PlayerControllerB playerScript) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)ThirdPersonPlugin.Camera == (Object)null)) { ((Component)playerScript.gameplayCamera).transform.position = ((Component)ThirdPersonPlugin.Camera).transform.position; } } [HarmonyPostfix] [HarmonyPatch("UpdateScanNodes")] private static void UnderwaterPostpatch(PlayerControllerB playerScript) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)ThirdPersonPlugin.OriginalTransform == (Object)null)) { ((Component)playerScript.gameplayCamera).transform.position = ((Component)ThirdPersonPlugin.OriginalTransform).transform.position; } } } [HarmonyPatch(typeof(Shovel))] internal class ShovelPatch { private static Vector3 originalPosition; [HarmonyPrefix] [HarmonyPatch("HitShovel")] private static void HitShovelPrepatch(Shovel __instance, ref PlayerControllerB ___previousPlayerHeldBy) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)ThirdPersonPlugin.Camera == (Object)null) && !((Object)(object)___previousPlayerHeldBy == (Object)null) && !((Object)(object)___previousPlayerHeldBy.gameplayCamera == (Object)null)) { originalPosition = ((Component)___previousPlayerHeldBy.gameplayCamera).transform.position; ((Component)___previousPlayerHeldBy.gameplayCamera).transform.position = ((Component)ThirdPersonPlugin.OriginalTransform).transform.position; } } [HarmonyPostfix] [HarmonyPatch("HitShovel")] private static void HitShovelPostpatch(Shovel __instance, ref PlayerControllerB ___previousPlayerHeldBy) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)ThirdPersonPlugin.OriginalTransform == (Object)null) && !((Object)(object)___previousPlayerHeldBy == (Object)null) && !((Object)(object)___previousPlayerHeldBy.gameplayCamera == (Object)null)) { ((Component)___previousPlayerHeldBy.gameplayCamera).transform.position = originalPosition; } } } [HarmonyPatch(typeof(ThirdPersonEmoteController))] internal class TooManyEmotesPatch { public static bool isPerformingEmote; public static bool firstPersonEmotesEnabled; [HarmonyPrefix] [HarmonyPatch("OnStartCustomEmoteLocal")] private static void OnStartCustomEmoteLocalPrepatch() { if (ThirdPersonEmoteController.firstPersonEmotesEnabled) { ThirdPersonPlugin.Instance.ForceEnabled(value: false); } } [HarmonyPostfix] [HarmonyPatch("OnStartCustomEmoteLocal")] private static void OnStartCustomEmoteLocalPostpatch() { isPerformingEmote = true; firstPersonEmotesEnabled = ThirdPersonEmoteController.firstPersonEmotesEnabled; } [HarmonyPostfix] [HarmonyPatch("OnStopCustomEmoteLocal")] private static void OnStopCustomEmoteLocalPostpatch() { isPerformingEmote = false; firstPersonEmotesEnabled = ThirdPersonEmoteController.firstPersonEmotesEnabled; ThirdPersonPlugin.Instance.ForceEnabled(ThirdPersonPlugin.Instance.Enabled); } [HarmonyPostfix] [HarmonyPatch("UpdateFirstPersonEmoteMode")] private static void UpdateFirstPersonEmoteModePostpatch(bool value) { firstPersonEmotesEnabled = ThirdPersonEmoteController.firstPersonEmotesEnabled; FixCamera(); } public static void FixCamera() { if (isPerformingEmote) { if (ThirdPersonPlugin.Instance.Enabled) { ThirdPersonPlugin.Instance.ForceEnabled(value: true); } else { ThirdPersonPlugin.Instance.ForceEnabled(!firstPersonEmotesEnabled); } } } } }