Boa tarde, galera! Hoje trago a vocês um sistema de chat simples com um antiflood
Código:
#define TimerFlood 5000
new FloodAlert[MAX_PLAYERS],
FloodTimer[MAX_PLAYERS];
public OnPlayerText(playerid, text[])
{
new String[220], MGS[220];
KillTimer(FloodTimer[playerid]);
FloodTimer[playerid] = SetTimerEx("RemoveFlood", TimerFlood, 0, "i", playerid);
if(FloodAlert[playerid] == 0)
{
format(String, sizeof String, "{848484} %s {E6E6E6}disse: %s", PlayerName(playerid), text);
format(MGS, sizeof(MGS), "%s", text);
SendClientMessageInRange(10.0, playerid, String, 0x848484, 0x848484, 0x848484, 0x848484, 0x848484);
SetPlayerChatBubble(playerid, MGS, 0x00AAEEFF, 20.0, 10000);
}
FloodAlert[playerid] ++;
return 0;
}
forward RemoveFlood(playerid);
public RemoveFlood(playerid)
{
KillTimer(FloodTimer[playerid]);
FloodAlert[playerid] = 0;
if(!IsPlayerInAnyVehicle(playerid))
{
ClearAnimations(playerid);
SetPlayerSpecialAction(playerid, 0);
}
return 1;
}
stock SendClientMessageInRange(Float:_r, playerid, const _s[],c1,c2,c3,c4,c5)//Fun��o que ira servir ao enviar mensagens
{
new Float:_x, Float:_y, Float:_z;//Variaveis usadas para salvar a posi��o do playerid
GetPlayerPos(playerid, _x, _y, _z);//Pegar a posi��o do jogador e salvar nas variaveis criadas acima
for(new i; i < MAX_PLAYERS; i++)
{
if(GetPlayerVirtualWorld(i) != GetPlayerVirtualWorld(playerid))continue;//Pegar o virtual(realidade/) de todos os jogadores
if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/16)//Pegar a distancia de um jogador para outro(Ponto)
SendClientMessage(i, c1, _s);//Usado para enviar mensagem aos jogadores do(a) mesmo(a) virtual(realidade)
else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/8)//Pegar a distancia de um jogador para outro(Ponto)
SendClientMessage(i, c2, _s);//Usado para enviar mensagem aos jogadores do(a) mesmo(a) virtual(realidade)
else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/4)//Pegar a distancia de um jogador para outro(Ponto)
SendClientMessage(i, c3, _s);//Usado para enviar mensagem aos jogadores do(a) mesmo(a) virtual(realidade)
else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r/2)//Pegar a distancia de um jogador para outro(Ponto)
SendClientMessage(i, c4, _s);//Usado para enviar mensagem aos jogadores do(a) mesmo(a) virtual(realidade)
else if(GetPlayerDistanceFromPoint(i,_x,_y,_z) < _r)//Pegar a distancia de um jogador para outro(Ponto)
SendClientMessage(i, c5, _s);//Usado para enviar mensagem aos jogadores do(a) mesmo(a) virtual(realidade)
}
return true;
}
stock PlayerName(playerid)
{
new Name[MAX_PLAYER_NAME];
GetPlayerName(playerid, Name, sizeof Name);
return Name;
}