Информация
Простой, плагин с лимитом пинга. Если пинг игрока достигает лимита - его кикает.
Настройки:
Код: Выбрать все
wS_PingLimit 150 - лимит пинга при котором игрока кикнет
Работает с NoSteam
Установка:
Раскидать файлы плагина sourcemod по папкам
Исходный код
Код: Выбрать все
#include <sourcemod>
new wS_PingLimit = 99, Handle:wS_Timer[MAXPLAYERS+1];
public Plugin:myinfo =
{
name = "wS_Ping_Limit",
author = "wS / World-Source.Ru",
description = "Ограничение пинга игроков",
version = "1.0",
url = "http://world-source.ru/"
};
public OnPluginStart()
{
HookConVarChange(CreateConVar("wS_PingLimit", "150"), wS_PingLimit_Changed);
HookEvent("player_spawn", wS_Player_Spawn);
AutoExecConfig(true, "ws.pinglimit");
}
public wS_PingLimit_Changed(Handle:convar, const String:oldValue[], const String:newValue[])
{
wS_PingLimit = StringToInt(newValue);
}
public wS_Player_Spawn(Handle:event, const String:name[], bool:dontBroadcast)
{
wS_TestPing(GetClientOfUserId(GetEventInt(event, "userid")));
}
wS_TestPing(wS_i)
{
if (IsFakeClient(wS_i) || wS_Timer[wS_i] != INVALID_HANDLE || GetUserFlagBits(wS_i) & ADMFLAG_ROOT)
{
return;
}
if (RoundToZero(GetClientAvgLatency(wS_i, NetFlow_Outgoing) * 1024) > wS_PingLimit)
{
wS_Timer[wS_i] = CreateTimer(20.0, wS_TestPingAgain, wS_i);
}
}
public Action:wS_TestPingAgain(Handle:timer, any:wS_i)
{
wS_Timer[wS_i] = INVALID_HANDLE;
decl wS_ping;
if ((wS_ping = RoundToZero(GetClientAvgLatency(wS_i, NetFlow_Outgoing) * 1024)) > wS_PingLimit)
{
KickClient(wS_i, "[ wS_Ping_Limit ] Вы отключены из-за высокого пинга (%d). Лимит: %d", wS_ping, wS_PingLimit);
}
}
public OnClientDisconnect(wS_i)
{
if (wS_Timer[wS_i] != INVALID_HANDLE)
{
KillTimer(wS_Timer[wS_i]);
wS_Timer[wS_i] = INVALID_HANDLE;
}
}