MINI PARSER DE LOG QUAKE 3 (BASEQ3/GAMES.LOG) : MAP ET SCORES À CHAQUE LIGNE.

oXid_FoX Messages postés 27 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 13 mars 2007 - 16 nov. 2004 à 13:30
oXid_FoX Messages postés 27 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 13 mars 2007 - 23 nov. 2004 à 13:29
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/23646-mini-parser-de-log-quake-3-baseq3-games-log-map-et-scores-a-chaque-ligne

oXid_FoX Messages postés 27 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 13 mars 2007
23 nov. 2004 à 13:29
oki ;-)
THX !!

je viens de le faire, il est là :
http://www.phpcs.com/code.aspx?ID=27762
antoine129 Messages postés 64 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 5 juin 2006
22 nov. 2004 à 13:30
ok j'ai pas tout lu mais ça m'a l'air sympathique ton code :)
je te conseille de poster un code à part entière pour plus de lisibiité des mises à jour ;)
oXid_FoX Messages postés 27 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 13 mars 2007
22 nov. 2004 à 08:37
j'ai fait qq modif, surtout des ajouts ;-)
le nombre de matches enregistrés, le nom du type de jeu & du mod, et surtout virer les caractères de coloration du nom du joueur
au début du fichier :

$suppr = array("^1","^2","^3","^4","^5","^6","^7","^8","^9","^0","^b","^B"); //couleurs pour le pseudo du joueur
$gametype = array("DM","Tourney","Single player","TDM","CTF");
//rien a faire, c'est juste pour chercher le numero du mod
for($nom_mod=0;$str[$nom_mod]!="gamename";$nom_mod++){
}
$nom_mod += 1; //pour passer à la ligne d'apres (le nom du mod)

//rien a faire, c'est juste pour chercher le numero du type de jeu (0=DM, 1=Tourney, 2=single, 3=TDM, 4=CTF)
for($type_jeu=0;$str[$type_jeu]!="g_gametype";$type_jeu++){
}
$type_jeu += 1; //pour passer à la ligne d'apres (le nom du type de jeu)

echo "
SCORES de Quake 3 (scores individuels)

mod : ".$str[$nom_mod]."

";

plus loin, dans le for
// pour supprimer les caracteres de coloration du nom du joueur
$str2=str_replace($suppr,"",$str2);

après le for :

echo "".$n." matches loggés.

Affichage de la partie la plus récente à la plus ancienne :

<hr>";
oXid_FoX Messages postés 27 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 13 mars 2007
19 nov. 2004 à 12:24
oups, on peut pas éditer....
la principale modif est pour chercher réellement le nom de la map (passke la ligne correspondant dans le tableau $str[] diffère en fonction des mods)

for($nom_map=0;$str[$nom_map]!="mapname";$nom_map++){
//rien a faire, c'est juste pour chercher le numero de la map
//car le numero de la ligne dans le tableau $str[] change en fonction des mods :
//36 -> OSP 1.03 , 34 -> defrag 1.9 , 38 -> defrag 1.7[mais le script ne fonctionne pas] et Quake3 1.32 [sans mod]
}
$nom_map += 1; //pour passer à la ligne d'apres (le nom de la map)

et pour afficher le nom de la map :

$final[$z] = "serveur : ".$str[18]." -- map : ".$str[$nom_map]."
"; //case n°$nom_map : nom de la map
oXid_FoX Messages postés 27 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 13 mars 2007
19 nov. 2004 à 12:21
j'ai travaillé un peu sur le code... je m'y remet ce week-end
voici mes modif :

<?php
/* = ======================================================
Q3 MINI log PARSER - by mOut
mouton_85@hotmail.com
======================================================= */

$filename="D:\Program Files\Quake III Arena\osp\games.log"; //fichier contenant
$log=file($filename);
$n=count($log);
for($i=0;$i<$n;$i++){
if(ereg("InitGame:",$log[$i])){
$test[$i]=explode("\", $log[$i]);
}
while(ereg("score:",$log[$i])){
$test2[$i]=ereg_replace("(.*)score: (.*) ping: (.*) client: (.*) (.*)","\\5 : \\2 ",$log[$i]);
$i++;
}
}
echo "
SCORES de Quake 3 (scores individuels)

Affichage de la partie la plus récente à la plus ancienne :

<hr>";

$n =count($test);
$str= current($test); //pointeurs
$str2=current($test2);
$z=0;

/* permet de connaitre les valeurs recuperees avec leur indice
for($i=0;$i<60;$i++){
echo $str[$i]." i=".$i." <hr>";
}
*/
for($nom_map =0;$str[$nom_map]!= "mapname";$nom_map++){
//rien a faire, c'est juste pour chercher le numero de la map
//car le numero de la ligne dans le tableau $str[] change en fonction des mods :
//36 -> OSP 1.03 , 34 -> defrag 1.9 , 38 -> defrag 1.7[mais le script ne fonctionne pas] et Quake3 1.32 [sans mod]
}
$nom_map += 1; //pour passer à la ligne d'apres (le nom de la map)

for($i=0;$i<$n;$i++){
$cle=key($test);
$final[$z] = " serveur : ".$str[18]." -- map : ".$str[$nom_map]."
"; //case n°$nom_map : nom de la map
$str =next($test);
$cle_suiv=key($test);
$cle2=key($test2);
$winner=TRUE; //gagnant en rouge
while(($cle2<$cle_suiv || !$cle_suiv) && $cle2>$cle){
if($winner){
$final[$z] .= "".$str2."";
}else{
$final[$z] .= $str2;
}
$winner=FALSE;
$str2=next($test2);
$cle2=key($test2);
}
$z++;
}
for($i=count($final)-1;$i>=0;$i--){ //affichage a l'envers
if(substr_count($final[$i], "")>0){ //si pas de score pour la map (jeu pas fini), on n'affiche pas.
echo $final[$i]."<hr>";
}
}
?>
oXid_FoX Messages postés 27 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 13 mars 2007
17 nov. 2004 à 18:09
merki !!!
;-)
antoine129 Messages postés 64 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 5 juin 2006
16 nov. 2004 à 16:07
lol laisse tomber :D
enlève la ligne correspondante :)
c'était au départ inclus dans une page web...


edit: je l'ai enlevé de la source
oXid_FoX Messages postés 27 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 13 mars 2007
16 nov. 2004 à 13:30
euh...
c'est quoi inc.header.php ???
Rejoignez-nous