[FilterScript] Anti Bot com verificador de nicks
#1

Como eu ando vendo que tem muita gente ainda pedindo anti bots fiz um bem simples.

Vocк pode adicionar nicks de bots a lista de nick completo ou nick parcial.

Vocк pode limitar as conexхes por IP tambйm.

pawn Код:
#include a_samp

const MAX_CON_PERM = 5;
const NENHUMA  = 0;
const BAN  = 1;
const KICK = 2;

enum eNick
{
    NickO[24],
    NickT[24],
    punicao,
};

static stock BotNickInteiro[][eNick] =
{
    // nick do bot   nick para trocar   punicao
    { "aux",            "[bot]",        KICK},
    { "con",            "[bot]",        KICK }
};

static stock BotNickParcial[][eNick] =
{
// nick parcial do bot  nick para trocar  punicao
    { "niex",           "[bot]",        KICK },
    { "botz",           "[bot]",        KICK }
};

public OnPlayerConnect(playerid)
{
    new nick[24], ip[30];

    GetPlayerName(playerid, nick, sizeof nick);
    GetPlayerIp(playerid, ip, sizeof ip);

    for(new i = 0; i < sizeof BotNickInteiro; i++)
    {
        if(strcmp(nick, BotNickInteiro[i][NickO], true ) == 0)
        {
            printf("> Bot Detect: %s[%d] - %s", nick, playerid, ip);

            format(nick, sizeof(nick), "%s%d", BotNickInteiro[i][NickT], playerid);
            SetPlayerName(playerid, nick);
           
            if(BotNickInteiro[i][punicao] == KICK) Kick(playerid);
            else if(BotNickInteiro[i][punicao] == BAN) BanEx(playerid, "BOT");
            else if(BotNickInteiro[i][punicao] == NENHUMA) printf("> Nenhuma acao foi feita com o BOT: %s[%d] - %s", nick, playerid, ip);
        }
    }

    for(new i = 0; i < sizeof BotNickParcial; i++)
    {
        if(strfind(nick, BotNickParcial[i][NickO], true ) != -1)
        {
            printf("> Bot Detect: %s[%d] - %s", nick, playerid, ip);

            format(nick, sizeof(nick), "%s%d", BotNickParcial[i][NickT], playerid);
            SetPlayerName(playerid, nick);
           
            if(BotNickParcial[i][punicao] == KICK) Kick(playerid);
            else if(BotNickParcial[i][punicao] == BAN) BanEx(playerid, "BOT");
            else if(BotNickParcial[i][punicao] == NENHUMA) printf("> Nenhuma acao foi feita com o BOT: %s[%d] - %s", nick, playerid, ip);
        }
    }
   
    new ipget[30], ips;
   
    for(new i = 0;  i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            GetPlayerIp(i, ipget, sizeof ipget);
            if(strcmp(ipget, ip, true) == 0)
            {
                ips++;
            }
        }
    }
   
    if(ips > MAX_CON_PERM)
    {
        printf("> Conexao excedida %s[%d] - %s", nick, playerid, ip);
        Kick(playerid);
    }
    return 1;
}
Reply
#2

A SA:MP jб tem proteзгo para isto.
Reply
#3

Neh ^^
Reply
#4

encima ^^

Me diz uma coisa, como й que o carinha vai modificar o IP em fraзхes de milйsimos de segundo? e a var ips nгo deveria ser uma var global ao invйs de local? pois ela vai ser reiniciada a cada vez que qualquer pessoa se conectar. >_>
pawn Код:
GetPlayerIp(playerid, ip, sizeof ip);// tava no comeзo do onplayerconnect..
    for(new i = 0;  i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            GetPlayerIp(i, ipget, sizeof ipget);
            if(strcmp(ipget, ip, true) == 0)
            {
                ips++;
            }
        }
    }
   
    if(ips > MAX_CON_PERM)
    {
        printf("> Conexao excedida %s[%d] - %s", nick, playerid, ip);
        Kick(playerid);
    }
Reply
#5

Leonardo, isto й para checar quantos jogadores com mesmo IP estгo no servidor.
Reply
#6

oh fuck ! nem percebi rsrsrsrs.
Reply
#7

Quote:
Originally Posted by leonardo1434
Посмотреть сообщение
encima ^^

Me diz uma coisa, como й que o carinha vai modificar o IP em fraзхes de milйsimos de segundo? e a var ips nгo deveria ser uma var global ao invйs de local? pois ela vai ser reiniciada a cada vez que qualquer pessoa se conectar. >_>
pawn Код:
GetPlayerIp(playerid, ip, sizeof ip);// tava no comeзo do onplayerconnect..
    for(new i = 0;  i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            GetPlayerIp(i, ipget, sizeof ipget);
            if(strcmp(ipget, ip, true) == 0)
            {
                ips++;
            }
        }
    }
   
    if(ips > MAX_CON_PERM)
    {
        printf("> Conexao excedida %s[%d] - %s", nick, playerid, ip);
        Kick(playerid);
    }
A variбvel ips й para verificar a quantidade de ips conectados em determinado ip, nгo tem necessidade se ser global, pois й "temporaria" e ninguйm vai usar o OnPlayerConnect ao mesmo tempo.

A primeira variбvel de ip й para pegar o ip do jogador conectado e assim restringir o uso da var. ips a apenas quem estб conectando.
Reply
#8

Eu entendi apos o post do drakin й que eu me confundi ao ler o cуdigo.
Reply
#9

Vocк poderia usar propertys (meu varSet e varGet) e evitar este loop todo

Exemplo:
pawn Код:
// onplayerconnect
varSet("127.0.0.1", varGet("127.0.0.1") +1)

if(varGet("127.0.0.1") > 5) {
   // existem 5 jogadores com ip 127.0.0.1
}

//onplayerdisconnect
varSet("127.0.0.1", varGet("127.0.0.1") -1)
Reply
#10

Quote:
Originally Posted by paulor
Посмотреть сообщение
Neh ^^
CAra, como assim o SA;MP ja tem bloqueando isso, pod eme ajuda to sendo derrubado direto amigo me ajude
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)