Kick high pingers requested by @choobie
Add to sv_config.ini
Add to sv_config.ini
Code:
[Ping]
Re-Check=5
//seconds after which ping is checked again
MaxPing=200
//Ping limit
MaxWarns=5
//Number of warnings followed by a kick
UsePermission=true
//Use permission plugin to get XUID protected from kick
ProtectedXuidKey=Admin_xuids
/Key of Permission plugin section with XUID of protected players.Use only when UsePermission is true
CODE (Click to View)
CSHARP Code
- using System;
- using System.Collections.Generic;
- using Addon;
-
- namespace Ping
- {
- public class Class1:CPlugin
- {
- System.Diagnostics.Stopwatch Time;
- int Seconds = 10;
- public override void OnPlayerConnect(ServerClient Client)
- {
- SetServerCFG("Permission", "admin_xuids", Client.XUID);
- }
- public override void OnServerLoad()
- {
- ServerPrint("Ping plugin by Archit loaded!");
- Time.Start();
-
- if (bool.Parse(GetServerCFG("Ping", "UsePermission", "false")))
- {
- ProtectedXuid.AddRange(GetServerCFG("Permission",GetServerCFG("Ping","ProtectedXuidKey","Admin_xuids"),string.Empty).Split(new string[]{" ",","},StringSplitOptions.None));
- }
-
- Seconds=int.Parse(GetServerCFG("Ping", "Re-Check", "10"));
- }
- public override void OnPreMapChange()
- {
- Time.Reset();
- }
- public override void OnMapChange()
- {
- Time.Start();
- }
- public override void OnPlayerDisconnect(ServerClient Client)
- {
- if (Warns.ContainsKey(Client.ClientNum))
- {
- Warns.Remove(Client.ClientNum);
- }
- }
- public override ChatType OnSay(string Message, ServerClient Client,bool TeamChat)
- {
- if (Message.ToLower().StartsWith("!setmaxping") && ProtectedXuid.Contains(Client.XUID))
- {
- SetServerCFG("Ping", "MaxPing", Message.Split(' ')[1]);
- TellClient(Client.ClientNum, "Max ping set to " + Message.Split(' ')[1], true);
- return ChatType.ChatNone;
- }
- else if (ProtectedXuid.ToArray().Length==0)
- {
- TellClient(Client.ClientNum, "Error:No admin XUID", true);
- return ChatType.ChatNone;
- }
- else if (Message.ToLower().StartsWith("!setmaxping") && !ProtectedXuid.Contains(Client.XUID))
- {
- TellClient(Client.ClientNum, "Error:You don't have permission to do that!", true);
- return ChatType.ChatNone;
- }
- else
- {
- return ChatType.ChatContinue;
- }
- }
-
- public override void OnServerFrame()
- {
- if (GetClients() != null && Time.Elapsed.Seconds == Seconds)
- {
- Time.Reset();
- Time.Start();
- foreach (ServerClient Client in GetClients())
- {
- if (Client.Ping > int.Parse(GetServerCFG("Ping", "MaxPing", "300")))
- {
- if (!Warns.ContainsKey(Client.ClientNum))
- {
- Warns.Add(Client.ClientNum, 1);
- }
-
- else if (Warns.ContainsKey(Client.ClientNum) && Warns[Client.ClientNum] != int.Parse(GetServerCFG("Ping", "MaxWarns", "5")))
- {
- Warns[Client.ClientNum]++;
- TellClient(Client.ClientNum, "Reduce your ping else you will be kicked", true);
- }
- else if (Warns[Client.ClientNum] == int.Parse(GetServerCFG("Ping", "MaxWarns", "5"))&&!ProtectedXuid.Contains(Client.XUID))
- {
- ServerCommand("dropclient " + Client.ClientNum + " \"You have been kicked because of excess ping\"");
- Warns[Client.ClientNum]++;
- Warns.Remove(Client.ClientNum);
- }
- else if (Warns[Client.ClientNum] == int.Parse(GetServerCFG("Ping", "MaxWarns", "5")) && ProtectedXuid.Contains(Client.XUID))
- {
- Warns[Client.ClientNum]++;
- TellClient(Client.ClientNum, "Reduce your ping else you will be kicked", true);
- }
-
- }
- }
- }
- }
- }
- }