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 FreeFlyCommand v1.0.2
Landoria.FreeFlyCommand.dll
Decompiled an hour agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Landoria.SharedLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("Landoria.FreeFlyCommand")] [assembly: AssemblyDescription("Allows server-authorized native free-camera commands within a limited range.")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Landoria")] [assembly: AssemblyProduct("Landoria.FreeFlyCommand")] [assembly: AssemblyCopyright("Copyright © 2026 End3rbyte")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("037059B7-0C09-4B60-A05B-62627829B3D8")] [assembly: AssemblyFileVersion("1.0.2")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = "")] [assembly: AssemblyVersion("1.0.2.23100")] namespace Landoria.FreeFlyCommand { internal static class FreeFlyAuthorization { private const string RequestRpc = "Landoria_FreeFlyCommand_Request"; private const string ResponseRpc = "Landoria_FreeFlyCommand_Response"; private const float RetrySeconds = 2f; private static ZRoutedRpc _registeredRpc; private static ZNetPeer _serverPeer; private static bool? _serverAllowed; private static float _nextRequestAt; internal static bool IsAuthorized { get; private set; } internal static void Update() { RegisterRpcs(); if ((Object)(object)ZNet.instance == (Object)null || ZRoutedRpc.instance == null) { ResetConnection(); } else if (ZNet.instance.IsServer()) { UpdateServerAuthorization(); } else { UpdateClientAuthorization(); } } internal static void ResetSession() { _serverAllowed = null; ResetConnection(); } private static void RegisterRpcs() { ZRoutedRpc instance = ZRoutedRpc.instance; if (instance != null && instance != _registeredRpc) { instance.Register("Landoria_FreeFlyCommand_Request", (Action<long>)ReceiveRequest); instance.Register<bool>("Landoria_FreeFlyCommand_Response", (Action<long, bool>)ReceiveResponse); _registeredRpc = instance; } } private static void UpdateServerAuthorization() { bool serverEnabled = FreeFlyCommandPlugin.ServerEnabled; SetAuthorized(serverEnabled); if (_serverAllowed != serverEnabled) { _serverAllowed = serverEnabled; ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "Landoria_FreeFlyCommand_Response", new object[1] { serverEnabled }); FreeFlyCommandPlugin.ModLogger.LogInfo($"Server free-camera authorization changed to {serverEnabled}."); } } private static void UpdateClientAuthorization() { if (!IsAuthorized) { FreeFlyController.Disable(); } ZNetPeer serverPeer = ZNet.instance.GetServerPeer(); if (serverPeer != _serverPeer) { ResetConnection(); _serverPeer = serverPeer; } if (_serverPeer != null && !IsAuthorized && Time.unscaledTime >= _nextRequestAt) { _nextRequestAt = Time.unscaledTime + 2f; ZRoutedRpc.instance.InvokeRoutedRPC(_serverPeer.m_uid, "Landoria_FreeFlyCommand_Request", Array.Empty<object>()); } } private static void ReceiveRequest(long sender) { if (!((Object)(object)ZNet.instance == (Object)null) && ZNet.instance.IsServer() && ZNet.instance.GetPeer(sender) != null && ZRoutedRpc.instance != null) { ZRoutedRpc.instance.InvokeRoutedRPC(sender, "Landoria_FreeFlyCommand_Response", new object[1] { FreeFlyCommandPlugin.ServerEnabled }); } } private static void ReceiveResponse(long sender, bool allowed) { if (!((Object)(object)ZNet.instance == (Object)null) && !ZNet.instance.IsServer() && _serverPeer != null && _serverPeer.m_uid == sender) { SetAuthorized(allowed); } } private static void ResetConnection() { _serverPeer = null; _nextRequestAt = 0f; FreeFlyController.Disable(); SetAuthorized(allowed: false); } private static void SetAuthorized(bool allowed) { if (IsAuthorized != allowed) { IsAuthorized = allowed; if (!allowed) { FreeFlyController.Disable(); } FreeFlyCommandPlugin.ModLogger?.LogInfo($"Free-camera authorization is now {allowed}."); } } } internal static class FreeFlyCommands { private static ConsoleCommand _freeFlyCommand; private static ConsoleCommand _smoothCommand; internal static void Register() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Expected O, but got Unknown //IL_003a: 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) //IL_0058: Expected O, but got Unknown //IL_0058: Expected O, but got Unknown //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Expected O, but got Unknown _freeFlyCommand = new ConsoleCommand("freefly", "Toggles the server-authorized native free camera.", new ConsoleEventFailable(ToggleFreeFly), false, false, false, false, false, (ConsoleOptionsFetcher)null, false, false, false); _smoothCommand = new ConsoleCommand("ffsmooth", "[0-1] sets native free-camera smoothing.", new ConsoleEventFailable(SetSmoothness), false, false, false, false, false, new ConsoleOptionsFetcher(SmoothnessOptions), false, false, false); } internal static bool IsManaged(ConsoleCommand command) { if (command != _freeFlyCommand) { return command == _smoothCommand; } return true; } private static object ToggleFreeFly(ConsoleEventArgs args) { if (!FreeFlyAuthorization.IsAuthorized) { return "Free camera is not authorized by this server."; } FreeFlyController.Toggle(); return true; } private static object SetSmoothness(ConsoleEventArgs args) { if (!FreeFlyAuthorization.IsAuthorized) { return "Free camera smoothing is not authorized by this server."; } if (args.Length != 2 || !float.TryParse(args[1], NumberStyles.Float, CultureInfo.InvariantCulture, out var result) || result < 0f || result > 1f) { return "Use ffsmooth followed by a value from 0 to 1."; } GameCamera.instance.SetFreeFlySmoothness(result); return true; } private static List<string> SmoothnessOptions() { return new List<string> { "0", "0.25", "0.5", "0.75", "1" }; } } internal static class FreeFlyController { internal const float MaximumDistance = 50f; internal static void Toggle() { if (FreeFlyAuthorization.IsAuthorized && !((Object)(object)GameCamera.instance == (Object)null)) { GameCamera.instance.ToggleFreeFly(); } } internal static void Disable() { if ((Object)(object)GameCamera.instance != (Object)null && GameCamera.InFreeFly()) { GameCamera.instance.ToggleFreeFly(); } } internal static void ClampToPlayer(GameCamera camera) { //IL_0024: 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_0039: 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_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0065: 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) Player localPlayer = Player.m_localPlayer; if (FreeFlyAuthorization.IsAuthorized && GameCamera.InFreeFly() && !((Object)(object)localPlayer == (Object)null)) { Vector3 val = ((Component)camera).transform.position - ((Component)localPlayer).transform.position; if (((Vector3)(ref val)).sqrMagnitude > 2500f) { ((Component)camera).transform.position = ((Component)localPlayer).transform.position + ((Vector3)(ref val)).normalized * 50f; } } } } [HarmonyPatch(typeof(Terminal), "InitTerminal")] internal static class FreeFlyCommandRegistrationPatch { private static void Postfix() { FreeFlyCommands.Register(); } } [HarmonyPatch(typeof(ConsoleCommand), "IsValid")] internal static class FreeFlyCommandValidationPatch { [HarmonyPriority(0)] private static void Postfix(ConsoleCommand __instance, ref bool __result) { if (FreeFlyCommands.IsManaged(__instance) && !FreeFlyAuthorization.IsAuthorized) { __result = false; } } } [HarmonyPatch(typeof(GameCamera), "ToggleFreeFly")] internal static class UnauthorizedFreeFlyTogglePatch { private static bool Prefix() { if (!FreeFlyAuthorization.IsAuthorized) { return GameCamera.InFreeFly(); } return true; } } [HarmonyPatch(typeof(GameCamera), "UpdateFreeFly")] internal static class FreeFlyDistancePatch { private static void Postfix(GameCamera __instance) { FreeFlyController.ClampToPlayer(__instance); } } [HarmonyPatch(typeof(ZNet), "OnDestroy")] internal static class FreeFlyDisconnectPatch { private static void Prefix() { FreeFlyAuthorization.ResetSession(); } } [BepInPlugin("Landoria.FreeFlyCommand", "Landoria.FreeFlyCommand", "1.0.2")] public sealed class FreeFlyCommandPlugin : LandoriaPlugin { internal const string PluginGuid = "Landoria.FreeFlyCommand"; internal const string PluginName = "Landoria.FreeFlyCommand"; internal const string PluginVersion = "1.0.2"; private const string EnabledArgument = "--freeflycommand"; internal static ModLog ModLogger { get; private set; } internal static bool ServerEnabled { get; private set; } = true; private void Awake() { ModLogger = InitializePlugin("Landoria.FreeFlyCommand"); ServerEnabled = ReadServerEnabled(); FreeFlyCommands.Register(); ModLogger.LogInfo(string.Format("{0} {1} is loaded; server enabled={2}.", "Landoria.FreeFlyCommand", "1.0.2", ServerEnabled)); } private void Update() { FreeFlyAuthorization.Update(); } private static bool ReadServerEnabled() { string[] commandLineArgs = Environment.GetCommandLineArgs(); for (int i = 0; i < commandLineArgs.Length; i++) { if (string.Equals(commandLineArgs[i], "--freeflycommand", StringComparison.OrdinalIgnoreCase)) { if (i + 1 < commandLineArgs.Length && bool.TryParse(commandLineArgs[i + 1], out var result)) { return result; } ModLogger.LogWarning("Invalid --freeflycommand value; using true."); return true; } } return true; } private void OnDestroy() { FreeFlyAuthorization.ResetSession(); ModLogger?.LogInfo("Landoria.FreeFlyCommand 1.0.2 is unloaded."); ShutdownPlugin(); ModLogger = null; } } } namespace Landoria.SharedLib { public abstract class LandoriaPlugin : BaseUnityPlugin { private Harmony _harmony; private bool _patchesApplied; protected ModLog InitializePlugin(string pluginGuid) { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Expected O, but got Unknown ModLog modLog = new ModLog(((BaseUnityPlugin)this).Logger); Version version = ((object)this).GetType().Assembly.GetName().Version; modLog.LogInfo($"AssemblyVersion: {version}."); _harmony = new Harmony(pluginGuid); PatchOwnNamespace(modLog); return modLog; } protected void PatchOwnNamespace(ModLog log) { if (_patchesApplied) { log.LogDebug("Harmony patches are already active; skipping registration."); return; } string text = ((object)this).GetType().Namespace; Type[] types = Assembly.GetExecutingAssembly().GetTypes(); foreach (Type type in types) { if (type.Namespace == text) { _harmony.CreateClassProcessor(type).Patch(); } } _patchesApplied = true; log.LogDebug("Harmony patches were applied for the plugin namespace."); } protected void ShutdownPlugin() { if (_patchesApplied) { Harmony harmony = _harmony; if (harmony != null) { harmony.UnpatchSelf(); } _patchesApplied = false; } } } public sealed class ModLog { private readonly ManualLogSource _logger; public ModLog(ManualLogSource logger) { _logger = logger; } public void LogFatal(object message) { Write((LogLevel)1, message); } public void LogError(object message) { Write((LogLevel)2, message); } public void LogWarning(object message) { Write((LogLevel)4, message); } public void LogMessage(object message) { Write((LogLevel)8, message); } public void LogInfo(object message) { Write((LogLevel)16, message); } public void LogDebug(object message) { Write((LogLevel)32, message); } public void Log(LogLevel level, object message) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) Write(level, message); } private void Write(LogLevel level, object message) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) string arg = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); _logger.Log(level, (object)$"[{arg}] {message}"); } } }