using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETFramework,Version=v4.7.1", FrameworkDisplayName = ".NET Framework 4.7.1")] [assembly: AssemblyCompany("GWYFUnleashed")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("GWYFUnleashed")] [assembly: AssemblyTitle("GWYFUnleashed")] [assembly: AssemblyVersion("1.0.0.0")] namespace GWYFUnleashed; [BepInPlugin("com.yourname.gwyfunleashed", "GWYFUnleashed", "1.0.0")] [BepInProcess("Gamble With Your Friends.exe")] public class Plugin : BaseUnityPlugin { internal static ManualLogSource Log; internal static ConfigEntry CfgDayDuration; internal static ConfigEntry CfgAddMoney; internal static ConfigEntry CfgAddTime; internal static ConfigEntry CfgAddTickets; internal static ConfigEntry CfgMenuKey; private Harmony _harmony; private void Awake() { //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Expected O, but got Unknown Log = ((BaseUnityPlugin)this).Logger; CfgDayDuration = ((BaseUnityPlugin)this).Config.Bind("Timer", "DayDurationSeconds", 3600f, "Day length in seconds."); CfgAddMoney = ((BaseUnityPlugin)this).Config.Bind("Menu", "DefaultAddMoney", 100000f, "Default $ per button press."); CfgAddTime = ((BaseUnityPlugin)this).Config.Bind("Menu", "DefaultAddSeconds", 300f, "Default seconds per button press."); CfgAddTickets = ((BaseUnityPlugin)this).Config.Bind("Menu", "DefaultAddTickets", 100f, "Default tickets per button press."); CfgMenuKey = ((BaseUnityPlugin)this).Config.Bind("Menu", "ToggleKey", (KeyCode)277, "Key to open/close the menu."); _harmony = new Harmony("com.yourname.gwyfunleashed"); TryPatch("StartDay", (HarmonyPatchType)1, "StartDay_Pre"); TryPatch("ServerUpdateMinMaxBetText", (HarmonyPatchType)1, "BetLimits_Pre"); TryPatch("RpcUpdateMinMaxBetText", (HarmonyPatchType)1, "BetLimits_Pre"); TryPatch("get_MaxBet", (HarmonyPatchType)2, "MaxBet_Post"); TryPatch("SetButtons", (HarmonyPatchType)2, "EnableAllButtons_Post"); TryPatch("RpcEnableAllButtons", (HarmonyPatchType)2, "EnableAllButtons_Post"); Log.LogInfo((object)"[GWYFUnleashed] Loaded — press INSERT to open menu."); } private void TryPatch(string methodName, HarmonyPatchType type, string patchMethod) { //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Expected O, but got Unknown //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Invalid comparison between Unknown and I4 Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly asm in assemblies) { foreach (Type item in SafeGetTypes(asm)) { MethodInfo method = item.GetMethod(methodName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); if (method == null) { continue; } try { MethodInfo method2 = typeof(Patches).GetMethod(patchMethod, BindingFlags.Static | BindingFlags.Public); HarmonyMethod val = new HarmonyMethod(method2); if ((int)type == 1) { _harmony.Patch((MethodBase)method, val, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } else { _harmony.Patch((MethodBase)method, (HarmonyMethod)null, val, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } Log.LogInfo((object)("[GWYFUnleashed] Patched " + item.Name + "." + methodName)); } catch (Exception ex) { Log.LogWarning((object)("[GWYFUnleashed] Failed " + item.Name + "." + methodName + ": " + ex.Message)); } } } } private void Start() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown GameObject val = new GameObject("GWYFUnleashed_GUI"); Object.DontDestroyOnLoad((Object)(object)val); val.AddComponent(); } private void OnDestroy() { Harmony harmony = _harmony; if (harmony != null) { harmony.UnpatchSelf(); } } internal static IEnumerable SafeGetTypes(Assembly asm) { Type[] types; try { types = asm.GetTypes(); } catch (ReflectionTypeLoadException ex) { ReflectionTypeLoadException e = ex; types = e.Types; } if (types == null) { yield break; } Type[] array = types; foreach (Type t in array) { if (t != null) { yield return t; } } } } internal static class Patches { public static void StartDay_Pre(object __instance) { FieldInfo field = __instance.GetType().GetField("_gs", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { object value = field.GetValue(__instance); if (value != null) { FieldInfo field2 = value.GetType().GetField("dayDuration", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field2 != null) { field2.SetValue(value, Plugin.CfgDayDuration.Value); return; } } } FieldInfo field3 = __instance.GetType().GetField("dayDuration", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field3 != null) { field3.SetValue(__instance, Plugin.CfgDayDuration.Value); } } public static void BetLimits_Pre(object[] __args) { if (__args != null && __args.Length >= 2) { if (__args[0] is long) { __args[0] = 0L; } if (__args[1] is long) { __args[1] = long.MaxValue; } } } public static void MaxBet_Post(object __instance, ref long __result) { FieldInfo field = __instance.GetType().GetField("baseMaxBet", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { try { field.SetValue(__instance, Convert.ChangeType(long.MaxValue, field.FieldType)); } catch { } } __result = long.MaxValue; } public static void EnableAllButtons_Post(object __instance) { try { Type type = __instance.GetType(); FieldInfo field = type.GetField("_isLocked", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { field.SetValue(__instance, false); } FieldInfo field2 = type.GetField("buttonList", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (!(field2 != null) || !(field2.GetValue(__instance) is IList list)) { return; } foreach (object item in list) { if (item == null) { continue; } PropertyInfo property = item.GetType().GetProperty("IsInteractable", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if ((object)property != null && property.CanWrite) { try { property.SetValue(item, true); } catch { } } MethodInfo method = item.GetType().GetMethod("set_IsInteractable", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method != null) { try { method.Invoke(item, new object[1] { true }); } catch { } } } } catch { } } } internal class Overlay : MonoBehaviour { private bool _vis; private Rect _win = new Rect(16f, 16f, 310f, 560f); private Vector2 _scroll = Vector2.zero; private string _moneyIn = ""; private string _timeIn = ""; private string _ticketIn = ""; private string _floorIn = "1"; private string _status = ""; private float _statusT; private object _gameManager; private object _moneyManager; private object _elevatorManager; private object _newConsole; private object _cosmeticsUnlockManager; private MethodInfo _miSetNetworkTimer; private FieldInfo _fi_timer; private FieldInfo _fiBalance; private MethodInfo _miAddBalance; private FieldInfo _fiTicketBalance; private MethodInfo _miAddTicket; private MethodInfo _miRemoveTicket; private FieldInfo _fiIsLocked; private FieldInfo _fiCurrentFloor; private MethodInfo _miRpcSetActiveFloorOnly; private MethodInfo _miRpcEnableAllButtons; private MethodInfo _miServerForceTeleport; private MethodInfo _miCmdEnableAllFloors; private MethodInfo _miUnlockAllCosmetics; private MethodInfo _miUnlockCosmeticDirect; private MethodInfo _miGetAllCosmetics; private void Update() { if (_statusT > 0f) { _statusT -= Time.unscaledDeltaTime; } if (_gameManager == null || _moneyManager == null || _elevatorManager == null || _newConsole == null || _cosmeticsUnlockManager == null) { TryCacheReferences(); } } private void OnGUI() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Invalid comparison between Unknown and I4 //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001e: 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_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Expected O, but got Unknown //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) Event current = Event.current; if (current != null && (int)current.type == 4 && current.keyCode == Plugin.CfgMenuKey.Value) { _vis = !_vis; current.Use(); } if (_vis) { _win = GUI.Window(48879, _win, new WindowFunction(DrawWindow), " GWYFUnleashed (drag me)"); } } private void TryCacheReferences() { Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly asm in assemblies) { foreach (Type item in Plugin.SafeGetTypes(asm)) { if (_gameManager == null && item.Name == "GameManager") { Object val = Object.FindObjectOfType(item); if (val != (Object)null) { _gameManager = val; _miSetNetworkTimer = item.GetMethod("set_Network_timer", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); _fi_timer = item.GetField("_timer", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } } if (_moneyManager == null && item.Name == "MoneyManager") { Object val2 = Object.FindObjectOfType(item); if (val2 != (Object)null) { _moneyManager = val2; _fiBalance = item.GetField("balance", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); _fiTicketBalance = item.GetField("ticketBalance", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); _miAddTicket = item.GetMethod("AddTicket", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); _miRemoveTicket = item.GetMethod("RemoveTicket", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); MethodInfo[] methods = item.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); foreach (MethodInfo methodInfo in methods) { if (methodInfo.Name == "AddBalance" && (_miAddBalance == null || methodInfo.GetParameters().Length < _miAddBalance.GetParameters().Length)) { _miAddBalance = methodInfo; } } } } if (_elevatorManager == null && item.Name == "ElevatorManager") { Object val3 = Object.FindObjectOfType(item); if (val3 != (Object)null) { _elevatorManager = val3; _fiCurrentFloor = item.GetField("_currentFloorIndex", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); _fiIsLocked = item.GetField("_isLocked", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); _miRpcSetActiveFloorOnly = item.GetMethod("RpcSetActiveFloorOnly", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); _miRpcEnableAllButtons = item.GetMethod("RpcEnableAllButtons", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); _miServerForceTeleport = item.GetMethod("ServerForceTeleportPlayers", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } } if (_newConsole == null && item.Name == "NewConsole") { Object val4 = Object.FindObjectOfType(item); if (val4 != (Object)null) { _newConsole = val4; _miCmdEnableAllFloors = item.GetMethod("CmdEnableAllFloors", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); _miUnlockAllCosmetics = item.GetMethod("UnlockAllCosmetics", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } } if (_cosmeticsUnlockManager == null && item.Name == "CosmeticsUnlockManager") { Object val5 = Object.FindObjectOfType(item); if (val5 != (Object)null) { _cosmeticsUnlockManager = val5; _miUnlockCosmeticDirect = item.GetMethod("UnlockCosmetic", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); } } if (_miGetAllCosmetics == null && item.Name == "CosmeticDataManager") { _miGetAllCosmetics = item.GetMethod("GetAllCosmetics", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); } } } } private void DrawWindow(int id) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0536: Unknown result type (might be due to invalid IL or missing references) //IL_053b: Unknown result type (might be due to invalid IL or missing references) //IL_055f: Unknown result type (might be due to invalid IL or missing references) //IL_0558: Unknown result type (might be due to invalid IL or missing references) //IL_058f: Unknown result type (might be due to invalid IL or missing references) _scroll = GUILayout.BeginScrollView(_scroll, (GUILayoutOption[])(object)new GUILayoutOption[2] { GUILayout.Width(298f), GUILayout.Height(520f) }); GUILayout.Space(4f); GUILayout.Label("=== COSMETICS ===", Array.Empty()); if (GUILayout.Button("Unlock All Cosmetics", Array.Empty())) { UnlockAllCosmetics(); } GUILayout.Space(6f); GUILayout.Label("=== MONEY ===", Array.Empty()); GUILayout.BeginHorizontal(Array.Empty()); GUILayout.Label("Amount $", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(70f) }); _moneyIn = GUILayout.TextField((_moneyIn == "") ? Plugin.CfgAddMoney.Value.ToString("F0") : _moneyIn, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(130f) }); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(Array.Empty()); if (GUILayout.Button("+ Add", Array.Empty())) { GrantMoney(ParseMoney()); } if (GUILayout.Button("- Remove", Array.Empty())) { GrantMoney(-ParseMoney()); } GUILayout.EndHorizontal(); if (GUILayout.Button("Add $1,000,000", Array.Empty())) { GrantMoney(1000000L); } if (GUILayout.Button("Add $1,000,000,000", Array.Empty())) { GrantMoney(1000000000L); } GUILayout.Space(6f); GUILayout.Label("=== TICKETS ===", Array.Empty()); GUILayout.BeginHorizontal(Array.Empty()); GUILayout.Label("Amount", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(70f) }); _ticketIn = GUILayout.TextField((_ticketIn == "") ? Plugin.CfgAddTickets.Value.ToString("F0") : _ticketIn, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(130f) }); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(Array.Empty()); if (GUILayout.Button("+ Add", Array.Empty())) { GrantTickets(ParseTickets()); } if (GUILayout.Button("- Remove", Array.Empty())) { GrantTickets(-ParseTickets()); } GUILayout.EndHorizontal(); if (GUILayout.Button("Add 1,000 Tickets", Array.Empty())) { GrantTickets(1000L); } if (GUILayout.Button("Add 10,000 Tickets", Array.Empty())) { GrantTickets(10000L); } GUILayout.Space(6f); GUILayout.Label("=== TIMER ===", Array.Empty()); GUILayout.BeginHorizontal(Array.Empty()); GUILayout.Label("Seconds", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(70f) }); _timeIn = GUILayout.TextField((_timeIn == "") ? Plugin.CfgAddTime.Value.ToString("F0") : _timeIn, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(130f) }); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(Array.Empty()); if (GUILayout.Button("- Remove Time", Array.Empty())) { SetTimer(ParseTime(), relative: true); } if (GUILayout.Button("+ Add Time", Array.Empty())) { SetTimer(0f - ParseTime(), relative: true); } GUILayout.EndHorizontal(); if (GUILayout.Button("Add 10 Minutes", Array.Empty())) { SetTimer(-600f, relative: true); } if (GUILayout.Button("Reset to 1 Hour", Array.Empty())) { SetTimer(3600f, relative: false); } GUILayout.Space(6f); GUILayout.Label("=== FLOOR ===", Array.Empty()); GUILayout.BeginHorizontal(Array.Empty()); GUILayout.Label("Floor (1-4)", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(70f) }); _floorIn = GUILayout.TextField(_floorIn, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(60f) }); GUILayout.EndHorizontal(); if (GUILayout.Button("Go To Floor", Array.Empty())) { TryFloor(); } GUILayout.BeginHorizontal(Array.Empty()); if (GUILayout.Button("F1", Array.Empty())) { DoFloor(0); } if (GUILayout.Button("F2", Array.Empty())) { DoFloor(1); } if (GUILayout.Button("F3", Array.Empty())) { DoFloor(2); } if (GUILayout.Button("F4", Array.Empty())) { DoFloor(3); } GUILayout.EndHorizontal(); if (GUILayout.Button("Unlock All Floors", Array.Empty())) { UnlockAllFloors(); } GUILayout.Space(8f); Color color = GUI.color; GUI.color = (Color)((_statusT > 0f) ? Color.cyan : new Color(0.5f, 0.5f, 0.5f)); GUILayout.Label((_statusT > 0f) ? _status : "INSERT = open/close | scroll for all options", Array.Empty()); GUI.color = color; GUILayout.EndScrollView(); GUI.DragWindow(); } private long ParseMoney() { float result; return float.TryParse(_moneyIn, out result) ? ((long)result) : ((long)Plugin.CfgAddMoney.Value); } private float ParseTime() { float result; return float.TryParse(_timeIn, out result) ? result : Plugin.CfgAddTime.Value; } private long ParseTickets() { float result; return float.TryParse(_ticketIn, out result) ? ((long)result) : ((long)Plugin.CfgAddTickets.Value); } private void GrantMoney(long amount) { if (_moneyManager == null) { Msg("Load into a game first."); return; } try { if (_miAddBalance != null) { ParameterInfo[] parameters = _miAddBalance.GetParameters(); object[] array = new object[parameters.Length]; for (int i = 0; i < parameters.Length; i++) { array[i] = ((i == 0) ? Convert.ChangeType(amount, parameters[i].ParameterType) : (parameters[i].ParameterType.IsValueType ? Activator.CreateInstance(parameters[i].ParameterType) : null)); } _miAddBalance.Invoke(_moneyManager, array); } else if (_fiBalance != null) { long num = Convert.ToInt64(_fiBalance.GetValue(_moneyManager)); _fiBalance.SetValue(_moneyManager, Math.Max(0L, num + amount)); } long num2 = ((_fiBalance != null) ? Convert.ToInt64(_fiBalance.GetValue(_moneyManager)) : 0); Msg($"Balance: {num2:N0}"); } catch (Exception ex) { try { if (_fiBalance != null) { long num3 = Convert.ToInt64(_fiBalance.GetValue(_moneyManager)); _fiBalance.SetValue(_moneyManager, Math.Max(0L, num3 + amount)); Msg($"Balance: {Convert.ToInt64(_fiBalance.GetValue(_moneyManager)):N0}"); } } catch { Msg("Money error: " + ex.Message); } } } private void GrantTickets(long amount) { if (_moneyManager == null) { Msg("Load into a game first."); return; } try { MethodInfo methodInfo = ((amount >= 0) ? _miAddTicket : _miRemoveTicket); long num = Math.Abs(amount); if (methodInfo != null) { ParameterInfo[] parameters = methodInfo.GetParameters(); object[] array = new object[parameters.Length]; for (int i = 0; i < parameters.Length; i++) { array[i] = ((i == 0) ? Convert.ChangeType(num, parameters[i].ParameterType) : (parameters[i].ParameterType.IsValueType ? Activator.CreateInstance(parameters[i].ParameterType) : null)); } methodInfo.Invoke(_moneyManager, array); } else if (_fiTicketBalance != null) { long num2 = Convert.ToInt64(_fiTicketBalance.GetValue(_moneyManager)); _fiTicketBalance.SetValue(_moneyManager, Math.Max(0L, num2 + amount)); } long num3 = ((_fiTicketBalance != null) ? Convert.ToInt64(_fiTicketBalance.GetValue(_moneyManager)) : 0); Msg($"Tickets: {num3:N0}"); } catch (Exception ex) { Msg("Ticket error: " + ex.Message); } } private void SetTimer(float value, bool relative) { if (_gameManager == null) { Msg("Load into a game first."); return; } try { float num = ((_fi_timer != null) ? ((float)_fi_timer.GetValue(_gameManager)) : 0f); float num2 = Math.Max(0f, relative ? (num + value) : value); if (_miSetNetworkTimer != null) { _miSetNetworkTimer.Invoke(_gameManager, new object[1] { num2 }); } else if (_fi_timer != null) { _fi_timer.SetValue(_gameManager, num2); } Msg($"Timer = {TimeSpan.FromSeconds(num2):mm\\:ss}"); } catch (Exception ex) { Msg("Timer error: " + ex.Message); } } private void TryFloor() { if (int.TryParse(_floorIn, out var result)) { DoFloor(Mathf.Clamp(result - 1, 0, 3)); } else { Msg("Enter a number 1-4."); } } private void DoFloor(int idx) { if (_elevatorManager == null) { Msg("Load into a game first."); return; } try { if (_fiIsLocked != null) { _fiIsLocked.SetValue(_elevatorManager, false); } if (_miServerForceTeleport != null) { _miServerForceTeleport.Invoke(_elevatorManager, new object[1] { idx }); Msg($"Teleporting to floor {idx + 1}"); return; } if (_fiCurrentFloor != null) { _fiCurrentFloor.SetValue(_elevatorManager, idx); } if (_miRpcSetActiveFloorOnly != null) { _miRpcSetActiveFloorOnly.Invoke(_elevatorManager, new object[1] { idx }); } Msg($"Floor {idx + 1}"); } catch (Exception ex) { Msg("Floor error: " + ex.Message); } } private void UnlockAllFloors() { if (_newConsole != null && _miCmdEnableAllFloors != null) { try { _miCmdEnableAllFloors.Invoke(_newConsole, null); Msg("All floors unlocked!"); return; } catch (Exception ex) { Plugin.Log.LogWarning((object)("[GWYFUnleashed] CmdEnableAllFloors: " + ex.Message)); } } if (_elevatorManager != null) { if (_fiIsLocked != null) { _fiIsLocked.SetValue(_elevatorManager, false); } if (_miRpcEnableAllButtons != null) { try { _miRpcEnableAllButtons.Invoke(_elevatorManager, null); } catch { } } Msg("Elevator unlocked."); } else { Msg("Load into a game first."); } } private void UnlockAllCosmetics() { if (_newConsole != null && _miUnlockAllCosmetics != null) { try { _miUnlockAllCosmetics.Invoke(_newConsole, null); Msg("All cosmetics unlocked!"); return; } catch (Exception ex) { Plugin.Log.LogWarning((object)("[GWYFUnleashed] UnlockAllCosmetics: " + ex.Message)); } } if (_cosmeticsUnlockManager != null && _miUnlockCosmeticDirect != null && _miGetAllCosmetics != null) { try { object obj = (_miGetAllCosmetics.IsStatic ? _miGetAllCosmetics.Invoke(null, null) : _miGetAllCosmetics.Invoke(_cosmeticsUnlockManager, null)); if (obj is IEnumerable enumerable) { int num = 0; foreach (object item in enumerable) { if (item == null) { continue; } FieldInfo field = item.GetType().GetField("cosmeticId", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (!(field == null)) { try { _miUnlockCosmeticDirect.Invoke(_cosmeticsUnlockManager, new object[1] { field.GetValue(item) }); num++; } catch { } } } Msg($"Unlocked {num} cosmetics!"); return; } } catch (Exception ex2) { Plugin.Log.LogWarning((object)("[GWYFUnleashed] Cosmetic fallback: " + ex2.Message)); } } Msg("Try in the main menu or lobby."); } private void Msg(string s) { _status = s; _statusT = 3f; Plugin.Log.LogInfo((object)("[GWYFUnleashed] " + s)); } } internal static class PluginInfo { public const string PLUGIN_GUID = "com.yourname.gwyfunleashed"; public const string PLUGIN_NAME = "GWYFUnleashed"; public const string PLUGIN_VERSION = "1.0.0"; }