[PEDIDO] Anti-Flood Comandos +Rep.
#1

Bom, alguйm aн tem um anti flood para os comandos ? Eu queria que quando o player digitar 3 comandos rapidamente, que ele seja kickado automaticamente, e que esse anti-flood em comandos funcione tbm qdo digitar rapido /PM [ID] [Mensagem] para alguйm. Entгo se puderem me ajudar vou ficar muito grato.
OBS: Exemplo: "%s Foi kickado por floodar nos comandos!"
Obrigado.
+rep.
Reply
#2

Mas quando eu fui testar, eu digito /sf e depois de uns 6..7.. segundos qdo eu vo digitar /sf denovo, aparece para nao floodarnos comandos, WTF ?
Reply
#3

Se funcionar avisa.
pawn Код:
new comandoDigitado[MAX_PLAYERS][128];
new comandoTempo[MAX_PLAYERS] = -1;

//OnPlayerCommandText
public OnPlayerCommandText(playerid, cmdtext[]) {
    if(!strcmp(cmdtext, comandoDigitado[playerid], true) && comandoTempo[playerid] < gettime())  {
        SendClientMessage(playerid, -1, "Aguarde 5 segundos para usar esse comando novamente.");
        return 1;
    }
    format(comandoDigitado[playerid], 128, "%s", cmdtext);
    comandoTempo[playerid] = gettime()+5;

    return ;
}
Reply
#4

substitui essa parte:
pawn Код:
if(!strcmp(ComandoAtual, Comandos[playerid], true) && strlen(Comandos[playerid]))
    {
        FloodComandos[playerid]++;
        SendClientMessage(playerid, 0x33CCFFAA, "Proibido flood em comandos !");
        if(FloodComandos[playerid] == 3)
        {
            Comandos[playerid] = ("");
            FloodComandos[playerid] = 0;
            new STR[65];
            new NickName[MAX_PLAYER_NAME];
            GetPlayerName(playerid, NickName, MAX_PLAYER_NAME);
            format(STR, 65, "%s Foi kickado por floodar nos comandos!", NickName);
            SendClientMessageToAll(0xFF0000AA, STR);
            Kick(playerid);
        }
        return 1;
    }
    else
    {
        FloodComandos[playerid] = 0;
    }
    format(Comandos[playerid], 20, "%s", ComandoAtual);
por essa:
pawn Код:
if(!strcmp(ComandoAtual, Comandos[playerid], true) && strlen(Comandos[playerid]))
    {
       timerzerar[playerid] = SetTimerEx("zerarcmd",5000,false, "i",playerid);
        FloodComandos[playerid]++;
        SendClientMessage(playerid, 0x33CCFFAA, "Proibido flood em comandos !");
        if(FloodComandos[playerid] == 3)
        {
            Comandos[playerid] = ("");
            FloodComandos[playerid] = 0;
            new STR[65];
            new NickName[MAX_PLAYER_NAME];
            GetPlayerName(playerid, NickName, MAX_PLAYER_NAME);
            format(STR, 65, "%s Foi kickado por floodar nos comandos!", NickName);
            SendClientMessageToAll(0xFF0000AA, STR);
            Kick(playerid);
        }
        return 1;
    }
    else
    {
        FloodComandos[playerid] = 0;
    }
    format(Comandos[playerid], 20, "%s", ComandoAtual);
e no final do gm:

pawn Код:
forward zerarcmd(playerid);
public zerarcmd(playerid)
{
    if(FloodComandos[playerid] < 3)
    {
    KillTimer(timerzerar[playerid]);
    FloodComandos[playerid] = 0;
    }
   
}
e no comeзo do gm:
pawn Код:
new timerzerar[MAX_PLAYERS];
Bom, nгo testei, mais acho q isso resolve. ^^

@edit, sorry nгo tinha visto o do ricop ^^ hehe
Reply
#5

Mother of god oque й isso:
Код:
C:\Users\Guilherme\Desktop\Brasil Realidade Cruel\gamemodes\novogmsem.pwn(5882) : error 047: array sizes do not match, or destination array is too small
Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


1 Error.
pawn Код:
ComandoAtual = strtok(cmdtext, Parametro); // ESTA Й A LINHA
Reply
#6

Final do gamemode:
pawn Код:
stock IsPlayerFlooding(pid, maxtime)
{
    static Flooding[MAX_PLAYERS char];
    if(tickcount() - Flooding{pid} < maxtime) return Flooding{pid} = tickcount(), true;
    return Flooding{pid} = tickcount(), false;
}
No OnPlayerCommandText(topo)
pawn Код:
if(IsPlayerFlooding(playerid, 5000)) return SendClientMessage(playerid, -1,"Frodanu (5s)");
- Testado.
Reply
#7

Aff, -.- , fui adicionar o COD do Ricop, e qdo fui compilar, o pawno fecha, ai eu abro ele denovo, a eu compilo, e ele fecha denovo, alguem tem mais um ai ? pf.!
Reply
#8

Й que tem um problema rjjj, eu queria que quando o player digitasse um comando, e quando tentasse de novo rapidamente na segunda vez, que aparecesse uma mensagem assim: "[FLOOD]: Espere 2 segundos para digitar novamente!".
Obrigado!
Reply
#9

Quote:
Originally Posted by Gustavo_z
Посмотреть сообщение
Й que tem um problema rjjj, eu queria que quando o player digitasse um comando, e quando tentasse de novo rapidamente na segunda vez, que aparecesse uma mensagem assim: "[FLOOD]: Espere 2 segundos para digitar novamente!".
Obrigado!

Basta editar este SendClientMessage do cуdigo que postei :


pawn Код:
SendClientMessage(playerid, 0x33CCFFAA, "Proibido flood em comandos !");


E mudar o valor do sнmbolo Tempo para 2000 se vocк quiser que realmente o jogador tenha que esperar um tempo de 2 segundos.



Espero ter ajudado .
Reply
#10

Mas й que quando eu digito por exemplo, /sf, eu consigo digitar 2 vezes rapidamente sem dar o aviso.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)