[Help] Registration system won't save
#1

Hey I use this as register system.

https://sampforum.blast.hk/showthread.php?tid=273088

Thanks to Kush for the greatness tutorial!

But when I connect to my server I need register (thats normal) but when i disconnect and later connect I need again register my account. What do I wrong?, I have 0 errors.

Do I need something in my scriptfiles, plugins or anything?
And do I need put something in my server.cfg?

I use this as a Filterscript.

And I have that already in my filterscript line.

But do I need something add in plugins, server.cfg or scriptfiles?

Thanks

BEER-samp
Reply
#2

Hello!
Perhaps you did something wrong with write and/or read system.
Could you upload Your filterscript, so we (or just me) could look into it
and see what might cause this problem?

No additional plugins/fs's needed. Except y_ini..
Greetz,
LetsOWN
Reply
#3

Sure here you go man

PHP код:
//******************************************************************************
//
// Registration system thanks for your tutorial Kush
//
//******************************************************************************
#include <YSI\y_ini>
#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2
#define DIALOG_SUCCESS_1 3
#define DIALOG_SUCCESS_2 4
#define PATH "/Users/%s.ini"
#define COL_WHITE "{FFFFFF}"
#define COL_RED "{F81414}"
#define COL_GREEN "{00FF22}"
#define COL_LIGHTBLUE "{00CED1}"
enum pInfo
{
    
pPass,
    
pCash,
    
pAdmin,
    
pKills,
    
pDeaths
}
new 
PlayerInfo[MAX_PLAYERS][pInfo];
forward LoadUser_data(playerid,name[],value[]);
public 
LoadUser_data(playerid,name[],value[])
{
    
INI_Int("Password",PlayerInfo[playerid][pPass]);
    
INI_Int("Cash",PlayerInfo[playerid][pCash]);
    
INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
    
INI_Int("Kills",PlayerInfo[playerid][pKills]);
    
INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);
    return 
1;
}
stock UserPath(playerid)
{
    new 
string[128],playername[MAX_PLAYER_NAME];
    
GetPlayerName(playerid,playername,sizeof(playername));
    
format(string,sizeof(string),PATH,playername);
    return 
string;
}
/*Credits to Dracoblue*/
stock udb_hash(buf[]) {
    new 
length=strlen(buf);
    new 
s1 1;    new s2 0;
    new 
n;
    for (
n=0n<lengthn++)
    {
        
s1 = (s1 buf[n]) % 65521;
        
s2 = (s2 s1)     % 65521;
    }
    return (
s2 << 16) + s1;
}
public 
OnPlayerConnect(playerid)
{
    if(
fexist(UserPath(playerid)))
    {
        
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra true, .extra playerid);
        
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_WHITE"Type your password below to login.","Login","Quit");
    }
    else
    {
        
ShowPlayerDialog(playeridDIALOG_REGISTERDIALOG_STYLE_INPUT,""COL_WHITE"Registering...",""COL_WHITE"Type your password below to register a new account.","Register","Quit");
    }
    return 
1;
}
public 
OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    switch( 
dialogid )
    {
        case 
DIALOG_REGISTER:
        {
            if (!
response) return Kick(playerid);
            if(
response)
            {
                if(!
strlen(inputtext)) return ShowPlayerDialog(playeridDIALOG_REGISTERDIALOG_STYLE_INPUT""COL_WHITE"Registering...",""COL_RED"You have entered an invalid password.\n"COL_WHITE"Type your password below to register a new account.","Register","Quit");
                new 
INI:File INI_Open(UserPath(playerid));
                
INI_SetTag(File,"data");
                
INI_WriteInt(File,"Password",udb_hash(inputtext));
                
INI_WriteInt(File,"Cash",0);
                
INI_WriteInt(File,"Admin",0);
                
INI_WriteInt(File,"Kills",0);
                
INI_WriteInt(File,"Deaths",0);
                
INI_Close(File);
                
SetSpawnInfo(playerid001958.331343.1215.36269.15000000);
                
SpawnPlayer(playerid);
                
ShowPlayerDialog(playeridDIALOG_SUCCESS_1DIALOG_STYLE_MSGBOX,""COL_WHITE"Success!",""COL_GREEN"Great! Your Y_INI system works perfectly. Relog to save your stats!","Ok","");
            }
        }
        case 
DIALOG_LOGIN:
        {
            if ( !
response ) return Kick playerid );
            if( 
response )
            {
                if(
udb_hash(inputtext) == PlayerInfo[playerid][pPass])
                {
                    
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra true, .extra playerid);
                    
GivePlayerMoney(playeridPlayerInfo[playerid][pCash]);
                    
ShowPlayerDialog(playeridDIALOG_SUCCESS_2DIALOG_STYLE_MSGBOX,""COL_WHITE"Success!",""COL_GREEN"You have successfully logged in!","Ok","");
                }
                else
                {
                    
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_RED"You have entered an incorrect password.\n"COL_WHITE"Type your password below to login.","Login","Quit");
                }
                return 
1;
                }
            }
        }
        return 
1;
}
public 
OnPlayerDisconnect(playeridreason)
{
    new 
INI:File INI_Open(UserPath(playerid));
    
INI_SetTag(File,"data");
    
INI_WriteInt(File,"Cash",GetPlayerMoney(playerid));
    
INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
    
INI_WriteInt(File,"Kills",PlayerInfo[playerid][pKills]);
    
INI_WriteInt(File,"Deaths",PlayerInfo[playerid][pDeaths]);
    
INI_Close(File);
    return 
1;
}
public 
OnPlayerDeath(playeridkilleridreason)
{
    
PlayerInfo[killerid][pKills]++;
    
PlayerInfo[playerid][pDeaths]++;
    return 
1;

Warnings and errors:

PHP код:
C:\Users\Edward\Desktop\samp server\pawno\PlanetSRegisterSystem.pwn(119) : warning 217loose indentation
Pawn compiler 3.2.3664              Copyright 
(c1997-2006ITB CompuPhase
1 Warning

Reply
#4


Quote:

C:UsersEdwardDesktopsamp serverpawnoPlanetSRegisterSystem.pwn(119) : warning 217: loose indentation

This warning can be ignored, it dids nothing actually
To fix this you have 2 ways:
Place
pawn Код:
case DIALOG_LOGIN:
        {
            if ( !response ) return Kick ( playerid );
            if( response )
            {
                if(udb_hash(inputtext) == PlayerInfo[playerid][pPass])
                {
                    INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
                    GivePlayerMoney(playerid, PlayerInfo[playerid][pCash]);
                    ShowPlayerDialog(playerid, DIALOG_SUCCESS_2, DIALOG_STYLE_MSGBOX,""COL_WHITE"Success!",""COL_GREEN"You have successfully logged in!","Ok","");
                }
                else
                {
                    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_RED"You have entered an incorrect password.\n"COL_WHITE"Type your password below to login.","Login","Quit");
                }
                return 1;
                }
            }
        }
    return 1;
}
instead your code. The warning is caused last "return 1;", because it was some "spaces" after it should be.

2nd way:
At the top:
pawn Код:
#pragma tabsize 0
.

Returning to thread..
I will look for the issue, it might take me some time (around 10-15 minutes).
Be patient, and wait if I / someone else will solve it.

Greetz,
LetsOWN
Reply
#5

Everything looks alright, are you sure you have the folder created? Since the path is Users, you need to create a Users folder inside the scriptfiles folder. If you didn't do that yet, it wouldn't create the file, meaning it wouldn't save the player.
Reply
#6

ahh now it will works?

@kindred

I wanna try now thx
Reply
#7

As I haven't tried this, because I've no y_ini (I do not use INI anyways, cuz I just love SQLite <3), I personally think, that problem might be caused by this line:
pawn Код:
if(fexist(UserPath(playerid)))
Everything else looks fine.

Please check if there are any files in following dir:

.../scriptfiles/Users/

If no, then there is a problem with write-to-file
Otherwise, there is a problem with read-from-file

All depends on result.

Waiting for the answer

Greetz,
LetsOWN

@2 post up,

right, you need to create 'Users' folder at your own ^^
Reply
#8

I have created a map in scriptfiles but it didnt work:S
Reply
#9

Ok where it says "DEFINE PATH" you need to create that folder in Scriptfiles.
Reply
#10

Quote:
Originally Posted by Windows32
Посмотреть сообщение
Ok where it says "DEFINE PATH" you need to create that folder in Scriptfiles.
Isn't that basically what I said?

Ohh, and about the if(fexist thing, he does it right, that simply checks if the file exists.

Quote:
Originally Posted by BEER-samp
Посмотреть сообщение
I have created a map in scriptfiles but it didnt work:S
What do you mean a "map"? You created the folder "Users" in the scriptfiles folder?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)