GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: mehdi-jumper le 26 Février 2012, 18:29:44

Titre: Bug d'enregistrement de données
Posté par: mehdi-jumper le 26 Février 2012, 18:29:44
Salut à tous,

Ajourd'hui je viens vers vous car je rencontre un problème dans mon système d'enregistrement de données à la connexion/déconnexion.

Lorsque je vais dans mon fichiers d'utilisateur je vois ceci:
Citer
[Données]
Mot de passe = salut
Argent = 0
Admin = 0
Nombre de tues = 0
Mort = 0
Nombre de tues = 0
Voici mon code d'enregistrement:

enum pInfo
{
    pMdp,
    pArgent,
    pAdmin,
    pTues,
    pMort
}
new PlayerInfo[MAX_PLAYERS][pInfo];
forward ChargementJoueur_Donnees(playerid,name[],value[]);
public ChargementJoueur_Donnees(playerid,name[],value[])
{
    INI_Int("Mot de passe:",PlayerInfo[playerid][pMdp]);
    INI_Int("Argent:",PlayerInfo[playerid][pArgent]);
    INI_Int("Admin:",PlayerInfo[playerid][pAdmin]);
    INI_Int("Nombre de tues:",PlayerInfo[playerid][pTues]);
    INI_Int("Mort:",PlayerInfo[playerid][pMort]);
    return 1;
}
    if(fexist(UserPath(playerid)))
    {
        INI_ParseFile(UserPath(playerid), "ChargementJoueur_%s", .bExtra = true, .extra = playerid);
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_WHITE"Tape ton mot de passe pour te connecter.","Login","Quit");
    }
    else
    {
        ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,""COL_WHITE"Enregistrement...",""COL_WHITE"Choisi un mot de passe.","Enregistrer","Quit");
    }
public OnPlayerDisconnect(playerid, reason)
{
    new INI:File = INI_Open(UserPath(playerid));
    INI_SetTag(File,"Données");
    INI_WriteInt(File,"Argent",GetPlayerMoney(playerid));
    INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
    INI_WriteInt(File,"Nombre de tues",PlayerInfo[playerid][pTues]);
    INI_WriteInt(File,"Mort",PlayerInfo[playerid][pMort]);
    INI_Close(File);
    return 1;
}

Comment faire pour n'avoir que 1 seule fois le
Citer
Nombre de tues =
?

Indice qui pourrait vous aider, à chaque fois que je me connecte et me déconnecte, une nouvelle ligne Nombre de tues = apparait
Merci beaucoup!
Titre: Re : Bug d'enregistrement de données
Posté par: Xartrick le 27 Février 2012, 16:29:36
Il doit y avoir deux insertions de données.
Cherche "Nombre de tues:" dans ton code.
Titre: Re : Bug d'enregistrement de données
Posté par: mehdi-jumper le 27 Février 2012, 17:36:43
Oui je sais qu'il doit en avoir 2 mais j'en vois que une.

Voilà tout les codes ou
Citer
Nombre de tues:
apparait:

public ChargementJoueur_Donnees(playerid,name[],value[])
{
    INI_Int("Mot de passe:",PlayerInfo[playerid][pMdp]);
    INI_Int("Argent:",PlayerInfo[playerid][pArgent]);
    INI_Int("Admin:",PlayerInfo[playerid][pAdmin]);
    INI_Int("Nombre de tues:",PlayerInfo[playerid][pTues]);
    INI_Int("Mort:",PlayerInfo[playerid][pMort]);
    INI_Int("Ban:",PlayerInfo[playerid][pBan]);
    return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
    new INI:File = INI_Open(UserPath(playerid));
    INI_SetTag(File,"Données");
    INI_WriteInt(File,"Argent",GetPlayerMoney(playerid));
    INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
    INI_WriteInt(File,"Nombre de tues",PlayerInfo[playerid][pTues]);
    INI_WriteInt(File,"Mort",PlayerInfo[playerid][pMort]);
    INI_WriteInt(File,"Ban",PlayerInfo[playerid][pBan]);
    INI_Close(File);
    return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    
    switch( dialogid )
    {

        case DIALOG_REGISTER:
        {
            if (!response) return Kick(playerid);
            if(response)
            {
                strmid(tmppass, inputtext, 0, strlen(inputtext), 255);
                if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, ""COL_WHITE"Enregistrement...",""COL_RED"Votre mot de passe est incorrect.\n"COL_WHITE"Tape ton mot de passe pour t'enregistrer.","Enregistrer","Quitter");
                new INI:File = INI_Open(UserPath(playerid));
                INI_SetTag(File,"Données");
                INI_WriteString(File,"Mot de passe",tmppass);
                INI_WriteInt(File,"Argent",0);
                INI_WriteInt(File,"Admin",0);
                INI_WriteInt(File,"Nombre de tues",0);
                INI_WriteInt(File,"Mort",0);
                INI_Close(File);
                SpawnPlayer(playerid);
                ShowPlayerDialog(playerid, DIALOG_SUCCESS_1, DIALOG_STYLE_MSGBOX,""COL_WHITE"Félicitation!",""COL_GREEN"Bien, Tu viens de t'inscrire! Bienvenue sur","Ok","");
            }
        }

        case DIALOG_LOGIN:
        {
            if (!response) return Kick (playerid);
            if(response)
            {
                if(strlen(tmppass) == PlayerInfo[playerid][pMdp])
                {
                    INI_ParseFile(UserPath(playerid), "ChargementJoueur_%s", .bExtra = true, .extra = playerid);
                    GivePlayerMoney(playerid, PlayerInfo[playerid][pArgent]);
                    PlayerInfo[playerid][pBan] = 0;
                    ShowPlayerDialog(playerid, DIALOG_SUCCESS_2, DIALOG_STYLE_MSGBOX,""COL_WHITE"Félicitation!",""COL_GREEN"Bienvenue Sur /n Nouveautés:","Ok","");
                }
                else
                {
                    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_RED"Vous avez entré un mot de passe invalide.\n"COL_WHITE"Retape ton mot de passe.","Login","Quitter");
                }
                return 1;
            }
        }
    }
    return 1;
}

Et j'ai aussi un autre problème c'est que si on met pas de mot de passe on arrive a se connecter mais si on en mais un on y arrive pas. Cela viens d'ici:
if(strlen(tmppass) == PlayerInfo[playerid][pMdp])
la structure est mauvaise? j'utilise pas ce qu'il faut? Merci de m'aider je galère pour ceci

Voilà
Titre: Re : Bug d'enregistrement de données
Posté par: Xartrick le 27 Février 2012, 19:33:48
Si tu veux comparer deux chaînes, utiliser strcmp.