What's wrong here?
#1

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.
Код:
//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;
}
I'd +1 rep for everyone who fixes problems here. Thanks if your reading and trying to solve this.
Aco.
Reply
#2

Have you created "Users" folder in the scriptfiles?
Reply
#3

Add
pawn Код:
UserDataLoad_data(playerid,name[],value[]);
To :
pawn Код:
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 {
Reply
#4

Universal: I have did it ofc. It's not probz.

lammar: Giving errors for: Undefined name, Undefined value. Also, when I did
Код:
INI_ParseFile(UserPath(playerid), "UserDataLoad_%s", .bExtra = true, .extra = playerid); //Calling loading callback
.
Reply
#5

No one has something other??
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)