Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Glitnir Adm HUD v0.0.1
GlitnirADM_Pay.dll
Decompiled 3 weeks 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.Text.RegularExpressions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Jotunn.Entities; using Jotunn.Managers; using Microsoft.CodeAnalysis; 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.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("0.0.0.0")] [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 GlitnirListsHUD { [BepInPlugin("glitnir.lists.unified", "Glitnir Lists Unified", "1.10.8")] public class Plugin : BaseUnityPlugin { public const string PluginGUID = "glitnir.lists.unified"; public const string PluginName = "Glitnir Lists Unified"; public const string PluginVersion = "1.10.8"; internal const string RpcRequestAdd = "GlitnirLists_RequestAdd"; internal const string RpcRequestRemove = "GlitnirLists_RequestRemove"; internal const string RpcRequestPayment = "GlitnirLists_RequestPayment"; internal const string RpcReceivePayment = "GlitnirLists_ReceivePayment"; internal const string RpcRequestOnlinePlayers = "GlitnirLists_RequestOnlinePlayers"; internal const string RpcReceiveOnlinePlayers = "GlitnirLists_ReceiveOnlinePlayers"; internal const string RpcResponse = "GlitnirLists_Response"; internal const string RpcRequestHudAccess = "GlitnirLists_RequestHudAccess"; internal const string RpcReceiveHudAccess = "GlitnirLists_ReceiveHudAccess"; internal static ManualLogSource Log; internal static Plugin Instance; private bool _rpcRegistered; private GlitnirHud _hud; internal static ConfigEntry<string> ConfigSaveDirPath; internal static ConfigEntry<string> ConfigCoinPrefabName; internal static ConfigEntry<KeyboardShortcut> ConfigHudToggleKey; internal static ConfigEntry<float> ConfigHudWindowX; internal static ConfigEntry<float> ConfigHudWindowY; internal static ConfigEntry<float> ConfigHudWindowWidth; internal static ConfigEntry<float> ConfigHudWindowHeight; internal static ConfigEntry<bool> ConfigCreateListFilesOnStartup; internal static ConfigEntry<bool> ConfigRestrictHudAccessToAdminWhitelist; private void InitializeConfig() { //IL_0083: Unknown result type (might be due to invalid IL or missing references) ConfigSaveDirPath = ((BaseUnityPlugin)this).Config.Bind<string>("General", "SaveDirPath", "C:\\Valheim\\servers\\2\\SaveDir", "Pasta onde o mod vai ler e escrever permittedlist.txt, bannedlist.txt e adminlist.txt."); ConfigCreateListFilesOnStartup = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "CreateListFilesOnStartup", true, "Quando true, cria automaticamente a pasta SaveDir e os arquivos de lista se estiverem faltando."); ConfigCoinPrefabName = ((BaseUnityPlugin)this).Config.Bind<string>("Payments", "CoinPrefabName", "GlitnirCoin", "Prefab da moeda enviada pelo comando glitnir_pay."); ConfigHudToggleKey = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("HUD", "ToggleKey", new KeyboardShortcut((KeyCode)287, Array.Empty<KeyCode>()), "Tecla para abrir/fechar o HUD."); ConfigHudWindowX = ((BaseUnityPlugin)this).Config.Bind<float>("HUD", "WindowX", 120f, "Posição X inicial do HUD."); ConfigHudWindowY = ((BaseUnityPlugin)this).Config.Bind<float>("HUD", "WindowY", 80f, "Posição Y inicial do HUD."); ConfigHudWindowWidth = ((BaseUnityPlugin)this).Config.Bind<float>("HUD", "WindowWidth", 860f, "Largura inicial do HUD."); ConfigHudWindowHeight = ((BaseUnityPlugin)this).Config.Bind<float>("HUD", "WindowHeight", 610f, "Altura inicial do HUD."); ConfigRestrictHudAccessToAdminWhitelist = ((BaseUnityPlugin)this).Config.Bind<bool>("HUD", "RestrictHudAccessToAdminWhitelist", true, "Quando true, apenas jogadores presentes na adminlist e na whitelist podem abrir o HUD."); ((BaseUnityPlugin)this).Config.Save(); } private void Awake() { Instance = this; Log = ((BaseUnityPlugin)this).Logger; InitializeConfig(); PathsConfig.EnsureStorageFiles(); CommandManager.Instance.AddConsoleCommand((ConsoleCommand)(object)new WlAddCommand()); CommandManager.Instance.AddConsoleCommand((ConsoleCommand)(object)new WlRemoveCommand()); CommandManager.Instance.AddConsoleCommand((ConsoleCommand)(object)new BanAddCommand()); CommandManager.Instance.AddConsoleCommand((ConsoleCommand)(object)new BanRemoveCommand()); CommandManager.Instance.AddConsoleCommand((ConsoleCommand)(object)new AdmAddCommand()); CommandManager.Instance.AddConsoleCommand((ConsoleCommand)(object)new AdmRemoveCommand()); CommandManager.Instance.AddConsoleCommand((ConsoleCommand)(object)new GlitnirPayCommand()); CommandManager.Instance.AddConsoleCommand((ConsoleCommand)(object)new HudToggleCommand()); _hud = ((Component)this).gameObject.AddComponent<GlitnirHud>(); _hud.ApplyConfig(); Print("[GlitnirLists] carregado."); Print("Comandos: wl_add, wl_remove, ban_add, ban_remove, adm_add, adm_remove, glitnir_pay, glitnir_hud"); Print("HUD: pressione " + PathsConfig.HudToggleKeyText + " para abrir/fechar."); Print("[GlitnirLists] SaveDir: " + PathsConfig.FolderPath); } private void Update() { if (!_rpcRegistered && ZRoutedRpc.instance != null) { ZRoutedRpc.instance.Register<ZPackage>("GlitnirLists_RequestAdd", (Action<long, ZPackage>)RPC_RequestAdd); ZRoutedRpc.instance.Register<ZPackage>("GlitnirLists_RequestRemove", (Action<long, ZPackage>)RPC_RequestRemove); ZRoutedRpc.instance.Register<ZPackage>("GlitnirLists_RequestPayment", (Action<long, ZPackage>)RPC_RequestPayment); ZRoutedRpc.instance.Register<ZPackage>("GlitnirLists_ReceivePayment", (Action<long, ZPackage>)RPC_ReceivePayment); ZRoutedRpc.instance.Register<ZPackage>("GlitnirLists_RequestOnlinePlayers", (Action<long, ZPackage>)RPC_RequestOnlinePlayers); ZRoutedRpc.instance.Register<ZPackage>("GlitnirLists_ReceiveOnlinePlayers", (Action<long, ZPackage>)RPC_ReceiveOnlinePlayers); ZRoutedRpc.instance.Register<ZPackage>("GlitnirLists_Response", (Action<long, ZPackage>)RPC_Response); ZRoutedRpc.instance.Register<ZPackage>("GlitnirLists_RequestHudAccess", (Action<long, ZPackage>)RPC_RequestHudAccess); ZRoutedRpc.instance.Register<ZPackage>("GlitnirLists_ReceiveHudAccess", (Action<long, ZPackage>)RPC_ReceiveHudAccess); _rpcRegistered = true; Print("[GlitnirLists] RPC registrada."); } } internal void ToggleHud() { if (!((Object)(object)_hud == (Object)null)) { if (_hud.IsVisible) { _hud.SetVisible(visible: false); } else if (ConfigRestrictHudAccessToAdminWhitelist == null || !ConfigRestrictHudAccessToAdminWhitelist.Value) { _hud.SetVisible(visible: true); } else { RequestHudAuthorization(); } } } private void RequestHudAuthorization() { //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Expected O, but got Unknown try { if (IsServer()) { string message; bool allowed = AdminUtils.TryAuthorizeHostLocalHudOpen(out message); HandleHudAuthorizationResult(allowed, message); } else if (ZRoutedRpc.instance == null) { PushHudMessage("ZRoutedRpc ainda nao esta pronta."); } else { ZPackage val = new ZPackage(); ZRoutedRpc.instance.InvokeRoutedRPC(0L, "GlitnirLists_RequestHudAccess", new object[1] { val }); } } catch (Exception ex) { if (Log != null) { Log.LogError((object)ex); } PushHudMessage("Erro ao validar permissao do HUD: " + ex.Message); } } private void HandleHudAuthorizationResult(bool allowed, string message) { if (allowed) { _hud.SetVisible(visible: true); } if (!string.IsNullOrWhiteSpace(message)) { Print(message); PushHudMessage(message); } } internal void PushHudMessage(string message) { if ((Object)(object)_hud != (Object)null) { _hud.SetServerMessage(message); } } internal void SetOnlinePlayers(List<OnlinePlayerRecord> players) { if ((Object)(object)_hud != (Object)null) { _hud.SetOnlinePlayers(players); } } internal void RequestOnlinePlayers() { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown try { if (IsServer()) { SetOnlinePlayers(OnlinePlayersDirectory.BuildOnlinePlayersForServer()); PushHudMessage("Lista de jogadores online atualizada."); return; } if (ZRoutedRpc.instance == null) { PushHudMessage("ZRoutedRpc ainda nao esta pronta."); return; } ZPackage val = new ZPackage(); ZRoutedRpc.instance.InvokeRoutedRPC(0L, "GlitnirLists_RequestOnlinePlayers", new object[1] { val }); PushHudMessage("Solicitando lista de jogadores online ao servidor..."); } catch (Exception ex) { if (Log != null) { Log.LogError((object)ex); } PushHudMessage("Erro ao solicitar lista online: " + ex.Message); } } private void RPC_RequestAdd(long sender, ZPackage pkg) { if (!IsServer()) { return; } try { if (pkg == null || pkg.Size() <= 0) { SendResponse(sender, "[GlitnirLists] pacote invalido."); return; } string text = pkg.ReadString(); string steamId = pkg.ReadString(); string empty = string.Empty; try { empty = pkg.ReadString(); } catch { empty = string.Empty; } bool flag = sender == 0; if (!flag && !AdminUtils.IsSenderAdmin(sender)) { SendResponse(sender, "[GlitnirLists] voce nao esta na adminlist."); return; } string text2 = (text ?? string.Empty).Trim().ToLowerInvariant() switch { "whitelist" => NumericIdListIO.AddOrUpdate(PathsConfig.PermittedFile, PathsConfig.PermittedNotesFile, steamId, empty, "Whitelist"), "banlist" => NumericIdListIO.AddOrUpdate(PathsConfig.BannedFile, PathsConfig.BannedNotesFile, steamId, empty, "Banlist"), "adminlist" => NumericIdListIO.AddOrUpdate(PathsConfig.AdminFile, PathsConfig.AdminNotesFile, steamId, empty, "Adminlist"), _ => "[GlitnirLists] tipo de lista invalido.", }; if (flag) { Print(text2); PushHudMessage(text2); } else { SendResponse(sender, text2); } } catch (Exception ex) { if (Log != null) { Log.LogError((object)ex); } string text3 = "[GlitnirLists] erro: " + ex.Message; if (sender == 0) { Print(text3); PushHudMessage(text3); } else { SendResponse(sender, text3); } } } private void RPC_RequestRemove(long sender, ZPackage pkg) { if (!IsServer()) { return; } try { if (pkg == null || pkg.Size() <= 0) { SendResponse(sender, "[GlitnirLists] pacote invalido."); return; } string text = pkg.ReadString(); string steamId = pkg.ReadString(); bool flag = sender == 0; if (!flag && !AdminUtils.IsSenderAdmin(sender)) { SendResponse(sender, "[GlitnirLists] voce nao esta na adminlist."); return; } string text2 = (text ?? string.Empty).Trim().ToLowerInvariant() switch { "whitelist" => NumericIdListIO.Remove(PathsConfig.PermittedFile, PathsConfig.PermittedNotesFile, steamId, "Whitelist"), "banlist" => NumericIdListIO.Remove(PathsConfig.BannedFile, PathsConfig.BannedNotesFile, steamId, "Banlist"), "adminlist" => NumericIdListIO.Remove(PathsConfig.AdminFile, PathsConfig.AdminNotesFile, steamId, "Adminlist"), _ => "[GlitnirLists] tipo de lista invalido.", }; if (flag) { Print(text2); PushHudMessage(text2); } else { SendResponse(sender, text2); } } catch (Exception ex) { if (Log != null) { Log.LogError((object)ex); } string text3 = "[GlitnirLists] erro: " + ex.Message; if (sender == 0) { Print(text3); PushHudMessage(text3); } else { SendResponse(sender, text3); } } } private void RPC_RequestPayment(long sender, ZPackage pkg) { if (!IsServer()) { return; } try { if (pkg == null || pkg.Size() <= 0) { SendResponse(sender, "[Pagamentos] pacote invalido."); return; } string steamId = pkg.ReadString(); int amount = pkg.ReadInt(); bool flag = sender == 0; if (!flag && !AdminUtils.IsSenderAdmin(sender)) { SendResponse(sender, "[Pagamentos] voce nao esta na adminlist."); return; } string text = GlitnirPayments.DispatchGlitnirCoins(steamId, amount, sender); if (flag) { Print(text); PushHudMessage(text); } else { SendResponse(sender, text); } } catch (Exception ex) { if (Log != null) { Log.LogError((object)ex); } string text2 = "[Pagamentos] erro: " + ex.Message; if (sender == 0) { Print(text2); PushHudMessage(text2); } else { SendResponse(sender, text2); } } } private void RPC_ReceivePayment(long sender, ZPackage pkg) { try { string text = GlitnirPayments.ReceiveGlitnirCoins(sender, pkg); if (!string.IsNullOrWhiteSpace(text)) { Print(text); if ((Object)(object)Instance != (Object)null) { Instance.PushHudMessage(text); } } } catch (Exception ex) { if (Log != null) { Log.LogError((object)ex); } } } private void RPC_RequestOnlinePlayers(long sender, ZPackage pkg) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown if (!IsServer()) { return; } try { List<OnlinePlayerRecord> list = OnlinePlayersDirectory.BuildOnlinePlayersForServer(); ZPackage val = new ZPackage(); val.Write(list.Count); foreach (OnlinePlayerRecord item in list) { val.Write(item.PlayerName ?? string.Empty); val.Write(item.SteamId ?? string.Empty); } if (ZRoutedRpc.instance != null) { ZRoutedRpc.instance.InvokeRoutedRPC(sender, "GlitnirLists_ReceiveOnlinePlayers", new object[1] { val }); } } catch (Exception ex) { if (Log != null) { Log.LogError((object)ex); } SendResponse(sender, "[GlitnirLists] erro ao montar lista de jogadores online: " + ex.Message); } } private void RPC_ReceiveOnlinePlayers(long sender, ZPackage pkg) { try { List<OnlinePlayerRecord> list = new List<OnlinePlayerRecord>(); if (pkg != null && pkg.Size() > 0) { int num = pkg.ReadInt(); for (int i = 0; i < num; i++) { list.Add(new OnlinePlayerRecord { PlayerName = pkg.ReadString(), SteamId = pkg.ReadString() }); } } if ((Object)(object)Instance != (Object)null) { Instance.SetOnlinePlayers(list); Instance.PushHudMessage("Lista de jogadores online atualizada."); } } catch (Exception ex) { if (Log != null) { Log.LogError((object)ex); } } } private void RPC_RequestHudAccess(long sender, ZPackage pkg) { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Expected O, but got Unknown if (!IsServer()) { return; } try { string message; bool flag = ((sender != 0) ? AdminUtils.TryAuthorizeSenderHudOpen(sender, out message) : AdminUtils.TryAuthorizeHostLocalHudOpen(out message)); ZPackage val = new ZPackage(); val.Write(flag); val.Write(message ?? string.Empty); if (sender == 0) { RPC_ReceiveHudAccess(0L, val); } else if (ZRoutedRpc.instance != null) { ZRoutedRpc.instance.InvokeRoutedRPC(sender, "GlitnirLists_ReceiveHudAccess", new object[1] { val }); } } catch (Exception ex) { if (Log != null) { Log.LogError((object)ex); } SendResponse(sender, "[GlitnirLists] erro ao validar permissao do HUD: " + ex.Message); } } private void RPC_ReceiveHudAccess(long sender, ZPackage pkg) { try { bool allowed = false; string message = string.Empty; if (pkg != null && pkg.Size() > 0) { allowed = pkg.ReadBool(); message = pkg.ReadString(); } if ((Object)(object)Instance != (Object)null) { Instance.HandleHudAuthorizationResult(allowed, message); } } catch (Exception ex) { if (Log != null) { Log.LogError((object)ex); } } } private void RPC_Response(long sender, ZPackage pkg) { if (pkg != null && pkg.Size() > 0) { string empty = string.Empty; try { empty = pkg.ReadString(); } catch { empty = string.Empty; } if (!string.IsNullOrWhiteSpace(empty)) { Print(empty); PushHudMessage(empty); } } } internal static void ExecuteAdd(string listType, string steamId, string alias) { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Expected O, but got Unknown //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Expected O, but got Unknown try { if (string.IsNullOrWhiteSpace(steamId)) { Print("Uso: <comando> <steamid64> [apelido]"); if ((Object)(object)Instance != (Object)null) { Instance.PushHudMessage("Preencha um SteamID com 17 digitos."); } return; } if (IsServer()) { ZPackage val = new ZPackage(); val.Write(listType ?? string.Empty); val.Write(steamId.Trim()); val.Write(alias ?? string.Empty); Instance.RPC_RequestAdd(0L, val); return; } if (ZRoutedRpc.instance == null) { Print("[GlitnirLists] ZRoutedRpc nao esta pronta."); if ((Object)(object)Instance != (Object)null) { Instance.PushHudMessage("ZRoutedRpc ainda nao esta pronta."); } return; } ZPackage val2 = new ZPackage(); val2.Write(listType ?? string.Empty); val2.Write(steamId.Trim()); val2.Write(alias ?? string.Empty); ZRoutedRpc.instance.InvokeRoutedRPC(0L, "GlitnirLists_RequestAdd", new object[1] { val2 }); Print("[GlitnirLists] pedido enviado ao servidor..."); if ((Object)(object)Instance != (Object)null) { Instance.PushHudMessage("Pedido enviado ao servidor..."); } } catch (Exception ex) { Print("[GlitnirLists] erro ao enviar pedido: " + ex.Message); if ((Object)(object)Instance != (Object)null) { Instance.PushHudMessage("Erro ao enviar pedido: " + ex.Message); } if (Log != null) { Log.LogError((object)ex); } } } internal static void ExecuteRemove(string listType, string steamId) { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Expected O, but got Unknown //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Expected O, but got Unknown try { if (string.IsNullOrWhiteSpace(steamId)) { Print("Uso: <comando> <steamid64>"); if ((Object)(object)Instance != (Object)null) { Instance.PushHudMessage("Preencha um SteamID com 17 digitos."); } return; } if (IsServer()) { ZPackage val = new ZPackage(); val.Write(listType ?? string.Empty); val.Write(steamId.Trim()); Instance.RPC_RequestRemove(0L, val); return; } if (ZRoutedRpc.instance == null) { Print("[GlitnirLists] ZRoutedRpc nao esta pronta."); if ((Object)(object)Instance != (Object)null) { Instance.PushHudMessage("ZRoutedRpc ainda nao esta pronta."); } return; } ZPackage val2 = new ZPackage(); val2.Write(listType ?? string.Empty); val2.Write(steamId.Trim()); ZRoutedRpc.instance.InvokeRoutedRPC(0L, "GlitnirLists_RequestRemove", new object[1] { val2 }); Print("[GlitnirLists] pedido de remocao enviado ao servidor..."); if ((Object)(object)Instance != (Object)null) { Instance.PushHudMessage("Pedido de remocao enviado ao servidor..."); } } catch (Exception ex) { Print("[GlitnirLists] erro ao enviar pedido de remocao: " + ex.Message); if ((Object)(object)Instance != (Object)null) { Instance.PushHudMessage("Erro ao enviar pedido de remocao: " + ex.Message); } if (Log != null) { Log.LogError((object)ex); } } } internal static void ExecutePayment(string steamId, int amount) { //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Expected O, but got Unknown try { if (string.IsNullOrWhiteSpace(steamId)) { Print("Uso: glitnir_pay <steamid64> <quantidade>"); if ((Object)(object)Instance != (Object)null) { Instance.PushHudMessage("Preencha um SteamID com 17 digitos."); } return; } if (amount <= 0) { Print("Uso: glitnir_pay <steamid64> <quantidade>"); if ((Object)(object)Instance != (Object)null) { Instance.PushHudMessage("Informe uma quantidade maior que zero."); } return; } if (IsServer()) { ZPackage val = new ZPackage(); val.Write(steamId.Trim()); val.Write(amount); Instance.RPC_RequestPayment(0L, val); return; } if (ZRoutedRpc.instance == null) { Print("[Pagamentos] ZRoutedRpc nao esta pronta."); if ((Object)(object)Instance != (Object)null) { Instance.PushHudMessage("ZRoutedRpc ainda nao esta pronta."); } return; } ZPackage val2 = new ZPackage(); val2.Write(steamId.Trim()); val2.Write(amount); ZRoutedRpc.instance.InvokeRoutedRPC(0L, "GlitnirLists_RequestPayment", new object[1] { val2 }); Print("[Pagamentos] pedido enviado ao servidor..."); if ((Object)(object)Instance != (Object)null) { Instance.PushHudMessage("Pedido de pagamento enviado ao servidor..."); } } catch (Exception ex) { Print("[Pagamentos] erro ao enviar pedido: " + ex.Message); if ((Object)(object)Instance != (Object)null) { Instance.PushHudMessage("Erro ao enviar pedido: " + ex.Message); } if (Log != null) { Log.LogError((object)ex); } } } internal static bool IsServer() { return (Object)(object)ZNet.instance != (Object)null && ZNet.instance.IsServer(); } internal static void SendResponse(long sender, string message) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown try { if (sender != 0L && ZRoutedRpc.instance != null) { ZPackage val = new ZPackage(); val.Write(message ?? string.Empty); ZRoutedRpc.instance.InvokeRoutedRPC(sender, "GlitnirLists_Response", new object[1] { val }); } else { Print(message); } } catch (Exception ex) { if (Log != null) { Log.LogError((object)ex); } } } internal static void Print(string msg) { Debug.Log((object)msg); if ((Object)(object)Console.instance != (Object)null) { Console.instance.Print(msg); } if (Log != null) { Log.LogMessage((object)msg); } } } internal static class PathsConfig { private const string DefaultFolderPath = "C:\\Valheim\\servers\\2\\SaveDir"; private const string DefaultCoinPrefabName = "GlitnirCoin"; internal static string FolderPath => NormalizeFolderPath((Plugin.ConfigSaveDirPath != null) ? Plugin.ConfigSaveDirPath.Value : "C:\\Valheim\\servers\\2\\SaveDir"); internal static string CoinPrefabName => string.IsNullOrWhiteSpace((Plugin.ConfigCoinPrefabName != null) ? Plugin.ConfigCoinPrefabName.Value : null) ? "GlitnirCoin" : Plugin.ConfigCoinPrefabName.Value.Trim(); internal static KeyboardShortcut HudToggleKey => (KeyboardShortcut)((Plugin.ConfigHudToggleKey != null) ? Plugin.ConfigHudToggleKey.Value : new KeyboardShortcut((KeyCode)287, Array.Empty<KeyCode>())); internal static string HudToggleKeyText { get { //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_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) KeyboardShortcut hudToggleKey = HudToggleKey; object result; if ((int)((KeyboardShortcut)(ref hudToggleKey)).MainKey != 0) { hudToggleKey = HudToggleKey; result = ((object)(KeyboardShortcut)(ref hudToggleKey)).ToString(); } else { result = "sem tecla"; } return (string)result; } } internal static string PermittedFile => Path.Combine(FolderPath, "permittedlist.txt"); internal static string PermittedNotesFile => Path.Combine(FolderPath, "permittedlist_notes.txt"); internal static string BannedFile => Path.Combine(FolderPath, "bannedlist.txt"); internal static string BannedNotesFile => Path.Combine(FolderPath, "bannedlist_notes.txt"); internal static string AdminFile => Path.Combine(FolderPath, "adminlist.txt"); internal static string AdminNotesFile => Path.Combine(FolderPath, "adminlist_notes.txt"); internal static string PermittedHeader => "// List permitted players ID ONE per line"; internal static string BannedHeader => "// List banned players ID ONE per line"; internal static string AdminHeader => "// List admin players ID ONE per line"; internal static Rect GetHudWindowRect() { //IL_007d: 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_0086: Unknown result type (might be due to invalid IL or missing references) float num = ((Plugin.ConfigHudWindowX != null) ? Plugin.ConfigHudWindowX.Value : 120f); float num2 = ((Plugin.ConfigHudWindowY != null) ? Plugin.ConfigHudWindowY.Value : 80f); float num3 = ((Plugin.ConfigHudWindowWidth != null) ? Plugin.ConfigHudWindowWidth.Value : 860f); float num4 = ((Plugin.ConfigHudWindowHeight != null) ? Plugin.ConfigHudWindowHeight.Value : 610f); return new Rect(num, num2, Mathf.Max(640f, num3), Mathf.Max(420f, num4)); } internal static void EnsureStorageFiles() { try { if (Plugin.ConfigCreateListFilesOnStartup == null || Plugin.ConfigCreateListFilesOnStartup.Value) { if (!Directory.Exists(FolderPath)) { Directory.CreateDirectory(FolderPath); } EnsureFile(PermittedFile, PermittedHeader); EnsureFile(BannedFile, BannedHeader); EnsureFile(AdminFile, AdminHeader); EnsureFile(PermittedNotesFile, PermittedHeader); EnsureFile(BannedNotesFile, BannedHeader); EnsureFile(AdminNotesFile, AdminHeader); } } catch (Exception ex) { Plugin.Print("[GlitnirLists] erro ao garantir arquivos de lista: " + ex.Message); if (Plugin.Log != null) { Plugin.Log.LogError((object)ex); } } } private static void EnsureFile(string filePath, string header) { if (!File.Exists(filePath)) { string[] contents = (string.IsNullOrWhiteSpace(header) ? Array.Empty<string>() : new string[1] { header }); File.WriteAllLines(filePath, contents); } } private static string NormalizeFolderPath(string value) { string name = (string.IsNullOrWhiteSpace(value) ? "C:\\Valheim\\servers\\2\\SaveDir" : value.Trim()); name = Environment.ExpandEnvironmentVariables(name); return Path.GetFullPath(name); } } internal sealed class WlAddCommand : ConsoleCommand { public override string Name => "wl_add"; public override string Help => "wl_add <steamid64> [apelido] - adiciona na whitelist"; public override void Run(string[] args) { if (args == null || args.Length < 1) { Plugin.Print("Uso: wl_add <steamid64> [apelido]"); return; } string steamId = args[0].Trim(); string alias = ((args.Length > 1) ? string.Join(" ", args.Skip(1)).Trim() : string.Empty); Plugin.ExecuteAdd("whitelist", steamId, alias); } } internal sealed class BanAddCommand : ConsoleCommand { public override string Name => "ban_add"; public override string Help => "ban_add <steamid64> [apelido] - adiciona na banlist"; public override void Run(string[] args) { if (args == null || args.Length < 1) { Plugin.Print("Uso: ban_add <steamid64> [apelido]"); return; } string steamId = args[0].Trim(); string alias = ((args.Length > 1) ? string.Join(" ", args.Skip(1)).Trim() : string.Empty); Plugin.ExecuteAdd("banlist", steamId, alias); } } internal sealed class WlRemoveCommand : ConsoleCommand { public override string Name => "wl_remove"; public override string Help => "wl_remove <steamid64> - remove da whitelist"; public override void Run(string[] args) { if (args == null || args.Length < 1) { Plugin.Print("Uso: wl_remove <steamid64>"); } else { Plugin.ExecuteRemove("whitelist", args[0].Trim()); } } } internal sealed class BanRemoveCommand : ConsoleCommand { public override string Name => "ban_remove"; public override string Help => "ban_remove <steamid64> - remove da banlist"; public override void Run(string[] args) { if (args == null || args.Length < 1) { Plugin.Print("Uso: ban_remove <steamid64>"); } else { Plugin.ExecuteRemove("banlist", args[0].Trim()); } } } internal sealed class AdmAddCommand : ConsoleCommand { public override string Name => "adm_add"; public override string Help => "adm_add <steamid64> [apelido] - adiciona na adminlist"; public override void Run(string[] args) { if (args == null || args.Length < 1) { Plugin.Print("Uso: adm_add <steamid64> [apelido]"); return; } string steamId = args[0].Trim(); string alias = ((args.Length > 1) ? string.Join(" ", args.Skip(1)).Trim() : string.Empty); Plugin.ExecuteAdd("adminlist", steamId, alias); } } internal sealed class AdmRemoveCommand : ConsoleCommand { public override string Name => "adm_remove"; public override string Help => "adm_remove <steamid64> - remove da adminlist"; public override void Run(string[] args) { if (args == null || args.Length < 1) { Plugin.Print("Uso: adm_remove <steamid64>"); } else { Plugin.ExecuteRemove("adminlist", args[0].Trim()); } } } internal sealed class GlitnirPayCommand : ConsoleCommand { public override string Name => "glitnir_pay"; public override string Help => "glitnir_pay <steamid64> <quantidade> - envia a moeda configurada para um jogador online"; public override void Run(string[] args) { if (args == null || args.Length < 2) { Plugin.Print("Uso: glitnir_pay <steamid64> <quantidade>"); return; } string steamId = args[0].Trim(); if (!int.TryParse(args[1].Trim(), out var result)) { Plugin.Print("Quantidade invalida."); } else { Plugin.ExecutePayment(steamId, result); } } } internal sealed class HudToggleCommand : ConsoleCommand { public override string Name => "glitnir_hud"; public override string Help => "glitnir_hud - abre/fecha o HUD do mod"; public override void Run(string[] args) { if ((Object)(object)Plugin.Instance != (Object)null) { Plugin.Instance.ToggleHud(); } } } internal class GlitnirHud : MonoBehaviour { private enum HudTab { Whitelist, Adminlist, Banlist, OnlinePlayers, Payments } private enum HudAction { Add, Remove } private bool _visible; private Rect _windowRect = PathsConfig.GetHudWindowRect(); private HudTab _currentTab = HudTab.Whitelist; private HudAction _currentAction = HudAction.Add; private string _steamIdInput = string.Empty; private string _aliasInput = string.Empty; private string _amountInput = "1"; private string _serverMessage = "Pronto para receber um novo nome nos saloes de Glitnir."; private Vector2 _logScroll = Vector2.zero; private Vector2 _onlinePlayersScroll = Vector2.zero; private string _selectedOnlineName = string.Empty; private string _selectedOnlineSteamId = string.Empty; private readonly List<OnlinePlayerRecord> _onlinePlayers = new List<OnlinePlayerRecord>(); private readonly List<string> _logEntries = new List<string>(); private Texture2D _whiteTex; private Texture2D _bgMain; private Texture2D _bgPanel; private Texture2D _bgHeader; private Texture2D _bgAccent; private Texture2D _bgButton; private Texture2D _bgButtonActive; private Texture2D _bgDanger; private Texture2D _bgInput; private GUIStyle _windowStyle; private GUIStyle _titleStyle; private GUIStyle _subtitleStyle; private GUIStyle _sectionStyle; private GUIStyle _bodyStyle; private GUIStyle _smallStyle; private GUIStyle _inputStyle; private GUIStyle _buttonStyle; private GUIStyle _buttonActiveStyle; private GUIStyle _dangerButtonStyle; private GUIStyle _tabStyle; private GUIStyle _tabActiveStyle; private GUIStyle _messageStyle; private GUIStyle _logStyle; private GUIStyle _closeStyle; private bool _stylesReady; private GameObject _inputBlockerCanvasObject; private Component _inputBlockerCanvas; private Component _inputBlockerImage; private Component _inputBlockerRaycaster; internal bool IsVisible => _visible; private void Update() { //IL_0001: 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_0009: Unknown result type (might be due to invalid IL or missing references) KeyboardShortcut hudToggleKey = PathsConfig.HudToggleKey; if ((int)((KeyboardShortcut)(ref hudToggleKey)).MainKey != 0 && ((KeyboardShortcut)(ref hudToggleKey)).IsDown()) { if ((Object)(object)Plugin.Instance != (Object)null) { Plugin.Instance.ToggleHud(); } else { Toggle(); } } } internal void ApplyConfig() { //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) _windowRect = PathsConfig.GetHudWindowRect(); } internal void SetVisible(bool visible) { _visible = visible; UpdateInputBlocker(); if (_visible && (Object)(object)Plugin.Instance != (Object)null) { Plugin.Instance.RequestOnlinePlayers(); } } internal void Toggle() { SetVisible(!_visible); } internal void SetServerMessage(string message) { if (!string.IsNullOrWhiteSpace(message)) { _serverMessage = message.Trim(); _logEntries.Insert(0, DateTime.Now.ToString("HH:mm:ss") + " " + _serverMessage); if (_logEntries.Count > 20) { _logEntries.RemoveAt(_logEntries.Count - 1); } } } internal void SetOnlinePlayers(List<OnlinePlayerRecord> players) { _onlinePlayers.Clear(); if (players != null) { foreach (OnlinePlayerRecord player in players) { if (player != null) { _onlinePlayers.Add(new OnlinePlayerRecord { PlayerName = (player.PlayerName ?? string.Empty), SteamId = (player.SteamId ?? string.Empty) }); } } } if (_onlinePlayers.Count == 1) { SelectOnlinePlayer(_onlinePlayers[0]); } else if (_onlinePlayers.Count > 0) { OnlinePlayerRecord onlinePlayerRecord = _onlinePlayers.FirstOrDefault((OnlinePlayerRecord p) => !string.IsNullOrWhiteSpace(p.PlayerName) && string.Equals(p.PlayerName, SafeLocalPlayerName(), StringComparison.OrdinalIgnoreCase)); if (onlinePlayerRecord != null) { SelectOnlinePlayer(onlinePlayerRecord); } } else { _selectedOnlineName = string.Empty; _selectedOnlineSteamId = string.Empty; } } private string SafeLocalPlayerName() { try { if ((Object)(object)Player.m_localPlayer != (Object)null) { string playerName = Player.m_localPlayer.GetPlayerName(); if (!string.IsNullOrWhiteSpace(playerName)) { return playerName.Trim(); } } } catch { } try { if ((Object)(object)Game.instance != (Object)null && Game.instance.GetPlayerProfile() != null) { string name = Game.instance.GetPlayerProfile().GetName(); if (!string.IsNullOrWhiteSpace(name)) { return name.Trim(); } } } catch { } return string.Empty; } private void EnsureStyles() { //IL_0029: 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) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: 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_013a: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Expected O, but got Unknown //IL_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Expected O, but got Unknown //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: Expected O, but got Unknown //IL_0200: 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: Expected O, but got Unknown //IL_025a: Unknown result type (might be due to invalid IL or missing references) //IL_0270: Unknown result type (might be due to invalid IL or missing references) //IL_027a: Expected O, but got Unknown //IL_02b4: Unknown result type (might be due to invalid IL or missing references) //IL_02ca: Unknown result type (might be due to invalid IL or missing references) //IL_02d4: Expected O, but got Unknown //IL_030e: Unknown result type (might be due to invalid IL or missing references) //IL_0324: Unknown result type (might be due to invalid IL or missing references) //IL_032e: Expected O, but got Unknown //IL_0368: Unknown result type (might be due to invalid IL or missing references) //IL_037e: Unknown result type (might be due to invalid IL or missing references) //IL_0388: Expected O, but got Unknown //IL_0400: Unknown result type (might be due to invalid IL or missing references) //IL_040a: Expected O, but got Unknown //IL_0416: 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_0442: Unknown result type (might be due to invalid IL or missing references) //IL_044c: Expected O, but got Unknown //IL_04b8: Unknown result type (might be due to invalid IL or missing references) //IL_04c2: Expected O, but got Unknown //IL_04e2: Unknown result type (might be due to invalid IL or missing references) //IL_04f4: Unknown result type (might be due to invalid IL or missing references) //IL_04fe: Expected O, but got Unknown //IL_054a: Unknown result type (might be due to invalid IL or missing references) //IL_0554: Expected O, but got Unknown //IL_05a0: Unknown result type (might be due to invalid IL or missing references) //IL_05aa: Expected O, but got Unknown //IL_05bf: Unknown result type (might be due to invalid IL or missing references) //IL_05c9: Expected O, but got Unknown //IL_05e2: Unknown result type (might be due to invalid IL or missing references) //IL_05ec: Expected O, but got Unknown //IL_0639: Unknown result type (might be due to invalid IL or missing references) //IL_0643: Expected O, but got Unknown //IL_0663: Unknown result type (might be due to invalid IL or missing references) //IL_0679: Unknown result type (might be due to invalid IL or missing references) //IL_0683: Expected O, but got Unknown //IL_06d0: Unknown result type (might be due to invalid IL or missing references) //IL_06da: Expected O, but got Unknown //IL_06fa: Unknown result type (might be due to invalid IL or missing references) //IL_070c: Unknown result type (might be due to invalid IL or missing references) //IL_0716: Expected O, but got Unknown if (!_stylesReady) { _whiteTex = MakeTex(1, 1, new Color(1f, 1f, 1f, 1f)); _bgMain = MakeTex(1, 1, new Color(0.06f, 0.07f, 0.09f, 0.97f)); _bgPanel = MakeTex(1, 1, new Color(0.1f, 0.11f, 0.14f, 0.95f)); _bgHeader = MakeTex(1, 1, new Color(0.17f, 0.12f, 0.05f, 0.96f)); _bgAccent = MakeTex(1, 1, new Color(0.78f, 0.6f, 0.22f, 0.18f)); _bgButton = MakeTex(1, 1, new Color(0.22f, 0.18f, 0.1f, 0.95f)); _bgButtonActive = MakeTex(1, 1, new Color(0.55f, 0.42f, 0.14f, 0.95f)); _bgDanger = MakeTex(1, 1, new Color(0.4f, 0.14f, 0.14f, 0.95f)); _bgInput = MakeTex(1, 1, new Color(0.05f, 0.05f, 0.06f, 0.95f)); _windowStyle = new GUIStyle(GUI.skin.box); _windowStyle.normal.background = _bgMain; _windowStyle.border = new RectOffset(1, 1, 1, 1); _titleStyle = new GUIStyle(GUI.skin.label); _titleStyle.fontSize = 26; _titleStyle.fontStyle = (FontStyle)1; _titleStyle.normal.textColor = new Color(1f, 0.88f, 0.56f, 1f); _subtitleStyle = new GUIStyle(GUI.skin.label); _subtitleStyle.fontSize = 12; _subtitleStyle.wordWrap = true; _subtitleStyle.normal.textColor = new Color(0.86f, 0.82f, 0.72f, 0.9f); _sectionStyle = new GUIStyle(GUI.skin.label); _sectionStyle.fontSize = 14; _sectionStyle.fontStyle = (FontStyle)1; _sectionStyle.normal.textColor = new Color(1f, 0.9f, 0.64f, 1f); _bodyStyle = new GUIStyle(GUI.skin.label); _bodyStyle.fontSize = 13; _bodyStyle.wordWrap = true; _bodyStyle.normal.textColor = new Color(0.92f, 0.92f, 0.92f, 0.95f); _smallStyle = new GUIStyle(GUI.skin.label); _smallStyle.fontSize = 11; _smallStyle.wordWrap = true; _smallStyle.normal.textColor = new Color(0.76f, 0.76f, 0.76f, 0.9f); _inputStyle = new GUIStyle(GUI.skin.textField); _inputStyle.normal.background = _bgInput; _inputStyle.hover.background = _bgInput; _inputStyle.active.background = _bgInput; _inputStyle.focused.background = _bgInput; _inputStyle.fontSize = 15; _inputStyle.padding = new RectOffset(12, 12, 10, 10); _inputStyle.normal.textColor = Color.white; _inputStyle.focused.textColor = Color.white; _buttonStyle = new GUIStyle(GUI.skin.button); _buttonStyle.normal.background = _bgButton; _buttonStyle.hover.background = _bgButtonActive; _buttonStyle.active.background = _bgButtonActive; _buttonStyle.fontSize = 14; _buttonStyle.fontStyle = (FontStyle)1; _buttonStyle.padding = new RectOffset(8, 8, 10, 10); _buttonStyle.normal.textColor = new Color(1f, 0.93f, 0.78f, 1f); _buttonActiveStyle = new GUIStyle(_buttonStyle); _buttonActiveStyle.normal.background = _bgButtonActive; _buttonActiveStyle.hover.background = _bgButtonActive; _buttonActiveStyle.active.background = _bgButtonActive; _dangerButtonStyle = new GUIStyle(_buttonStyle); _dangerButtonStyle.normal.background = _bgDanger; _dangerButtonStyle.hover.background = _bgDanger; _dangerButtonStyle.active.background = _bgDanger; _tabStyle = new GUIStyle(_buttonStyle); _tabStyle.fontSize = 13; _tabActiveStyle = new GUIStyle(_buttonActiveStyle); _tabActiveStyle.fontSize = 13; _messageStyle = new GUIStyle(GUI.skin.box); _messageStyle.normal.background = _bgAccent; _messageStyle.alignment = (TextAnchor)3; _messageStyle.fontSize = 13; _messageStyle.wordWrap = true; _messageStyle.padding = new RectOffset(14, 14, 10, 10); _messageStyle.normal.textColor = new Color(1f, 0.94f, 0.8f, 1f); _logStyle = new GUIStyle(GUI.skin.box); _logStyle.normal.background = _bgInput; _logStyle.alignment = (TextAnchor)0; _logStyle.fontSize = 12; _logStyle.wordWrap = true; _logStyle.padding = new RectOffset(10, 10, 10, 10); _logStyle.normal.textColor = new Color(0.88f, 0.88f, 0.88f, 1f); _closeStyle = new GUIStyle(_dangerButtonStyle); _closeStyle.alignment = (TextAnchor)4; _closeStyle.fontSize = 14; _stylesReady = true; } } private void OnGUI() { //IL_0031: 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) //IL_0052: Expected O, but got Unknown //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) UpdateInputBlocker(); if (_visible) { EnsureStyles(); GUI.depth = -1000; _windowRect = GUI.ModalWindow(818181, _windowRect, new WindowFunction(DrawWindow), string.Empty, _windowStyle); GUI.FocusWindow(818181); ConsumeHudEvents(); } } private void UpdateInputBlocker() { if (_visible) { EnsureInputBlocker(); if ((Object)(object)_inputBlockerCanvasObject != (Object)null && !_inputBlockerCanvasObject.activeSelf) { _inputBlockerCanvasObject.SetActive(true); } ClearSelectedGameObjectOnEventSystem(); } else if ((Object)(object)_inputBlockerCanvasObject != (Object)null && _inputBlockerCanvasObject.activeSelf) { _inputBlockerCanvasObject.SetActive(false); } } private void EnsureInputBlocker() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Expected O, but got Unknown //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Expected O, but got Unknown //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_inputBlockerCanvasObject != (Object)null) { return; } _inputBlockerCanvasObject = new GameObject("GlitnirHudInputBlocker"); Object.DontDestroyOnLoad((Object)(object)_inputBlockerCanvasObject); Type type = FindLoadedType("UnityEngine.Canvas"); if (!(type == null)) { _inputBlockerCanvas = _inputBlockerCanvasObject.AddComponent(type); TrySetProperty(_inputBlockerCanvas, "renderMode", "ScreenSpaceOverlay"); TrySetProperty(_inputBlockerCanvas, "sortingOrder", 32000); Type type2 = FindLoadedType("UnityEngine.UI.GraphicRaycaster"); if (type2 != null) { _inputBlockerRaycaster = _inputBlockerCanvasObject.AddComponent(type2); } GameObject val = new GameObject("Blocker"); val.transform.SetParent(_inputBlockerCanvasObject.transform, false); RectTransform val2 = val.AddComponent<RectTransform>(); val2.anchorMin = Vector2.zero; val2.anchorMax = Vector2.one; val2.offsetMin = Vector2.zero; val2.offsetMax = Vector2.zero; Type type3 = FindLoadedType("UnityEngine.UI.Image"); if (type3 != null) { _inputBlockerImage = val.AddComponent(type3); TrySetProperty(_inputBlockerImage, "color", (object)new Color(0f, 0f, 0f, 0.001f)); TrySetProperty(_inputBlockerImage, "raycastTarget", true); } } } private void ConsumeHudEvents() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: 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_0036: 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_003d: 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_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Invalid comparison between Unknown and I4 //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Invalid comparison between Unknown and I4 //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Invalid comparison between Unknown and I4 Event current = Event.current; if (current != null) { Vector2 mousePosition = current.mousePosition; bool flag = ((Rect)(ref _windowRect)).Contains(mousePosition); if (flag) { ClearSelectedGameObjectOnEventSystem(); } EventType type = current.type; EventType val = type; if (((int)val <= 3 || (int)val == 6 || (int)val == 16) && flag) { current.Use(); } } } private static Type FindLoadedType(string fullName) { try { Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly assembly in assemblies) { if (!(assembly == null)) { Type type = assembly.GetType(fullName, throwOnError: false); if (type != null) { return type; } } } } catch { } return null; } private static void TrySetProperty(object target, string propertyName, object value) { if (target == null || string.IsNullOrWhiteSpace(propertyName)) { return; } try { PropertyInfo property = target.GetType().GetProperty(propertyName, BindingFlags.Instance | BindingFlags.Public); if (!(property == null) && property.CanWrite) { object obj = value; if (obj != null && property.PropertyType.IsEnum && obj is string value2) { obj = Enum.Parse(property.PropertyType, value2); } else if (obj != null && !property.PropertyType.IsAssignableFrom(obj.GetType())) { obj = Convert.ChangeType(obj, property.PropertyType); } property.SetValue(target, obj, null); } } catch { } } private static void ClearSelectedGameObjectOnEventSystem() { try { Type type = FindLoadedType("UnityEngine.EventSystems.EventSystem"); if (type == null) { return; } PropertyInfo property = type.GetProperty("current", BindingFlags.Static | BindingFlags.Public); object obj = ((property != null) ? property.GetValue(null, null) : null); if (obj != null) { MethodInfo method = type.GetMethod("SetSelectedGameObject", new Type[1] { typeof(GameObject) }); if (method != null) { method.Invoke(obj, new object[1]); } } } catch { } } private void DrawWindow(int id) { //IL_002a: 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_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0070: 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) //IL_00c6: 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) float width = ((Rect)(ref _windowRect)).width; float height = ((Rect)(ref _windowRect)).height; DrawBox(new Rect(0f, 0f, width, 92f), _bgHeader, Color.white); DrawAccentLine(new Rect(0f, 92f, width, 3f)); GUI.Label(new Rect(24f, 18f, 380f, 34f), "GLITNIR LISTS", _titleStyle); GUI.Label(new Rect(24f, 52f, 620f, 24f), "Painel nordico para listas e pagamentos de moedas Glitnir", _subtitleStyle); if (GUI.Button(new Rect(width - 72f, 20f, 48f, 34f), "X", _closeStyle)) { SetVisible(visible: false); UpdateInputBlocker(); } DrawTabBar(width); DrawStatusCard(width); DrawLeftPanel(); DrawRightPanel(width); DrawBottomLog(width, height); GUI.DragWindow(new Rect(0f, 0f, width - 80f, 92f)); } private void DrawTabBar(float width) { //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_00ae: 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_015a: Unknown result type (might be due to invalid IL or missing references) float num = 24f; float num2 = 108f; float num3 = 122f; float num4 = 8f; if (GUI.Button(new Rect(num, num2, num3, 38f), "Whitelist", (_currentTab == HudTab.Whitelist) ? _tabActiveStyle : _tabStyle)) { _currentTab = HudTab.Whitelist; } if (GUI.Button(new Rect(num + (num3 + num4) * 1f, num2, num3, 38f), "Admin List", (_currentTab == HudTab.Adminlist) ? _tabActiveStyle : _tabStyle)) { _currentTab = HudTab.Adminlist; } if (GUI.Button(new Rect(num + (num3 + num4) * 2f, num2, num3, 38f), "Ban List", (_currentTab == HudTab.Banlist) ? _tabActiveStyle : _tabStyle)) { _currentTab = HudTab.Banlist; } if (GUI.Button(new Rect(num + (num3 + num4) * 3f, num2, num3, 38f), "Online", (_currentTab == HudTab.OnlinePlayers) ? _tabActiveStyle : _tabStyle)) { _currentTab = HudTab.OnlinePlayers; if ((Object)(object)Plugin.Instance != (Object)null) { Plugin.Instance.RequestOnlinePlayers(); } } if (GUI.Button(new Rect(num + (num3 + num4) * 4f, num2, num3, 38f), "Pagamentos", (_currentTab == HudTab.Payments) ? _tabActiveStyle : _tabStyle)) { _currentTab = HudTab.Payments; _currentAction = HudAction.Add; } } private void DrawStatusCard(float width) { //IL_001f: 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_008d: Unknown result type (might be due to invalid IL or missing references) Rect rect = default(Rect); ((Rect)(ref rect))..ctor(24f, 162f, width - 48f, 74f); DrawPanel(rect); GUI.Label(new Rect(((Rect)(ref rect)).x + 16f, ((Rect)(ref rect)).y + 12f, 200f, 24f), GetCardTitle(), _sectionStyle); GUI.Label(new Rect(((Rect)(ref rect)).x + 16f, ((Rect)(ref rect)).y + 36f, ((Rect)(ref rect)).width - 32f, 24f), GetCardDescription(), _bodyStyle); } private void DrawLeftPanel() { //IL_001d: 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_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00df: 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_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_021f: 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_017e: Unknown result type (might be due to invalid IL or missing references) Rect val = default(Rect); ((Rect)(ref val))..ctor(24f, 254f, 390f, 230f); DrawPanel(val); if (_currentTab == HudTab.OnlinePlayers) { DrawOnlinePlayersPanel(val); return; } GUI.Label(new Rect(((Rect)(ref val)).x + 16f, ((Rect)(ref val)).y + 14f, 220f, 24f), "Entrada de dados", _sectionStyle); GUI.Label(new Rect(((Rect)(ref val)).x + 16f, ((Rect)(ref val)).y + 42f, 340f, 22f), "SteamID64 com 17 digitos", _smallStyle); string value = GUI.TextField(new Rect(((Rect)(ref val)).x + 16f, ((Rect)(ref val)).y + 66f, ((Rect)(ref val)).width - 32f, 40f), _steamIdInput, 17, _inputStyle); _steamIdInput = FilterDigits(value, 17); if (_currentTab == HudTab.Payments) { GUI.Label(new Rect(((Rect)(ref val)).x + 16f, ((Rect)(ref val)).y + 114f, 340f, 22f), "Quantidade de GlitnirCoin", _smallStyle); string value2 = GUI.TextField(new Rect(((Rect)(ref val)).x + 16f, ((Rect)(ref val)).y + 138f, ((Rect)(ref val)).width - 32f, 40f), _amountInput ?? "1", 9, _inputStyle); _amountInput = FilterDigits(value2, 9); } else { GUI.Label(new Rect(((Rect)(ref val)).x + 16f, ((Rect)(ref val)).y + 114f, 340f, 22f), "Apelido / observacao", _smallStyle); _aliasInput = GUI.TextField(new Rect(((Rect)(ref val)).x + 16f, ((Rect)(ref val)).y + 138f, ((Rect)(ref val)).width - 32f, 40f), _aliasInput ?? string.Empty, 64, _inputStyle); } } private void DrawRightPanel(float width) { //IL_001f: 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_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0161: 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_00b8: 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_02c0: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Unknown result type (might be due to invalid IL or missing references) //IL_032c: Unknown result type (might be due to invalid IL or missing references) //IL_0266: Unknown result type (might be due to invalid IL or missing references) Rect val = default(Rect); ((Rect)(ref val))..ctor(432f, 254f, width - 456f, 230f); DrawPanel(val); if (_currentTab == HudTab.OnlinePlayers) { DrawOnlinePlayerActionsPanel(val); return; } GUI.Label(new Rect(((Rect)(ref val)).x + 16f, ((Rect)(ref val)).y + 14f, 240f, 24f), "Comandos do salao", _sectionStyle); if (_currentTab == HudTab.Payments) { GUI.Label(new Rect(((Rect)(ref val)).x + 16f, ((Rect)(ref val)).y + 42f, ((Rect)(ref val)).width - 32f, 40f), "Envia o prefab " + PathsConfig.CoinPrefabName + " para um jogador online mantendo a mesma validacao de ADM do mod.", _smallStyle); if (GUI.Button(new Rect(((Rect)(ref val)).x + 16f, ((Rect)(ref val)).y + 138f, ((Rect)(ref val)).width - 32f, 40f), GetActionButtonText(), _buttonActiveStyle)) { SubmitCurrentAction(); } } else { GUI.Label(new Rect(((Rect)(ref val)).x + 16f, ((Rect)(ref val)).y + 42f, ((Rect)(ref val)).width - 32f, 40f), "A checagem de ADM continua a mesma do codigo anterior. Agora o HUD tambem adiciona e remove.", _smallStyle); float num = (((Rect)(ref val)).width - 40f) * 0.5f; if (GUI.Button(new Rect(((Rect)(ref val)).x + 16f, ((Rect)(ref val)).y + 92f, num, 36f), "Modo: ADICIONAR", (_currentAction == HudAction.Add) ? _buttonActiveStyle : _buttonStyle)) { _currentAction = HudAction.Add; } if (GUI.Button(new Rect(((Rect)(ref val)).x + 24f + num, ((Rect)(ref val)).y + 92f, num, 36f), "Modo: REMOVER", (_currentAction == HudAction.Remove) ? _dangerButtonStyle : _buttonStyle)) { _currentAction = HudAction.Remove; } if (GUI.Button(new Rect(((Rect)(ref val)).x + 16f, ((Rect)(ref val)).y + 138f, ((Rect)(ref val)).width - 32f, 40f), GetActionButtonText(), GetPrimaryActionStyle())) { SubmitCurrentAction(); } } float num2 = (((Rect)(ref val)).width - 40f) * 0.5f; if (GUI.Button(new Rect(((Rect)(ref val)).x + 16f, ((Rect)(ref val)).y + 184f, num2, 40f), "Limpar campos", _buttonStyle)) { _steamIdInput = string.Empty; _aliasInput = string.Empty; _amountInput = "1"; SetServerMessage("Campos limpos."); } if (GUI.Button(new Rect(((Rect)(ref val)).x + 24f + num2, ((Rect)(ref val)).y + 184f, num2, 40f), "Fechar HUD", _dangerButtonStyle)) { SetVisible(visible: false); UpdateInputBlocker(); } } private void DrawOnlinePlayersPanel(Rect panel) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_006e: 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_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: 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_0108: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01c9: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: 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_0209: Unknown result type (might be due to invalid IL or missing references) //IL_0257: 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) List<OnlinePlayerRecord> onlinePlayers = _onlinePlayers; GUI.Label(new Rect(((Rect)(ref panel)).x + 16f, ((Rect)(ref panel)).y + 14f, 240f, 24f), "Jogadores online", _sectionStyle); GUI.Label(new Rect(((Rect)(ref panel)).x + 16f, ((Rect)(ref panel)).y + 42f, ((Rect)(ref panel)).width - 32f, 22f), "Clique em um nome para preencher o SteamID no painel.", _smallStyle); Rect val = default(Rect); ((Rect)(ref val))..ctor(((Rect)(ref panel)).x + 16f, ((Rect)(ref panel)).y + 70f, ((Rect)(ref panel)).width - 32f, ((Rect)(ref panel)).height - 86f); float num = 54f; Rect val2 = default(Rect); ((Rect)(ref val2))..ctor(0f, 0f, ((Rect)(ref val)).width - 18f, Mathf.Max(((Rect)(ref val)).height, (float)onlinePlayers.Count * num)); _onlinePlayersScroll = GUI.BeginScrollView(val, _onlinePlayersScroll, val2, false, true); if (onlinePlayers.Count <= 0) { GUI.Box(new Rect(0f, 0f, ((Rect)(ref val2)).width, 44f), "Nenhum jogador online detectado.", _logStyle); } else { Rect val3 = default(Rect); for (int i = 0; i < onlinePlayers.Count; i++) { OnlinePlayerRecord onlinePlayerRecord = onlinePlayers[i]; ((Rect)(ref val3))..ctor(0f, (float)i * num, ((Rect)(ref val2)).width, 48f); bool flag = !string.IsNullOrWhiteSpace(_selectedOnlineSteamId) && string.Equals(_selectedOnlineSteamId, onlinePlayerRecord.SteamId, StringComparison.OrdinalIgnoreCase); DrawBox(val3, flag ? _bgAccent : _bgInput, Color.white); DrawOutline(val3, flag ? new Color(1f, 0.86f, 0.5f, 0.78f) : new Color(0.72f, 0.58f, 0.24f, 0.28f)); if (GUI.Button(val3, GUIContent.none, GUIStyle.none)) { SelectOnlinePlayer(onlinePlayerRecord); } GUI.Label(new Rect(((Rect)(ref val3)).x + 10f, ((Rect)(ref val3)).y + 4f, ((Rect)(ref val3)).width - 20f, 20f), onlinePlayerRecord.PlayerName, _sectionStyle); GUI.Label(new Rect(((Rect)(ref val3)).x + 10f, ((Rect)(ref val3)).y + 24f, ((Rect)(ref val3)).width - 20f, 18f), onlinePlayerRecord.SteamId, _smallStyle); } } GUI.EndScrollView(); } private void DrawOnlinePlayerActionsPanel(Rect panel) { //IL_0025: 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_0119: 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_0196: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_0225: 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_02a9: Unknown result type (might be due to invalid IL or missing references) GUI.Label(new Rect(((Rect)(ref panel)).x + 16f, ((Rect)(ref panel)).y + 14f, 260f, 24f), "Selecao e copia", _sectionStyle); if (GUI.Button(new Rect(((Rect)(ref panel)).x + ((Rect)(ref panel)).width - 156f, ((Rect)(ref panel)).y + 12f, 140f, 32f), "Atualizar lista", _buttonStyle) && (Object)(object)Plugin.Instance != (Object)null) { Plugin.Instance.RequestOnlinePlayers(); } if (string.IsNullOrWhiteSpace(_selectedOnlineSteamId)) { GUI.Label(new Rect(((Rect)(ref panel)).x + 16f, ((Rect)(ref panel)).y + 46f, ((Rect)(ref panel)).width - 32f, 44f), "Selecione um jogador online no painel da esquerda para ver o nome em jogo e copiar o SteamID.", _smallStyle); return; } GUI.Label(new Rect(((Rect)(ref panel)).x + 16f, ((Rect)(ref panel)).y + 52f, 220f, 22f), "Nome em jogo", _smallStyle); GUI.Box(new Rect(((Rect)(ref panel)).x + 16f, ((Rect)(ref panel)).y + 76f, ((Rect)(ref panel)).width - 32f, 32f), _selectedOnlineName, _messageStyle); GUI.Label(new Rect(((Rect)(ref panel)).x + 16f, ((Rect)(ref panel)).y + 118f, 220f, 22f), "SteamID64", _smallStyle); GUI.TextField(new Rect(((Rect)(ref panel)).x + 16f, ((Rect)(ref panel)).y + 142f, ((Rect)(ref panel)).width - 32f, 38f), _selectedOnlineSteamId, 17, _inputStyle); float num = (((Rect)(ref panel)).width - 40f) * 0.5f; if (GUI.Button(new Rect(((Rect)(ref panel)).x + 16f, ((Rect)(ref panel)).y + 188f, num, 34f), "Usar no campo", _buttonActiveStyle)) { _steamIdInput = _selectedOnlineSteamId; if (!string.IsNullOrWhiteSpace(_selectedOnlineName)) { _aliasInput = _selectedOnlineName; } SetServerMessage("SteamID carregado no campo principal: " + _selectedOnlineSteamId); } if (GUI.Button(new Rect(((Rect)(ref panel)).x + 24f + num, ((Rect)(ref panel)).y + 188f, num, 34f), "Copiar SteamID", _buttonStyle)) { GUIUtility.systemCopyBuffer = _selectedOnlineSteamId ?? string.Empty; SetServerMessage("SteamID copiado: " + _selectedOnlineSteamId); } } private void SelectOnlinePlayer(OnlinePlayerRecord player) { if (player != null) { _selectedOnlineName = player.PlayerName ?? string.Empty; _selectedOnlineSteamId = player.SteamId ?? string.Empty; _steamIdInput = _selectedOnlineSteamId; if (!string.IsNullOrWhiteSpace(_selectedOnlineName)) { _aliasInput = _selectedOnlineName; } SetServerMessage("Jogador selecionado: " + _selectedOnlineName + " - " + _selectedOnlineSteamId); } } private void DrawBottomLog(float width, float height) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_005e: 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_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0171: 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_0193: Unknown result type (might be due to invalid IL or missing references) //IL_0224: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_0256: Unknown result type (might be due to invalid IL or missing references) float num = 500f; float num2 = 24f; float num3 = Mathf.Max(74f, height - num - num2); Rect rect = default(Rect); ((Rect)(ref rect))..ctor(24f, num, width - 48f, num3); DrawPanel(rect); GUI.Label(new Rect(((Rect)(ref rect)).x + 16f, ((Rect)(ref rect)).y + 12f, 240f, 24f), "Resposta do servidor", _sectionStyle); float num4 = ((Rect)(ref rect)).y + 42f; float num5 = ((Rect)(ref rect)).yMax - 12f; float num6 = Mathf.Max(28f, num5 - num4); bool flag = num6 < 84f; float num7 = (flag ? num6 : 38f); Rect val = default(Rect); ((Rect)(ref val))..ctor(((Rect)(ref rect)).x + 16f, num4, ((Rect)(ref rect)).width - 32f, num7); GUI.Box(val, _serverMessage, _messageStyle); if (flag) { return; } float num8 = ((Rect)(ref val)).yMax + 8f; float num9 = num5 - num8; if (!(num9 < 28f)) { Rect rect2 = default(Rect); ((Rect)(ref rect2))..ctor(((Rect)(ref rect)).x + 16f, num8, ((Rect)(ref rect)).width - 32f, num9); DrawBox(rect2, _bgInput, new Color(1f, 1f, 1f, 0.96f)); DrawOutline(rect2, new Color(0.72f, 0.58f, 0.24f, 0.22f)); float num10 = 24f; float num11 = 4f; int num12 = Mathf.Max(1, Mathf.FloorToInt((((Rect)(ref rect2)).height - 8f) / (num10 + num11))); int num13 = Mathf.Min(num12, _logEntries.Count); Rect val2 = default(Rect); for (int i = 0; i < num13; i++) { ((Rect)(ref val2))..ctor(((Rect)(ref rect2)).x + 6f, ((Rect)(ref rect2)).y + 6f + (float)i * (num10 + num11), ((Rect)(ref rect2)).width - 12f, num10); DrawBox(val2, _bgAccent, new Color(1f, 1f, 1f, (i == 0) ? 0.9f : 0.55f)); GUI.Box(val2, _logEntries[i], _logStyle); } } } private void SubmitCurrentAction() { if (string.IsNullOrWhiteSpace(_steamIdInput)) { SetServerMessage("Informe um SteamID valido antes de continuar."); } else if (_currentTab == HudTab.Payments) { if (!TryGetPaymentAmount(out var amount)) { SetServerMessage("Informe uma quantidade valida maior que zero."); } else { Plugin.ExecutePayment(_steamIdInput, amount); } } else if (_currentAction == HudAction.Remove) { Plugin.ExecuteRemove(GetCurrentListType(), _steamIdInput); } else { Plugin.ExecuteAdd(GetCurrentListType(), _steamIdInput, _aliasInput); } } private GUIStyle GetPrimaryActionStyle() { if (_currentTab == HudTab.Payments) { return _buttonActiveStyle; } return (_currentAction == HudAction.Remove) ? _dangerButtonStyle : _buttonActiveStyle; } private string GetCurrentListType() { return _currentTab switch { HudTab.Adminlist => "adminlist", HudTab.Banlist => "banlist", _ => "whitelist", }; } private bool TryGetPaymentAmount(out int amount) { if (string.IsNullOrWhiteSpace(_amountInput)) { amount = 0; return false; } if (!int.TryParse(_amountInput.Trim(), out amount)) { amount = 0; return false; } return amount > 0; } private string GetActionButtonText() { bool flag = _currentAction == HudAction.Remove; return _currentTab switch { HudTab.Payments => "Enviar moedas GLITNIR", HudTab.Adminlist => flag ? "Remover da ADMIN LIST" : "Adicionar na ADMIN LIST", HudTab.Banlist => flag ? "Remover da BAN LIST" : "Adicionar na BAN LIST", _ => flag ? "Remover da WHITELIST" : "Adicionar na WHITELIST", }; } private string GetCardTitle() { return _currentTab switch { HudTab.Payments => "Pagamentos de moedas Glitnir", HudTab.Adminlist => (_currentAction == HudAction.Remove) ? "Remocao dos guardioes" : "Lista dos guardioes", HudTab.Banlist => (_currentAction == HudAction.Remove) ? "Perdao dos banidos" : "Lista dos banidos", _ => (_currentAction == HudAction.Remove) ? "Portoes de saida" : "Portoes de Glitnir", }; } private string GetCardDescription() { bool flag = _currentAction == HudAction.Remove; return _currentTab switch { HudTab.Payments => "Use o prefab GlitnirCoin para pagamentos. O alvo deve estar online e com espaco no inventario.", HudTab.Adminlist => flag ? "Remove administradores mantendo a mesma validacao RPC e a mesma leitura da adminlist." : "Somente os escolhidos poderao escrever os nomes na pedra dos administradores.", HudTab.Banlist => flag ? "Retire um nome da banlist quando a pena tiver chegado ao fim." : "Aqui caem os nomes que nao mais cruzarao os portoes do reino.", _ => flag ? "Remova jogadores permitidos sem alterar a logica de ADM que ja funcionava." : "Registre novos jogadores permitidos usando a mesma seguranca RPC do mod original.", }; } private void DrawPanel(Rect rect) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0009: 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_002a: 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) DrawBox(rect, _bgPanel, Color.white); DrawOutline(rect, new Color(0.77f, 0.61f, 0.26f, 0.45f)); DrawAccentLine(new Rect(((Rect)(ref rect)).x, ((Rect)(ref rect)).y, ((Rect)(ref rect)).width, 2f)); } private void DrawOutline(Rect rect, Color color) { //IL_0001: 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_0053: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_00af: 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) GUI.color = color; GUI.DrawTexture(new Rect(((Rect)(ref rect)).x, ((Rect)(ref rect)).y, ((Rect)(ref rect)).width, 1f), (Texture)(object)_whiteTex); GUI.DrawTexture(new Rect(((Rect)(ref rect)).x, ((Rect)(ref rect)).yMax - 1f, ((Rect)(ref rect)).width, 1f), (Texture)(object)_whiteTex); GUI.DrawTexture(new Rect(((Rect)(ref rect)).x, ((Rect)(ref rect)).y, 1f, ((Rect)(ref rect)).height), (Texture)(object)_whiteTex); GUI.DrawTexture(new Rect(((Rect)(ref rect)).xMax - 1f, ((Rect)(ref rect)).y, 1f, ((Rect)(ref rect)).height), (Texture)(object)_whiteTex); GUI.color = Color.white; } private void DrawAccentLine(Rect rect) { //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_002d: Unknown result type (might be due to invalid IL or missing references) GUI.color = new Color(0.9f, 0.72f, 0.28f, 0.9f); GUI.DrawTexture(rect, (Texture)(object)_whiteTex); GUI.color = Color.white; } private void DrawBox(Rect rect, Texture2D texture, Color color) { //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) //IL_0011: Unknown result type (might be due to invalid IL or missing references) GUI.color = color; GUI.DrawTexture(rect, (Texture)(object)texture, (ScaleMode)0); GUI.color = Color.white; } private Texture2D MakeTex(int width, int height, Color color) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0012: 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_0030: Expected O, but got Unknown Color[] array = (Color[])(object)new Color[width * height]; for (int i = 0; i < array.Length; i++) { array[i] = color; } Texture2D val = new Texture2D(width, height, (TextureFormat)5, false); val.SetPixels(array); val.Apply(); return val; } private void OnDestroy() { if ((Object)(object)_inputBlockerCanvasObject != (Object)null) { Object.Destroy((Object)(object)_inputBlockerCanvasObject); _inputBlockerCanvasObject = null; _inputBlockerCanvas = null; _inputBlockerImage = null; _inputBlockerRaycaster = null; } } private string FilterDigits(string value, int maxLen) { if (string.IsNullOrEmpty(value)) { return string.Empty; } char[] value2 = value.Where(char.IsDigit).Take(maxLen).ToArray(); return new string(value2); } } internal static class AdminUtils { public static bool TryAuthorizeLocalHudOpen(out string message) { return TryAuthorizeHostLocalHudOpen(out message); } public static bool TryAuthorizeHostLocalHudOpen(out string message) { message = string.Empty; try { string text = ResolveHostLocalSteamId(); if (string.IsNullOrWhiteSpace(text)) { message = "[GlitnirLists] HUD bloqueado. Nao foi possivel resolver a SteamID local do host."; return false; } return IsSteamIdAllowedToOpenHud(text, out message); } catch (Exception ex) { if (Plugin.Log != null) { Plugin.Log.LogError((object)("Erro ao validar HUD local do host: " + ex)); } message = "[GlitnirLists] HUD bloqueado. Falha ao validar permissoes locais do host."; return false; } } public static bool TryAuthorizeSenderHudOpen(long sender, out string message) { message = string.Empty; try { string text = ResolveHostIdFromSender(sender); if (string.IsNullOrWhiteSpace(text)) { message = "[GlitnirLists] HUD bloqueado. Nao foi possivel resolver sua SteamID no servidor."; return false; } return IsSteamIdAllowedToOpenHud(text, out message); } catch (Exception ex) { if (Plugin.Log != null) { Plugin.Log.LogError((object)("Erro ao validar HUD do sender: " + ex)); } message = "[GlitnirLists] HUD bloqueado. Falha ao validar permissoes no servidor."; return false; } } public static bool IsSenderAdmin(long sender) { try { string text = ResolveHostIdFromSender(sender); if (string.IsNullOrWhiteSpace(text)) { Plugin.Print("[GlitnirLists] nao foi possivel resolver o hostId do sender: " + sender); return false; } bool result = IsHostIdInAdminList(text); Plugin.Print("[GlitnirLists] sender=" + sender + " hostId=" + text + " admin=" + result); return result; } catch (Exception ex) { if (Plugin.Log != null) { Plugin.Log.LogError((object)("Erro ao validar admin: " + ex)); } return false; } } private static string ResolveHostIdFromSender(long sender) { //IL_005c: 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_0064: 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_006b: 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_00c0: Unknown result type (might be due to invalid IL or missing references) try { if ((Object)(object)ZNet.instance == (Object)null) { return string.Empty; } string value = sender + ":"; string text = string.Empty; List<PlayerInfo> playerList = ZNet.instance.GetPlayerList(); if (playerList != null) { foreach (PlayerInfo item in playerList) { ZDOID characterID = item.m_characterID; string text2 = ((object)(ZDOID)(ref characterID)).ToString(); if (!string.IsNullOrWhiteSpace(text2) && text2.StartsWith(value, StringComparison.Ordinal)) { string playerInfoHost = GetPlayerInfoHost(item); if (!string.IsNullOrWhiteSpace(playerInfoHost)) { return Validators.NormalizeSteam64(playerInfoHost); } text = GetPlayerInfoName(item); break; } } } foreach (ZNetPeer peer in ZNet.instance.GetPeers()) { if (peer == null || peer.m_socket == null) { continue; } try { if (string.IsNullOrWhiteSpace(text)) { continue; } string peerName = GetPeerName(peer); if (!string.IsNullOrWhiteSpace(peerName) && string.Equals(peerName, text, StringComparison.OrdinalIgnoreCase)) { string hostName = peer.m_socket.GetHostName(); if (!string.IsNullOrWhiteSpace(hostName)) { return Validators.NormalizeSteam64(hostName); } } } catch { } } } catch (Exception ex) { if (Plugin.Log != null) { Plugin.Log.LogError((object)("Erro ao resolver hostId do sender: " + ex)); } } return string.Empty; } private static string GetPlayerInfoHost(PlayerInfo player) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) try { Type type = ((object)player).GetType(); string[] array = new string[6] { "m_host", "m_hostName", "host", "hostName", "Host", "HostName" }; string[] array2 = array; foreach (string name in array2) { FieldInfo field = type.GetField(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { object value = field.GetValue(player); if (value != null) { string text = value.ToString(); if (!string.IsNullOrWhiteSpace(text)) { return text; } } } PropertyInfo property = type.GetProperty(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (!(property != null)) { continue; } object value2 = property.GetValue(player, null); if (value2 != null) { string text2 = value2.ToString(); if (!string.IsNullOrWhiteSpace(text2)) { return text2; } } } } catch { } return string.Empty; } private static string GetPlayerInfoName(PlayerInfo player) { //IL_0002: 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_00b2: Unknown result type (might be due to invalid IL or missing references) try { Type type = ((object)player).GetType(); string[] array = new string[3] { "m_name", "name", "Name" }; string[] array2 = array; foreach (string name in array2) { FieldInfo field = type.GetField(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { object value = field.GetValue(player); if (value != null) { string text = value.ToString(); if (!string.IsNullOrWhiteSpace(text)) { return text; } } } PropertyInfo property = type.GetProperty(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (!(property != null)) { continue; } object value2 = property.GetValue(player, null); if (value2 != null) { string text2 = value2.ToString(); if (!string.IsNullOrWhiteSpace(text2)) { return text2; } } } } catch { } return string.Empty; } private static string GetPeerName(ZNetPeer peer) { try { Type type = ((object)peer).GetType(); string[] array = new string[5] { "m_playerName", "m_name", "playerName", "name", "Name" }; string[] array2 = array; foreach (string name in array2) { FieldInfo field = type.GetField(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { object value = field.GetValue(peer); if (value != null) { string text = value.ToString(); if (!string.IsNullOrWhiteSpace(text)) { return text; } } } PropertyInfo property = type.GetProperty(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (!(property != null)) { continue; } object value2 = property.GetValue(peer, null); if (value2 != null) { string text2 = value2.ToString(); if (!string.IsNullOrWhiteSpace(text2)) { return text2; } } } } catch { } return string.Empty; } private static bool IsSteamIdAllowedToOpenHud(string hostId, out string message) { bool flag = IsHostIdInAdminList(hostId); bool flag2 = IsHostIdInPermittedList(hostId); if (flag && flag2) { message = "[GlitnirLists] Permissao confirmada. Abrindo HUD."; return true; } if (!flag && !flag2) { message = "[GlitnirLists] HUD bloqueado. Seu SteamID nao esta na adminlist nem na whitelist."; } else if (!flag) { message = "[GlitnirLists] HUD bloqueado. Seu SteamID nao esta na adminlist."; } else { message = "[GlitnirLists] HUD bloqueado. Seu SteamID nao esta na whitelist."; } return false; } private static string ResolveSteamIdFromConfiguredFilesByLocalName() { string text = string.Empty; try { if ((Object)(object)Player.m_localPlayer != (Object)null) { text = Player.m_localPlayer.GetPlayerName(); } } catch { } if (string.IsNullOrWhiteSpace(text)) { try { if ((Object)(object)Game.instance != (Object)null && Game.instance.GetPlayerProfile() != null) { text = Game.instance.GetPlayerProfile().GetName(); } } catch { } } text = (text ?? string.Empty).Trim(); if (string.IsNullOrWhiteSpace(text)) { return string.Empty; } try { string adminNotesFile = PathsConfig.AdminNotesFile; if (File.Exists(adminNotesFile)) { string[] array = File.ReadAllLines(adminNotesFile); foreach (string text2 in array) { string text3 = (text2 ?? string.Empty).Trim(); if (!string.IsNullOrWhiteSpace(text3) && !text3.StartsWith("//")) { string[] array2 = text3.Split(new char[1] { '|' }, 2); string text4 = ((array2.Length != 0) ? Validators.NormalizeSteam64(array2[0]) : string.Empty); string text5 = ((array2.Length > 1) ? (array2[1] ?? string.Empty).Trim() : string.Empty); if (!string.IsNullOrWhiteSpace(text4) && !string.IsNullOrWhiteSpace(text5) && string.Equals(text5, text, StringComparison.OrdinalIgnoreCase)) { return text4; } } } } } catch { } return string.Empty; } private static string ResolveHostLocalSteamId() { //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) try { Type type = AccessTools.TypeByName("Steamworks.SteamUser"); if (type != null) { MethodInfo method = type.GetMethod("GetSteamID", BindingFlags.Static | BindingFlags.Public); if (method != null) { object obj = method.Invoke(null, null); if (obj != null) { FieldInfo field = obj.GetType().GetField("m_SteamID", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { object value = field.GetValue(obj); if (value != null) { string text = value.ToString(); if (Regex.IsMatch(text ?? string.Empty, "^\\d{17}$")) { return text; } } } string text2 = obj.ToString(); if (Regex.IsMatch(text2 ?? string.Empty, "^\\d{17}$")) { return text2; } } } } } catch { } try { if ((Object)(object)ZNet.instance != (Object)null) { List<PlayerInfo> playerList = ZNet.instance.GetPlayerList(); if (playerList != null) { foreach (PlayerInfo item in playerList) { string playerInfoHost = GetPlayerInfoHost(item); string text3 = Validators.NormalizeSteam64(playerInfoHost); if (!string.IsNullOrWhiteSpace(text3)) { return text3; } } } } } catch { } return string.Empty; } private static bool IsHostIdInPermittedList(string hostId) { if (!File.Exists(PathsConfig.PermittedFile)) { Plugin.Print("[GlitnirLists] permittedlist.txt nao encontrado: " + PathsConfig.PermittedFile); return false; } string[] array = File.ReadAllLines(PathsConfig.PermittedFile); foreach (string text in array) { string text2 = (text ?? string.Empty).Trim(); if (string.IsNullOrWhiteSpace(text2) || text2.StartsWith("//")) { continue; } try { string a = Validators.NormalizeSteam64(text2); if (string.Equals(a, hostId, StringComparison.OrdinalIgnoreCase)) { return true; } } catch { } } return false; } private static bool IsHostIdInAdminList(string hostId) { if (!File.Exists(PathsConfig.AdminFile)) { Plugin.Print("[GlitnirLists] adminlist.txt nao encontrado: " + PathsConfig.AdminFile); return false; } string[] array = File.ReadAllLines(PathsConfig.AdminFile); foreach (string text in array) { string text2 = (text ?? string.Empty).Trim(); if (string.IsNullOrWhiteSpace(text2) || text2.StartsWith("//")) { continue; } try { string a = Validators.NormalizeSteam64(text2); if (string.Equals(a, hostId, StringComparison.OrdinalIgnoreCase)) { return true; } } catch { } } return false; } } internal sealed class OnlinePlayerRecord { public string PlayerName = string.Empty; public string SteamId = string.Empty; } internal static class OnlinePlayersDirectory { public static List<OnlinePlayerRecord> GetOnlinePlayers() { return BuildOnlinePlayersForServer(); } public static List<OnlinePlayerRecord> BuildOnlinePlayersForServer() { //IL_00fa: 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_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) Dictionary<string, OnlinePlayerRecord> dictionary = new Dictionary<string, OnlinePlayerRecord>(StringComparer.OrdinalIgnoreCase); try { if ((Object)(object)ZNet.instance == (Object)null) { return new List<OnlinePlayerRecord>(); } Dictionary<string, string> dictionary2 = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); try { List<ZNetPeer> peers = ZNet.instance.GetPeers(); if (peers != null) { foreach (ZNetPeer item in peers) { if (item != null) { string peerName = GetPeerName(item); string value = ReadPeerSteamId(item); if (!string.IsNullOrWhiteSpace(peerName) && !string.IsNullOrWhiteSpace(value)) { dictionary2[peerName] = value; } } } } } catch { } try { List<PlayerInfo> playerList = ZNet.instance.GetPlayerList(); if (playerList != null) { foreach (PlayerInfo item2 in playerList) { string playerInfoName = GetPlayerInfoName(item2); if (!string.IsNullOrWhiteSpace(playerInfoName)) { string value2 = string.Empty; if (!dictionary2.TryGetValue(playerInfoName, out value2)) { value2 = ExtractSteam64(GetPlayerInfoHost(item2)); } if (!string.IsNullOrWhiteSpace(value2)) { Merge(dictionary, playerInfoName, value2); } } } } } catch { } if (dictionary.Count == 0) { TryAddLocalFallback(dictionary); } } catch { } return dictionary.Values.OrderBy<OnlinePlayerRecord, string>((OnlinePlayerRecord p) => p.PlayerName ?? string.Empty, StringComparer.OrdinalIgnoreCase).ThenBy<OnlinePlayerRecord, string>((OnlinePlayerRecord p) => p.SteamId ?? string.Empty, StringComparer.OrdinalIgnoreCase).ToList(); } private static void TryAddLocalFallback(Dictionary<string, OnlinePlayerRecord> bySteam) { try { string text = string.Empty; if ((Object)(object)Player.m_localPlayer != (Object)null) { text = Player.m_localPlayer.GetPlayerName(); } if (string.IsNullOrWhiteSpace(text) && (Object)(object)Game.instance != (Object)null && Game.instance.GetPlayerProfile() != null) { text = Game.instance.GetPlayerProfile().GetName(); } string text2 = ResolveLocalSteamId(); if (!string.IsNullOrWhiteSpace(text) && !string.IsNullOrWhiteSpace(text2)) { Merge(bySteam, text, text2); } } catch { } } private static string ResolveLocalSteamId() { try { Type type = AccessTools.TypeByName("Steamworks.SteamUser"); if (type != null) { MethodInfo method = type.GetMethod("GetSteamID", BindingFlags.Static | BindingFlags.Public); if (method != null) { object obj = method.Invoke(null, null); if (obj != null) { FieldInfo field = obj.GetType().GetField("m_SteamID", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { object value = field.GetValue(obj); if (value != null) { string text = value.ToString(); if (Regex.IsMatch(text ?? string.Empty, "^\\d{17}$")) { return text; } } } string text2 = obj.ToString(); if (Regex.IsMatch(text2 ?? string.Empty, "^\\d{17}$")) { return text2; } } } } } catch { } return string.Empty; } private static string ReadPeerSteamId(ZNetPeer peer) { if (peer == null) { return string.Empty; } try { if (peer.m_socket != null) { object socket = peer.m_socket; MethodInfo method = socket.GetType().GetMethod("GetPeerID", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method != null) { object obj = method.Invoke(socket, null); if (obj != null) { string text = obj.ToString(); if (Regex.IsMatch(text ?? string.Empty, "^\\d{17}$")) { return text; } } } MethodInfo method2 = socket.GetType().GetMethod("GetHostName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (method2 != null) { object obj2 = method2.Invoke(socket, null); string text2 = ((obj2 != null) ? obj2.ToString() : string.Empty); string text3 = ExtractSteam64(text2); if (!string.IsNullOrWhiteSpace(text3)) { return text3; } } } } catch { } try { Type type = ((object)peer).GetType(); string[] array = new string[3] { "m_uid", "uid", "UID" }; string[] array2 = array; foreach (string name in array2) { FieldInfo field = type.GetField(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (!(field != null)) { continue; } object value = field.GetValue(peer); if (value != null) { string text4 = value.ToString(); if (Regex.IsMatch(text4 ?? string.Empty, "^\\d{17}$")) { return text4; } } } } catch { } return string.Empty; } private static void Merge(Dictionary<string, OnlinePlayerRecord> bySteam, string playerName, string steamId) { if (!string.IsNullOrWhiteSpace(steamId)) { if (!bySteam.TryGetValue(steamId, out var value)) { bySteam[steamId] = new OnlinePlayerRecord { PlayerName = (string.IsNullOrWhiteSpace(playerName) ? "Jogador" : playerName.Trim()), SteamId = steamId }; } else if ((string.IsNullOrWhiteSpace(value.PlayerName) || string.Equals(value.PlayerName, "Stranger", StringComparison.OrdinalIgnoreCase)) && !string.IsNullOrWhiteSpace(playerName)) { value.PlayerName = playerName.Trim(); } } } private static string GetPlayerInfoHost(PlayerInfo player) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) try { Type type = ((object)player).GetType(); string[] array = new string[6] { "m_host", "m_hostName", "host", "hostName", "Host", "HostName" }; string[] array2 = array; foreach (string name in array2) { FieldInfo field = type.GetField(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { object value = field.GetValue(player); if (value != null && !string.IsNullOrWhiteSpace(value.ToString())) { return value.ToString(); } } PropertyInfo property = type.GetProperty(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (property != null) { object value2 = property.GetValue(player, null); if (value2 != null && !string.IsNullOrWhiteSpace(value2.ToString())) { return value2.ToString(); } } } } catch { } return string.Empty; } private static string GetPlayerInfoName(PlayerInfo player) { //IL_0002: 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_00b2: Unknown result type (might be due to invalid IL or missing references) try { Type type = ((object)player).GetType(); string[] array = new string[3] { "m_name", "name", "Name" }; string[] array2 = array; foreach (string name in array2) { FieldInfo field = type.GetField(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { object value = field.GetValue(player); if (value != null) { string text = value.ToString(); if (!string.IsNullOrWhiteSpace(text)) { return text; } } } PropertyInfo property = type.GetProperty(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (!(property != null)) { continue; } object value2 = property.GetValue(player, null); if (value2 != null) { string text2 = value2.ToString(); if (!string.IsNullOrWhiteSpace(text2)) { return text2; } } } } catch { } return string.Empty; } private static string GetPeerName(ZNetPeer peer) { try { Type type = ((object)peer).GetType(); string[] array = new string[5] { "m_playerName", "m_name", "playerName", "name", "Name" }; string[] array2 = array; foreach (string name in array2) { FieldInfo field = type.GetField(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { object value = field.GetValue(peer); if (value != null) { string text = value.ToString(); if (!string.IsNullOrWhiteSpace(text)) { return text; } } } PropertyInfo property = type.GetProperty(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (!(property != null)) { continue; } object value2 = property.GetValue(peer, null); if (value2 != null) { string text2 = value2.ToString(); if (!string.IsNullOrWhiteSpace(text2)) { return text2; } } } } catch { } return string.Empty; } private static string ExtractSteam64(string text) { if (string.IsNullOrWhiteSpace(text)) { return string.Empty; } Match match = Regex.Match(text, "\\d{17}"); return match.Success ? match.Value : string.Empty; } } internal static class GlitnirPayments { [CompilerGenerated] private sealed class <EnumeratePeerIdentifiers>d__6 : IEnumerable<string>, IEnumerable, IEnumerator<string>, IDisposable, IEnumerator { private int <>1__state; private string <>2__current; private int <>l__initialThreadId; private ZNetPeer peer; public ZNetPeer <>3__peer; pri