[Ajuda] Anti flood dominado
#1

#resolvido
Reply
#2

#Resolvido tinha errado no timer agora sim estб para 3 segundos.
Reply
#3

Muito mais fбcil e otimizado usando gettime():
Код:
new AntiFloodCommand[MAX_PLAYERS][2];

public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
    if(gettime() - AntiFloodCommand[playerid][0] >= 2)
	{
		AntiFloodCommand[playerid][1] = 0;
		AntiFloodCommand[playerid][0] = gettime();
	}
	AntiFloodCommand[playerid][1]++;
    if(AntiFloodCommand[playerid][1] > 10)
    {
        SendClientMessage(i, -1, "Vocк foi kickado por floodar 10 comandos em 2 segundos, os admins foram avisados !");
       	Kick(i);
    }
    return 1;
}
Reply
#4

Galera vlw mбs tipo eu n uso zcmd e tambйm nгo й um flood do player falando й um flood que havia de um bug do server sacou? mбs vlw aн obg
Reply
#5

XandyMello, como um timer fazendo um loop pode ser mais rбpido do que esse cуdigo? Ainda pode dar falhas, como se o timer estiver na metade do tempo e aн nгo sгo mais 2 segundos e sim 1 (mas isso й desprezнvel), o delay atй chegar no ID do jogador que deu o flood, ainda hб o lag do servidor que pode atrasar mais ainda o timer, com esses atrasos o cheater jб teria feito um flood muito maior, jб com o meu cуdigo nada disso acontece porque quando chega em 10 comandos seguidos й kickado instantaneamente e nгo hб como "floodar" mais que isso. Nгo consigo entender como isso pode ser mais rбpido e de mesma eficбcia que esse meu cуdigo.
Reply
#6

Estou falando rбpido e eficaz para o servidor e nгo para quem escreve o cуdigo, o maior problema й que o jogador poderб digitar quantos comandos imaginar nesse espaзo de 2 segundos que o timer dб a ele antes de fazer a verificaзгo, jб o meu cуdigo nгo deixa passar de 10 comandos (isso nгo faria diferenзa nesse caso, mas pense se fosse um anti-flood de mensagens no chat). Quanto ao atraso adicionado ao timer pelo lag do servidor й realmente quase inexistente, vocк tem razгo. Sobre o foreach, nunca usei mas acho que (no caso para players) seria a mesma coisa que um loop normal usando a definiзгo MAX_PLAYERS (redefinida conforme o real nъmero) e a funзгo IsPlayerConnected, devo estar muito errado.
Reply
#7

Eu nem tava falando de flood em comandos mбs blz, ADM pode fechar aqui se quiser ;-;
Reply
#8

Quote:
Originally Posted by RodrigoMSR
Посмотреть сообщение
Muito mais fбcil e otimizado usando gettime():
Код:
new AntiFloodCommand[MAX_PLAYERS][2];

public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
    if(gettime() - AntiFloodCommand[playerid][0] >= 2)
	{
		AntiFloodCommand[playerid][1] = 0;
		AntiFloodCommand[playerid][0] = gettime();
	}
	AntiFloodCommand[playerid][1]++;
    if(AntiFloodCommand[playerid][1] > 10)
    {
        SendClientMessage(i, -1, "Vocк foi kickado por floodar 10 comandos em 2 segundos, os admins foram avisados !");
       	Kick(i);
    }
    return 1;
}
@Edit

Testou o cуdigo? Toda a vez que for realizado um comando, a array AntiFloodCommand[playerid][1] vai aumentar independentemente se for digitado em mais ou menos de 2 segundos.
E sim, este modo й o mais otimizado se nгo quiser mostrar quantos segundos faltam para digitar.
Reply
#9

Nгo testei nada que mandaram aqui porque pelo o que eu vi й para comandos e para dominar uma base nгo й necessario um comando, e o que eu fiz foi sу criar um timer
Reply
#10

Quote:
Originally Posted by F1N4L
Посмотреть сообщение
@Edit

Testou o cуdigo? Toda a vez que for realizado um comando, a array AntiFloodCommand[playerid][1] vai aumentar independentemente se for digitado em mais ou menos de 2 segundos.
E sim, este modo й o mais otimizado se nгo quiser mostrar quantos segundos faltam para digitar.
Aumenta sim, mas ao passar de 2 segundos ele zera a array logo acima e assim recomeзa a contagem.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)