SA-MP Forums Archive
Help quick!! - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: Help quick!! (/showthread.php?tid=605011)



Help quick!! - iCurse - 13.04.2016

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;




Re: Help quick!! - Sew_Sumi - 13.04.2016

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)


Re: Help quick!! - iiNzTicTx - 13.04.2016

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.


Re: Help quick!! - AndySedeyn - 13.04.2016

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.