[FilterScript] Mini sistema AFK com auto-kick
#1

Й um mini-sistema AFK com auto-kick no player que estiver AFK, parado ou de ESC por 10 minutos.

Comandos
/afk > fica AFK
/voltar > volta
/ausentes > mostra quem estб AFK

Cуdigo
pawn Код:
/*
                            Sistema AFK com Auto-Kick

                            Feito por [XPG]MarlonCS
                              Skype: marloncs_22
*/


//includes
#include <a_samp>
#include <zcmd>

// defines
#define cinza 0xBEBEBEFF
#define laranja 0xFFA500FF
#define verde_claro 0x00FF00FF
#define vermelho 0xFF0000FF

// forwards
forward ChecarAfk(playerid);
forward AtualizarAfk(playerid);
forward ChecarPosicao(playerid,Float:afkX,Float:afkY,Float:afkZ);

// news
new
   bool:AFKCMD[MAX_PLAYERS],
   AfkCount[MAX_PLAYERS],
   Text:afk[MAX_PLAYERS],
   timeafk[MAX_PLAYERS],
   Float:Position[3],
   AFK[MAX_PLAYERS],
   string[256]
;

public OnFilterScriptInit()
{
    SetTimer("ChecarPosicao", 600000, true); // Se o player ficar parado por 10 minutos, ele й tido como AFK
    SetTimer("ChecarAfk", 1000, true); // De um em um segundo chega o tempo do player AFK, caso ele esteja 10 minutos, ele й kickado
    print("\nSisteminha AFK carregado *.* -------");
    print("----------------------by [XPG]MarlonCS\n");
    return 1;
}

public OnFilterScriptExit()
{
    return 1;
}

public OnPlayerConnect(playerid)
{
    CriarTextDraw(playerid);
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    if(AFKCMD[playerid]==true) // Se o player sair enquanto tiver AFK antes de usar /voltar
    {
        AFK[playerid]=0;
        AFKCMD[playerid]=false;
    }
    return 1;
}

CMD:afk(playerid, params[])
{
    if(AFKCMD[playerid] == true) { SendClientMessage(playerid, cinza, "[SERVER] Vocк jб estб ausente!"); }
    AFK[playerid]=1;
    AFKCMD[playerid]=true;
    TogglePlayerControllable(playerid,0);
    TextDrawShowForPlayer(playerid,afk[playerid]);
    timeafk[playerid] = SetTimer("AtualizarAfk", 60000, true);
    format(string, sizeof(string), "[SERVER] %s estб ausente. ( /afk )", pnome(playerid));
    SendClientMessageToAll(laranja, string);
    return 1;
}

CMD:voltar(playerid, params[])
{
    if(AFKCMD[playerid] == false) { SendClientMessage(playerid, cinza, "[SERVER] Vocк nгo estб ausente!"); }
    AFK[playerid]=0;
    AFKCMD[playerid]=false;
    TogglePlayerControllable(playerid,1);
    TextDrawHideForPlayer(playerid,afk[playerid]);
    KillTimer(timeafk[playerid]);
    format(string, sizeof(string), "[SERVER] %s voltou ao jogo. ( /voltar )", pnome(playerid));
    SendClientMessageToAll(laranja, string);
    return 1;
}

CMD:ausentes(playerid, params[])
{
    new arm[500];
    new str[500];
    new Nome[24];
    new count;
    for(new i=0;i<MAX_PLAYERS;i++) {
        if(IsPlayerConnected(i)) {
            if(AFK[i] > 0) {
                count++;
                GetPlayerName(i, Nome, sizeof(Nome));
                format(str, sizeof(str),"{FFFFFF}Nome: {FFA500}%s {FFFFFF}[%i]\n", Nome, i);
                strcat(arm, str);
            }
        }
    }
    if(count<=0)return ShowPlayerDialog(playerid, 10, DIALOG_STYLE_MSGBOX, "===== {FFA500}Ausentes{FFFFFF} ======", "{00FF00}Nenhum player ausente", "OK", "");
    if(count>0)ShowPlayerDialog(playerid, 10, DIALOG_STYLE_MSGBOX, "===== {FFA500}Ausentes{FFFFFF} ======", arm, "OK", "");
    return 1;
}

public OnPlayerUpdate(playerid)
{
    GetPlayerPos(playerid, Position[0], Position[1], Position[2]); // Getar posiзгo
    if(AFK[playerid] == 1 && AfkCount[playerid] > 0 && AFKCMD[playerid]==false) // Se o player se mover
    {
        AfkCount[playerid] = 0;
        AFK[playerid]=0;
        KillTimer(timeafk[playerid]);
    }
    return 1;
}

stock CriarTextDraw(playerid)
{
    afk[playerid] = TextDrawCreate(260.000000,222.000000,"~r~AFK ~w~( sair: ~g~/voltar~w~ )");
    TextDrawSetOutline(afk[playerid], 1);
    TextDrawFont(afk[playerid], 2);
    TextDrawSetProportional(afk[playerid], true);
    TextDrawAlignment(afk[playerid], 1);
    TextDrawLetterSize(afk[playerid], 0.4, 3.0);
    TextDrawSetShadow(afk[playerid], 1);
    return 1;
}
public AtualizarAfk(playerid)
{
    AfkCount[playerid]++; // De um em um minuto soma mais 1
    return 1;
}
public ChecarPosicao(playerid,Float:afkX,Float:afkY,Float:afkZ) // Checar se o player estб parado
{
    GetPlayerPos(playerid,afkX,afkY,afkZ);
    if (Position[0] == afkX && Position[1] == afkY && Position[2] == afkZ)
    {
        AFK[playerid]=1;
        timeafk[playerid] = SetTimer("AtualizarAfk", 60000, true);
    }
    return 1;
}
public ChecarAfk(playerid)
{
    if(AFK[playerid]==1 && AfkCount[playerid] > 10) { // Verifica se o player estб afk por 10 minutos
        SendClientMessage(playerid, vermelho, "[SERVER] Vocк foi kickado por estar AFK por muito tempo!");
        Kick(playerid);
        format(string, sizeof string, "[SERVER] %s foi kickado por estar AFK por 10 minutos.", pnome(playerid));
        SendClientMessageToAll(vermelho, string);
    }
    return 1;
}
stock pnome(playerid)
{
    new nome[32];
    GetPlayerName(playerid, nome, sizeof(nome));
    return nome;
}
AMX: aqui
Reply
#2

Acho que seria um cуdigo ъtil , quem vai fazer download do amx ?

Reply
#3

Gostei.

@offtopic
Quote:
Originally Posted by Ades
Посмотреть сообщение
Acho que seria um cуdigo ъtil , quem vai fazer download do amx ?

Eu que arranjo barraco nй? Cade a coerкncia senhor?

Acho que quem baixaria um AMX, seria alguma pessoa com compilador bugado e queira usar o sistema dele.
Reply
#4

Bom, coloque para chegar o Heal tambйm pois tem BOT's que fazem vocк ficar andando sem parar :S
Reply
#5

IIIh...

@FrostGF
Vlws u.u

@Ades
Quer um pirulito?
Cуdigo ъtil para mim й algo pequeno.
Reply
#6

Quote:
Originally Posted by CidadeNovaRP
Посмотреть сообщение
Bom, coloque para chegar o Heal tambйm pois tem BOT's que fazem vocк ficar andando sem parar :S
LOL, nem sabia que existia botz assim
Reply
#7

Sem double post ._.

Parabйns. Legal
Reply
#8

desculpe ._.
Reply
#9

Quote:
Originally Posted by [XPG]MarlonCS
Посмотреть сообщение
LOL, nem sabia que existia botz assim
Num й bem BOT, й como um AUTO CLICK Ai ele executa tudo que vocк fazer no teclado (aperta W por 3 segundos e coloca loop ).
Reply
#10

Quote:
Originally Posted by FrostGF
Посмотреть сообщение
Gostei.

@offtopic


Eu que arranjo barraco nй? Cade a coerкncia senhor?

Acho que quem baixaria um AMX, seria alguma pessoa com compilador bugado e queira usar o sistema dele.
Tem varios compilador o "pawno" "infernus" "NotePad" ...
E acho que й imposivel bugar o compilador so casso o cara fizesse uma merda muito grande .

Quote:
Originally Posted by [XPG]MarlonCS
Посмотреть сообщение
Quer um pirulito?
Cуdigo ъtil para mim й algo pequeno.
Sim , de morango

Nгo tinha visto linhas mals , pois a maioria dos tуpicos й fail de AFK o seu estб bom parabйns =)
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)