• 10 Juillet 2025, 19:02:25


Auteur Sujet: Problème d'écriture .ini  (Lu 3164 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Garwan50

  • *
  • Nouveau
  • Messages: 12
    • Voir le profil
Problème d'écriture .ini
« le: 10 Août 2013, 15:16:55 »
Hello,
Bonjour, j'ai un soucis avec Y_INI, j'avais suivis un système de compte sur le tuto forum.samp qui marchait très bien, mais je me suis rendu compte qu'il buguait en créant une commande /retireradmin, qui des qu'un que quelqu'un est admin (1), il ne le soit plus (0), avec quelques printf, j'avais vu que: quand le joueur se connecte, il est admin, apres avoir entré la commande il n'est plus admin, et quand il se deconnecte il n'est plus admin, donc c'est bien l'enregistrement des données dans le .ini qui déconne.

Sauf que la c'est carrément tout le systéme qui déconne, une fois in game, j'ai mes boites de dialogues qui s'ouvrent, je m'inscris sur mon serveur et je spawn, et quand je me déco, dans mon dossier scriptfile>Users, j'ai bien un fichier <pseudo>.ini, mais rien dedans !

Mes differents scripts:

Code: (pawn) [Sélectionner]
enum pInfo
{
        pMdp,
        pArgent,
        pAdmin,
        pKills,
        pDeaths,
       
}
new PlayerInfo[MAX_PLAYERS][pInfo];

Code: (pawn) [Sélectionner]
        if(fexist(UserPath(playerid)))
        {
            INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,COL_WHITE"Login",COL_WHITE"Entrez votre mot de passe pour vous connecter.","Login","Quitter");
        }
        else
        {
            ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,COL_WHITE"Enregistrement",COL_WHITE"Entrez un mot de passe pour votre compte.","Valider","Quitter");
        }

Code: (pawn) [Sélectionner]
public OnPlayerDisconnect(playerid, reason)
{
    new INI:File = INI_Open(UserPath(playerid));
    INI_SetTag(File,"data");
    INI_WriteInt(File,"Cash",GetPlayerMoney(playerid));
    INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
    INI_WriteInt(File,"Kills",PlayerInfo[playerid][pKills]);
    INI_WriteInt(File,"Deaths",PlayerInfo[playerid][pDeaths]);
    INI_Close(File);
 
    gJob[playerid] = 0;
    PlayerInfo[playerid][pAdmin] = 0;
    checkpoint = 0;
    return 1;
}

Code: (pawn) [Sélectionner]
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
        switch(dialogid)
        {
            case DIALOG_REGISTER:
            {
                if(!response) return Kick(playerid);
                if(response)
                {
                    if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, ""COL_WHITE"Enregistrement",""COL_RED"Il faut inserer un mot de passe !\n"COL_WHITE"Entrez votre password ci dessous pour enregistrer votre compte","Valider","Quitter");
                    new INI:File = INI_Open(UserPath(playerid));
                    INI_SetTag(File,"data");
                    INI_WriteInt(File,"Password",udb_hash(inputtext));
                    INI_WriteInt(File,"Cash",0);
                    INI_WriteInt(File,"Admin",0);
                    INI_WriteInt(File,"Kills",0);
                    INI_WriteInt(File,"Deaths",0);
                INI_Close(File);
                    SaveAccount(playerid);
               
                ShowPlayerDialog(playerid, DIALOG_SUCCESS_1, DIALOG_STYLE_MSGBOX,""COL_WHITE"Validé !",""COL_GREEN"Bienvenue ! Reconnectez vous pour sauvegarder vos stats","Ok","");
                }
            }
            case DIALOG_LOGIN:
            {
                if(!response) return Kick(playerid);
                if(response)
            {
                    if(udb_hash(inputtext) == PlayerInfo[playerid][pMdp] )
                    {
                        INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
                        GivePlayerMoney(playerid, PlayerInfo[playerid][pArgent]);
                        ShowPlayerDialog(playerid, DIALOG_SUCCESS_2, DIALOG_STYLE_MSGBOX,""COL_WHITE"Validé!",""COL_GREEN"Connexion réussie ! Bon jeu !","Ok","");
                        if(PlayerInfo[playerid][pAdmin] == 1)
                        {
                            new playername[MAX_PLAYER_NAME];
                            new str[124];
                            GetPlayerName(playerid, playername, sizeof(playername));
                            format(str, sizeof(str), "L'administrateur %s vient de se connecter !", playername);
                            SendClientMessageToAll(COLOR_ADMIN, str);
                        }
                    }
                    else
                    {
                            ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_RED"Vous avez entré un mot de passe incorrect.\n"COL_WHITE"Entre votre mot de passe ci dessous pour vous connecter.","Login","Quitter");
                    }
                    return 1;
            }
 
            }
 
        }
        return 1;
}


Code: (pawn) [Sélectionner]
forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
    INI_Int("Password",PlayerInfo[playerid][pMdp]);
    INI_Int("Cash",PlayerInfo[playerid][pArgent]);
    INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
    INI_Int("Kills",PlayerInfo[playerid][pKills]);
    INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);
    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;
}
 
 
stock udb_hash(buf[]) {
    new length=strlen(buf);
    new s1 = 1;
    new s2 = 0;
    new n;
    for (n=0; n<length; n++)
    {
       s1 = (s1 + buf[n]) % 65521;
       s2 = (s2 + s1)     % 65521;
    }
    return (s2 << 16) + s1;
}

game mode complet: http://pastebin.com/D1zS6YaD

Merci d'avance je desespere assez ^^

Hors ligne Garwan50

  • *
  • Nouveau
  • Messages: 12
    • Voir le profil
Re : Problème d'écriture .ini
« Réponse #1 le: 11 Août 2013, 07:19:35 »
up svp :/

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3551
    • Voir le profil
Re : Problème d'écriture .ini
« Réponse #2 le: 11 Août 2013, 16:24:20 »
Code: (pawn) [Sélectionner]
public OnPlayerDisconnect(playerid, reason)
{
    new INI:File = INI_Open(UserPath(playerid));
    INI_SetTag(File,"data");
    INI_WriteInt(File,"Cash",GetPlayerMoney(playerid));
    INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
    INI_WriteInt(File,"Kills",PlayerInfo[playerid][pKills]);
    INI_WriteInt(File,"Deaths",PlayerInfo[playerid][pDeaths]);
    INI_Close(File);
 
    gJob[playerid] = 0;
    PlayerInfo[playerid][pAdmin] = 0;
    checkpoint = 0;
    return 1;
}


Si tu mets le niveau Admin à 0 après avoir écrit dans le fichier, narmol que ça fonctionne pas déjà. Pour le reste j'ai pas compris


Adju ♥
(-_-)



Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : Problème d'écriture .ini
« Réponse #3 le: 11 Août 2013, 19:02:20 »
Dans le code que tu nous montre, tu as deux systèmes de sauvegarde.

Code: (pawn) [Sélectionner]
public OnPlayerDisconnect(playerid, reason)
{
    new INI:File = INI_Open(UserPath(playerid));
    INI_SetTag(File,"data");
    INI_WriteInt(File,"Cash",GetPlayerMoney(playerid));
    INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
    INI_WriteInt(File,"Kills",PlayerInfo[playerid][pKills]);
    INI_WriteInt(File,"Deaths",PlayerInfo[playerid][pDeaths]);
    INI_Close(File);
 
    gJob[playerid] = 0;
    PlayerInfo[playerid][pAdmin] = 0;
    checkpoint = 0;
    SaveAccount(playerid);
    return 1;
}

Code: (pawn) [Sélectionner]
public SaveAccount(playerid)
{
    if(IsPlayerConnected(playerid))
    {
            new string3[32];
            //new valeur[32];
            new playername3[MAX_PLAYER_NAME];
            GetPlayerName(playerid, playername3, sizeof(playername3));
            format(string3, sizeof(string3), "Users/%s.ini", playername3);
            new File: hFile = fopen(string3, io_write);
            if (hFile)
            {
                new var[32];
                format(var, 32, "Mdp=%s\n", PlayerInfo[playerid][pMdp]);fwrite(hFile, var);
                format(var, 32, "Argent=%d\n",PlayerInfo[playerid][pArgent]);fwrite(hFile, var);
                format(var, 30, "Admin=%d\n",PlayerInfo[playerid][pAdmin]);fwrite(hFile, var);
                format(var, 30, "Meurtres=%d\n",PlayerInfo[playerid][pKills]);fwrite(hFile, var);
                format(var, 30, "Morts=%d\n",PlayerInfo[playerid][pDeaths]);fwrite(hFile, var);
                fclose(hFile);
                //SpawnPlayer(playerid);
            }
    }
    return 1;
}

Donc, évidement, comme tu sauvegarde deux fois de deux façons différentes et entre ces deux sauvegarde, tu retire le rang administrateur du joueur, au final, le joueur est systématiquement un membre.

Donc, déjà, sauvegardé deux fois, c'est inutile, et de deux manières différentes, encore plus !

Hors ligne Garwan50

  • *
  • Nouveau
  • Messages: 12
    • Voir le profil
Re : Re : Problème d'écriture .ini
« Réponse #4 le: 11 Août 2013, 19:44:12 »
Si tu mets le niveau Admin à 0 après avoir écrit dans le fichier, narmol que ça fonctionne pas déjà. Pour le reste j'ai pas compris

Je sauvegarde et apres je le met à zero, sinon si quelqu'un se connecte et a le même ID, il sera admin.

Dans le code que tu nous montre, tu as deux systèmes de sauvegarde.

Donc, évidement, comme tu sauvegarde deux fois de deux façons différentes et entre ces deux sauvegarde, tu retire le rang administrateur du joueur, au final, le joueur est systématiquement un membre.

Donc, déjà, sauvegardé deux fois, c'est inutile, et de deux manières différentes, encore plus !


Oui j'ai retiré le SaveAccount, mais il a déjà tendance à mieux fonctionner que lui, dans la mesure ou le SaveAccount écrit au moins les "variables" dans le .ini, mais rien d'autre, alors que le systeme Y_INI crée juste le pseudo.ini et s'arrête là.

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3551
    • Voir le profil
Re : Re : Re : Problème d'écriture .ini
« Réponse #5 le: 11 Août 2013, 21:45:39 »
Si tu mets le niveau Admin à 0 après avoir écrit dans le fichier, narmol que ça fonctionne pas déjà. Pour le reste j'ai pas compris

Je sauvegarde et apres je le met à zero, sinon si quelqu'un se connecte et a le même ID, il sera admin.

LAL. Non, tant que l'admin a son compte protégé par un MDP personne d'autre sera admin ...  :happy:


Adju ♥
(-_-)



Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : Problème d'écriture .ini
« Réponse #6 le: 11 Août 2013, 23:36:40 »
Donc maintenant, cela devrait fonctionner.

Hors ligne Garwan50

  • *
  • Nouveau
  • Messages: 12
    • Voir le profil
Re : Problème d'écriture .ini
« Réponse #7 le: 12 Août 2013, 04:16:18 »
Ok je savais pas Infu.

Cependant en retirant SaveAccount, ca ne fonctionne toujours pas ^^

Hors ligne Garwan50

  • *
  • Nouveau
  • Messages: 12
    • Voir le profil
Re : Problème d'écriture .ini
« Réponse #8 le: 12 Août 2013, 23:24:08 »
personne ? ^^

Hors ligne Garwan50

  • *
  • Nouveau
  • Messages: 12
    • Voir le profil
Re : Problème d'écriture .ini
« Réponse #9 le: 13 Août 2013, 20:26:15 »
uppp

Hors ligne Garwan50

  • *
  • Nouveau
  • Messages: 12
    • Voir le profil
Re : Problème d'écriture .ini
« Réponse #10 le: 14 Août 2013, 03:33:17 »
Il fallait lancer le serveur en tant qu'admin.

Probleme reglé