GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: LePtitClown le 05 Janvier 2011, 19:13:09

Titre: Comment enregistrer une variable en dini
Posté par: LePtitClown le 05 Janvier 2011, 19:13:09
Slt

Est ce que quelqu'un pourrait m'expliquer comment enregistrer une variable en dini. J'ai tout essayé. :(
PS: J'utilise ce script pour mon système d'enregistrement: http://pbox.ca/17mtx (http://pbox.ca/17mtx)


Merci d'avance pour votre aide,

A+ ;)
Titre: Re : Comment enregistrer une variable en dini
Posté par: Tux le 05 Janvier 2011, 19:25:31
D'après moi, la fonction qui permet d'enregistrer une integer est: dini_SetInt(File[], Key[], int Value);
Titre: Re : Comment enregistrer une variable en dini
Posté par: LePtitClown le 05 Janvier 2011, 19:37:40
C'est déjà la fonction que j'utilise mais elle ne sauvegarde rien:

new str[150];
dini_IntSet(str,"Kills",pkills[playerid]);
Titre: Re : Comment enregistrer une variable en dini
Posté par: Tux le 05 Janvier 2011, 19:44:31
Il faudrait formatter ta chaîne de charactère avant de sauvegarder quoique ce soit dessus.
Exemple:
Code: (pawn) [Sélectionner]
new str[MAX_PLAYER_NAME+4]; // Longueur du nom d'un joueur + l'extension du fichier
new name[MAX_PLAYER_NAME]; // Nom du joueur
GetPlayerName(playerid,  name, MAX_PLAYER_NAME);
format(str, MAX_PLAYER_NAME+4, "%s.ini", name);
dini_IntSet(str, "Kills", pkills[playerid]);


;)
Titre: Re : Comment enregistrer une variable en dini
Posté par: spiirou le 05 Janvier 2011, 19:46:49
Pour les strings, c'est dini_Set( fichier[], tag[], string[])

Spiirou
++
Titre: Re : Re : Comment enregistrer une variable en dini
Posté par: cristab le 05 Janvier 2011, 19:48:20
C'est déjà la fonction que j'utilise mais elle ne sauvegarde rien:

new str[150];
dini_IntSet(str,"Kills",pkills[playerid]);
Voila l'erreure que je redoutter mais tu es partit de msn

Titre: Re : Comment enregistrer une variable en dini
Posté par: LePtitClown le 05 Janvier 2011, 20:10:47
Je viens de tester avec ton code Tux, il sauvegarde très bien.
Mais une question que je me pose c'est pourquoi mon ancien code était faux alors qu'il reprenait les même données que toi ( mon ancien code = le script de départ de Rambo que je modifie à ma sauce )
stock CompteJoueur(playerid)
{
new str2[MAX_PLAYER_NAME+20];//avant c'était +5
format(str2,sizeof(str2),"%s.data",nom(playerid));
return str2;
}
Et mon enregistrement dans onplayerdisconnect:
        dini_IntSet(CompteJoueur(playerid),"Kills",pkills[playerid]);

Le plus important c'est que ça marche. L'autre problème maintenant, c'est que lors du login, c'est comme si la sauvegarde était détruite. En effet, toutes mes variables retournent à 0.
Voici mon code pour sauvegarder les variables dans onplayerdisconnect:
dini_Set(CompteJoueur(playerid), "Kills", pkills[playerid]);
Titre: Re : Comment enregistrer une variable en dini
Posté par: spiirou le 05 Janvier 2011, 20:13:27
dini_Exists(filename[]) // Si le fichier existe
dini_Remove(filename[]) // Supprimer le fichier
dini_Create(filename[]) // Creer le fichier
dini_Get(filename[],key[]) // Lire un string dans un fichier
dini_Set(filename[],key[],value[]) // Mettre un string dans un fichier
dini_IntSet(filename[],key[],value) // Mettre un nombre dans un fichier
dini_Int(filename[],key[]) // Lire un nombre dans un fichier
dini_FloatSet(filename[],key[],Float:value) // Ecrire un Float: dans un fichier
Float:dini_Float(filename[],key[]) // Lire un Float: dans un fichier
dini_BoolSet(filename[],key[],value) // Ecrire un booleen dans un fichier
dini_Bool(filename[],key[]) // Lire un booleen dans un fichier
dini_Unset(filename[],key[]) // Enlever la variable
dini_Isset(filename[],key[]) // Si la variable existe
DINI_StripNewLine(string[]) // Ecrire une nouvelle ligne
DINI_fcopytextfile(oldname[],newname[]) // Copier le fichier vers un autre




J'espere ne pas dire de bêtises,

Spiirou
++
Titre: Re : Comment enregistrer une variable en dini
Posté par: Tux le 05 Janvier 2011, 20:15:15
De plus

Code: (pawn) [Sélectionner]
stock CompteJoueur(playerid)
{
new str2[MAX_PLAYER_NAME+20];//avant c'était +5
format(str2,sizeof(str2),"%s.data",nom(playerid));
return str2;
}

Et la fonction nom() est-elle correcte ?
Titre: Re : Comment enregistrer une variable en dini
Posté par: LePtitClown le 05 Janvier 2011, 20:21:01
Merci spiroo ça devrait m'aider ça :)

Voici la fonction name:
stock nom(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
return name;
}
Titre: Re : Comment enregistrer une variable en dini
Posté par: spiirou le 05 Janvier 2011, 20:23:43
Mise a jour de mon post ;)
Tu as tout comme ça.

Spiirou
++
Titre: Re : Re : Comment enregistrer une variable en dini
Posté par: Tux le 05 Janvier 2011, 20:25:55
Merci spiroo ça devrait m'aider ça :)

Voici la fonction name:
stock nom(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
return name;
}

Le code semble correct... C'est étrange... Enfin bon, ça peut aussi venir du fait que le code est assez compressé ^^.
Titre: Re : Comment enregistrer une variable en dini
Posté par: LePtitClown le 05 Janvier 2011, 20:30:04
Et pour le login vous avez des idées, car j'ai essayé avec les indications de spiroo, j'ai donc utilisé dini_int car je veux lire la variable au moment de se loguer.
J'ai donc mis:
new str[MAX_PLAYER_NAME+4];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,  name, MAX_PLAYER_NAME);
format(str, MAX_PLAYER_NAME+4, "%s.data", name);
dini_Int(str,"Kills",pkills[playerid]);
Mais je reçois comme erreur:
C:\Users\Utilisateur\Desktop\samp 0.3c\gamemodes\01_01_11d.pwn(7307) : warning 202: number of arguments does not match definition
Titre: Re : Comment enregistrer une variable en dini
Posté par: cristab le 05 Janvier 2011, 20:53:35
je pense que je vais creer un tuto pour Dini sa serviras a tous je pense ^^
Titre: Re : Comment enregistrer une variable en dini
Posté par: LePtitClown le 05 Janvier 2011, 21:03:32
Merci beaucoup à tous le monde, tous mes problèmes sur dini sont résolus pour le moment.
je donne quand même la réponse que m'a donné rambo car je n'aime pas les topic sans réponses:

pdeaths[playerid] = dini_Int(CompteJoueur(playerid),"Deaths");

Bonne soirée,

A+ ;)