[Pedido] Anti AFK
#1

Pessoal estava atras de um anti afk se o player fica 3 minutos parado ele e kickado

se alguem tiver poderia me passa por favor?


Obrigado.
Reply
#2

pawn Код:
new Float:OldPos[3], Afks[MAX_PLAYERS];//topo do GM
forward CheckAfk();//topo do GM

SetTimer("CheckAfk", 60000, true);//na public OnGameModeInit

public CheckAfk()//fim do GM
{
new Float:pos[3];
for(new i=0; i<MAX_PLAYERS; i++)
{
GetPlayerPos(i, pos[0], pos[1], pos[2]);
if(pos[0]+pos[1]+pos[2] == OldPos[0]+OlsPos[1]+OldPos[2])
{
Afks[i]++;
if(Afks[i] == 3)
{
SendClientMessage(i, -1, "Vocк foi kickado por ficar mais de 3 minutos AFK!");
Kick(i);
}
}
else Afks[i] = 0;
OldPos[0] = Pos[0];
OldPos[1] = Pos[1];
OldPos[2] = Pos[2];
}
return 1;
}
Assim ele vai checar se o player tiver parado a cada 1 minuto, se ele checar 3x e a posiзгo for a mesma vai kickar.

ps: fiz no quick reply entao n ta identado.
Reply
#3

Float:OldPos[3] nao teria que ser um para cada player?
Reply
#4

pawn Код:
new Float:OldPos[MAXPLAYERS][3], Afks[MAX_PLAYERS];//topo do GM
forward CheckAfk();//topo do GM

SetTimer("CheckAfk", 60000, true);//na public OnGameModeInit

public CheckAfk()//fim do GM
{
new Float:pos[3];
for(new i=0; i<MAX_PLAYERS; i++)
{
GetPlayerPos(i, pos[0], pos[1], pos[2]);
if(pos[0]+pos[1]+pos[2] == OldPos[i][0]+OlsPos[i][1]+OldPos[i][2])
{
Afks[i]++;
if(Afks[i] == 3)
{
SendClientMessage(i, -1, "Vocк foi kickado por ficar mais de 3 minutos AFK!");
Kick(i);
}
}
else Afks[i] = 0;
OldPos[i][0] = Pos[0];
OldPos[i][1] = Pos[1];
OldPos[i][2] = Pos[2];
}
return 1;
}

Concertado! obrigado Vai_Besta!
Reply
#5

pawn Код:
new giveplayerid, Float:pX[MAX_PLAYERS],    Float:pY[MAX_PLAYERS]Float:pZ[MAX_PLAYERS];

    CMD:esc(playerid, params[])
    {
        if(sscanf(params,"i", giveplayerid))
            return SendClientMessage(playerid, -1,"[ERRO]: Correto: /Esc [ID]"),SendClientMessage(playerid, -1 -1,"[INFO]: Este comando denuncia player que estб de Esc.");

        GetPlayerPos(playerid, Float:pX[playerid], Float:pY[playerid], Float:pZ[playerid]);
        SetTimerEx("PlayerInUseEsc", 70000,false,"d", giveplayerid);
        return 1;
    }
   
   
   
   
forward PlayerInUseEsc(playerid);
public PlayerInUseEsc(playerid)
{
    new
        Float:_X, Float:_Y, Float:_Z;
    GetPlayerPos(playerid, _X, _Y, _Z);

    if(_X != pX[playerid] && _Y != pY[playerid] && _Z != pZ[playerid])  return Kick(playerid);
    return 0;
}
fiz agora =)
Reply
#6

Quando vc usa sу 1 parametro й mais rapido nгo usar sscanf... e seu codigo c o player n der /esc no outro player ele pode se esconder e ficar afk...
Reply
#7

Quote:
Originally Posted by Pharrel
Посмотреть сообщение
Quando vc usa sу 1 parametro й mais rapido nгo usar sscanf... e seu codigo c o player n der /esc no outro player ele pode se esconder e ficar afk...
pawn Код:
SetTimer("PlayerInUseEsc", 1500, true);

xDD
Reply
#8

Ta kickando mesmo se tive se mechendo
Reply
#9

vc usou o 2є codigo q eu postei?

pawn Код:
new Float:OldPos[MAX_PLAYERS][3], Afks[MAX_PLAYERS];//topo do GM
forward CheckAfk();//topo do GM

SetTimer("CheckAfk", 60000, true);//na public OnGameModeInit

public CheckAfk()//fim do GM
{
    new Float:pos[3];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
        GetPlayerPos(i, pos[0], pos[1], pos[2]);
        if(pos[0]+pos[1]+pos[2] == OldPos[i][0]+OlsPos[i][1]+OldPos[i][2])
        {
            Afks[i]++;
            if(Afks[i] == 3)
            {
                SendClientMessage(i, -1, "Vocк foi kickado por ficar mais de 3 minutos AFK!");
                Kick(i);
            }
        }
        else Afks[i] = 0;
        OldPos[i][0] = Pos[0];
        OldPos[i][1] = Pos[1];
        OldPos[i][2] = Pos[2];
    }
    return 1;
}
Reply
#10

tentas:
pawn Код:
new
    Float:pX[MAX_PLAYERS],
    Float:pY[MAX_PLAYERS],
    Float:pZ[MAX_PLAYERS]
;


forward PlayerInUseEsc(playerid, Float:x, Float:y, Float:z);
public PlayerInUseEsc(playerid, Float:x, Float:y, Float:z)
{
    if(pX[playerid] != 0.0)
    {
        new Float:_X, Float:_Y, Float:_Z; GetPlayerPos(playerid, _X, _Y, _Z);
        if(_X == pX[playerid] && _Y == pY[playerid] && _Z == pZ[playerid])
        {
            new id = playerid;
            Kick(playerid);
            pX[id] = 0.0;
            pY[id] = 0.0;
            pZ[id] = 0.0;
        }
    }
    GetPlayerPos(playerid, pX[playerid], pY[playerid], pZ[playerid]);
    SetTimerEx("PlayerInUseEsce", 3000, false, "ifff", playerid, pX[playerid], pY[playerid], pZ[playerid]);
    return 1;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)