• 09 Juin 2024, 18:03:23


Auteur Sujet: Problème Y_ini  (Lu 1542 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Xx_Men_xX

  • *
  • Nouveau
  • Messages: 19
    • Voir le profil
Problème Y_ini
« le: 29 Mai 2014, 12:35:13 »
Bonjour à tous,

J'ai un problème, je créer un système de register/login à l'aide de ce tuto: http://forum.sa-mp.com/showthread.php?t=273088 . Il marchais bien jusqu'a présent et depuis que j'ai mis les positions X, Y, Z et l'angle A à sauvegarder lors de la déconnection, sa fait n'importe quoi, je comprend pas ce qui ne vas pas. Ce qui ce passe c'est que, les positions dans le fichier .ini sont réécrites les unes à la suite des autres, à chaque déconnexion elle "s'entasse" comme ceci:

Fichier .ini aprés plusieurs déconnexion
Code: (c) [Sélectionner]
[data]
Password = 236847831
Cash = 500
Sex = 1
Age = 20
Admin = 0
Skin = 30
InteriorID = 0
X position = -1964.857055
Y position = 139.000274
Z position = 27.694049
A angle = 38.540363
X position = -1972.422485
Y position = 138.947311
Z position = 27.687500
A angle = 52.327156
X position = 132.000000
Y position = -67.291633
Z position = 1.578125
A angle = 0.000000

Normalement il faudrait juste que ça fasse:
Code: (c) [Sélectionner]
[data]
Password = 236847831
Cash = 500
Sex = 1
Age = 20
Admin = 0
Skin = 30
InteriorID = 0
X position = -1964.857055
Y position = 139.000274
Z position = 27.694049
A angle = 38.540363

Défois je spawn au coordonnées X=0, Y=0,Z=0 sous la map dans un champs.

Voici le code:
Code: (pawn) [Sélectionner]
public OnPlayerDisconnect(playerid, reason) // Quand le joueur se déconnecte
{
    new name[MAX_PLAYER_NAME], str[MAX_STRING];
   
    GetPlayerName(playerid, name, sizeof(name));
    format(str, sizeof(str), "%s a quitté le serveur", name);
    SendClientMessageToAll(COLOR_GREY, str);
   
    if(register_complete == true)
    {
  PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid);
  PlayerInfo[playerid][pSkin] = GetPlayerSkin(playerid);
  GetPlayerPos(playerid, PlayerInfo[playerid][pXpos], PlayerInfo[playerid][pYpos], PlayerInfo[playerid][pZpos]);
  GetPlayerFacingAngle(playerid, PlayerInfo[playerid][pAangle]);
  PlayerInfo[playerid][pInteriorID] = GetPlayerInterior(playerid);


  new INI:File = INI_Open(UserPath(playerid));
      INI_SetTag(File,"data");
      INI_WriteInt(File,"Password",PlayerInfo[playerid][pPass]);
      INI_WriteInt(File,"Cash",PlayerInfo[playerid][pCash]);
      INI_WriteInt(File,"Sex",PlayerInfo[playerid][pSex]);
      INI_WriteInt(File,"Age",PlayerInfo[playerid][pAge]);
      INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
      INI_WriteInt(File,"Skin",PlayerInfo[playerid][pSkin]);
      INI_WriteInt(File,"InteriorID",PlayerInfo[playerid][pInteriorID]);
      INI_WriteFloat(File,"X position",PlayerInfo[playerid][pXpos]);
      INI_WriteFloat(File,"Y position",PlayerInfo[playerid][pYpos]);
      INI_WriteFloat(File,"Z position",PlayerInfo[playerid][pZpos]);
      INI_WriteFloat(File,"A angle",PlayerInfo[playerid][pAangle]);
  INI_Close(File);
     

   
    }
   
    else
    {
   
   
    }

return 1;
}
Code: (pawn) [Sélectionner]
public OnPlayerSpawn(playerid)
{
    TogglePlayerSpectating(playerid, 0);
    StopAudioStreamForPlayer(playerid);
   
    if(first_spawn == true)
    {
  SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
  SetPlayerPos(playerid,-1964.1395,138.2326,27.6940);
      SetPlayerFacingAngle(playerid,90.1103);
      SetPlayerInterior(playerid, 0);
    }
   
else
{
      SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
  SetPlayerPos(playerid, PlayerInfo[playerid][pXpos],PlayerInfo[playerid][pYpos], PlayerInfo[playerid][pZpos]);
  SetPlayerFacingAngle(playerid, PlayerInfo[playerid][pAangle]);
  SetPlayerInterior(playerid, PlayerInfo[playerid][pInteriorID]);
 
}
   
   
     


return 1;
}


Code: (pawn) [Sélectionner]
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
PlayerInfo[playerid][pCash] = 500;                     // Register
              GivePlayerMoney(playerid, PlayerInfo[playerid][pCash]);
              PlayerInfo[playerid][pXpos] = 0.0;
              PlayerInfo[playerid][pYpos] = 0.0;
              PlayerInfo[playerid][pZpos] = 0.0;
             
              first_spawn = true;
              register_complete = true;
             
 
             
              new INI:File = INI_Open(UserPath(playerid));
              INI_SetTag(File,"data");
              INI_WriteInt(File,"Password",PlayerInfo[playerid][pPass]);
              INI_WriteInt(File,"Cash",PlayerInfo[playerid][pCash]);
              INI_WriteInt(File,"Sex",PlayerInfo[playerid][pSex]);
              INI_WriteInt(File,"Age",PlayerInfo[playerid][pAge]);
              INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
              INI_WriteInt(File,"Skin",PlayerInfo[playerid][pSkin]);
       
       
       
       
              INI_WriteInt(File,"InteriorID",PlayerInfo[playerid][pInteriorID]);
     
  INI_Close(File);
}

Code: (pawn) [Sélectionner]
forward LoadUser_data(playerid,name[],value[]);

public LoadUser_data(playerid,name[],value[])
{
    INI_Int("Password",PlayerInfo[playerid][pPass]);
    INI_Int("Cash",PlayerInfo[playerid][pCash]);
    INI_Int("Sex",PlayerInfo[playerid][pSex]);
    INI_Int("Age",PlayerInfo[playerid][pAge]);
    INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
    INI_Int("Skin",PlayerInfo[playerid][pSkin]);
    INI_Float("X position",PlayerInfo[playerid][pXpos]);
    INI_Float("Y position",PlayerInfo[playerid][pYpos]);
    INI_Float("Z position",PlayerInfo[playerid][pZpos]);
    INI_Float("A angle",PlayerInfo[playerid][pAangle]);
    INI_Int("InteriorID",PlayerInfo[playerid][pInteriorID]);
   

    return 1;
}

Si il manque des paranthèses ou autre dans certain bout de code, c'est normal, j'ai mis juste le nécessaire vite fait.

Merci d'avance pour votre aide.
« Modifié: 29 Mai 2014, 16:30:21 par Gzsume »

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Problème Y_ini
« Réponse #1 le: 29 Mai 2014, 13:14:04 »
Salut, je pense pas que tu puisse mettre des espaces dans le nom des clés, essaye de mettre des underscores ('_') à la place.



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Xx_Men_xX

  • *
  • Nouveau
  • Messages: 19
    • Voir le profil
Re : Re : Problème Y_ini
« Réponse #2 le: 29 Mai 2014, 13:25:15 »
Salut, je pense pas que tu puisse mettre des espaces dans le nom des clés, essaye de mettre des underscores ('_') à la place.
C'est quoi un nom de clé ?  :tongue:

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : Problème Y_ini
« Réponse #3 le: 29 Mai 2014, 13:46:24 »
Code: (pawn) [Sélectionner]
cle = valeur

// Exemple
Position_X = 0.0
// Position_X est la clé
// 0.0 est la valeur

Lorsque tu utilises une clé avec un espace, l'algorithme de recherche de la clé dans le fichier .ini se plante (parce que ce cas de figure n'est pas prévu). Comme Ssk te l'indique, tu dois utiliser un underscore à la place de l'espace.

Hors ligne Xx_Men_xX

  • *
  • Nouveau
  • Messages: 19
    • Voir le profil
Re : Problème Y_ini
« Réponse #4 le: 29 Mai 2014, 14:03:12 »
Merci pour les explications Gzsume !

Voilà ce que j'ai fait, par exemple:
Code: (pawn) [Sélectionner]
INI_WriteFloat(File,"X_position",PlayerInfo[playerid][pXpos]);
INI_WriteFloat(File,"Y_position",PlayerInfo[playerid][pYpos]);
INI_WriteFloat(File,"Z_position",PlayerInfo[playerid][pZpos]);

J'ai remplacé tous les espaces des noms de clés par un "_".
Et oui en effet sa marche!! Depuis hier, je me faisait chier à chercher dans tous les sens le problème, et en fait le bug été tous con, j'avait mis des espaces, et sa faisait planté Y_ini :embarrassed:

Merci à vous deux!! Au moins je le sais maintenant qu'il ne faut pas mettre d'espace dans les noms de clé avec Y_ini.