From 25b3e3abc19af4f77bd0ef53ae5847e8b87da36a Mon Sep 17 00:00:00 2001 From: RaidMax Date: Wed, 7 Jun 2017 19:59:59 -0500 Subject: [PATCH] Moved plugins to a seperate folder Uncapped the search result limit for !find --- Admin/Server.cs | 28 ++-- Admin/WebService.cs | 9 +- Admin/lib/SharedLibrary.dll | Bin 104960 -> 97280 bytes .../Auto Restart Plugin.csproj | 79 ----------- Auto Restart Plugin/Main.cs | 74 ---------- Auto Restart Plugin/Monitoring.cs | 127 ------------------ .../Chat Monitor Plugin.csproj | 64 --------- Chat Monitor Plugin/Main.cs | 59 -------- IW4M Admin.sln | 48 +------ .../EventAPI}/EventAPI.csproj | 2 +- {EventAPI => Plugins/EventAPI}/Plugin.cs | 2 +- .../EventAPI}/packages.config | 0 .../FastRestart}/FastRestartPlugin.csproj | 2 +- .../FastRestart}/Plugin.cs | 0 .../FastRestart}/Properties/AssemblyInfo.cs | 0 .../MessageBoard}/Encryption.cs | 0 .../MessageBoard}/Events.cs | 0 .../MessageBoard}/Exceptions.cs | 0 .../MessageBoard}/Forum.cs | 0 .../MessageBoard}/Identifiable.cs | 0 .../MessageBoard}/MessageboardPlugin.csproj | 2 +- .../MessageBoard}/Plugin.cs | 0 .../MessageBoard}/Rank.cs | 0 .../MessageBoard}/Session.cs | 0 .../MessageBoard}/Storage.cs | 0 .../MessageBoard}/Thread.cs | 0 .../MessageBoard}/User.cs | 0 .../MessageBoard}/app.config | 0 .../MessageBoard}/forum/category.html | 0 .../MessageBoard}/forum/home.html | 0 .../MessageBoard}/forum/login.html | 0 .../MessageBoard}/forum/postthread.html | 0 .../MessageBoard}/forum/register.html | 0 .../MessageBoard}/forum/thread.html | 0 .../MessageBoard}/forum/user.html | 0 .../MessageBoard}/forum/usercp.html | 0 .../MessageBoard}/packages.config | 0 .../SimpleStats}/Plugin.cs | 2 +- .../SimpleStats}/Properties/AssemblyInfo.cs | 0 .../SimpleStats}/Stats Plugin.csproj | 2 +- {Votemap Plugin => Plugins/VoteMap}/Plugin.cs | 2 +- .../VoteMap}/Votemap Plugin.csproj | 2 +- .../Welcome}/CountryLookup.cs | 0 {Welcome Plugin => Plugins/Welcome}/GeoIP.dat | Bin {Welcome Plugin => Plugins/Welcome}/Plugin.cs | 0 .../Welcome}/Properties/AssemblyInfo.cs | 0 .../Welcome}/Welcome Plugin.csproj | 2 +- .../Welcome}/packages.config | 0 SharedLibrary/Commands/NativeCommands.cs | 5 +- SharedLibrary/Database.cs | 2 +- SharedLibrary/Server.cs | 31 ++--- 51 files changed, 42 insertions(+), 502 deletions(-) delete mode 100644 Auto Restart Plugin/Auto Restart Plugin.csproj delete mode 100644 Auto Restart Plugin/Main.cs delete mode 100644 Auto Restart Plugin/Monitoring.cs delete mode 100644 Chat Monitor Plugin/Chat Monitor Plugin.csproj delete mode 100644 Chat Monitor Plugin/Main.cs rename {EventAPI => Plugins/EventAPI}/EventAPI.csproj (97%) rename {EventAPI => Plugins/EventAPI}/Plugin.cs (97%) rename {EventAPI => Plugins/EventAPI}/packages.config (100%) rename {FastRestartPlugin => Plugins/FastRestart}/FastRestartPlugin.csproj (96%) rename {FastRestartPlugin => Plugins/FastRestart}/Plugin.cs (100%) rename {FastRestartPlugin => Plugins/FastRestart}/Properties/AssemblyInfo.cs (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/Encryption.cs (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/Events.cs (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/Exceptions.cs (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/Forum.cs (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/Identifiable.cs (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/MessageboardPlugin.csproj (98%) rename {MessageboardPlugin => Plugins/MessageBoard}/Plugin.cs (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/Rank.cs (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/Session.cs (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/Storage.cs (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/Thread.cs (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/User.cs (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/app.config (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/forum/category.html (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/forum/home.html (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/forum/login.html (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/forum/postthread.html (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/forum/register.html (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/forum/thread.html (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/forum/user.html (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/forum/usercp.html (100%) rename {MessageboardPlugin => Plugins/MessageBoard}/packages.config (100%) rename {Stats Plugin => Plugins/SimpleStats}/Plugin.cs (99%) rename {Stats Plugin => Plugins/SimpleStats}/Properties/AssemblyInfo.cs (100%) rename {Stats Plugin => Plugins/SimpleStats}/Stats Plugin.csproj (97%) rename {Votemap Plugin => Plugins/VoteMap}/Plugin.cs (99%) rename {Votemap Plugin => Plugins/VoteMap}/Votemap Plugin.csproj (97%) rename {Welcome Plugin => Plugins/Welcome}/CountryLookup.cs (100%) rename {Welcome Plugin => Plugins/Welcome}/GeoIP.dat (100%) rename {Welcome Plugin => Plugins/Welcome}/Plugin.cs (100%) rename {Welcome Plugin => Plugins/Welcome}/Properties/AssemblyInfo.cs (100%) rename {Welcome Plugin => Plugins/Welcome}/Welcome Plugin.csproj (98%) rename {Welcome Plugin => Plugins/Welcome}/packages.config (100%) diff --git a/Admin/Server.cs b/Admin/Server.cs index cbabe5056..20a682b9a 100644 --- a/Admin/Server.cs +++ b/Admin/Server.cs @@ -153,12 +153,7 @@ namespace IW4MAdmin Players[NewPlayer.ClientID] = null; Players[NewPlayer.ClientID] = NewPlayer; - Logger.WriteInfo($"Client {NewPlayer.Name}::{NewPlayer.NetworkID} connecting..."); // they're clean - - // todo: get this out of here - while (chatHistory.Count > Math.Ceiling((double)ClientNum / 2)) - chatHistory.RemoveAt(0); - chatHistory.Add(new Chat(NewPlayer.Name, "CONNECTED", DateTime.Now)); + Logger.WriteInfo($"Client {NewPlayer.Name}::{NewPlayer.NetworkID} connecting..."); // they're clean if (NewPlayer.Level > Player.Permission.Moderator) await NewPlayer.Tell("There are ^5" + Reports.Count + " ^7recent reports!"); @@ -189,8 +184,6 @@ namespace IW4MAdmin Players[cNum] = null; ClientNum--; - if (ClientNum == 0) - chatHistory.Clear(); } } @@ -533,17 +526,22 @@ 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)); - while (chatHistory.Count > Math.Ceiling(((double)ClientNum - 1) / 2)) - chatHistory.RemoveAt(0); - chatHistory.Add(new Chat(E.Origin.Name, "DISCONNECTED", DateTime.Now)); + if (ClientNum == 0) + ChatHistory.Clear(); return; } @@ -621,10 +619,8 @@ namespace IW4MAdmin E.Data = E.Data.StripColors().CleanChars(); if (E.Data.Length > 50) E.Data = E.Data.Substring(0, 50) + "..."; - while (chatHistory.Count > Math.Ceiling((double)ClientNum / 2)) - chatHistory.RemoveAt(0); - chatHistory.Add(new Chat(E.Origin.Name, E.Data, DateTime.Now)); + ChatHistory.Add(new Chat(E.Origin.Name, E.Data, DateTime.Now)); return; } @@ -707,9 +703,9 @@ namespace IW4MAdmin // banned from all servers if active foreach (var server in Manager.GetServers()) { - if (server.getPlayers().Count > 0) + if (server.GetPlayersAsList().Count > 0) { - var activeClient = server.getPlayers().Find(x => x.NetworkID == Target.NetworkID); + var activeClient = server.GetPlayersAsList().Find(x => x.NetworkID == Target.NetworkID); if (activeClient != null) await server.ExecuteCommandAsync("tempbanclient " + activeClient.ClientID + " \"" + Message + "^7" + GetWebsiteString() + "^7\""); } diff --git a/Admin/WebService.cs b/Admin/WebService.cs index eb3f31692..9df691966 100644 --- a/Admin/WebService.cs +++ b/Admin/WebService.cs @@ -53,8 +53,7 @@ namespace IW4MAdmin catch (Exception e) { - Manager.GetInstance().Logger.WriteError($"Unable to start webservice ( port is probably in use ): {e.Message}"); - + Manager.GetInstance().Logger.WriteError($"Unable to start webservice ( port is probably in use ): {e.Message}"); } } @@ -196,10 +195,10 @@ namespace IW4MAdmin eachServer.maxPlayers = S.MaxClients; eachServer.mapName = S.CurrentMap.Alias; eachServer.gameType = Utilities.gametypeLocalized(S.getGametype()); - eachServer.currentPlayers = S.getPlayers().Count; - eachServer.chatHistory = S.chatHistory; + eachServer.currentPlayers = S.GetPlayersAsList().Count; + eachServer.chatHistory = S.ChatHistory; eachServer.players = new List(); - foreach (Player P in S.getPlayers()) + foreach (Player P in S.GetPlayersAsList()) { PlayerInfo pInfo = new PlayerInfo(); pInfo.playerID = P.DatabaseID; diff --git a/Admin/lib/SharedLibrary.dll b/Admin/lib/SharedLibrary.dll index e17dbbc4f0169f36c5916ea5da2c53fc9fda652a..0c8582960ff49f6a9e3429046e72eaf3a7cd923b 100644 GIT binary patch literal 97280 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 b$Lo~?i~i63VLs$``Y6sR|Ht3|e;oLq1z?c$ literal 104960 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 - - - - Debug - AnyCPU - {2321A25F-7871-47C3-8440-02551918D6A1} - Library - Properties - Auto_Restart_Plugin - AutorestartPlugin - v4.5 - 512 - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - bin\Release-Stable\ - TRACE - true - pdbonly - AnyCPU - prompt - MinimumRecommendedRules.ruleset - - - - - - - - - - - - - {d51eeceb-438a-47da-870f-7d7b41bc24d6} - SharedLibrary - False - - - - - - - - copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)Admin\bin\$(ConfigurationName)\plugins\AutoRestartPlugin.dll" - - - - -copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)BUILD\plugins\" - - - \ No newline at end of file diff --git a/Auto Restart Plugin/Main.cs b/Auto Restart Plugin/Main.cs deleted file mode 100644 index 2eeb96d1c..000000000 --- a/Auto Restart Plugin/Main.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; -using SharedLibrary; -using SharedLibrary.Interfaces; -using System.Threading.Tasks; - -#if DEBUG -namespace Auto_Restart_Plugin -{ - public class Main : IPlugin - { - public string Author - { - get - { - return "RaidMax"; - } - } - - public float Version - { - get - { - return 1.0f; - } - } - - public string Name - { - get - { - return "Auto Restart Plugin"; - } - } - - public async Task OnLoadAsync() - { - return; - } - - public async Task OnUnloadAsync() - { - return; - } - - public async Task OnTickAsync(Server S) - { - switch (Monitoring.shouldRestart()) - { - case 300: - await S.Broadcast("^1Server will be performing an ^5AUTOMATIC ^1restart in ^55 ^1minutes."); - break; - case 120: - await S.Broadcast("^1Server will be performing an ^5AUTOMATIC ^1restart in ^52 ^1minutes."); - break; - case 60: - await S.Broadcast("^1Server will be performing an ^5AUTOMATIC ^1restart in ^51 ^1minute."); - break; - case 30: - await S.Broadcast("^1Server will be performing an ^5AUTOMATIC ^1restart in ^530 ^1seconds."); - break; - case 0: - await S.Broadcast("^1Server now performing an ^5AUTOMATIC ^1restart ^5NOW ^1please reconnect."); - Monitoring.Restart(S); - break; - } - } - - public async Task OnEventAsync(Event E, Server S) - { - return; - } - } -} -#endif diff --git a/Auto Restart Plugin/Monitoring.cs b/Auto Restart Plugin/Monitoring.cs deleted file mode 100644 index b403839b3..000000000 --- a/Auto Restart Plugin/Monitoring.cs +++ /dev/null @@ -1,127 +0,0 @@ -using System; -using System.Diagnostics; -using System.Text; -using System.Threading; -using System.Runtime.InteropServices; -using System.Management; -using SharedLibrary; - -namespace Auto_Restart_Plugin -{ - static class Monitoring - { - [DllImport("kernel32")] - public static extern bool DeleteFile(string name); - - public static void Restart(Server goodBye) - { - _Restart(goodBye); - } - - private static void _Restart(Server goodBye) - { - try - { - string cmdLine = GetCommandLine(Process.GetProcessById(goodBye.pID())); - var info = new ProcessStartInfo(); - - // if we don't delete this, we get a prompt.. - DeleteFile(Process.GetProcessById(goodBye.pID()).MainModule.FileName + ":Zone.Identifier"); - - //info.WorkingDirectory = goodBye.Basepath; - info.Arguments = cmdLine; - info.FileName = Process.GetProcessById(goodBye.pID()).MainModule.FileName; - // goodBye.executeCommand("killserver"); - - Process.GetProcessById(Process.GetProcessById(goodBye.pID()).Parent().Id).Kill(); - Process.GetProcessById(goodBye.pID()).Kill(); - - Process.Start(info); - } - - catch (Exception E) - { - //goodBye.Log.Write("SOMETHING FUCKED UP BEYOND ALL REPAIR " + E.ToString()); - } - } - - public static int shouldRestart() - { - var curTime = DateTime.Now; - DateTime restartTime = new DateTime(curTime.Year, curTime.Month, curTime.Day, 4, 0, 0); - var a = Math.Floor((restartTime - curTime).TotalMilliseconds / 1000); - if (a > 0 && a < 2) // just in case of precision - return 0; - else - { - switch((int)a) - { - case 300: - return 300; - case 120: - return 120; - case 60: - return 60; - case 30: - return 30; - default: - return 1337; - } - } - } - - //http://stackoverflow.com/questions/2633628/can-i-get-command-line-arguments-of-other-processes-from-net-c - private static string GetCommandLine(this Process process) - { - var commandLine = new StringBuilder(); - commandLine.Append(" "); - using (var searcher = new ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + process.Id)) - { - foreach (var @object in searcher.Get()) - { - if (@object["CommandLine"].ToString().Contains("iw4m")) - commandLine.Append(@object["CommandLine"].ToString().Substring(4)); - else - commandLine.Append(@object["CommandLine"]); - commandLine.Append(" "); - } - } - - return commandLine.ToString().Trim(); - } - } - - - public static class ProcessExtensions - { - private static string FindIndexedProcessName(int pid) - { - var processName = Process.GetProcessById(pid).ProcessName; - var processesByName = Process.GetProcessesByName(processName); - string processIndexdName = null; - - for (var index = 0; index < processesByName.Length; index++) - { - processIndexdName = index == 0 ? processName : processName + "#" + index; - var processId = new PerformanceCounter("Process", "ID Process", processIndexdName); - if ((int)processId.NextValue() == pid) - { - return processIndexdName; - } - } - - return processIndexdName; - } - - private static Process FindPidFromIndexedProcessName(string indexedProcessName) - { - var parentId = new PerformanceCounter("Process", "Creating Process ID", indexedProcessName); - return Process.GetProcessById((int)parentId.NextValue()); - } - - public static Process Parent(this Process process) - { - return FindPidFromIndexedProcessName(FindIndexedProcessName(process.Id)); - } - } -} diff --git a/Chat Monitor Plugin/Chat Monitor Plugin.csproj b/Chat Monitor Plugin/Chat Monitor Plugin.csproj deleted file mode 100644 index b1912ac22..000000000 --- a/Chat Monitor Plugin/Chat Monitor Plugin.csproj +++ /dev/null @@ -1,64 +0,0 @@ - - - - - Debug - AnyCPU - {79406C5E-A8AD-4A50-A7F0-53CE56792A31} - Library - Properties - ChatMonitor - ChatMonitor - v4.0 - 512 - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - {d51eeceb-438a-47da-870f-7d7b41bc24d6} - SharedLibrary - - - {99e36ebd-1fa1-494c-8a66-bece64eff378} - Webfront Plugin - - - - - copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)Admin\plugins\ChatMonitorPlugin.dll" - - - \ No newline at end of file diff --git a/Chat Monitor Plugin/Main.cs b/Chat Monitor Plugin/Main.cs deleted file mode 100644 index 343196c22..000000000 --- a/Chat Monitor Plugin/Main.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System; -using System.Collections.Generic; -using SharedLibrary; - - -namespace ChatMonitor -{ - public class Main : IPlugin - { - - - public string Author - { - get - { - return "RaidMax"; - } - } - - public float Version - { - get - { - return 1.0f; - } - } - - public string Name - { - get - { - return "Chat Monitor Plugin"; - } - } - - - public void onLoad() - { - lastClear = DateTime.Now; - flaggedMessages = 0; - flaggedMessagesText = new List(); - } - - public void onUnload() - { - return; - } - - public void onTick(Server S) - { - return; - } - - public void onEvent(Event E, Server S) - { - - } - } -} diff --git a/IW4M Admin.sln b/IW4M Admin.sln index 5c320b596..6ed66584d 100644 --- a/IW4M Admin.sln +++ b/IW4M Admin.sln @@ -5,7 +5,6 @@ VisualStudioVersion = 15.0.26403.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 - {2321A25F-7871-47C3-8440-02551918D6A1} = {2321A25F-7871-47C3-8440-02551918D6A1} {AF097E6B-48D5-4452-9CCF-0A81A21F341D} = {AF097E6B-48D5-4452-9CCF-0A81A21F341D} {4785AB75-66F3-4391-985D-63A5A049A0FA} = {4785AB75-66F3-4391-985D-63A5A049A0FA} {428D8EB9-ECA3-4A66-AA59-3A944378C33F} = {428D8EB9-ECA3-4A66-AA59-3A944378C33F} @@ -14,29 +13,27 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IW4M ADMIN", "Admin\IW4M AD {D51EECEB-438A-47DA-870F-7D7B41BC24D6} = {D51EECEB-438A-47DA-870F-7D7B41BC24D6} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stats Plugin", "Stats Plugin\Stats Plugin.csproj", "{4785AB75-66F3-4391-985D-63A5A049A0FA}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stats Plugin", "Plugins\SimpleStats\Stats Plugin.csproj", "{4785AB75-66F3-4391-985D-63A5A049A0FA}" ProjectSection(ProjectDependencies) = postProject {D51EECEB-438A-47DA-870F-7D7B41BC24D6} = {D51EECEB-438A-47DA-870F-7D7B41BC24D6} EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharedLibrary", "SharedLibrary\SharedLibrary.csproj", "{D51EECEB-438A-47DA-870F-7D7B41BC24D6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Welcome Plugin", "Welcome Plugin\Welcome Plugin.csproj", "{AF097E6B-48D5-4452-9CCF-0A81A21F341D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Welcome Plugin", "Plugins\Welcome\Welcome Plugin.csproj", "{AF097E6B-48D5-4452-9CCF-0A81A21F341D}" ProjectSection(ProjectDependencies) = postProject {D51EECEB-438A-47DA-870F-7D7B41BC24D6} = {D51EECEB-438A-47DA-870F-7D7B41BC24D6} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Auto Restart Plugin", "Auto Restart Plugin\Auto Restart Plugin.csproj", "{2321A25F-7871-47C3-8440-02551918D6A1}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Votemap Plugin", "Plugins\VoteMap\Votemap Plugin.csproj", "{428D8EB9-ECA3-4A66-AA59-3A944378C33F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Votemap Plugin", "Votemap Plugin\Votemap Plugin.csproj", "{428D8EB9-ECA3-4A66-AA59-3A944378C33F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessageboardPlugin", "Plugins\MessageBoard\MessageboardPlugin.csproj", "{E46C85BD-A99C-484E-BCCE-0F1831C5925E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessageboardPlugin", "MessageboardPlugin\MessageboardPlugin.csproj", "{E46C85BD-A99C-484E-BCCE-0F1831C5925E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EventAPI", "EventAPI\EventAPI.csproj", "{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EventAPI", "Plugins\EventAPI\EventAPI.csproj", "{C9E821BF-23AD-4CB5-B7F9-B3B99B606650}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{26E8B310-269E-46D4-A612-24601F16065F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FastRestartPlugin", "FastRestartPlugin\FastRestartPlugin.csproj", "{1479DE87-ACB5-4046-81C8-A0BA5041227D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FastRestartPlugin", "Plugins\FastRestart\FastRestartPlugin.csproj", "{1479DE87-ACB5-4046-81C8-A0BA5041227D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -186,38 +183,6 @@ Global {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 - {2321A25F-7871-47C3-8440-02551918D6A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Debug|x64.ActiveCfg = Debug|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Debug|x64.Build.0 = Debug|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Debug|x86.ActiveCfg = Debug|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Debug|x86.Build.0 = Debug|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release|Any CPU.Build.0 = Release|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release|x64.ActiveCfg = Release|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release|x64.Build.0 = Release|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release|x86.ActiveCfg = Release|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release|x86.Build.0 = Release|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release-Nightly|Any CPU.ActiveCfg = Release|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release-Nightly|Any CPU.Build.0 = Release|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release-Nightly|Mixed Platforms.ActiveCfg = Release|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release-Nightly|Mixed Platforms.Build.0 = Release|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release-Nightly|x64.ActiveCfg = Release|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release-Nightly|x64.Build.0 = Release|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release-Nightly|x86.ActiveCfg = Release|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release-Nightly|x86.Build.0 = Release|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release-Stable|Any CPU.ActiveCfg = Release-Stable|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release-Stable|Any CPU.Build.0 = Release-Stable|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release-Stable|Mixed Platforms.ActiveCfg = Release-Stable|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release-Stable|Mixed Platforms.Build.0 = Release-Stable|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release-Stable|x64.ActiveCfg = Release-Stable|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release-Stable|x64.Build.0 = Release-Stable|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release-Stable|x86.ActiveCfg = Release-Stable|Any CPU - {2321A25F-7871-47C3-8440-02551918D6A1}.Release-Stable|x86.Build.0 = Release-Stable|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 @@ -349,7 +314,6 @@ Global GlobalSection(NestedProjects) = preSolution {4785AB75-66F3-4391-985D-63A5A049A0FA} = {26E8B310-269E-46D4-A612-24601F16065F} {AF097E6B-48D5-4452-9CCF-0A81A21F341D} = {26E8B310-269E-46D4-A612-24601F16065F} - {2321A25F-7871-47C3-8440-02551918D6A1} = {26E8B310-269E-46D4-A612-24601F16065F} {428D8EB9-ECA3-4A66-AA59-3A944378C33F} = {26E8B310-269E-46D4-A612-24601F16065F} {E46C85BD-A99C-484E-BCCE-0F1831C5925E} = {26E8B310-269E-46D4-A612-24601F16065F} {C9E821BF-23AD-4CB5-B7F9-B3B99B606650} = {26E8B310-269E-46D4-A612-24601F16065F} diff --git a/EventAPI/EventAPI.csproj b/Plugins/EventAPI/EventAPI.csproj similarity index 97% rename from EventAPI/EventAPI.csproj rename to Plugins/EventAPI/EventAPI.csproj index b9aca17dd..d14099270 100644 --- a/EventAPI/EventAPI.csproj +++ b/Plugins/EventAPI/EventAPI.csproj @@ -47,7 +47,7 @@ MinimumRecommendedRules.ruleset - + {d51eeceb-438a-47da-870f-7d7b41bc24d6} SharedLibrary False diff --git a/EventAPI/Plugin.cs b/Plugins/EventAPI/Plugin.cs similarity index 97% rename from EventAPI/Plugin.cs rename to Plugins/EventAPI/Plugin.cs index 9715adaff..190bfa00a 100644 --- a/EventAPI/Plugin.cs +++ b/Plugins/EventAPI/Plugin.cs @@ -35,7 +35,7 @@ namespace EventAPI { StringBuilder s = new StringBuilder(); foreach (var S in Events.activeServers) - s.Append(String.Format("{0} has {1}/{4} players playing {2} on {3}\n", S.getName(), S.getPlayers().Count, Utilities.gametypeLocalized(S.getGametype()), S.CurrentMap.Name, S.MaxClients)); + s.Append(String.Format("{0} has {1}/{4} players playing {2} on {3}\n", S.getName(), S.GetPlayersAsList().Count, Utilities.gametypeLocalized(S.getGametype()), S.CurrentMap.Name, S.MaxClients)); requestedEvent.Event = new RestEvent(RestEvent.eType.STATUS, RestEvent.eVersion.IW4MAdmin, s.ToString(), "Status", "", ""); requestedEvent.eventCount = 1; } diff --git a/EventAPI/packages.config b/Plugins/EventAPI/packages.config similarity index 100% rename from EventAPI/packages.config rename to Plugins/EventAPI/packages.config diff --git a/FastRestartPlugin/FastRestartPlugin.csproj b/Plugins/FastRestart/FastRestartPlugin.csproj similarity index 96% rename from FastRestartPlugin/FastRestartPlugin.csproj rename to Plugins/FastRestart/FastRestartPlugin.csproj index eadff0b04..b10db6aea 100644 --- a/FastRestartPlugin/FastRestartPlugin.csproj +++ b/Plugins/FastRestart/FastRestartPlugin.csproj @@ -42,7 +42,7 @@ - + {d51eeceb-438a-47da-870f-7d7b41bc24d6} SharedLibrary diff --git a/FastRestartPlugin/Plugin.cs b/Plugins/FastRestart/Plugin.cs similarity index 100% rename from FastRestartPlugin/Plugin.cs rename to Plugins/FastRestart/Plugin.cs diff --git a/FastRestartPlugin/Properties/AssemblyInfo.cs b/Plugins/FastRestart/Properties/AssemblyInfo.cs similarity index 100% rename from FastRestartPlugin/Properties/AssemblyInfo.cs rename to Plugins/FastRestart/Properties/AssemblyInfo.cs diff --git a/MessageboardPlugin/Encryption.cs b/Plugins/MessageBoard/Encryption.cs similarity index 100% rename from MessageboardPlugin/Encryption.cs rename to Plugins/MessageBoard/Encryption.cs diff --git a/MessageboardPlugin/Events.cs b/Plugins/MessageBoard/Events.cs similarity index 100% rename from MessageboardPlugin/Events.cs rename to Plugins/MessageBoard/Events.cs diff --git a/MessageboardPlugin/Exceptions.cs b/Plugins/MessageBoard/Exceptions.cs similarity index 100% rename from MessageboardPlugin/Exceptions.cs rename to Plugins/MessageBoard/Exceptions.cs diff --git a/MessageboardPlugin/Forum.cs b/Plugins/MessageBoard/Forum.cs similarity index 100% rename from MessageboardPlugin/Forum.cs rename to Plugins/MessageBoard/Forum.cs diff --git a/MessageboardPlugin/Identifiable.cs b/Plugins/MessageBoard/Identifiable.cs similarity index 100% rename from MessageboardPlugin/Identifiable.cs rename to Plugins/MessageBoard/Identifiable.cs diff --git a/MessageboardPlugin/MessageboardPlugin.csproj b/Plugins/MessageBoard/MessageboardPlugin.csproj similarity index 98% rename from MessageboardPlugin/MessageboardPlugin.csproj rename to Plugins/MessageBoard/MessageboardPlugin.csproj index 79ee51eaf..8732b3811 100644 --- a/MessageboardPlugin/MessageboardPlugin.csproj +++ b/Plugins/MessageBoard/MessageboardPlugin.csproj @@ -117,7 +117,7 @@ - + {d51eeceb-438a-47da-870f-7d7b41bc24d6} SharedLibrary False diff --git a/MessageboardPlugin/Plugin.cs b/Plugins/MessageBoard/Plugin.cs similarity index 100% rename from MessageboardPlugin/Plugin.cs rename to Plugins/MessageBoard/Plugin.cs diff --git a/MessageboardPlugin/Rank.cs b/Plugins/MessageBoard/Rank.cs similarity index 100% rename from MessageboardPlugin/Rank.cs rename to Plugins/MessageBoard/Rank.cs diff --git a/MessageboardPlugin/Session.cs b/Plugins/MessageBoard/Session.cs similarity index 100% rename from MessageboardPlugin/Session.cs rename to Plugins/MessageBoard/Session.cs diff --git a/MessageboardPlugin/Storage.cs b/Plugins/MessageBoard/Storage.cs similarity index 100% rename from MessageboardPlugin/Storage.cs rename to Plugins/MessageBoard/Storage.cs diff --git a/MessageboardPlugin/Thread.cs b/Plugins/MessageBoard/Thread.cs similarity index 100% rename from MessageboardPlugin/Thread.cs rename to Plugins/MessageBoard/Thread.cs diff --git a/MessageboardPlugin/User.cs b/Plugins/MessageBoard/User.cs similarity index 100% rename from MessageboardPlugin/User.cs rename to Plugins/MessageBoard/User.cs diff --git a/MessageboardPlugin/app.config b/Plugins/MessageBoard/app.config similarity index 100% rename from MessageboardPlugin/app.config rename to Plugins/MessageBoard/app.config diff --git a/MessageboardPlugin/forum/category.html b/Plugins/MessageBoard/forum/category.html similarity index 100% rename from MessageboardPlugin/forum/category.html rename to Plugins/MessageBoard/forum/category.html diff --git a/MessageboardPlugin/forum/home.html b/Plugins/MessageBoard/forum/home.html similarity index 100% rename from MessageboardPlugin/forum/home.html rename to Plugins/MessageBoard/forum/home.html diff --git a/MessageboardPlugin/forum/login.html b/Plugins/MessageBoard/forum/login.html similarity index 100% rename from MessageboardPlugin/forum/login.html rename to Plugins/MessageBoard/forum/login.html diff --git a/MessageboardPlugin/forum/postthread.html b/Plugins/MessageBoard/forum/postthread.html similarity index 100% rename from MessageboardPlugin/forum/postthread.html rename to Plugins/MessageBoard/forum/postthread.html diff --git a/MessageboardPlugin/forum/register.html b/Plugins/MessageBoard/forum/register.html similarity index 100% rename from MessageboardPlugin/forum/register.html rename to Plugins/MessageBoard/forum/register.html diff --git a/MessageboardPlugin/forum/thread.html b/Plugins/MessageBoard/forum/thread.html similarity index 100% rename from MessageboardPlugin/forum/thread.html rename to Plugins/MessageBoard/forum/thread.html diff --git a/MessageboardPlugin/forum/user.html b/Plugins/MessageBoard/forum/user.html similarity index 100% rename from MessageboardPlugin/forum/user.html rename to Plugins/MessageBoard/forum/user.html diff --git a/MessageboardPlugin/forum/usercp.html b/Plugins/MessageBoard/forum/usercp.html similarity index 100% rename from MessageboardPlugin/forum/usercp.html rename to Plugins/MessageBoard/forum/usercp.html diff --git a/MessageboardPlugin/packages.config b/Plugins/MessageBoard/packages.config similarity index 100% rename from MessageboardPlugin/packages.config rename to Plugins/MessageBoard/packages.config diff --git a/Stats Plugin/Plugin.cs b/Plugins/SimpleStats/Plugin.cs similarity index 99% rename from Stats Plugin/Plugin.cs rename to Plugins/SimpleStats/Plugin.cs index 74b5e95a4..472bde841 100644 --- a/Stats Plugin/Plugin.cs +++ b/Plugins/SimpleStats/Plugin.cs @@ -181,7 +181,7 @@ namespace StatsPlugin if (E.Type == Event.GType.MapEnd || E.Type == Event.GType.Stop) { - foreach (Player P in S.getPlayers()) + foreach (Player P in S.GetPlayersAsList()) { if (P == null) diff --git a/Stats Plugin/Properties/AssemblyInfo.cs b/Plugins/SimpleStats/Properties/AssemblyInfo.cs similarity index 100% rename from Stats Plugin/Properties/AssemblyInfo.cs rename to Plugins/SimpleStats/Properties/AssemblyInfo.cs diff --git a/Stats Plugin/Stats Plugin.csproj b/Plugins/SimpleStats/Stats Plugin.csproj similarity index 97% rename from Stats Plugin/Stats Plugin.csproj rename to Plugins/SimpleStats/Stats Plugin.csproj index bc66b1990..ee65a861f 100644 --- a/Stats Plugin/Stats Plugin.csproj +++ b/Plugins/SimpleStats/Stats Plugin.csproj @@ -58,7 +58,7 @@ - + {d51eeceb-438a-47da-870f-7d7b41bc24d6} SharedLibrary False diff --git a/Votemap Plugin/Plugin.cs b/Plugins/VoteMap/Plugin.cs similarity index 99% rename from Votemap Plugin/Plugin.cs rename to Plugins/VoteMap/Plugin.cs index 6fa00f2ad..df5a99e1c 100644 --- a/Votemap Plugin/Plugin.cs +++ b/Plugins/VoteMap/Plugin.cs @@ -266,7 +266,7 @@ namespace Votemap_Plugin MapResult m = serverVotes.getTopMap(); await S.Broadcast("Voting has ended!"); - if (m.voteNum < minVotes && S.getPlayers().Count > 4) + if (m.voteNum < minVotes && S.GetPlayersAsList().Count > 4) await S.Broadcast("Vote map failed. At least ^5" + minVotes + " ^7people must choose the same map"); else { diff --git a/Votemap Plugin/Votemap Plugin.csproj b/Plugins/VoteMap/Votemap Plugin.csproj similarity index 97% rename from Votemap Plugin/Votemap Plugin.csproj rename to Plugins/VoteMap/Votemap Plugin.csproj index 57b187376..d264ab167 100644 --- a/Votemap Plugin/Votemap Plugin.csproj +++ b/Plugins/VoteMap/Votemap Plugin.csproj @@ -47,7 +47,7 @@ MinimumRecommendedRules.ruleset - + {d51eeceb-438a-47da-870f-7d7b41bc24d6} SharedLibrary False diff --git a/Welcome Plugin/CountryLookup.cs b/Plugins/Welcome/CountryLookup.cs similarity index 100% rename from Welcome Plugin/CountryLookup.cs rename to Plugins/Welcome/CountryLookup.cs diff --git a/Welcome Plugin/GeoIP.dat b/Plugins/Welcome/GeoIP.dat similarity index 100% rename from Welcome Plugin/GeoIP.dat rename to Plugins/Welcome/GeoIP.dat diff --git a/Welcome Plugin/Plugin.cs b/Plugins/Welcome/Plugin.cs similarity index 100% rename from Welcome Plugin/Plugin.cs rename to Plugins/Welcome/Plugin.cs diff --git a/Welcome Plugin/Properties/AssemblyInfo.cs b/Plugins/Welcome/Properties/AssemblyInfo.cs similarity index 100% rename from Welcome Plugin/Properties/AssemblyInfo.cs rename to Plugins/Welcome/Properties/AssemblyInfo.cs diff --git a/Welcome Plugin/Welcome Plugin.csproj b/Plugins/Welcome/Welcome Plugin.csproj similarity index 98% rename from Welcome Plugin/Welcome Plugin.csproj rename to Plugins/Welcome/Welcome Plugin.csproj index 436f8c28b..7c95fae10 100644 --- a/Welcome Plugin/Welcome Plugin.csproj +++ b/Plugins/Welcome/Welcome Plugin.csproj @@ -63,7 +63,7 @@ - + {d51eeceb-438a-47da-870f-7d7b41bc24d6} SharedLibrary False diff --git a/Welcome Plugin/packages.config b/Plugins/Welcome/packages.config similarity index 100% rename from Welcome Plugin/packages.config rename to Plugins/Welcome/packages.config diff --git a/SharedLibrary/Commands/NativeCommands.cs b/SharedLibrary/Commands/NativeCommands.cs index 2d7dd24f7..d1e18659b 100644 --- a/SharedLibrary/Commands/NativeCommands.cs +++ b/SharedLibrary/Commands/NativeCommands.cs @@ -171,7 +171,7 @@ namespace SharedLibrary.Commands else playerList.AppendFormat("[^3{0}^7]{3}[^3{1}^7] {2}", Utilities.levelToColor(P.Level), P.ClientID, P.Name, SharedLibrary.Utilities.getSpaces(Player.Permission.SeniorAdmin.ToString().Length - P.Level.ToString().Length)); - if (count == 2 || E.Owner.getPlayers().Count == 1) + if (count == 2 || E.Owner.GetPlayersAsList().Count == 1) { await E.Origin.Tell(playerList.ToString()); count = 0; @@ -293,7 +293,7 @@ namespace SharedLibrary.Commands // todo: manager DB foreach (var server in E.Owner.Manager.GetServers()) { - foreach (var player in server.getPlayers()) + foreach (var player in server.GetPlayersAsList()) { if (player != null && player.NetworkID == E.Target.NetworkID) { @@ -624,7 +624,6 @@ namespace SharedLibrary.Commands var B = E.Owner.Manager.GetClientPenalties().FindPenalties(E.Target); var BannedPenalty = B.Find(b => b.BType == Penalty.Type.Ban); - if (BannedPenalty == null) { await E.Origin.Tell("No active ban was found for that player."); diff --git a/SharedLibrary/Database.cs b/SharedLibrary/Database.cs index 4b971cda3..47d013bed 100644 --- a/SharedLibrary/Database.cs +++ b/SharedLibrary/Database.cs @@ -384,7 +384,7 @@ namespace SharedLibrary var Con = GetNewConnection(); SQLiteCommand cmd = new SQLiteCommand(Con) { - CommandText = "SELECT * FROM CLIENTS WHERE Name LIKE @Name LIMIT 32" + CommandText = "SELECT * FROM CLIENTS WHERE Name LIKE @Name" }; cmd.Parameters.AddWithValue("@Name", '%' + name + '%'); diff --git a/SharedLibrary/Server.cs b/SharedLibrary/Server.cs index 519395062..16f9bfd61 100644 --- a/SharedLibrary/Server.cs +++ b/SharedLibrary/Server.cs @@ -27,7 +27,7 @@ namespace SharedLibrary events = new Queue(); Reports = new List(); playerHistory = new Queue(); - chatHistory = new List(); + ChatHistory = new List(); lastWebChat = DateTime.Now; nextMessage = 0; initMacros(); @@ -96,24 +96,13 @@ namespace SharedLibrary return Port; } - //Returns number of active clients on server -- *INT* - public int getNumPlayers() - { - return ClientNum; - } - //Returns list of all current players - public List getPlayers() + public List GetPlayersAsList() { return Players.FindAll(x => x != null); } - public int pID() - { - return this.PID; - } - /// /// Get any know aliases ( name or ip based ) from the database /// @@ -159,7 +148,7 @@ namespace SharedLibrary /// Matching player if found public Player GetClientByName(String pName) { - return Players.FirstOrDefault(p => p.Name.ToLower() == pName.ToLower()); + return Players.FirstOrDefault(p => p != null && p.Name.ToLower() == pName.ToLower()); } /// @@ -209,7 +198,7 @@ namespace SharedLibrary public async Task Broadcast(String Message) { #if DEBUG - // return; + return; #endif await this.ExecuteCommandAsync($"sayraw {Message}"); } @@ -222,8 +211,8 @@ namespace SharedLibrary public async Task Tell(String Message, Player Target) { #if DEBUG - //if (!Target.lastEvent.Remote) - // return; + if (!Target.lastEvent.Remote) + return; #endif if (Target.ClientID > -1 && Message.Length > 0 && Target.Level != Player.Permission.Console && !Target.lastEvent.Remote) await this.ExecuteCommandAsync($"tellraw {Target.ClientID} {Message}^7"); @@ -308,13 +297,11 @@ namespace SharedLibrary if ((requestTime - lastWebChat).TotalSeconds > 1) { Broadcast("^1[WEBCHAT] ^5" + P.Name + "^7 - " + Message); - while (chatHistory.Count > Math.Ceiling((double)ClientNum / 2)) - chatHistory.RemoveAt(0); if (Message.Length > 50) Message = Message.Substring(0, 50) + "..."; - chatHistory.Add(new Chat(P.Name, Utilities.StripColors(Message), DateTime.Now)); + ChatHistory.Add(new Chat(P.Name, Utilities.StripColors(Message), DateTime.Now)); lastWebChat = DateTime.Now; } } @@ -432,7 +419,7 @@ namespace SharedLibrary public String Gametype; public int totalKills = 0; public List Reports; - public List chatHistory; + public List ChatHistory; public Queue playerHistory { get; private set; } //Info @@ -452,8 +439,6 @@ namespace SharedLibrary protected DateTime lastWebChat; public string Password { get; private set; } - public int Handle { get; private set; } - protected int PID; protected IFile logFile; // Log stuff