[Pedido] Anti CMD Flood
#1

Galera eu queria algo que impedisse o player floodar comandos.

Tipo ele faz Flood e retorna uma mensagem pra ele. Pare de floodar comandos, ai se ele flooda mais uma vez ele fique 1 minuto proibido de usar qualquer comando do servidor. Tem como isso?

Uso ZCMD.
Reply
#2

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 ;
}
Cуdigo feito pelo Ricop522.

pawn Код:
//No Topo do GM:

new Comandos[MAX_PLAYERS][20];
new FloodComandos[MAX_PLAYERS];


//No comeзo do OnPlayerCommandText:

new ComandoAtual[20];
    new Parametro;
    ComandoAtual = strtok(cmdtext, Parametro);
    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);



//E, se a funзгo strtok nгo estiver declarada, no Final do GM:

stock strtok(const string[], &index)
{
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
        index++;
    }
    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = string[index];
        index++;
    }
    result[index - offset] = EOS;
    return result;
}
Cуdigo feito pelo rjjj.
Reply
#3

Use o search...

Quote:
Originally Posted by ViniBorn
Посмотреть сообщение
pawn Код:
new Flood[MAX_PLAYERS];
public OnPlayerCommandReceived(playerid, cmdtext[])
{

    if(Flood[playerid] > GetTickCount())
        return SendClientMessage(playerid, -1, "Proibido flood de comandos."), 0;

    Flood[playerid] = GetTickCount() + 1000;
    return true;
}
Reply
#4

Quote:
Originally Posted by Bruno13
Посмотреть сообщение
Use o search...
Quem disse que eu nгo usei

Se vocк parar pra ver nesse cуdigo, se o player usar outros cmds, ele vai receber a mensagem, quero fazer com que ele sу receba a mensagem se usar o mesmo comando.

Quanto aos outros cуdigos vou analisar e volto aqui


Obrigado
Reply
#5

E se for para zcmd? Funciona tambйm?
Reply
#6

Acho que esses sгo para strcmp, precisava em ZCMD
Reply
#7

Se for para um comando sу, basta utilizar um SetTimerEx + Booleana.

PHP код:
new bool:UsouComando[MAX_PLAYERS];
CMD:virilha(playerid)
{
   if(
UsouComando[playerid] != false) return SendClientMessage(playerid, -1"Aguarde para digitar esse comando novamente");
   
SetTimerEx("Comando"10000,false"i"playerid); // Intervalo de 10 segundos
   
UsouComando[playerid] = true// Ativando a booleana
   // Resto do cуdigo
   
return 1;
}
forward Comando(playerid);
public 
Comando(playerid)
{
   
UsouComando[playerid] = false// Desativa a booleana
   
SendClientMessage(playerid, -1"Jб pode utilizar o comando virilha");
   return 
1;

Uma boa madrugada.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)