24.09.2013, 09:19
Problem:
i've made my own admin/register/login system, everything works fine, player registers, it hashes and saves password to Users/%s.ini (%s = player name) as i wanted it to, but when player tries to login, the password they entered can be wrong, but they login successfully.
Code i used:
I will rep+ you, if you help. Thank you
i've made my own admin/register/login system, everything works fine, player registers, it hashes and saves password to Users/%s.ini (%s = player name) as i wanted it to, but when player tries to login, the password they entered can be wrong, but they login successfully.
Code i used:
Quote:
I removed the unneeded codes and changed the messages to plain text, to prevent people from stealing. |
Code:
#include <a_samp> #include <YSI\y_ini> //DIALOG DEFINITIONS #define DIALOG_REGISTER 1 #define DIALOG_LOGIN 2 #define DIALOG_SUCCESS_1 3 #define DIALOG_SUCCESS_2 4 #define ADMINLEVEL0 5 #define ADMINLEVEL1 6 #define ADMINLEVEL2 7 #define ADMINLEVEL3 8 #define RCON 9 #define SELF 10 //Saving path definition #define PATH "Users/%s.ini" native WP_Hash(buffer[],len,const str[]); new LOGGEDIN[MAX_PLAYERS]; enum pInfo { pPass[129], } new PlayerInfo[MAX_PLAYERS][pInfo]; forward LoadUser_data(playerid,name[],value[]); public LoadUser_data(playerid,name[],value[]) { INI_String("Password",PlayerInfo[playerid][pPass],129); 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; } public OnPlayerConnect(playerid) { LOGGEDIN[playerid] = 0; if(fexist(UserPath(playerid))) { INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid); new loginname[300]; GetPlayerName(playerid,loginname,MAX_PLAYER_NAME); format(loginname,300,"%s enter password below to login",loginname); ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login",loginname,"login",""); /////////////////////////////////////////////////////timer } else { new registername[300]; GetPlayerName(playerid,registername,MAX_PLAYER_NAME); format(registername,300,"%s enter password below to register",registername); ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"Register",registername,"Register",""); } return 1; } public OnPlayerDisconnect(playerid, reason) { if(LOGGEDIN[playerid] == 1) { new INI:File = INI_Open(UserPath(playerid)); INI_SetTag(File,"PlayerInfo"); INI_Close(File); LOGGEDIN[playerid] = 0; } return 1; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == DIALOG_REGISTER) { if (!response) return Kick(playerid); if(response) { if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Regester", "You have entered an invalid password!", "Register", "Quit"); new registername[300]; GetPlayerName(playerid,registername,MAX_PLAYER_NAME); format(registername,300,"%s has been register",registername, inputtext); new hashpass[129]; WP_Hash(hashpass,sizeof(hashpass),inputtext); new INI:File = INI_Open(UserPath(playerid)); INI_SetTag(File,"PlayerInfo"); INI_WriteString(File,"Password",hashpass); INI_Close(File); LOGGEDIN[playerid] = 1; ShowPlayerDialog(playerid, DIALOG_SUCCESS_1, DIALOG_STYLE_MSGBOX,"Register",registername,"Continue",""); INI_ParseFile(UserPath(playerid), "LoadUser_data", .bExtra = true, .extra = playerid); return 1; } } if(dialogid == DIALOG_LOGIN) { if ( !response ) return Kick ( playerid ); if( response ) { new hashpass[129]; WP_Hash(hashpass,sizeof(hashpass),inputtext); if(!strcmp(hashpass, PlayerInfo[playerid][pPass], false)) { LOGGEDIN[playerid] = 1; INI_ParseFile(UserPath(playerid), "LoadUser_data", .bExtra = true, .extra = playerid); SendClientMessage(playerid, -1, "Login succesful."); } else { ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "wrong password","Login","Quit"); return 1; } } } return 1; }