Portal SAMP
[Ajuda] Login Textdraw - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Login Textdraw (/showthread.php?tid=5146)



Login Textdraw - RosaScripter - 18/11/2025

Pessoal atualmente ando conhecendo minhas habilidades com o samp e recordando algumas funções mais utilizadas, mas estou tendo dor de cabeça em meu sistema de login/registro em textdraw que eu mesmo não consigo achar o erro.. no meu ver está tudo perfeito deixarei o código abaixo caso alguém queira ajudar.. O problema seria na Senha, pós o jogador mesmo colocando a certa dar como errada, já mudei muitas coisas achando que iria resolver mas persisto no erro!


https://pastebin.com/9iTBaHpf



Caso tenha alguém com mais exp que eu, peço ajuda a achar essa mísera que eu to batendo cabeça!


RE: Login Textdraw - White_Blue - 18/11/2025

Repare na sequência de eventos:
  1. O jogador clica para logar;
  2. O seu código executa a função `SHA256_PassHash` usando o valor armazenado em `PlayerInfo[playerid][Salt]` como salt;
  3. Depois, compara o resultado com `PlayerInfo[playerid][pSenha]`;
  4. Somente se a comparação for bem-sucedida, você chama CarregarDados(playerid).
O problema é que PlayerInfo[playerid][Salt] e PlayerInfo[playerid][pSenha] estão vazios nesse momento, porque a função CarregarDados (que preenche esses valores) ainda não foi chamada. Você está comparando a senha digitada com nada.


Você precisa ler o salt e a senha já hasheada do arquivo do jogador antes de fazer a comparação. Apenas depois que a senha for validada, você pode chamar CarregarDados para carregar o resto das informações.

Código PHP:
        else // linha 609
        
{
            new 
senhaformatada[MAX_PASSWORD_LEN];
            
// PlayerInfo[playerid][Salt] e PlayerInfo[playerid][pSenha] estão vazios
            
SHA256_PassHash(SenhaInformada[playerid], PlayerInfo[playerid][Salt], senhaformatadaMAX_PASSWORD_LEN);
            if(!
strcmp(senhaformatadaPlayerInfo[playerid][pSenha], falseMAX_PASSWORD_LEN)) 
            {
                
CarregarDados(playerid); // Carrega os dados só depois do login, mas é tarde demais para a verificação.
            
}
            else 
            { 
                
Erro[playerid] ++;
                if(
Erro[playerid] == 3Kick(playerid), ErrorMsg(playerid"Voce foi kickado por errar a senha muitas vezes.");
                
Dialog_Show(playeridLoginServidorDIALOG_STYLE_PASSWORD"Efetuando login no servidor""Digite sua senha para logar. \n*Sua senha estava incorreta""Confirmar""Cancelar");
            }
        } 



RE: Login Textdraw - RosaScripter - 19/11/2025

(1 hora atrás)White_Blue Escreveu: Repare na sequência de eventos:
  1. O jogador clica para logar;
  2. O seu código executa a função `SHA256_PassHash` usando o valor armazenado em `PlayerInfo[playerid][Salt]` como salt;
  3. Depois, compara o resultado com `PlayerInfo[playerid][pSenha]`;
  4. Somente se a comparação for bem-sucedida, você chama CarregarDados(playerid).
O problema é que PlayerInfo[playerid][Salt] e PlayerInfo[playerid][pSenha] estão vazios nesse momento, porque a função CarregarDados (que preenche esses valores) ainda não foi chamada. Você está comparando a senha digitada com nada.


Você precisa ler o salt e a senha já hasheada do arquivo do jogador antes de fazer a comparação. Apenas depois que a senha for validada, você pode chamar CarregarDados para carregar o resto das informações.

Código PHP:
        else // linha 609
        
{
            new 
senhaformatada[MAX_PASSWORD_LEN];
            
// PlayerInfo[playerid][Salt] e PlayerInfo[playerid][pSenha] estão vazios
            
SHA256_PassHash(SenhaInformada[playerid], PlayerInfo[playerid][Salt], senhaformatadaMAX_PASSWORD_LEN);
            if(!
strcmp(senhaformatadaPlayerInfo[playerid][pSenha], falseMAX_PASSWORD_LEN)) 
            {
                
CarregarDados(playerid); // Carrega os dados só depois do login, mas é tarde demais para a verificação.
            
}
            else 
            { 
                
Erro[playerid] ++;
                if(
Erro[playerid] == 3Kick(playerid), ErrorMsg(playerid"Voce foi kickado por errar a senha muitas vezes.");
                
Dialog_Show(playeridLoginServidorDIALOG_STYLE_PASSWORD"Efetuando login no servidor""Digite sua senha para logar. \n*Sua senha estava incorreta""Confirmar""Cancelar");
            }
        } 

Pode está me mostrando como resolveria? Para eu ter uma noção no que eu deixei passar.. nesse momento estou testando oque me informou.