[Pedido] Sistema ANTI-AFK automatico
#1

Olб, pergunto se hб algum sistema mais atual sobre anti afk, ps pesquisei e achei somente aqueles que denuncia o id e usa settimer;

att. BobMarley
Reply
#2

https://sampforum.blast.hk/showthread.php?tid=142409
https://sampforum.blast.hk/showthread.php?tid=474149
Reply
#3

Teste o code e me fale, fiz agora n testei. Irб detectar assim que o player apertar "ESC".

PHP код:
#define TEMPOMAX_AFK    60*5 //O Tempo й em segundos nгo em milisegundos. Ex: 60 = 1 minuto, 60*5 = 300seg (5 Minutos).
new 
    
VerificarAFK[MAX_PLAYERS],
    
TimerAFK[MAX_PLAYERS]
;
public 
OnPlayerConnect(playerid)
{
    
TimerAFK[playerid] = SetTimerEx("AntiAFK"1000true"i"playerid);
}
public 
OnPlayerDisconnect(playeridreason)
{
    
KillTimer(TimerAFK[playerid]);
}
public 
OnPlayerUpdate(playerid)
{
    
VerificarAFK[playerid] = 0;
}
forward AntiAFK(playerid);
public 
AntiAFK(playerid)
{
    
VerificarAFK[playerid] ++;
    
    if(
VerificarAFK[playerid] >= TEMPOMAX_AFK) {
        
SendClientMessage(playerid, -1"< AFK > Vocк foi kikado por ficar de ESC!");
        
Kick(playerid);
    }
    return 
true;

Reply
#4

Quote:
Originally Posted by ClaudineiCDS
Посмотреть сообщение
Teste o code e me fale, fiz agora n testei. Irб detectar assim que o player apertar "ESC".

PHP код:
#define TEMPOMAX_AFK    60*5 //O Tempo й em segundos nгo em milisegundos. Ex: 60 = 1 minuto, 60*5 = 300seg (5 Minutos).
new 
    
VerificarAFK[MAX_PLAYERS],
    
TimerAFK[MAX_PLAYERS]
;
public 
OnPlayerConnect(playerid)
{
    
TimerAFK[playerid] = SetTimerEx("AntiAFK"1000true"i"playerid);
}
public 
OnPlayerDisconnect(playeridreason)
{
    
KillTimer(TimerAFK[playerid]);
}
public 
OnPlayerUpdate(playerid)
{
    
VerificarAFK[playerid] = 0;
}
forward AntiAFK(playerid);
public 
AntiAFK(playerid)
{
    
VerificarAFK[playerid] ++;
    
    if(
VerificarAFK[playerid] >= TEMPOMAX_AFK) {
        
SendClientMessage(playerid, -1"< AFK > Vocк foi kikado por ficar de ESC!");
        
Kick(playerid);
    }
    return 
true;

Pouco eficaz, o melhor й guardar as posiзхes (X,Y) e depois fazer varias verificaзхes, se o player continuar num IsPlayerInRangeOfPoint daquele X e Y, ao fim de 10 verificaзхes por exemplo й kickado.
Reply
#5

Mas pode haver um caso em que ele esteja sу a escrever(falar) parado! Isso irб expulsб-lo

Fiz este cуdigo (Nгo foi experimentado):
PHP код:
#include <a_samp> // ISTO Й FUNDAMENTAL TER :D

#define TEMPOMAX_AFK 60*5 // O Tempo й em segundos nгo em milisegundos. Ex: 60 = 1 minuto, 60*5 = 300seg (5 Minutos).

new VerificarAFK[MAX_PLAYERS], Float:PosicaoDoJogador[MAX_PLAYERS][3], TimerAFK[MAX_PLAYERS], bool:JogadorFalou[MAX_PLAYERS];

public 
OnPlayerConnect(playerid// public Para ver se o jogador conectou-se
{
    
JogadorFalou[playerid] = false;
    
VerificarAFK[playerid] = 0// Pфr isto para manter a certeza que ele entrou agora (se nгo serб expulso)
    
TimerAFK[playerid] = SetTimerEx("AntiAFK"1000true"i"playerid); // AFK Timer
}

public 
OnPlayerDisconnect(playeridreason// Isto verifica se o jogador saiu do servidor
{
    
JogadorFalou[playerid] = false// Sу para verificar que o jogador jб nгo fala
    
VerificarAFK[playerid] = 0// Pфr isto para manter a certeza que o proximo jogador com o mesmo ID nгo seja expulso mal entre.
    
KillTimer(TimerAFK[playerid]); // O jogador jб nгo estб presente entre nуs por isso tira-lhe o timer!
}

public 
OnPlayerText(playeridtext[]) // public Para ver se o jogador falou e o quк!
{
    
JogadorFalou[playerid] = true// O jogador falou - torna-se este valor verdadeiro
    
return 1// return 1; para deixar o jogador falar e que seja transmitido aos outros
}

forward Expulsar(playerid); 
public 
Expulsar(playerid// Isto serve para expulsar o jogador
{
    
Kick(playerid);
}

forward AntiAFK(playerid);
public 
AntiAFK(playerid)
{
    
// PASSO 1: Verificar se os jogadores estгo na mesma posiзгo
    
new Float:xFloat:yFloat:z;
    
GetPlayerPos(playeridxyz); // No inнcio o valor de PosicaoDoJogador й 0.0 por isso ele nгo vai ter aumento no VerificarAFK
    
if((PosicaoDoJogador[playerid][0] == x) && (PosicaoDoJogador[playerid][1] == y) && (PosicaoDoJogador[playerid][2] == z)) // Estгo parados?
    
{
        if(
JogadorFalou[playerid] == false// O jogador estб parado e nгo fala
        
{
            
VerificarAFK[playerid]++; // Aumentar ao valor entгo...
            
if(VerificarAFK[playerid] >= TEMPOMAX_AFK// O jogador ultrapassou o valor mбximo de inatividade no servidor
            
{
                
SendClientMessage(playerid0xFF0000FF"[AFK]: {FFFFFF}Vocк estб expulso do servidor por ficar muito tempo parado."); // A mensagem
                
SetTimerEx("Expulsar"100false"i"playerid); // Este timer existe sу mesmo para que o jogador receba a mensagem de que estб expulso
            
}
        }
        else 
// O jogador estб parado mas estб a falar
        
{
            
VerificarAFK[playerid] = 0// Reset
            
JogadorFalou[playerid] = false// O jogador jб nгo fala por isso й melhor tornar este valor em falso
        
}
    }
    else 
// Nгo estгo? Й porque se estгo a mexer, VerificarAFK = 0;
    
{
        
PosicaoDoJogador[playerid][0] = x// Valor de X
        
PosicaoDoJogador[playerid][1] = y// Valor de Y
        
PosicaoDoJogador[playerid][2] = z// Valor de Z
        
VerificarAFK[playerid] = 0// Reset
        
JogadorFalou[playerid] = false// Sу para ter a certeza que ele nгo falou
    
}

Reply
#6

Boas Pessoal, vou testar aqui Obrigado.
Reply
#7

Quote:
Originally Posted by Nikkel
Посмотреть сообщение
Mas pode haver um caso em que ele esteja sу a escrever(falar) parado! Isso irб expulsб-lo
Mas OnPlayerUpdate ela nгo funciona quando o player estб ausente, acho que nao tem nd haver isto de escrever.
Eu testei e reparei que ela n й chamada qnd o player estб de ESC.
Reply
#8

troque
pawn Код:
if((PosicaoDoJogador[playerid][0] == x) && (PosicaoDoJogador[playerid][1] == y) && (PosicaoDoJogador[playerid][2] == z)) // Estгo parados?
para algo mais eficaz

pawn Код:
if(IsPlayerInRangeOfPoint(playerid,5.0,PosicaoDoJogador[playerid][0],PosicaoDoJogador[playerid][1],PosicaoDoJogador[playerid][2])) // Estгo parados?
Assim mesmo que ele se mova um bocado nгo faz mal, da maneira que tinha, basta mover 0.0001 que vai ser diferente.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)