From 7dfc2bbc1b08ed68083bd9be95db17e3ff412fbe Mon Sep 17 00:00:00 2001 From: RaidMax Date: Mon, 19 Jun 2017 13:58:01 -0400 Subject: [PATCH] I apparently initialized the commands for each server, which result in 114 commands being added. That is now fixed. Hopefully this is the final fix for chat remaining on empty servers. (order matters!) Configuration setting to allow multiple owners. Fixed setlevel issues. Organized Server class variables --- Admin/Application.csproj | 2 +- Admin/Kayak.cs | 10 +- Admin/Main.cs | 4 +- Admin/Manager.cs | 124 +++-- Admin/PenaltyList.cs | 8 +- Admin/Server.cs | 102 ++-- ...fig.cs => ServerConfigurationGenerator.cs} | 35 +- Admin/WebService.cs | 28 +- Admin/lib/SharedLibrary.dll | Bin 98816 -> 102912 bytes IW4MAdmin.sln | 448 +++++++++--------- Plugins/VoteMap/Plugin.cs | 2 +- SharedLibrary/Commands/NativeCommands.cs | 97 ++-- SharedLibrary/Event.cs | 3 +- SharedLibrary/Server.cs | 131 ++--- SharedLibrary/ServerConfiguration.cs | 18 + SharedLibrary/SharedLibrary.csproj | 1 + SharedLibrary/Utilities.cs | 4 +- 17 files changed, 503 insertions(+), 514 deletions(-) rename Admin/{ServerConfig.cs => ServerConfigurationGenerator.cs} (64%) create mode 100644 SharedLibrary/ServerConfiguration.cs diff --git a/Admin/Application.csproj b/Admin/Application.csproj index 599b29c85..a07385ce5 100644 --- a/Admin/Application.csproj +++ b/Admin/Application.csproj @@ -122,7 +122,6 @@ - @@ -135,6 +134,7 @@ Settings.settings + diff --git a/Admin/Kayak.cs b/Admin/Kayak.cs index 82d7cedac..1a62ccbc8 100644 --- a/Admin/Kayak.cs +++ b/Admin/Kayak.cs @@ -18,20 +18,20 @@ namespace IW4MAdmin if (e.GetType() == typeof(NullReferenceException)) return; - Manager.GetInstance().Logger.WriteWarning("Web service has encountered an error - " + e.Message); - Manager.GetInstance().Logger.WriteDebug($"Stack Trace: {e.StackTrace}"); + ApplicationManager.GetInstance().Logger.WriteWarning("Web service has encountered an error - " + e.Message); + ApplicationManager.GetInstance().Logger.WriteDebug($"Stack Trace: {e.StackTrace}"); if (e.InnerException != null) { - Manager.GetInstance().Logger.WriteDebug($"Inner Exception: {e.InnerException.Message}"); - Manager.GetInstance().Logger.WriteDebug($"Inner Stack Trace: {e.InnerException.StackTrace}"); + ApplicationManager.GetInstance().Logger.WriteDebug($"Inner Exception: {e.InnerException.Message}"); + ApplicationManager.GetInstance().Logger.WriteDebug($"Inner Stack Trace: {e.InnerException.StackTrace}"); } } public void OnStop(IScheduler scheduler) { - Manager.GetInstance().Logger.WriteInfo("Web service has been stopped..."); + ApplicationManager.GetInstance().Logger.WriteInfo("Web service has been stopped..."); } } diff --git a/Admin/Main.cs b/Admin/Main.cs index 379dbcca9..b0d0b61f3 100644 --- a/Admin/Main.cs +++ b/Admin/Main.cs @@ -11,7 +11,7 @@ namespace IW4MAdmin class Program { static public double Version { get; private set; } - static private Manager ServerManager; + static private ApplicationManager ServerManager; static void Main(string[] args) { @@ -33,7 +33,7 @@ namespace IW4MAdmin { CheckDirectories(); - ServerManager = Manager.GetInstance(); + ServerManager = ApplicationManager.GetInstance(); ServerManager.Init(); Task.Run(() => diff --git a/Admin/Manager.cs b/Admin/Manager.cs index f74847ad7..b7773ded2 100644 --- a/Admin/Manager.cs +++ b/Admin/Manager.cs @@ -2,39 +2,44 @@ using System.Collections.Generic; using System.Linq; using System.Threading; -using SharedLibrary; using System.IO; using System.Threading.Tasks; +using SharedLibrary; +using SharedLibrary.Interfaces; +using SharedLibrary.Commands; +using SharedLibrary.Helpers; + namespace IW4MAdmin { - class Manager : SharedLibrary.Interfaces.IManager + class ApplicationManager : IManager { - static Manager Instance; public List Servers { get; private set; } - List TaskStatuses; + public ILogger Logger { get; private set; } + public bool Running { get; private set; } + + static ApplicationManager Instance; + List TaskStatuses; Database ClientDatabase; Database AliasesDatabase; - SharedLibrary.Interfaces.IPenaltyList ClientPenalties; + IPenaltyList ClientPenalties; List Commands; - List MessageTokens; + List MessageTokens; Kayak.IScheduler webServiceTask; Thread WebThread; - public SharedLibrary.Interfaces.ILogger Logger { get; private set; } - public bool Running { get; private set; } #if FTP_LOG const int UPDATE_FREQUENCY = 15000; #else const int UPDATE_FREQUENCY = 300; #endif - private Manager() + private ApplicationManager() { Logger = new Logger("Logs/IW4MAdmin.log"); Servers = new List(); Commands = new List(); - TaskStatuses = new List(); - MessageTokens = new List(); + TaskStatuses = new List(); + MessageTokens = new List(); ClientDatabase = new ClientsDB("Database/clients.rm"); AliasesDatabase = new AliasesDB("Database/aliases.rm"); @@ -51,40 +56,23 @@ namespace IW4MAdmin return Commands; } - public static Manager GetInstance() + public static ApplicationManager GetInstance() { - return Instance ?? (Instance = new Manager()); + return Instance ?? (Instance = new ApplicationManager()); } public void Init() { - SharedLibrary.WebService.Init(); - SharedLibrary.Plugins.PluginImporter.Load(this); - - foreach (var Plugin in SharedLibrary.Plugins.PluginImporter.ActivePlugins) - { - try - { - Plugin.OnLoadAsync(); - } - - catch (Exception e) - { - Logger.WriteError($"An error occured loading plugin {Plugin.Name}"); - Logger.WriteDebug($"Exception: {e.Message}"); - Logger.WriteDebug($"Stack Trace: {e.StackTrace}"); - } - } - + #region CONFIG var Configs = Directory.EnumerateFiles("config/servers").Where(x => x.Contains(".cfg")); if (Configs.Count() == 0) - ServerConfig.Generate(); + ServerConfigurationGenerator.Generate(); foreach (var file in Configs) { - var Conf = ServerConfig.Read(file); - var ServerInstance = new IW4MServer(this, Conf.IP, Conf.Port, Conf.Password); + var Conf = ServerConfiguration.Read(file); + var ServerInstance = new IW4MServer(this, Conf); Task.Run(async () => { @@ -111,7 +99,68 @@ namespace IW4MAdmin }); } + #endregion + #region PLUGINS + SharedLibrary.Plugins.PluginImporter.Load(this); + + foreach (var Plugin in SharedLibrary.Plugins.PluginImporter.ActivePlugins) + { + try + { + Plugin.OnLoadAsync(); + } + + catch (Exception e) + { + Logger.WriteError($"An error occured loading plugin {Plugin.Name}"); + Logger.WriteDebug($"Exception: {e.Message}"); + Logger.WriteDebug($"Stack Trace: {e.StackTrace}"); + } + } + #endregion + + #region COMMANDS + if ((ClientDatabase as ClientsDB).GetOwner() != null) + Commands.Add(new COwner("owner", "claim ownership of the server", "owner", Player.Permission.User, 0, false)); + + Commands.Add(new CQuit("quit", "quit IW4MAdmin", "q", Player.Permission.Owner, 0, false)); + Commands.Add(new CKick("kick", "kick a player by name. syntax: !kick .", "k", Player.Permission.Trusted, 2, true)); + Commands.Add(new CSay("say", "broadcast message to all players. syntax: !say .", "s", Player.Permission.Moderator, 1, false)); + Commands.Add(new CTempBan("tempban", "temporarily ban a player for 1 hour. syntax: !tempban .", "tb", Player.Permission.Moderator, 2, true)); + Commands.Add(new CBan("ban", "permanently ban a player from the server. syntax: !ban ", "b", Player.Permission.SeniorAdmin, 2, true)); + Commands.Add(new CWhoAmI("whoami", "give information about yourself. syntax: !whoami.", "who", Player.Permission.User, 0, false)); + Commands.Add(new CList("list", "list active clients syntax: !list.", "l", Player.Permission.Moderator, 0, false)); + Commands.Add(new CHelp("help", "list all available commands. syntax: !help.", "h", Player.Permission.User, 0, false)); + Commands.Add(new CFastRestart("fastrestart", "fast restart current map. syntax: !fastrestart.", "fr", Player.Permission.Moderator, 0, false)); + Commands.Add(new CMapRotate("maprotate", "cycle to the next map in rotation. syntax: !maprotate.", "mr", Player.Permission.Administrator, 0, false)); + Commands.Add(new CSetLevel("setlevel", "set player to specified administration level. syntax: !setlevel .", "sl", Player.Permission.Owner, 2, true)); + Commands.Add(new CUsage("usage", "get current application memory usage. syntax: !usage.", "us", Player.Permission.Moderator, 0, false)); + Commands.Add(new CUptime("uptime", "get current application running time. syntax: !uptime.", "up", Player.Permission.Moderator, 0, false)); + Commands.Add(new Cwarn("warn", "warn player for infringing rules syntax: !warn .", "w", Player.Permission.Trusted, 2, true)); + Commands.Add(new CWarnClear("warnclear", "remove all warning for a player syntax: !warnclear .", "wc", Player.Permission.Trusted, 1, true)); + Commands.Add(new CUnban("unban", "unban player by database id. syntax: !unban @.", "ub", Player.Permission.SeniorAdmin, 1, true)); + Commands.Add(new CListAdmins("admins", "list currently connected admins. syntax: !admins.", "a", Player.Permission.User, 0, false)); + Commands.Add(new CLoadMap("map", "change to specified map. syntax: !map", "m", Player.Permission.Administrator, 1, false)); + Commands.Add(new CFindPlayer("find", "find player in database. syntax: !find ", "f", Player.Permission.SeniorAdmin, 1, false)); + Commands.Add(new CListRules("rules", "list server rules. syntax: !rules", "r", Player.Permission.User, 0, false)); + Commands.Add(new CPrivateMessage("privatemessage", "send message to other player. syntax: !pm ", "pm", Player.Permission.User, 2, true)); + Commands.Add(new CFlag("flag", "flag a suspicious player and announce to admins on join . syntax !flag :", "flag", Player.Permission.Moderator, 2, true)); + Commands.Add(new CReport("report", "report a player for suspicious behaivor. syntax !report ", "rep", Player.Permission.User, 2, true)); + Commands.Add(new CListReports("reports", "get most recent reports. syntax !reports", "reports", Player.Permission.Moderator, 0, false)); + Commands.Add(new CMask("mask", "hide your online presence from online admin list. syntax: !mask", "mask", Player.Permission.Administrator, 0, false)); + Commands.Add(new CListBanInfo("baninfo", "get information about a ban for a player. syntax: !baninfo ", "bi", Player.Permission.Moderator, 1, true)); + Commands.Add(new CListAlias("alias", "get past aliases and ips of a player. syntax: !alias ", "known", Player.Permission.Moderator, 1, true)); + Commands.Add(new CExecuteRCON("rcon", "send rcon command to server. syntax: !rcon ", "rcon", Player.Permission.Owner, 1, false)); + Commands.Add(new CFindAllPlayers("findall", "find a player by their aliase(s). syntax: !findall ", "fa", Player.Permission.Moderator, 1, false)); + Commands.Add(new CPlugins("plugins", "view all loaded plugins. syntax: !plugins", "p", Player.Permission.Administrator, 0, false)); + + foreach (Command C in SharedLibrary.Plugins.PluginImporter.ActiveCommands) + Commands.Add(C); + #endregion + + #region WEBSERVICE + SharedLibrary.WebService.Init(); webServiceTask = WebService.GetScheduler(); WebThread = new Thread(webServiceTask.Start) @@ -120,6 +169,7 @@ namespace IW4MAdmin }; WebThread.Start(); + #endregion Running = true; } @@ -165,17 +215,17 @@ namespace IW4MAdmin return AliasesDatabase as AliasesDB; } - public SharedLibrary.Interfaces.IPenaltyList GetClientPenalties() + public IPenaltyList GetClientPenalties() { return ClientPenalties; } - public SharedLibrary.Interfaces.ILogger GetLogger() + public ILogger GetLogger() { return Logger; } - public IList GetMessageTokens() + public IList GetMessageTokens() { return MessageTokens; } diff --git a/Admin/PenaltyList.cs b/Admin/PenaltyList.cs index d6c969132..e40ad159a 100644 --- a/Admin/PenaltyList.cs +++ b/Admin/PenaltyList.cs @@ -15,22 +15,22 @@ namespace IW4MAdmin public void AddPenalty(Penalty P) { - Manager.GetInstance().GetClientDatabase().AddBan(P); + ApplicationManager.GetInstance().GetClientDatabase().AddBan(P); } public void RemovePenalty(Penalty P) { - Manager.GetInstance().GetClientDatabase().RemoveBan(P.OffenderID); + ApplicationManager.GetInstance().GetClientDatabase().RemoveBan(P.OffenderID); } public List FindPenalties(Player P) { - return Manager.GetInstance().GetClientDatabase().GetClientPenalties(P); + return ApplicationManager.GetInstance().GetClientDatabase().GetClientPenalties(P); } public List AsChronoList(int offset, int count) { - return Manager.GetInstance().GetClientDatabase().GetPenaltiesChronologically(offset, count); + return ApplicationManager.GetInstance().GetClientDatabase().GetPenaltiesChronologically(offset, count); } } } diff --git a/Admin/Server.cs b/Admin/Server.cs index 65a484e57..3ac34efc3 100644 --- a/Admin/Server.cs +++ b/Admin/Server.cs @@ -3,18 +3,17 @@ using System.Collections.Generic; using System.Threading; using System.IO; using System.Linq; +using System.Threading.Tasks; + using SharedLibrary; using SharedLibrary.Network; -using System.Threading.Tasks; +using SharedLibrary.Interfaces; namespace IW4MAdmin { public class IW4MServer : Server { - public IW4MServer(SharedLibrary.Interfaces.IManager mgr, string address, int port, string password) : base(mgr, address, port, password) - { - InitializeCommands(); - } + public IW4MServer(IManager mgr, ServerConfiguration cfg) : base(mgr, cfg) { } private void GetAliases(List returnAliases, Aliases currentAlias) { @@ -76,7 +75,6 @@ namespace IW4MAdmin Manager.GetAliasesDatabase().AddPlayerAliases(new Aliases(NewPlayer.DatabaseID, NewPlayer.Name, NewPlayer.IP)); } - List Admins = Manager.GetClientDatabase().GetAdmins(); if (Admins.Find(x => x.Name == P.Name) != null) { @@ -108,9 +106,7 @@ namespace IW4MAdmin // and ips if (NewPlayer.Alias.IPS.Find(i => i.Equals(P.IP)) == null || P.IP == null || P.IP == String.Empty) - { NewPlayer.Alias.IPS.Add(P.IP); - } NewPlayer.SetIP(P.IP); @@ -127,7 +123,7 @@ namespace IW4MAdmin return true; } - List newPlayerAliases = GetPlayerAliases(NewPlayer); + var newPlayerAliases = GetPlayerAliases(NewPlayer); foreach (Player aP in newPlayerAliases) // lets check their aliases { @@ -209,21 +205,7 @@ namespace IW4MAdmin return null; } - else - { - Player P = null; - try - { - P = Players[pID]; - return P; - } - catch (Exception) - { - Logger.WriteError("Client index is invalid - " + pID); - Logger.WriteDebug(L.ToString()); - return null; - } - } + return Players[pID]; } //Check ban list for every banned player and return ban if match is found @@ -272,7 +254,6 @@ namespace IW4MAdmin int cNum = -1; int.TryParse(Args[0], out cNum); - if (Args[0] == String.Empty) return C; @@ -296,9 +277,10 @@ namespace IW4MAdmin E.Target = Players[cNum]; } - E.Target = GetClientByName(E.Data.Trim()); + if (E.Target == null) // Find active player including quotes (multiple words) + E.Target = GetClientByName(E.Data.Trim()); - if (E.Target == null) + if (E.Target == null) // Find active player as single word E.Target = GetClientByName(Args[0]); if (E.Target == null && C.RequiresTarget) @@ -312,17 +294,13 @@ namespace IW4MAdmin public override async Task ExecuteEvent(Event E) { - await ProcessEvent(E); + await ProcessEvent(E); - foreach (SharedLibrary.Interfaces.IPlugin P in SharedLibrary.Plugins.PluginImporter.ActivePlugins) + foreach (IPlugin P in SharedLibrary.Plugins.PluginImporter.ActivePlugins) { try { -#if DEBUG await P.OnEventAsync(E, this); -#else - P.OnEventAsync(E, this); -#endif } catch (Exception Except) @@ -381,19 +359,13 @@ namespace IW4MAdmin Logger.WriteError($"{e.Message} {IP}:{Port}, reducing polling rate"); } - lastMessage = DateTime.Now - start; + LastMessage = DateTime.Now - start; lastCount = DateTime.Now; if ((DateTime.Now - tickTime).TotalMilliseconds >= 1000) { - // We don't want to await here, just in case user plugins are really slow :c foreach (var Plugin in SharedLibrary.Plugins.PluginImporter.ActivePlugins) -#if !DEBUG - Plugin.OnTickAsync(this); -#else await Plugin.OnTickAsync(this); -#endif - tickTime = DateTime.Now; } @@ -405,24 +377,24 @@ namespace IW4MAdmin playerCountStart = DateTime.Now; } - if (lastMessage.TotalSeconds > messageTime && messages.Count > 0 && Players.Count > 0) + if (LastMessage.TotalSeconds > MessageTime && BroadcastMessages.Count > 0 && Players.Count > 0) { - await Broadcast(Utilities.ProcessMessageToken(Manager.GetMessageTokens(), messages[nextMessage])); - if (nextMessage == (messages.Count - 1)) - nextMessage = 0; + await Broadcast(Utilities.ProcessMessageToken(Manager.GetMessageTokens(), BroadcastMessages[NextMessage])); + if (NextMessage == (BroadcastMessages.Count - 1)) + NextMessage = 0; else - nextMessage++; + NextMessage++; start = DateTime.Now; } //logFile = new IFile(); - if (l_size != logFile.Length()) + if (l_size != LogFile.Length()) { // this should be the longest running task - await Task.FromResult(lines = logFile.Tail(12)); + await Task.FromResult(lines = LogFile.Tail(12)); if (lines != oldLines) { - l_size = logFile.Length(); + l_size = LogFile.Length(); int end; if (lines.Length == oldLines.Length) end = lines.Length - 1; @@ -459,7 +431,7 @@ namespace IW4MAdmin } } oldLines = lines; - l_size = logFile.Length(); + l_size = LogFile.Length(); } #if DEBUG == false catch (SharedLibrary.Exceptions.NetworkException) @@ -501,7 +473,7 @@ namespace IW4MAdmin } this.Hostname = hostname.Value.StripColors(); - this.CurrentMap = maps.Find(m => m.Name == mapname.Value) ?? new Map(mapname.Value, mapname.Value); + this.CurrentMap = Maps.Find(m => m.Name == mapname.Value) ?? new Map(mapname.Value, mapname.Value); this.MaxClients = maxplayers.Value; this.FSGame = game.Value; @@ -531,7 +503,7 @@ namespace IW4MAdmin #endif } else - logFile = new IFile(logPath); + LogFile = new IFile(logPath); Logger.WriteInfo("Log file is " + logPath); await ExecuteEvent(new Event(Event.GType.Start, "Server started", null, null, this)); @@ -543,26 +515,15 @@ namespace IW4MAdmin //Process any server event override protected async Task ProcessEvent(Event E) { - //todo: move - while (ChatHistory.Count > Math.Ceiling((double)ClientNum / 2)) - ChatHistory.RemoveAt(0); if (E.Type == Event.GType.Connect) { ChatHistory.Add(new Chat(E.Origin.Name, "CONNECTED", DateTime.Now)); - return; } if (E.Type == Event.GType.Disconnect) { ChatHistory.Add(new Chat(E.Origin.Name, "DISCONNECTED", DateTime.Now)); - - // the last client hasn't fully disconnected yet - // so there will still be at least 1 client left - if (ClientNum < 2) - ChatHistory.Clear(); - - return; } if (E.Type == Event.GType.Kill) @@ -574,6 +535,15 @@ namespace IW4MAdmin await ExecuteEvent(new Event(Event.GType.Death, "suicide", E.Target, null, this)); } + //todo: move + while (ChatHistory.Count > Math.Ceiling((double)ClientNum / 2)) + ChatHistory.RemoveAt(0); + + // the last client hasn't fully disconnected yet + // so there will still be at least 1 client left + if (ClientNum < 2) + ChatHistory.Clear(); + if (E.Type == Event.GType.Say) { if (E.Data.Length < 2) // ITS A LIE! @@ -643,7 +613,7 @@ namespace IW4MAdmin FSGame = (await this.GetDvarAsync("fs_game")).Value.StripColors(); string mapname = this.GetDvarAsync("mapname").Result.Value; - CurrentMap = maps.Find(m => m.Name == mapname) ?? new Map(mapname, mapname); + CurrentMap = Maps.Find(m => m.Name == mapname) ?? new Map(mapname, mapname); return; } @@ -779,9 +749,9 @@ namespace IW4MAdmin catch (Exception E) { Logger.WriteError("Unable to reload configs! - " + E.Message); - messages = new List(); - maps = new List(); - rules = new List(); + BroadcastMessages = new List(); + Maps = new List(); + Rules = new List(); return false; } } diff --git a/Admin/ServerConfig.cs b/Admin/ServerConfigurationGenerator.cs similarity index 64% rename from Admin/ServerConfig.cs rename to Admin/ServerConfigurationGenerator.cs index 31070fdc4..f5abeb256 100644 --- a/Admin/ServerConfig.cs +++ b/Admin/ServerConfigurationGenerator.cs @@ -1,33 +1,23 @@ -using System; +using SharedLibrary; +using System; using System.Collections.Generic; using System.Linq; -using System.Text; using System.Net; - -using SharedLibrary.Interfaces; - +using System.Text; +using System.Threading.Tasks; namespace IW4MAdmin { - public class ServerConfig : Serialize + class ServerConfigurationGenerator { - public string IP; - public int Port; - public string Password; - public string FtpPrefix; - - public override string Filename() - { - return $"config/servers/{IP}_{Port}.cfg"; - } - - public static ServerConfig Generate() + public static ServerConfiguration Generate() { string IP = String.Empty; int Port = 0; string Password; + bool AllowMultipleOwners; - while(IP == String.Empty) + while (IP == String.Empty) { try { @@ -43,7 +33,7 @@ namespace IW4MAdmin } } - while(Port == 0) + while (Port == 0) { try { @@ -60,10 +50,13 @@ namespace IW4MAdmin Console.Write("Enter server RCON password: "); Password = Console.ReadLine(); - var config = new ServerConfig() { IP = IP, Password = Password, Port = Port }; + Console.Write("Allow multiple owners? [y/n]: "); + AllowMultipleOwners = (Console.ReadLine().ToLower().FirstOrDefault() as char?) == 'y'; + + var config = new ServerConfiguration() { IP = IP, Password = Password, Port = Port, AllowMultipleOwners = AllowMultipleOwners }; config.Write(); - Console.WriteLine("Config saved, add another? [y/n]:"); + Console.Write("Configuration saved, add another? [y/n]:"); if (Console.ReadLine().ToLower().First() == 'y') Generate(); diff --git a/Admin/WebService.cs b/Admin/WebService.cs index 4c0ff6fca..45fb6b15d 100644 --- a/Admin/WebService.cs +++ b/Admin/WebService.cs @@ -55,7 +55,7 @@ namespace IW4MAdmin catch (Exception e) { - Manager.GetInstance().Logger.WriteError($"Unable to start webservice ( port is probably in use ): {e.Message}"); + ApplicationManager.GetInstance().Logger.WriteError($"Unable to start webservice ( port is probably in use ): {e.Message}"); } } @@ -194,7 +194,7 @@ namespace IW4MAdmin { var info = new List(); - foreach (Server S in Manager.GetInstance().Servers) + foreach (Server S in ApplicationManager.GetInstance().Servers) { ServerInfo eachServer = new ServerInfo() { @@ -307,11 +307,11 @@ namespace IW4MAdmin if (querySet["server"] != null) { - Server S = Manager.GetInstance().Servers.ToList().Find(x => (x.GetPort().ToString() == querySet["server"])); + Server S = ApplicationManager.GetInstance().Servers.ToList().Find(x => (x.GetPort().ToString() == querySet["server"])); if (S != null) { - Player admin = Manager.GetInstance().GetClientDatabase().GetPlayer(querySet["IP"]); + Player admin = ApplicationManager.GetInstance().GetClientDatabase().GetPlayer(querySet["IP"]); if (admin == null) admin = new Player("RestUser", "-1", -1, (int)Player.Permission.User); @@ -382,7 +382,7 @@ namespace IW4MAdmin try { //selectedPenalties = Manager.GetInstance().Servers.First().Bans.OrderByDescending(x => x.When).ToList().GetRange(Convert.ToInt32(querySet["from"]), 15); - selectedPenalties = ((Manager.GetInstance().GetClientPenalties()) as PenaltyList).AsChronoList(Convert.ToInt32(querySet["from"]), 15).OrderByDescending(b => b.When).ToList(); + selectedPenalties = ((ApplicationManager.GetInstance().GetClientPenalties()) as PenaltyList).AsChronoList(Convert.ToInt32(querySet["from"]), 15).OrderByDescending(b => b.When).ToList(); } catch (Exception) @@ -394,8 +394,8 @@ namespace IW4MAdmin foreach (var p in selectedPenalties) { - Player admin = Manager.GetInstance().GetClientDatabase().GetPlayer(p.PenaltyOriginID, 0); - Player penalized = Manager.GetInstance().GetClientDatabase().GetPlayer(p.OffenderID, 0); + Player admin = ApplicationManager.GetInstance().GetClientDatabase().GetPlayer(p.PenaltyOriginID, 0); + Player penalized = ApplicationManager.GetInstance().GetClientDatabase().GetPlayer(p.OffenderID, 0); if (admin == null && penalized == null) continue; if (admin == null) @@ -538,7 +538,7 @@ namespace IW4MAdmin HttpResponse resp = new HttpResponse() { contentType = GetContentType(), - content = Newtonsoft.Json.JsonConvert.SerializeObject(((Manager.GetInstance().GetClientPenalties()) as PenaltyList).AsChronoList(Convert.ToInt32(querySet["from"]), 15), Newtonsoft.Json.Formatting.Indented, new Newtonsoft.Json.JsonConverter[] { new Newtonsoft.Json.Converters.StringEnumConverter() }), + content = Newtonsoft.Json.JsonConvert.SerializeObject(((ApplicationManager.GetInstance().GetClientPenalties()) as PenaltyList).AsChronoList(Convert.ToInt32(querySet["from"]), 15), Newtonsoft.Json.Formatting.Indented, new Newtonsoft.Json.JsonConverter[] { new Newtonsoft.Json.Converters.StringEnumConverter() }), additionalHeaders = new Dictionary() }; return resp; @@ -631,27 +631,27 @@ namespace IW4MAdmin contentType = GetContentType(), additionalHeaders = new Dictionary() }; - bool authed = Manager.GetInstance().GetClientDatabase().GetAdmins().FindAll(x => x.IP == querySet["IP"]).Count > 0; + bool authed = ApplicationManager.GetInstance().GetClientDatabase().GetAdmins().FindAll(x => x.IP == querySet["IP"]).Count > 0; bool recent = false; if (querySet["id"] != null) { - matchedPlayers.Add(Manager.GetInstance().GetClientDatabase().GetPlayer(Convert.ToInt32(querySet["id"]))); + matchedPlayers.Add(ApplicationManager.GetInstance().GetClientDatabase().GetPlayer(Convert.ToInt32(querySet["id"]))); } else if (querySet["npID"] != null) { - matchedPlayers.Add(Manager.GetInstance().GetClientDatabase().GetPlayers(new List { querySet["npID"] }).First()); + matchedPlayers.Add(ApplicationManager.GetInstance().GetClientDatabase().GetPlayers(new List { querySet["npID"] }).First()); } else if (querySet["name"] != null) { - matchedPlayers = Manager.GetInstance().GetClientDatabase().FindPlayers(querySet["name"]); + matchedPlayers = ApplicationManager.GetInstance().GetClientDatabase().FindPlayers(querySet["name"]); } else if (querySet["recent"] != null) { - matchedPlayers = Manager.GetInstance().GetClientDatabase().GetRecentPlayers(); + matchedPlayers = ApplicationManager.GetInstance().GetClientDatabase().GetRecentPlayers(); recent = true; } @@ -675,7 +675,7 @@ namespace IW4MAdmin if (!recent) { - foreach (var a in Manager.GetInstance().Servers.First().GetAliases(pp)) + foreach (var a in ApplicationManager.GetInstance().Servers.First().GetAliases(pp)) { eachPlayer.playerAliases = a.Names; eachPlayer.playerIPs = a.IPS; diff --git a/Admin/lib/SharedLibrary.dll b/Admin/lib/SharedLibrary.dll index 61365399fc7765174bf9354277f5a98cc217e1c6..de75b75786243b195a5d582d8f1aabd96b75c7d6 100644 GIT binary patch literal 102912 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⪚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�QG8 z&&CuD>xHDH3Uycko-ofZ;E1e|I?cLHGm9Rpj9`zgnO7U}8B`w*pr7zKw`=gsVV5Rg zb9rXKws0)K+zDB7v^kyU>`gGInGl*0rz5EMyr2?(FklcnFDVNgK9)vd4bho{J4YU< zONWXrG`p3Wg%RQA0LD(f)CiB(Ky5KU(lKPaKENF+b{ftvwuxozW~!NO2bo3AVlz?~sq)6ULpBLLOy3_6V@5;a zIJY-ujLjUQ89KHxf?u@26RC+Vfl~TtNBF_A7cCh6H32q_2~ZL7N#o%bEn4TNi9(H| z74%4SP|!g+e$w*~9kVr=i!9M3C7SdmSX9~%Pd3PXQYcuZ43#)B!kGsKj~_Cj8u@7E z&$v~>@fXr?;6W!D)4HcpIh+jlz(QG}h+Wqeo_rp;Uq`E=7@XTqye0zwxsZ!J9i5f2 zaBB!wmWpr@G;o`Plpr>Ihw)pF?j?sJ4b=*jEGG1aTS1QU6F;P0@QFarZ5kC$-p8;ljJ+BVTwt64|n8^L4nIV5wEH zrmamwC$?@{AB#7iSl_f|`=<5LtXt!uO9$H@BWi z-8t|5%WcrFie6_v;8&=Han0_^t;N@Zm#j2+GeTEm!nXB$**L!xj4wTM*fE@@wK%j zE8SqJZI>f(kNbkml6B|Okiu77O4e+))Yi-Oib*D4l_*(pPATvsOeJg0B?bNApOV$C zx72l)qmok4??WzGbuP_xOj^l$b9L#yySil6otD~hIcizeeU)&@>T?N`gO#^&m#jHg z$HiaJDp`Fl;pp!!maI0{6yaxHN>-Y?FTUorWVN{_iSS0hySQZCx#;Z1`@Kt6dc6)| zr1(*Wl67BCkn$q)k~Qb*)qGGv7EkXtIAsaP{myfkV&}c$CHth;wrz8KYx9;JiS;L9 zLy7fGP4TVkhlaMt)?c?dKGYoB65k$;Vd;~<1@GT=j0kI{MCC z|DKP0}ICLhM-LIN$A? zJI?Q~te4q*yl4g;$Cq?a1n&>eCDvmx#^<4m3v3vR50RYz)_ku8G73e#VD?KV6MBYD>5B^VG|8z!Ih{!2{dHWw<3$cz$Ab zI?L@txM|u_Ej*KR{#tzSAo0XTAMW`*f_I7a0_&9Lm-O4j_5kPK@A?1rC)g(gW8k0u z#j~68=LgjLEhhm#9S9a$<-JyWa61m~@#}PM>S3u>inaQY%Nw2e&KCE%4dyHLN&iD= z)B;U>a!}u&I=iK_Qf3pzt^YOQW*YE7U4fbwp2pHQ?daQiaL=LqUFpf=GhDo5@&JDM zY@PY*P$85u{qc!Cd?-NZ&~IDeQz!g0PXY4&wJuP}*JW|ccnS`5;I4;48~Uk7-XCo0 zZpQsp5&B30{N{gt+ zRRsUGfS%2`tx4fki{zi%j+PXkWa8a&S=`@ixT#QzeI9iBprlB*;T>a|vu}j{7U6pj z+RA{VyyG{n!0r72@gmSDXLq Ny8L-h|9v>{e*u?$h3fzS diff --git a/IW4MAdmin.sln b/IW4MAdmin.sln index 73d7081ad..c6981bd63 100644 --- a/IW4MAdmin.sln +++ b/IW4MAdmin.sln @@ -54,166 +54,166 @@ Global Release-Stable|x86 = Release-Stable|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|Any CPU.ActiveCfg = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|Any CPU.Build.0 = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|x64.ActiveCfg = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|x64.Build.0 = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|x86.ActiveCfg = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|x86.Build.0 = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|Any CPU.ActiveCfg = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|Any CPU.Build.0 = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|x64.ActiveCfg = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|x64.Build.0 = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|x86.ActiveCfg = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|x86.Build.0 = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|Any CPU.ActiveCfg = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|Any CPU.Build.0 = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|x64.ActiveCfg = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|x64.Build.0 = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|x86.ActiveCfg = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|x86.Build.0 = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|Any CPU.ActiveCfg = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|Any CPU.Build.0 = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|x64.ActiveCfg = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|x64.Build.0 = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|x86.ActiveCfg = Release-Stable|Any CPU - {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|x86.Build.0 = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|Any CPU.ActiveCfg = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|Any CPU.Build.0 = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|x64.ActiveCfg = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|x64.Build.0 = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|x86.ActiveCfg = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|x86.Build.0 = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|Any CPU.ActiveCfg = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|Any CPU.Build.0 = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|x64.ActiveCfg = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|x64.Build.0 = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|x86.ActiveCfg = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|x86.Build.0 = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|Any CPU.ActiveCfg = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|Any CPU.Build.0 = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|x64.ActiveCfg = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|x64.Build.0 = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|x86.ActiveCfg = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|x86.Build.0 = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|Any CPU.ActiveCfg = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|Any CPU.Build.0 = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|x64.ActiveCfg = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|x64.Build.0 = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|x86.ActiveCfg = Release-Stable|Any CPU - {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|x86.Build.0 = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|Any CPU.ActiveCfg = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|Any CPU.Build.0 = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|x64.ActiveCfg = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|x64.Build.0 = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|x86.ActiveCfg = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|x86.Build.0 = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|Any CPU.ActiveCfg = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|Any CPU.Build.0 = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|x64.ActiveCfg = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|x64.Build.0 = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|x86.ActiveCfg = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|x86.Build.0 = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|Any CPU.ActiveCfg = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|Any CPU.Build.0 = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|x64.ActiveCfg = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|x64.Build.0 = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|x86.ActiveCfg = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|x86.Build.0 = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|Any CPU.ActiveCfg = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|Any CPU.Build.0 = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|x64.ActiveCfg = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|x64.Build.0 = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|x86.ActiveCfg = Release-Stable|Any CPU - {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|x86.Build.0 = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|Any CPU.ActiveCfg = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|Any CPU.Build.0 = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|x64.ActiveCfg = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|x64.Build.0 = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|x86.ActiveCfg = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|x86.Build.0 = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|Any CPU.ActiveCfg = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|Any CPU.Build.0 = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|x64.ActiveCfg = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|x64.Build.0 = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|x86.ActiveCfg = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|x86.Build.0 = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|Any CPU.ActiveCfg = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|Any CPU.Build.0 = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|x64.ActiveCfg = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|x64.Build.0 = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|x86.ActiveCfg = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|x86.Build.0 = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|Any CPU.ActiveCfg = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|Any CPU.Build.0 = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|x64.ActiveCfg = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|x64.Build.0 = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|x86.ActiveCfg = Release-Stable|Any CPU - {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|x86.Build.0 = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Debug|Any CPU.ActiveCfg = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Debug|Any CPU.Build.0 = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Debug|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Debug|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Debug|x64.ActiveCfg = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Debug|x64.Build.0 = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Debug|x86.ActiveCfg = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Debug|x86.Build.0 = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release|Any CPU.ActiveCfg = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release|Any CPU.Build.0 = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release|x64.ActiveCfg = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release|x64.Build.0 = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release|x86.ActiveCfg = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release|x86.Build.0 = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Nightly|Any CPU.ActiveCfg = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Nightly|Any CPU.Build.0 = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Nightly|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Nightly|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Nightly|x64.ActiveCfg = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Nightly|x64.Build.0 = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Nightly|x86.ActiveCfg = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Nightly|x86.Build.0 = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Stable|Any CPU.ActiveCfg = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Stable|Any CPU.Build.0 = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Stable|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Stable|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Stable|x64.ActiveCfg = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Stable|x64.Build.0 = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Stable|x86.ActiveCfg = Release-Stable|Any CPU - {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Stable|x86.Build.0 = Release-Stable|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|x64.ActiveCfg = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|x64.Build.0 = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|x86.ActiveCfg = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Debug|x86.Build.0 = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|Any CPU.ActiveCfg = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|Any CPU.Build.0 = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|Mixed Platforms.ActiveCfg = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|Mixed Platforms.Build.0 = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|x64.ActiveCfg = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|x64.Build.0 = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|x86.ActiveCfg = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release|x86.Build.0 = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|Any CPU.ActiveCfg = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|Any CPU.Build.0 = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|Mixed Platforms.ActiveCfg = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|Mixed Platforms.Build.0 = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|x64.ActiveCfg = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|x64.Build.0 = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|x86.ActiveCfg = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Nightly|x86.Build.0 = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|Any CPU.ActiveCfg = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|Any CPU.Build.0 = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|Mixed Platforms.ActiveCfg = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|Mixed Platforms.Build.0 = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|x64.ActiveCfg = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|x64.Build.0 = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|x86.ActiveCfg = Debug|Any CPU + {DD5DCDA2-51DB-4B1A-922F-5705546E6115}.Release-Stable|x86.Build.0 = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|x64.ActiveCfg = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|x64.Build.0 = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|x86.ActiveCfg = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|x86.Build.0 = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|Any CPU.ActiveCfg = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|Any CPU.Build.0 = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|Mixed Platforms.ActiveCfg = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|Mixed Platforms.Build.0 = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|x64.ActiveCfg = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|x64.Build.0 = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|x86.ActiveCfg = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|x86.Build.0 = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|Any CPU.ActiveCfg = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|Any CPU.Build.0 = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|Mixed Platforms.ActiveCfg = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|Mixed Platforms.Build.0 = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|x64.ActiveCfg = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|x64.Build.0 = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|x86.ActiveCfg = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Nightly|x86.Build.0 = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|Any CPU.ActiveCfg = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|Any CPU.Build.0 = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|Mixed Platforms.ActiveCfg = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|Mixed Platforms.Build.0 = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|x64.ActiveCfg = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|x64.Build.0 = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|x86.ActiveCfg = Debug|Any CPU + {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release-Stable|x86.Build.0 = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|x64.ActiveCfg = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|x64.Build.0 = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|x86.ActiveCfg = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Debug|x86.Build.0 = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|Any CPU.ActiveCfg = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|Any CPU.Build.0 = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|Mixed Platforms.Build.0 = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|x64.ActiveCfg = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|x64.Build.0 = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|x86.ActiveCfg = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release|x86.Build.0 = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|Any CPU.ActiveCfg = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|Any CPU.Build.0 = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|Mixed Platforms.Build.0 = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|x64.ActiveCfg = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|x64.Build.0 = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|x86.ActiveCfg = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Nightly|x86.Build.0 = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|Any CPU.ActiveCfg = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|Any CPU.Build.0 = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|Mixed Platforms.Build.0 = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|x64.ActiveCfg = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|x64.Build.0 = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|x86.ActiveCfg = Debug|Any CPU + {D51EECEB-438A-47DA-870F-7D7B41BC24D6}.Release-Stable|x86.Build.0 = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|x64.ActiveCfg = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|x64.Build.0 = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|x86.ActiveCfg = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Debug|x86.Build.0 = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|Any CPU.ActiveCfg = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|Any CPU.Build.0 = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|Mixed Platforms.ActiveCfg = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|Mixed Platforms.Build.0 = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|x64.ActiveCfg = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|x64.Build.0 = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|x86.ActiveCfg = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release|x86.Build.0 = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|Any CPU.ActiveCfg = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|Any CPU.Build.0 = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|Mixed Platforms.ActiveCfg = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|Mixed Platforms.Build.0 = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|x64.ActiveCfg = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|x64.Build.0 = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|x86.ActiveCfg = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Nightly|x86.Build.0 = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|Any CPU.ActiveCfg = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|Any CPU.Build.0 = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|Mixed Platforms.ActiveCfg = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|Mixed Platforms.Build.0 = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|x64.ActiveCfg = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|x64.Build.0 = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|x86.ActiveCfg = Debug|Any CPU + {AF097E6B-48D5-4452-9CCF-0A81A21F341D}.Release-Stable|x86.Build.0 = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Debug|x64.ActiveCfg = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Debug|x64.Build.0 = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Debug|x86.ActiveCfg = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Debug|x86.Build.0 = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release|Any CPU.ActiveCfg = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release|Any CPU.Build.0 = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release|Mixed Platforms.ActiveCfg = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release|Mixed Platforms.Build.0 = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release|x64.ActiveCfg = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release|x64.Build.0 = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release|x86.ActiveCfg = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release|x86.Build.0 = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Nightly|Any CPU.ActiveCfg = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Nightly|Any CPU.Build.0 = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Nightly|Mixed Platforms.ActiveCfg = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Nightly|Mixed Platforms.Build.0 = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Nightly|x64.ActiveCfg = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Nightly|x64.Build.0 = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Nightly|x86.ActiveCfg = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Nightly|x86.Build.0 = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Stable|Any CPU.ActiveCfg = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Stable|Any CPU.Build.0 = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Stable|Mixed Platforms.ActiveCfg = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Stable|Mixed Platforms.Build.0 = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Stable|x64.ActiveCfg = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Stable|x64.Build.0 = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Stable|x86.ActiveCfg = Debug|Any CPU + {428D8EB9-ECA3-4A66-AA59-3A944378C33F}.Release-Stable|x86.Build.0 = Debug|Any CPU {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Debug|Any CPU.ActiveCfg = Release-Stable|Any CPU {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Debug|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Debug|x64.ActiveCfg = Release-Stable|Any CPU @@ -230,70 +230,70 @@ Global {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Stable|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Stable|x64.ActiveCfg = Release-Stable|Any CPU {E46C85BD-A99C-484E-BCCE-0F1831C5925E}.Release-Stable|x86.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|Any CPU.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|Any CPU.Build.0 = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|x64.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|x64.Build.0 = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|x86.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|x86.Build.0 = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|Any CPU.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|Any CPU.Build.0 = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|x64.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|x64.Build.0 = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|x86.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|x86.Build.0 = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|Any CPU.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|Any CPU.Build.0 = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|x64.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|x64.Build.0 = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|x86.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|x86.Build.0 = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|Any CPU.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|Any CPU.Build.0 = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|x64.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|x64.Build.0 = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|x86.ActiveCfg = Release-Stable|Any CPU - {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|x86.Build.0 = Release-Stable|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|Any CPU.ActiveCfg = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|Any CPU.Build.0 = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|Mixed Platforms.ActiveCfg = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|Mixed Platforms.Build.0 = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|x64.ActiveCfg = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|x64.Build.0 = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|x86.ActiveCfg = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|x86.Build.0 = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release|Any CPU.Build.0 = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release|x64.ActiveCfg = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release|x64.Build.0 = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release|x86.ActiveCfg = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release|x86.Build.0 = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Nightly|Any CPU.ActiveCfg = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Nightly|Any CPU.Build.0 = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Nightly|Mixed Platforms.ActiveCfg = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Nightly|Mixed Platforms.Build.0 = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Nightly|x64.ActiveCfg = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Nightly|x64.Build.0 = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Nightly|x86.ActiveCfg = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Nightly|x86.Build.0 = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Stable|Any CPU.ActiveCfg = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Stable|Any CPU.Build.0 = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Stable|Mixed Platforms.ActiveCfg = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Stable|Mixed Platforms.Build.0 = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Stable|x64.ActiveCfg = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Stable|x64.Build.0 = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Stable|x86.ActiveCfg = Release|Any CPU - {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Stable|x86.Build.0 = Release|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|x64.ActiveCfg = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|x64.Build.0 = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|x86.ActiveCfg = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Debug|x86.Build.0 = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|Any CPU.ActiveCfg = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|Any CPU.Build.0 = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|Mixed Platforms.ActiveCfg = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|Mixed Platforms.Build.0 = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|x64.ActiveCfg = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|x64.Build.0 = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|x86.ActiveCfg = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release|x86.Build.0 = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|Any CPU.ActiveCfg = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|Any CPU.Build.0 = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|Mixed Platforms.ActiveCfg = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|Mixed Platforms.Build.0 = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|x64.ActiveCfg = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|x64.Build.0 = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|x86.ActiveCfg = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Nightly|x86.Build.0 = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|Any CPU.ActiveCfg = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|Any CPU.Build.0 = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|Mixed Platforms.ActiveCfg = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|Mixed Platforms.Build.0 = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|x64.ActiveCfg = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|x64.Build.0 = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|x86.ActiveCfg = Debug|Any CPU + {C9E821BF-23AD-4CB5-B7F9-B3B99B606650}.Release-Stable|x86.Build.0 = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|x64.ActiveCfg = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|x64.Build.0 = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|x86.ActiveCfg = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Debug|x86.Build.0 = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release|Any CPU.ActiveCfg = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release|Any CPU.Build.0 = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release|Mixed Platforms.ActiveCfg = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release|Mixed Platforms.Build.0 = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release|x64.ActiveCfg = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release|x64.Build.0 = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release|x86.ActiveCfg = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release|x86.Build.0 = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Nightly|Any CPU.ActiveCfg = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Nightly|Any CPU.Build.0 = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Nightly|Mixed Platforms.ActiveCfg = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Nightly|Mixed Platforms.Build.0 = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Nightly|x64.ActiveCfg = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Nightly|x64.Build.0 = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Nightly|x86.ActiveCfg = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Nightly|x86.Build.0 = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Stable|Any CPU.ActiveCfg = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Stable|Any CPU.Build.0 = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Stable|Mixed Platforms.ActiveCfg = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Stable|Mixed Platforms.Build.0 = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Stable|x64.ActiveCfg = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Stable|x64.Build.0 = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Stable|x86.ActiveCfg = Debug|Any CPU + {1479DE87-ACB5-4046-81C8-A0BA5041227D}.Release-Stable|x86.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Plugins/VoteMap/Plugin.cs b/Plugins/VoteMap/Plugin.cs index 7e6f71a99..67236b8bf 100644 --- a/Plugins/VoteMap/Plugin.cs +++ b/Plugins/VoteMap/Plugin.cs @@ -38,7 +38,7 @@ namespace Votemap_Plugin { string mapSearch = E.Data.ToLower().Trim(); // probably not the most optimized way to match the map.. but nothing is time critical here - Map votedMap = E.Owner.maps.Find(m => (m.Alias.ToLower().Contains(mapSearch) || m.Name.Contains(mapSearch))); + Map votedMap = E.Owner.Maps.Find(m => (m.Alias.ToLower().Contains(mapSearch) || m.Name.Contains(mapSearch))); if (votedMap == null) await E.Origin.Tell("^1" + E.Data + " is not a recognized map"); else diff --git a/SharedLibrary/Commands/NativeCommands.cs b/SharedLibrary/Commands/NativeCommands.cs index 88a3785c5..645861996 100644 --- a/SharedLibrary/Commands/NativeCommands.cs +++ b/SharedLibrary/Commands/NativeCommands.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace SharedLibrary.Commands { - class CQuit : Command + public class CQuit : Command { public CQuit(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -17,7 +17,7 @@ namespace SharedLibrary.Commands } } - class COwner : Command + public class COwner : Command { public COwner(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -27,7 +27,6 @@ namespace SharedLibrary.Commands { E.Origin.SetLevel(Player.Permission.Owner); await E.Origin.Tell("Congratulations, you have claimed ownership of this server!"); - E.Owner.owner = E.Origin; E.Owner.Manager.GetClientDatabase().UpdatePlayer(E.Origin); } else @@ -35,7 +34,7 @@ namespace SharedLibrary.Commands } } - class Cwarn : Command + public class Cwarn : Command { public Cwarn(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -43,13 +42,13 @@ namespace SharedLibrary.Commands { E.Target.lastOffense = E.Data.RemoveWords(1); if (E.Origin.Level <= E.Target.Level) - await E.Origin.Tell("You cannot warn " + E.Target.Name); + await E.Origin.Tell($"You do not have the required privileges to warn {E.Target.Name}"); else await E.Target.Warn(E.Target.lastOffense, E.Origin); } } - class CWarnClear : Command + public class CWarnClear : Command { public CWarnClear(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -62,7 +61,7 @@ namespace SharedLibrary.Commands } } - class CKick : Command + public class CKick : Command { public CKick(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -70,13 +69,16 @@ namespace SharedLibrary.Commands { E.Target.lastOffense = E.Data.RemoveWords(1); if (E.Origin.Level > E.Target.Level) + { + await E.Owner.ExecuteEvent(new Event(Event.GType.Kick, E.Data, E.Origin, E.Target, E.Owner)); await E.Target.Kick(E.Target.lastOffense, E.Origin); + } else - await E.Origin.Tell($"You cannot kick {E.Target.Name}"); + await E.Origin.Tell($"You do not have the required privileges to kick {E.Target.Name}"); } } - class CSay : Command + public class CSay : Command { public CSay(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -86,13 +88,13 @@ namespace SharedLibrary.Commands } } - class CTempBan : Command + public class CTempBan : Command { public CTempBan(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } public override async Task ExecuteAsync(Event E) { - E.Target.lastOffense = SharedLibrary.Utilities.RemoveWords(E.Data, 1); + E.Target.lastOffense = Utilities.RemoveWords(E.Data, 1); String Message = E.Target.lastOffense; if (E.Origin.Level > E.Target.Level) { @@ -104,7 +106,7 @@ namespace SharedLibrary.Commands } } - class CBan : Command + public class CBan : Command { public CBan(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -119,6 +121,7 @@ namespace SharedLibrary.Commands Message = "^1Player Banned: ^5" + E.Target.lastOffense; if (E.Origin.Level > E.Target.Level) { + await E.Owner.ExecuteEvent(new Event(Event.GType.Ban, E.Data, E.Origin, E.Target, E.Owner)); await E.Target.Ban(Message, E.Origin); await E.Origin.Tell(String.Format("Sucessfully banned ^5{0} ^7({1})", E.Target.Name, E.Target.NetworkID)); } @@ -127,7 +130,7 @@ namespace SharedLibrary.Commands } } - class CUnban : Command + public class CUnban : Command { public CUnban(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -138,7 +141,7 @@ namespace SharedLibrary.Commands } } - class CWhoAmI : Command + public class CWhoAmI : Command { public CWhoAmI(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -149,7 +152,7 @@ namespace SharedLibrary.Commands } } - class CList : Command + public class CList : Command { public CList(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -182,7 +185,7 @@ namespace SharedLibrary.Commands } } - class CHelp : Command + public class CHelp : Command { public CHelp(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -235,7 +238,7 @@ namespace SharedLibrary.Commands } } - class CFastRestart : Command + public class CFastRestart : Command { public CFastRestart(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -250,7 +253,7 @@ namespace SharedLibrary.Commands } } - class CMapRotate : Command + public class CMapRotate : Command { public CMapRotate(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -265,7 +268,7 @@ namespace SharedLibrary.Commands } } - class CSetLevel : Command + public class CSetLevel : Command { public CSetLevel(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -282,12 +285,20 @@ namespace SharedLibrary.Commands if (newPerm == Player.Permission.Owner && E.Origin.Level != Player.Permission.Console) newPerm = Player.Permission.Banned; + if (newPerm == Player.Permission.Owner && !E.Owner.Config.AllowMultipleOwners) + { + await E.Origin.Tell("There can only be 1 owner. Modify your server configuration if multiple owners are required"); + return; + } + if (newPerm > Player.Permission.Banned) { - var ActiveClient = E.Owner.Manager.GetActiveClients().First(p => p.NetworkID == E.Target.NetworkID); + var ActiveClient = E.Owner.Manager.GetActiveClients().FirstOrDefault(p => p.NetworkID == E.Target.NetworkID); ActiveClient?.SetLevel(newPerm); - await ActiveClient?.Tell("Congratulations! You have been promoted to ^3" + newPerm); + if (ActiveClient != null) + await ActiveClient.Tell("Congratulations! You have been promoted to ^3" + newPerm); + await E.Origin.Tell($"{E.Target.Name} was successfully promoted!"); E.Target.SetLevel(newPerm); @@ -299,7 +310,7 @@ namespace SharedLibrary.Commands } } - class CUsage : Command + public class CUsage : Command { public CUsage(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -309,7 +320,7 @@ namespace SharedLibrary.Commands } } - class CUptime : Command + public class CUptime : Command { public CUptime(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -320,7 +331,7 @@ namespace SharedLibrary.Commands } } - class CListAdmins : Command + public class CListAdmins : Command { public CListAdmins(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -340,14 +351,14 @@ namespace SharedLibrary.Commands } } - class CLoadMap : Command + public class CLoadMap : Command { public CLoadMap(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } public override async Task ExecuteAsync(Event E) { string newMap = E.Data.Trim().ToLower(); - foreach (Map m in E.Owner.maps) + foreach (Map m in E.Owner.Maps) { if (m.Name.ToLower() == newMap || m.Alias.ToLower() == newMap) { @@ -364,7 +375,7 @@ namespace SharedLibrary.Commands } } - class CFindPlayer : Command + public class CFindPlayer : Command { public CFindPlayer(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -386,7 +397,7 @@ namespace SharedLibrary.Commands } } - class CFindAllPlayers : Command + public class CFindAllPlayers : Command { public CFindAllPlayers(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -432,13 +443,13 @@ namespace SharedLibrary.Commands } } - class CListRules : Command + public class CListRules : Command { public CListRules(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } public override async Task ExecuteAsync(Event E) { - if (E.Owner.rules.Count < 1) + if (E.Owner.Rules.Count < 1) { if (E.Message.IsBroadcastCommand()) await E.Owner.Broadcast("The server owner has not set any rules."); @@ -448,7 +459,7 @@ namespace SharedLibrary.Commands else { - foreach (String r in E.Owner.rules) + foreach (String r in E.Owner.Rules) { if (E.Message.IsBroadcastCommand()) await E.Owner.Broadcast("- " + r); @@ -459,7 +470,7 @@ namespace SharedLibrary.Commands } } - class CPrivateMessage : Command + public class CPrivateMessage : Command { public CPrivateMessage(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -471,7 +482,7 @@ namespace SharedLibrary.Commands } } - class CReload : Command + public class CReload : Command { public CReload(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -484,7 +495,7 @@ namespace SharedLibrary.Commands } } - class CFlag : Command + public class CFlag : Command { public CFlag(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -507,6 +518,7 @@ namespace SharedLibrary.Commands E.Data = Utilities.RemoveWords(E.Data, 1); E.Target.SetLevel(Player.Permission.Flagged); E.Owner.Manager.GetClientPenalties().AddPenalty(new Penalty(Penalty.Type.Flag, E.Data, E.Target.NetworkID, E.Origin.NetworkID, DateTime.Now, E.Target.IP)); + await E.Owner.ExecuteEvent(new Event(Event.GType.Flag, E.Data, E.Origin, E.Target, E.Owner)); await E.Origin.Tell("You have ^5flagged ^7" + E.Target.Name); } @@ -514,7 +526,7 @@ namespace SharedLibrary.Commands } } - class CReport : Command + public class CReport : Command { public CReport(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -543,12 +555,11 @@ namespace SharedLibrary.Commands await E.Origin.Tell("Successfully reported " + E.Target.Name); await E.Owner.ExecuteEvent(new Event(Event.GType.Report, E.Data, E.Origin, E.Target, E.Owner)); - await E.Owner.ToAdmins(String.Format("^5{0}^7->^1{1}^7: {2}", E.Origin.Name, E.Target.Name, E.Data)); } } - class CListReports : Command + public class CListReports : Command { public CListReports(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -572,7 +583,7 @@ namespace SharedLibrary.Commands } } - class CMask : Command + public class CMask : Command { public CMask(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -588,10 +599,12 @@ namespace SharedLibrary.Commands E.Origin.Masked = true; await E.Origin.Tell("You are now masked"); } + + E.Owner.Manager.GetClientDatabase().UpdatePlayer(E.Origin); } } - class CListBanInfo : Command + public class CListBanInfo : Command { public CListBanInfo(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -624,7 +637,7 @@ namespace SharedLibrary.Commands } } - class CListAlias : Command + public class CListAlias : Command { public CListAlias(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -665,7 +678,7 @@ namespace SharedLibrary.Commands } } - class CExecuteRCON : Command + public class CExecuteRCON : Command { public CExecuteRCON(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } @@ -679,7 +692,7 @@ namespace SharedLibrary.Commands } } - class CPlugins : Command + public class CPlugins : Command { public CPlugins(String N, String D, String U, Player.Permission P, int args, bool nT) : base(N, D, U, P, args, nT) { } diff --git a/SharedLibrary/Event.cs b/SharedLibrary/Event.cs index 245c95035..02a9bede7 100644 --- a/SharedLibrary/Event.cs +++ b/SharedLibrary/Event.cs @@ -82,7 +82,8 @@ namespace SharedLibrary Unknown, //FROM PLAYER - Report + Report, + Flag } public Event(GType t, string d, Player O, Player T, Server S) diff --git a/SharedLibrary/Server.cs b/SharedLibrary/Server.cs index c1fe5ad60..2ff30225e 100644 --- a/SharedLibrary/Server.cs +++ b/SharedLibrary/Server.cs @@ -14,64 +14,25 @@ namespace SharedLibrary [Guid("61d3829e-fcbe-44d3-bb7c-51db8c2d7ac5")] public abstract class Server { - public Server(Interfaces.IManager mgr, string address, int port, string password) + public Server(Interfaces.IManager mgr, ServerConfiguration config) { - Password = password; - IP = address; - Port = port; + Password = config.Password; + IP = config.IP; + Port = config.Port; Manager = mgr; Logger = Manager.GetLogger(); - ClientNum = 0; + ClientNum = 0; + Config = config; Players = new List(new Player[18]); - events = new Queue(); Reports = new List(); PlayerHistory = new Queue(); ChatHistory = new List(); - lastWebChat = DateTime.Now; - nextMessage = 0; + NextMessage = 0; InitializeTokens(); InitializeAutoMessages(); InitializeMaps(); InitializeRules(); - - var commands = mgr.GetCommands(); - - owner = Manager.GetClientDatabase().GetOwner(); - - if (owner == null) - commands.Add(new COwner("owner", "claim ownership of the server", "owner", Player.Permission.User, 0, false)); - - commands.Add(new CQuit("quit", "quit IW4MAdmin", "q", Player.Permission.Owner, 0, false)); - commands.Add(new CKick("kick", "kick a player by name. syntax: !kick .", "k", Player.Permission.Trusted, 2, true)); - commands.Add(new CSay("say", "broadcast message to all players. syntax: !say .", "s", Player.Permission.Moderator, 1, false)); - commands.Add(new CTempBan("tempban", "temporarily ban a player for 1 hour. syntax: !tempban .", "tb", Player.Permission.Moderator, 2, true)); - commands.Add(new CBan("ban", "permanently ban a player from the server. syntax: !ban ", "b", Player.Permission.SeniorAdmin, 2, true)); - commands.Add(new CWhoAmI("whoami", "give information about yourself. syntax: !whoami.", "who", Player.Permission.User, 0, false)); - commands.Add(new CList("list", "list active clients syntax: !list.", "l", Player.Permission.Moderator, 0, false)); - commands.Add(new CHelp("help", "list all available commands. syntax: !help.", "h", Player.Permission.User, 0, false)); - commands.Add(new CFastRestart("fastrestart", "fast restart current map. syntax: !fastrestart.", "fr", Player.Permission.Moderator, 0, false)); - commands.Add(new CMapRotate("maprotate", "cycle to the next map in rotation. syntax: !maprotate.", "mr", Player.Permission.Administrator, 0, false)); - commands.Add(new CSetLevel("setlevel", "set player to specified administration level. syntax: !setlevel .", "sl", Player.Permission.Owner, 2, true)); - commands.Add(new CUsage("usage", "get current application memory usage. syntax: !usage.", "us", Player.Permission.Moderator, 0, false)); - commands.Add(new CUptime("uptime", "get current application running time. syntax: !uptime.", "up", Player.Permission.Moderator, 0, false)); - commands.Add(new Cwarn("warn", "warn player for infringing rules syntax: !warn .", "w", Player.Permission.Trusted, 2, true)); - commands.Add(new CWarnClear("warnclear", "remove all warning for a player syntax: !warnclear .", "wc", Player.Permission.Trusted, 1, true)); - commands.Add(new CUnban("unban", "unban player by database id. syntax: !unban @.", "ub", Player.Permission.SeniorAdmin, 1, true)); - commands.Add(new CListAdmins("admins", "list currently connected admins. syntax: !admins.", "a", Player.Permission.User, 0, false)); - commands.Add(new CLoadMap("map", "change to specified map. syntax: !map", "m", Player.Permission.Administrator, 1, false)); - commands.Add(new CFindPlayer("find", "find player in database. syntax: !find ", "f", Player.Permission.SeniorAdmin, 1, false)); - commands.Add(new CListRules("rules", "list server rules. syntax: !rules", "r", Player.Permission.User, 0, false)); - commands.Add(new CPrivateMessage("privatemessage", "send message to other player. syntax: !pm ", "pm", Player.Permission.User, 2, true)); - commands.Add(new CFlag("flag", "flag a suspicious player and announce to admins on join . syntax !flag :", "flag", Player.Permission.Moderator, 2, true)); - commands.Add(new CReport("report", "report a player for suspicious behaivor. syntax !report ", "rep", Player.Permission.User, 2, true)); - commands.Add(new CListReports("reports", "get most recent reports. syntax !reports", "reports", Player.Permission.Moderator, 0, false)); - commands.Add(new CMask("mask", "hide your online presence from online admin list. syntax: !mask", "mask", Player.Permission.Administrator, 0, false)); - commands.Add(new CListBanInfo("baninfo", "get information about a ban for a player. syntax: !baninfo ", "bi", Player.Permission.Moderator, 1, true)); - commands.Add(new CListAlias("alias", "get past aliases and ips of a player. syntax: !alias ", "known", Player.Permission.Moderator, 1, true)); - commands.Add(new CExecuteRCON("rcon", "send rcon command to server. syntax: !rcon ", "rcon", Player.Permission.Owner, 1, false)); - commands.Add(new CFindAllPlayers("findall", "find a player by their aliase(s). syntax: !findall ", "fa", Player.Permission.Moderator, 1, false)); - commands.Add(new CPlugins("plugins", "view all loaded plugins. syntax: !plugins", "p", Player.Permission.Administrator, 0, false)); } //Returns current server IP set by `net_ip` -- *STRING* @@ -287,7 +248,7 @@ namespace SharedLibrary /// protected void InitializeMaps() { - maps = new List(); + Maps = new List(); IFile mapfile = new IFile("config/maps.cfg"); String[] _maps = mapfile.ReadAllLines(); @@ -300,7 +261,7 @@ namespace SharedLibrary if (m2.Length > 1) { Map map = new Map(m2[0].Trim(), m2[1].Trim()); - maps.Add(map); + Maps.Add(map); } } } @@ -314,7 +275,7 @@ namespace SharedLibrary /// protected void InitializeAutoMessages() { - messages = new List(); + BroadcastMessages = new List(); IFile messageCFG = new IFile("config/messages.cfg"); String[] lines = messageCFG.ReadAllLines(); @@ -329,15 +290,15 @@ namespace SharedLibrary int mTime = -1; int.TryParse(lines[0], out mTime); - if (messageTime == -1) - messageTime = 60; + if (MessageTime == -1) + MessageTime = 60; else - messageTime = mTime; + MessageTime = mTime; foreach (String l in lines) { if (lines[0] != l && l.Length > 1) - messages.Add(l); + BroadcastMessages.Add(l); } messageCFG.Close(); @@ -352,7 +313,7 @@ namespace SharedLibrary /// protected void InitializeRules() { - rules = new List(); + Rules = new List(); IFile ruleFile = new IFile("config/rules.cfg"); String[] _rules = ruleFile.ReadAllLines(); @@ -362,7 +323,7 @@ namespace SharedLibrary foreach (String r in _rules) { if (r.Length > 1) - rules.Add(r); + Rules.Add(r); } } else @@ -376,55 +337,39 @@ namespace SharedLibrary return $"{IP}_{Port}"; } - ///

- /// Load up the built in commands - /// - public void InitializeCommands() - { - foreach (Command C in Plugins.PluginImporter.ActiveCommands) - Manager.GetCommands().Add(C); - } - - //Objects + // Objects public Interfaces.IManager Manager { get; protected set; } public Interfaces.ILogger Logger { get; private set; } - public Player owner; - public List maps; - public List rules; - public Queue events; - public String Website; - public String Gametype; - public int totalKills = 0; - public List Reports; - public List ChatHistory; + public ServerConfiguration Config { get; private set; } + public List Maps { get; protected set; } + public List Rules { get; protected set; } + public List Reports { get; protected set; } + public List ChatHistory { get; protected set; } public Queue PlayerHistory { get; private set; } - protected int ConnectionErrors; - protected DateTime LastPoll; - - //Info - protected String IP; - protected int Port; - public String Hostname { get; protected set; } + // Info + public string Hostname { get; protected set; } + public string Website { get; protected set; } + public string Gametype { get; protected set; } public Map CurrentMap { get; protected set; } - protected string FSGame; public int ClientNum { get; protected set; } public int MaxClients { get; protected set; } public List Players { get; protected set; } - protected List messages; - protected int messageTime; - protected TimeSpan lastMessage; - protected DateTime lastPoll; - protected int nextMessage; - - protected DateTime lastWebChat; public string Password { get; private set; } - protected IFile logFile; - // Log stuff - protected String Mod; + // Internal + protected string IP; + protected int Port; + protected string FSGame; + protected int MessageTime; + protected int NextMessage; + protected int ConnectionErrors; + protected List BroadcastMessages; + protected TimeSpan LastMessage; + protected IFile LogFile; + protected DateTime LastPoll; //Remote - public Queue commandResult = new Queue(); + public Queue commandResult = new Queue(); } } diff --git a/SharedLibrary/ServerConfiguration.cs b/SharedLibrary/ServerConfiguration.cs new file mode 100644 index 000000000..5e8b6f7d9 --- /dev/null +++ b/SharedLibrary/ServerConfiguration.cs @@ -0,0 +1,18 @@ +using SharedLibrary.Interfaces; + +namespace SharedLibrary +{ + public class ServerConfiguration : Serialize + { + public string IP; + public int Port; + public string Password; + public string FtpPrefix; + public bool AllowMultipleOwners; + + public override string Filename() + { + return $"config/servers/{IP}_{Port}.cfg"; + } + } +} diff --git a/SharedLibrary/SharedLibrary.csproj b/SharedLibrary/SharedLibrary.csproj index af6638ce1..672cbd65c 100644 --- a/SharedLibrary/SharedLibrary.csproj +++ b/SharedLibrary/SharedLibrary.csproj @@ -93,6 +93,7 @@ +
diff --git a/SharedLibrary/Utilities.cs b/SharedLibrary/Utilities.cs index ebd518f7c..2287e33ae 100644 --- a/SharedLibrary/Utilities.cs +++ b/SharedLibrary/Utilities.cs @@ -72,11 +72,9 @@ namespace SharedLibrary { String lookingFor = str.ToLower(); - for (Player.Permission Perm = Player.Permission.User; Perm < Player.Permission.Owner; Perm++) - { + for (Player.Permission Perm = Player.Permission.User; Perm < Player.Permission.Console; Perm++) if (lookingFor.Contains(Perm.ToString().ToLower())) return Perm; - } return Player.Permission.Banned; }