From 11d37d4cd66daad67f02d50afc166b6cd9ca2bec Mon Sep 17 00:00:00 2001 From: RaidMax Date: Wed, 7 Jun 2017 17:08:29 -0400 Subject: [PATCH] Added high ping kick functionality to Welcome Plugin Added response to RCON command if applicable Added more maps into the map config --- Admin/Main.cs | 5 +-- Admin/Server.cs | 38 +++++++--------------- Admin/config/maps.cfg | 12 +++++++ Admin/lib/SharedLibrary.dll | Bin 104448 -> 104960 bytes SharedLibrary/Command.cs | 8 ++--- SharedLibrary/Commands/NativeCommands.cs | 11 ++++--- SharedLibrary/Dvar.cs | 23 ++----------- SharedLibrary/Event.cs | 8 ++--- SharedLibrary/Map.cs | 3 -- SharedLibrary/MessageToken.cs | 4 --- SharedLibrary/Miscellaneous.cs | 3 -- SharedLibrary/Penalty.cs | 5 +-- SharedLibrary/RCON.cs | 38 +++------------------- SharedLibrary/Report.cs | 3 -- SharedLibrary/Server.cs | 18 +++-------- SharedLibrary/Utilities.cs | 28 ++++++++++++++++ Welcome Plugin/Plugin.cs | 39 ++++++++++++++++++++--- 17 files changed, 116 insertions(+), 130 deletions(-) diff --git a/Admin/Main.cs b/Admin/Main.cs index 4426fe77b..cc4b3ee23 100644 --- a/Admin/Main.cs +++ b/Admin/Main.cs @@ -93,8 +93,9 @@ namespace IW4MAdmin static private String CheckUpdate() { - Connection Ver = new Connection("http://raidmax.org/IW4M/Admin/version.php"); - return Ver.Read(); + //Connection Ver = new Connection("http://raidmax.org/IW4M/Admin/version.php"); + //return Ver.Read(); + return "0"; } static void CheckDirectories() diff --git a/Admin/Server.cs b/Admin/Server.cs index 3871ed618..cbabe5056 100644 --- a/Admin/Server.cs +++ b/Admin/Server.cs @@ -13,7 +13,6 @@ namespace IW4MAdmin { public IW4MServer(SharedLibrary.Interfaces.IManager mgr, string address, int port, string password) : base(mgr, address, port, password) { - commandQueue = new Queue(); initCommands(); } @@ -138,7 +137,7 @@ namespace IW4MAdmin if (aP.Level == Player.Permission.Flagged) NewPlayer.setLevel(Player.Permission.Flagged); - Penalty B = isBanned(aP); + Penalty B = IsBanned(aP); if (B != null && B.BType == Penalty.Type.Ban) { @@ -196,7 +195,7 @@ namespace IW4MAdmin } //Another version of client from line, written for the line created by a kill or death event - override public Player clientFromEventLine(String[] L, int cIDPos) + override public Player ParseClientFromString(String[] L, int cIDPos) { if (L.Length < cIDPos) { @@ -235,7 +234,7 @@ namespace IW4MAdmin } //Check ban list for every banned player and return ban if match is found - override public Penalty isBanned(Player C) + override public Penalty IsBanned(Player C) { return Manager.GetClientPenalties().FindPenalties(C).Where(b => b.BType == Penalty.Type.Ban).FirstOrDefault(); } @@ -269,13 +268,13 @@ namespace IW4MAdmin throw new SharedLibrary.Exceptions.CommandException($"{E.Origin} does not have access to \"{C.Name}\""); } - if (Args.Length < (C.requiredArgNum)) + if (Args.Length < (C.RequiredArgumentCount)) { - await E.Origin.Tell($"Not enough arguments supplied! ^5({C.requiredArgNum} ^7required)"); + await E.Origin.Tell($"Not enough arguments supplied! ^5({C.RequiredArgumentCount} ^7required)"); throw new SharedLibrary.Exceptions.CommandException($"{E.Origin} did not supply enough arguments for \"{C.Name}\""); } - if (C.needsTarget || Args.Length > 0) + if (C.RequiresTarget || Args.Length > 0) { int cNum = -1; int.TryParse(Args[0], out cNum); @@ -306,9 +305,9 @@ namespace IW4MAdmin } else - E.Target = clientFromName(Args[0]); + E.Target = GetClientByName(Args[0]); - if (E.Target == null && C.needsTarget) + if (E.Target == null && C.RequiresTarget) { await E.Origin.Tell("Unable to find specified player."); throw new SharedLibrary.Exceptions.CommandException($"{E.Origin} specified invalid player for \"{C.Name}\""); @@ -435,7 +434,7 @@ namespace IW4MAdmin else { string[] game_event = lines[count].Split(';'); - Event event_ = Event.requestEvent(game_event, this); + Event event_ = Event.ParseEventString(game_event, this); if (event_ != null) { if (event_.Origin == null) @@ -591,7 +590,7 @@ namespace IW4MAdmin if (C != null) { - if (C.needsTarget && E.Target == null) + if (C.RequiresTarget && E.Target == null) { Logger.WriteWarning("Requested event (command) requiring target does not have a target!"); return; @@ -765,18 +764,11 @@ namespace IW4MAdmin } - public override bool Reload() - { - return false; - } - public override bool _Reload() + public override bool Reload() { try { - messages = null; - maps = null; - rules = null; initMaps(); initMessages(); initRules(); @@ -808,13 +800,5 @@ namespace IW4MAdmin Manager.GetCommands().Add(new Plugins("plugins", "view all loaded plugins. syntax: !plugins", "p", Player.Permission.Administrator, 0, false)); } - - public bool commandQueueEmpty() - { - return commandQueue.Count == 0; - } - - //Objects - private Queue commandQueue; } } diff --git a/Admin/config/maps.cfg b/Admin/config/maps.cfg index 194a917ad..14317d6b2 100644 --- a/Admin/config/maps.cfg +++ b/Admin/config/maps.cfg @@ -29,4 +29,16 @@ mp_complex:Bailout mp_compact:Salvage mp_nuked:Nuketown iw4_credits:IW4 Credits +mp_killhouse:Killhouse +mp_bog_sh:Bog +mp_cargoship_sh:Freighter +mp_shipment:Shipment +mp_shipment_long:Shipment - Long +mp_rust_long:Rust - Long +mp_firingrange:Firing Range +mp_storm_spring:Chemical Plant +mp_fav_tropical:Favela - Tropical +mp_estate_tropical:Estate - Tropical +mp_crash_tropical:Crash - Tropical +mp_bloc_sh:Forgotten City mp_raidmax:^1L^23^33^4T^5M^6A^75^8T^93^0R \ No newline at end of file diff --git a/Admin/lib/SharedLibrary.dll b/Admin/lib/SharedLibrary.dll index 6afb5283a85bcc3224b19bae237ba935d5cd873f..e17dbbc4f0169f36c5916ea5da2c53fc9fda652a 100644 GIT binary patch literal 104960 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 diff --git a/SharedLibrary/Command.cs b/SharedLibrary/Command.cs index ac5e626f3..dffce4b5a 100644 --- a/SharedLibrary/Command.cs +++ b/SharedLibrary/Command.cs @@ -14,8 +14,8 @@ namespace SharedLibrary Description = D; Alias = A; Permission = P; - requiredArgNum = args; - needsTarget = nT; + RequiredArgumentCount = args; + RequiresTarget = nT; } //Execute the command @@ -24,8 +24,8 @@ namespace SharedLibrary public String Name { get; private set; } public String Description { get; private set; } public String Alias { get; private set; } - public int requiredArgNum { get; private set; } - public bool needsTarget { get; private set; } + public int RequiredArgumentCount { get; private set; } + public bool RequiresTarget { get; private set; } public Player.Permission Permission { get; private set; } } } diff --git a/SharedLibrary/Commands/NativeCommands.cs b/SharedLibrary/Commands/NativeCommands.cs index 2d3e54f80..2d7dd24f7 100644 --- a/SharedLibrary/Commands/NativeCommands.cs +++ b/SharedLibrary/Commands/NativeCommands.cs @@ -496,9 +496,9 @@ namespace SharedLibrary.Commands public override async Task ExecuteAsync(Event E) { if (E.Owner.Reload()) - await E.Origin.Tell("Sucessfully reloaded configs!"); + await E.Origin.Tell("Sucessfully reloaded configuration files"); else - await E.Origin.Tell("Unable to reload configs :("); + await E.Origin.Tell("Unable to reload configuration files"); } } @@ -690,8 +690,11 @@ namespace SharedLibrary.Commands public override async Task ExecuteAsync(Event E) { - await E.Owner.ExecuteCommandAsync(E.Data.Trim()); - await E.Origin.Tell("Successfuly sent RCON command!"); + var Response = await E.Owner.ExecuteCommandAsync(E.Data.Trim()); + foreach (string S in Response) + await E.Origin.Tell(S.StripColors()); + if (Response.Length == 0) + await E.Origin.Tell("Successfully sent RCON command!"); } } } diff --git a/SharedLibrary/Dvar.cs b/SharedLibrary/Dvar.cs index 8cc3da622..a3a456e1d 100644 --- a/SharedLibrary/Dvar.cs +++ b/SharedLibrary/Dvar.cs @@ -1,28 +1,11 @@ -using System; -using System.Runtime.InteropServices; -using System.Text; - -namespace SharedLibrary +namespace SharedLibrary { - public struct dvar - { - public String name; - public String description; - public int flags; - public short type; - public String current; - public String latched; - public String _default; - public int min; - public int max; - } - - public class _DVAR + public class DVAR { public string Name { get; private set; } public T Value; - public _DVAR(string name) + public DVAR(string name) { Name = name; } diff --git a/SharedLibrary/Event.cs b/SharedLibrary/Event.cs index 4e3f6241e..c47ce1729 100644 --- a/SharedLibrary/Event.cs +++ b/SharedLibrary/Event.cs @@ -100,7 +100,7 @@ namespace SharedLibrary Owner = S; } - public static Event requestEvent(String[] line, Server SV) + public static Event ParseEventString(String[] line, Server SV) { #if DEBUG == false try @@ -118,20 +118,20 @@ namespace SharedLibrary Data.Append(line[i] + ";"); } - return new Event(GType.Kill, Data.ToString(), SV.clientFromEventLine(line, 6), SV.clientFromEventLine(line, 2), SV); + return new Event(GType.Kill, Data.ToString(), SV.ParseClientFromString(line, 6), SV.ParseClientFromString(line, 2), SV); } if (line[0].Substring(line[0].Length - 3).Trim() == "say") { Regex rgx = new Regex("[^a-zA-Z0-9 -! -_]"); string message = rgx.Replace(line[4], ""); - return new Event(GType.Say, Utilities.removeNastyChars(message), SV.clientFromEventLine(line, 2), null, SV) { Message = Utilities.removeNastyChars(message) }; + return new Event(GType.Say, Utilities.removeNastyChars(message).StripColors(), SV.ParseClientFromString(line, 2), null, SV) { Message = Utilities.removeNastyChars(message).StripColors() }; } if (eventType == ":") return new Event(GType.MapEnd, line[0], new Player("WORLD", "WORLD", 0, 0), null, SV); - if (line[0].Contains("InitGame")) // blaze it + if (line[0].Contains("InitGame")) return new Event(GType.MapChange, line[0], new Player("WORLD", "WORLD", 0, 0), null, SV); diff --git a/SharedLibrary/Map.cs b/SharedLibrary/Map.cs index de4a65474..bedd90612 100644 --- a/SharedLibrary/Map.cs +++ b/SharedLibrary/Map.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; namespace SharedLibrary { diff --git a/SharedLibrary/MessageToken.cs b/SharedLibrary/MessageToken.cs index 718e23460..2cc88d341 100644 --- a/SharedLibrary/MessageToken.cs +++ b/SharedLibrary/MessageToken.cs @@ -1,8 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace SharedLibrary { diff --git a/SharedLibrary/Miscellaneous.cs b/SharedLibrary/Miscellaneous.cs index f6457672a..10ac37aab 100644 --- a/SharedLibrary/Miscellaneous.cs +++ b/SharedLibrary/Miscellaneous.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; namespace SharedLibrary { diff --git a/SharedLibrary/Penalty.cs b/SharedLibrary/Penalty.cs index 690645ec9..45d116cd0 100644 --- a/SharedLibrary/Penalty.cs +++ b/SharedLibrary/Penalty.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; namespace SharedLibrary { @@ -17,7 +14,7 @@ namespace SharedLibrary this.BType = BType; } - public String getWhen() + public String GetWhenFormatted() { return When.ToString("MM/dd/yy HH:mm:ss"); ; } diff --git a/SharedLibrary/RCON.cs b/SharedLibrary/RCON.cs index 04d2db9a3..662e18db6 100644 --- a/SharedLibrary/RCON.cs +++ b/SharedLibrary/RCON.cs @@ -20,34 +20,6 @@ namespace SharedLibrary.Network COMMAND, } - public static List PlayersFromStatus(String[] Status) - { - List StatusPlayers = new List(); - - foreach (String S in Status) - { - String responseLine = S.Trim(); - - if (Regex.Matches(responseLine, @"\d+$", RegexOptions.IgnoreCase).Count > 0 && responseLine.Length > 72) // its a client line! - { - String[] playerInfo = responseLine.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); - int cID = -1; - int Ping = -1; - Int32.TryParse(playerInfo[2], out Ping); - String cName = Utilities.StripColors(responseLine.Substring(46, 18)).Trim(); - String npID = responseLine.Substring(29, 17).Trim(); // DONT TOUCH PLZ - int.TryParse(playerInfo[0], out cID); - String cIP = responseLine.Substring(72, 20).Trim().Split(':')[0]; - if (cIP.Split(' ').Count() > 1) - cIP = cIP.Split(' ')[1]; - Player P = new Player(cName, npID, cID, cIP) { Ping = Ping }; - StatusPlayers.Add(P); - } - } - - return StatusPlayers; - } - static string[] SendQuery(QueryType Type, Server QueryServer, string Parameters = "") { var ServerOOBConnection = new UdpClient(); @@ -113,7 +85,7 @@ namespace SharedLibrary.Network } } - public static async Task<_DVAR> GetDvarAsync(this Server server, string dvarName) + public static async Task> GetDvarAsync(this Server server, string dvarName) { string[] LineSplit = await Task.FromResult(SendQuery(QueryType.DVAR, server, dvarName)); @@ -137,7 +109,7 @@ namespace SharedLibrary.Network string DvarCurrentValue = Regex.Replace(ValueSplit[2], @"\^[0-9]", ""); string DvarDefaultValue = Regex.Replace(ValueSplit[4], @"\^[0-9]", ""); - return new _DVAR(DvarName) { Value = (T)Convert.ChangeType(DvarCurrentValue, typeof(T)) }; + return new DVAR(DvarName) { Value = (T)Convert.ChangeType(DvarCurrentValue, typeof(T)) }; } public static async Task SetDvarAsync(this Server server, string dvarName, object dvarValue) @@ -145,15 +117,15 @@ namespace SharedLibrary.Network await Task.FromResult(SendQuery(QueryType.DVAR, server, $"{dvarName} {dvarValue}")); } - public static async Task ExecuteCommandAsync(this Server server, string commandName) + public static async Task ExecuteCommandAsync(this Server server, string commandName) { - await Task.FromResult(SendQuery(QueryType.COMMAND, server, commandName)); + return await Task.FromResult(SendQuery(QueryType.COMMAND, server, commandName).Skip(1).ToArray()); } public static async Task> GetStatusAsync(this Server server) { string[] response = await Task.FromResult(SendQuery(QueryType.DVAR, server, "status")); - return PlayersFromStatus(response); + return Utilities.PlayersFromStatus(response); } diff --git a/SharedLibrary/Report.cs b/SharedLibrary/Report.cs index 2575fc6f2..ff50854fe 100644 --- a/SharedLibrary/Report.cs +++ b/SharedLibrary/Report.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; namespace SharedLibrary { diff --git a/SharedLibrary/Server.cs b/SharedLibrary/Server.cs index 7a12ba56a..519395062 100644 --- a/SharedLibrary/Server.cs +++ b/SharedLibrary/Server.cs @@ -150,25 +150,16 @@ namespace SharedLibrary /// Game log line containing event /// Position in the line where the cliet ID is written /// Matching player if found - abstract public Player clientFromEventLine(String[] L, int cIDPos); + abstract public Player ParseClientFromString(String[] L, int cIDPos); /// /// Get a player by name /// /// Player name to search for /// Matching player if found - public Player clientFromName(String pName) + public Player GetClientByName(String pName) { - lock (Players) - { - foreach (var P in Players) - { - if (P != null && P.Name.ToLower().Contains(pName.ToLower())) - return P; - } - } - - return null; + return Players.FirstOrDefault(p => p.Name.ToLower() == pName.ToLower()); } /// @@ -176,7 +167,7 @@ namespace SharedLibrary /// /// Player to check if banned /// Matching ban if found - abstract public Penalty isBanned(Player C); + abstract public Penalty IsBanned(Player C); /// /// Process requested command correlating to an event @@ -210,7 +201,6 @@ namespace SharedLibrary /// /// True on sucess abstract public bool Reload(); - abstract public bool _Reload(); /// /// Send a message to all players diff --git a/SharedLibrary/Utilities.cs b/SharedLibrary/Utilities.cs index 869ab0476..5cefe7c3b 100644 --- a/SharedLibrary/Utilities.cs +++ b/SharedLibrary/Utilities.cs @@ -46,6 +46,34 @@ namespace SharedLibrary return newStr; } + public static List PlayersFromStatus(String[] Status) + { + List StatusPlayers = new List(); + + foreach (String S in Status) + { + String responseLine = S.Trim(); + + if (Regex.Matches(responseLine, @"\d+$", RegexOptions.IgnoreCase).Count > 0 && responseLine.Length > 72) // its a client line! + { + String[] playerInfo = responseLine.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + int cID = -1; + int Ping = -1; + Int32.TryParse(playerInfo[2], out Ping); + String cName = Utilities.StripColors(responseLine.Substring(46, 18)).Trim(); + String npID = responseLine.Substring(29, 17).Trim(); // DONT TOUCH PLZ + int.TryParse(playerInfo[0], out cID); + String cIP = responseLine.Substring(72, 20).Trim().Split(':')[0]; + if (cIP.Split(' ').Count() > 1) + cIP = cIP.Split(' ')[1]; + Player P = new Player(cName, npID, cID, cIP) { Ping = Ping }; + StatusPlayers.Add(P); + } + } + + return StatusPlayers; + } + public static Player.Permission matchPermission(String str) { String lookingFor = str.ToLower(); diff --git a/Welcome Plugin/Plugin.cs b/Welcome Plugin/Plugin.cs index 2e2d0c064..64ec163da 100644 --- a/Welcome Plugin/Plugin.cs +++ b/Welcome Plugin/Plugin.cs @@ -1,12 +1,18 @@ using System; using SharedLibrary; +using System.Collections.Generic; using SharedLibrary.Interfaces; using System.Threading.Tasks; +using SharedLibrary.Network; + namespace Welcome_Plugin { public class Plugin : IPlugin { + Dictionary PlayerPings; + int PingAverageCount; + public string Author { get @@ -33,17 +39,33 @@ namespace Welcome_Plugin public async Task OnLoadAsync() { - return; + PlayerPings = new Dictionary(); + PingAverageCount = 1; } public async Task OnUnloadAsync() { - return; + PlayerPings.Clear(); + PlayerPings = null; } public async Task OnTickAsync(Server S) { - return; + int MaxPing = (await S.GetDvarAsync("sv_maxping")).Value; + + if (MaxPing == 0) + return; + + foreach (int PlayerID in PlayerPings.Keys) + { + var Player = S.Players.Find(p => p.DatabaseID == PlayerID); + PlayerPings[PlayerID] = PlayerPings[PlayerID] + (Player.Ping - PlayerPings[PlayerID]) / PingAverageCount; + if (PlayerPings[PlayerID] > MaxPing) + await Player.Kick($"Your average ping of ^5{PlayerPings[PlayerID]} ^7is too high for this server", null); + } + + if (PingAverageCount > 100) + PingAverageCount = 1; } public async Task OnEventAsync(Event E, Server S) @@ -58,7 +80,7 @@ namespace Welcome_Plugin await newPlayer.Tell($"Welcome ^5{newPlayer.Name}^7, this your ^5{newPlayer.TimesConnected()} ^7time connecting!"); if (newPlayer.Level == Player.Permission.Flagged) - await E.Owner.ToAdmins($"^1NOTICE: ^7Flagged player ^5{newPlayer.Name}^7 has joined!"); + await E.Owner.ToAdmins($"^1NOTICE: ^7Flagged player ^5{newPlayer.Name}^7 has joined!"); else { @@ -72,8 +94,15 @@ namespace Welcome_Plugin { E.Owner.Manager.GetLogger().WriteError("Could not open file Plugins/GeoIP.dat for Welcome Plugin"); } - + } + + PlayerPings.Add(E.Origin.DatabaseID, 1.0f); + } + + if (E.Type == Event.GType.Disconnect) + { + PlayerPings.Remove(E.Origin.DatabaseID); } } }