Help quick!!
#1

Hey guys, so i copied a register/login system. But didn't work out like it supposed to be.
Whenever i newbie logins with a not-registered name then when he/she relogs while in the middle of registering it makes the account REGISTERED then the LOGIN dialog will show up, when you put a random password there it works and it creates a new .ini at my scriptfiles but his/her data isn't saving their .ini is blank.

This is the script.

PHP код:
#define dregister 1
#define dlogin 2
#define UserPath "Accounts/%s.ini"
native WP_Hash(buffer[],len,const str[]);
enum PlayerInfo
{
    
Pass[129],
    
Admin,
    
Helper,
    
VIP,
    
Money,
    
Scores,
    
Kills,
    
Deaths
}
new 
pInfo[MAX_PLAYERS][PlayerInfo];
stock Path(playerid)
{
    new 
str[128], name[MAX_PLAYER_NAME];
    
GetPlayerName(playerid,name,sizeof(name));
    
format(str,sizeof(str),UserPath,name);
    return 
str;
}
forward loadaccount_user(playeridname[], value[]);
public 
loadaccount_user(playeridname[], value[])
{
    
INI_String("Password"pInfo[playerid][Pass],129);
    
INI_Int("AdminLevel",pInfo[playerid][Admin]);
    
INI_Int("VIPLevel",pInfo[playerid][VIP]);
    
INI_Int("Money",pInfo[playerid][Money]); 
    
INI_Int("Scores",pInfo[playerid][Scores]);
    
INI_Int("Kills",pInfo[playerid][Kills]);
    
INI_Int("Deaths",pInfo[playerid][Deaths]);
    return 
1;
}
public 
OnPlayerConnect(playerid)
{
    new 
name[MAX_PLAYER_NAME]; 
    
GetPlayerName(playerid,name,sizeof(name)); 
    if(
fexist(Path(playerid))) 
    {
        
INI_ParseFile(Path(playerid),"loadaccount_%s", .bExtra true, .extra playerid);
        
ShowPlayerDialog(playerid,dlogin,DIALOG_STYLE_PASSWORD,"Login","Welcome back. This account is registered. \nInsert your password to login to your account","Login","Quit");
    }
    else
    {
        
ShowPlayerDialog(playerid,dregister,DIALOG_STYLE_INPUT,"Register","Welcome! This account is not registered.\nEnter your own password to create a new account.","Register","Quit");
        return 
1;
      }
       return 
1;
}
public 
OnPlayerDisconnect(playeridreason)
{
        new 
INI:file INI_Open(Path(playerid));
        
INI_SetTag(file,"Player's Data");
         
INI_WriteInt(file,"AdminLevel",pInfo[playerid][Admin]);
        
INI_WriteInt(file,"VIPLevel",pInfo[playerid][VIP]);
        
INI_WriteInt(file,"Money",GetPlayerMoney(playerid));
        
INI_WriteInt(file,"Scores",GetPlayerScore(playerid));
        
INI_WriteInt(file,"Kills",pInfo[playerid][Kills]);
        
INI_WriteInt(file,"Deaths",pInfo[playerid][Deaths]);
        
INI_Close(file);
        return 
1;
}
public 
OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    if(
dialogid == dregister)
    {
        if(!
response) return Kick(playerid); 
        if(
response)
        {
            if(!
strlen(inputtext))
            {
                   
ShowPlayerDialog(playerid,dregister,DIALOG_STYLE_INPUT,"Register","Welcome! This account is not registered.\nEnter your own password to create a new account.\nPlease enter the password!","Register","Quit");
                return 
1;
            }
            new 
hashpass[129];
            
WP_Hash(hashpass,sizeof(hashpass),inputtext);
            new 
INI:file INI_Open(Path(playerid));
            
INI_SetTag(file,"Player's Data");
            
INI_WriteString(file,"Password",hashpass);
            
INI_WriteInt(file,"AdminLevel",0); 
            
INI_WriteInt(file,"VIPLevel",0);
            
INI_WriteInt(file,"Money",0);
            
INI_WriteInt(file,"Scores",0);
            
INI_WriteInt(file,"Kills",0);
            
INI_WriteInt(file,"Deaths",0);
            
INI_Close(file);
            
SendClientMessage(playerid,-1,"You have been successfully registered");
            return 
1;
        }
    }
    if(
dialogid == dlogin)
    {
        if(!
response) return Kick(playerid); 
        if(
response
        {
            new 
hashpass[129]; 
            
WP_Hash(hashpass,sizeof(hashpass),inputtext); 
            if(!
strcmp(hashpasspInfo[playerid][Pass], false)
            {
                
INI_ParseFile(Path(playerid),"loadaccount_%s",.bExtra true, .extra playerid);
                
SetPlayerScore(playerid,pInfo[playerid][Scores]);
                
GivePlayerMoney(playerid,pInfo[playerid][Money]);
                
SendClientMessage(playerid,-1,"Welcome back! You have successfully logged in");
            }
            else 
            {
                
ShowPlayerDialog(playerid,dlogin,DIALOG_STYLE_PASSWORD,"Login","Welcome back. This account is registered. \nInsert your password to login to your account.\n{F81414}Incorrect password!","Login","Quit");//We will tell to them that they've entered an incorrect password
                
return 1;
            }
        }
    }
    return 
1;
}
public 
OnPlayerDeath(playeridkilleridreason)
{
    
pInfo[killerid][Kills]++;
    
pInfo[playerid][Deaths]++;
    return 
1;

Reply
#2

This is why you don't copy paste code, when you don't understand the code in the first place... (At least you are honest about it, I'll give you that)
Reply
#3

As Sew_Sumi said: read the tutorial, don't only copy and paste. Play around with the code.
>> create the file after they have fully registered in simple.
Reply
#4

There's an updated version of that tutorial in my signature. I explained a lot more and fixed flaws such as the array out of bounds error under OnPlayerDeath.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)