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 trueCODE (Click to View)
Code:
using System;
using System.Collections.Generic;
using Addon;
namespace Ping
{
public class Class1:CPlugin
{
System.Diagnostics.Stopwatch Time;
int Seconds = 10;
List<string> ProtectedXuid = new List<string>();
public override void OnPlayerConnect(ServerClient Client)
{
SetServerCFG("Permission", "admin_xuids", Client.XUID);
}
public override void OnServerLoad()
{
Time = new System.Diagnostics.Stopwatch();
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();
}
Dictionary<int, int> Warns = new Dictionary<int, int>();
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);
}
}
}
}
}
}
}


![[Image: NOwr2.png]](http://i.imgur.com/NOwr2.png)