SA-MP Forums Archive
[Ajuda]Banir Nick - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda]Banir Nick (/showthread.php?tid=250990)



[Ajuda]Banir Nick - gabrielbnv - 25.04.2011

Galera, To Tentando Criar um /ban Por Nick pq tipo, qdo banimos alguem, ele fica banido por ip, mais ai se ele mudar o ip consegue logar devolta¬¬

intao queria fazer o ban ser pelo nick e nao pelo IP ,pra qdo o player banido logar, ele continuar com o nick banido ate acabar os dias..


Re: [DUV]Banir Nick - diretor7 - 25.04.2011

Vocк quis dizer que ele bani certo, mais se a pessoa muda o IP ele consegue voltar com a conta banida isso?


Re: [DUV]Banir Nick - Carl_Thuse - 25.04.2011

Lol, eu consigo banir pelo Nome mas nгo pelo IP '------'
Denso


Re: [DUV]Banir Nick - gabrielbnv - 25.04.2011

mais й oq eu quero, quero banir o nick do palyer e nao o IP


Re: [DUV]Banir Nick - zSuYaNw - 25.04.2011

http://www.******.com.br/search?sour...ckName+SA%3AMP


Re: [DUV]Banir Nick - Lucas_ - 25.04.2011

No meu GM tem os dois de uma vez!
Quando do ban, o IP e o nick do indeviduo fica banido... com aquela conta ele nгo poderб mais entrar no server


Re: [DUV]Banir Nick - diretor7 - 25.04.2011

Mande nуs o seu sistema de ban para que possa ajuda-lo!


Re: [Ajuda]Banir Nick - [S]trong - 25.04.2011

Se vocк quer um banimento que quando o player na lista de banidos entrar no jogo ele for banido utilize sistema de salvamento,se vocк quiser que ele seja banido ao entrar use onplayerconnect, faзa o gamemode fazer uma leitura dos nicks banidos do servidor e retornar ao banimento.


Re: [Ajuda]Banir Nick - Allanrokeiro - 25.04.2011

Achei o que vocк procura...

pawn Код:
/*x---------------------------------Important-------------------------------------x*/
//**INCLUDES**//
#include <a_samp>
/*x---------------------------------Defining-------------------------------------x*/
//**COLORS*//
#define GREEN           0x21DD00FF
#define RED             0xE60000FF
#define ADMIN_RED       0xFB0000FF
#define YELLOW          0xFFFF00FF
#define ORANGE          0xF97804FF
#define LIGHTRED        0xFF8080FF
#define LIGHTBLUE       0x00C2ECFF
#define PURPLE          0xB360FDFF
#define PLAYER_COLOR    0xFFFFFFFF
#define BLUE            0x1229FAFF
#define LIGHTGREEN      0x38FF06FF
#define DARKPINK        0xE100E1FF
#define DARKGREEN       0x008040FF
#define ANNOUNCEMENT    0x6AF7E1FF
#define COLOR_SYSTEM    0xEFEFF7AA
#define GREY            0xCECECEFF
#define PINK            0xD52DFFFF
#define DARKGREY        0x626262FF
#define AQUAGREEN       0x03D687FF
#define NICESKY         0x99FFFFAA
#define WHITE           0xFFFFFFFF
/*x---------------------------------CallBacks-------------------------------------x*/
stock IsNumeric(const num[])
{
    for (new i = 0, j = strlen(num); i < j; i++)
    if (num[i] > '9' || num[i] < '0')
    return 0;
    return 1;
}

ReturnUser(text[], playerid = INVALID_PLAYER_ID)
{
    new pos = 0;
    while (text[pos] < 0x21)
    {
        if (text[pos] == 0) return INVALID_PLAYER_ID;
        pos++;
    }
    new userid = INVALID_PLAYER_ID;
    if (IsNumeric(text[pos]))
    {
        userid = strval(text[pos]);
        if (userid >=0 && userid < MAX_PLAYERS)
        {
            if(!IsPlayerConnected(userid))
                userid = INVALID_PLAYER_ID;
            else return userid;
        }
    }
    new len = strlen(text[pos]);
    new count = 0;
    new pname[MAX_PLAYER_NAME];
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
        if (IsPlayerConnected(i))
        {
            GetPlayerName(i, pname, sizeof (pname));
            if (strcmp(pname, text[pos], true, len) == 0)
            {
                if (len == strlen(pname)) return i;
                else
                {
                    count++;
                    userid = i;
                }
            }
        }
    }
    if (count != 1)
    {
        if (playerid != INVALID_PLAYER_ID)
        {
            if (count) SendClientMessage(playerid, COLOR_SYSTEM, "There are multiple users, enter full playername.");
            else SendClientMessage(playerid, COLOR_SYSTEM, "Playername not found.");
        }
        userid = INVALID_PLAYER_ID;
    }
    return userid;
}

stock strtok(const str[], &index,seperator=' ')
{
    new length = strlen(str);
    new offset = index;
    new result[128];
    while ((index < length) && (str[index] != seperator) && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = str[index];
        index++;
    }

    result[index - offset] = EOS;
    if ((index < length) && (str[index] == seperator))
    {
        index++;
    }
    return result;
}

stock SendClientMessageToAdmins(color, msg[])
{
    new string[128];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            if (IsPlayerAdmin(i))
            {
                SendClientMessage(i, color, msg);
                printf("%s", string);
            }
        }
    }
    return 1;
}

stock bigstr(const string[], &idx)
{
    new length = strlen(string);
    while ((idx < length) && (string[idx] <= ' '))
    {
        idx++;
    }
    new offset = idx;
    new result[128];
    while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
    {
        result[idx - offset] = string[idx];
        idx++;
    }
    result[idx - offset] = EOS;
    return result;
}

public OnFilterScriptInit()
{
    print("<|-----------------------------------------|>");
    print(" |  .: [  - SeifAdmin Script by Seif -  ] :.  |");
    print("<|-----------------------------------------|>");
    if (!fexist("Bans.txt"))
    {
        new File:open = fopen("Bans.txt",io_write);
        if (open) fclose(open);
    }
    if (!fexist("TempBans.ban"))
    {
        new File:open = fopen("TempBans.ban",io_write);
        if (open) fclose(open);
    }
    return 1;
}

public OnPlayerConnect(playerid)
{
    BanCheck(playerid);
    TempBanCheck(playerid);
    return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    new tmp[128],idx;
    new cmd[128];
    new name[MAX_PLAYER_NAME];
    new giveplayer[MAX_PLAYER_NAME];
    new giveplayerid;
    cmd = strtok(cmdtext,idx);
    if (strcmp(cmd,"/ban", true) == 0)
    {
        if (IsPlayerAdmin(playerid))
        {
            new reason[128],str[128],namez[24],name1[24];
            tmp = strtok(cmdtext,idx);
            if(!strlen(tmp))
            {
                SendClientMessage(playerid,ORANGE,"USAGE: /ban [name/ip] [reason]");
                SendClientMessage(playerid,ORANGE,"FUNCTION: Will ban the player's name/IP following by a reason. !! DO NOT ENTER THE ID !!");
                SendClientMessage(playerid,ORANGE,"HELP: Please enter a name or IP. If you're trying to execute a range ban...");
                SendClientMessage(playerid,ORANGE,"HELP: ...then make sure you got a valid player IP( /ip ) and replace some characters by * (NOT ALL)");
                return 1;
            }
            new length = strlen(cmdtext);
            while ((idx < length) && (cmdtext[idx] <= ' '))
            {
                idx++;
            }
            new offset = idx;
            while ((idx < length) && ((idx - offset) < (sizeof(reason) - 1)))
            {
                reason[idx - offset] = cmdtext[idx];
                idx++;
            }
            reason[idx - offset] = EOS;
            if(!strlen(reason))
            {
                SendClientMessage(playerid,ORANGE,"USAGE: /ban [name/ip] [reason]");
                SendClientMessage(playerid,RED,"ERROR: You must enter a reason for the ban!");
                return 1;
            }
            new File:file = fopen("Bans.txt",io_append);
            if (file)
            {
                format(str,128,"%s\r\n",tmp);
                fwrite(file,str);
                fclose(file);
            }
            new count = 0;
            new ip[15];
            for(new i=0;i<MAX_PLAYERS;i++)
            {
                if (IsPlayerConnected(i))
                {
                    GetPlayerName(i,namez,24);
                    GetPlayerName(playerid,name1,24);
                    GetPlayerIp(i,ip,sizeof(ip));
                    if (strcmp(tmp, namez,true)==0)
                    {
                        format(str,128,"|- Administrator %s banned %s. [Reason: %s] -|",name1,namez,reason);
                        SendClientMessageToAll(ADMIN_RED,str);
                        Kick(i);
                    }
                    else if(strcmp(tmp,ip,true)==0)
                    {
                        format(str,128,"|- Administrator %s banned %s. [Reason: %s] -|",name1,namez,reason);
                        SendClientMessageToAll(ADMIN_RED,str);
                        format(str,128,"|- Banned IP: [ %s ] -|",ip);
                        SendClientMessageToAdmins(ADMIN_RED,str);
                        Kick(i);
                    }
                }
                else
                {
                    GetPlayerIp(i,ip,sizeof(ip));
                    if (!IsPlayerConnected(i) && strfind(tmp,".",true) != -1 && count == 0)
                    {
                        GetPlayerName(playerid,name1,24);
                        format(str,128,"|- Banned IP: [ %s ] by %s. [Reason: %s] -|",tmp,name1,reason);
                        SendClientMessageToAdmins(ADMIN_RED,str);
                    }
                    else if (!IsPlayerConnected(i) && count == 0)
                    {
                        for(new index = 1; index <= 128; index++)
                        if (tmp[index] != '.')
                        {
                            GetPlayerName(playerid,name1,24);
                            format(str,128,"|- Banned Name: [ %s ] by %s. [Reason: %s] -|",tmp,name1,reason);
                            SendClientMessageToAdmins(ADMIN_RED,str);
                            break;
                        }
                    }
                    count++;
                }
            }
        }
        return true;
    }
    if (strcmp(cmd,"/idban", true) == 0)
    {
        if (IsPlayerAdmin(playerid))
        {
            new reason[128],targetid,target[MAX_PLAYER_NAME],str[128];
            tmp = strtok(cmdtext,idx);
            targetid = ReturnUser(tmp);
            if(!strlen(tmp))
            {
                SendClientMessage(playerid,ORANGE,"USAGE: /idban [partofname/id] [reason]");
                SendClientMessage(playerid,ORANGE,"FUNCTION: Will ban the player's IP following by a reason. ID supported and name supported only");
                return 1;
            }
            if (!IsPlayerConnected(targetid) || targetid == INVALID_PLAYER_ID) return SendClientMessage(playerid,RED,"ERROR: Invalid player or player not connected");
            new length = strlen(cmdtext);
            while ((idx < length) && (cmdtext[idx] <= ' '))
            {
                idx++;
            }
            new offset = idx;
            while ((idx < length) && ((idx - offset) < (sizeof(reason) - 1)))
            {
                reason[idx - offset] = cmdtext[idx];
                idx++;
            }
            reason[idx - offset] = EOS;
            if(!strlen(reason))
            {
                SendClientMessage(playerid,ORANGE,"USAGE: /idban [partofname/id] [reason]");
                SendClientMessage(playerid,RED,"ERROR: You must enter a reason for the ban!");
                return 1;
            }
            new ip[15];
            GetPlayerIp(targetid,ip,sizeof(ip));
            new File:file = fopen("Bans.txt",io_append);
            if (file)
            {
                format(str,128,"%s\r\n",ip);
                fwrite(file,str);
                fclose(file);
            }
            GetPlayerName(playerid,name,24);
            GetPlayerName(targetid,target,24);
            format(str,128,"|- Administrator %s banned %s. [Reason: %s] -|",name,target,reason);
            SendClientMessageToAll(ADMIN_RED,str);
            Kick(targetid);
        }
        return true;
    }
    if(strcmp(cmd, "/ip", true) == 0)
    {
        if (IsPlayerAdmin(playerid))
        {
            tmp = strtok(cmdtext,idx);
            if(!strlen(tmp))
            {
                SendClientMessage(playerid, ORANGE, "USAGE: /ip [playerid]");
                SendClientMessage(playerid, ORANGE, "FUNCTION: Will view a player's IP.");
                return 1;
            }
            giveplayerid = ReturnUser(tmp);
            new string[128];
            if(IsPlayerConnected(giveplayerid))
            {
                new ip[15];
                GetPlayerIp(giveplayerid,ip,15);
                GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
                format(string, sizeof(string), "-| %s's IP: %s |-", giveplayer,ip);
                SendClientMessage(playerid,LIGHTBLUE, string);
            }
            else
            {
                format(string, sizeof(string), "%d is not an active player.", giveplayerid);
                SendClientMessage(playerid, RED, string);
            }
        }
        else return SendClientMessage(playerid, RED, "You are not an admin.");
        return true;
    }
    if(strcmp(cmd, "/tempban", true) == 0)
    {
        if (IsPlayerAdmin(playerid))
        {
            tmp = strtok(cmdtext,idx);
            if(!strlen(tmp))
            {
                SendClientMessage(playerid, ORANGE, "USAGE: /tempban [playerid] [day] [reason]");
                SendClientMessage(playerid, ORANGE, "FUNCTION: Temporarily bans a player. You must enter the month, day and hour numbers. You set them, not add.");
                return 1;
            }
            giveplayerid = ReturnUser(tmp);
            new string[128];
            if(IsPlayerConnected(giveplayerid))
            {
                tmp = strtok(cmdtext, idx);
                if (!strlen(tmp)) return SendClientMessage(playerid, ORANGE, "USAGE: /tempban [playerid] [day] [reason]");
                new days = strval(tmp);
                new reason[128];
                reason = bigstr(cmdtext, idx);
                if (!strlen(reason)) return SendClientMessage(playerid, ORANGE, "USAGE: /tempban [playerid] [day] [REASON]");
                new ip[15];
                GetPlayerIp(giveplayerid,ip,15);
                GetPlayerName(playerid, name, sizeof name);
                GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
                new File:tempban = fopen("TempBans.ban", io_append);
                if (tempban)
                {
                    new year,month,day;
                    getdate(year, month, day);
                    day += days;
                    if (IsMonth31(month))
                    {
                        if (day > 31)
                        {
                            month += 1;
                            if (month > 12)
                            {
                                year += 1;
                                while(day > 31) day -= 31;
                            }
                            else while(day > 31) day -= 31;
                        }
                    }
                    else if (!IsMonth31(month))
                    {
                        if (day > 30)
                        {
                            month += 1;
                            if (month > 12)
                            {
                                year += 1;
                                while(day > 30) day -= 30;
                            }
                            else while(day > 30) day -= 30;
                        }
                    }
                    else if (!IsMonth31(month) && IsMonth29(year) && month == 2)
                    {
                        if (day > 29)
                        {
                            month += 1;
                            if (month > 12)
                            {
                                year += 1;
                                while(day > 29) day -= 29;
                            }
                            else while(day > 29) day -= 29;
                        }
                    }
                    else if (!IsMonth31(month) && !IsMonth29(year) && month == 2)
                    {
                        if (day > 28)
                        {
                            month += 1;
                            if (month > 12)
                            {
                                year += 1;
                                while(day > 28) day -= 28;
                            }
                            else while(day > 28) day -= 28;
                        }
                    }
                    format(string, sizeof string, "%d|%d|%d|%s\n", day, month, year, ip);
                    fwrite(tempban, string);
                    fclose(tempban);
                }
                format(string,128,"|- Administrator %s temporarily banned %s for %d day(s). [Reason: %s] -|",name,giveplayer,days,reason);
                SendClientMessageToAll(ADMIN_RED,string);
                Kick(giveplayerid);
            }
            else
            {
                format(string, sizeof(string), "%d is not an active player.", giveplayerid);
                SendClientMessage(playerid, RED, string);
            }
        }
        else return SendClientMessage(playerid, RED, "You are not an admin.");
        return true;
    }
    return false;
}

stock BanCheck(playerid)
{
    new player[MAX_PLAYER_NAME];
    new ip[15];
    new ban[20];
    new ban2[20];
    new filestr[128];
    GetPlayerName(playerid, player, sizeof player);
    GetPlayerIp(playerid, ip, sizeof ip);
    format(ban,sizeof(ban),"%s",ip);
    strdel(ban,strlen(ban)-2,strlen(ban));
    format(ban2,128,"%s**",ban);
    new File:file = fopen("Bans.txt",io_read);
    if (file)
    {
        while(fread(file,filestr,sizeof(filestr)))
        {
            if (strfind(filestr, player, true) != -1 || strfind(filestr, ip, true) != -1 || strfind(filestr, ban2, true) != -1)
            {
                SendClientMessage(playerid, ADMIN_RED, "|- You are banned from this server -|");
                return Kick(playerid);
            }
        }
    }
    return true;
}

stock TempBanCheck(playerid)
{
    new ip[15];
    new str[128];
    new load[4][32];
    new ban_day, ban_month, ban_year, ban_ip[15];
    GetPlayerIp(playerid, ip, sizeof ip);
    new year, month, day;
    getdate(year, month, day);
    new File:file = fopen("TempBans.ban",io_read);
    if (file)
    {
        while (fread(file, str, sizeof str))
        {
            split(str, load, '|');

            ban_day = strval(load[0]);
            ban_month = strval(load[1]);
            ban_year = strval(load[2]);
            strmid(ban_ip, load[3], 0, strlen(load[3])-1, 15);
            if (!(year >= ban_year && month >= ban_month && day >= ban_day && !strcmp(ban_ip, ip, true)))
            {
                format(str, sizeof str, "|- You are temporarily banned from this server until: %d/%d/%d -|", ban_day, ban_month, ban_year);
                SendClientMessage(playerid, ADMIN_RED, str);
                return Kick(playerid);
            }
        }
    }
    return true;
}

stock split(const strsrc[], strdest[][], delimiter)
{
    new i, li;
    new aNum;
    new len;

    while(i <= strlen(strsrc)){
        if(strsrc[i]==delimiter || i==strlen(strsrc)){
            len = strmid(strdest[aNum], strsrc, li, i, 128);
            strdest[aNum][len] = 0;
            li = i+1;
            aNum++;
        }
        i++;
    }
    return 1;
}

stock IsMonth31(month)
{
    switch (month)
    {
        case 1: return 1;
        case 3: return 1;
        case 5: return 1;
        case 7: return 1;
        case 8: return 1;
        case 10: return 1;
        case 12: return 1;
        default: return 0;
    }
    return 0;
}

stock IsMonth29(year)
{
    new y = 2000;
    for(new i = 4; i < 3000; i += 4) if ((y+i) == year) return 1;
    return 0;
}
Testa ai.


Re: [Ajuda]Banir Nick - roginho_97 - 25.04.2011

Bom, isto seria muito facil .


Entre muitos modos, prefiri este:

Exemplo:


pawn Код:
#include <dini>


// No comando /ban

// Tire a funзгo ban(playerid); e acrescente;

format(string, sizeof(string), "%si", [b][EDITAR] Variavel nome do player[/b]);
dini_IntSet("Banidos.ini", string, "1");

// ai blz, agora no OnPlayerConnect

new nomeplayer[16];
GetPlayerName(playerid, nomeplayer, sizeof(nomeplayer));
new str[50];
format(str, sizeof(str), "%s", nomeplayer);
if(dini_Int("Banidos.ini", str) == 1)
{
    SendClientMessage(playerid, [b][EDITAR]Cor[/b], "|ERRO|: Vocк estб banido de nosso servidor!");
    return 1;
}