SA-MP Forums Archive
Auto-AFK kick and Ping Kick - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+---- Forum: Help Archive (https://sampforum.blast.hk/forumdisplay.php?fid=89)
+---- Thread: Auto-AFK kick and Ping Kick (/showthread.php?tid=163728)



Auto-AFK kick and Ping Kick - Garc1a - 28.07.2010

Can someone make a tutorial on how to make your own Auto-AFK kick system and Ping kick system?


Re: Auto-AFK kick and Ping Kick - Jonni8 - 28.07.2010

You could just set a timer, that checks every 10 minutes the coordinates of every player and if a player has the same coordinates in two checks he gets kicked...


Re: Auto-AFK kick and Ping Kick - selten98 - 28.07.2010

On Top of ur script:
pawn Код:
#define PING_MAX_EXCEEDS 4
#define PING_TIMELIMIT 60 // SECONDS
pawn Код:
forward BotCheck(playerid);
public BotCheck(playerid)
{
    if(IsPlayerConnected(playerid))
    {
        if(GetPlayerPing(playerid) < 1)
        {
            new string[128], ip[20];  GetPlayerIp(playerid,ip,sizeof(ip));
            format(string,sizeof(string),"BOT: %s id:%d ip: %s ping: %d",PlayerName2(playerid),playerid,ip,GetPlayerPing(playerid));
            printf("[ADMIN] Possible bot has been detected (Kicked %s ID:%d)", PlayerName2(playerid), playerid);
            Kick(playerid);
        }
    }
}

forward PingKick();
public PingKick()
{
    if(ServerInfo[MaxPing] != 0)
    {
        PingPos++; if(PingPos > PING_MAX_EXCEEDS) PingPos = 0;
       
        for(new i=0; i<MAX_PLAYERS; i++)
        {
            PlayerInfo[i][pPing][PingPos] = GetPlayerPing(i);
           
            if(GetPlayerPing(i) > ServerInfo[MaxPing])
            {
                if(PlayerInfo[i][PingCount] == 0) PlayerInfo[i][PingTime] = TimeStamp();

                PlayerInfo[i][PingCount]++;
                if(TimeStamp() - PlayerInfo[i][PingTime] > PING_TIMELIMIT)
                {
                    PlayerInfo[i][PingTime] = TimeStamp();
                    PlayerInfo[i][PingCount] = 1;
                }
                else if(PlayerInfo[i][PingCount] >= PING_MAX_EXCEEDS)
                {
                    new Sum, Average, x, string[128];
                    while (x < PING_MAX_EXCEEDS) {
                        Sum += PlayerInfo[i][pPing][x];
                        x++;
                    }
                    Average = (Sum / PING_MAX_EXCEEDS);
                    format(string,sizeof(string),"%s has been kicked from the server. (Reason: High Ping (%d) | Average (%d) | Max Allowed (%d) )", PlayerName2(i), GetPlayerPing(i), Average, ServerInfo[MaxPing] );
                    SendClientMessageToAll(grey,string);
                    SaveToFile("KickLog",string);
                    Kick(i);
                }
            }
            else if(GetPlayerPing(i) < 1 && ServerInfo[AntiBot] == 1)
            {
                PlayerInfo[i][BotPing]++;
                if(PlayerInfo[i][BotPing] >= 3) BotCheck(i);
            }
            else
            {
                PlayerInfo[i][BotPing] = 0;
            }
        }
    }

stock TimeStamp()
{
    new time = GetTickCount() / 1000;
    return time;
}

stock PlayerName2(playerid) {
  new name[MAX_PLAYER_NAME];
  GetPlayerName(playerid, name, sizeof(name));
  return name;
}
pawn Код:
enum ServerData
{
    MaxPing,
        AntiBot,
};
new ServerInfo[ServerData];
//and:
enum PlayerData
{
        PingCount,
    PingTime,
    BotPing,
    pPing[PING_MAX_EXCEEDS],
};
new PlayerInfo[MAX_PLAYERS][PlayerData];
OnGameModeInIt/OnFilterScriptInIT:
pawn Код:
PingTimer = SetTimer("PingKick",5000,1);



Re: Auto-AFK kick and Ping Kick - Garc1a - 28.07.2010

Quote:
Originally Posted by selten98
Посмотреть сообщение
On Top of ur script:
pawn Код:
#define PING_MAX_EXCEEDS 4
#define PING_TIMELIMIT 60 // SECONDS
pawn Код:
forward BotCheck(playerid);
public BotCheck(playerid)
{
    if(IsPlayerConnected(playerid))
    {
        if(GetPlayerPing(playerid) < 1)
        {
            new string[128], ip[20];  GetPlayerIp(playerid,ip,sizeof(ip));
            format(string,sizeof(string),"BOT: %s id:%d ip: %s ping: %d",PlayerName2(playerid),playerid,ip,GetPlayerPing(playerid));
            printf("[ADMIN] Possible bot has been detected (Kicked %s ID:%d)", PlayerName2(playerid), playerid);
            Kick(playerid);
        }
    }
}

forward PingKick();
public PingKick()
{
    if(ServerInfo[MaxPing] != 0)
    {
        PingPos++; if(PingPos > PING_MAX_EXCEEDS) PingPos = 0;
       
        for(new i=0; i<MAX_PLAYERS; i++)
        {
            PlayerInfo[i][pPing][PingPos] = GetPlayerPing(i);
           
            if(GetPlayerPing(i) > ServerInfo[MaxPing])
            {
                if(PlayerInfo[i][PingCount] == 0) PlayerInfo[i][PingTime] = TimeStamp();

                PlayerInfo[i][PingCount]++;
                if(TimeStamp() - PlayerInfo[i][PingTime] > PING_TIMELIMIT)
                {
                    PlayerInfo[i][PingTime] = TimeStamp();
                    PlayerInfo[i][PingCount] = 1;
                }
                else if(PlayerInfo[i][PingCount] >= PING_MAX_EXCEEDS)
                {
                    new Sum, Average, x, string[128];
                    while (x < PING_MAX_EXCEEDS) {
                        Sum += PlayerInfo[i][pPing][x];
                        x++;
                    }
                    Average = (Sum / PING_MAX_EXCEEDS);
                    format(string,sizeof(string),"%s has been kicked from the server. (Reason: High Ping (%d) | Average (%d) | Max Allowed (%d) )", PlayerName2(i), GetPlayerPing(i), Average, ServerInfo[MaxPing] );
                    SendClientMessageToAll(grey,string);
                    SaveToFile("KickLog",string);
                    Kick(i);
                }
            }
            else if(GetPlayerPing(i) < 1 && ServerInfo[AntiBot] == 1)
            {
                PlayerInfo[i][BotPing]++;
                if(PlayerInfo[i][BotPing] >= 3) BotCheck(i);
            }
            else
            {
                PlayerInfo[i][BotPing] = 0;
            }
        }
    }

stock TimeStamp()
{
    new time = GetTickCount() / 1000;
    return time;
}

stock PlayerName2(playerid) {
  new name[MAX_PLAYER_NAME];
  GetPlayerName(playerid, name, sizeof(name));
  return name;
}
pawn Код:
enum ServerData
{
    MaxPing,
        AntiBot,
};
new ServerInfo[ServerData];
//and:
enum PlayerData
{
        PingCount,
    PingTime,
    BotPing,
    pPing[PING_MAX_EXCEEDS],
};
new PlayerInfo[MAX_PLAYERS][PlayerData];
OnGameModeInIt/OnFilterScriptInIT:
pawn Код:
PingTimer = SetTimer("PingKick",5000,1);
-EDIT-
Nevermind