18.09.2016, 18:08
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
att. BobMarley
#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", 1000, true, "i", playerid);
}
public OnPlayerDisconnect(playerid, reason)
{
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;
}
Teste o code e me fale, fiz agora n testei. Irб detectar assim que o player apertar "ESC".
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", 1000, true, "i", playerid); // AFK Timer
}
public OnPlayerDisconnect(playerid, reason) // 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(playerid, text[]) // 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:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z); // 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(playerid, 0xFF0000FF, "[AFK]: {FFFFFF}Vocк estб expulso do servidor por ficar muito tempo parado."); // A mensagem
SetTimerEx("Expulsar", 100, false, "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
}
}
Mas pode haver um caso em que ele esteja sу a escrever(falar) parado! Isso irб expulsб-lo
|
if((PosicaoDoJogador[playerid][0] == x) && (PosicaoDoJogador[playerid][1] == y) && (PosicaoDoJogador[playerid][2] == z)) // Estгo parados?
if(IsPlayerInRangeOfPoint(playerid,5.0,PosicaoDoJogador[playerid][0],PosicaoDoJogador[playerid][1],PosicaoDoJogador[playerid][2])) // Estгo parados?