Parser de fichier .log de serveur de jeux comme Quake III, Urban Terror, Open Arena, Nexuiz ! Il permet de récupérer les points totaux de chaque Joueurs qui peuvent par la suite être utiliser comme sur GameTracker pour des stats de tout les joueurs ! Voir même une possibilité par la suite de créer un espace membre sur votre serveur pour sauver les stats de ceux qui sont inscrits !!!
Source / Exemple :
<?Php
/****************************************************
- Auteur : MEYER Thibault
- Date : Vendredi 25 juillet 2008
- fichier : score.php
?>
<?Php
function EstPresent($Pseudo, $Table)
{
for($i=0; $i < count($Table); $i++)
{
if($Table[$i]["Joueur"] == $Pseudo)
{
return true;
}
}
return false;
}
function LireLog($Fichier)
{
$Log = "";
$hFile = fopen($Fichier, "r");
while(!feof($hFile))
{
$Log .= fgets($hFile);
}
fclose($hFile);
if(strstr($Log, "score:") == NULL) return false;
$answer = array();
preg_match_all('(.*)', $Log, $answer, PREG_SET_ORDER);
$Log = "";
for($i=0,$j=0; $i<count($answer); $i++)
{
if(strstr($answer[$i][0], "score:") != null)
{
$Log[$j++] = $answer[$i][0];
}
}
$Stats = array();
for($i=0; $i<count($Log); $i++)
{
if($i == 0) sscanf($Log[$i], "%d:%d score: %d ping: %d client: %d %s %s %s %s" , $NULL, $NULL, $Stats[$i]["score"], $NULL, $NULL, $Stats[$i]["Joueur"], $Stats[$i]["nom2"], $Stats[$i]["nom3"], $Stats[$i]["nom4"]);
else sscanf($Log[$i], "%d:%d score: %d ping: %d client: %d %s %s %s %s" , $NULL, $NULL, $Stats[$i]["score"], $NULL, $NULL, $Stats[$i]["Joueur"], $Stats[$i]["nom2"], $Stats[$i]["nom3"], $Stats[$i]["nom4"]);
}
for($i=0; $i<count($Stats); $i++)
{
if(@$Stats[$i]["nom2"] != NULL) $Stats[$i]["Joueur"] .= " ".$Stats[$i]["nom2"];
if(@$Stats[$i]["nom3"] != NULL) $Stats[$i]["Joueur"] .= " ".$Stats[$i]["nom3"];
if(@$Stats[$i]["nom4"] != NULL) $Stats[$i]["Joueur"] .= " ".$Stats[$i]["nom4"];
}
//Cration de la liste des joueurs (regroupe les noms en double)
$Stats2[0]["Joueur"] = "";
for($i=0, $j=0; $i < count($Stats); $i++)
{
if(EstPresent($Stats[$i]["Joueur"], $Stats2) == false)
{
$Stats2[$j]["Joueur"] = $Stats[$i]["Joueur"];
$Stats2[$j++]["score"] = 0;
}
}
//Rregroupement des points par Joueurs
for($i=0; $i < count($Stats2); $i++)
{
for($j=0; $j < count($Stats); $j++)
{
if($Stats[$j]["Joueur"] == $Stats2[$i]["Joueur"]) $Stats2[$i]["score"] += $Stats[$j]["score"];
}
}
//Retourne la tableau
return $Stats2;
}
function EffaceLog($Fichier)
{
if(!file_exists($Fichier)) return false;
$hFile = fopen($Fichier, "w");
if(!$hFile) return false;
return true;
}
function array_sort($array, $key)
{
for ($i = 0; $i < sizeof($array); $i++)
{
$sort_values[$i] = $array[$i][$key];
}
asort ($sort_values);
reset ($sort_values);
while (list ($arr_key, $arr_val) = each ($sort_values))
{
$sorted_arr[] = $array[$arr_key];
}
return $sorted_arr;
}
?>
<?
//EXEMPLE
$mesStats = LireLog("games3.log");
$mesStats = array_sort($mesStats, "score");
if($mesStats == false) echo "AUCUNE PARTIE A TRAITER";
else{
for($i=count($mesStats)-1; $i>=0; $i--)
{
echo $mesStats[$i]["Joueur"]." : ".$mesStats[$i]["score"];
echo "<br>";
}
}
//QUAND MISE A JOUR DES JOUEURS SUR LA BASE DE DONNéES, ON VIDE LE JOURNAL
echo "<br>";
//if(EffaceLog("games3.log") == true) echo "EFFACER OK";
//else echo "EFFACER ERREUR";
?>
Conclusion :
Les éléments du tableau "nom2", "nom3"... C'est pour si jamais les gars on des pseudo du genre "Vieux Troll Des Bois" au lieu de "VieuxTrollDesBois"
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.