[PEDIDO]Nomes Proibidos
#1

Eu Recentimente fiz um cуdigo para quem entrar com um nome proibido(eu escolho) a pessoa vai kick! mas ai quando eu vejo que tem uma pessoa com um nome que eu quero proibir ele eu tenho que ir la no fs e mecher e tal... eu queria que o cуdigo lкsse uma Dini que por linha iria estar os nomes proibidos exemplo:
Код:
Peludo
[OPL]Ticudo
e que tivesse um comando que fosse assim /bnome parametro. que ai quando eu usasse ele ia add o nome que eu coloca ali,na dini! e que banisse a pessoa que estiver online com esse nome na hora que eu der o comando!

Cуdigo:

pawn Код:
public OnPlayerConnect(playerid)
{
    new ssstring[256];
    new pName[24];
    //--------------------------------------------------------------------------------
    new namecon[MAX_PLAYER_NAME];
    GetPlayerName(playerid,namecon,MAX_PLAYER_NAME); // Abre o codico! Inicio!
    if(!strcmp("aux", namecon, true)  || !strcmp("con", namecon, true) || !strcmp("con1", namecon, true)|| !strcmp("Itachi", namecon, true)) //Nomes Probidos.
    { // fexa o conchete
    //SetPlayerName(playerid, "Nick Proibido");
    SendClientMessage(playerid, COLOR_BLUE, "[Mata-Mata 2012 Informa]: Vocк foi Banido por usar nick name proibido.");
    //SendClientMessageToAll(COLOR_BLUE, "[Mata-Mata 2012 Informa]: %s(%d) Foi Banido por usar nick name proibido.",playerid);

    GetPlayerName(playerid, pName, 24);
    format(ssstring, sizeof(ssstring), "[Mata-Mata 2012 Informa]: %s(%d) Foi Banido por usar nick name proibido.", pName, playerid);
    SendClientMessageToAll(info, ssstring);
    Ban(playerid); return 1;
    }
    //--------------------------------------------------------------------------------

    return 0;
}
Reply
#2

Um sistema bбsico, parte por E4sTsId3. Nгo й o mais rбpido ou prбtico, entretanto, deve resolver seu problema:

Topo do seu script:
Код:
new 
    Proibidos[50][50],
    Total = 0;
OnGameModeInit:
Код:
CarregarNomes(); 
Em "OnPlayerConnect":
Код:
new pNome[MAX_PLAYER_NAME];	GetPlayerName(playerid,pNome,sizeof(pNome));
	
for(new s = 0; s < Total; s++)
{
	if(!strcmp(Proibidos[s],pNome,true))
	return SendClientMessage(playerid, Cor, 
	"Seu nome estб proibido neste servidor."),
	Kick(playerid);
	//Ou Ban(playerid);
}
Funзгo:
Код:
	
stock CarregarNomes()
{
    new 
       File:Arq,
       string[50];

 	Total = 0;
	if( ( Arq = fopen( "Nomes.cfg",io_read ) ) )
	{
		while(fread( Arq,string ))
		{ 
			for(new i = 0, j = strlen( string ); i < j; i++) 
			if(string[i] == '\n'|| string[i] == '\r') string[i] = '\0';
			//-------------------
			Proibidos[Total] = string;
			Total++;
		}
		fclose(Arq);
	}
}
Comando (zcmd):
Код:
CMD:bnome(playerid,params[])
{
	if(!IsPlayerAdmin(playerid))
	return SendClientMessage(playerid, Cor, "Vocк nгo й Administrador");
	
	if(!strlen(params)) 
	return SendClientMessage(playerid, Cor, "Use: /bnome [Nome]");
	
	new 
            File:Arq, 
            string[128];
		
	Arq = fopen("Nomes.cfg",io_append); format(string,sizeof(string),"%s\r\n",params[0]);
	
	fwrite(Arq,string);
	return fclose(Arq);
}
Lembre-se de criar o arquivo "Nomes.cfg" na pasta "Scriptfiles", coloque um nome em cada linha, sendo um limite de 50 nomes (Edite o cуdigo).
Reply
#3

eu add tudo certinho mas deu problema no comando! olha os erros:
Код:
admin6levelm.pwn(1001) : error 017: undefined symbol "bnome"
admin6levelm.pwn(1006) : error 017: undefined symbol "params"
admin6levelm.pwn(1013) : error 017: undefined symbol "params"
admin6levelm.pwn(1013) : warning 215: expression has no effect
admin6levelm.pwn(1013) : error 001: expected token: ";", but found "]"
admin6levelm.pwn(1013) : error 029: invalid expression, assumed zero
admin6levelm.pwn(1013) : fatal error 107: too many error messages on one line
eu ja arrumeis alguns e e arrumei o comando mas continua os dali de cima que nгo sei arrumar oh como ta o comando:

pawn Код:
CMD:bnome(playerid,params[])
    {
    if(!IsPlayerAdmin(playerid))
    return SendClientMessage(playerid, COLOR_RED, "Vocк nгo й Administrador");

    if(!strlen(params))
    return SendClientMessage(playerid, COLOR_RED, "Use: /bnome [Nome]");

    new
            File:Arq,
            stringk[128];

    Arq = fopen("Nomes.cfg",io_append); format(stringk,sizeof(stringk),"%s\r\n",params[1]);

    fwrite(Arq,stringk);
    return fclose(Arq);
    }
agora vou dar um exemplo diferente de comando que eu ja tenho:

pawn Код:
if(strcmp(cmd,"/banip",true)==0) {
        new pName[24];
        GetPlayerName(playerid, sendername, sizeof(sendername));
        PlayerInfo[playerid][pAdmin] = dini_Int(udb_encode(sendername), "level");
        if(logged[playerid] == 1)
        {
            if(PlayerInfo[playerid][pAdmin] >= 6)
            {
        tmp = strtok(cmdtext,idx);
        if(!strlen(tmp)) {
            SendClientMessage(playerid,0x007FFFAA,"USE: /banip [IP]");
            return 1;
        }
        format(string,sizeof(string),"banip %s",tmp);
        SendRconCommand(string);
        SendRconCommand("reloadbans");
        GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
        GetPlayerName(playerid, pName, sizeof(pName));
        format(string, 256, "[ADMIN] - IP %s foi banido com sucesso!",tmp);
        SendClientMessage(playerid,0x007FFFAA,string);
        return 1;
    }
    }
    }


pawn Код:
if(strcmp(cmd,"/ban",true) == 0)
    {
        tmp = strtok(cmdtext, idx);
        GetPlayerName(playerid, sendername, sizeof(sendername));
        PlayerInfo[playerid][pAdmin] = dini_Int(udb_encode(sendername), "level");
        if(!strlen(tmp))
        {
            SendClientMessage(playerid, COLOR_DBLUE, "Uso correto: /ban [id do player] [motivo]");
            return 1;
        }
        giveplayerid = strval(tmp);
        if(logged[playerid] == 1)
        {
            if(PlayerInfo[playerid][pAdmin] >= 2)
            {
                if(IsPlayerConnected(giveplayerid))
                {
                    new length = strlen(cmdtext);
                    while ((idx < length) && (cmdtext[idx] <= ' ')) {
                    idx++;
                    }
                    new offset = idx;
                    new result[64];
                    while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))) {
                    result[idx - offset] = cmdtext[idx];
                    idx++;
                    }
                    result[idx - offset] = EOS;
                    if(!strlen(result))
                    {
                        SendClientMessage(playerid, erro, "Vocк sу pode banir com uma razгo apropriada!");
                    }
                    else
                    {
                        GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
                        format(string, sizeof(string), "[ADMIN]: %s fez merda e foi banido pelo %s pelo motivo: %s", giveplayer, sendername, result);
                        SendClientMessageToAll(info, string);
                        BanEx(giveplayerid, result);
                        new PlayerName[30];
                        GetPlayerName(playerid, PlayerName, 30);
                        printf("[Command] %s usou /ban para banir %s pelo motivo: %s", PlayerName, giveplayer, result);
                    }
                }
                else
                {
                    format(string, sizeof(string), "%d nгo й um player ativo!", giveplayerid);
                    SendClientMessage(playerid, erro, string);
                }
            }
            else
            {
                SendClientMessage(playerid, erro, "Vocк nгo tem permissгo para usar este comando!");
                return 1;
            }
        }
        else
        {
            SendClientMessage(playerid, erro, "Vocк tem que estar logado para usar este comando!");
        }
        return 1;
    }
Reply
#4

O comando estб no formato "ZCMD", do qual й muito mais prбtico e rбpido. Tal й o motivo pelos erros. Recomendo que vocк baixe o include e adicione-o em seu script. Lembre-se que o comando deve ficar fora da callback OnPlayerCommandText

Edit: Acabei de testar o script, e funcionou perfeitamente, sem erros.
Reply
#5

https://sampforum.blast.hk/showthread.php?tid=130516
Reply
#6

Quote:
Originally Posted by Dark.Angel
Посмотреть сообщение
Leia a postagem inicial, e veja o que se pede antes de responder. Ele quer um sistema utilizando a leitura dos nomes atravйs de um arquivo, e nгo prй-definidos dentro do cуdigo.
Reply
#7

luxurioN muito obrigado pela sua ajuda mas eu estou tentando passar o comando para o outro jeito eu nao consegui me entender com o zcms eu queria passar para o sistema igual a este:
pawn Код:
if(strcmp(cmd,"/ban",true) == 0)
    {
        tmp = strtok(cmdtext, idx);
        GetPlayerName(playerid, sendername, sizeof(sendername));
        PlayerInfo[playerid][pAdmin] = dini_Int(udb_encode(sendername), "level");
        if(!strlen(tmp))
        {
            SendClientMessage(playerid, COLOR_DBLUE, "Uso correto: /ban [id do player] [motivo]");
            return 1;
        }
        giveplayerid = strval(tmp);
        if(logged[playerid] == 1)
        {
            if(PlayerInfo[playerid][pAdmin] >= 2)
            {
                if(IsPlayerConnected(giveplayerid))
                {
                    new length = strlen(cmdtext);
                    while ((idx < length) && (cmdtext[idx] <= ' ')) {
                    idx++;
                    }
                    new offset = idx;
                    new result[64];
                    while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))) {
                    result[idx - offset] = cmdtext[idx];
                    idx++;
                    }
                    result[idx - offset] = EOS;
                    if(!strlen(result))
                    {
                        SendClientMessage(playerid, erro, "Vocк sу pode banir com uma razгo apropriada!");
                    }
                    else
                    {
                        GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
                        format(string, sizeof(string), "[ADMIN]: %s fez merda e foi banido pelo %s pelo motivo: %s", giveplayer, sendername, result);
                        SendClientMessageToAll(info, string);
                        BanEx(giveplayerid, result);
                        new PlayerName[30];
                        GetPlayerName(playerid, PlayerName, 30);
                        printf("[Command] %s usou /ban para banir %s pelo motivo: %s", PlayerName, giveplayer, result);
                    }
                }
                else
                {
                    format(string, sizeof(string), "%d nгo й um player ativo!", giveplayerid);
                    SendClientMessage(playerid, erro, string);
                }
            }
            else
            {
                SendClientMessage(playerid, erro, "Vocк nгo tem permissгo para usar este comando!");
                return 1;
            }
        }
        else
        {
            SendClientMessage(playerid, erro, "Vocк tem que estar logado para usar este comando!");
        }
        return 1;
    }
por favor passe para este sistema para mim ai eu vou colocar dentro da public OnPlayerCommandText!
Reply
#8

Quote:
Originally Posted by andersongr98
Посмотреть сообщение
luxurioN muito obrigado pela sua ajuda mas eu estou tentando passar o comando para o outro jeito eu nao consegui me entender com o zcms ....
...por favor passe para este sistema para mim ai eu vou colocar dentro da public OnPlayerCommandText!...
Acredito que resolverб o seu problema:
Код:
if(strcmp(cmd, "/bnome", true) == 0) 
{
	if ( !IsPlayerAdmin( playerid ) )
	    return SendClientMessage(playerid, Cor, "Comando apenas para Administradores!");
			
	new 
	    str[128],
	    string[128],
	    File:Arq;
	    str = strtok(cmdtext, idx);
			
	if(!strlen(str))
	    return SendClientMessage(playerid, Cor, "Use /bnome [Nome]");
			
	format(string, sizeof(string), "Nome '%s' Adcionado a lista de nomes proibidos!",str );
	SendClientMessage(playerid, Cor, string);
			
	Arq = fopen( "Nomes.cfg" ,io_append ); 
	format( string,sizeof(string),"%s\r\n",str);
	fwrite(Arq,string); 
	return fclose(Arq);
}
Ps: Nгo testado.
Reply
#9

arrumei o comando onde dizia Cor eu coloquei COLOR_RED e onde dizia string eu coloquei stringl!

mas agora ta dando este erro:

Код:
admin6levelm.pwn(1086) : error 047: array sizes do not match, or destination array is too small
aqui estб o codigo:

pawn Код:
if(strcmp(cmd, "/bnome", true) == 0)
    {
    if ( !IsPlayerAdmin( playerid ) )
    return SendClientMessage(playerid, COLOR_RED, "Comando apenas para Administradores!");

    new
        str[128],
        stringl[128],
        File:Arq;
    str = strtok(cmdtext, idx); //linha 1086 - Linha do Erro

    if(!strlen(str))
    return SendClientMessage(playerid, COLOR_RED, "Use /bnome [Nome]");

    format(stringl, sizeof(stringl), "Nome '%s' Adcionado a lista de nomes proibidos!",str );
    SendClientMessage(playerid, COLOR_RED, stringl);

    Arq = fopen( "Nomes.cfg" ,io_append );
    format( stringl,sizeof(stringl),"%s\r\n",str);
    fwrite(Arq,stringl);
    return fclose(Arq);
    }
Reply
#10

Quote:
Originally Posted by andersongr98
Посмотреть сообщение
arrumei o comando onde dizia Cor eu coloquei COLOR_RED e onde dizia string eu coloquei stringl!

mas agora ta dando este erro:

Код:
admin6levelm.pwn(1086) : error 047: array sizes do not match, or destination array is too small
aqui estб o codigo:

pawn Код:
if(strcmp(cmd, "/bnome", true) == 0)
    {
    if ( !IsPlayerAdmin( playerid ) )
    return SendClientMessage(playerid, COLOR_RED, "Comando apenas para Administradores!");

    new
        str[128],
        stringl[128],
        File:Arq;
    str = strtok(cmdtext, idx); //linha 1086 - Linha do Erro

    if(!strlen(str))
    return SendClientMessage(playerid, COLOR_RED, "Use /bnome [Nome]");

    format(stringl, sizeof(stringl), "Nome '%s' Adcionado a lista de nomes proibidos!",str );
    SendClientMessage(playerid, COLOR_RED, stringl);

    Arq = fopen( "Nomes.cfg" ,io_append );
    format( stringl,sizeof(stringl),"%s\r\n",str);
    fwrite(Arq,stringl);
    return fclose(Arq);
    }
Provavelmente o erro estб em algo que vocк fez errado. Compilei aqui normalmente, sem problemas. Tente mudar o nъmero de cйlulas de "str" para 256 (Nгo recomendбvel, entretanto, й uma possнvel soluзгo neste caso).

Recomendo que vocк use ZCMD ou y_commands. Melhoram, e muito, a performance e a qualidade do seu script, alйm de um fбcil uso. E nгo й complicado fazer a mudanзa de "strcmp(padrгo)" para outro.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)