Y_ini doesnt save my stuff..
#1

I made some register system using Y_ini but it doesn't save my stuff :/
My code:
pawn Код:
#define FILTERSCRIPT

#include <a_samp>
#include <YSI\y_ini>
#include <dudb>
#define PATH "/Users/%s.ini"

#define PLAYER_MUST_REGISTER
#define REGISTERED_MONEY 5000
#define AUTOLOGIN

#define white 0xFFFFFFA
#define red 0xFF0000AA
#define lime 0x00FF00FF
#define yellow 0xFFFF00FF

#define DIALOG_REGISTER 999
#define DIALOG_LOGIN 998

#pragma unused ret_memcpy
#define playerFile "%s.ini"

stock getini( playerid ) {
    new name[24]; GetPlayerName( playerid, name, 24 ); new file[ 64 ]; format( file, playerFile, name );
    return file;
}

enum pInfo
{
    pPass,
    pCash,
    pAdmin,
    pVip,
    pScore
};
new PlayerInfo[MAX_PLAYERS][pInfo];

#if defined AUTOLOGIN
    new pIP[MAX_PLAYERS][16];
   
#endif

new pLogged[MAX_PLAYERS];

stock UserPath(playerid)
{
    new string[128],playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,playername,sizeof(playername));
    format(string,sizeof(string),"Users/%s.ini",playername);
    return string;
}
public OnFilterScriptInit()
{
    print("\n--------------------------------------");
    print("Login & Register system by SomeN00b");
    print("--------------------------------------\n");
    return 1;
}

public OnFilterScriptExit()
{
    return 1;
}

forward UserDataLoad_data(playerid,name[],value[]);
public UserDataLoad_data(playerid,name[],value[])
{
    INI_Int("Pass",PlayerInfo[playerid][pPass]);
    #if defined AUTOLOGIN
    INI_String("IP",pIP[playerid],16);
    #endif
    INI_Int("Cash",PlayerInfo[playerid][pCash]);
    INI_Int("Vip",PlayerInfo[playerid][pVip]);
    INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
    INI_Int("Score",PlayerInfo[playerid][pScore]);
    return 1;
}

public OnPlayerConnect(playerid)
{
    pLogged[playerid] = 0;
    #if defined AUTOLOGIN
        new tmpIP[16];
        GetPlayerIp(playerid,tmpIP,sizeof(tmpIP));
    #endif
    if(fexist(UserPath(playerid))) {
        INI_ParseFile(UserPath(playerid), "UserDataLoad_%s", .bExtra = true, .extra = playerid);
        #if defined AUTOLOGIN
            if(strcmp(tmpIP,pIP[playerid],true) == 0) {
                pLogged[playerid] = 1;
                SetPlayerScore(playerid,PlayerInfo[playerid][pScore]);
                GivePlayerMoney(playerid,PlayerInfo[playerid][pCash]);
                SendClientMessage(playerid,lime,"You've been auto-logged in. [IP match]");
                return 1;
            }
        #endif
        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;
}

public OnPlayerDisconnect(playerid, reason)
{
    if(pLogged[playerid] == 1) {
        new INI:iFile = INI_Open(UserPath(playerid));
        INI_SetTag(iFile,"data");
        INI_WriteInt(iFile,"Admin",PlayerInfo[playerid][pAdmin]);
        INI_WriteInt(iFile,"Vip",PlayerInfo[playerid][pVip]);
        INI_WriteInt(iFile,"Cash",GetPlayerMoney(playerid));
        INI_WriteInt(iFile,"Score",GetPlayerScore(playerid));
        INI_Close(iFile);
    }
    pLogged[playerid] = 0;
    return 1;
}

public OnPlayerRequestSpawn(playerid)
{
    if(pLogged[playerid] == 0) return SendClientMessage(playerid,yellow,"You must register or login before spawning!");
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_REGISTER) {
        GetPlayerIp(playerid,pIP[playerid],16);
        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));
        #if defined AUTOLOGIN
            INI_WriteString(iFile,"IP",pIP[playerid]);
        #endif
        INI_WriteInt(iFile,"Cash",REGISTERED_MONEY);
        INI_WriteInt(iFile,"Score",0);
        INI_Close(iFile);
        pLogged[playerid] = 1;
        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;
        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) == PlayerInfo[playerid][pPass]) {
            pLogged[playerid] = 1;
            SendClientMessage(playerid,lime,"You've successfully logged in.");
            SetPlayerScore(playerid,PlayerInfo[playerid][pScore]);
            GivePlayerMoney(playerid,PlayerInfo[playerid][pCash]);
        } else {
            format(iStr,sizeof(iStr),"Incorrect password. Tries: %i/3",gTries);
            ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Register",iStr,"Login","Leave");
            gTries++;
            return 1;
        }
        return 1;
    }
    return 1;
}
Please help noob...+rep
Reply
#2

Код:
forward UserDataLoad_data(playerid,name[],value[]);
public UserDataLoad_data(playerid,name[],value[])
[code]
why
Код:
INI_Int("Admin",pInfo[playerid][Cash]);
i think it should be like this
Код:
INI_Int("Admin",pInfo[playerid][Admin]);
Reply
#3

and Create File in scriptfiles called "Users"
Reply
#4

Quote:
Originally Posted by [D]ry[D]esert
Посмотреть сообщение
Код:
forward UserDataLoad_data(playerid,name[],value[]);
public UserDataLoad_data(playerid,name[],value[])
[code]
why
Код:
INI_Int("Admin",pInfo[playerid][Cash]);
i think it should be like this
Код:
INI_Int("Admin",pInfo[playerid][Admin]);
Doesn't work
E:Sure i have "Users" folder..
Reply
#5

Anyone know?
E:i mean this:
Reply
#6

same to me
Reply
#7

Oh Problem solved,i need to "Run as adminstor",and that works perfect.
Reply
#8

pawn Код:
#define playerFile "%s.ini"
// change it to
#define playerFile "Users\%s.ini"
// Make sure to create a "Users" folder inside your Scriptfiles folder, otherwise Y_ini would fail to create the file.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)