[Ajuda] Sistema de AFK
#1

Nao sei por que o Fail, simplismente ele fica em AFK caso fique parado mais de 1 minuto, penso que o erro esteje na public porem nao detectei o mesmo


pawn Код:
#define TEMPO_AFK              5

new AFK[MAX_PLAYERS];

enum pPos
{
    Float:LastX,
    Float:LastY,
    Float:LastZ,
}
new PlayerLastPos[MAX_PLAYERS][pPos], PlayerAfkTicks[MAX_PLAYERS], Float:PlayerCurrentPos[3];

forward TempoAfk(playerid);
public TempoAfk(playerid)
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        GetPlayerPos(i, PlayerCurrentPos[0], PlayerCurrentPos[1], PlayerCurrentPos[2]);
        if(!floatcmp(PlayerCurrentPos[0], PlayerLastPos[i][LastX]) && !floatcmp(PlayerCurrentPos[1], PlayerLastPos[i][LastY]))
        {
            PlayerAfkTicks[i] ++;
        }
        else
        {
            PlayerAfkTicks[i] = 0;
        }
        PlayerLastPos[i][LastX] = PlayerCurrentPos[0];
        PlayerLastPos[i][LastY] = PlayerCurrentPos[1];
        PlayerLastPos[i][LastZ] = PlayerCurrentPos[2];

        if(PlayerAfkTicks[i] == TEMPO_AFK*60)
        {
            AFK[i] = 1;
            SendClientMessage(i, VERMELHO_ESCURO, "[ ANTI AFK ] Voce foi Bloqueado de upar por suspeita de Ausencia");
            TextDrawShowForPlayer(i,TextAfk1);
            TextDrawShowForPlayer(i,TextAfk2);
            TextDrawShowForPlayer(i,TextAfk3);
        }
    }
    return 1;
}
Reply
#2

olha,nгo entendi a sua duvida,mais dк uma olhada em outros sitemas anti afk..
https://sampforum.blast.hk/showthread.php?tid=139081
https://sampforum.blast.hk/showthread.php?tid=320242
https://sampforum.blast.hk/showthread.php?tid=171808
https://sampforum.blast.hk/showthread.php?tid=142409
Reply
#3

Rsrs minha duvida e que no meu caso, o player somente entra em AFK caso fique muito tempo parado, assim vai somando, so que nao ta dando certo, simplismente fica parado muito tempo e nao entro em estado AFK
Reply
#4

Qual o intervalo do timer?
Reply
#5

Para aumentar o PlayerAfkTicks

pawn Код:
TEMPO_AFK * 60

// Tempo AFK = 5
Reply
#6

Tente:

pawn Код:
#define TEMPO_AFK              5 // Em minutos

new AFK[MAX_PLAYERS];

enum pPos
{
    Float:LastX,
    Float:LastY,
    Float:LastZ,
}
new PlayerLastPos[MAX_PLAYERS][pPos], PlayerAfkTicks[MAX_PLAYERS], Float:PlayerCurrentPos[3];


forward TempoAfk();
public TempoAfk()
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        GetPlayerPos(i, PlayerCurrentPos[0], PlayerCurrentPos[1], PlayerCurrentPos[2]);
        if(!floatcmp(PlayerCurrentPos[0], PlayerLastPos[i][LastX]) && !floatcmp(PlayerCurrentPos[1], PlayerLastPos[i][LastY]))
        {
            PlayerAfkTicks[i] ++; // Passado 1 segundo aumenta o contador
        }
        else
        {
            PlayerAfkTicks[i] = 0;
        }
        PlayerLastPos[i][LastX] = PlayerCurrentPos[0];
        PlayerLastPos[i][LastY] = PlayerCurrentPos[1];
        PlayerLastPos[i][LastZ] = PlayerCurrentPos[2];

        if(PlayerAfkTicks[i] == TEMPO_AFK * 60000) // assim fica 5 minutos
        {
            AFK[i] = 1;
            SendClientMessage(i, VERMELHO_ESCURO, "[ ANTI AFK ] Voce foi Bloqueado de upar por suspeita de Ausencia");
            TextDrawShowForPlayer(i,TextAfk1);
            TextDrawShowForPlayer(i,TextAfk2);
            TextDrawShowForPlayer(i,TextAfk3);
        }
    }
    return 1;
}

// OnGameModeInit
SetTimer("TempoAfk", 1000, true);
Reply
#7

Quote:
Originally Posted by Victor'
Посмотреть сообщение
Tente:

pawn Код:
#define TEMPO_AFK              5 // Em minutos

new AFK[MAX_PLAYERS];

enum pPos
{
    Float:LastX,
    Float:LastY,
    Float:LastZ,
}
new PlayerLastPos[MAX_PLAYERS][pPos], PlayerAfkTicks[MAX_PLAYERS], Float:PlayerCurrentPos[3];


forward TempoAfk();
public TempoAfk()
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        GetPlayerPos(i, PlayerCurrentPos[0], PlayerCurrentPos[1], PlayerCurrentPos[2]);
        if(!floatcmp(PlayerCurrentPos[0], PlayerLastPos[i][LastX]) && !floatcmp(PlayerCurrentPos[1], PlayerLastPos[i][LastY]))
        {
            PlayerAfkTicks[i] ++; // Passado 1 segundo aumenta o contador
        }
        else
        {
            PlayerAfkTicks[i] = 0;
        }
        PlayerLastPos[i][LastX] = PlayerCurrentPos[0];
        PlayerLastPos[i][LastY] = PlayerCurrentPos[1];
        PlayerLastPos[i][LastZ] = PlayerCurrentPos[2];

        if(PlayerAfkTicks[i] == TEMPO_AFK * 60000) // assim fica 5 minutos
        {
            AFK[i] = 1;
            SendClientMessage(i, VERMELHO_ESCURO, "[ ANTI AFK ] Voce foi Bloqueado de upar por suspeita de Ausencia");
            TextDrawShowForPlayer(i,TextAfk1);
            TextDrawShowForPlayer(i,TextAfk2);
            TextDrawShowForPlayer(i,TextAfk3);
        }
    }
    return 1;
}

// OnGameModeInit
SetTimer("TempoAfk", 1000, true);
pawn Код:
forward TempoAfk();
public TempoAfk()
tem algum problema ficando assim ? pois no caso nao teria que ser em

pawn Код:
forward TempoAfk(playerid);
public TempoAfk(playerid)
Reply
#8

Quote:
Originally Posted by Murilo_sousa
Посмотреть сообщение
pawn Код:
forward TempoAfk();
public TempoAfk()
tem algum problema ficando assim ? pois no caso nao teria que ser em

pawn Код:
forward TempoAfk(playerid);
public TempoAfk(playerid)
Nгo hб necessidade de usar o argumento " playerid " jб que se trata de um loop na funзгo que verifica todos os ids, alйm de " playerid " nгo ser usado na funзгo.

Agora se vocк estб fazendo com argumentos, use SetTimerEx.
Reply
#9

Quote:
Originally Posted by Victor'
Посмотреть сообщение
Nгo hб necessidade de usar o argumento " playerid " jб que se trata de um loop na funзгo que verifica todos os ids, alйm de " playerid " nгo ser usado na funзгo.

Agora se vocк estб fazendo com argumentos, use SetTimerEx.
Testei e nao Funcionou =/
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)