diff --git a/Admin/Command.cs b/Admin/Command.cs index dddf40ba..e6cf9c71 100644 --- a/Admin/Command.cs +++ b/Admin/Command.cs @@ -378,13 +378,13 @@ namespace IW4MAdmin String lookingFor = String.Empty; - foreach(String S in P.getNames()) + foreach(String S in P.Names) { if (S.Contains(E.Data)) lookingFor = S; } - Player Current = E.Owner.clientDB.getPlayer(P.getNumber()); + Player Current = E.Owner.clientDB.getPlayer(P.Number); if (Current != null) { @@ -613,14 +613,13 @@ namespace IW4MAdmin E.Target.Tell("[^3" + E.Target.Name + "^7]"); StringBuilder message = new StringBuilder(); - List playerAliases = new List(); - E.Owner.getAliases(playerAliases, E.Target); + List playerAliases = E.Owner.getPlayerAliases(E.Target); message.Append("Aliases: "); foreach (Player P in playerAliases) { - foreach (String S in P.Alias.getNames()) + foreach (String S in P.Alias.Names) { if (S != String.Empty && S != E.Target.Name) message.Append(S + " | "); @@ -630,13 +629,13 @@ namespace IW4MAdmin message = new StringBuilder(); - if (E.Target.Alias.getIPS() != null) + if (E.Target.Alias.IPS != null) { message.Append("IPs: "); foreach (Player P2 in playerAliases) { - foreach (String IP in P2.Alias.getIPS()) + foreach (String IP in P2.Alias.IPS) { if (IP.Split('.').Length > 3 && IP != String.Empty && !message.ToString().Contains(IP)) message.Append (IP + " | "); diff --git a/Admin/IW4M ADMIN.csproj b/Admin/IW4M ADMIN.csproj index 49eed84f..71362e7a 100644 --- a/Admin/IW4M ADMIN.csproj +++ b/Admin/IW4M ADMIN.csproj @@ -88,10 +88,6 @@ app.manifest - - ..\packages\Kayak.0.7.2\lib\Kayak.dll - False - ..\SharedLibary\SharedLibary\bin\Debug\SharedLibary.dll False @@ -123,7 +119,6 @@ - @@ -146,12 +141,18 @@ PreserveNewest + + PreserveNewest + Always Always + + PreserveNewest + Always @@ -164,6 +165,9 @@ Always + + PreserveNewest + Always @@ -305,7 +309,6 @@ del *.pdb del *.dll del app.config del *.manifest -del *.rm del *.log xcopy /E /Y "$(ProjectDir)bin\Release" "$(SolutionDir)Release Build" diff --git a/Admin/Main.cs b/Admin/Main.cs index 80cf95f7..3d38694d 100644 --- a/Admin/Main.cs +++ b/Admin/Main.cs @@ -12,7 +12,6 @@ namespace IW4MAdmin { static public double Version { get; private set; } static private Manager serverManager; - static private IW4MAdmin_Web.WebFront frontEnd; static void Main(string[] args) { @@ -43,13 +42,8 @@ namespace IW4MAdmin } if (serverManager.getServers() != null) - Program.getManager().mainLog.Write("IW4M Now Initialized! Visit http://127.0.0.1:1624 for server overview.", Log.Level.Production); + Program.getManager().mainLog.Write("IW4M Now Initialized!", Log.Level.Production); - if (serverManager.getServers().Count > 0) - { - frontEnd = new IW4MAdmin_Web.WebFront(); - frontEnd.Init(); - } serverMGRThread.Join(); serverManager.mainLog.Write("Shutting down IW4MAdmin...", Log.Level.Debug); @@ -76,8 +70,6 @@ namespace IW4MAdmin } Program.getManager().shutDown(); - frontEnd.webSchedule.Stop(); - frontEnd.webSchedule.Dispose(); return false; } diff --git a/Admin/Plugins.cs b/Admin/Plugins.cs index cc68916d..9b73557a 100644 --- a/Admin/Plugins.cs +++ b/Admin/Plugins.cs @@ -9,13 +9,13 @@ namespace IW4MAdmin public class PluginImporter { public static List potentialCommands; - public static List potentialNotifies; + public static List potentialNotifies; public static bool Load() { string[] dllFileNames = null; potentialCommands = new List(); - potentialNotifies = new List(); + potentialNotifies = new List(); if (Directory.Exists(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\plugins")) dllFileNames = Directory.GetFiles(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "\\plugins", "*.dll"); @@ -47,10 +47,10 @@ namespace IW4MAdmin Type[] types = Plugin.GetTypes(); foreach(Type assemblyType in types) { - if(assemblyType.IsClass && assemblyType.BaseType.Name == "EventNotify") + if(assemblyType.IsClass && assemblyType.BaseType.Name == "Notify") { Object notifyObject = Activator.CreateInstance(assemblyType); - EventNotify newNotify = (EventNotify)notifyObject; + Plugin newNotify = (Plugin)notifyObject; potentialNotifies.Add(newNotify); newNotify.onLoad(); Program.getManager().mainLog.Write("Loaded event plugin \"" + assemblyType.Name + "\"", Log.Level.All); diff --git a/Admin/Server.cs b/Admin/Server.cs index 678c6a4e..7b35cb76 100644 --- a/Admin/Server.cs +++ b/Admin/Server.cs @@ -18,11 +18,39 @@ namespace IW4MAdmin commandQueue = new Queue(); } - override public void getAliases(List returnPlayers, Player Origin) - { - if (Origin == null) - return; + + private void getAliases(List returnAliases, Aliases currentAlias) + { + foreach(String IP in currentAlias.IPS) + { + List Matching = aliasDB.getPlayer(IP); + foreach(Aliases I in Matching) + { + if (!returnAliases.Contains(I) && returnAliases.Find(x => x.Number == I.Number) == null) + { + returnAliases.Add(I); + getAliases(returnAliases, I); + } + } + } + } + public override List getAliases(Player Origin) + { + List allAliases = new List(); + + if (Origin == null) + return allAliases; + + Aliases currentIdentityAliases = aliasDB.getPlayer(Origin.databaseID); + + if (currentIdentityAliases == null) + return allAliases; + + getAliases(allAliases, currentIdentityAliases); + return allAliases; + + /* List aliasAliases = new List(); Aliases currentAliases = aliasDB.getPlayer(Origin.databaseID); @@ -56,7 +84,7 @@ namespace IW4MAdmin } } } - } + } */ } //Add player object p to `players` list @@ -102,16 +130,16 @@ namespace IW4MAdmin NewPlayer.lastEvent = P.lastEvent; // lets check aliases - if ((NewPlayer.Alias.getNames().Find(m => m.Equals(P.Name))) == null || NewPlayer.Name == null || NewPlayer.Name == String.Empty) + if ((NewPlayer.Alias.Names.Find(m => m.Equals(P.Name))) == null || NewPlayer.Name == null || NewPlayer.Name == String.Empty) { NewPlayer.updateName(P.Name.Trim()); - NewPlayer.Alias.addName(NewPlayer.Name); + NewPlayer.Alias.Names.Add(NewPlayer.Name); } // and ips - if (NewPlayer.Alias.getIPS().Find(i => i.Equals(P.IP)) == null || P.IP == null || P.IP == String.Empty) + if (NewPlayer.Alias.IPS.Find(i => i.Equals(P.IP)) == null || P.IP == null || P.IP == String.Empty) { - NewPlayer.Alias.addIP(P.IP); + NewPlayer.Alias.IPS.Add(P.IP); } NewPlayer.updateIP(P.IP); @@ -146,8 +174,7 @@ namespace IW4MAdmin return true; } - List newPlayerAliases = new List(); - getAliases(newPlayerAliases, NewPlayer); + List newPlayerAliases = getPlayerAliases(NewPlayer); foreach (Player aP in newPlayerAliases) // lets check their aliases { @@ -402,7 +429,7 @@ namespace IW4MAdmin { Event curEvent = events.Peek(); processEvent(curEvent); - foreach (EventNotify E in PluginImporter.potentialNotifies) + foreach (Notify E in PluginImporter.potentialNotifies) E.onEvent(curEvent); events.Dequeue(); } @@ -562,6 +589,7 @@ namespace IW4MAdmin #endif } + events.Enqueue(new Event(Event.GType.Stop, "Server monitoring stopped", null, null, this)); isRunning = false; eventQueueThread.Join(); } @@ -623,6 +651,8 @@ namespace IW4MAdmin logFile = new IFile(logPath); Log.Write("Log file is " + logPath, Log.Level.Debug); Log.Write("Now monitoring " + getName(), Log.Level.Production); + events.Enqueue(new Event(Event.GType.Start, "Server started", null, null, this)); + Bans = clientDB.getBans(); return true; } catch (Exception E) diff --git a/Admin/WebFront.cs b/Admin/WebFront.cs deleted file mode 100644 index 6c0d33b4..00000000 --- a/Admin/WebFront.cs +++ /dev/null @@ -1,680 +0,0 @@ -#define ENABLED_CRAP_CODE_THAT_NEEDS_TO_BE_REWRITTEN -using System; -using System.Globalization; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Web; -using Kayak; -using Kayak.Http; -using System.Net; -using SharedLibrary; -using IW4MAdmin; - - -#if ENABLED_CRAP_CODE_THAT_NEEDS_TO_BE_REWRITTEN -namespace IW4MAdmin_Web -{ - class Client - { - public Client ( WebFront.Page req, int cur, IDictionary inc, String D, Player P) - { - requestedPage = req; - requestedPageNumber = cur; - requestOrigin = inc; - requestData = D; - playerRequesting = P; - } - - public WebFront.Page requestedPage { get; private set; } - public int requestedPageNumber { get; private set; } - public IDictionary requestOrigin { get; private set; } - public String requestData { get; private set; } - public Player playerRequesting { get; private set; } - - } - - class WebFront - { - private Server[] Servers; - - public enum Page - { - main, - stats, - bans, - player - } - - public WebFront() - { - Servers = Program.getServers(); - } - - public void Init() - { - webSchedule = KayakScheduler.Factory.Create(new SchedulerDelegate()); - webServer = KayakServer.Factory.CreateHttp(new RequestDelegate(), webSchedule); - - using (webServer.Listen(new IPEndPoint(IPAddress.Any, 1624))) - { - // runs scheduler on calling thread. this method will block until - // someone calls Stop() on the scheduler. - webSchedule.Start(); - } - } - - public IScheduler webSchedule; - private IServer webServer; - } - - static class Macro - { - static public String parsePagination(int server, int totalItems, int itemsPerPage, int currentPage, String Page) - { - StringBuilder output = new StringBuilder(); - - output.Append("
"); - - if ( currentPage > 0) - output.AppendFormat("PREV", server, currentPage - 1, Page); - double totalPages = Math.Ceiling(((float)totalItems / itemsPerPage)); - output.Append("" + (currentPage + 1) + "/" + totalPages + ""); - if ((currentPage + 1) < totalPages) - output.AppendFormat("NEXT", server, currentPage + 1, Page); - output.Append("
"); - - return output.ToString(); - } - - static public String parseMacros(String input, WebFront.Page Page, int server, int Pagination, bool logged, String Data) - { - StringBuilder buffer = new StringBuilder(); - Server[] Servers= Program.getServers(); - switch (input) - { - case "SERVERS": - int cycleFix = 0; - for (int i = 0; i < Servers.Count(); i++) - { - if (Program.getServers()[i] == null) - continue; - - StringBuilder players = new StringBuilder(); - if (Servers[i].getClientNum() < 1) - players.Append("

No Players

"); - else - { - int count = 0; - double currentPlayers = Servers[i].statusPlayers.Count; - - foreach (Player P in Servers[i].getPlayers()) - { - if (P == null) - continue; - - if (count % 2 == 0) - { - switch (cycleFix) - { - case 0: - players.Append(""); - cycleFix = 1; - break; - case 1: - players.Append(""); - cycleFix = 0; - break; - } - } - - players.AppendFormat("{2}", i, P.databaseID, SharedLibrary.Utilities.nameHTMLFormatted(P)); - - if (count % 2 != 0) - { - players.Append(""); - } - - count++; - - } - } - buffer.AppendFormat(@" - - - - - - - - - -
{0}{1}{2}{3}StatsBansHistory
- - {5} -
", - Servers[i].getName(), Servers[i].getMap(), Servers[i].getClientNum() + "/" + Servers[i].getMaxClients(), SharedLibrary.Utilities.gametypeLocalized(Servers[i].getGametype()), i, players.ToString()); - buffer.AppendFormat("
", i, '\"'); - if (Servers[i].getClientNum() > 0) - buffer.AppendFormat("
", i, '\"'); - buffer.Append("
"); - } - return buffer.ToString(); - case "TITLE": - return "IW4M Administration"; - case "BANS": - buffer.Append(""); - int totalBans = Program.getServers()[0].Bans.Count; - int range; - int start = Pagination*30; - cycleFix = 0; - - if (totalBans <= 30) - range = totalBans - 1; - else if ((totalBans - start) < 30) - range = (totalBans - start); - else - range = 30; - - List Bans = new List(); - - if (totalBans > 0) - Bans = Program.getServers()[0].Bans.GetRange(start, range).OrderByDescending(x => x.When).ToList(); - else - Bans.Add(new Ban("No Bans", "0", "0", DateTime.Now, "")); - - - buffer.Append("

{{TIME}}


"); - - if (Bans[0] != null) - buffer = buffer.Replace("{{TIME}}", "From " + SharedLibrary.Utilities.timePassed(Bans[0].When) + " ago" + " — " + totalBans + " total"); - - for (int i = 0; i < Bans.Count; i++) - { - if (Bans[i] == null) - continue; - - Player P = Program.getServers()[0].clientDB.getPlayer(Bans[i].npID, -1); - Player B = Program.getServers()[0].clientDB.getPlayer(Bans[i].bannedByID, -1); - - if (P == null) - P = new Player("Unknown", "n/a", 0, 0, 0, "Unknown", 0, ""); - if (B == null) - B = new Player("Unknown", "n/a", 0, 0, 0, "Unknown", 0, ""); - - if (P.lastOffense == String.Empty) - P.lastOffense = "Evade"; - - if (P != null && B != null) - { - if (B.npID == P.npID) - B.updateName("IW4MAdmin"); // shh it will all be over soon - - String Prefix; - if (cycleFix % 2 == 0) - Prefix = "class=row-grey"; - else - Prefix = "class=row-white"; - String Link = "/" + server + "/" + P.databaseID + "/userip/?player"; - buffer.AppendFormat("", P.Name, P.lastOffense, SharedLibrary.Utilities.nameHTMLFormatted(B), Bans[i].getWhen(), Prefix, Link); - cycleFix++; - } - } - buffer.Append("
NameOffenseBanned ByTime
{0}{1}{2}{3}

"); - - buffer.Append(parsePagination(server, Servers[0].Bans.Count, 30, Pagination, "bans")); - return buffer.ToString(); - case "PAGE": - buffer.Append("
"); - return buffer.ToString(); - case "STATS": - int totalStats = 0; - buffer.Append("

Starting at #{{TOP}}


"); - buffer.Append(""); - - start = Pagination*30; - if (totalStats <= 30) - range = totalStats - 1; - else if ((totalStats - start) < 30 ) - range = (totalStats - start); - else - range = 30; - //List Stats = Servers[server].statDB.getMultipleStats(start, range).OrderByDescending(x => x.Skill).ToList(); - buffer.Append(""); - cycleFix = 0; - /*for (int i = 0; i < totalStats; i++) - { - if (i >= Stats.Count -1 || Stats[i] == null ) - continue; - - Player P = Servers[server].clientDB.getPlayer(Stats[i].statIndex); - - if (P == null) - continue; - - P.stats = Stats[i]; - - - if (P.stats != null) - { - String Prefix; - if (cycleFix % 2 == 0) - Prefix = "class=row-grey"; - else - Prefix = "class=row-white"; - - String Link = "/" + server + "/" + P.databaseID + "/userip/?player"; - buffer.AppendFormat("", P.Name, P.stats.Kills, P.stats.Deaths, P.stats.KDR, P.stats.Skill, Prefix, Link); - cycleFix++; - } - }*/ - buffer.Append("
NameKillsDeathsKDRRating
{0}{1}{2}{3}{4}

"); - buffer.Append(parsePagination(server, totalStats, 30, Pagination, "stats")); - return buffer.ToString().Replace("{{TOP}}", (start + 1).ToString()); - case "PLAYER": - buffer.Append(""); - List matchingPlayers = new List(); - - if (Data == null) - matchingPlayers.Add(Servers[server].clientDB.getPlayer(Pagination)); - else - { - var alias = Servers[server].aliasDB.findPlayers(Data); - - foreach (var a in alias) - { - var p = Servers[server].clientDB.getPlayer(a.getNumber()); - if (p != null) - { - List aliases = new List(); - Servers[server].getAliases(aliases, p); - - foreach (var pa in aliases) - { - if (!matchingPlayers.Exists(x => x.databaseID == pa.databaseID)) - matchingPlayers.Add(pa); - } - } - } - } - - if (matchingPlayers == null) - buffer.Append("
NameAliasesIPRatingLevelConnectionsLast SeenProfile
"); - - else - { - foreach (Player Player in matchingPlayers) - { - if (Player == null) - continue; - - buffer.Append(""); - StringBuilder str = new StringBuilder(); - List aliases = new List(); - Servers[server].getAliases(aliases, Player); - - foreach (Player a in aliases) - { - if (Data != null) - { - if (a.Alias.getNames().Exists(p => p.ToLower().Contains(Data.ToLower())) && a.databaseID != Player.databaseID) - { - str.AppendFormat("{0}
", a.Name); - break; - } - } - else - str.AppendFormat("{0}
", a.Name); - } - - StringBuilder IPs = new StringBuilder(); - - if (logged) - { - foreach (Player a in aliases) - { - foreach (String ip in a.Alias.getIPS()) - { - if (!IPs.ToString().Contains(ip)) - IPs.AppendFormat("{0}
", ip); - } - } - - } - else - IPs.Append("XXX.XXX.XXX.XXX"); - - Int64 forumID = 0; - if (Player.npID.Length == 16) - { - forumID = Int64.Parse(Player.npID.Substring(0, 16), NumberStyles.AllowHexSpecifier); - forumID = forumID - 76561197960265728; - } - - String Screenshot = String.Empty; - - if (logged) - Screenshot = String.Format("
", forumID, Player.Name); - - buffer.AppendFormat("{0}{10}{1}{2}{3}{4}{5}{6} ago{8}", Player.Name, str, IPs, 0, SharedLibrary.Utilities.nameHTMLFormatted(Player), Player.Connections, Player.getLastConnection(), forumID, Player.Name, "/0/" + Player.databaseID + "/userip/?player", Screenshot); - buffer.Append(""); - } - - buffer.Append(""); - } - - return buffer.ToString(); - default: - return input; - } - } - - static public String findMacros(String input, Client C, int server) - { - String output = input; - - bool logged = Program.getServers()[server].clientDB.getAdmins().Exists(player => player.IP == C.requestOrigin["Host"].Split(':')[0]); - - switch (C.requestedPage) - { - case WebFront.Page.main: - output = output.Replace("{{SERVERS}}", parseMacros("SERVERS", C.requestedPage, server, C.requestedPageNumber, logged, C.requestData)); - break; - case WebFront.Page.bans: - output = output.Replace("{{BANS}}", parseMacros("BANS", C.requestedPage, server, C.requestedPageNumber, logged, C.requestData)); - break; - case WebFront.Page.stats: - output = output.Replace("{{STATS}}", parseMacros("STATS", C.requestedPage, server, C.requestedPageNumber, logged, C.requestData)); - break; - case WebFront.Page.player: - output = output.Replace("{{PLAYER}}", parseMacros("PLAYER", C.requestedPage, server, C.requestedPageNumber, (C.playerRequesting.Level > Player.Permission.Flagged), C.requestData)); - break; - } - - output = output.Replace("{{TITLE}}", "IW4M Administration"); - output = output.Replace("{{VERSION}}", Program.Version.ToString()); - - return output; - } - } - - class SchedulerDelegate : ISchedulerDelegate - { - public void OnException(IScheduler scheduler, Exception e) - { - //Program.getManager().mainLog.Write(e.InnerException.Message); - //Console.Write(e.InnerException); - // e.DebugStackTrace(); - Program.getManager().mainLog.Write("Web front encountered an error!"); - } - - public void OnStop(IScheduler scheduler) - { - - } - } - - class RequestDelegate : IHttpRequestDelegate - { - public void OnRequest(HttpRequestHead request, IDataProducer requestBody, IHttpResponseDelegate response) - { - String type = "text/html"; - if (request.Uri.StartsWith("/")) - { - //Program.getManager().mainLog.Write("[WEBFRONT] Processing Request for " + request.Uri); - var body = String.Empty; - - if (request.Uri.StartsWith("/")) - { - IFile Header = new IFile("webfront\\header.html"); - var header = Header.getLines(); - Header.Close(); - - IFile Footer = new IFile("webfront\\footer.html"); - var footer = Footer.getLines(); - Footer.Close(); - - String[] req = request.Path.Split(new char[] {'/'}, StringSplitOptions.RemoveEmptyEntries); - - int server = 0; - int page = 0; - - if (req.Length > 1) - { - Int32.TryParse(req[0], out server); - Int32.TryParse(req[1], out page); - } - - if (Program.getServers().Length < 1) - { - body = "

IT SEEMS LIKE THERE ARE NO LONGER ANY SERVERS BEING MONITORED!

"; - } - - else if (request.QueryString == "bans") - { - IFile Bans = new IFile("webfront\\bans.html"); - var bans = Bans.getLines(); - Bans.Close(); - Client toSend = new Client(WebFront.Page.bans, page, request.Headers, null, null); - body = Macro.findMacros((header + bans + footer), toSend, server); - } - - else if (request.QueryString == "stats") - { - IFile Stats = new IFile("webfront\\stats.html"); - var stats = Stats.getLines(); - Stats.Close(); - Client toSend = new Client(WebFront.Page.stats, page, request.Headers, null, null); - body = Macro.findMacros(header + stats + footer, toSend, server); - } - - else if (request.QueryString == "playerhistory") - { - //type = "text/plain"; - if (Program.getServers().Length < server) - return; - - StringBuilder test = new StringBuilder(); - test.Append("
"); - test.Append(""); - IFile Graph = new IFile("webfront\\graph.html"); - var graph = Graph.getLines(); - Graph.Close(); - body = test.ToString() + graph ; - } - - else if (request.QueryString == "player") - { - IFile Player = new IFile("webfront\\player.html"); - var player = Player.getLines(); - Player.Close(); - String Data = null, IP = null, ID = null; - if (req.Length > 3) - { - ID = req[1]; - IP = req[2]; - Data = req[3]; - } - - else if (req.Length >2) - { - ID = req[1]; - IP = req[2]; - } - - if (Program.getServers().Length < server) - return; - - Player P = Program.getServers()[server].clientDB.getPlayer(IP); - if (P == null) - P = new Player("Guest", "Guest", 0, 0); - - Client toSend = new Client(WebFront.Page.player, page, request.Headers, Data, P); - body = Macro.findMacros(header + player + footer, toSend, server); - } - - else if (request.QueryString == "chat") - { - StringBuilder chatMessages = new StringBuilder(); -#if DEBUG - // if (Program.Servers[server].chatHistory.Count < 8) - // Program.Servers[server].chatHistory.Add(new Chat(new Player("TEST", "xuid", 0, 0), "TEST MESSAGE", DateTime.Now)); -#endif - if (Program.getServers().Length < server) - return; - - String IP, Text; - if (req.Length > 3) - { - IP = req[2]; - Text = SharedLibrary.Utilities.cleanChars(HttpUtility.UrlDecode(req[3])); - } - - else - { - IP = null; - Text = null; - } - - if (IP == null && Program.getServers()[server].getClientNum() > 0) - { - chatMessages.Append(""); - foreach (Chat Message in Program.getServers()[server].chatHistory) - chatMessages.AppendFormat("", SharedLibrary.Utilities.nameHTMLFormatted(Message.Origin), Message.Message, Message.timeString()); - chatMessages.Append("
{0}{1}{2}
"); - body = chatMessages.ToString(); - } - - else if (Text != null && Text.Length > 4) - { - Player requestPlayer = Program.getServers()[server].clientDB.getPlayer(IP); - - if (requestPlayer != null) - Program.getServers()[server].webChat(requestPlayer, Text); - } - } - - else if (request.QueryString == "pubbans") - { - type = "text/plain"; - StringBuilder banTXT = new StringBuilder(); - banTXT.AppendFormat("===========================================\nIW4M ADMIN PUBLIC BAN LIST\nGENERATED {0}\nIP---GUID---REASON---TIME\n===========================================\n", DateTime.Now.ToString()); - foreach (Ban B in Program.getServers()[0].Bans) - { - if (B.IP != null && B.IP != String.Empty && B.Reason != null && B.Reason != String.Empty) - banTXT.AppendFormat("{0}---{1}---{2}---{3}\n", B.IP, B.npID, B.Reason.Trim(), Math.Round((B.When-DateTime.MinValue).TotalSeconds, 0)); - } - body = banTXT.ToString(); - } - - else - { - IFile Main = new IFile("webfront\\main.html"); - var main = Main.getLines(); - Main.Close(); - Client toSend = new Client(WebFront.Page.main, page, request.Headers, null, null); - body = Macro.findMacros(header + main + footer, toSend, server); - } - - //Program.getServers()[server].Log.Write("Webfront processed request for " + request.Uri, Log.Level.Debug); - } - - var headers = new HttpResponseHead() - { - Status = "200 OK", - Headers = new Dictionary() - { - { "Content-Type", type }, - { "Content-Length", body.Length.ToString() }, - } - }; - - response.OnResponse(headers, new BufferedProducer(body)); - } - - else - { - var responseBody = "The resource you requested ('" + request.Uri + "') could not be found."; - var headers = new HttpResponseHead() - { - Status = "404 Not Found", - Headers = new Dictionary() - { - { "Content-Type", type }, - { "Content-Length", responseBody.Length.ToString() } - } - }; - var body = new BufferedProducer(responseBody); - - response.OnResponse(headers, body); - } - } - - class BufferedProducer : IDataProducer - { - ArraySegment data; - - public BufferedProducer(string data) : this(data, Encoding.UTF8) { } - public BufferedProducer(string data, Encoding encoding) : this(encoding.GetBytes(data)) { } - public BufferedProducer(byte[] data) : this(new ArraySegment(data)) { } - public BufferedProducer(ArraySegment data) - { - this.data = data; - } - - public IDisposable Connect(IDataConsumer channel) - { - // null continuation, consumer must swallow the data immediately. - channel.OnData(data, null); - channel.OnEnd(); - return null; - } - } - - class BufferedConsumer : IDataConsumer - { - List> buffer = new List>(); - Action resultCallback; - Action errorCallback; - - public BufferedConsumer(Action resultCallback, Action errorCallback) - { - this.resultCallback = resultCallback; - this.errorCallback = errorCallback; - } - public bool OnData(ArraySegment data, Action continuation) - { - // since we're just buffering, ignore the continuation. - buffer.Add(data); - return false; - } - public void OnError(Exception error) - { - errorCallback(error); - } - - public void OnEnd() - { - // turn the buffer into a string. - var str = buffer - .Select(b => Encoding.UTF8.GetString(b.Array, b.Offset, b.Count)) - .Aggregate((result, next) => result + next); - - resultCallback(str); - } - } - } - } -#endif \ No newline at end of file diff --git a/Admin/lib/SharedLibary.dll b/Admin/lib/SharedLibary.dll index 5c8a3a20..e2fd68cf 100644 Binary files a/Admin/lib/SharedLibary.dll and b/Admin/lib/SharedLibary.dll differ diff --git a/Admin/plugins/SamplePlugin.dll b/Admin/plugins/SamplePlugin.dll index 595f1b27..01bc4069 100644 Binary files a/Admin/plugins/SamplePlugin.dll and b/Admin/plugins/SamplePlugin.dll differ diff --git a/Admin/plugins/Webfront Plugin.dll b/Admin/plugins/Webfront Plugin.dll new file mode 100644 index 00000000..448aa95f Binary files /dev/null and b/Admin/plugins/Webfront Plugin.dll differ diff --git a/Admin/webfront/bans.html b/Admin/webfront/bans.html index 42c12395..c5701ceb 100644 --- a/Admin/webfront/bans.html +++ b/Admin/webfront/bans.html @@ -1,5 +1,5 @@ 
-
BANS
Back
-
- {{BANS}} +
BANS
Back
+
+ {{BANS}}
\ No newline at end of file diff --git a/Admin/webfront/error.html b/Admin/webfront/error.html new file mode 100644 index 00000000..06af0305 --- /dev/null +++ b/Admin/webfront/error.html @@ -0,0 +1,11 @@ +
+
ERROR!
Back
+
+
+
+
+
+ Uh Oh, it looks like there was an error processing your request.
+ Reason: {{ERROR}} +
+
diff --git a/Admin/webfront/header.html b/Admin/webfront/header.html index 182f5853..81dac35b 100644 --- a/Admin/webfront/header.html +++ b/Admin/webfront/header.html @@ -394,7 +394,7 @@ \ No newline at end of file +
diff --git a/IW4M Admin.sln b/IW4M Admin.sln index 214a3f6e..58fcd2a2 100644 --- a/IW4M Admin.sln +++ b/IW4M Admin.sln @@ -6,6 +6,7 @@ MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IW4M ADMIN", "Admin\IW4M ADMIN.csproj", "{DD5DCDA2-51DB-4B1A-922F-5705546E6115}" ProjectSection(ProjectDependencies) = postProject {4785AB75-66F3-4391-985D-63A5A049A0FA} = {4785AB75-66F3-4391-985D-63A5A049A0FA} + {99E36EBD-1FA1-494C-8A66-BECE64EFF378} = {99E36EBD-1FA1-494C-8A66-BECE64EFF378} {D51EECEB-438A-47DA-870F-7D7B41BC24D6} = {D51EECEB-438A-47DA-870F-7D7B41BC24D6} EndProjectSection EndProject @@ -16,6 +17,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SamplePlugin", "SamplePlugi {D51EECEB-438A-47DA-870F-7D7B41BC24D6} = {D51EECEB-438A-47DA-870F-7D7B41BC24D6} EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Webfront Plugin", "Webfront Plugin\Webfront Plugin.csproj", "{99E36EBD-1FA1-494C-8A66-BECE64EFF378}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -34,6 +37,10 @@ Global {4785AB75-66F3-4391-985D-63A5A049A0FA}.Debug|Any CPU.Build.0 = Debug|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|Any CPU.ActiveCfg = Release|Any CPU {4785AB75-66F3-4391-985D-63A5A049A0FA}.Release|Any CPU.Build.0 = Release|Any CPU + {99E36EBD-1FA1-494C-8A66-BECE64EFF378}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {99E36EBD-1FA1-494C-8A66-BECE64EFF378}.Debug|Any CPU.Build.0 = Debug|Any CPU + {99E36EBD-1FA1-494C-8A66-BECE64EFF378}.Release|Any CPU.ActiveCfg = Release|Any CPU + {99E36EBD-1FA1-494C-8A66-BECE64EFF378}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Release Build/lib/SharedLibary.dll b/Release Build/lib/SharedLibary.dll index 5c8a3a20..e2fd68cf 100644 Binary files a/Release Build/lib/SharedLibary.dll and b/Release Build/lib/SharedLibary.dll differ diff --git a/Release Build/plugins/SamplePlugin.dll b/Release Build/plugins/SamplePlugin.dll new file mode 100644 index 00000000..01bc4069 Binary files /dev/null and b/Release Build/plugins/SamplePlugin.dll differ diff --git a/SamplePlugin/Main.cs b/SamplePlugin/Main.cs index 3e00badc..79125739 100644 --- a/SamplePlugin/Main.cs +++ b/SamplePlugin/Main.cs @@ -65,7 +65,7 @@ namespace SamplePlugin } #endif - public class StatCommand: Command + public class StatCommand : Command { public StatCommand() : base("stats", "view your stats. syntax !stats", "xlrstats", Player.Permission.User, 0, false) { } @@ -77,13 +77,12 @@ namespace SamplePlugin } } - public class Stats : EventNotify + public class Stats : Notify { public static StatsDB playerStats { get; private set; } public override void onEvent(Event E) { - Console.WriteLine("event type is " + E.Type); if (E.Type == Event.GType.Kill) { Player Killer = E.Origin; diff --git a/SharedLibary/Database.cs b/SharedLibary/Database.cs index 840c0d3d..44a9a621 100644 --- a/SharedLibary/Database.cs +++ b/SharedLibary/Database.cs @@ -107,6 +107,7 @@ namespace SharedLibrary protected DataTable GetDataTable(String sql) { DataTable dt = new DataTable(); + try { waitForClose(); @@ -170,24 +171,60 @@ namespace SharedLibrary if (Result != null && Result.Rows.Count > 0) { DataRow ResponseRow = Result.Rows[0]; - DateTime LC; + DateTime lastCon = DateTime.MinValue; + DateTime.TryParse(ResponseRow["LastConnection"].ToString(), out lastCon); - try - { - LC = DateTime.Parse(ResponseRow["LastConnection"].ToString()); - } - catch (Exception) - { - LC = DateTime.Now; - } - - return new Player(ResponseRow["Name"].ToString(), ResponseRow["npID"].ToString(), cNum, (Player.Permission)(ResponseRow["Level"]), Convert.ToInt32(ResponseRow["Number"]), ResponseRow["LastOffense"].ToString(), (int)ResponseRow["Connections"], ResponseRow["IP"].ToString(), LC); + return new Player(ResponseRow["Name"].ToString(), ResponseRow["npID"].ToString(), cNum, (Player.Permission)(ResponseRow["Level"]), Convert.ToInt32(ResponseRow["Number"]), ResponseRow["LastOffense"].ToString(), (int)ResponseRow["Connections"], ResponseRow["IP"].ToString(), lastCon); } else return null; } + public List getPlayers(List npIDs) + { + List returnssss = new List(); + String test = String.Join("' OR npID = '", npIDs); + + String Query = String.Format("SELECT * FROM CLIENTS WHERE npID = '{0}'", test); + DataTable Result = GetDataTable(Query); + + if (Result != null && Result.Rows.Count > 0) + { + foreach (DataRow ResponseRow in Result.Rows) + { + DateTime lastCon = DateTime.MinValue; + DateTime.TryParse(ResponseRow["LastConnection"].ToString(), out lastCon); + + returnssss.Add(new Player(ResponseRow["Name"].ToString(), ResponseRow["npID"].ToString(), -1, (Player.Permission)(ResponseRow["Level"]), Convert.ToInt32(ResponseRow["Number"]), ResponseRow["LastOffense"].ToString(), (int)ResponseRow["Connections"], ResponseRow["IP"].ToString(), lastCon)); + } + } + + return returnssss; + } + + public List getPlayers(List databaseIDs) + { + List returnssss = new List(); + String test = String.Join("' OR Number = '", databaseIDs); + + String Query = String.Format("SELECT * FROM CLIENTS WHERE Number = '{0}'", test); + DataTable Result = GetDataTable(Query); + + if (Result != null && Result.Rows.Count > 0) + { + foreach (DataRow ResponseRow in Result.Rows) + { + DateTime lastCon = DateTime.MinValue; + DateTime.TryParse(ResponseRow["LastConnection"].ToString(), out lastCon); + + returnssss.Add(new Player(ResponseRow["Name"].ToString(), ResponseRow["npID"].ToString(), -1, (Player.Permission)(ResponseRow["Level"]), Convert.ToInt32(ResponseRow["Number"]), ResponseRow["LastOffense"].ToString(), (int)ResponseRow["Connections"], ResponseRow["IP"].ToString(), lastCon)); + } + } + + return returnssss; + } + //Overloaded method for getPlayer, returns Client with matching DBIndex, null if none found public Player getPlayer(int dbIndex) { @@ -204,7 +241,7 @@ namespace SharedLibrary } catch (Exception) { - LC = DateTime.Now; + LC = DateTime.MinValue; } return new Player(p["Name"].ToString(), p["npID"].ToString(), -1, (Player.Permission)(p["Level"]), Convert.ToInt32(p["Number"]), p["LastOffense"].ToString(), Convert.ToInt32(p["Connections"]), p["IP"].ToString(), LC); @@ -217,7 +254,7 @@ namespace SharedLibrary //get player by ip, (used for webfront) public Player getPlayer(String IP) { - String Query = String.Format("SELECT * FROM CLIENTS WHERE IP='{0}'", IP); + String Query = String.Format("SELECT * FROM CLIENTS WHERE IP = '{0}'", IP); DataTable Result = GetDataTable(Query); if (Result != null && Result.Rows.Count > 0) @@ -255,7 +292,7 @@ namespace SharedLibrary //Returns a list of players matching name parameter, null if no players found matching public List findPlayers(String name) { - String Query = String.Format("SELECT * FROM CLIENTS WHERE Name LIKE '%{0}%' LIMIT 8", name); + String Query = String.Format("SELECT * FROM CLIENTS WHERE Name LIKE '%{0}%' LIMIT 32", name); DataTable Result = GetDataTable(Query); List Players = new List(); @@ -271,7 +308,7 @@ namespace SharedLibrary } catch (Exception) { - LC = DateTime.Now; + LC = DateTime.MinValue; } Players.Add(new Player(p["Name"].ToString(), p["npID"].ToString(), -1, (Player.Permission)(p["Level"]), Convert.ToInt32(p["Number"]), p["LastOffense"].ToString(), Convert.ToInt32(p["Connections"]), p["IP"].ToString(), LC)); @@ -403,144 +440,6 @@ namespace SharedLibrary } } - /*public class StatsDB : Database - { - public StatsDB(String FN) : base(FN) { } - - public override void Init() - { - if (!File.Exists(FileName)) - { - String Create = "CREATE TABLE [STATS] ( [Number] INTEGER, [KILLS] INTEGER DEFAULT 0, [DEATHS] INTEGER DEFAULT 0, [KDR] REAL DEFAULT 0, [SKILL] REAL DEFAULT 0, [MEAN] REAL DEFAULT 0, [DEV] REAL DEFAULT 0 );"; - ExecuteNonQuery(Create); - } - } - - // Return stats for player specified by Database ID, null if no matches - public Stats getStats(int DBID) - { - String Query = String.Format("SELECT * FROM STATS WHERE Number = '{0}'", DBID); - DataTable Result = GetDataTable(Query); - - if (Result != null && Result.Rows.Count > 0) - { - DataRow ResponseRow = Result.Rows[0]; - if (ResponseRow["MEAN"] == DBNull.Value) - ResponseRow["MEAN"] = 0; // Moserware.Skills.GameInfo.DefaultGameInfo.DefaultRating.Mean; - if (ResponseRow["DEV"] == DBNull.Value) - ResponseRow["DEV"] = 0; // Moserware.Skills.GameInfo.DefaultGameInfo.DefaultRating.StandardDeviation; - if (ResponseRow["SKILL"] == DBNull.Value) - ResponseRow["SKILL"] = 0; - - return new Stats(Convert.ToInt32(ResponseRow["Number"]), Convert.ToInt32(ResponseRow["KILLS"]), Convert.ToInt32(ResponseRow["DEATHS"]), Convert.ToDouble(ResponseRow["KDR"]), Convert.ToDouble(ResponseRow["SKILL"]), Convert.ToDouble(ResponseRow["MEAN"]), Convert.ToDouble(ResponseRow["DEV"])); - } - - else - return null; - } - - public void addPlayer(Player P) - { - Dictionary newPlayer = new Dictionary(); - - newPlayer.Add("Number", P.databaseID); - newPlayer.Add("KILLS", 0); - newPlayer.Add("DEATHS", 0); - newPlayer.Add("KDR", 0); - newPlayer.Add("SKILL", 0); //Moserware.Skills.GameInfo.DefaultGameInfo.DefaultRating.ConservativeRating); - newPlayer.Add("MEAN", 0); //Moserware.Skills.GameInfo.DefaultGameInfo.DefaultRating.Mean); - newPlayer.Add("DEV", 0); //Moserware.Skills.GameInfo.DefaultGameInfo.DefaultRating.StandardDeviation); - - Insert("STATS", newPlayer); - } - - //Update stat information of specified player - public void updatePlayer(Player P) - { - if (P.stats == null) - return; - - Dictionary updatedPlayer = new Dictionary(); - - updatedPlayer.Add("KILLS", P.stats.Kills); - updatedPlayer.Add("DEATHS", P.stats.Deaths); - updatedPlayer.Add("KDR", Math.Round(P.stats.KDR, 2)); - updatedPlayer.Add("SKILL", P.stats.Skill); - //updatedPlayer.Add("MEAN", P.stats.Rating.Mean); - //updatedPlayer.Add("DEV", P.stats.Rating.StandardDeviation); - - Update("STATS", updatedPlayer, String.Format("Number = '{0}'", P.databaseID)); - } - - //Returns top 5 players (we filter through them later) - public List topStats() - { - String Query = String.Format("SELECT * FROM STATS WHERE KILLS > '{0}' AND KDR < '{1}' AND SKILL > '{2}' ORDER BY SKILL DESC LIMIT 5", 250, 7, 245); - DataTable Result = GetDataTable(Query); - - List Top = new List(); - - if (Result != null && Result.Rows.Count > 0) - { - foreach (DataRow D in Result.Rows) - { - if (D["MEAN"] == DBNull.Value || D["DEV"] == DBNull.Value || D["SKILL"] == DBNull.Value) - continue; - - Stats S = new Stats(Convert.ToInt32(D["Number"]), Convert.ToInt32(D["KILLS"]), Convert.ToInt32(D["DEATHS"]), Convert.ToDouble(D["KDR"]), Convert.ToDouble(D["SKILL"]), Convert.ToDouble(D["MEAN"]), Convert.ToDouble(D["DEV"])); - Top.Add(S); - } - } - - return Top; - } - - public List getMultipleStats(int start, int length) - { - String Query = String.Format("SELECT * FROM STATS ORDER BY SKILL DESC LIMIT '{0}' OFFSET '{1}'", length, start); - DataTable Result = GetDataTable(Query); - - List Stats = new List(); - - if (Result != null && Result.Rows.Count > 0) - { - foreach (DataRow D in Result.Rows) - { - if (D["MEAN"] == DBNull.Value) - continue; - if (D["DEV"] == DBNull.Value) - continue; - - if (D["SKILL"] == DBNull.Value) - D["SKILL"] = 0; - - Stats S = new Stats(Convert.ToInt32(D["Number"]), Convert.ToInt32(D["KILLS"]), Convert.ToInt32(D["DEATHS"]), Convert.ToDouble(D["KDR"]), Convert.ToDouble(D["SKILL"]), Convert.ToDouble(D["MEAN"]), Convert.ToDouble(D["DEV"])); - Stats.Add(S); - } - } - - return Stats; - } - - public int totalStats() - { - DataTable Result = GetDataTable("SELECT * FROM STATS"); - return Result.Rows.Count; - } - - public void clearSkill() - { - String Query = "SELECT * FROM STATS"; - DataTable Result = GetDataTable(Query); - - if (Result != null && Result.Rows.Count > 0) - { - foreach (DataRow D in Result.Rows) - Update("STATS", new Dictionary() { { "SKILL", 1 } }, String.Format("Number = '{0}'", D["Number"])); - } - } - }*/ - public class AliasesDB : Database { public AliasesDB(String FN) : base(FN) { } @@ -609,9 +508,9 @@ namespace SharedLibrary { Dictionary newPlayer = new Dictionary(); - newPlayer.Add("Number", Alias.getNumber()); - newPlayer.Add("NAMES", Alias.getNamesDB()); - newPlayer.Add("IPS", Alias.getIPSDB()); + newPlayer.Add("Number", Alias.Number); + newPlayer.Add("NAMES", String.Join(";", Alias.Names)); + newPlayer.Add("IPS", String.Join(";", Alias.IPS)); Insert("ALIASES", newPlayer); } @@ -620,11 +519,11 @@ namespace SharedLibrary { Dictionary updatedPlayer = new Dictionary(); - updatedPlayer.Add("Number", Alias.getNumber()); - updatedPlayer.Add("NAMES", Alias.getNamesDB()); - updatedPlayer.Add("IPS", Alias.getIPSDB()); + updatedPlayer.Add("Number", Alias.Number); + updatedPlayer.Add("NAMES", String.Join(";", Alias.Names)); + updatedPlayer.Add("IPS", String.Join(";", Alias.IPS)); - Update("ALIASES", updatedPlayer, String.Format("Number = '{0}'", Alias.getNumber())); + Update("ALIASES", updatedPlayer, String.Format("Number = '{0}'", Alias.Number)); } } } diff --git a/SharedLibary/Event.cs b/SharedLibary/Event.cs index 158f1bd2..3e8ce6f5 100644 --- a/SharedLibary/Event.cs +++ b/SharedLibary/Event.cs @@ -29,6 +29,8 @@ namespace SharedLibrary public enum GType { //FROM SERVER + Start, + Stop, Connect, Disconnect, Say, @@ -126,10 +128,4 @@ namespace SharedLibrary public Player Target; public Server Owner; } - - public abstract class EventNotify - { - public abstract void onEvent(Event E); - public abstract void onLoad(); - } } diff --git a/SharedLibary/Player.cs b/SharedLibary/Player.cs index 2b9ac82f..98087df7 100644 --- a/SharedLibary/Player.cs +++ b/SharedLibary/Player.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using System.Linq; namespace SharedLibrary { @@ -9,50 +10,13 @@ namespace SharedLibrary public Aliases(int Num, String N, String I) { Number = Num; - Names = N; - IPS = I; + Names = N.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.Trim()).ToList(); + IPS = new List(I.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)); } - public List getNames() - { - return new List(Names.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)); - } - - public List getIPS() - { - return new List(IPS.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)); - } - - public String getIPSDB() - { - return IPS; - } - - public String getNamesDB() - { - return Names; - } - - public int getNumber() - { - return Number; - } - - public void addName(String Name) - { - if (Name.Trim() != String.Empty && Name != null) - Names += ';' + Name; - } - - public void addIP(String IP) - { - if (IP.Trim() != String.Empty && IP != null) - IPS += ';' + IP; - } - - private String Names; - private String IPS; - private int Number; + public List Names { get; private set; } + public List IPS { get; private set; } + public int Number { get; private set; } } public class Player @@ -80,7 +44,6 @@ namespace SharedLibrary IP = ""; Warnings = 0; Alias = new Aliases(0, "", ""); - //stats = new Stats(0, 0, 0, 0, Moserware.Skills.GameInfo.DefaultGameInfo.DefaultRating.ConservativeRating, Moserware.Skills.GameInfo.DefaultGameInfo.DefaultRating.Mean, Moserware.Skills.GameInfo.DefaultGameInfo.DefaultRating.StandardDeviation); LastConnection = DateTime.Now; } diff --git a/SharedLibary/Plugin.cs b/SharedLibary/Plugin.cs new file mode 100644 index 00000000..cb4a3ca6 --- /dev/null +++ b/SharedLibary/Plugin.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SharedLibrary +{ + public abstract class Plugin + { + public abstract void onLoad(); + } + + public abstract class Notify : Plugin + { + public abstract void onEvent(Event E); + } +} diff --git a/SharedLibary/Server.cs b/SharedLibary/Server.cs index 2ac49b1b..30c4c880 100644 --- a/SharedLibary/Server.cs +++ b/SharedLibary/Server.cs @@ -23,6 +23,7 @@ namespace SharedLibrary clientDB = new ClientsDB("clients.rm"); aliasDB = new AliasesDB("aliases.rm"); + Bans = new List(); players = new List(new Player[18]); events = new Queue(); Macros = new Dictionary(); @@ -108,9 +109,18 @@ namespace SharedLibrary /// /// Get any know aliases ( name or ip based ) from the database /// - /// List of aliases matching given player /// Player to scan for aliases - abstract public void getAliases(List returnPlayers, Player Origin); + abstract public List getAliases(Player Origin); + + public List getPlayerAliases(Player Origin) + { + List databaseIDs = new List(); + + foreach (Aliases A in getAliases(Origin)) + databaseIDs.Add(A.Number); + + return clientDB.getPlayers(databaseIDs); + } /// /// Add a player to the server's player list diff --git a/SharedLibary/SharedLibrary.csproj b/SharedLibary/SharedLibrary.csproj index ffe26593..909f9325 100644 --- a/SharedLibary/SharedLibrary.csproj +++ b/SharedLibary/SharedLibrary.csproj @@ -56,6 +56,7 @@ + diff --git a/SharedLibary/Utilities.cs b/SharedLibary/Utilities.cs index e9739b45..a4ce5260 100644 --- a/SharedLibary/Utilities.cs +++ b/SharedLibary/Utilities.cs @@ -114,6 +114,31 @@ namespace SharedLibrary } } + public static String levelHTMLFormatted(Player.Permission Level) + { + switch (Level) + { + case Player.Permission.User: + return "" + Level + ""; + case Player.Permission.Moderator: + return "" + Level + ""; + case Player.Permission.Administrator: + return "" + Level + ""; + case Player.Permission.SeniorAdmin: + return "" + Level + ""; + case Player.Permission.Owner: + return "" + Level + ""; + case Player.Permission.Creator: + return "" + Level + ""; + case Player.Permission.Banned: + return "" + Level + ""; + case Player.Permission.Flagged: + return "" + Level + ""; + default: + return "" + Level + ""; + } + } + public static String nameHTMLFormatted(Player P) { switch (P.Level) diff --git a/Webfront Plugin/Properties/AssemblyInfo.cs b/Webfront Plugin/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..13bcddb9 --- /dev/null +++ b/Webfront Plugin/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Webfront Plugin")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Webfront Plugin")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("03a62b7b-361a-4232-8db7-4e00b9e7a31a")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")]