02.12.2013, 08:00
По-моему, лучше отлавливать 'Messages received', и получать разность каждую секунду.
Acks sent постепенно достигнет значения в 3000, и тогда будет плохо.
А 'Messages received', на мой взгляд, самый надежный.
Мой вариант:
Acks sent постепенно достигнет значения в 3000, и тогда будет плохо.
А 'Messages received', на мой взгляд, самый надежный.
Мой вариант:
pawn Code:
public OnGameModeInit()
{
SetTimer("AntiDOS", 950, true);
}
new m_per_sec[MAX_PLAYERS];
forward AntiDOS();
public AntiDOS()
{
new str[268];
new mes;
new find;
for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i))
{
GetPlayerNetworkStats(i, str, 268);
find = strfind(str, "Messages received:", false, 205);
if(find != -1)
{
mes = strval(str[find+18]);
if((mes - m_per_sec[i]) >= 500)
{
SetTimerEx("testDos", 200, false, "%d%d", i, (mes - m_per_sec[i]));//Во время выхода игрока с сервера, таймер может сработать, тогда значение подпрыгнет примерно до 115000, это не допустимо
}
m_per_sec[i] = mes;
}
}
}
return true;
}
forward testDos(playerid, messages);
public testDos(playerid, messages)
{
if(IsPlayerConnected(playerid))
{
//Ban(playerid);
}
return false;
}
public OnPlayerConnect(playerid)
{
m_per_sec[playerid] = 2147483647;
}

