GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: BuBuNo le 20 Octobre 2009, 21:08:27
-
Salut à tous,
Alors voila pour poursuivre mon DM Stats j'aimerai enfaite que les kill et death des gens soit sauvegarder dans un fichier appeler DmStats.txt.
Bon au moin j'ai essayer xD
Voila j'ai essayer de le faire mais bon sans succes :
public OnPlayerDeath(playerid, killerid, reason)
{
new templine[512];
new tmp[128];
if(killerid != INVALID_PLAYER_ID)
{
Kills[killerid] ++;
Deaths[playerid] ++;
}
else
{
Deaths[playerid] += 1;
}
GetPlayerName(playerid, tmp, MAX_PLAYER_NAME);
new f;
f = fopen("dmstats.txt", io_readwrite);
format(tmp,sizeof(tmp),"Dm Stats\n");
fwrite(f,tmp);
format(tmp,sizeof(tmp),"%s death : %d kill %d\n"Kills[playerid],Deaths[playerid]);
fwrite(f,tmp);
return 1;
}
et voile les erreurs MDR :
C:\Documents and Settings\BrunoLB\Bureau\Ultimate_Stunter\filterscripts\Stats.pwn(47) : warning 213: tag mismatch
C:\Documents and Settings\BrunoLB\Bureau\Ultimate_Stunter\filterscripts\Stats.pwn(49) : warning 213: tag mismatch
C:\Documents and Settings\BrunoLB\Bureau\Ultimate_Stunter\filterscripts\Stats.pwn(50) : error 001: expected token: "-string end-", but found "-identifier-"
C:\Documents and Settings\BrunoLB\Bureau\Ultimate_Stunter\filterscripts\Stats.pwn(50) : warning 215: expression has no effect
C:\Documents and Settings\BrunoLB\Bureau\Ultimate_Stunter\filterscripts\Stats.pwn(50) : warning 215: expression has no effect
C:\Documents and Settings\BrunoLB\Bureau\Ultimate_Stunter\filterscripts\Stats.pwn(50) : error 001: expected token: ";", but found ")"
C:\Documents and Settings\BrunoLB\Bureau\Ultimate_Stunter\filterscripts\Stats.pwn(50) : error 029: invalid expression, assumed zero
C:\Documents and Settings\BrunoLB\Bureau\Ultimate_Stunter\filterscripts\Stats.pwn(50) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Errors.
Merci d'avance de votre aide ;)
EDIT : Ah oui pour info le code commence a la ligne 32
EDIT 2 : Pour les erreurs j'ai trouver :))
Mais sa ne marche pas il ne crée pas de fichier voila ce que j'ai mis :
public OnPlayerDeath(playerid, killerid, reason)
{
new tmp[128];
if(killerid != INVALID_PLAYER_ID)
{
Kills[killerid] ++;
Deaths[playerid] ++;
}
else
{
Deaths[playerid] += 1;
}
GetPlayerName(playerid, tmp, MAX_PLAYER_NAME);
new File:f;
f = fopen("dmstats.txt", io_readwrite);
format(tmp,sizeof(tmp),"Dm Stats\n");
fwrite(f,tmp);
format(tmp,sizeof(tmp),"%s death : %d kill %d\n",Kills[playerid],Deaths[playerid]); //Best complete race times
fwrite(f,tmp);
return 1;
}
-
mais ceci tout en bas de ton script
DMSTATSAVE(playerid)
{
new entrer[256];
new tmp[128];
GetPlayerName(playerid, tmp, MAX_PLAYER_NAME);
format(entrer, sizeof(entrer), "%s death : %d kill %d\r\n",tmp,Kills[playerid],Deaths[playerid]);
new File:hFile;
hFile = fopen("DmStats.txt", io_append);
if (hFile)
{
fwrite(hFile, entrer);
fclose(hFile);
}
}
ensuite
public OnPlayerDeath(playerid, killerid, reason)
{
if(killerid != INVALID_PLAYER_ID)
{
Kills[killerid] ++;
Deaths[playerid] ++;
DMSTATSAVE(playerid);
DMSTATSAVE(killerid);
}
else
{
Deaths[playerid] += 1;
DMSTATSAVE(playerid);
}
return 1;
}
Voila mais sa ne feras pas ce que tu demande car en lisant ton code je voit qu'a chaque kill tu enregistre donc je me suis baser la dessus
PS puis en lisant ton code j'ai reperer une grosse bourde tente de relire tes code comme une histoire tu verras il y a un moment ou sa ne peu pas etre coherent :)
EDIT une personne c'est donner du mal a faire un tuto go le lire http://www.gtaonline.fr/forums/index.php/topic,8555.0.html (http://www.gtaonline.fr/forums/index.php/topic,8555.0.html) tu comprendras pourquoi ton fichier ne pouvais pas ce cree
-
Ah je croit avoir compris pourquoi sa marchait pas car j'avait oublier de fermer le fichier :
bool:fclose(File: handle);
C'est sa ??
-
Mais sa ne marche pas il ne crée pas de fichier voila ce que j'ai mis :
avant de le fermer il aurais fallut qu'il le cree nan
-
Oui mais vue que j'ai utiliser la fonction : io_readwrite
io_readwrite -> Ouverture d'un fichier existant en lecture/écriture ou création d'un nouveau fichier.
-
et comme le fichier n'existe pas il ne peu pas etre ni lut ni ecrit et la fonction ne peu le creer
-
Heu mais alors je voit pas comment faire cree un fichier a part le cree par sois meme xD
-
il y a rien qui te saute aux yeux ???
hFile = fopen("DmStats.txt", io_append);
-
Heu mettre hFile = fcreat("DmStats.txt", io_append); enfin quelque chose comme sa ???
-
si tu ne lit pas tu pourras pas comprendre ...
Moi quand j'ai debuter les seul Tuto etait celui des menu est un autre je ne sais plus lequelle je te laisse imaginer la façon que j'ai proceder pour apprendre
-
Salut,
Bas je suis désoler mais je ne voit pas ou il parle de crée un fichier mais par contre en examinat d'autre FS j'ai remarquer qu'il mettait :
#define BAN_LOG_FILE "/Admin/Ban_Log.txt"
Mais bon il ne crée pas de fichier il dit que BAN_LOG_FILE = /Admin/Ban_Log.txt .
et aussi j'ai examinner le script :
BanLog(playerid, reason[] = "Non communiquer")
{
new tmp[154];
GetPlayerName(playerid, tmp, MAX_PLAYER_NAME);
new year, month, day, hour, minute, second;
getdate(year, month, day);
gettime(hour, minute, second);
format(tmp, sizeof(tmp), "[b] %s [/b] a été banni pour [u] %s [/u] le [i] (%04d/%02d/%02d) [/i] à (%02d:%02d:%02d)\r\n",
tmp, reason, year, month, day, hour, minute, second);
new File:klog;
if(fexist(BAN_LOG_FILE))
{
klog = fopen(BAN_LOG_FILE,io_append);
}
else
{
klog = fopen(BAN_LOG_FILE, io_write);
}
if(!klog)
{
return 0;
}
fwrite(klog, tmp);
fclose(klog);
return 1;
}
Et je ne voit pas tros ou il dit de cree un fichier.
Merci d'avance de votre aide ...
-
io_append lui apparament cree le fichier si il n'est pas existant
-
Oui mais bon la je suis ok mais :
io_readwrite -> Ouverture d'un fichier existant en lecture/écriture ou création d'un nouveau fichier.
Donc explique moi pouquoi syg a marquer sa ???
-
mais apparement ton fichier ne se creer pas donc avec io_append je sais qu'il se cree donc est ce du a un bug a un oublie on ne sais pas
je vient de regarder l'include file
io_readwrite, /* opens an existing file, or creates a new file */ ouvre un fichier existant ou cree un nouveau fichier
il ne precise pas que sa ecrit le fichier
io_append, /* appends to file (write-only) */joint au fichier (creation seulement)
joint au fichier on peu comprendre qu'il va ecrire dedans mais tu ne pourras pas le lire
regarde le code que tu as poster
if(fexist(BAN_LOG_FILE))//si le fichier BAN_LOG_FILE existe
{
klog = fopen(BAN_LOG_FILE,io_append);//on ouvre on ecrit
}
else//sinon
{
klog = fopen(BAN_LOG_FILE, io_write);//on le cree
}
on peu bien comprendre que le else ne sert strictement a rien
new File:klog;
klog = fopen(BAN_LOG_FILE,io_append);
write(klog, tmp);
fclose(klog);
return 1;
fonctionneras de la meme façon
-
Merci crystab de ton aide il cree bien sa :
[XST]BuBuNo death : 0 kill 1
death : 1 kill 0
[DM]_[XST]BuBuNo death : 0 kill 2
death : 2 kill 0
[XST]BuBuNo death : 0 kill 1
death : 3 kill 0
Mais bon comme vous avez pu le voir il il met a chaque fois une nouvelle ligne au lieu de remplacer celle qui porte le meme nom.
Merci d'avance de votre aide
-
La ligne
fopen("dmstats.txt", io_readwrite);
est correcte, elle crée le fichier si il n'existe pas et l'ouvre si il existe.
Et c'est ceci qu'il faut utiliser si tu ne veux qu'une seule ligne dans ton fichier.
Avec io_readwrite, le pointeur d'ecriture est positionné au début du fichier et toute écriture écrasera ce qui se trouve déjà dans le fichier.
Avec io_append, le pointeur d'écriture est positionné à la fin du fichier et les données écrites s'ajouteront à celles déjà présentes dans le fichier.
Par contre, il faut faire attention, lorsque qu'on remplace le contenu du fichier, à ce que la nouvelle ligne soit au moins de la même taille que l'ancienne sinon, l'ancienne ne sera pas totalement écrasée.
Exemple :
Ligne présente dans le fichier:
[DM]_[XST]BuBuNo death : 0 kill 2
Nouvelle ligne à écrire:
[XST]BuBuNo death : 0 kill 1
Contenu du fichier après le remplacement :
[XST]BuBuNo death : 0 kill 1ill 2
Ce qui n'est pas très joli (voire incompréhensible).
Le mieux pour régler ce problème est de supprimer le fichier et de le recréer à chaque fois.
++
Syg
-
Heu pour le debut j'ai comprs mais pour la fin ????
Mais moi je ne veut pas que sa supprime a chaque fois la premiere ligne je veut que si le pseudo [XST]BuBuNo est dans le fichier qu'il rajoute un kill ou un death de plus. Et si par exemple c'est [XST]Johan je veut qu'il recrer un ligne et un de si de suite
-
Tu ne peux pas faire ce que tu veux faire avoir le petit bout de script que tu nous as montré, ça ne marchera pas.
Jette un œil au code de dini (car il fait ce que tu veux faire), tu verras que c'est beaucoup plus compliqué que ça.
++
Syg
-
voila moi je les deja fais avec Dini mais jamais avec les files en faite mais en Dini c'est tres faisable
-
Bas ouai je veut bien vous croire mais maintenant il faut que j'arrive a l'utiliser :)
PS : quelqu'un n'orai pas un tuto sur Dini ???
-
euh non desoler :s
-
Moi je te conseil de faire avec les fonction native de samp et un fichier par joueur c' est plus simple =)
-
Salut,
Oui bonne idee de faire un fichier par joueurs, car en plus j'utilise un system register donc en modifiant un peu je pourai avoir ce que je veut mais bon il me reste encors a trouver comment présenter les 5 meilleur killeur du dm mais pour le compte je vais faire sa tout de suite ;)
-
Beh pour les 5 meilleur c' est tres simple
tu enregistre les score dans un fichier et a chaque kill tu regarde dans le fichier si le joueur à depasser un des meilleur record puis tu le place dedans =)
Mais faut faire attention car a chaque fois il prendras la place d' un gars qui est dans les record mais s' il depasse les 5 et que personne ne le depasse il sera dans tout les record si tu pige pas voila ce qui arrivera
1er sasuke78200
2nd sasuke78200
3rd sasuke78200
4 th sasuke78200
5th sasuke78200
-
Ah ok je voit mais bon je n'arrive pas a crée deja en dini et pour le truc des compte je n'arrive aps non plus mais de préference je prefere que tout les nom soit mis dans un meme fichier :)
Merci d'avance
-
Help please !! ???
Merci d'avance....