using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Mirror;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyCompany("GambleAdminMenu")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("GambleAdminMenu")]
[assembly: AssemblyTitle("GambleAdminMenu")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.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.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace GambleAdminMenu
{
public class AdminMenu : MonoBehaviour
{
public struct PlayerInfo
{
public ulong SteamId;
public string Name;
public NetworkIdentity Identity;
public PlayerInfo(PlayerReferences p)
{
SteamId = p.profile?.steamId ?? 0;
Name = (string.IsNullOrEmpty(p.profile?.playerName) ? "Player" : p.profile.playerName);
Identity = p.identity;
}
}
private bool _open;
private Rect _winRect = new Rect(30f, 30f, 590f, 30f);
private Vector2 _playerScroll;
private Vector2 _banScroll;
private string _timeoutInput = "30";
private float _timeoutSecs = 30f;
private string _suspendInput = "5";
private float _suspendMins = 5f;
private readonly HashSet<ulong> _banned = new HashSet<ulong>();
private readonly Dictionary<ulong, string> _bannedNames = new Dictionary<ulong, string>();
private readonly Dictionary<ulong, DateTime> _suspendExpiry = new Dictionary<ulong, DateTime>();
private readonly HashSet<ulong> _frozen = new HashSet<ulong>();
private readonly HashSet<ulong> _muted = new HashSet<ulong>();
private List<PlayerInfo> _cachedPlayers = new List<PlayerInfo>();
private float _playerCacheAge = -999f;
private const float PLAYER_CACHE_TTL = 3f;
private NetworkBehaviour[] _nbCache;
private float _nbCacheAge = -999f;
private const float NB_CACHE_TTL = 5f;
private GUIStyle _sWin;
private GUIStyle _sHeader;
private GUIStyle _sLabel;
private GUIStyle _sDim;
private GUIStyle _sBtn;
private GUIStyle _sDanger;
private GUIStyle _sGreen;
private GUIStyle _sOrange;
private GUIStyle _sInput;
private bool _stylesReady;
private const int VK_F9 = 120;
private float _keyCooldown;
private CursorLockMode _savedLock;
private bool _savedCursorVisible;
private static readonly string[] _kickNames = new string[13]
{
"CmdKickPlayer", "CmdKick", "CmdBanPlayer", "CmdDisconnect", "CmdDisconnectPlayer", "CmdRemovePlayer", "CmdBootPlayer", "CmdForceDisconnect", "CmdKickUser", "CmdRemoveUser",
"CmdKickConnection", "CmdForceLeave", "CmdKickAndBan"
};
[DllImport("user32.dll")]
private static extern short GetAsyncKeyState(int vk);
private void Awake()
{
((MonoBehaviour)this).StartCoroutine(EnforcerLoop());
}
private void Update()
{
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: 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)
try
{
_keyCooldown -= Time.unscaledDeltaTime;
if (!(_keyCooldown > 0f) && ((uint)GetAsyncKeyState(120) & 0x8000u) != 0)
{
_keyCooldown = 0.3f;
_open = !_open;
if (_open)
{
_savedLock = Cursor.lockState;
_savedCursorVisible = Cursor.visible;
Cursor.lockState = (CursorLockMode)0;
Cursor.visible = true;
}
else
{
Cursor.lockState = _savedLock;
Cursor.visible = _savedCursorVisible;
}
}
}
catch
{
}
}
private void OnGUI()
{
//IL_0021: 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)
//IL_009d: 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_00da: Expected O, but got Unknown
//IL_00d5: 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)
try
{
float num = 80f;
float num2 = 22f;
if (GUI.Button(new Rect((float)Screen.width - num - 4f, 4f, num, num2), _open ? "▲ ADMIN" : "▼ ADMIN"))
{
_open = !_open;
if (_open)
{
Cursor.lockState = (CursorLockMode)0;
Cursor.visible = true;
}
else
{
Cursor.lockState = _savedLock;
Cursor.visible = _savedCursorVisible;
}
}
if (_open)
{
EnsureStyles();
if (_sWin != null)
{
_winRect = GUILayout.Window(19777, _winRect, new WindowFunction(DrawWindow), " GAMBLE ADMIN MENU — F9", _sWin, (GUILayoutOption[])(object)new GUILayoutOption[2]
{
GUILayout.Width(590f),
GUILayout.ExpandHeight(true)
});
}
}
}
catch
{
}
}
private void DrawWindow(int _)
{
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_0375: Unknown result type (might be due to invalid IL or missing references)
//IL_038a: Unknown result type (might be due to invalid IL or missing references)
//IL_038f: Unknown result type (might be due to invalid IL or missing references)
//IL_064c: Unknown result type (might be due to invalid IL or missing references)
//IL_0661: Unknown result type (might be due to invalid IL or missing references)
//IL_0666: Unknown result type (might be due to invalid IL or missing references)
//IL_09fa: Unknown result type (might be due to invalid IL or missing references)
try
{
GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
GUILayout.FlexibleSpace();
if (GUILayout.Button("CLOSE", _sBtn, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(55f) }))
{
ToggleMenu(open: false);
}
GUILayout.EndHorizontal();
if (!NetworkServer.active)
{
GUILayout.Space(20f);
GUILayout.Label(" Host a lobby to access admin controls.", _sDim, Array.Empty<GUILayoutOption>());
GUILayout.Space(20f);
GUI.DragWindow(new Rect(0f, 0f, 10000f, 22f));
return;
}
Separator();
GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
GUILayout.Label("Timeout:", _sLabel, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(60f) });
_timeoutInput = GUILayout.TextField(_timeoutInput, 5, _sInput, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(44f) });
GUILayout.Label("s", _sLabel, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(14f) });
GUILayout.Space(18f);
GUILayout.Label("Suspend:", _sLabel, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(60f) });
_suspendInput = GUILayout.TextField(_suspendInput, 5, _sInput, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(44f) });
GUILayout.Label("min", _sLabel, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(26f) });
GUILayout.EndHorizontal();
if (float.TryParse(_timeoutInput, out var result) && result > 0f)
{
_timeoutSecs = result;
}
if (float.TryParse(_suspendInput, out var result2) && result2 > 0f)
{
_suspendMins = result2;
}
Separator();
if (Time.realtimeSinceStartup - _playerCacheAge > 3f)
{
RefreshPlayers();
}
List<PlayerInfo> cachedPlayers = _cachedPlayers;
GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
GUILayout.Label($"CONNECTED PLAYERS ({cachedPlayers.Count})", _sHeader, Array.Empty<GUILayoutOption>());
GUILayout.FlexibleSpace();
if (GUILayout.Button("REFRESH", _sBtn, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(64f) }))
{
RefreshPlayers();
}
if (cachedPlayers.Count > 0)
{
GUILayout.Space(4f);
if (GUILayout.Button("KICK ALL", _sDanger, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(68f) }))
{
foreach (PlayerInfo item in cachedPlayers)
{
DoKick(item);
}
}
GUILayout.Space(4f);
if (GUILayout.Button("FREEZE ALL", _sOrange, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(76f) }))
{
foreach (PlayerInfo item2 in cachedPlayers)
{
DoFreeze(item2);
}
}
}
GUILayout.EndHorizontal();
GUILayout.Space(4f);
if (cachedPlayers.Count == 0)
{
GUILayout.Label(" No other players in the lobby.", _sDim, Array.Empty<GUILayoutOption>());
}
else
{
float num = Mathf.Min((float)cachedPlayers.Count * 30f + 8f, 210f);
_playerScroll = GUILayout.BeginScrollView(_playerScroll, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(num) });
foreach (PlayerInfo item3 in cachedPlayers)
{
bool flag = _frozen.Contains(item3.SteamId);
bool flag2 = _muted.Contains(item3.SteamId);
string obj = (_banned.Contains(item3.SteamId) ? ("[BAN] " + item3.Name) : (_suspendExpiry.ContainsKey(item3.SteamId) ? ("[SUS] " + item3.Name) : item3.Name));
GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
GUILayout.Label(obj, _sLabel, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(130f) });
if (GUILayout.Button("KICK", _sDanger, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(44f) }))
{
DoKick(item3);
}
if (GUILayout.Button("BAN", _sDanger, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(40f) }))
{
DoBan(item3);
}
if (GUILayout.Button("TIMEOUT", _sBtn, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(64f) }))
{
DoTimeout(item3);
}
if (GUILayout.Button("SUSPEND", _sBtn, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(64f) }))
{
DoSuspend(item3);
}
if (GUILayout.Button(flag ? "UNFREEZE" : "FREEZE", flag ? _sGreen : _sOrange, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(72f) }))
{
if (flag)
{
DoUnfreeze(item3);
}
else
{
DoFreeze(item3);
}
}
if (GUILayout.Button(flag2 ? "UNMUTE" : "MUTE", flag2 ? _sGreen : _sBtn, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(58f) }))
{
if (flag2)
{
DoUnmute(item3);
}
else
{
DoMute(item3);
}
}
GUILayout.EndHorizontal();
}
GUILayout.EndScrollView();
}
if (_banned.Count > 0 || _suspendExpiry.Count > 0)
{
Separator();
GUILayout.Label("BANS / SUSPENSIONS", _sHeader, Array.Empty<GUILayoutOption>());
GUILayout.Space(4f);
ulong num2 = 0uL;
List<ulong> list = new List<ulong>();
float num3 = Mathf.Min((float)(_banned.Count + _suspendExpiry.Count) * 26f + 8f, 130f);
_banScroll = GUILayout.BeginScrollView(_banScroll, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Height(num3) });
foreach (ulong item4 in _banned)
{
if (!_suspendExpiry.ContainsKey(item4))
{
string value;
string text = (_bannedNames.TryGetValue(item4, out value) ? value : item4.ToString());
GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
GUILayout.Label("[BAN] " + text, _sLabel, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(260f) });
if (GUILayout.Button("UNBAN", _sBtn, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(54f) }))
{
num2 = item4;
}
GUILayout.EndHorizontal();
}
}
foreach (KeyValuePair<ulong, DateTime> item5 in _suspendExpiry)
{
if (item5.Value <= DateTime.UtcNow)
{
list.Add(item5.Key);
continue;
}
string value2;
string text2 = (_bannedNames.TryGetValue(item5.Key, out value2) ? value2 : item5.Key.ToString());
TimeSpan timeSpan = item5.Value - DateTime.UtcNow;
string text3 = ((timeSpan.TotalMinutes >= 1.0) ? $"{(int)timeSpan.TotalMinutes}m {timeSpan.Seconds:D2}s" : $"{timeSpan.Seconds}s");
GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
GUILayout.Label("[SUSPEND] " + text2 + " (" + text3 + " left)", _sLabel, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(280f) });
if (GUILayout.Button("CANCEL", _sBtn, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(56f) }))
{
list.Add(item5.Key);
}
GUILayout.EndHorizontal();
}
GUILayout.EndScrollView();
if (num2 != 0L)
{
_banned.Remove(num2);
_bannedNames.Remove(num2);
}
foreach (ulong item6 in list)
{
_suspendExpiry.Remove(item6);
_banned.Remove(item6);
_bannedNames.Remove(item6);
}
GUILayout.Space(4f);
GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
if (GUILayout.Button("CLEAR ALL BANS", _sBtn, Array.Empty<GUILayoutOption>()))
{
_banned.Clear();
_bannedNames.Clear();
}
GUILayout.Space(4f);
if (GUILayout.Button("CLEAR SUSPENSIONS", _sBtn, Array.Empty<GUILayoutOption>()))
{
foreach (ulong item7 in new List<ulong>(_suspendExpiry.Keys))
{
_suspendExpiry.Remove(item7);
_banned.Remove(item7);
}
}
GUILayout.EndHorizontal();
}
GUI.DragWindow(new Rect(0f, 0f, 10000f, 22f));
}
catch
{
}
}
private void DoKick(PlayerInfo p)
{
if ((Object)(object)p.Identity == (Object)null)
{
return;
}
try
{
NetworkConnectionToClient connectionToClient = p.Identity.connectionToClient;
if (connectionToClient != null)
{
((NetworkConnection)connectionToClient).Disconnect();
}
}
catch
{
}
}
private void DoBan(PlayerInfo p)
{
_banned.Add(p.SteamId);
_bannedNames[p.SteamId] = p.Name;
_suspendExpiry.Remove(p.SteamId);
DoKick(p);
}
private void DoTimeout(PlayerInfo p)
{
_frozen.Add(p.SteamId);
TryCameramanModeOnPlayer(p, enable: true);
((MonoBehaviour)this).StartCoroutine(TimeoutCoroutine(p.SteamId, _timeoutSecs));
}
private IEnumerator TimeoutCoroutine(ulong sid, float seconds)
{
yield return (object)new WaitForSeconds(seconds);
_frozen.Remove(sid);
try
{
RefreshPlayers();
foreach (PlayerInfo cachedPlayer in _cachedPlayers)
{
if (cachedPlayer.SteamId == sid)
{
TryCameramanModeOnPlayer(cachedPlayer, enable: false);
break;
}
}
}
catch
{
}
}
private void DoSuspend(PlayerInfo p)
{
_banned.Add(p.SteamId);
_bannedNames[p.SteamId] = p.Name;
_suspendExpiry[p.SteamId] = DateTime.UtcNow.AddMinutes(_suspendMins);
DoKick(p);
}
private void DoFreeze(PlayerInfo p)
{
_frozen.Add(p.SteamId);
TryCameramanModeOnPlayer(p, enable: true);
}
private void DoUnfreeze(PlayerInfo p)
{
_frozen.Remove(p.SteamId);
TryCameramanModeOnPlayer(p, enable: false);
}
private void DoMute(PlayerInfo p)
{
_muted.Add(p.SteamId);
TryMuteCmd(p, mute: true);
TryLocalAudioMute(p, mute: true);
}
private void DoUnmute(PlayerInfo p)
{
_muted.Remove(p.SteamId);
TryMuteCmd(p, mute: false);
TryLocalAudioMute(p, mute: false);
}
private IEnumerator EnforcerLoop()
{
while (true)
{
yield return (object)new WaitForSeconds(1f);
try
{
List<ulong> list = new List<ulong>();
foreach (KeyValuePair<ulong, DateTime> item in _suspendExpiry)
{
if (item.Value <= DateTime.UtcNow)
{
list.Add(item.Key);
}
}
foreach (ulong item2 in list)
{
_suspendExpiry.Remove(item2);
_banned.Remove(item2);
_bannedNames.Remove(item2);
}
if (!NetworkServer.active || (_banned.Count == 0 && _frozen.Count == 0 && _muted.Count == 0))
{
continue;
}
RefreshPlayersLight();
foreach (PlayerInfo cachedPlayer in _cachedPlayers)
{
if ((Object)(object)cachedPlayer.Identity == (Object)null)
{
continue;
}
if (_banned.Contains(cachedPlayer.SteamId))
{
try
{
NetworkConnectionToClient connectionToClient = cachedPlayer.Identity.connectionToClient;
if (connectionToClient != null)
{
((NetworkConnection)connectionToClient).Disconnect();
}
}
catch
{
}
}
if (_frozen.Contains(cachedPlayer.SteamId))
{
TryCameramanModeOnPlayer(cachedPlayer, enable: true);
}
if (_muted.Contains(cachedPlayer.SteamId))
{
TryLocalAudioMute(cachedPlayer, mute: true);
}
}
}
catch
{
}
}
}
private bool TryFreeKickCmd(PlayerInfo p)
{
NetworkBehaviour[] nBCache = GetNBCache();
foreach (NetworkBehaviour val in nBCache)
{
if ((Object)(object)val == (Object)null)
{
continue;
}
string[] kickNames = _kickNames;
foreach (string name in kickNames)
{
MethodInfo method = ((object)val).GetType().GetMethod(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if (method == null)
{
continue;
}
try
{
ParameterInfo[] parameters = method.GetParameters();
if (parameters.Length == 0)
{
method.Invoke(val, null);
return true;
}
if (parameters.Length == 1 && (parameters[0].ParameterType == typeof(int) || parameters[0].ParameterType == typeof(uint)))
{
object[] array = new object[1];
NetworkIdentity identity = p.Identity;
array[0] = (int)((identity != null) ? identity.netId : 0);
method.Invoke(val, array);
return true;
}
if (parameters.Length == 1 && parameters[0].ParameterType == typeof(NetworkIdentity) && (Object)(object)p.Identity != (Object)null)
{
method.Invoke(val, new object[1] { p.Identity });
return true;
}
}
catch
{
}
}
}
return false;
}
private static void TryCameramanModeOnPlayer(PlayerInfo p, bool enable)
{
if ((Object)(object)p.Identity == (Object)null)
{
return;
}
string[] array = ((!enable) ? new string[5] { "CmdSetCameramanMode", "CmdCameramanMode", "CmdUnfreeze", "CmdSetUnfrozen", "CmdUnspectate" } : new string[5] { "CmdSetCameramanMode", "CmdCameramanMode", "CmdFreeze", "CmdSetFrozen", "CmdSpectate" });
try
{
NetworkBehaviour[] components = ((Component)p.Identity).gameObject.GetComponents<NetworkBehaviour>();
foreach (NetworkBehaviour val in components)
{
if ((Object)(object)val == (Object)null)
{
continue;
}
string[] array2 = array;
foreach (string name in array2)
{
MethodInfo method = ((object)val).GetType().GetMethod(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if (method == null)
{
continue;
}
try
{
ParameterInfo[] parameters = method.GetParameters();
if (parameters.Length == 0)
{
method.Invoke(val, null);
return;
}
if (parameters.Length == 1 && parameters[0].ParameterType == typeof(bool))
{
method.Invoke(val, new object[1] { enable });
return;
}
}
catch
{
}
}
}
}
catch
{
}
}
private static void TryDrainMoney(PlayerInfo p)
{
if ((Object)(object)p.Identity == (Object)null)
{
return;
}
string[] array = new string[5] { "CmdChangeBalance", "CmdSetBalance", "CmdDrainMoney", "CmdSetMoney", "CmdAddMoney" };
try
{
NetworkBehaviour[] components = ((Component)p.Identity).gameObject.GetComponents<NetworkBehaviour>();
foreach (NetworkBehaviour val in components)
{
if ((Object)(object)val == (Object)null)
{
continue;
}
string[] array2 = array;
foreach (string name in array2)
{
MethodInfo method = ((object)val).GetType().GetMethod(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if (method == null)
{
continue;
}
try
{
ParameterInfo[] parameters = method.GetParameters();
if (parameters.Length < 1)
{
continue;
}
Type parameterType = parameters[0].ParameterType;
if (parameterType != typeof(long) && parameterType != typeof(int))
{
continue;
}
object[] array3 = new object[parameters.Length];
array3[0] = ((parameterType == typeof(long)) ? ((object)(-999999999L)) : ((object)(-999999999)));
for (int k = 1; k < parameters.Length; k++)
{
array3[k] = (parameters[k].HasDefaultValue ? parameters[k].DefaultValue : null);
}
method.Invoke(val, array3);
return;
}
catch
{
}
}
}
}
catch
{
}
}
private static void TryMuteCmd(PlayerInfo p, bool mute)
{
if ((Object)(object)p.Identity == (Object)null)
{
return;
}
string[] array = ((!mute) ? new string[5] { "CmdUnmutePlayer", "CmdUnmute", "CmdSetUnmuted", "CmdUnsilencePlayer", "CmdUnsilence" } : new string[5] { "CmdMutePlayer", "CmdMute", "CmdSetMuted", "CmdSilencePlayer", "CmdSilence" });
try
{
NetworkBehaviour[] components = ((Component)p.Identity).gameObject.GetComponents<NetworkBehaviour>();
foreach (NetworkBehaviour val in components)
{
if ((Object)(object)val == (Object)null)
{
continue;
}
string[] array2 = array;
foreach (string name in array2)
{
MethodInfo method = ((object)val).GetType().GetMethod(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if (method == null)
{
continue;
}
try
{
ParameterInfo[] parameters = method.GetParameters();
if (parameters.Length == 0)
{
method.Invoke(val, null);
return;
}
if (parameters.Length == 1 && parameters[0].ParameterType == typeof(bool))
{
method.Invoke(val, new object[1] { mute });
return;
}
if (parameters.Length == 1 && (parameters[0].ParameterType == typeof(uint) || parameters[0].ParameterType == typeof(int)))
{
method.Invoke(val, new object[1] { (int)p.Identity.netId });
return;
}
}
catch
{
}
}
}
}
catch
{
}
}
private static void TryLocalAudioMute(PlayerInfo p, bool mute)
{
if ((Object)(object)p.Identity == (Object)null)
{
return;
}
try
{
AudioSource[] componentsInChildren = ((Component)p.Identity).gameObject.GetComponentsInChildren<AudioSource>();
foreach (AudioSource val in componentsInChildren)
{
if ((Object)(object)val != (Object)null)
{
try
{
val.mute = mute;
}
catch
{
}
}
}
}
catch
{
}
}
private void RefreshPlayers()
{
_playerCacheAge = Time.realtimeSinceStartup;
_cachedPlayers = BuildPlayerList();
}
private void RefreshPlayersLight()
{
_playerCacheAge = Time.realtimeSinceStartup;
try
{
LocalManager val = Object.FindObjectOfType<LocalManager>();
if ((Object)(object)val == (Object)null)
{
return;
}
List<PlayerReferences> value = Traverse.Create((object)val).Field("players").GetValue<List<PlayerReferences>>();
if (value == null)
{
return;
}
List<PlayerInfo> list = new List<PlayerInfo>(value.Count);
foreach (PlayerReferences item in value)
{
if (item != null)
{
NetworkIdentity identity = item.identity;
if ((identity == null || !identity.isLocalPlayer) && !((Object)(object)item.profile == (Object)null))
{
list.Add(new PlayerInfo(item));
}
}
}
_cachedPlayers = list;
}
catch
{
}
}
private static List<PlayerInfo> BuildPlayerList()
{
List<PlayerInfo> list = new List<PlayerInfo>();
try
{
LocalManager val = Object.FindObjectOfType<LocalManager>();
if ((Object)(object)val != (Object)null)
{
List<PlayerReferences> value = Traverse.Create((object)val).Field("players").GetValue<List<PlayerReferences>>();
if (value != null && value.Count > 0)
{
foreach (PlayerReferences item in value)
{
if (item != null)
{
NetworkIdentity identity = item.identity;
if ((identity == null || !identity.isLocalPlayer) && !((Object)(object)item.profile == (Object)null))
{
list.Add(new PlayerInfo(item));
}
}
}
if (list.Count > 0)
{
return list;
}
}
}
}
catch
{
}
try
{
MonoBehaviour[] array = Object.FindObjectsOfType<MonoBehaviour>();
foreach (MonoBehaviour val2 in array)
{
if ((Object)(object)val2 == (Object)null)
{
continue;
}
string[] array2 = new string[4] { "players", "_players", "playerList", "_playerList" };
foreach (string text in array2)
{
try
{
List<PlayerReferences> value2 = Traverse.Create((object)val2).Field(text).GetValue<List<PlayerReferences>>();
if (value2 == null || value2.Count == 0)
{
continue;
}
foreach (PlayerReferences item2 in value2)
{
if (item2 != null)
{
NetworkIdentity identity2 = item2.identity;
if ((identity2 == null || !identity2.isLocalPlayer) && !((Object)(object)item2.profile == (Object)null))
{
list.Add(new PlayerInfo(item2));
}
}
}
if (list.Count <= 0)
{
continue;
}
return list;
}
catch
{
}
}
}
}
catch
{
}
return list;
}
private NetworkBehaviour[] GetNBCache()
{
if (_nbCache == null || Time.realtimeSinceStartup - _nbCacheAge > 5f)
{
try
{
_nbCache = Object.FindObjectsOfType<NetworkBehaviour>();
}
catch
{
_nbCache = (NetworkBehaviour[])(object)new NetworkBehaviour[0];
}
_nbCacheAge = Time.realtimeSinceStartup;
}
return _nbCache;
}
private void ToggleMenu(bool open)
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
_open = open;
if (!open)
{
Cursor.lockState = _savedLock;
Cursor.visible = _savedCursorVisible;
}
}
private static void Separator()
{
//IL_0030: 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_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Invalid comparison between Unknown and I4
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
GUILayout.Space(5f);
Rect rect = GUILayoutUtility.GetRect(GUIContent.none, GUIStyle.none, (GUILayoutOption[])(object)new GUILayoutOption[2]
{
GUILayout.Height(1f),
GUILayout.ExpandWidth(true)
});
if ((int)Event.current.type == 7)
{
GUI.DrawTexture(rect, (Texture)(object)Texture2D.whiteTexture);
}
GUILayout.Space(5f);
}
private void EnsureStyles()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: 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_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0062: 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_0075: Expected O, but got Unknown
//IL_007a: Expected O, but got Unknown
//IL_0085: 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_009f: 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_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Expected O, but got Unknown
//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
//IL_00f9: Expected O, but got Unknown
//IL_0104: Unknown result type (might be due to invalid IL or missing references)
//IL_0109: Unknown result type (might be due to invalid IL or missing references)
//IL_011e: Unknown result type (might be due to invalid IL or missing references)
//IL_0128: Unknown result type (might be due to invalid IL or missing references)
//IL_0135: Expected O, but got Unknown
//IL_0140: Unknown result type (might be due to invalid IL or missing references)
//IL_0145: Unknown result type (might be due to invalid IL or missing references)
//IL_014b: Unknown result type (might be due to invalid IL or missing references)
//IL_0155: Unknown result type (might be due to invalid IL or missing references)
//IL_016f: Unknown result type (might be due to invalid IL or missing references)
//IL_017e: Unknown result type (might be due to invalid IL or missing references)
//IL_0186: Unknown result type (might be due to invalid IL or missing references)
//IL_018b: Unknown result type (might be due to invalid IL or missing references)
//IL_0195: Expected O, but got Unknown
//IL_019a: Expected O, but got Unknown
//IL_01ae: 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_01e3: Unknown result type (might be due to invalid IL or missing references)
//IL_01e8: Unknown result type (might be due to invalid IL or missing references)
//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
//IL_0204: Unknown result type (might be due to invalid IL or missing references)
//IL_0210: Unknown result type (might be due to invalid IL or missing references)
//IL_0216: Unknown result type (might be due to invalid IL or missing references)
//IL_0220: Unknown result type (might be due to invalid IL or missing references)
//IL_0228: Unknown result type (might be due to invalid IL or missing references)
//IL_022d: Unknown result type (might be due to invalid IL or missing references)
//IL_0237: Expected O, but got Unknown
//IL_023c: Expected O, but got Unknown
//IL_0243: Unknown result type (might be due to invalid IL or missing references)
//IL_0248: Unknown result type (might be due to invalid IL or missing references)
//IL_0262: 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_0277: Unknown result type (might be due to invalid IL or missing references)
//IL_0281: 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_02aa: Unknown result type (might be due to invalid IL or missing references)
//IL_02b0: Unknown result type (might be due to invalid IL or missing references)
//IL_02bf: Expected O, but got Unknown
//IL_02c6: Unknown result type (might be due to invalid IL or missing references)
//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
//IL_02f4: Unknown result type (might be due to invalid IL or missing references)
//IL_02fa: Unknown result type (might be due to invalid IL or missing references)
//IL_0304: Unknown result type (might be due to invalid IL or missing references)
//IL_031e: Unknown result type (might be due to invalid IL or missing references)
//IL_032d: Unknown result type (might be due to invalid IL or missing references)
//IL_0333: Unknown result type (might be due to invalid IL or missing references)
//IL_0342: Expected O, but got Unknown
//IL_0349: Unknown result type (might be due to invalid IL or missing references)
//IL_034e: Unknown result type (might be due to invalid IL or missing references)
//IL_0368: Unknown result type (might be due to invalid IL or missing references)
//IL_0377: Unknown result type (might be due to invalid IL or missing references)
//IL_037d: Unknown result type (might be due to invalid IL or missing references)
//IL_0387: Unknown result type (might be due to invalid IL or missing references)
//IL_03a1: Unknown result type (might be due to invalid IL or missing references)
//IL_03b0: Unknown result type (might be due to invalid IL or missing references)
//IL_03b6: Unknown result type (might be due to invalid IL or missing references)
//IL_03c5: Expected O, but got Unknown
if (_stylesReady)
{
return;
}
try
{
GUIStyle val = new GUIStyle(GUI.skin.window);
val.normal.background = MakeTex(new Color(0.07f, 0.07f, 0.11f, 0.97f));
val.normal.textColor = Color.white;
val.fontSize = 13;
val.fontStyle = (FontStyle)1;
val.padding = new RectOffset(10, 10, 26, 10);
_sWin = val;
GUIStyle val2 = new GUIStyle(GUI.skin.label);
val2.normal.textColor = new Color(1f, 0.72f, 0.15f);
val2.fontSize = 12;
val2.fontStyle = (FontStyle)1;
_sHeader = val2;
GUIStyle val3 = new GUIStyle(GUI.skin.label);
val3.normal.textColor = new Color(0.92f, 0.92f, 0.92f);
val3.fontSize = 11;
_sLabel = val3;
GUIStyle val4 = new GUIStyle(GUI.skin.label);
val4.normal.textColor = new Color(0.48f, 0.48f, 0.48f);
val4.fontSize = 10;
_sDim = val4;
GUIStyle val5 = new GUIStyle(GUI.skin.textField);
val5.normal.textColor = Color.white;
val5.normal.background = MakeTex(new Color(0.18f, 0.18f, 0.26f, 1f));
val5.fontSize = 11;
val5.padding = new RectOffset(4, 4, 2, 2);
_sInput = val5;
Texture2D background = MakeTex(new Color(0.22f, 0.22f, 0.3f, 1f));
Texture2D background2 = MakeTex(new Color(0.3f, 0.3f, 0.44f, 1f));
GUIStyle val6 = new GUIStyle(GUI.skin.button);
val6.normal.background = background;
val6.normal.textColor = Color.white;
val6.hover.background = background2;
val6.hover.textColor = Color.white;
val6.fontSize = 10;
val6.padding = new RectOffset(6, 6, 3, 3);
_sBtn = val6;
GUIStyle val7 = new GUIStyle(_sBtn);
val7.normal.background = MakeTex(new Color(0.52f, 0.1f, 0.1f, 1f));
val7.normal.textColor = Color.white;
val7.hover.background = MakeTex(new Color(0.72f, 0.14f, 0.14f, 1f));
val7.hover.textColor = Color.white;
_sDanger = val7;
GUIStyle val8 = new GUIStyle(_sBtn);
val8.normal.background = MakeTex(new Color(0.1f, 0.42f, 0.1f, 1f));
val8.normal.textColor = Color.white;
val8.hover.background = MakeTex(new Color(0.14f, 0.58f, 0.14f, 1f));
val8.hover.textColor = Color.white;
_sGreen = val8;
GUIStyle val9 = new GUIStyle(_sBtn);
val9.normal.background = MakeTex(new Color(0.42f, 0.24f, 0.04f, 1f));
val9.normal.textColor = Color.white;
val9.hover.background = MakeTex(new Color(0.58f, 0.34f, 0.06f, 1f));
val9.hover.textColor = Color.white;
_sOrange = val9;
_stylesReady = true;
}
catch
{
}
}
private static Texture2D MakeTex(Color c)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: 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_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Expected O, but got Unknown
Texture2D val = new Texture2D(1, 1);
val.SetPixel(0, 0, c);
val.Apply();
return val;
}
}
[BepInPlugin("com.galix.gambleadminmenu", "Gamble Admin Menu", "1.0.0")]
public class GambleAdminPlugin : BaseUnityPlugin
{
private void Awake()
{
//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_0010: Expected O, but got Unknown
GameObject val = new GameObject("GambleAdminMenu");
Object.DontDestroyOnLoad((Object)val);
val.AddComponent<AdminMenu>();
((BaseUnityPlugin)this).Logger.LogInfo((object)"Gamble Admin Menu loaded — press F9 to open.");
}
}
}