Portal SAMP
[Pedido] Anti afk - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Pedido] Anti afk (/showthread.php?tid=4091)



Anti afk - Cifra Modder - 18/10/2023

Eu estava tentando fazer um sistema que quando o player ficasse parado por 10 segundos ele séria acusado de afk e seria kickado ou até mesmo avisado para o administradores do servidores, tentei de todas as formas e não conseguir chegar em nenhuma idéia, alguém tem algo em mente?


RE: Anti afk - pushline - 18/10/2023

Código PHP:
public OnPlayerConnect(playerid)
{
    
SetTimerEx("IsPlayerAfk"1000true"i"playerid);
}

forward IsPlayerAfk(playerid);
public 
IsPlayerAfk(playerid)
{
    if(
gettime() - User[playerid][ultimaVezAtualizado] >= 10// troque o 10 por outro numero caso quiser (segundos)
        
setAfk(playerid);
}

public 
OnPlayerUpdate()
{
    
User[playerid][ultimaVezAtualizado] = gettime();


Players no ESC não mandam packets pro OnPlayerUpdate.


RE: Anti afk - leonardos08bt - 18/10/2023

Você usando o gettime consegue criar um ant-afk.


Código:
new TempoAFK[MAX_PLAYERS], TimerAFK[MAX_PLAYERS];

forward AntAFK(playerid);

public OnPlayerConnect(playerid}
{
    SetTimerEx("AntAFK", 1000, true, "d", playerid); //Cria um timer com intervalo de 1 segundo para verificar se o jogador está AFK
    return 1;
}

public OnPlayerDisconnect(playerid)
{
    KillTimer(TimerAFK[playerid]); //Destrói o timer pra não ficar repetindo quando o jogador estiver offline.
    return 1;
}

public AntAFK(playerid)
{
    if((gettime()-TempoAFK[playerid]) > 30) //Verifica se o jogador está 30 segundos AFK
    {
        //(...)
    }
    return 1;
}

public OnPlayerUpdate(playerid)
{
    //No final da public
    TempoAFK[playerid] = gettime(); //Seta na variável o último 'segundo' em que o jogador atualizou-se no servidor.
    return 1;
}



RE: Anti afk - Cifra Modder - 19/10/2023

(18/10/2023 11:39)leonardos08bt Escreveu: Você usando o gettime consegue criar um ant-afk.


Código:
new TempoAFK[MAX_PLAYERS], TimerAFK[MAX_PLAYERS];

forward AntAFK(playerid);

public OnPlayerConnect(playerid}
{
    SetTimerEx("AntAFK", 1000, true, "d", playerid); //Cria um timer com intervalo de 1 segundo para verificar se o jogador está AFK
    return 1;
}

public OnPlayerDisconnect(playerid)
{
    KillTimer(TimerAFK[playerid]); //Destrói o timer pra não ficar repetindo quando o jogador estiver offline.
    return 1;
}

public AntAFK(playerid)
{
    if((gettime()-TempoAFK[playerid]) > 30) //Verifica se o jogador está 30 segundos AFK
    {
        //(...)
    }
    return 1;
}

public OnPlayerUpdate(playerid)
{
    //No final da public
    TempoAFK[playerid] = gettime(); //Seta na variável o último 'segundo' em que o jogador atualizou-se no servidor.
    return 1;
}

Obrigado! +Rep para os dois