26.01.2012, 18:07
I need help. After I fixed few problems here, new have been executed. Firstly, on login, it doesen't load score of my script below, and doesen't load money. Admin level and deaths loads cool. Heres script.
I'd +1 rep for everyone who fixes problems here. Thanks if your reading and trying to solve this.
Aco.
Код:
//Includes #include <a_samp> #include <zcmd> #include <sscanf2> #include <YSI\y_ini> #include <dudb> //Path & options #define PATH "/Users/%s.ini" //This is the path template #define REGISTERED_MONEY 5000 //How much money registered users get #define DIALOG_REGISTER 1 #define DIALOG_LOGIN 2 #define DIALOG_SUCCESS_2 4 //ret_memcpy #pragma unused ret_memcpy //Additional colors #define white 0xFFFFFFA #define red 0xFF0000AA #define lime 0x00FF00FF #define yellow 0xFFFF00FF enum iDetails { //Enumerating player data Pass, Cash, Admin, Score, Kills, Deaths, }; new pInfo[MAX_PLAYERS][iDetails]; //Player data variable new bool:pLogged[MAX_PLAYERS]; 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) { SendDeathMessage(playerid, INVALID_PLAYER_ID, 200); pLogged[playerid] = false; if(fexist(UserPath(playerid))) { INI_ParseFile(UserPath(playerid), "UserDataLoad_%s", .bExtra = true, .extra = playerid); //Calling loading callback ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Please enter your password below.","Login","Leave"); } else { ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Register","Please register by entering a password below.","Register","Leave"); } return 1; } forward UserDataLoad_data(playerid,name[],value[]); public UserDataLoad_data(playerid,name[],value[]) { //This loads the settings from the INI file INI_Int("Pass",pInfo[playerid][Pass]); INI_Int("Admin",pInfo[playerid][Admin]); INI_Int("Cash",pInfo[playerid][Cash]); INI_Int("Score",pInfo[playerid][Score]); INI_Int("Kills",pInfo[playerid][Kills]); INI_Int("Deaths",pInfo[playerid][Deaths]); return 1; } public OnPlayerDisconnect(playerid, reason) { if(pLogged[playerid] == true) { new INI:iFile = INI_Open(UserPath(playerid)); INI_SetTag(iFile,"data"); INI_WriteInt(iFile,"Cash",GetPlayerMoney(playerid)); INI_WriteInt(iFile,"Score",GetPlayerScore(playerid)); INI_WriteInt(iFile,"Admin",pInfo[playerid][Admin]); INI_WriteInt(iFile,"Kills",pInfo[playerid][Kills]); INI_WriteInt(iFile,"Deaths",pInfo[playerid][Deaths]); INI_Close(iFile); } pLogged[playerid] = false; return 1; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == DIALOG_REGISTER) { if(!response) Kick(playerid); if(!strlen(inputtext)) return ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Register","Please enter a password.","Register","Leave"); new INI:iFile = INI_Open(UserPath(playerid)); INI_SetTag(iFile,"data"); INI_WriteInt(iFile,"Pass",udb_hash(inputtext)); INI_WriteInt(iFile,"Cash",REGISTERED_MONEY); INI_WriteInt(iFile,"Score",0); INI_Close(iFile); pLogged[playerid] = true; new iStr[128]; format(iStr,sizeof(iStr),"You've successfully registered with the password \"%s\".",inputtext); SendClientMessage(playerid,yellow,iStr); return 1; } if(dialogid == DIALOG_LOGIN) { if(!response) Kick(playerid); new iStr[128],gTries; gTries=0; if(gTries == 0) gTries = 1; if(gTries == 3) { new pName[30]; GetPlayerName(playerid,pName,sizeof(pName)); format(iStr,sizeof(iStr),"%s has been kicked for exceeding login tries.",pName); SendClientMessageToAll(red,iStr); return Kick(playerid); } if(!strlen(inputtext)) { format(iStr,sizeof(iStr),"Please enter your password. Tries: %i/3",gTries); return ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login",iStr,"Login","Leave"); } if(udb_hash(inputtext) == pInfo[playerid][Pass]) { gTries=gTries+1; pLogged[playerid] = true; SendClientMessage(playerid,lime,"You've successfully logged in."); SetPlayerScore(playerid,pInfo[playerid][Score]); GivePlayerMoney(playerid,pInfo[playerid][Cash]); } else { format(iStr,sizeof(iStr),"Incorrect password. Tries: %i/3",gTries); ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Register",iStr,"Login","Leave"); return 1; } return 1; } return 1; }
Aco.