y_ini issue?
#1

Hello, basically, what happens is I use y_ini to save data. I have my code below, and what is happening is sometimes it will save data twice.
Код:
[Player_Data]
Password = redacted
AdminLevel = 5
VIPLevel = 5
Money = 100000
Scores = 0
Kills = 0
Deaths = 0
Color = 0
Skin = 250
GodEnabled = 0
isAFK = 0
Muted = 0
Logged = 0
CustomSlot0 = 0
CustomSlot0a = 0
CustomSlot1 = 0
CustomSlot1a = 0
CustomSlot2 = 0
CustomSlot2a = 0
CustomSlot3 = 0
CustomSlot3a = 0
CustomSlot4 = 0
CustomSlot4a = 0
CustomSlot5 = 0
CustomSlot5a = 0
CustomSlot6 = 0
CustomSlot6a = 0
CustomSlot7 = 0
CustomSlot7a = 0
CustomSlot8 = 0
CustomSlot8a = 0
CustomSlot9 = 0
CustomSlot9a = 0
CustomSlot10 = 0
CustomSlot10a = 0
CustomSlot11 = 0
CustomSlot11a = 0
POS_X = §
POS_Y = 
POS_Z = 
[Player_Data]
AdminLevel = 5
VIPLevel = 5
Money = 100000
Scores = 0
Kills = 0
Deaths = 0
Logged = 0
Color = 0
Skin = 250
CustomSlot0 = 0
CustomSlot0a = 0
CustomSlot1 = 0
CustomSlot1a = 0
CustomSlot2 = 0
CustomSlot2a = 0
CustomSlot3 = 0
CustomSlot3a = 0
CustomSlot4 = 0
CustomSlot4a = 0
CustomSlot5 = 0
CustomSlot5a = 0
CustomSlot6 = 0
CustomSlot6a = 0
CustomSlot7 = 0
CustomSlot7a = 0
CustomSlot8 = 0
CustomSlot8a = 0
CustomSlot9 = 0
CustomSlot9a = 0
CustomSlot10 = 0
CustomSlot10a = 0
CustomSlot11 = 0
CustomSlot11a = 0
POS_X = Ё

POS_Y = 

POS_Z =
If you look at that, you notice the positions are not properly saving. I have a hunch it has something to do with that as before I put in that feature the problem wasnt there.

Here are my enums:
pawn Код:
enum PlayerInfo
{
    Pass[129],
    Adminlevel,
    VIPlevel,
    Money,
    Scores,
    Kills,
    Deaths,
    Logged,
    Color,
    Skin,
    GodEnabled,
    CustomSlot0,
    CustomSlot1,
    CustomSlot2,
    CustomSlot3,
    CustomSlot4,
    CustomSlot5,
    CustomSlot6,
    CustomSlot7,
    CustomSlot8,
    CustomSlot9,
    CustomSlot10,
    CustomSlot11,
    CustomSlot0a,
    CustomSlot1a,
    CustomSlot2a,
    CustomSlot3a,
    CustomSlot4a,
    CustomSlot5a,
    CustomSlot6a,
    CustomSlot7a,
    CustomSlot8a,
    CustomSlot9a,
    CustomSlot10a,
    CustomSlot11a,
    isAFK,
    Muted,
    POS_X,
    POS_Y,
    POS_Z
}
new pInfo[MAX_PLAYERS][PlayerInfo];
Functions, Stocks and Forwards.
pawn Код:
stock Path(playerid)
{
    new str[128],name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(str,sizeof(str),UserPath,name);
    return str;
}
Registering/Logging in:
pawn Код:
public OnPlayerConnect(playerid)
{
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    if(fexist(Path(playerid)))
    {
        INI_ParseFile(Path(playerid), "loadaccount_%s", .bExtra = true, .extra = playerid);
        ShowPlayerDialog(playerid,dlogin,DIALOG_STYLE_INPUT,"Login","Welcome back. This account is registered. \nInsert your password to login to your account","Login","Quit");
    }
    else
    {
        ShowPlayerDialog(playerid,dregister,DIALOG_STYLE_INPUT,"Register","Welcome! This account is not registered.\nEnter your own password to create a new account.","Register","Quit");
    }
    return 1;
}
Account Loading:
pawn Код:
forward loadaccount_user(playerid, name[], value[]);

public loadaccount_user(playerid, name[], value[])
{
    INI_String("Password", pInfo[playerid][Pass],129);
    INI_Int("AdminLevel",pInfo[playerid][Adminlevel]);
    INI_Int("VIPLevel",pInfo[playerid][VIPlevel]);
    INI_Int("Money",pInfo[playerid][Money]);
    INI_Int("Scores",pInfo[playerid][Scores]);
    INI_Int("Kills",pInfo[playerid][Kills]);
    INI_Int("Deaths",pInfo[playerid][Deaths]);
    INI_Int("Color",pInfo[playerid][Color]);
    INI_Int("Skin",pInfo[playerid][Skin]);
    INI_Int("GodEnabled",pInfo[playerid][GodEnabled]);
    INI_Int("CustomSlot0",pInfo[playerid][CustomSlot0]);
    INI_Int("CustomSlot1",pInfo[playerid][CustomSlot1]);
    INI_Int("CustomSlot2",pInfo[playerid][CustomSlot2]);
    INI_Int("CustomSlot3",pInfo[playerid][CustomSlot3]);
    INI_Int("CustomSlot4",pInfo[playerid][CustomSlot4]);
    INI_Int("CustomSlot5",pInfo[playerid][CustomSlot5]);
    INI_Int("CustomSlot6",pInfo[playerid][CustomSlot6]);
    INI_Int("CustomSlot7",pInfo[playerid][CustomSlot7]);
    INI_Int("CustomSlot8",pInfo[playerid][CustomSlot8]);
    INI_Int("CustomSlot9",pInfo[playerid][CustomSlot9]);
    INI_Int("CustomSlot10",pInfo[playerid][CustomSlot10]);
    INI_Int("CustomSlot11",pInfo[playerid][CustomSlot11]);
    INI_Int("CustomSlot0a",pInfo[playerid][CustomSlot0a]);
    INI_Int("CustomSlot1a",pInfo[playerid][CustomSlot1a]);
    INI_Int("CustomSlot2a",pInfo[playerid][CustomSlot2a]);
    INI_Int("CustomSlot3a",pInfo[playerid][CustomSlot3a]);
    INI_Int("CustomSlot4a",pInfo[playerid][CustomSlot4a]);
    INI_Int("CustomSlot5a",pInfo[playerid][CustomSlot5a]);
    INI_Int("CustomSlot6a",pInfo[playerid][CustomSlot6a]);
    INI_Int("CustomSlot7a",pInfo[playerid][CustomSlot7a]);
    INI_Int("CustomSlot8a",pInfo[playerid][CustomSlot8a]);
    INI_Int("CustomSlot9a",pInfo[playerid][CustomSlot9a]);
    INI_Int("CustomSlot10a",pInfo[playerid][CustomSlot10a]);
    INI_Int("CustomSlot11a",pInfo[playerid][CustomSlot11a]);
    INI_Int("isAFK",pInfo[playerid][isAFK]);
    INI_Int("Muted",pInfo[playerid][Muted]);
    INI_String("POS_X",pInfo[playerid][POS_X]);
    INI_String("POS_Y",pInfo[playerid][POS_Y]);
    INI_String("POS_Z",pInfo[playerid][POS_Z]);
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == dregister)
    {
        if(!response) return Kick(playerid);
        if(response)
        {
            if(!strlen(inputtext))
            {
                ShowPlayerDialog(playerid,dregister,DIALOG_STYLE_INPUT,"Register","Welcome! This account is not registered.\nEnter your own password to create a new account.\nPlease enter the password!","Register","Quit");
                return 1;
            }
            new hashpass[129];
            WP_Hash(hashpass,sizeof(hashpass),inputtext);
            new INI:file = INI_Open(Path(playerid));
            INI_SetTag(file,"Player_Data");
            INI_WriteString(file,"Password",hashpass);
            INI_WriteInt(file,"AdminLevel",0);
            INI_WriteInt(file,"VIPLevel",0);
            INI_WriteInt(file,"Money",0);
            INI_WriteInt(file,"Scores",0);
            INI_WriteInt(file,"Kills",0);
            INI_WriteInt(file,"Deaths",0);
            INI_WriteInt(file,"Color",COLOR_WHITE);
            INI_WriteInt(file,"Skin",162);
            INI_WriteInt(file,"GodEnabled",0);
            INI_WriteInt(file,"isAFK",0);
            INI_WriteInt(file,"Muted",0);
            INI_Close(file);
            return 1;
        }
    }
    if(dialogid == dlogin)
    {
        if(!response) return Kick(playerid);
        if(response)
        {
            new hashpass[129];
            WP_Hash(hashpass,sizeof(hashpass),inputtext);
            if(!strcmp(hashpass, pInfo[playerid][Pass], false))
            {
                INI_ParseFile(Path(playerid),"loadaccount_%s",.bExtra = true, .extra = playerid);
                SpawnPlayer(playerid);
            }
            else
            {
                ShowPlayerDialog(playerid,dlogin,DIALOG_STYLE_INPUT,"Login","Welcome back. This account is registered. \nInsert your password to login to your account.\nIncorrect password!","Login","Quit");//We will tell to them that they've entered an incorrect password
                return 1;
            }
        }
    }
    return 1;
}

public OnPlayerSpawn(playerid)
{
    pInfo[playerid][Logged] = 1;
    SetPlayerPos(playerid, 2506.0935, -1672.0536, 13.3714);
    SetPlayerSkin(playerid, pInfo[playerid][Skin]);
    GivePlayerWeapon(playerid, pInfo[playerid][CustomSlot0], pInfo[playerid][CustomSlot0a]);
    GivePlayerWeapon(playerid, pInfo[playerid][CustomSlot1], pInfo[playerid][CustomSlot1a]);
    GivePlayerWeapon(playerid, pInfo[playerid][CustomSlot2], pInfo[playerid][CustomSlot2a]);
    GivePlayerWeapon(playerid, pInfo[playerid][CustomSlot3], pInfo[playerid][CustomSlot3a]);
    GivePlayerWeapon(playerid, pInfo[playerid][CustomSlot4], pInfo[playerid][CustomSlot4a]);
    GivePlayerWeapon(playerid, pInfo[playerid][CustomSlot5], pInfo[playerid][CustomSlot5a]);
    GivePlayerWeapon(playerid, pInfo[playerid][CustomSlot6], pInfo[playerid][CustomSlot6a]);
    GivePlayerWeapon(playerid, pInfo[playerid][CustomSlot7], pInfo[playerid][CustomSlot7a]);
    GivePlayerWeapon(playerid, pInfo[playerid][CustomSlot8], pInfo[playerid][CustomSlot8a]);
    GivePlayerWeapon(playerid, pInfo[playerid][CustomSlot9], pInfo[playerid][CustomSlot9a]);
    GivePlayerWeapon(playerid, pInfo[playerid][CustomSlot10], pInfo[playerid][CustomSlot10a]);
    GivePlayerWeapon(playerid, pInfo[playerid][CustomSlot11], pInfo[playerid][CustomSlot11a]);
}
Account Saving:
pawn Код:
public OnPlayerDisconnect(playerid, reason)
{
    pInfo[playerid][Logged] = 0;
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    pInfo[playerid][POS_X] = Float:x;
    pInfo[playerid][POS_Y] = Float:y;
    pInfo[playerid][POS_Z] = Float:z;
    new INI:file = INI_Open(Path(playerid));
    INI_SetTag(file,"Player_Data");
    INI_WriteInt(file,"AdminLevel",pInfo[playerid][Adminlevel]);
    INI_WriteInt(file,"VIPLevel",pInfo[playerid][VIPlevel]);
    INI_WriteInt(file,"Money",GetPlayerMoney(playerid));
    INI_WriteInt(file,"Scores",GetPlayerScore(playerid));
    INI_WriteInt(file,"Kills",pInfo[playerid][Kills]);
    INI_WriteInt(file,"Deaths",pInfo[playerid][Deaths]);
    INI_WriteInt(file,"Logged",pInfo[playerid][Logged]);
    INI_WriteInt(file,"Color",pInfo[playerid][Color]);
    INI_WriteInt(file,"Skin",pInfo[playerid][Skin]);
    INI_WriteInt(file,"CustomSlot0",pInfo[playerid][CustomSlot0]);
    INI_WriteInt(file,"CustomSlot0a",pInfo[playerid][CustomSlot0a]);
    INI_WriteInt(file,"CustomSlot1",pInfo[playerid][CustomSlot1]);
    INI_WriteInt(file,"CustomSlot1a",pInfo[playerid][CustomSlot1a]);
    INI_WriteInt(file,"CustomSlot2",pInfo[playerid][CustomSlot2]);
    INI_WriteInt(file,"CustomSlot2a",pInfo[playerid][CustomSlot2a]);
    INI_WriteInt(file,"CustomSlot3",pInfo[playerid][CustomSlot3]);
    INI_WriteInt(file,"CustomSlot3a",pInfo[playerid][CustomSlot3a]);
    INI_WriteInt(file,"CustomSlot4",pInfo[playerid][CustomSlot4]);
    INI_WriteInt(file,"CustomSlot4a",pInfo[playerid][CustomSlot4a]);
    INI_WriteInt(file,"CustomSlot5",pInfo[playerid][CustomSlot5]);
    INI_WriteInt(file,"CustomSlot5a",pInfo[playerid][CustomSlot5a]);
    INI_WriteInt(file,"CustomSlot6",pInfo[playerid][CustomSlot6]);
    INI_WriteInt(file,"CustomSlot6a",pInfo[playerid][CustomSlot6a]);
    INI_WriteInt(file,"CustomSlot7",pInfo[playerid][CustomSlot7]);
    INI_WriteInt(file,"CustomSlot7a",pInfo[playerid][CustomSlot7a]);
    INI_WriteInt(file,"CustomSlot8",pInfo[playerid][CustomSlot8]);
    INI_WriteInt(file,"CustomSlot8a",pInfo[playerid][CustomSlot8a]);
    INI_WriteInt(file,"CustomSlot9",pInfo[playerid][CustomSlot9]);
    INI_WriteInt(file,"CustomSlot9a",pInfo[playerid][CustomSlot9a]);
    INI_WriteInt(file,"CustomSlot10",pInfo[playerid][CustomSlot10]);
    INI_WriteInt(file,"CustomSlot10a",pInfo[playerid][CustomSlot10a]);
    INI_WriteInt(file,"CustomSlot11",pInfo[playerid][CustomSlot11]);
    INI_WriteInt(file,"CustomSlot11a",pInfo[playerid][CustomSlot11a]);
    INI_WriteString(file,"POS_X",pInfo[playerid][POS_X]);
    INI_WriteString(file,"POS_Y",pInfo[playerid][POS_Y]);
    INI_WriteString(file,"POS_Z",pInfo[playerid][POS_Z]);
    INI_Close(file);
    return 1;
}
The below is included because weapons are also not saving.
pawn Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid==WEAP_DIALOG)
    {
        if(response)
        {
            switch(listitem)
            {
                case 0:
                {
                    SellWeapon(playerid,0,43,1);
                    pInfo[playerid][CustomSlot9] == 43;
                    pInfo[playerid][CustomSlot9a] == 1;
                }
                case 1:
                {
                    SellWeapon(playerid,0,22,1000);
                    pInfo[playerid][CustomSlot2] == 22;
                    pInfo[playerid][CustomSlot2a] == 1000;
                }
                case 2:
                {
                    SellWeapon(playerid,0,23,1000);
                    pInfo[playerid][CustomSlot2] == 23;
                    pInfo[playerid][CustomSlot2a] == 1000;
                }
                case 3:
                {
                    SellWeapon(playerid,0,24,1000);
                    pInfo[playerid][CustomSlot2] == 24;
                    pInfo[playerid][CustomSlot3a] == 1000;
                }
                case 4:
                {
                    SellWeapon(playerid,0,32,1000);
                    pInfo[playerid][CustomSlot4] == 32;
                    pInfo[playerid][CustomSlot4a] == 1000;
                }
                case 5:
                {
                    SellWeapon(playerid,0,28,1000);
                    pInfo[playerid][CustomSlot4] == 28;
                    pInfo[playerid][CustomSlot4a] == 1000;
                }
                case 6:
                {
                    SellWeapon(playerid,0,29,1000);
                    pInfo[playerid][CustomSlot4] == 29;
                    pInfo[playerid][CustomSlot4a] == 1000;
                }
                case 7:
                {
                    SellWeapon(playerid,0,26,1000);
                    pInfo[playerid][CustomSlot3] == 26;
                    pInfo[playerid][CustomSlot3a] == 1000;
                }
                case 8:
                {
                    SellWeapon(playerid,0,25,1000);
                    pInfo[playerid][CustomSlot3] == 25;
                    pInfo[playerid][CustomSlot3a] == 1000;
                }
                case 9:
                {
                    SellWeapon(playerid,0,27,1000);
                    pInfo[playerid][CustomSlot3] == 27;
                    pInfo[playerid][CustomSlot3a] == 1000;
                }
                case 10:
                {
                    SellWeapon(playerid,0,30,1000);
                    pInfo[playerid][CustomSlot5] == 30;
                    pInfo[playerid][CustomSlot5a] == 1000;
                }
                case 11:
                {
                    SellWeapon(playerid,0,31,1000);
                    pInfo[playerid][CustomSlot5] == 31;
                    pInfo[playerid][CustomSlot5a] == 1000;
                }
                case 12:
                {
                    SellWeapon(playerid,0,35,25);
                    pInfo[playerid][CustomSlot7] == 35;
                    pInfo[playerid][CustomSlot7a] == 25;
                }
                case 13:
                {
                    SellWeapon(playerid,0,37,1);
                    pInfo[playerid][CustomSlot7] == 37;
                    pInfo[playerid][CustomSlot7a] == 1;
                }
                case 14:
                {
                    SellWeapon(playerid,0,33,1000);
                    pInfo[playerid][CustomSlot6] == 33;
                    pInfo[playerid][CustomSlot6a] == 1000;
                }
                case 15:
                {
                    SellWeapon(playerid,0,34,1000);
                    pInfo[playerid][CustomSlot6] == 34;
                    pInfo[playerid][CustomSlot6a] == 1000;
                }
                case 16:
                {
                    SellWeapon(playerid,0,16,5);
                    pInfo[playerid][CustomSlot8] == 16;
                    pInfo[playerid][CustomSlot8a] == 5;
                }
                case 17:
                {
                    SellWeapon(playerid,0,46,1);
                    pInfo[playerid][CustomSlot11] == 46;
                    pInfo[playerid][CustomSlot11a] == 1;
                }
                case 18:
                {
                    SellWeapon(playerid,0,39,1);
                    pInfo[playerid][CustomSlot8] == 39;
                    pInfo[playerid][CustomSlot8a] == 1;
                }
                case 19:
                {
                    SellWeapon(playerid,0,17,1);
                    pInfo[playerid][CustomSlot8] == 17;
                    pInfo[playerid][CustomSlot8a] == 1;
                }
                case 20:
                {
                    SellWeapon(playerid,0,18,10);
                    pInfo[playerid][CustomSlot8] == 18;
                    pInfo[playerid][CustomSlot8a] == 10;
                }
                case 21:
                {
                    SellWeapon(playerid,0,1,1);
                    pInfo[playerid][CustomSlot0] == 1;
                    pInfo[playerid][CustomSlot0a] == 1;
                }
                case 22:
                {
                    SellWeapon(playerid,0,2,1);
                    pInfo[playerid][CustomSlot1] == 2;
                    pInfo[playerid][CustomSlot1a] == 1;
                }
                case 23:
                {
                    SellWeapon(playerid,0,3,1);
                    pInfo[playerid][CustomSlot1] == 3;
                    pInfo[playerid][CustomSlot1a] == 1;
                }
                case 24:
                {
                    SellWeapon(playerid,0,4,1);
                    pInfo[playerid][CustomSlot1] == 4;
                    pInfo[playerid][CustomSlot1a] == 1;
                }
                case 25:
                {
                    SellWeapon(playerid,0,5,1);
                    pInfo[playerid][CustomSlot1] == 5;
                    pInfo[playerid][CustomSlot1a] == 1;
                }
                case 26:
                {
                    SellWeapon(playerid,0,6,1);
                    pInfo[playerid][CustomSlot1] == 6;
                    pInfo[playerid][CustomSlot1a] == 1;
                }
                case 27:
                {
                    SellWeapon(playerid,0,7,1);
                    pInfo[playerid][CustomSlot1] == 7;
                    pInfo[playerid][CustomSlot1a] == 1;
                }
                case 28:
                {
                    SellWeapon(playerid,0,8,1);
                    pInfo[playerid][CustomSlot1] == 8;
                    pInfo[playerid][CustomSlot1a] == 1;
                }
                case 29:
                {
                    SellWeapon(playerid,0,9,1);
                    pInfo[playerid][CustomSlot1] == 9;
                    pInfo[playerid][CustomSlot1a] == 1;
                }
                case 30:
                {
                    SellWeapon(playerid,0,10,1);
                    pInfo[playerid][CustomSlot10] == 10;
                    pInfo[playerid][CustomSlot10a] == 1;
                }
                case 31:
                {
                    SellWeapon(playerid,0,11,1);
                    pInfo[playerid][CustomSlot10] == 11;
                    pInfo[playerid][CustomSlot10a] == 1;
                }
                case 32:
                {
                    SellWeapon(playerid,0,12,1);
                    pInfo[playerid][CustomSlot10] == 12;
                    pInfo[playerid][CustomSlot10a] == 1;
                }
                case 33:
                {
                    SellWeapon(playerid,0,13,1);
                    pInfo[playerid][CustomSlot10] == 13;
                    pInfo[playerid][CustomSlot10a] == 1;
                }
                case 34:
                {
                    SellWeapon(playerid,0,14,1);
                    pInfo[playerid][CustomSlot10] == 14;
                    pInfo[playerid][CustomSlot10a] == 1;
                }
                case 35:
                {
                    SellWeapon(playerid,0,15,1);
                    pInfo[playerid][CustomSlot10] == 15;
                    pInfo[playerid][CustomSlot10a] == 1;
                }
                case 36:
                {
                    SellWeapon(playerid,0,41,1);
                    pInfo[playerid][CustomSlot9] == 41;
                    pInfo[playerid][CustomSlot9a] == 1;
                }
                case 37:
                {
                    SellWeapon(playerid,0,42,1);
                    pInfo[playerid][CustomSlot9] == 42;
                    pInfo[playerid][CustomSlot9a] == 1;
                }
            }
        }
    }
Any help would be greatly appreciated.

P.S. This is my first GM guys, if it has any major issues please don't say it sucks or blah blah blah, just let me know and I'll try to fix it!

P.S.S. I apologize if the forum fucks up my indentation, I can assure you it is correct in the actual editor :P
Reply
#2

Ok, I have attempted to save my POS's as Floats but it moved the decimal to the end of the coord and just put a bunch of 0s after the decimal.

Edit: May have messed it up gonna try something else.

Edit 2: Turns out before I forgot to remove the [24] in my enums for when it was a string, and at that point it wasnt saving doubles. So I fixed my enums and tried again, now its returned to saving doubles.
Reply
#3

Bump
Reply
#4

The problem is that your POS_X values are stored in the enum as integers and you're saving them as strings.
While positions really should be floats.
Reply
#5

Ok, any ideas for the double saving?

Edit: Nvm that fixed it. However, now the server seems to fail to load data. I have looked at the player data ini file and it seems to be saving properly, however, the server is failing to load data...

Example:
It always resets me to CJ's skin, resets my guns, spawns me in that farm area in the middle of the map...

Any ideas?
Reply
#6

Bump, still having this issue.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)