22.01.2011, 14:57
(
Последний раз редактировалось Lуs; 18.11.2016 в 01:28.
)
Criando um anti flood simples
Introduзгo:
Para este tutorial, devemos entender oque й SPAM e oque й FLOOD. Sгo duas palavras muitos diferentes porйm com uma semelhanзa, vamos ver:
Oque й SPAM?
Код:
Spam й um termo de origem inglesa cujo significado designa uma mensagem eletrфnica recebida mas nгo solicitada pelo usuбrio. O conteъdo de um spam й normalmente uma mensagem publicitбria que tem o objetivo de divulgar os serviзos ou produtos de alguma empresa a uma grande massa de usuбrios de e-mail.
Oque й FLOOD?
Код:
“Flood” й um termo em inglкs que significa “encher” ou “inundar”, mas na internet ele
usado para designar uma atitude bem irritante. Virtualmente, a palavra virou uma
expressгo para definir o ato de postar informaзхes sem sentido ou finalidade nenhuma,
de modo que uma ou mais pessoas sejam prejudicadas.
A semelhanзa entre esses dois й que sгo muitas mensagens em um curto tempo e que muitas vezes podem sobrecarregar o servidor, um exemplo mais prбtico й um ataque DDoS que й um ataque de floood aonde o hacker envia vбrios pacotes invбlidos para o servidor e quando esses pacotes chegam no servidor eles sгo negados um pequeno exemplo:
Como vocк pode notar, no lado esquerdo estб a terra representando o cliente e no lado direito o servidor. Quando vбrios clientes enviam seus pacotes no servidor tudo fica normal, porйm quando alguns clientes enviam muito mais de um pacote para um ъnico servidor acarreta e sobrecarrega o servidor. Mas nosso tutorial nгo й sobre ataque DDoS e sim Antispam/Antiflood.
Precisaremos saber tambйm, oque й timestamp:
Код:
O timestamp do unix corresponde ao nъmero de segundos desde a meia-noite do dia 01/01/1970 no fuso horбrio UTC sem considerar os segundos bissextos. Para simplificar, vamos denominar este momento no tempo de ponto zero. Assim, o timestamp do unix й o nъmero de segundos desde o ponto zero.
Tutorial:
Agora que sabemos oque й SPAM e oque й FLOOD vamos iniciar nosso tutorial. Primeiramente precisamos de uma variбvel que armazenarб os dados de cada jogador, para ter maior controle sobre o sistema.. Vamos cria-la com o nome Spamming, Essa variбvel armazenarб o timestamp do jogador
PHP код:
new Spamming[MAX_PLAYERS];
Apуs criar nossa variбvel, precisamos criar nosso algoritimo em que faz a verificaзгo para saber se o jogador realizou flood ou spam:
PHP код:
if((gettime() - Spamming[playerid]) <= 2 && Spamming[playerid])
{
return SendClientMessage(playerid, -1, "[Erro]: Sistema anti Spam/Flood");
}
Spamming[playerid] = gettime();
PHP код:
/*
Na condiзгo a seguir, й realizado uma verificaзгo para saber se a variбvel Spamming й diferente de 0
e tambйm para saber se o timestamp atual subtraнdo pelo timestamp da ъltima vez que ele digitou algum comando
й menor ou igual a 2. Caso for menor ou igual a 2 ele manda a mensagem.
*/
if((gettime() - Spamming[playerid]) <= 2 && Spamming[playerid])
{
// Mensagem informando que o jogador cometeu SPAM:
return SendClientMessage(playerid, -1, "[Erro]: Sistema anti Spam/Flood");
}
/*
Caso fizer mais que 2 segundos que o jogador digitou algum comando, ele apenas armazena o timestamp
na variбvel Spamming.
*/
Spamming[playerid] = gettime();
Este й um exemplo muito simples, envolve mais questгo de lуgica do que de funзхes. Lembrando que vocк pode utilizar este anti-spam/anti-flood em qualquer parte do seu gamemode:
Caso vocк use ZCMD ou Y_CMD
PHP код:
public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
if((gettime() - Spamming[playerid]) <= 2 && Spamming[playerid])
{
return SendClientMessage(playerid, -1, "[Erro]: Sistema anti Spam/Flood");
}
Spamming[playerid] = gettime();
return 1;
}
Em STRCMP
PHP код:
public OnPlayerCommandText(playerid, cmdtext[])
{
if((gettime() - Spamming[playerid]) <= 2 && Spamming[playerid])
{
return SendClientMessage(playerid, -1, "[Erro]: Sistema anti Spam/Flood");
}
Spamming[playerid] = gettime();
return 1;
}
Crйditos:
- zSuYaNw @ 2016