[AJUDA] Lista de nicks e IPS
#1

ae galera, antes de tudo eu uso o GM elite / GF

ai queria saber como fasso tipo assim 2 cmds:

/ADDNICK
/ADDIP
ai o /addnick [NICK] ai assim ex: /addnick Easy_Jump.
ai ninguem mais pode logar com aquele nick ^^ em cima

e o /addip adiciona um IP ex: /addip 192.168.0.101

ai o nao da mais pra loga que tiver esse IP ^^ acima

vlw
Reply
#2

malz pelo double mais auguem ajuda
Reply
#3

Strfind..dae tipo..no OnPlayerConnect verifica se o player esta com aquele nome e da Kick Nele...Deve Ser isso neh?
Reply
#4

Terб de fazer em salvamento o comando pra adicionar o nick e quando ele logar em strfind verificar se o nome dele tб no arquivo, se tiver dб kick, o ip a mesma coisa getIp etc.
Reply
#5

No momento estou sem tempo, se nгo fazia um pra ti quando desocupar eu venho aqui.
Reply
#6

vlw ai mais quem ainda poder ajudar...
Reply
#7

Fiz a estrutura do Codigo agora й so Bota pa Salvar...

OnGameModeinit

pawn Код:
if(!fexist("nomedoarquivo.ini")) dini_Create("nomedoarquivo.ini");
o comando

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
new tmp[128],idx,ip[15],string[128],giveid;
if(strcmp(cmdtext, "/iBan", true) == 0)
{
for(new i=0;i<MAX_PLAYERS;i++)
{
if (!IsPlayerConnected(giveid)) return SendClientMessage(playerid,0xFFFFFFF,"PLAYER OFF...");
tmp = strtok(cmdtext,idx);
GetPlayerIp(giveid, ip, sizeof(ip));
if(!strlen(tmp)) return SendClientMessage(playerid,0xFFFFFFF,"/iBan [BOTA A PORRA DO IP]...");
format(string,sizeof(string),"o ip '%d' foi banido.",ip);
SendClientMessageToAll(0xFFFFFFF,string);
//dini_IntSet nao sei mais o q lб
Ban(giveid);
}
return 1;
}
dai tem q colocar Algo em OnPlayerDisconnected.

Nao intendo muito de Dini nгo.. tentei ajudar
Reply
#8

ip й um string zbt nгo uma int.
Reply
#9

auguem ajuda
Reply
#10

Certo.


Primeiramente, iremos criar um arquivo para salvar o que vocк quer. Chamaremos ele de Proibidos.ini.


Para facilitar sua vida, iremos criar uma stock para salvar as coisas.

Em qualquer lugar do seu gamemode (fora de qualquer funзгo), adicione isto:
pawn Код:
stock AddNick(const playername[])
{
    if(!fexist("proibidos.ini")) fopen("proibidos.ini");
    new stringex[36];
    format(stringex, 36, "NickBan%s", playername);
    dini_Set("proibidos.ini",stringex,playername);
    return 1;
}
Agora, para a explicaзгo.

stock AddNick(const playername[]) || Isto й o nome da funзгo, o playername que existe dentro й o que vocк deverб colocar para salvar. Exemplo: Se vocк quer proibir o player Gamal de logar, vocк coloca AddNick(Gamal) e ele serб proibido. Mais a frente vocк irб entender.


if(!fexist("proibidos.ini")) fopen("proibidos.ini"); || Checagem de arquivo. Se ele nгo existe, ele serб criado.
new stringex[36]; || Uma string, para ser usada logo abaixo.
format(stringex, 36, "NickBan%s", playername); || Isso determinarб o tipo de proibiзгo (nick) e a quem foi proibido.
dini_Set("proibidos.ini",stringex,playername); || Isto salvarб a proibiзгo.


Okay, temos uma para proibir nicks. Agora, vamos para a funзгo de proibir IP's. (Nгo difere muita coisa.)

pawn Код:
stock AddIP(const playerip[])
{
    if(!fexist("proibidos.ini")) fopen("proibidos.ini");
    new stringex[36];
    format(stringex, 36, "IPBan%s", playerip);
    dini_Set("proibidos.ini",stringex,playerip);
    return 1;
}
Como vocк vк, eu somente mudei de name/nick para IP, pois agora vocк irб proibir os IP's. Funciona da exata mesma forma.

Agora, como vocк lerб estas informaзхes?

Pois bem, iremos para a funзгo.

Para nгo ficar muito grande os cуdigos, irei criar um simples stock para checar nomes e ip's. Adicione isto em qualquer lugar do seu GM (fora de qualquer funзгo). De preferкncia, debaixo das stocks acima.
pawn Код:
stock CheckIP(playerid)
{
    new stringex[36], ipstring[17], filestring[64];
    GetPlayerIP(playerid, ipstring, 17);
    format(stringex, 36, "IPBan%s", ipstring);
    strmid(filestring,dini_Get("proibidos.ini",stringex), 0, 255);
    if(!strcmp(ipstring, filestring, true)) return BanEx(playerid, "IP proibido neste servidor.");
    return 1;
}

stock CheckName(playerid)
{
    new stringex[36], namestring[24], filestring[64];
    GetPlayerName(playerid, namestring, 24);
    format(stringex, 36, "NickBan%s", namestring);
    strmid(filestring,dini_Get("proibidos.ini",stringex), 0, 255);
    if(!strcmp(namestring, filestring, true)) return BanEx(playerid, "Nome proibido neste servidor.");
    return 1;
}
O que foi feito aqui й:

CheckName(playerid) || Aqui ele checa pelo nome. Mais a frente vocк entenderб o porquк do playerid.
new stringex[36], namestring[24], filestring[64]; || strings para serem usadas a frente.
GetPlayerName(playerid, namestring, 24); || Aqui ele recolhe o nome (no caso do IP, ele recolhe o Ip com GetPlayerIP)
format(stringex, 36, "NickBan%s", namestring); || Aqui й determinado qual valor ele irб ler.
strmid(filestring,dini_Get("proibidos.ini",stringe x), 0, 255); || Aqui, ele lк e coloca numa string para checagem o valor que foi encontrado em NickBan no arquivo, ou seja, o valor que vocк setou com AddNick/AddIP.
if(!strcmp(namestring, filestring, true)) return BanEx(playerid, "Nome proibido neste servidor."); || Aqui ele compararб as strings. Se seu IP/Nick for o do valor descrito, vocк serб banido com a razгo: Nome Proibido no servidor. Detalhe: Nгo serб enviada nenhuma mensagem. Apenas o Server Closed the Connection.


Okay, temos agora quase tudo pronto, sу falta os comandos e aonde adicionar estas stocks. Vamos comeзar pela leitura.


Ache no seu GM a funзгo OnPlayerConnect, e adicione isto:
pawn Код:
CheckIP(playerid);
    CheckName(playerid);
Simples assim.

Agora, para os comandos.

Iremos precisar de duas funзхes que vocк poderб nгo ter. Caso nгo tiver elas, adicione-as.
pawn Код:
ReturnUser(text[], playerid = INVALID_PLAYER_ID)
{
    new pos = 0;
    while (text[pos] < 0x21) // Strip out leading spaces
    {
        if (text[pos] == 0) return INVALID_PLAYER_ID; // No passed text
        pos++;
    }
    new userid = INVALID_PLAYER_ID;
    if (IsNumeric(text[pos])) // Check whole passed string
    {
        // If they have a numeric name you have a problem (although names are checked on id failure)
        userid = strval(text[pos]);
        if (userid >=0 && userid < MAX_PLAYERS)
        {
            if(!IsPlayerConnected(userid))
            {
                /*if (playerid != INVALID_PLAYER_ID)
                {
                    SendClientMessage(playerid, 0xFF0000AA, "User not connected");
                }*/

                userid = INVALID_PLAYER_ID;
            }
            else
            {
                return userid; // A player was found
            }
        }
        /*else
        {
            if (playerid != INVALID_PLAYER_ID)
            {
                SendClientMessage(playerid, 0xFF0000AA, "Invalid user ID");
            }
            userid = INVALID_PLAYER_ID;
        }
        return userid;*/

        // Removed for fallthrough code
    }
    // They entered [part of] a name or the id search failed (check names just incase)
    new len = strlen(text[pos]);
    new count = 0;
    new name[MAX_PLAYER_NAME];
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
        if (IsPlayerConnected(i))
        {
            GetPlayerName(i, name, sizeof (name));
            if (strcmp(name, text[pos], true, len) == 0) // Check segment of name
            {
                if (len == strlen(name)) // Exact match
                {
                    return i; // Return the exact player on an exact match
                    // Otherwise if there are two players:
                    // Me and MeYou any time you entered Me it would find both
                    // And never be able to return just Me's id
                }
                else // Partial match
                {
                    count++;
                    userid = i;
                }
            }
        }
    }
    if (count != 1)
    {
        if (playerid != INVALID_PLAYER_ID)
        {
            if (count)
            {
                SendClientMessage(playerid, 0xFF0000AA, "Multiple users found, please narrow earch");
            }
            else
            {
                SendClientMessage(playerid, 0xFF0000AA, "No matching user found");
            }
        }
        userid = INVALID_PLAYER_ID;
    }
    return userid; // INVALID_USER_ID for bad return
}

IsIP(const string[])
{
    for (new i = 0, j = strlen(string); i < j; i++)
    {
        if (string[i] != '.') return 0;
    }
    return 1;
}
Em OnPlayerCommandText, adicione isto:
(Irei assumir que vocк possui um sistema de strrest.)

pawn Код:
if(!strcmp(cmd, "/addip", true))
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xAFAFAFFF, "Vocк nгo estб autorizado a usar este comando!");
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid, 0xAFAFAFFF, "Comando: /addip [nome do player/id do player/ip do player]");
    new player;
    new ip[24];
    if(IsNumeric(tmp))
    {
        player = ReturnUser(tmp);
        if(!IsPlayerConnected(player)) return SendClientMessage(playerid, 0xAFAFAFFF, "Este jogador nгo se encontra!");
        GetPlayerIP(player, ip, 24);
        AddIP(ip);
    }
    else
    {
        strmid(ip, tmp, 0, 255);
        AddIP(ip);
    }
    new misc[64];
    format(misc, 64, "O ip %s foi adicionado com sucesso no banco de dados!", ip);
    return SendClientMessage(playerid, 0xAFAFAFFF, misc);
}

if(!strcmp(cmd, "/addnick", true))
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xAFAFAFFF, "Vocк nгo estб autorizado a usar este comando!");
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid, 0xAFAFAFFF, "Comando: /addnick [nome do player/id do player]");
    new player;
    new name[24];
    player = ReturnUser(tmp);
    if(!IsPlayerConnected(player)) return SendClientMessage(playerid, 0xAFAFAFFF, "Este jogador nгo se encontra!");
    GetPlayerName(player, nick, 24);
    AddNick(name);
    new misc[64];
    format(misc, 64, "O nome %s foi adicionado com sucesso no banco de dados!", name);
    return SendClientMessage(playerid, 0xAFAFAFFF, misc);
}
Explicaзгo:

if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xAFAFAFFF, "Vocк nгo estб autorizado a usar este comando!"); || Isto й a checagem de admin. Troque ela para a sua checagem de administraзгo.
tmp = strtok(cmdtext, idx); || String Token. Para formataзгo de slots no seu comando.
if(!strlen(tmp)) return SendClientMessage(playerid, 0xAFAFAFFF, "Comando: /addip [nome do player/id do player/ip do player]"); || Se nada for digitado no comando.
new player, ip[24]; || string e um int pra serem usados adiante.
if(IsIP(tmp)) || No caso do IP, isto й necessбrio, pois se vocк digitar um ID, ele irб entrar como numйrico. Se vocк digitar um IP, ele irб entrar como uma string.
{
strmid(ip, tmp, 0, 255); || Formata o que vocк digitou para uma string de IP.
AddIP(ip); || Nossa funзгo de salvar IP's proibidos.
}
else || Isto acontecerб se vocк digitar uma ID de player ao invйs de um IP exato.
{
player = ReturnUser(tmp); || Recolhe a ID do player.
if(!IsPlayerConnected(player)) return SendClientMessage(playerid, 0xAFAFAFFF, "Este jogador nгo se encontra!"); || Se o player nгo estiver on, isto acontecerб.
GetPlayerIP(player, ip, 24); || Recolhe o IP do player.
AddIP(ip); || Nossa funзгo de salvar os IP's proibidos.
}
new misc[64]; || String para mandar mensagem.
format(misc, 64, "O ip %s foi adicionado com sucesso no banco de dados!", ip); || Mensagem para ser mandada se tudo der certo.
return SendClientMessage(playerid, 0xAFAFAFFF, misc); || Mandando a mensagem.

A explicaзгo muda para o /addname pelo fato de trabalharmos com nome, que й algo que nгo precisa de uma checagem de player/ip como a do /addip.

E entгo, vocк estб pronto para usar o comando.


Espero ter ajudado. Qualquer dъvidas, poste aqui.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)