[Ajuda] strcmp nгo funcionando (Sistema simples de login)
#1

Solucionado.
Reply
#2

jб tive esse problema coloque assim:

PHP код:
CMD:login(playeridparams[])
{
    new 
file[64], password[MAX_PLAYERS], inputtext[256];
    
format(filesizeof(file), "Players/%s.ini"PlayerName[playerid]);
    
password[playerid] = dini_Get(file"Senha");
    if(
sscanf(params"i"inputtext)){
        
SendClientMessage(playeridred"Coloque sua senha somente com nъmeros!");}else{
    if(
strcmp(password[playerid], inputtextfalse) == 0)
    {
        
SendClientMessage(playeridgreen"SERVER: Vocк logou com sucesso!");
        
SpawnPlayer(playerid);
    }else{
SendClientMessage(playerid, -1"{FF0000}[SERVER]: Senha errada!");}}
    return 
1

@EDIT

cara nгo entendi sua lуgica, mas assim creio que funcione, copie e cole o codigo acima e tente
Reply
#3

@Edit
Sugiro que refaзa os comandos tem muita coisa errada cade as condiзхes se ele nгo digitar nada apуs /login?
@edit2
Tente:
Код:
CMD:registrar(playerid, params[])
{
	new file[64], senha; 
	format(file, sizeof(file), "Players/%s.ini", pegarnome(playerid)); 
	if(sscanf(params, "i", senha)) return SendClientMessage(playerid, red, "SERVER: Use /registrar [SENHA/NЪMEROS]"); 	
	if(dini_Exists(file)) return SendClientMessage(playerid, red, "SERVER: Esta conta jб existe! Use /login [SENHA] para jogar!");
	dini_Create(file); 
	dini_IntSet(file, "Senha", senha); 	
	SendClientMessage(playerid, green, "SERVER: Registrado com sucesso! Digite /login [SENHA] para logar-se no servidor!"); 	
	return 1;
}

CMD:login(playerid, params[])
{
	new file[60],password[256], inputtext[256], password2[256];
	format(file, sizeof(file), "Players/%s.ini", pegarnome(playerid));
	if( sscanf(params, "i", inputtext)) return SendClientMessage(playerid, -1, "uso correto: /login <senha>");
    format(password, sizeof(password), "%i", dini_Get(file, "senha"));
	if (!strcmp(password, inputtext, false))
	{
		SpawnPlayer(playerid);
		SendClientMessage(playerid, -1, "logado com sucesso!");
	}
	else return SendClientMessage(playerid,-1, "senha incorreta!");

}

stock pegarnome(playerid)
{
	new name[24];
	GetPlayerName(playerid, name, 24);
	return name;
}
Reply
#4

PHP код:
if(!strcmp("Texto","Texto"))
{
    print(
"Igual");

Traduzindo o cуdigo acima:

Se o primeiro texto for igual ao segundo, vai exibir "Igual" no console.
Reply
#5

Recomendo utilizar um hash nas senhas, tente esse cуdigo abaixo (poderб inserir letras e caracteres na senha):
Код:
CMD:registrar(playerid, params[])
{
	new file[64], name[MAX_PLAYER_NAME];
	GetPlayerName(playerid, name, sizeof(name));
	format(file, sizeof(file), "Players/%s.ini", name);
	
	if(dini_Exists(file)) return SendClientMessage(playerid, red, "SERVER: Esta conta jб existe! Use /login [SENHA] para jogar!");

	new senha[30];
	if(sscanf(params, "s[30]", senha)) return SendClientMessage(playerid, red, "SERVER: Use /registrar [SENHA]");
	if(strlen(senha) > 30 || strlen(senha) < 3) return SendClientMessage(playerid, red, "SERVER: Senha muito grande/pequena!");
	
    dini_Create(file);
    dini_IntSet(file, "Senha", udb_hash(senha));
	SendClientMessage(playerid, green, "SERVER: Registrado com sucesso! Digite /login [SENHA] para logar-se no servidor!");
	return 1;
}

CMD:login(playerid, params[])
{
 	new password[30], password2[30];
	if(sscanf(params, "s[30]s[30]", password, password2)) return SendClientMessage(playerid, 0xFF0000FF, "Uso: /login [Senha] [Confirmar senha]");

	new file[64], name[MAX_PLAYER_NAME];
	GetPlayerName(playerid, name, sizeof(name));
	format(file, sizeof(file), "Players/%s.ini", name);
	
	new hash, hash2;
	hash = udb_hash(password);
	hash2 = udb_hash(password2);

	if(hash != hash2) return SendClientMessage(playerid, red, "SERVER: As senhas sгo diferentes!");
	if(hash != dini_Int(file, "Senha")) return SendClientMessage(playerid, red, "SERVER: Senha errada!");

	SendClientMessage(playerid, green, "SERVER: Vocк logou com sucesso!");
	TogglePlayerSpectating(playerid, false);
	SpawnPlayer(playerid);
	return 1;
}

stock udb_hash(buf[])
{
	new length=strlen(buf);
    new s1 = 1;
    new s2 = 0;
    new n;
    for (n=0; n<length; n++)
    {
       s1 = (s1 + buf[n]) % 65521;
       s2 = (s2 + s1)     % 65521;
    }
    return (s2 << 16) + s1;
}
Reply
#6

Deleted.
Reply
#7

Errei em algumas coisas, atualizei o post, tente de novo.

Para isso que o hash serve, para esconder a senha e dar mais seguranзa aos seus usuбrios.
Reply
#8

Tu й o cara, brother! Referente ao problema de spawnar o player, sabe me dizer?
Reply
#9

Atualizei de novo com algumas correзхes de falhas, inclusive do spawn.
Reply
#10

Continua nгo spawnando, vou revisar aqui o GM todo.

Brothers, vocкs todos, valeu pela disposiзгo em ajudar aн, viu!? valeu mesmo!!


abraзos!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)