Mini parser de log quake 3 (baseq3/games.log) : map et scores à chaque ligne.

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 639 fois - Téléchargée 27 fois

Contenu du snippet

Pour afficher les parties de quake3 avec le nom de la map et les scores sur chaque ligne. Faites-moi part de vos commentaires car je l'ai fait très vite fait et je ne l'ai testé que sur un petit et seul log.

Source / Exemple :


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

$filename="games2.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 : <b>\\2</b> &nbsp; ",$log[$i]);
		$i++;
	}
}
echo "Affichage de la partie la plus récente à la plus ancienne : <br><hr>";

$n=count($test);
$str=current($test); //pointeurs
$str2=current($test2);
$z=0;
for($i=0;$i<$n;$i++){
	$cle=key($test);
	$final[$z] = $str[36]." : "; //case n°36 : 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] .= "<span style=\"color: red\">".$str2."</span>";
		}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], "<b>")>0){  //si pas de score pour la map (jeu pa fini), on n'affiche pas.
		echo $final[$i]."<hr>";
	}
}
?>

Conclusion :


script a tester...

A voir également

Ajouter un commentaire

Commentaires

Messages postés
27
Date d'inscription
mercredi 4 février 2004
Statut
Membre
Dernière intervention
13 mars 2007

oki ;-)
THX !!

je viens de le faire, il est là :
http://www.phpcs.com/code.aspx?ID=27762
Messages postés
64
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
5 juin 2006

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 ;)
Messages postés
27
Date d'inscription
mercredi 4 février 2004
Statut
Membre
Dernière intervention
13 mars 2007

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>";
Messages postés
27
Date d'inscription
mercredi 4 février 2004
Statut
Membre
Dernière intervention
13 mars 2007

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
Messages postés
27
Date d'inscription
mercredi 4 février 2004
Statut
Membre
Dernière intervention
13 mars 2007

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>";
}
}
?>
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.