[Ajuda] Sistema de Login com falha
#1

Boa tarde pessoal, sou um mero novato em pwn e resolvi criar um sistema de login pro meu servidor (comecei um do 0) mas existem duas falhas..

Primeira: Quando eu digito a senha no dialog e mais algum caractere, ele atй diz que a senha estб errada, mas move o player pro spawn (sem poder se mexer).

Ex: se minha senha й batata e eu digito batata123, ele manda o player por spawn.

Segunda: Quanto eu nгo escrevo nada no campo da senha e sу aperto confirma ele loga.
Essa segunda falha eu sei que teria simplesmente fazer uma strcmp que se o inputtext for branco ele retornar 0, mas n consegui fazer a linha.
Reply
#2

Atй agora vc descreveu os erros. Mas e o script?

Condicional responsбvel por detectar inputtext em branco:

Quote:

if(!strlen(inputtext)

Reply
#3

O que eu faria com esse inputtext em branco ?

e pq o compilador tб indicando q tб errado essa minha tentativa?
PHP код:
            if(!strlen(inputtext))
            {
                if(
strlen == -1);
                return 
1;
            } 
Reply
#4

Nгo compilei entгo testa...
PHP код:

    new 
arquivo[40], nome[MAX_PLAYER_NAME]; 
    
GetPlayerName(playeridnome32); 
    
format(arquivo40"contas/%s.ini"nome); 
    if(
dialogid == DIALOG_REGISTRO
    { 
        if(!
response
        { 
            
Kick(playerid); 
            return 
1
        } 
        else 
        { 
            if(!
strlen(inputtext) || strlen(inputtext) < || strlen(inputtext) > 20
            { 
                
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_PASSWORD"Login""Vocк digitou sua senha errado, digite-a novamente para logar!\nSe errar 5 vezes vocк serб kickado!""Confirma""Cancelar"); 
                
SendClientMessage(playerid, -1"Digite uma senha entre 3 e 20 caracteres.");
                return 
1
            }  
            
            
DOF2_CreateFile(arquivo); 
            
DOF2_SetString(arquivo"senha"inputtext); 
            
DOF2_SetInt(arquivo"morreu"Player[playerid][morreu]); 
            
DOF2_SetInt(arquivo"matou"Player[playerid][matou]); 
            
DOF2_SetInt(arquivo"dinheiro"Player[playerid][dinheiro]); 
            
DOF2_SetInt(arquivo"level"Player[playerid][level]); 
            
DOF2_SaveFile(); 
            
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_PASSWORD"Login""Cadastro realizado com sucesso! Por favor, faзa login""Confirma""Cancela"); 
        } 
    } 
    if(
dialogid == DIALOG_LOGIN
     { 
        if(!
response
        { 
            
Kick(playerid); 
            return 
1
        } 
        else 
        { 
            if(
strcmp(DOF2_GetString(arquivo"senha"), inputtextfalse) == 0
            { 
                
Player[playerid][morreu] = DOF2_GetInt(arquivo"morreu"); 
                
Player[playerid][matou] = DOF2_GetInt(arquivo"matou"); 
                
Player[playerid][dinheiro] = DOF2_GetInt(arquivo"dinheiro"); 
                
Player[playerid][level] = DOF2_GetInt(arquivo"level"); 
                
GivePlayerMoney(playeridPlayer[playerid][dinheiro]); 
                
SetPlayerScore(playeridPlayer[playerid][level]); 
            } 
            else 
            { 
                
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_PASSWORD"Login""Vocк digitou sua senha errado, digite-a novamente para logar!\nSe errar 5 vezes vocк serб kickado!""Confirma""Cancelar"); 
                
Erro[playerid]++; 
                if(
Erro[playerid] == 5
                { 
                    
SendClientMessage(playerid0xFF0000FF"Vocк foi kickado por errar 5 vezes a sua senha!"); 
                    
Kick(playerid); 
                    return 
1
                } 
            } 
        } 
   }
    return 
1
Reply
#5

Vocк fez certo, sу que na dialog de registro, vou adicionar isso, acho interessante.. mas o que eu queria fazer й algo que nгo permitisse o inputtext ser branco, por exemplo:

PHP код:
if(!strlen(inputtext) == -1)  
            {  
                
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_PASSWORD"Login""Vocк digitou sua senha errado, digite-a novamente para logar!\nSe errar 5 vezes vocк serб kickado!""Confirma""Cancelar");  
                
Erro[playerid]++;
               if(
Erro[playerid] == 5)
            {
                
SendClientMessage(playerid0xFF0000FF"Vocк foi kickado por errar 5 vezes a sua senha!");
                
Kick(playerid);
                return 
1
Reply
#6

Quote:
Originally Posted by Mazin
Посмотреть сообщение
Vocк fez certo, sу que na dialog de registro, vou adicionar isso, acho interessante.. mas o que eu queria fazer й algo que nгo permitisse o inputtext ser branco, por exemplo:

PHP код:
if(!strlen(inputtext) == -1)  
            {  
                
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_PASSWORD"Login""Vocк digitou sua senha errado, digite-a novamente para logar!\nSe errar 5 vezes vocк serб kickado!""Confirma""Cancelar");  
                
Erro[playerid]++;
               if(
Erro[playerid] == 5)
            {
                
SendClientMessage(playerid0xFF0000FF"Vocк foi kickado por errar 5 vezes a sua senha!");
                
Kick(playerid);
                return 
1
Vc precisa adaptar, sem falar q a dialog ali ta errada, pois nгo й dialog de Login q deve retornar e sim a de registro por isso altere lб e vc n pode considerar um erro o fato do player ter digitado uma senha curta
Nгo й necessбrio fazer uma condicional assim, faзa isso:
Quote:

if(!strlen(inputtext))

Reply
#7

Cara, obrigado pela ajuda, eu sei que ficou imenso e nem um pouco econфmico, mas funcionou e acho que й isso que importa. segue a public inteira.

PHP код:
public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    new 
arquivo[40], nome[MAX_PLAYER_NAME];
    
GetPlayerName(playeridnome32);
    
format(arquivo40"contas/%s.ini"nome);
     if(
dialogid == DIALOG_REGISTRO)
      {
           if(!
response)
         {
            
Kick(playerid);
            return 
1;
        }
        else
        {
            if(!
strlen(inputtext) || strlen(inputtext) < || strlen(inputtext) > 20)
            {
                
ShowPlayerDialog(playeridDIALOG_REGISTRODIALOG_STYLE_PASSWORD"Registro""Vocк digitou sua muito curta ou comprida!\nTente uma entre 3 e 20 caracteres!""Confirma""Cancelar");
                return 
1;
            }
            else
            {
            
DOF2_CreateFile(arquivo);
               
DOF2_SetString(arquivo"senha"inputtext);
            
DOF2_SetInt(arquivo"morreu"Player[playerid][morreu]);
            
DOF2_SetInt(arquivo"matou"Player[playerid][matou]);
            
DOF2_SetInt(arquivo"dinheiro"Player[playerid][dinheiro]);
            
DOF2_SetInt(arquivo"level"Player[playerid][level]);
            
DOF2_SaveFile();
            
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_PASSWORD"Login""Cadastro realizado com sucesso! Por favor, faзa login""Confirma""Cancela");
            }
        }
      }
    if(
dialogid == DIALOG_LOGIN)
     {
        if(!
response)
        {
            
Kick(playerid);
            return 
1;
        }
        else
        {
               if(
strlen(inputtext) <= 0)
            {
                
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_PASSWORD"Login""Vocк digitou sua senha errado, digite-a novamente para logar!\nSe errar 5 vezes vocк serб kickado!""Confirma""Cancelar");
                
Erro[playerid]++;
                   if(
Erro[playerid] == 5)
                {
                    
SendClientMessage(playerid0xFF0000FF"Vocк foi kickado por errar 5 vezes a sua senha!");
                    
Kick(playerid);
                    return 
1;
                }
            }
            if(!
strcmp(DOF2_GetString(arquivo"senha"), inputtext))
               {
                  
Player[playerid][morreu] = DOF2_GetInt(arquivo"morreu");
                
Player[playerid][matou] = DOF2_GetInt(arquivo"matou");
                
Player[playerid][dinheiro] = DOF2_GetInt(arquivo"dinheiro");
                
Player[playerid][level] = DOF2_GetInt(arquivo"level");
                   
GivePlayerMoney(playeridPlayer[playerid][dinheiro]);
                
SetPlayerScore(playeridPlayer[playerid][level]);
            }
            else
            {
                  
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_PASSWORD"Login""Vocк digitou sua senha errado, digite-a novamente para logar!\nSe errar 5 vezes vocк serб kickado!""Confirma""Cancelar");
                 
Erro[playerid]++;
                   if(
Erro[playerid] == 5)
                {
                    
SendClientMessage(playerid0xFF0000FF"Vocк foi kickado por errar 5 vezes a sua senha!");
                    
Kick(playerid);
                    return 
1;
                }
            }
        }
   }
    return 
1;

Reply
#8

Sei q n pediu, mas eu recomendo usar esta forma mais otimizada e foi removido coisas desnecessбrias e removi o erro da condicional da senha.

Denada

PHP код:
#include a_samp
public OnDialogResponse(playeriddialogidresponselistiteminputtext[]) 

    new 
arquivo[40], nome[MAX_PLAYER_NAME]; 
    
GetPlayerName(playeridnomeMAX_PLAYER_NAME); 
    
format(arquivo40"contas/%s.ini"nome); 
    if(
dialogid == DIALOG_REGISTRO
    { 
        if(!
response
           return 
Kick(playerid); 
        else 
        { 
            if(
strlen(inputtext) < || strlen(inputtext) > 20
                return 
ShowPlayerDialog(playeridDIALOG_REGISTRODIALOG_STYLE_PASSWORD"Registro""Vocк digitou sua muito curta ou comprida!\nTente uma entre 3 e 20 caracteres!""Confirma""Cancelar"); 
            else
            { 
                
DOF2_CreateFile(arquivo); 
                
DOF2_SetString(arquivo"senha"inputtext); 
                
DOF2_SetInt(arquivo"morreu"Player[playerid][morreu]); 
                
DOF2_SetInt(arquivo"matou"Player[playerid][matou]); 
                
DOF2_SetInt(arquivo"dinheiro"Player[playerid][dinheiro]); 
                
DOF2_SetInt(arquivo"level"Player[playerid][level]); 
                
DOF2_SaveFile(); 
                
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_PASSWORD"Login""Cadastro realizado com sucesso! Por favor, faзa login""Confirma""Cancela"); 
            } 
        } 
    } 
    if(
dialogid == DIALOG_LOGIN
     { 
        if(!
response
          return 
Kick(playerid); 
        else 
        {
            if(
strcmp((DOF2_GetString(arquivo"senha"), inputtexttrue) == 0// se a senha estiver correta
            

                
Player[playerid][morreu] = DOF2_GetInt(arquivo"morreu"); 
                
Player[playerid][matou] = DOF2_GetInt(arquivo"matou"); 
                
Player[playerid][dinheiro] = DOF2_GetInt(arquivo"dinheiro"); 
                
Player[playerid][level] = DOF2_GetInt(arquivo"level"); 
                
GivePlayerMoney(playeridPlayer[playerid][dinheiro]); 
                
SetPlayerScore(playeridPlayer[playerid][level]); 
            } 
            else 
//se a senha estiver errada
            

                
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_PASSWORD"Login""Vocк digitou sua senha errado, digite-a novamente para logar!\nSe errar 5 vezes vocк serб kickado!""Confirma""Cancelar"); 
                
Erro[playerid]++; 
                if(
Erro[playerid] == 5
                    return 
SendClientMessage(playerid0xFF0000FF"Vocк foi kickado por errar 5 vezes a sua senha!"),
                    
Kick(playerid);  
            }
        } 
   } 
    return 
1

Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)