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
-
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+ ;)
-
D'après moi, la fonction qui permet d'enregistrer une integer est: dini_SetInt(File[], Key[], int Value);
-
C'est déjà la fonction que j'utilise mais elle ne sauvegarde rien:
new str[150];
dini_IntSet(str,"Kills",pkills[playerid]);
-
Il faudrait formatter ta chaîne de charactère avant de sauvegarder quoique ce soit dessus.
Exemple:
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]);
;)
-
Pour les strings, c'est dini_Set( fichier[], tag[], string[])
Spiirou
++
-
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
-
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]);
-
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
++
-
De plus
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 ?
-
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;
}
-
Mise a jour de mon post ;)
Tu as tout comme ça.
Spiirou
++
-
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é ^^.
-
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
-
je pense que je vais creer un tuto pour Dini sa serviras a tous je pense ^^
-
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+ ;)