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 FreeCammer v1.2.5
FreeCammer.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using FreeCammer.Scripts; using GameNetcodeStuff; using HarmonyLib; using Unity.Netcode; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; using UnityEngine.Rendering; using UnityEngine.Rendering.HighDefinition; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("FreeCammer")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("FreeCammer")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("a9c64b17-f023-4fda-931b-d9b7e62bad35")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } } namespace FreeCammer { [BepInPlugin("grug.lethalcompany.freecammer", "Free Cammer", "0.1.2.2")] public class MyCammer : BaseUnityPlugin { public const string modGUID = "grug.lethalcompany.freecammer"; public const string modName = "Free Cammer"; public const string modVersion = "0.1.2.2"; public static ConfigEntry<string> enterCam; public static ConfigEntry<bool> fpsCam; public static ConfigEntry<int> mouseButton; public static ConfigEntry<bool> fullbrightMethod; public static ConfigEntry<string> camControls; public static ConfigEntry<string> intensityControls; public static ConfigEntry<string> showCursorBind; public static ConfigEntry<bool> tapOrHold; public static ConfigEntry<KeyCode> dummy; private static GameObject cammerHolder; private readonly Harmony harmony = new Harmony("grug.lethalcompany.freecammer"); public static ManualLogSource mls; private static MyCammer instance; public void Awake() { //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Expected O, but got Unknown mouseButton = ((BaseUnityPlugin)this).Config.Bind<int>("General", "Mouse button", 1, "Button used to turn camera if not using FPS cam for freecam."); fullbrightMethod = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Full bright method", true, "True for directional light, false for a flashlight-sort of method."); enterCam = ((BaseUnityPlugin)this).Config.Bind<string>("Keybinds", "Camera Activation", "Z", "The key used to enter the camera(google a list of keycodes if you want a specific key)"); fpsCam = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "First person Freecammer", true, "Whether or not rotating requires you to hold right click"); tapOrHold = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Hold to increase brightness", false, "Set to true for holding the key down in order to increase brightness"); showCursorBind = ((BaseUnityPlugin)this).Config.Bind<string>("Keybinds", "Key to show cursor", "X", "Pressing this key while in freecam will show your cursor"); camControls = ((BaseUnityPlugin)this).Config.Bind<string>("Keybinds", "WASD controls for camera", "U H J K", "Format the 4 keys you wish to use as the default, and it should work. If not, double check the spelling. Check the bottom of the config for options!"); intensityControls = ((BaseUnityPlugin)this).Config.Bind<string>("Keybinds", "Keys to increase light brightness", "Comma Period", "The keys used to increase and decrease light brightness!"); dummy = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("List of Keys", "", (KeyCode)0, "List of keycodes you can use. Triple check when typing it to ensure no bugs."); if (!Enum.TryParse<KeyCode>(enterCam.Value, out KeyCode _)) { enterCam.Value = "Z"; } if ((Object)(object)instance == (Object)null) { instance = this; } mls = ((BaseUnityPlugin)this).Logger; mls.LogInfo((object)"Cammer loaded."); if ((Object)(object)cammerHolder == (Object)null) { cammerHolder = new GameObject("cammerHolder"); Object.DontDestroyOnLoad((Object)(object)cammerHolder); ((Object)cammerHolder).hideFlags = (HideFlags)61; cammerHolder.AddComponent<CammerScript>(); } if ((Object)(object)cammerHolder != (Object)null) { mls.LogInfo((object)"Cammer not null"); if ((Object)(object)cammerHolder.GetComponent<CammerScript>() != (Object)null) { mls.LogInfo((object)"CammerScript not null"); } } harmony.PatchAll(); } } } namespace FreeCammer.Scripts { internal class CammerScript : MonoBehaviour { public static CammerScript instance; public bool inCammer = false; public float speed = 10f; public float intensity = 50f; public float speedMult = 0.5f; public Camera cammer; public AudioListener ears; public Light light; public PlayerControllerB me; public GameObject lightHolder; private GameObject myarms; private Renderer myhead; public LODGroup lodgroup; public GameObject lod1; public GameObject lod2; public GameObject lod3; public Volume volume; public Fog fog; private bool killme; public List<string> keyList = MyCammer.camControls.Value.Split(new char[1] { ' ' }).ToList(); public List<string> intensKeyList = MyCammer.intensityControls.Value.Split(new char[1] { ' ' }).ToList(); public int beforeCamLayerVal; public Camera beforeCamCamera; private Vector3 rotateValue; public void Awake() { MyCammer.mls.LogInfo((object)"Script Active"); instance = this; } public unsafe void Update() { //IL_0310: Unknown result type (might be due to invalid IL or missing references) //IL_031a: Expected O, but got Unknown //IL_04a3: Unknown result type (might be due to invalid IL or missing references) //IL_0466: Unknown result type (might be due to invalid IL or missing references) //IL_0470: Unknown result type (might be due to invalid IL or missing references) //IL_0475: Unknown result type (might be due to invalid IL or missing references) //IL_0486: Unknown result type (might be due to invalid IL or missing references) //IL_048c: Unknown result type (might be due to invalid IL or missing references) //IL_0491: Unknown result type (might be due to invalid IL or missing references) //IL_04c0: Unknown result type (might be due to invalid IL or missing references) //IL_016d: 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_0176: Unknown result type (might be due to invalid IL or missing references) //IL_050d: Unknown result type (might be due to invalid IL or missing references) //IL_04ec: Unknown result type (might be due to invalid IL or missing references) //IL_04fb: Unknown result type (might be due to invalid IL or missing references) //IL_052a: Unknown result type (might be due to invalid IL or missing references) //IL_0556: Unknown result type (might be due to invalid IL or missing references) //IL_0565: Unknown result type (might be due to invalid IL or missing references) //IL_0708: Unknown result type (might be due to invalid IL or missing references) //IL_076d: Unknown result type (might be due to invalid IL or missing references) //IL_0725: Unknown result type (might be due to invalid IL or missing references) //IL_0735: Unknown result type (might be due to invalid IL or missing references) //IL_0740: Unknown result type (might be due to invalid IL or missing references) //IL_074a: Unknown result type (might be due to invalid IL or missing references) //IL_074f: Unknown result type (might be due to invalid IL or missing references) //IL_07d2: Unknown result type (might be due to invalid IL or missing references) //IL_078a: Unknown result type (might be due to invalid IL or missing references) //IL_079a: Unknown result type (might be due to invalid IL or missing references) //IL_07a5: Unknown result type (might be due to invalid IL or missing references) //IL_07af: Unknown result type (might be due to invalid IL or missing references) //IL_07b4: Unknown result type (might be due to invalid IL or missing references) //IL_0837: Unknown result type (might be due to invalid IL or missing references) //IL_07ef: Unknown result type (might be due to invalid IL or missing references) //IL_07ff: Unknown result type (might be due to invalid IL or missing references) //IL_080a: Unknown result type (might be due to invalid IL or missing references) //IL_0814: Unknown result type (might be due to invalid IL or missing references) //IL_0819: Unknown result type (might be due to invalid IL or missing references) //IL_0854: Unknown result type (might be due to invalid IL or missing references) //IL_0864: Unknown result type (might be due to invalid IL or missing references) //IL_086f: Unknown result type (might be due to invalid IL or missing references) //IL_0879: Unknown result type (might be due to invalid IL or missing references) //IL_087e: Unknown result type (might be due to invalid IL or missing references) //IL_05f1: Unknown result type (might be due to invalid IL or missing references) //IL_0617: Unknown result type (might be due to invalid IL or missing references) //IL_08d0: Unknown result type (might be due to invalid IL or missing references) //IL_0668: Unknown result type (might be due to invalid IL or missing references) //IL_0693: Unknown result type (might be due to invalid IL or missing references) //IL_0971: Unknown result type (might be due to invalid IL or missing references) //IL_0918: Unknown result type (might be due to invalid IL or missing references) //IL_09ca: Unknown result type (might be due to invalid IL or missing references) //IL_099b: Unknown result type (might be due to invalid IL or missing references) //IL_09a1: Invalid comparison between Unknown and I4 //IL_0a14: Unknown result type (might be due to invalid IL or missing references) //IL_0a5a: Unknown result type (might be due to invalid IL or missing references) //IL_0aa0: Unknown result type (might be due to invalid IL or missing references) //IL_0ae3: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)volume == (Object)null) { foreach (Volume item in Object.FindObjectsOfType<Volume>().ToList()) { if (((Object)((Component)item).gameObject).name == "VolumeMain") { volume = item; } } if ((Object)(object)fog == (Object)null && (Object)(object)volume != (Object)null) { volume.sharedProfile.TryGet<Fog>(ref fog); } } if ((Object)(object)me == (Object)null) { PlayerControllerB[] array = Object.FindObjectsOfType<PlayerControllerB>(); foreach (PlayerControllerB val in array) { if (!((NetworkBehaviour)val).IsOwner) { continue; } me = val; myarms = ((Component)me.cameraContainerTransform.parent.GetChild(1)).gameObject; myhead = GameObject.Find("Systems/Rendering/PlayerHUDHelmetModel/ScavengerHelmet").GetComponent<Renderer>(); if (!Object.op_Implicit((Object)(object)((Component)me).GetComponentInChildren<LODGroup>())) { continue; } lodgroup = ((Component)me).GetComponentInChildren<LODGroup>(); LOD[] lODs = lodgroup.GetLODs(); foreach (LOD val2 in lODs) { Renderer[] renderers = val2.renderers; foreach (Renderer val3 in renderers) { if (((Object)((Component)val3).gameObject).name == "LOD1") { lod1 = ((Component)val3).gameObject; } if (((Object)((Component)val3).gameObject).name == "LOD2") { lod2 = ((Component)val3).gameObject; } if (((Object)((Component)val3).gameObject).name == "LOD3") { lod3 = ((Component)val3).gameObject; } } } } } if ((Object)(object)cammer == (Object)null) { cammer = ((Component)this).gameObject.AddComponent<Camera>(); ((Behaviour)cammer).enabled = false; if ((Object)(object)((Component)this).gameObject.GetComponent<Camera>() != (Object)null) { MyCammer.mls.LogInfo((object)"Cammer Added!"); cammer.cullingMask = 557520895; } if ((Object)(object)ears == (Object)null) { MyCammer.mls.LogInfo((object)"ears spawned"); ears = ((Component)this).gameObject.AddComponent<AudioListener>(); ((Behaviour)ears).enabled = false; } } if ((Object)(object)lightHolder == (Object)null) { lightHolder = new GameObject("lightermfer"); ((Object)lightHolder).hideFlags = (HideFlags)61; Object.DontDestroyOnLoad((Object)(object)lightHolder); light = lightHolder.AddComponent<Light>(); lightHolder.AddComponent<HDAdditionalLightData>(); ((Component)light).gameObject.GetComponent<HDAdditionalLightData>().intensity = intensity; light.intensity = intensity; if (MyCammer.fullbrightMethod.Value) { light.type = (LightType)1; } else { light.type = (LightType)2; light.range = 10000f; light.intensity = intensity; ((Component)light).gameObject.GetComponent<HDAdditionalLightData>().range = 10000f; } lightHolder.SetActive(false); MyCammer.mls.LogInfo((object)"Light spawned"); } if (UnityInput.Current.GetMouseButton(MyCammer.mouseButton.Value) || MyCammer.fpsCam.Value) { rotateValue = new Vector3(*(float*)((InputControl<float>)(object)((Vector2Control)((Pointer)Mouse.current).delta).y).value, *(float*)((InputControl<float>)(object)((Vector2Control)((Pointer)Mouse.current).delta).x).value * -1f) * 0.1f; ((Component)this).transform.eulerAngles = ((Component)this).transform.eulerAngles - rotateValue; } if (((Component)this).transform.eulerAngles.x + 5f >= 89f && ((Component)this).transform.localEulerAngles.x < 270f) { ((Component)this).transform.eulerAngles = new Vector3(84f, ((Component)this).transform.eulerAngles.y, 0f); } if (((Component)this).transform.eulerAngles.x - 5f <= 271f && ((Component)this).transform.localEulerAngles.x > 90f) { ((Component)this).transform.eulerAngles = new Vector3(276f, ((Component)this).transform.eulerAngles.y, 0f); } if (UnityInput.Current.GetKeyDown(MyCammer.enterCam.Value)) { if (!inCammer) { beforeCamCamera = StartOfRound.Instance.activeCamera; } if ((Object)(object)me != (Object)null && !me.isPlayerDead) { ((Component)cammer).transform.position = ((Component)me.gameplayCamera).transform.position; ((Component)cammer).transform.rotation = ((Component)me.gameplayCamera).transform.rotation; } else if ((Object)(object)me != (Object)null && me.isPlayerDead) { ((Component)cammer).transform.position = ((Component)me.playersManager.spectateCamera).transform.position; ((Component)cammer).transform.rotation = ((Component)me.playersManager.spectateCamera).transform.rotation; } ((Behaviour)cammer).enabled = !((Behaviour)cammer).enabled; inCammer = !inCammer; if ((Object)(object)lightHolder != (Object)null) { lightHolder.SetActive(inCammer); } ChangeStates(); } if (UnityInput.Current.GetKey(isKeyValid(keyList[0]))) { Transform transform = ((Component)cammer).transform; transform.position += ((Component)cammer).transform.forward * speed * Time.deltaTime; } if (UnityInput.Current.GetKey(isKeyValid(keyList[2]))) { Transform transform2 = ((Component)cammer).transform; transform2.position -= ((Component)cammer).transform.forward * speed * Time.deltaTime; } if (UnityInput.Current.GetKey(isKeyValid(keyList[1]))) { Transform transform3 = ((Component)cammer).transform; transform3.position -= ((Component)cammer).transform.right * speed * Time.deltaTime; } if (UnityInput.Current.GetKey(isKeyValid(keyList[3]))) { Transform transform4 = ((Component)cammer).transform; transform4.position += ((Component)cammer).transform.right * speed * Time.deltaTime; } if ((Object)(object)light != (Object)null && (Object)(object)cammer != (Object)null && MyCammer.fullbrightMethod.Value) { ((Component)light).transform.localEulerAngles = ((Component)cammer).transform.localEulerAngles; } else if ((Object)(object)light != (Object)null && (Object)(object)cammer != (Object)null) { ((Component)light).transform.position = ((Component)cammer).transform.position; } if ((Object)(object)light != (Object)null) { light.intensity = intensity; lightHolder.GetComponent<HDAdditionalLightData>().intensity = intensity; } if (UnityInput.Current.GetKeyDown(isKeyValid(MyCammer.showCursorBind.Value)) && inCammer) { Cursor.visible = !Cursor.visible; if ((int)Cursor.lockState == 1) { Cursor.lockState = (CursorLockMode)2; } else { Cursor.lockState = (CursorLockMode)1; } } speed += UnityInput.Current.mouseScrollDelta.y * speedMult; if (speed <= 0f) { speed = 5f; } if (UnityInput.Current.GetKeyDown(isKeyValid(intensKeyList[0])) && !MyCammer.tapOrHold.Value) { intensity += 10f; } if (UnityInput.Current.GetKeyDown(isKeyValid(intensKeyList[1])) && !MyCammer.tapOrHold.Value) { intensity -= 10f; } if (UnityInput.Current.GetKey(isKeyValid(intensKeyList[0])) && MyCammer.tapOrHold.Value) { intensity += 1f; } if (UnityInput.Current.GetKey(isKeyValid(intensKeyList[1])) && MyCammer.tapOrHold.Value) { intensity -= 1f; } if (intensity <= 0f) { intensity = 0f; } if ((Object)(object)lod1 != (Object)null) { SkinnedMeshRenderer val4 = default(SkinnedMeshRenderer); if (lod1.TryGetComponent<SkinnedMeshRenderer>(ref val4)) { ((Renderer)val4).shadowCastingMode = (ShadowCastingMode)((inCammer || (Object)(object)StartOfRound.Instance.activeCamera != (Object)(object)me.gameplayCamera) ? 1 : 3); } if (UnityInput.Current.GetKeyDown((KeyCode)103)) { MyCammer.mls.LogInfo((object)(inCammer || (Object)(object)StartOfRound.Instance.activeCamera != (Object)(object)me.gameplayCamera)); MyCammer.mls.LogInfo((object)StartOfRound.Instance.activeCamera); MyCammer.mls.LogInfo((object)me.gameplayCamera); } lod1.layer = ((!inCammer && !((Object)(object)StartOfRound.Instance.activeCamera != (Object)(object)me.gameplayCamera)) ? 5 : 0); } } public void ChangeStates() { beforeCamLayerVal = lod1.layer; ((Behaviour)me.activeAudioListener).enabled = !inCammer; ((Behaviour)ears).enabled = inCammer; myarms.SetActive(!inCammer); if (!MyCammer.fpsCam.Value) { Cursor.visible = inCammer; } myhead.forceRenderingOff = inCammer; if ((Object)(object)lodgroup != (Object)null) { lodgroup.enabled = !inCammer; lod1.layer = ((!inCammer) ? beforeCamLayerVal : 0); lod2.SetActive(false); lod3.SetActive(false); } if (inCammer && (Object)(object)me != (Object)null && !MyCammer.fpsCam.Value) { Cursor.lockState = (CursorLockMode)2; } else if ((Object)(object)me != (Object)null && !me.quickMenuManager.isMenuOpen) { Cursor.lockState = (CursorLockMode)1; } if (inCammer) { StartOfRound.Instance.activeCamera = cammer; StartOfRound.Instance.localPlayerController.playerActions.Disable(); } else { StartOfRound.Instance.activeCamera = beforeCamCamera; StartOfRound.Instance.localPlayerController.playerActions.Enable(); } if ((Object)(object)volume != (Object)null) { ((VolumeComponent)fog).active = !inCammer; ((VolumeParameter)fog.enabled).overrideState = !inCammer; ((VolumeParameter<bool>)(object)fog.enabled).value = !inCammer; } } public KeyCode isKeyValid(string keyBrug) { //IL_0019: 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_0014: 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) if (Enum.TryParse<KeyCode>(keyBrug.ToString(), out KeyCode result)) { return result; } return (KeyCode)0; } public void OnGUI() { if (!inCammer || !Cursor.visible) { return; } if (GUILayout.Button("Show/Hide Fog", Array.Empty<GUILayoutOption>())) { ((VolumeComponent)fog).active = !((VolumeComponent)fog).active; ((VolumeParameter)fog.enabled).overrideState = !((VolumeParameter)fog.enabled).overrideState; ((VolumeParameter<bool>)(object)fog.enabled).value = !((VolumeParameter<bool>)(object)fog.enabled).value; } if (GUILayout.Button("Reset Speed", Array.Empty<GUILayoutOption>())) { speed = 10f; } if (GUILayout.Button("Reset Light", Array.Empty<GUILayoutOption>())) { intensity = 50f; } if (killme) { if (GUILayout.Button("Player turns", Array.Empty<GUILayoutOption>())) { StartOfRound.Instance.localPlayerController.playerActions.Enable(); killme = false; } } else if (GUILayout.Button("Player freezes", Array.Empty<GUILayoutOption>())) { StartOfRound.Instance.localPlayerController.playerActions.Disable(); killme = true; } } } } namespace FreeCammer.Patches { internal class CanPerformScanPatch { [HarmonyPatch(typeof(HUDManager), "CanPlayerScan")] private class HUDManager_CanPlayerScan { public static bool Prefix(ref bool __result) { if (CammerScript.instance.inCammer) { __result = false; return false; } return true; } } } }