Please disclose if any significant portion of your mod was created 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 Freeze Time v1.0.1
sonic.dll
Decompiled a month agousing System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using ExitGames.Client.Photon; using Photon.Pun; using Photon.Realtime; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("sonic")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("sonic")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("98f6da0c-f28e-4d99-a81d-92f0e99ae946")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] [BepInPlugin("com.feralelf.freecam.hybrid", "UniversalFreeCam", "1.4.0")] public class FreeCamPlugin : BaseUnityPlugin { private GameObject ghostCamObj; private Camera ghostCam; private Camera originalCam; private bool isFreeCamActive = false; private float moveSpeed = 15f; private float lookSensitivity = 2f; private float rotX = 0f; private float rotY = 0f; private const string STASIS_KEY = "GlobalStasis"; private void Update() { if (Input.GetKeyDown((KeyCode)283)) { if (IsInRoom() && !PhotonNetwork.IsMasterClient) { ((BaseUnityPlugin)this).Logger.LogWarning((object)"You are not the Host."); return; } isFreeCamActive = !isFreeCamActive; if (IsInRoom()) { SetNetworkStasis(isFreeCamActive); } if (isFreeCamActive) { StartFreeCam(); } else { StopFreeCam(); } } if (IsInRoom()) { ApplyNetworkTime(); } else { Time.timeScale = (isFreeCamActive ? 0f : 1f); } if (isFreeCamActive && (Object)(object)ghostCamObj != (Object)null) { HandleFreeCam(); } } private bool IsInRoom() { return PhotonNetwork.InRoom && PhotonNetwork.CurrentRoom != null && ((RoomInfo)PhotonNetwork.CurrentRoom).CustomProperties != null; } private void SetNetworkStasis(bool active) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown Hashtable val = new Hashtable(); val[(object)"GlobalStasis"] = active; PhotonNetwork.CurrentRoom.SetCustomProperties(val, (Hashtable)null, (WebFlags)null); } private void ApplyNetworkTime() { if (!((Dictionary<object, object>)(object)((RoomInfo)PhotonNetwork.CurrentRoom).CustomProperties).TryGetValue((object)"GlobalStasis", out object value) || !(value is bool)) { return; } bool flag = (bool)value; if (true) { float num = (flag ? 0.0001f : 1f); if (Time.timeScale != num) { Time.timeScale = num; } } } private void StartFreeCam() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown //IL_0087: 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_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_00c5: 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) originalCam = Camera.main; if (!((Object)(object)originalCam == (Object)null)) { ghostCamObj = new GameObject("GhostCameraObj"); ghostCam = ghostCamObj.AddComponent<Camera>(); ghostCam.CopyFrom(originalCam); ghostCam.depth = originalCam.depth + 1f; ghostCamObj.transform.position = ((Component)originalCam).transform.position; ghostCamObj.transform.rotation = ((Component)originalCam).transform.rotation; Vector3 eulerAngles = ((Component)originalCam).transform.eulerAngles; rotX = eulerAngles.y; rotY = 0f - eulerAngles.x; ((Behaviour)originalCam).enabled = false; ((BaseUnityPlugin)this).Logger.LogInfo((object)"Stasis Active."); } } private void HandleFreeCam() { //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0085: 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_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: 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_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_0151: 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_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_0139: Unknown result type (might be due to invalid IL or missing references) //IL_013a: 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) rotX += Input.GetAxisRaw("Mouse X") * lookSensitivity; rotY += Input.GetAxisRaw("Mouse Y") * lookSensitivity; rotY = Mathf.Clamp(rotY, -90f, 90f); ghostCamObj.transform.rotation = Quaternion.Euler(0f - rotY, rotX, 0f); Vector3 val = Vector3.zero; if (Input.GetKey((KeyCode)119)) { val += ghostCamObj.transform.forward; } if (Input.GetKey((KeyCode)115)) { val -= ghostCamObj.transform.forward; } if (Input.GetKey((KeyCode)97)) { val -= ghostCamObj.transform.right; } if (Input.GetKey((KeyCode)100)) { val += ghostCamObj.transform.right; } if (Input.GetKey((KeyCode)32)) { val += Vector3.up; } if (Input.GetKey((KeyCode)306)) { val -= Vector3.up; } Transform transform = ghostCamObj.transform; transform.position += ((Vector3)(ref val)).normalized * moveSpeed * Time.unscaledDeltaTime; } private void StopFreeCam() { if ((Object)(object)originalCam != (Object)null) { ((Behaviour)originalCam).enabled = true; } if ((Object)(object)ghostCamObj != (Object)null) { Object.Destroy((Object)(object)ghostCamObj); } ((BaseUnityPlugin)this).Logger.LogInfo((object)"Stasis Deactivated."); } private void OnDisable() { if (IsInRoom() && PhotonNetwork.IsMasterClient) { SetNetworkStasis(active: false); } Time.timeScale = 1f; } }