Decompiled source of AdvancedConsole v1.1.9
BepInEx/plugins/com.keklick1337.peak.advancedconsole.dll
Decompiled 5 months 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.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 System.Text.RegularExpressions; using System.Threading.Tasks; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using ExitGames.Client.Photon; using HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; using Photon.Realtime; using Steamworks; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UIElements; using Zorro.Core; using Zorro.Core.CLI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("com.keklick1337.peak.advancedconsole")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.1.9.0")] [assembly: AssemblyInformationalVersion("1.1.9+45f0d3a6b1bf4ffa4f5cb25aa004fbf122e3c76e")] [assembly: AssemblyProduct("com.keklick1337.peak.advancedconsole")] [assembly: AssemblyTitle("Advanced Peak Console")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.9.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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [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 BepInEx { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] internal sealed class BepInAutoPluginAttribute : Attribute { public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace BepInEx.Preloader.Core.Patching { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] internal sealed class PatcherAutoPluginAttribute : Attribute { public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace AdvancedConsole { public static class AchievementCommands { [ConsoleCommand] public static void GrantAchievement(ACHIEVEMENTTYPE achievementType) { //IL_0000: 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_0025: 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) try { AchievementManager.Grant(achievementType); Debug.Log((object)$"grantachievement: Achievement '{achievementType}' granted successfully!"); Plugin.Log.LogInfo((object)$"Achievement granted: {achievementType}"); } catch (Exception ex) { Debug.LogError((object)$"grantachievement: Failed to grant achievement '{achievementType}' - {ex.Message}"); Plugin.Log.LogError((object)("Failed to grant achievement: " + ex.Message)); } } [ConsoleCommand] public static void GrantAchievementByName(string achievementName) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0016: 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) try { if (Enum.TryParse<ACHIEVEMENTTYPE>(achievementName, ignoreCase: true, out ACHIEVEMENTTYPE result)) { AchievementManager.Grant(result); Debug.Log((object)$"grantachievementbyname: Achievement '{result}' granted successfully!"); Plugin.Log.LogInfo((object)$"Achievement granted by name: {result}"); } else { Debug.LogWarning((object)("grantachievementbyname: Achievement '" + achievementName + "' not found! Use ListAchievements to see available achievements.")); } } catch (Exception ex) { Debug.LogError((object)("grantachievementbyname: Failed to grant achievement '" + achievementName + "' - " + ex.Message)); } } [ConsoleCommand] public static void ClearAllAchievements() { try { AchievementManager.ClearAchievements(); Debug.Log((object)"clearallachievements: All achievements cleared successfully!"); Plugin.Log.LogInfo((object)"All achievements cleared"); } catch (Exception ex) { Debug.LogError((object)("clearallachievements: Failed to clear achievements - " + ex.Message)); Plugin.Log.LogError((object)("Failed to clear achievements: " + ex.Message)); } } [ConsoleCommand] public static void ListAchievements() { //IL_0051: 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_0068: Unknown result type (might be due to invalid IL or missing references) try { Debug.Log((object)"=== Available Achievements ==="); ACHIEVEMENTTYPE[] array = (from ACHIEVEMENTTYPE a in Enum.GetValues(typeof(ACHIEVEMENTTYPE)) where (int)a > 0 select a).ToArray(); ACHIEVEMENTTYPE[] array2 = array; foreach (ACHIEVEMENTTYPE val in array2) { bool flag = false; try { AchievementManager instance = Singleton<AchievementManager>.Instance; if ((Object)(object)instance != (Object)null) { flag = instance.IsAchievementUnlocked(val); } } catch { } string arg = (flag ? "[UNLOCKED]" : "[LOCKED]"); Debug.Log((object)$" {val} {arg}"); } Debug.Log((object)$"Total achievements: {array.Length}"); Debug.Log((object)"Use GrantAchievement or GrantAchievementByName to unlock achievements"); Plugin.Log.LogInfo((object)$"Listed {array.Length} achievements"); } catch (Exception ex) { Debug.LogError((object)("listachievements: Failed to list achievements - " + ex.Message)); } } [ConsoleCommand] public static void AchievementInfo(ACHIEVEMENTTYPE achievementType) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0015: 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_003c: 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) try { Debug.Log((object)$"=== Achievement Info: {achievementType} ==="); string achievementDescription = GetAchievementDescription(achievementType); Debug.Log((object)("Description: " + achievementDescription)); try { AchievementManager instance = Singleton<AchievementManager>.Instance; if ((Object)(object)instance != (Object)null) { bool flag = instance.IsAchievementUnlocked(achievementType); Debug.Log((object)("Status: " + (flag ? "UNLOCKED" : "LOCKED"))); if (instance.achievementsEarnedThisRun.Contains(achievementType)) { Debug.Log((object)"Earned this run: YES"); } } } catch { Debug.Log((object)"Status: Unable to check"); } Plugin.Log.LogInfo((object)$"Achievement info displayed: {achievementType}"); } catch (Exception ex) { Debug.LogError((object)("achievementinfo: Failed to get achievement info - " + ex.Message)); } } [ConsoleCommand] public static void GrantRandomAchievement() { //IL_0059: 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_0065: 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) try { ACHIEVEMENTTYPE[] array = (from ACHIEVEMENTTYPE a in Enum.GetValues(typeof(ACHIEVEMENTTYPE)) where (int)a > 0 select a).ToArray(); if (array.Length == 0) { Debug.LogWarning((object)"grantrandomachievement: No achievements available!"); return; } ACHIEVEMENTTYPE val = array[Random.Range(0, array.Length)]; AchievementManager.Grant(val); Debug.Log((object)$"grantrandomachievement: Random achievement '{val}' granted!"); Plugin.Log.LogInfo((object)$"Random achievement granted: {val}"); } catch (Exception ex) { Debug.LogError((object)("grantrandomachievement: Failed to grant random achievement - " + ex.Message)); } } [ConsoleCommand] public static void GrantAllAchievements() { //IL_005f: 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_004b: Unknown result type (might be due to invalid IL or missing references) try { ACHIEVEMENTTYPE[] array = (from ACHIEVEMENTTYPE a in Enum.GetValues(typeof(ACHIEVEMENTTYPE)) where (int)a > 0 select a).ToArray(); int num = 0; ACHIEVEMENTTYPE[] array2 = array; foreach (ACHIEVEMENTTYPE val in array2) { try { AchievementManager.Grant(val); num++; } catch (Exception ex) { Debug.LogWarning((object)$"grantallachievements: Failed to grant {val} - {ex.Message}"); } } Debug.Log((object)$"grantallachievements: Granted {num}/{array.Length} achievements!"); Plugin.Log.LogInfo((object)$"Granted all achievements: {num}/{array.Length}"); } catch (Exception ex2) { Debug.LogError((object)("grantallachievements: Failed to grant all achievements - " + ex2.Message)); } } [ConsoleCommand] public static void AchievementStats() { //IL_005e: 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_0074: Unknown result type (might be due to invalid IL or missing references) try { ACHIEVEMENTTYPE[] array = (from ACHIEVEMENTTYPE a in Enum.GetValues(typeof(ACHIEVEMENTTYPE)) where (int)a > 0 select a).ToArray(); int num = 0; int num2 = 0; AchievementManager instance = Singleton<AchievementManager>.Instance; if ((Object)(object)instance != (Object)null) { ACHIEVEMENTTYPE[] array2 = array; foreach (ACHIEVEMENTTYPE val in array2) { try { if (instance.IsAchievementUnlocked(val)) { num++; } if (instance.achievementsEarnedThisRun.Contains(val)) { num2++; } } catch { } } } Debug.Log((object)"=== Achievement Statistics ==="); Debug.Log((object)$"Total achievements: {array.Length}"); Debug.Log((object)$"Unlocked: {num}/{array.Length} ({(float)num / (float)array.Length * 100f:F1}%)"); Debug.Log((object)$"Earned this run: {num2}"); Debug.Log((object)$"Remaining: {array.Length - num}"); Plugin.Log.LogInfo((object)$"Achievement stats: {num}/{array.Length} unlocked, {num2} this run"); } catch (Exception ex) { Debug.LogError((object)("achievementstats: Failed to get achievement stats - " + ex.Message)); } } private static string GetAchievementDescription(ACHIEVEMENTTYPE achievementType) { //IL_0000: 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_0088: Expected I4, but got Unknown return (achievementType - 1) switch { 0 => "Tried Your Best - Keep trying!", 1 => "Beachcomber - Master of the Beach biome", 2 => "Trailblazer - Explorer of trails", 3 => "Alpinist - Mountain climbing expert", 4 => "Volcanology - Volcano and lava expert", 5 => "Cooking - Master chef of the wilderness", 6 => "Happy Camper - Camping enthusiast", 7 => "Bouldering - Rock climbing specialist", 8 => "Toxicology - Poison and antidote expert", 9 => "Foraging - Master of finding resources", 10 => "Esoterica - Hidden knowledge seeker", 11 => "Peak - Summit conquerer", 12 => "Lone Wolf - Solo adventurer", 13 => "Clutch - Rescue specialist", 14 => "Balloon - High altitude specialist", 15 => "Leave No Trace - Environmental protector", 16 => "Speed Climber - Fast ascent specialist", 17 => "Bing Bong - Mystery achievement", 18 => "Naturalist - Nature observer", 19 => "Gourmand - Fine food connoisseur", 20 => "Mycology - Mushroom expert", 21 => "First Aid - Medical specialist", 22 => "Survivalist - Ultimate survival expert", 23 => "Animal Serenading - Animal whisperer", 24 => "Arborist - Tree expert", 25 => "Mentorship - Teacher and guide", 26 => "Knot Tying - Rope work specialist", 27 => "Emergency Preparedness - Always ready", 28 => "Ascender - Climbing equipment master", 29 => "Plunderer - Loot collector", 30 => "Bookworm - Knowledge seeker", 31 => "Endurance - Stamina specialist", _ => "Unknown achievement", }; } } public class AchievementTypeCLIParser : CLITypeParser { public override object? Parse(string raw) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) if (Enum.TryParse<ACHIEVEMENTTYPE>(raw, ignoreCase: true, out ACHIEVEMENTTYPE result)) { return result; } return null; } public override List<ParameterAutocomplete> FindAutocomplete(string textSoFar) { string textSoFar2 = textSoFar; return (from name in Enum.GetNames(typeof(ACHIEVEMENTTYPE)) where name != "NONE" where name.StartsWith(textSoFar2, StringComparison.OrdinalIgnoreCase) select name).Select((Func<string, ParameterAutocomplete>)((string name) => new ParameterAutocomplete(name))).ToList(); } } public class CharacterAfflictionsRPC : MonoBehaviourPunCallbacks { private CharacterAfflictions CA => ((Component)this).GetComponent<CharacterAfflictions>(); [PunRPC] public void RPC_ClearStatus(int statusType) { //IL_0001: 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) STATUSTYPE val = (STATUSTYPE)statusType; CA.SetStatus(val, 0f); } [PunRPC] public void RPC_AddStatus(int statusType, float amount) { //IL_0001: 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) STATUSTYPE val = (STATUSTYPE)statusType; CA.AddStatus(val, amount, false); } [PunRPC] public void RPC_ClearCold() { CA.SetStatus((STATUSTYPE)2, 0f); } [PunRPC] public void RPC_AddCold(float amt) { CA.AddStatus((STATUSTYPE)2, amt, false); } [PunRPC] public void RPC_ClearHunger() { CA.SetStatus((STATUSTYPE)1, 0f); } [PunRPC] public void RPC_AddHunger(float amt) { CA.AddStatus((STATUSTYPE)1, amt, false); } [PunRPC] public void RPC_ClearPoison() { CA.SetStatus((STATUSTYPE)3, 0f); } [PunRPC] public void RPC_AddPoison(float amt) { CA.AddStatus((STATUSTYPE)3, amt, false); } [PunRPC] public void RPC_ClearCurse() { CA.SetStatus((STATUSTYPE)5, 0f); } [PunRPC] public void RPC_AddCurse(float amt) { CA.AddStatus((STATUSTYPE)5, amt, false); } [PunRPC] public void RPC_ClearDrowsy() { CA.SetStatus((STATUSTYPE)6, 0f); } [PunRPC] public void RPC_AddDrowsy(float amt) { CA.AddStatus((STATUSTYPE)6, amt, false); } [PunRPC] public void RPC_ClearInjury() { CA.SetStatus((STATUSTYPE)0, 0f); } [PunRPC] public void RPC_AddInjury(float amt) { CA.AddStatus((STATUSTYPE)0, amt, false); } [PunRPC] public void RPC_ClearHot() { CA.SetStatus((STATUSTYPE)8, 0f); } [PunRPC] public void RPC_AddHot(float amt) { CA.AddStatus((STATUSTYPE)8, amt, false); } [PunRPC] public void RPC_ClearAllStatuses() { //IL_001d: 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_0029: Unknown result type (might be due to invalid IL or missing references) foreach (STATUSTYPE value in Enum.GetValues(typeof(STATUSTYPE))) { CA.SetStatus(value, 0f); } } } [HarmonyPatch] public static class CharacterItemsPatch { [HarmonyPatch(typeof(CharacterItems), "UpdateBalloonCount")] [HarmonyPrefix] public static bool UpdateBalloonCount_Prefix(CharacterItems __instance, ItemSlot[] slots) { try { if ((Object)(object)__instance?.character?.refs?.items == (Object)null || (Object)(object)__instance.character.refs.balloons == (Object)null) { return false; } if (__instance.character.refs.items.currentSelectedSlot.IsSome) { if ((Object)(object)__instance.character.player == (Object)null) { __instance.character.refs.balloons.heldBalloonCount = 0; return false; } ItemSlot itemSlot = __instance.character.player.GetItemSlot(__instance.character.refs.items.currentSelectedSlot.Value); if (itemSlot != null && !itemSlot.IsEmpty() && (Object)(object)itemSlot.prefab != (Object)null && __instance.character.refs.items.currentSelectedSlot.IsSome && (Object)(object)((Component)itemSlot.prefab).GetComponent<Balloon>() != (Object)null) { __instance.character.refs.balloons.heldBalloonCount = 1; } else { __instance.character.refs.balloons.heldBalloonCount = 0; } } else { __instance.character.refs.balloons.heldBalloonCount = 0; } return false; } catch (Exception ex) { Plugin.Log.LogError((object)("Error in UpdateBalloonCount patch: " + ex.Message)); if ((Object)(object)__instance?.character?.refs?.balloons != (Object)null) { __instance.character.refs.balloons.heldBalloonCount = 0; } return false; } } } public static class ConfigCommands { [ConsoleCommand] public static void ShowConfig() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)"=== Advanced Console Configuration ==="); Debug.Log((object)PluginConfig.GetConfigInfo()); Debug.Log((object)"=== Current Key Bindings ==="); Debug.Log((object)$"Console Toggle: {PluginConfig.ConsoleToggleKey} (press to show/hide console)"); Debug.Log((object)$"Console DPI Reset: {PluginConfig.ConsoleDPIResetKey} (press to reset console scaling)"); Debug.Log((object)"=== Configuration Help ==="); Debug.Log((object)"Use 'ConfigCommands.ShowKeyCodes' to see available keys"); Debug.Log((object)"Use 'ConfigCommands.OpenConfigFolder' to open config file location"); Plugin.Log.LogInfo((object)"Configuration displayed in console"); } [ConsoleCommand] public static void SetConsoleToggleKey(KeyCode key) { //IL_0005: 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) //IL_0034: Expected I4, but got Unknown //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected I4, but got Unknown //IL_0070: 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: Expected I4, but got Unknown //IL_0090: 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) try { Debug.Log((object)$"setconsoletogglekey: To change console toggle key to {key}:"); Debug.Log((object)"1. Close the game"); Debug.Log((object)"2. Open config file: BepInEx/config/keklick1337.AdvancedConsole.cfg"); Debug.Log((object)$"3. Find [Keybinds] section and change ConsoleToggleKey = {(int)key}"); Debug.Log((object)"4. Save the file and restart the game"); Debug.Log((object)$"Current key: {PluginConfig.ConsoleToggleKey} (code: {(int)PluginConfig.ConsoleToggleKey})"); Debug.Log((object)$"Desired key: {key} (code: {(int)key})"); Plugin.Log.LogInfo((object)$"Console toggle key change requested: {PluginConfig.ConsoleToggleKey} -> {key}"); } catch (Exception ex) { Debug.LogError((object)("setconsoletogglekey: Error - " + ex.Message)); } } [ConsoleCommand] public static void SetConsoleDPIResetKey(KeyCode key) { //IL_0005: 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) //IL_0034: Expected I4, but got Unknown //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected I4, but got Unknown //IL_0070: 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: Expected I4, but got Unknown //IL_0090: 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) try { Debug.Log((object)$"setconsoledpiresetkey: To change console DPI reset key to {key}:"); Debug.Log((object)"1. Close the game"); Debug.Log((object)"2. Open config file: BepInEx/config/keklick1337.AdvancedConsole.cfg"); Debug.Log((object)$"3. Find [Keybinds] section and change ConsoleDPIResetKey = {(int)key}"); Debug.Log((object)"4. Save the file and restart the game"); Debug.Log((object)$"Current key: {PluginConfig.ConsoleDPIResetKey} (code: {(int)PluginConfig.ConsoleDPIResetKey})"); Debug.Log((object)$"Desired key: {key} (code: {(int)key})"); Plugin.Log.LogInfo((object)$"Console DPI reset key change requested: {PluginConfig.ConsoleDPIResetKey} -> {key}"); } catch (Exception ex) { Debug.LogError((object)("setconsoledpiresetkey: Error - " + ex.Message)); } } [ConsoleCommand] public static void ReloadConfig() { try { PluginConfig.Reload(); Debug.Log((object)"reloadconfig: Configuration reloaded from disk"); Debug.Log((object)"Note: Key bindings require game restart to take effect"); ShowConfig(); } catch (Exception ex) { Debug.LogError((object)("reloadconfig: Error - " + ex.Message)); } } [ConsoleCommand] public static void SaveConfig() { try { PluginConfig.Save(); Debug.Log((object)"saveconfig: Configuration saved to disk"); } catch (Exception ex) { Debug.LogError((object)("saveconfig: Error - " + ex.Message)); } } [ConsoleCommand] public static void ShowKeyCodes() { Debug.Log((object)"=== Popular KeyCodes for binding ==="); Debug.Log((object)"Function Keys:"); Debug.Log((object)$" F1 = {282}, F2 = {283}, F3 = {284}, F4 = {285}"); Debug.Log((object)$" F5 = {286}, F6 = {287}, F7 = {288}, F8 = {289}"); Debug.Log((object)$" F9 = {290}, F10 = {291}, F11 = {292}, F12 = {293}"); Debug.Log((object)"Special Keys:"); Debug.Log((object)$" Tilde (~) = {96}, Tab = {9}"); Debug.Log((object)$" Insert = {277}, Delete = {127}"); Debug.Log((object)$" Home = {278}, End = {279}"); Debug.Log((object)$" Page Up = {280}, Page Down = {281}"); Debug.Log((object)"Modifier Keys:"); Debug.Log((object)$" Left Ctrl = {306}, Right Ctrl = {305}"); Debug.Log((object)$" Left Alt = {308}, Right Alt = {307}"); Debug.Log((object)$" Left Shift = {304}, Right Shift = {303}"); Debug.Log((object)"Usage: ConfigCommands.SetConsoleToggleKey <KeyCode>"); Debug.Log((object)"Example: ConfigCommands.SetConsoleToggleKey BackQuote"); } [ConsoleCommand] public static void OpenConfigFolder() { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Invalid comparison between Unknown and I4 //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Invalid comparison between Unknown and I4 try { string text = Path.Combine(Paths.ConfigPath, "keklick1337.AdvancedConsole.cfg"); string text2 = Path.GetDirectoryName(text) ?? Paths.ConfigPath; Debug.Log((object)"openconfigfolder: Config file location:"); Debug.Log((object)(" " + text)); Debug.Log((object)(" Directory: " + text2)); if ((int)Application.platform == 2 || (int)Application.platform == 7) { try { Process.Start("explorer.exe", text2); Debug.Log((object)"openconfigfolder: Opened config folder in Windows Explorer"); } catch { Debug.Log((object)"openconfigfolder: Could not open folder automatically. Please navigate manually to the path above."); } } else { Debug.Log((object)"openconfigfolder: Automatic folder opening only supported on Windows. Please navigate manually to the path above."); } Plugin.Log.LogInfo((object)("Config folder access requested: " + text2)); } catch (Exception ex) { Debug.LogError((object)("openconfigfolder: Error - " + ex.Message)); } } [ConsoleCommand] public static void CreateExampleConfig() { try { string text = Path.Combine(Paths.ConfigPath, "AdvancedConsole_Example.cfg"); string contents = "# Advanced Console Configuration Example\r\n# This file shows all available settings with descriptions\r\n# Copy values to keklick1337.AdvancedConsole.cfg to apply changes\r\n\r\n[Keybinds]\r\n\r\n# Key to toggle console visibility\r\n# Popular choices: F1=282, F2=283, F3=284, F4=285, F5=286\r\n# BackQuote=96 (tilde ~), Tab=9, Insert=277, Delete=127\r\nConsoleToggleKey = 282\r\n\r\n# Key to reset console DPI to default\r\n# Useful if console becomes too small/large due to scaling issues\r\nConsoleDPIResetKey = 283\r\n\r\n[General]\r\n\r\n# Enable extended debug logging for troubleshooting\r\nEnableDebugLogs = true\r\n\r\n# Enable mod detection system to identify other players' mods\r\nEnableModDetection = true\r\n\r\n[ServerInfo]\r\n\r\n# Automatically refresh Server Info page\r\nAutoRefresh = true\r\n\r\n# How often to refresh Server Info in seconds (1-60)\r\nRefreshInterval = 5.0\r\n\r\n[Distance]\r\n\r\n# Maximum raycast distance for teleport and spawn commands (100-10000 meters)\r\n# Used when teleporting to camera target or spawning items at camera position\r\nMaxRaycastDistance = 5000.0\r\n\r\n# Fallback distance when raycast doesn't hit anything (5-100 meters)\r\n# Used when camera raycast goes into empty space\r\nFallbackDistance = 25.0\r\n\r\n# Key Code Reference:\r\n# A-Z = 97-122, 0-9 = 48-57\r\n# F1-F12 = 282-293\r\n# Arrow Keys: Up=273, Down=274, Right=275, Left=276\r\n# Space=32, Enter=13, Escape=27\r\n# For complete list, use: ConfigCommands.ShowKeyCodes\r\n"; File.WriteAllText(text, contents); Debug.Log((object)"createexampleconfig: Created example config file:"); Debug.Log((object)(" " + text)); Debug.Log((object)"Use this file as reference for configuration options"); Plugin.Log.LogInfo((object)("Example config created: " + text)); } catch (Exception ex) { Debug.LogError((object)("createexampleconfig: Error - " + ex.Message)); } } } [HarmonyPatch] public static class ConsoleLogPatch { private class LogGroupEntry { public string OriginalMessage { get; set; } = ""; public LogType LogType { get; set; } public DateTime FirstOccurrence { get; set; } public DateTime LastOccurrence { get; set; } public int Count { get; set; } = 1; public List<DateTime> AllOccurrences { get; set; } = new List<DateTime>(); public string Stacktrace { get; set; } = ""; } private static readonly Dictionary<string, LogGroupEntry> _logGroups = new Dictionary<string, LogGroupEntry>(); private static readonly TimeSpan _groupingTimeWindow = TimeSpan.FromMinutes(5.0); public static void Initialize() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown try { Harmony val = new Harmony("com.keklick1337.peak.advancedconsole.logpatch"); Type typeFromHandle = typeof(DebugUIHandler); MethodInfo method = typeFromHandle.GetMethod("AddEntry", BindingFlags.Instance | BindingFlags.Public); if (method != null) { MethodInfo method2 = typeof(ConsoleLogPatch).GetMethod("AddEntryPrefix", BindingFlags.Static | BindingFlags.NonPublic); val.Patch((MethodBase)method, new HarmonyMethod(method2), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); Plugin.Log.LogInfo((object)"Successfully patched DebugUIHandler.AddEntry"); } else { Plugin.Log.LogError((object)"Could not find DebugUIHandler.AddEntry method"); } } catch (Exception arg) { Plugin.Log.LogError((object)$"Failed to initialize ConsoleLogPatch: {arg}"); } } private static bool AddEntryPrefix(DebugUIHandler __instance, ref ConsoleLogEntry entry) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: 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_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_0113: 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_011a: 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_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_014f: Unknown result type (might be due to invalid IL or missing references) try { if (string.IsNullOrWhiteSpace(entry.Log)) { return true; } string key = $"{entry.LogType}:{entry.Log.Trim()}:{entry.Stacktrace}"; DateTime now = DateTime.Now; if (_logGroups.TryGetValue(key, out LogGroupEntry value)) { if (now - value.LastOccurrence <= _groupingTimeWindow) { value.Count++; value.LastOccurrence = now; value.AllOccurrences.Add(now); ConsoleLogEntry val = default(ConsoleLogEntry); val.Log = $"[{value.Count}] {value.OriginalMessage}"; val.LogType = value.LogType; val.LogTime = value.FirstOccurrence; val.Frame = entry.Frame; val.Stacktrace = value.Stacktrace; ConsoleLogEntry item = val; List<ConsoleLogEntry> logEntries = GetLogEntries(__instance); if (logEntries != null) { for (int num = logEntries.Count - 1; num >= 0; num--) { ConsoleLogEntry val2 = logEntries[num]; if (IsSameGroup(val2.Log, val2.LogType, val2.Stacktrace, value)) { logEntries.RemoveAt(num); break; } } logEntries.Add(item); } return false; } _logGroups.Remove(key); } LogGroupEntry logGroupEntry = new LogGroupEntry { OriginalMessage = entry.Log, LogType = entry.LogType, FirstOccurrence = now, LastOccurrence = now, Count = 1, Stacktrace = entry.Stacktrace }; logGroupEntry.AllOccurrences.Add(now); _logGroups[key] = logGroupEntry; return true; } catch (Exception arg) { Plugin.Log.LogError((object)$"Error in AddEntryPrefix: {arg}"); return true; } } private static bool IsSameGroup(string entryLog, LogType entryLogType, string entryStacktrace, LogGroupEntry group) { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) string text = entryLog; if (text.StartsWith("[") && text.Contains("] ")) { int num = text.IndexOf("] "); if (num > 0) { text = text.Substring(num + 2); } } if (text.Trim() == group.OriginalMessage.Trim() && entryLogType == group.LogType) { return entryStacktrace == group.Stacktrace; } return false; } private static List<ConsoleLogEntry>? GetLogEntries(DebugUIHandler handler) { try { return typeof(DebugUIHandler).GetField("m_logEntries", BindingFlags.Instance | BindingFlags.NonPublic)?.GetValue(handler) as List<ConsoleLogEntry>; } catch (Exception arg) { Plugin.Log.LogError((object)$"Error getting log entries: {arg}"); return null; } } public static void CleanupOldEntries() { try { DateTime cutoffTime = DateTime.Now - _groupingTimeWindow; List<string> list = (from kvp in _logGroups where kvp.Value.LastOccurrence < cutoffTime select kvp.Key).ToList(); foreach (string item in list) { _logGroups.Remove(item); } if (list.Count > 0) { Plugin.Log.LogInfo((object)$"Cleaned up {list.Count} old log groups"); } } catch (Exception arg) { Plugin.Log.LogError((object)$"Error cleaning up old entries: {arg}"); } } public static void GetLogGroupStats() { try { Plugin.Log.LogInfo((object)$"Active log groups: {_logGroups.Count}"); IEnumerable<LogGroupEntry> enumerable = _logGroups.Values.OrderByDescending((LogGroupEntry g) => g.Count).Take(10); foreach (LogGroupEntry item in enumerable) { Plugin.Log.LogInfo((object)$"[{item.Count}] {item.OriginalMessage.Substring(0, Math.Min(50, item.OriginalMessage.Length))}..."); } } catch (Exception arg) { Plugin.Log.LogError((object)$"Error getting log group stats: {arg}"); } } } public class AdvancedConsolePage : DebugPage { public class ConsoleCommandInfo { public string MethodName { get; set; } = ""; public string FullName { get; set; } = ""; public string Description { get; set; } = ""; public ParameterInfo[] Parameters { get; set; } = Array.Empty<ParameterInfo>(); public MethodInfo Method { get; set; } public Type DeclaringType { get; set; } public bool RequiresMasterClient { get; set; } public bool IsRPCCommand { get; set; } } private Dictionary<string, List<ConsoleCommandInfo>> _commandGroups = new Dictionary<string, List<ConsoleCommandInfo>>(); private VisualElement _commandsContainer; private DropdownField _groupFilter; private TextField _searchField; private Button _refreshButton; public AdvancedConsolePage() { ((VisualElement)this).name = "AdvancedConsole"; ScanForCommands(); SetupPage(); } private void SetupPage() { //IL_0005: 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_0015: 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_0026: 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_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_0054: 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_0069: 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_007f: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: 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_009c: 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_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: 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_00da: 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_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0104: 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_0119: 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_012e: 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_0143: Unknown result type (might be due to invalid IL or missing references) //IL_014e: 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_0178: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Expected O, but got Unknown //IL_0189: 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_0199: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: 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_01dc: 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_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Expected O, but got Unknown //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_0272: Unknown result type (might be due to invalid IL or missing references) //IL_027d: Unknown result type (might be due to invalid IL or missing references) //IL_0287: Unknown result type (might be due to invalid IL or missing references) //IL_0292: Unknown result type (might be due to invalid IL or missing references) //IL_029c: Unknown result type (might be due to invalid IL or missing references) //IL_02b1: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: Unknown result type (might be due to invalid IL or missing references) //IL_02c0: Unknown result type (might be due to invalid IL or missing references) //IL_02d5: Unknown result type (might be due to invalid IL or missing references) //IL_02da: Unknown result type (might be due to invalid IL or missing references) //IL_02e9: Expected O, but got Unknown //IL_031a: Unknown result type (might be due to invalid IL or missing references) //IL_031f: Unknown result type (might be due to invalid IL or missing references) //IL_032a: Unknown result type (might be due to invalid IL or missing references) //IL_0335: Unknown result type (might be due to invalid IL or missing references) //IL_033f: Unknown result type (might be due to invalid IL or missing references) //IL_0354: Unknown result type (might be due to invalid IL or missing references) //IL_0359: Unknown result type (might be due to invalid IL or missing references) //IL_0363: Unknown result type (might be due to invalid IL or missing references) //IL_0369: Unknown result type (might be due to invalid IL or missing references) //IL_036e: Unknown result type (might be due to invalid IL or missing references) //IL_037d: Expected O, but got Unknown //IL_0390: Unknown result type (might be due to invalid IL or missing references) //IL_0395: Unknown result type (might be due to invalid IL or missing references) //IL_03a0: Unknown result type (might be due to invalid IL or missing references) //IL_03ab: Expected O, but got Unknown //IL_03ac: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: Expected O, but got Unknown //IL_0412: Unknown result type (might be due to invalid IL or missing references) //IL_0417: Unknown result type (might be due to invalid IL or missing references) //IL_0422: Unknown result type (might be due to invalid IL or missing references) //IL_042c: Unknown result type (might be due to invalid IL or missing references) //IL_0441: Unknown result type (might be due to invalid IL or missing references) //IL_0446: Unknown result type (might be due to invalid IL or missing references) //IL_0450: Unknown result type (might be due to invalid IL or missing references) //IL_045b: Unknown result type (might be due to invalid IL or missing references) //IL_0467: Expected O, but got Unknown Label val = new Label("Advanced Console Commands"); ((VisualElement)val).style.fontSize = StyleLength.op_Implicit(20f); ((VisualElement)val).style.unityFontStyleAndWeight = StyleEnum<FontStyle>.op_Implicit((FontStyle)1); ((VisualElement)val).style.color = StyleColor.op_Implicit(new Color(0.2f, 0.9f, 0.2f)); ((VisualElement)val).style.marginBottom = StyleLength.op_Implicit(8f); ((VisualElement)val).style.marginTop = StyleLength.op_Implicit(3f); Label val2 = val; ((VisualElement)this).Add((VisualElement)(object)val2); VisualElement val3 = new VisualElement(); val3.style.flexDirection = StyleEnum<FlexDirection>.op_Implicit((FlexDirection)2); val3.style.marginBottom = StyleLength.op_Implicit(8f); val3.style.backgroundColor = StyleColor.op_Implicit(new Color(0.15f, 0.15f, 0.15f, 0.8f)); val3.style.paddingTop = StyleLength.op_Implicit(4f); val3.style.paddingBottom = StyleLength.op_Implicit(4f); val3.style.paddingLeft = StyleLength.op_Implicit(6f); val3.style.paddingRight = StyleLength.op_Implicit(6f); val3.style.borderTopLeftRadius = StyleLength.op_Implicit(4f); val3.style.borderTopRightRadius = StyleLength.op_Implicit(4f); val3.style.borderBottomLeftRadius = StyleLength.op_Implicit(4f); val3.style.borderBottomRightRadius = StyleLength.op_Implicit(4f); VisualElement val4 = val3; TextField val5 = new TextField("Search:"); ((VisualElement)val5).style.flexGrow = StyleFloat.op_Implicit(1f); ((VisualElement)val5).style.marginRight = StyleLength.op_Implicit(8f); ((VisualElement)val5).style.color = StyleColor.op_Implicit(new Color(0.95f, 0.95f, 0.95f)); ((VisualElement)val5).style.backgroundColor = StyleColor.op_Implicit(new Color(0.1f, 0.1f, 0.1f)); _searchField = val5; ((CallbackEventHandler)_searchField).RegisterCallback<AttachToPanelEvent>((EventCallback<AttachToPanelEvent>)delegate { //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_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) VisualElement val12 = UQueryExtensions.Q<VisualElement>((VisualElement)(object)_searchField, (string)null, "unity-text-field__input"); if (val12 != null) { val12.style.backgroundColor = StyleColor.op_Implicit(new Color(0.1f, 0.1f, 0.1f)); val12.style.color = StyleColor.op_Implicit(new Color(0.95f, 0.95f, 0.95f)); } }, (TrickleDown)0); INotifyValueChangedExtensions.RegisterValueChangedCallback<string>((INotifyValueChanged<string>)(object)_searchField, (EventCallback<ChangeEvent<string>>)OnSearchChanged); val4.Add((VisualElement)(object)_searchField); List<string> list = new List<string> { "All Groups" }; list.AddRange(_commandGroups.Keys); DropdownField val6 = new DropdownField("Category:", list, 0, (Func<string, string>)null, (Func<string, string>)null); ((VisualElement)val6).style.width = StyleLength.op_Implicit(350f); ((VisualElement)val6).style.marginRight = StyleLength.op_Implicit(8f); ((VisualElement)val6).style.color = StyleColor.op_Implicit(new Color(0.95f, 0.95f, 0.95f)); ((VisualElement)val6).style.backgroundColor = StyleColor.op_Implicit(new Color(0.1f, 0.1f, 0.1f)); _groupFilter = val6; INotifyValueChangedExtensions.RegisterValueChangedCallback<string>((INotifyValueChanged<string>)(object)_groupFilter, (EventCallback<ChangeEvent<string>>)OnGroupFilterChanged); val4.Add((VisualElement)(object)_groupFilter); Button val7 = new Button((Action)RefreshCommands) { text = "Refresh" }; ((VisualElement)val7).style.width = StyleLength.op_Implicit(90f); ((VisualElement)val7).style.backgroundColor = StyleColor.op_Implicit(new Color(0.2f, 0.5f, 0.8f)); ((VisualElement)val7).style.color = StyleColor.op_Implicit(Color.white); _refreshButton = val7; val4.Add((VisualElement)(object)_refreshButton); ((VisualElement)this).Add(val4); ScrollView val8 = new ScrollView(); ((VisualElement)val8).style.flexGrow = StyleFloat.op_Implicit(1f); ScrollView val9 = val8; _commandsContainer = new VisualElement(); ((VisualElement)val9).Add(_commandsContainer); ((VisualElement)this).Add((VisualElement)(object)val9); Label val10 = new Label($"Found {_commandGroups.Sum<KeyValuePair<string, List<ConsoleCommandInfo>>>((KeyValuePair<string, List<ConsoleCommandInfo>> g) => g.Value.Count)} commands in {_commandGroups.Count} groups"); ((VisualElement)val10).style.fontSize = StyleLength.op_Implicit(11f); ((VisualElement)val10).style.color = StyleColor.op_Implicit(new Color(0.8f, 0.8f, 0.8f)); ((VisualElement)val10).style.marginTop = StyleLength.op_Implicit(4f); Label val11 = val10; ((VisualElement)this).Add((VisualElement)(object)val11); RefreshCommandsDisplay(); } private void ScanForCommands() { _commandGroups.Clear(); Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); Assembly[] array = assemblies; foreach (Assembly assembly in array) { try { Type[] types = assembly.GetTypes(); Type[] array2 = types; foreach (Type type in array2) { MethodInfo[] methods = type.GetMethods(BindingFlags.Static | BindingFlags.Public); MethodInfo[] array3 = methods; foreach (MethodInfo methodInfo in array3) { ConsoleCommandAttribute customAttribute = ((MemberInfo)methodInfo).GetCustomAttribute<ConsoleCommandAttribute>(); if (customAttribute != null) { AddCommandToGroups(methodInfo, type); } } } } catch (Exception ex) { Plugin.Log.LogDebug((object)("Error scanning assembly " + assembly.FullName + ": " + ex.Message)); } } try { Type type2 = assemblies.SelectMany(delegate(Assembly a) { try { return a.GetTypes(); } catch { return Array.Empty<Type>(); } }).FirstOrDefault((Type t) => t.Name == "ConsoleHandler"); if (type2 != null) { List<FieldInfo> list = (from f in type2.GetFields(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic) where f.FieldType.IsGenericType && (f.FieldType.GetGenericTypeDefinition() == typeof(Dictionary<, >) || f.Name.ToLower().Contains("command")) select f).ToList(); foreach (FieldInfo item in list) { try { object value = item.GetValue(null); if (value != null) { ScanRegisteredCommands(value); } } catch (Exception ex2) { Plugin.Log.LogDebug((object)("Error accessing command field " + item.Name + ": " + ex2.Message)); } } } } catch (Exception ex3) { Plugin.Log.LogDebug((object)("Error scanning registered commands: " + ex3.Message)); } Plugin.Log.LogInfo((object)$"Advanced Console: Found {_commandGroups.Sum<KeyValuePair<string, List<ConsoleCommandInfo>>>((KeyValuePair<string, List<ConsoleCommandInfo>> g) => g.Value.Count)} commands in {_commandGroups.Count} groups"); } private void AddCommandToGroups(MethodInfo method, Type type) { ConsoleCommandInfo item = new ConsoleCommandInfo { MethodName = method.Name, FullName = type.Name + "." + method.Name, Description = GetCommandDescription(method), Parameters = method.GetParameters(), Method = method, DeclaringType = type, RequiresMasterClient = DoesRequireMasterClient(method), IsRPCCommand = IsRPCCommand(method) }; string groupName = GetGroupName(type.Name); if (!_commandGroups.ContainsKey(groupName)) { _commandGroups[groupName] = new List<ConsoleCommandInfo>(); } _commandGroups[groupName].Add(item); } private void ScanRegisteredCommands(object commandDict) { try { Type type = commandDict.GetType(); if (!type.IsGenericType || !(type.GetGenericTypeDefinition() == typeof(Dictionary<, >))) { return; } Type type2 = type.GetGenericArguments()[0]; Type type3 = type.GetGenericArguments()[1]; if (!(type2 == typeof(string))) { return; } object obj = type.GetProperty("Keys")?.GetValue(commandDict); if (!(obj is IEnumerable<string> enumerable)) { return; } foreach (string commandName in enumerable) { if (!commandName.Contains(".")) { continue; } string[] array = commandName.Split('.'); if (array.Length >= 2) { string typeName = array[0]; string methodName = array[1]; ConsoleCommandInfo item = new ConsoleCommandInfo { MethodName = methodName, FullName = commandName, Description = GetCommandDescription(methodName), Parameters = Array.Empty<ParameterInfo>(), Method = null, DeclaringType = null, RequiresMasterClient = false, IsRPCCommand = false }; string groupName = GetGroupName(typeName); if (!_commandGroups.ContainsKey(groupName)) { _commandGroups[groupName] = new List<ConsoleCommandInfo>(); } ConsoleCommandInfo consoleCommandInfo = _commandGroups[groupName].FirstOrDefault((ConsoleCommandInfo c) => c.FullName == commandName); if (consoleCommandInfo == null) { _commandGroups[groupName].Add(item); } } } } catch (Exception ex) { Plugin.Log.LogDebug((object)("Error scanning registered commands: " + ex.Message)); } } private string GetCommandDescription(string methodName) { string text = Regex.Replace(methodName, "([a-z])([A-Z])", "$1 $2").ToLower(); return char.ToUpper(text[0]) + text.Substring(1); } private string GetGroupName(string typeName) { if (typeName.Contains("Teleport")) { return "Teleportation"; } if (typeName.Contains("Fun")) { return "Fun Commands"; } if (typeName.Contains("Environment")) { return "Environment"; } if (typeName.Contains("Spawn")) { return "Spawn & Items"; } if (typeName.Contains("RPC")) { return "RPC Commands"; } if (typeName.Contains("Status")) { return "Status Effects"; } if (typeName.Contains("Map")) { return "Map & Segments"; } if (typeName.Contains("Info")) { return "Information"; } if (typeName.Contains("Log")) { return "Console & Logs"; } if (typeName.Contains("Sync")) { return "Sync Commands"; } if (typeName.Contains("Weather")) { return "Weather"; } if (typeName.Contains("Character")) { return "Character"; } if (typeName.Contains("Item")) { return "Items"; } if (typeName.Contains("Console")) { return "Console & Logs"; } if (typeName.Contains("Application")) { return "System"; } if (typeName.Contains("Achievement")) { return "Achievements"; } if (typeName.Contains("Passport")) { return "Customization"; } if (typeName.Contains("Ascent")) { return "Ascents"; } if (typeName.Contains("Backpack")) { return "Backpack"; } return "Other Commands"; } private string GetCommandDescription(MethodInfo method) { string name = method.Name; string text = Regex.Replace(name, "([a-z])([A-Z])", "$1 $2").ToLower(); return char.ToUpper(text[0]) + text.Substring(1); } private bool DoesRequireMasterClient(MethodInfo method) { return method.GetCustomAttribute<MasterClientOnlyAttribute>() != null; } private bool IsRPCCommand(MethodInfo method) { Type? declaringType = method.DeclaringType; if (((object)declaringType == null || !declaringType.Name.Contains("RPC")) && !method.Name.Contains("RPC")) { return DoesRequireMasterClient(method); } return true; } private void OnSearchChanged(ChangeEvent<string> evt) { RefreshCommandsDisplay(); } private void OnGroupFilterChanged(ChangeEvent<string> evt) { RefreshCommandsDisplay(); } private void RefreshCommands() { ScanForCommands(); List<string> list = new List<string> { "All Groups" }; list.AddRange(_commandGroups.Keys); ((BasePopupField<string, string>)(object)_groupFilter).choices = list; RefreshCommandsDisplay(); } private void RefreshCommandsDisplay() { //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: 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_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0103: 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_011d: 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_0132: 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_0147: 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_016b: 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_017a: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_019a: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: 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_01f8: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Expected O, but got Unknown _commandsContainer.Clear(); string searchText = ((BaseField<string>)(object)_searchField).value?.ToLower() ?? ""; string value = ((BaseField<string>)(object)_groupFilter).value; foreach (KeyValuePair<string, List<ConsoleCommandInfo>> commandGroup in _commandGroups) { if (value != "All Groups" && commandGroup.Key != value) { continue; } List<ConsoleCommandInfo> list = commandGroup.Value.Where((ConsoleCommandInfo cmd) => string.IsNullOrEmpty(searchText) || cmd.FullName.ToLower().Contains(searchText) || cmd.Description.ToLower().Contains(searchText)).ToList(); if (list.Count == 0) { continue; } Label val = new Label($"{commandGroup.Key} ({list.Count})"); ((VisualElement)val).style.fontSize = StyleLength.op_Implicit(16f); ((VisualElement)val).style.unityFontStyleAndWeight = StyleEnum<FontStyle>.op_Implicit((FontStyle)1); ((VisualElement)val).style.color = StyleColor.op_Implicit(new Color(0.2f, 0.8f, 1f)); ((VisualElement)val).style.marginTop = StyleLength.op_Implicit(8f); ((VisualElement)val).style.marginBottom = StyleLength.op_Implicit(4f); ((VisualElement)val).style.backgroundColor = StyleColor.op_Implicit(new Color(0.05f, 0.05f, 0.05f, 0.7f)); ((VisualElement)val).style.paddingLeft = StyleLength.op_Implicit(6f); ((VisualElement)val).style.paddingTop = StyleLength.op_Implicit(2f); ((VisualElement)val).style.paddingBottom = StyleLength.op_Implicit(2f); ((VisualElement)val).style.borderTopLeftRadius = StyleLength.op_Implicit(3f); ((VisualElement)val).style.borderTopRightRadius = StyleLength.op_Implicit(3f); ((VisualElement)val).style.borderBottomLeftRadius = StyleLength.op_Implicit(3f); ((VisualElement)val).style.borderBottomRightRadius = StyleLength.op_Implicit(3f); Label val2 = val; _commandsContainer.Add((VisualElement)(object)val2); foreach (ConsoleCommandInfo item in list.OrderBy((ConsoleCommandInfo c) => c.MethodName)) { CreateCommandElement(item); } } } private void CreateCommandElement(ConsoleCommandInfo command) { //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_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_0042: 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_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_006c: 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_0081: 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_0096: 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_00ab: 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_00cb: 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_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: 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_00ff: 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_0114: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Expected O, but got Unknown //IL_013e: 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_014a: 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_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Expected O, but got Unknown //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_016b: 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_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0183: 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_0198: 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_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Expected O, but got Unknown //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_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: 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_0203: Unknown result type (might be due to invalid IL or missing references) //IL_0208: 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_021d: 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_0232: 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_0243: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Expected O, but got Unknown //IL_026c: Unknown result type (might be due to invalid IL or missing references) //IL_0271: Unknown result type (might be due to invalid IL or missing references) //IL_027c: Unknown result type (might be due to invalid IL or missing references) //IL_0286: Unknown result type (might be due to invalid IL or missing references) //IL_029b: Unknown result type (might be due to invalid IL or missing references) //IL_02a0: Unknown result type (might be due to invalid IL or missing references) //IL_02aa: Unknown result type (might be due to invalid IL or missing references) //IL_02c4: Unknown result type (might be due to invalid IL or missing references) //IL_02c9: Unknown result type (might be due to invalid IL or missing references) //IL_02d3: Unknown result type (might be due to invalid IL or missing references) //IL_02de: Unknown result type (might be due to invalid IL or missing references) //IL_02e8: Unknown result type (might be due to invalid IL or missing references) //IL_02f3: Unknown result type (might be due to invalid IL or missing references) //IL_02fd: Unknown result type (might be due to invalid IL or missing references) //IL_0308: Unknown result type (might be due to invalid IL or missing references) //IL_0312: Unknown result type (might be due to invalid IL or missing references) //IL_031d: Unknown result type (might be due to invalid IL or missing references) //IL_0327: Unknown result type (might be due to invalid IL or missing references) //IL_0332: Unknown result type (might be due to invalid IL or missing references) //IL_033c: Unknown result type (might be due to invalid IL or missing references) //IL_0347: Unknown result type (might be due to invalid IL or missing references) //IL_0351: Unknown result type (might be due to invalid IL or missing references) //IL_035c: Unknown result type (might be due to invalid IL or missing references) //IL_0366: Unknown result type (might be due to invalid IL or missing references) //IL_0371: Unknown result type (might be due to invalid IL or missing references) //IL_037b: Unknown result type (might be due to invalid IL or missing references) //IL_0386: Unknown result type (might be due to invalid IL or missing references) //IL_0392: Expected O, but got Unknown //IL_052e: Unknown result type (might be due to invalid IL or missing references) //IL_0533: Unknown result type (might be due to invalid IL or missing references) //IL_053e: Unknown result type (might be due to invalid IL or missing references) //IL_0548: Unknown result type (might be due to invalid IL or missing references) //IL_055d: Unknown result type (might be due to invalid IL or missing references) //IL_0562: Unknown result type (might be due to invalid IL or missing references) //IL_056c: Unknown result type (might be due to invalid IL or missing references) //IL_0577: Unknown result type (might be due to invalid IL or missing references) //IL_0581: Unknown result type (might be due to invalid IL or missing references) //IL_058c: Unknown result type (might be due to invalid IL or missing references) //IL_0596: Unknown result type (might be due to invalid IL or missing references) //IL_05a1: Unknown result type (might be due to invalid IL or missing references) //IL_05ad: Expected O, but got Unknown //IL_05b5: Unknown result type (might be due to invalid IL or missing references) //IL_05ba: Unknown result type (might be due to invalid IL or missing references) //IL_05c1: Unknown result type (might be due to invalid IL or missing references) //IL_05cb: Unknown result type (might be due to invalid IL or missing references) //IL_05d2: Unknown result type (might be due to invalid IL or missing references) //IL_05dc: Unknown result type (might be due to invalid IL or missing references) //IL_05e7: Unknown result type (might be due to invalid IL or missing references) //IL_05f3: Expected O, but got Unknown //IL_03af: Unknown result type (might be due to invalid IL or missing references) //IL_03b4: Unknown result type (might be due to invalid IL or missing references) //IL_03bf: Unknown result type (might be due to invalid IL or missing references) //IL_03c9: 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_03e5: Unknown result type (might be due to invalid IL or missing references) //IL_086c: Unknown result type (might be due to invalid IL or missing references) //IL_0871: Unknown result type (might be due to invalid IL or missing references) //IL_087c: Unknown result type (might be due to invalid IL or missing references) //IL_0887: Unknown result type (might be due to invalid IL or missing references) //IL_0891: Unknown result type (might be due to invalid IL or missing references) //IL_08a6: Unknown result type (might be due to invalid IL or missing references) //IL_08ab: Unknown result type (might be due to invalid IL or missing references) //IL_08b5: Unknown result type (might be due to invalid IL or missing references) //IL_08bb: Unknown result type (might be due to invalid IL or missing references) //IL_08c0: Unknown result type (might be due to invalid IL or missing references) //IL_08ca: Unknown result type (might be due to invalid IL or missing references) //IL_08d5: Unknown result type (might be due to invalid IL or missing references) //IL_08df: Unknown result type (might be due to invalid IL or missing references) //IL_08ea: Unknown result type (might be due to invalid IL or missing references) //IL_08f6: Expected O, but got Unknown //IL_0400: Unknown result type (might be due to invalid IL or missing references) //IL_040a: Unknown result type (might be due to invalid IL or missing references) //IL_0646: Unknown result type (might be due to invalid IL or missing references) //IL_065c: Unknown result type (might be due to invalid IL or missing references) //IL_0446: Unknown result type (might be due to invalid IL or missing references) //IL_042b: Unknown result type (might be due to invalid IL or missing references) //IL_069b: Unknown result type (might be due to invalid IL or missing references) //IL_06b1: Unknown result type (might be due to invalid IL or missing references) //IL_044b: Unknown result type (might be due to invalid IL or missing references) //IL_0455: Unknown result type (might be due to invalid IL or missing references) //IL_0460: Unknown result type (might be due to invalid IL or missing references) //IL_046a: 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_047f: Unknown result type (might be due to invalid IL or missing references) //IL_048a: Unknown result type (might be due to invalid IL or missing references) //IL_0494: Unknown result type (might be due to invalid IL or missing references) //IL_049f: Unknown result type (might be due to invalid IL or missing references) //IL_04a9: Unknown result type (might be due to invalid IL or missing references) //IL_04b4: Unknown result type (might be due to invalid IL or missing references) //IL_04be: Unknown result type (might be due to invalid IL or missing references) //IL_04c9: Unknown result type (might be due to invalid IL or missing references) //IL_04d3: Unknown result type (might be due to invalid IL or missing references) //IL_04de: Unknown result type (might be due to invalid IL or missing references) //IL_04e8: Unknown result type (might be due to invalid IL or missing references) //IL_04f3: Unknown result type (might be due to invalid IL or missing references) //IL_04fd: Unknown result type (might be due to invalid IL or missing references) //IL_0508: Unknown result type (might be due to invalid IL or missing references) //IL_0514: Expected O, but got Unknown //IL_0716: Unknown result type (might be due to invalid IL or missing references) //IL_071b: Unknown result type (might be due to invalid IL or missing references) //IL_0726: Unknown result type (might be due to invalid IL or missing references) //IL_0730: Unknown result type (might be due to invalid IL or missing references) //IL_073b: Unknown result type (might be due to invalid IL or missing references) //IL_0745: Unknown result type (might be due to invalid IL or missing references) //IL_0750: Unknown result type (might be due to invalid IL or missing references) //IL_075a: Unknown result type (might be due to invalid IL or missing references) //IL_076f: Unknown result type (might be due to invalid IL or missing references) //IL_0774: Unknown result type (might be due to invalid IL or missing references) //IL_077e: Unknown result type (might be due to invalid IL or missing references) //IL_0793: Unknown result type (might be due to invalid IL or missing references) //IL_0798: Unknown result type (might be due to invalid IL or missing references) //IL_07a4: Expected O, but got Unknown //IL_06ed: Unknown result type (might be due to invalid IL or missing references) //IL_0703: Unknown result type (might be due to invalid IL or missing references) //IL_07cd: 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_07f2: Unknown result type (might be due to invalid IL or missing references) //IL_07f7: Unknown result type (might be due to invalid IL or missing references) ConsoleCommandInfo command2 = command; VisualElement val = new VisualElement(); val.style.backgroundColor = StyleColor.op_Implicit(new Color(0.08f, 0.08f, 0.08f, 0.6f)); val.style.marginBottom = StyleLength.op_Implicit(2f); val.style.paddingTop = StyleLength.op_Implicit(3f); val.style.paddingBottom = StyleLength.op_Implicit(3f); val.style.paddingLeft = StyleLength.op_Implicit(6f); val.style.paddingRight = StyleLength.op_Implicit(6f); val.style.borderTopLeftRadius = StyleLength.op_Implicit(3f); val.style.borderTopRightRadius = StyleLength.op_Implicit(3f); val.style.borderBottomLeftRadius = StyleLength.op_Implicit(3f); val.style.borderBottomRightRadius = StyleLength.op_Implicit(3f); val.style.borderLeftWidth = StyleFloat.op_Implicit(2f); val.style.borderLeftColor = StyleColor.op_Implicit(new Color(0.2f, 0.6f, 0.9f, 0.8f)); VisualElement val2 = val; VisualElement val3 = new VisualElement(); val3.style.flexDirection = StyleEnum<FlexDirection>.op_Implicit((FlexDirection)2); val3.style.alignItems = StyleEnum<Align>.op_Implicit((Align)2); VisualElement val4 = val3; VisualElement val5 = new VisualElement(); val5.style.flexDirection = StyleEnum<FlexDirection>.op_Implicit((FlexDirection)2); val5.style.alignItems = StyleEnum<Align>.op_Implicit((Align)2); val5.style.flexGrow = StyleFloat.op_Implicit(1f); val5.style.minWidth = StyleLength.op_Implicit(200f); VisualElement val6 = val5; Label val7 = new Label(command2.FullName); ((VisualElement)val7).style.fontSize = StyleLength.op_Implicit(12f); ((VisualElement)val7).style.unityFontStyleAndWeight = StyleEnum<FontStyle>.op_Implicit((FontStyle)1); ((VisualElement)val7).style.color = StyleColor.op_Implicit(new Color(0.9f, 0.9f, 0.9f)); ((VisualElement)val7).style.marginRight = StyleLength.op_Implicit(6f); ((VisualElement)val7).style.flexShrink = StyleFloat.op_Implicit(0f); ((VisualElement)val7).style.whiteSpace = StyleEnum<WhiteSpace>.op_Implicit((WhiteSpace)1); Label val8 = val7; val6.Add((VisualElement)(object)val8); if (command2.IsRPCCommand) { Label val9 = new Label("RPC"); ((VisualElement)val9).style.fontSize = StyleLength.op_Implicit(8f); ((VisualElement)val9).style.color = StyleColor.op_Implicit(new Color(1f, 0.9f, 0.3f)); ((VisualElement)val9).style.backgroundColor = StyleColor.op_Implicit(new Color(0.4f, 0.3f, 0.1f, 0.8f)); ((VisualElement)val9).style.paddingLeft = StyleLength.op_Implicit(3f); ((VisualElement)val9).style.paddingRight = StyleLength.op_Implicit(3f); ((VisualElement)val9).style.paddingTop = StyleLength.op_Implicit(1f); ((VisualElement)val9).style.paddingBottom = StyleLength.op_Implicit(1f); ((VisualElement)val9).style.marginRight = StyleLength.op_Implicit(3f); ((VisualElement)val9).style.borderTopLeftRadius = StyleLength.op_Implicit(2f); ((VisualElement)val9).style.borderTopRightRadius = StyleLength.op_Implicit(2f); ((VisualElement)val9).style.borderBottomLeftRadius = StyleLength.op_Implicit(2f); ((VisualElement)val9).style.borderBottomRightRadius = StyleLength.op_Implicit(2f); Label val10 = val9; val6.Add((VisualElement)(object)val10); } if (command2.RequiresMasterClient) { Label val11 = new Label("MC"); ((VisualElement)val11).style.fontSize = StyleLength.op_Implicit(8f); ((VisualElement)val11).style.color = StyleColor.op_Implicit(PhotonNetwork.IsMasterClient ? new Color(0.7f, 1f, 0.7f) : new Color(1f, 0.7f, 0.7f)); ((VisualElement)val11).style.backgroundColor = StyleColor.op_Implicit(PhotonNetwork.IsMasterClient ? new Color(0.1f, 0.4f, 0.1f, 0.8f) : new Color(0.4f, 0.1f, 0.1f, 0.8f)); ((VisualElement)val11).style.paddingLeft = StyleLength.op_Implicit(3f); ((VisualElement)val11).style.paddingRight = StyleLength.op_Implicit(3f); ((VisualElement)val11).style.paddingTop = StyleLength.op_Implicit(1f); ((VisualElement)val11).style.paddingBottom = StyleLength.op_Implicit(1f); ((VisualElement)val11).style.marginRight = StyleLength.op_Implicit(3f); ((VisualElement)val11).style.borderTopLeftRadius = StyleLength.op_Implicit(2f); ((VisualElement)val11).style.borderTopRightRadius = StyleLength.op_Implicit(2f); ((VisualElement)val11).style.borderBottomLeftRadius = StyleLength.op_Implicit(2f); ((VisualElement)val11).style.borderBottomRightRadius = StyleLength.op_Implicit(2f); Label val12 = val11; val6.Add((VisualElement)(object)val12); } val4.Add(val6); Label val13 = new Label(command2.Description); ((VisualElement)val13).style.fontSize = StyleLength.op_Implicit(10f); ((VisualElement)val13).style.color = StyleColor.op_Implicit(new Color(0.75f, 0.75f, 0.75f)); ((VisualElement)val13).style.width = StyleLength.op_Implicit(200f); ((VisualElement)val13).style.minWidth = StyleLength.op_Implicit(200f); ((VisualElement)val13).style.marginRight = StyleLength.op_Implicit(8f); Label val14 = val13; val4.Add((VisualElement)(object)val14); VisualElement val15 = new VisualElement(); val15.style.flexDirection = StyleEnum<FlexDirection>.op_Implicit((FlexDirection)2); val15.style.alignItems = StyleEnum<Align>.op_Implicit((Align)2); val15.style.flexGrow = StyleFloat.op_Implicit(1f); VisualElement val16 = val15; List<VisualElement> inputFields = new List<VisualElement>(); ParameterInfo[] parameters = command2.Parameters; foreach (ParameterInfo parameterInfo in parameters) { VisualElement val18; if (parameterInfo.ParameterType == typeof(Player)) { DropdownField val17 = CreatePlayerDropdown(); ((VisualElement)val17).style.width = StyleLength.op_Implicit(150f); ((VisualElement)val17).style.marginRight = StyleLength.op_Implicit(4f); val18 = (VisualElement)(object)val17; } else if (parameterInfo.ParameterType == typeof(ConsoleItem)) { DropdownField val19 = CreateItemDropdown(); ((VisualElement)val19).style.width = StyleLength.op_Implicit(150f); ((VisualElement)val19).style.marginRight = StyleLength.op_Implicit(4f); val18 = (VisualElement)(object)val19; } else if (parameterInfo.ParameterType.IsEnum) { DropdownField val20 = CreateEnumDropdown(parameterInfo.ParameterType); ((VisualElement)val20).style.width = StyleLength.op_Implicit(100f); ((VisualElement)val20).style.marginRight = StyleLength.op_Implicit(4f); val18 = (VisualElement)(object)val20; } else { TextField val21 = new TextField(); ((VisualElement)val21).style.fontSize = StyleLength.op_Implicit(9f); ((VisualElement)val21).style.width = StyleLength.op_Implicit(80f); ((VisualElement)val21).style.marginRight = StyleLength.op_Implicit(4f); ((VisualElement)val21).style.backgroundColor = StyleColor.op_Implicit(new Color(0.1f, 0.1f, 0.1f)); ((VisualElement)val21).style.color = StyleColor.op_Implicit(new Color(0.95f, 0.95f, 0.95f)); TextField val22 = val21; VisualElement val23 = UQueryExtensions.Q<VisualElement>((VisualElement)(object)val22, (string)null, "unity-text-field__input"); if (val23 != null) { val23.style.backgroundColor = StyleColor.op_Implicit(new Color(0.1f, 0.1f, 0.1f)); val23.style.color = StyleColor.op_Implicit(new Color(0.95f, 0.95f, 0.95f)); } ((BaseField<string>)(object)val22).SetValueWithoutNotify(GetDefaultParameterValue(parameterInfo)); if (string.IsNullOrEmpty(((BaseField<string>)(object)val22).value)) { ((BaseField<string>)(object)val22).value = parameterInfo.Name ?? ""; } val18 = (VisualElement)(object)val22; } inputFields.Add(val18); val16.Add(val18); } Button val24 = new Button((Action)delegate { ExecuteCommand(command2, inputFields); }) { text = "▶ Execute" }; ((VisualElement)val24).style.width = StyleLength.op_Implicit(85f); ((VisualElement)val24).style.backgroundColor = StyleColor.op_Implicit(new Color(0.15f, 0.7f, 0.15f)); ((VisualElement)val24).style.color = StyleColor.op_Implicit(Color.white); ((VisualElement)val24).style.fontSize = StyleLength.op_Implicit(10f); ((VisualElement)val24).style.marginLeft = StyleLength.op_Implicit(4f); Button val25 = val24; val16.Add((VisualElement)(object)val25); val4.Add(val16); val2.Add(val4); _commandsContainer.Add(val2); } private DropdownField CreatePlayerDropdown() { //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0063: 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_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) //IL_0091: 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) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Expected O, but got Unknown List<string> list = new List<string> { "No players" }; if (PhotonNetwork.IsConnected && PhotonNetwork.PlayerList.Length != 0) { list = PhotonNetwork.PlayerList.Select((Player p) => p.NickName).ToList(); } DropdownField val = new DropdownField(list, 0, (Func<string, string>)null, (Func<string, string>)null); ((VisualElement)val).style.fontSize = StyleLength.op_Implicit(9f); ((VisualElement)val).style.backgroundColor = StyleColor.op_Implicit(new Color(0.1f, 0.1f, 0.1f)); ((VisualElement)val).style.color = StyleColor.op_Implicit(new Color(0.95f, 0.95f, 0.95f)); return val; } private DropdownField CreateEnumDropdown(Type enumType) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //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_002a: 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_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: 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_0073: Expected O, but got Unknown List<string> list = Enum.GetNames(enumType).ToList(); DropdownField val = new DropdownField(list, 0, (Func<string, string>)null, (Func<string, string>)null); ((VisualElement)val).style.fontSize = StyleLength.op_Implicit(9f); ((VisualElement)val).style.backgroundColor = StyleColor.op_Implicit(new Color(0.1f, 0.1f, 0.1f)); ((VisualElement)val).style.color = StyleColor.op_Implicit(new Color(0.95f, 0.95f, 0.95f)); return val; } private DropdownField CreateItemDropdown() { //IL_0051: 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_0061: Unknown result type (might be due to invalid IL or missing references) //IL_006b: 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_008f: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Expected O, but got Unknown List<ConsoleItem> allItems = ConsoleItem.GetAllItems(); List<string> list = new List<string>(); if (allItems.Count > 0) { list = allItems.Select((ConsoleItem item) => item.Name).ToList(); } else { list.Add("No items available"); } DropdownField val = new DropdownField(list, 0, (Func<string, string>)null, (Func<string, string>)null); ((VisualElement)val).style.fontSize = StyleLength.op_Implicit(9f); ((VisualElement)val).style.backgroundColor = StyleColor.op_Implicit(new Color(0.1f, 0.1f, 0.1f)); ((VisualElement)val).style.color = StyleColor.op_Implicit(new Color(0.95f, 0.95f, 0.95f)); return val; } private string GetDefaultParameterValue(ParameterInfo param) { if (param.HasDefaultValue && param.DefaultValue != null) { return param.DefaultValue.ToString() ?? ""; } return param.ParameterType.Name switch { "Single" => "1.0", "Double" => "1.0", "Int32" => "1", "String" => "", "Boolean" => "true", "UInt16" => "1", _ => "", }; } private void ExecuteCommand(ConsoleCommandInfo command, List<VisualElement> inputFields) { try { if (command.Method != null) { object[] array = new object[command.Parameters.Length]; for (int i = 0; i < command.Parameters.Length; i++) { ParameterInfo parameterInfo = command.Parameters[i]; VisualElement val = inputFields[i]; DropdownField val2 = (DropdownField)(object)((val is DropdownField) ? val : null); if (val2 != null) { if (parameterInfo.ParameterType == typeof(Player)) { string selectedPlayerName = ((BaseField<string>)(object)val2).value; Player val3 = ((IEnumerable<Player>)PhotonNetwork.PlayerList).FirstOrDefault((Func<Player, bool>)((Player p) => p.NickName == selectedPlayerName)); array[i] = val3; } else if (parameterInfo.ParameterType == typeof(ConsoleItem)) { string selectedItemName = ((BaseField<string>)(object)val2).value; List<ConsoleItem> allItems = ConsoleItem.GetAllItems(); ConsoleItem consoleItem = allItems.FirstOrDefault((ConsoleItem item) => item.Name == selectedItemName); array[i] = consoleItem ?? allItems.FirstOrDefault(); } else if (parameterInfo.ParameterType.IsEnum) { string value = ((BaseField<string>)(object)val2).value; array[i] = Enum.Parse(parameterInfo.ParameterType, value); } continue; } TextField val4 = (TextField)(object)((val is TextField) ? val : null); if (val4 != null) { string value2 = ((BaseField<string>)(object)val4).value; if (string.IsNullOrEmpty(value2) && parameterInfo.HasDefaultValue) { array[i] = parameterInfo.DefaultValue; } else { array[i] = ConvertParameter(value2, parameterInfo.ParameterType) ?? parameterInfo.DefaultValue; } } } command.Method.Invoke(null, array); } else { ExecuteCommandViaConsoleHandler(command, inputFields); } Plugin.Log.LogInfo((object)("Advanced Console UI: Executed command " + command.FullName)); Debug.Log((object)("Advanced Console UI: Executed " + command.FullName)); } catch (Exception ex) { Plugin.Log.LogError((object)("Advanced Console UI: Failed to execute " + command.FullName + ": " + ex.Message)); Debug.LogError((object)("Advanced Console UI: Failed to execute " + command.FullName + ": " + ex.Message)); } } private void ExecuteCommandViaConsoleHandler(ConsoleCommandInfo command, List<VisualElement> inputFields) { try { Type type = AppDomain.CurrentDomain.GetAssemblies().SelectMany(delegate(Assembly a) { try { return a.GetTypes(); } catch { return Array.Empty<Type>(); } }).FirstOrDefault((Type t) => t.Name == "ConsoleHandler"); if (type != null) { MethodInfo methodInfo = type.GetMethods(BindingFlags.Static | BindingFlags.Public).FirstOrDefault((MethodInfo m) => m.Name.Contains("Execute") && m.GetParameters().Length != 0); if (methodInfo != null) { string text = command.FullName; if (inputFields.Count > 0) { List<string> list = new List<string>(); foreach (VisualElement inputField in inputFields) { TextField val = (TextField)(object)((inputField is TextField) ? inputField : null); if (val != null && !string.IsNullOrEmpty(((BaseField<string>)(object)val).value)) { list.Add(((BaseField<string>)(object)val).value); continue; } DropdownField val2 = (DropdownField)(object)((inputField is DropdownField) ? inputField : null); if (val2 != null && !string.IsNullOrEmpty(((BaseField<string>)(object)val2).value)) { list.Add(((BaseField<string>)(object)val2).value); } } if (list.Count > 0) { text = text + " " + string.Join(" ", list); } } methodInfo.Invoke(null, new object[1] { text }); } else { Plugin.Log.LogWarning((object)("Could not find execute method in ConsoleHandler for command " + command.FullName)); } } else { Plugin.Log.LogWarning((object)("Could not find ConsoleHandler type for command " + command.FullName)); } } catch (Exception ex) { Plugin.Log.LogError((object)("Failed to execute command via ConsoleHandler: " + ex.Message)); } } private object? ConvertParameter(string input, Type targetType) { if (string.IsNullOrEmpty(input)) { if (!targetType.IsValueType) { return null; } return Activator.CreateInstance(targetType); } if (targetType == typeof(string)) { return input; } if (targetType == typeof(int)) { return int.Parse(input); } if (targetType == typeof(float)) { return float.Parse(input); } if (targetType == typeof(double)) { return double.Parse(input); } if (targetType == typeof(bool)) { return bool.Parse(input); } if (targetType == typeof(ushort)) { return ushort.Parse(input); } return Convert.ChangeType(input, targetType); } } public static class ConsoleIntegration { public static void RegisterAdvancedConsolePage() { try { DebugUIHandler val = Object.FindFirstObjectByType<DebugUIHandler>(); if ((Object)(object)val != (Object)null) { val.RegisterPage("Advanced Console", (Func<DebugPage>)(() => (DebugPage)(object)new AdvancedConsolePage())); val.RegisterPage("Server Info", (Func<DebugPage>)(() => (DebugPage)(object)new ServerInfoPage())); val.RegisterPage("Map Selection", (Func<DebugPage>)(() => (DebugPage)(object)new MapSelectionPage())); Plugin.Log.LogInfo((object)"Advanced Console, Server Info, and Map Selection pages registered successfully"); } else { Plugin.Log.LogWarning((object)"DebugUIHandler not found - cannot register Advanced Console pages"); } } catch (Exception ex) { Plugin.Log.LogError((object)("Failed to register Advanced Console pages: " + ex.Message)); } } } public static class EnvironmentCommands { [ConsoleCommand] [MasterClientOnly(null)] public static void SetTime(float time) { try { MonoBehaviour obj = Object.FindFirstObjectByType<MonoBehaviour>(); MonoBehaviour val = ((obj != null) ? ((Component)obj).GetComponent<MonoBehaviour>() : null); Debug.Log((object)$"settime: attempting to set time to {time}"); Plugin.Log.LogInfo((object)$"Attempted to set time to: {time}"); } catch (Exception ex) { Debug.LogWarning((object)("settime: failed to set time - " + ex.Message)); } } [ConsoleCommand] [MasterClientOnly(null)] public static void SetGravity(float gravity = -9.81f) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) Physics.gravity = new Vector3(0f, gravity, 0f); try { Character localCharacter = Character.localCharacter; if ((Object)(object)localCharacter != (Object)null) { ((MonoBehaviourPun)localCharacter).photonView.RPC("SyncGravityRPC", (RpcTarget)1, new object[1] { gravity }); } } catch (Exception) { } Debug.Log((object)$"setgravity: gravity set to {gravity}"); Plugin.Log.LogInfo((object)$"Gravity set to: {gravity}"); } [ConsoleCommand] public static void GetGravity() { //IL_0000: 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_0006: 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_003c: Unknown result type (might be due to invalid IL or missing references) Vector3 gravity = Physics.gravity; float num = Mathf.Abs(gravity.y); Debug.Log((object)$"getgravity: Current gravity Y: {gravity.y:F2} (magnitude: {num:F2})"); Plugin.Log.LogInfo((object)$"Current gravity: {gravity}"); } [ConsoleCommand] public static void ToggleFog() { RenderSettings.fog = !RenderSettings.fog; Debug.Log((object)("togglefog: fog is now " + (RenderSettings.fog ? "ON" : "OFF"))); Plugin.Log.LogInfo((object)("Fog toggled: " + (RenderSettings.fog ? "ON" : "OFF"))); } [ConsoleCommand] public static void SetFogDensity(float density = 0.01f) { RenderSettings.fogDensity = density; Debug.Log((object)$"setfogdensity: fog density set to {density}"); Plugin.Log.LogInfo((object)$"Fog density set to: {density}"); } [ConsoleCommand] public static void SetFogColor(float r = 0.5f, float g = 0.5f, float b = 0.5f) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) RenderSettings.fogColor = new Color(r, g, b, 1f); Debug.Log((object)$"setfogcolor: fog color set to R:{r} G:{g} B:{b}"); Plugin.Log.LogInfo((object)$"Fog color set to R:{r} G:{g} B:{b}"); } [ConsoleCommand] public static void GodModeEnvironment() { try { IEnumerable<MonoBehaviour> enumerable = from c in Object.FindObjectsByType<MonoBehaviour>((FindObjectsSortMode)0) where ((object)c).GetType().Name.Contains("Damage") || ((object)c).GetType().Name.Contains("Harm") || ((object)c).GetType().Name.Contains("Kill") select c; int num = 0; foreach (MonoBehaviour item in enumerable) { ((Behaviour)item).enabled = false; num++; } Debug.Log((object)$"godmodeenv: disabled {num} damage components"); Plugin.Log.LogInfo((object)$"Disabled {num} environmental damage components"); } catch (Exception ex) { Debug.LogWarning((object)("godmodeenv: failed - " + ex.Message)); } } [ConsoleCommand] [MasterClientOnly(null)] public static void ExplodeAt(Player target, float force = 1000f) { //IL_00c3: 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_0066: Unknown result type (might be due to invalid IL or missing references) //IL_008a: 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_00a6: Unknown result type (might be due to invalid IL or missing references) Player target2 = target; if (target2 == null) { Debug.LogWarning((object)"explode: player not found!"); return; } Character val = ((IEnumerable<Character>)Character.AllCharacters).FirstOrDefault((Func<Character, bool>)((Character c) => ((object)((MonoBehaviourPun)c).photonView.Owner)?.Equals((object?)target2) ?? false)); if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)("explode: no Character for '" + target2.NickName + "'")); return; } Vector3 center = val.Center; try { Character localCharacter = Character.localCharacter; if ((Object)(object)localCharacter != (Object)null) { ((MonoBehaviourPun)localCharacter).photonView.RPC("RPCA_Explosion", (RpcTarget)0, new object[4] { center.x, center.y, center.z, force }); } } catch { CreateExplosionEffect(center, force); } Debug.Log((object)$"explode: created explosion at '{target2.NickName}' position with force {force}"); Plugin.Log.LogInfo((object)$"Created explosion at {target2.NickName} position with force {force}"); } private static void CreateExplosionEffect(Vector3 explosionPos, float force) { //IL_0016: 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_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_003b: 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_0044: 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_0057: 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) Rigidbody val = default(Rigidbody); foreach (Character allCharacter in Character.AllCharacters) { float num = Vector3.Distance(allCharacter.Center, explosionPos); if (num < 10f && ((Component)allCharacter).TryGetComponent<Rigidbody>(ref val)) { Vector3 val2 = allCharacter.Center - explosionPos; Vector3 normalized = ((Vector3)(ref val2)).normalized; float num2 = force / (num + 1f); val.AddForce(normalized * num2, (ForceMode)1); } } } [ConsoleCommand] [MasterClientOnly(null)] public static void Lightning() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: 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_0029: Unknown result type (might be due to invalid IL or missing references) try { Character localCharacter = Character.localCha