convertlog recreatelog potions plantes stats_clan zn_distance stats_kill cartfidel common_function sources outils

Source du fichier stats_clan.php :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
 <head>
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-15">
    <meta name="KEYWORDS" content="heroes,chronicles,HC,potion,potions,PV,calculateur">
        <title>Calculateur des stats de clan HC</title>
        <?php require_once('common_function.php'); include('designhc.html'); ?>
 </head>
  <body><?php include 'outils.php' ?>
  <div id="title">
     <a href="<?php echo query_strip(); ?>"><img src="fp.gif" alt="Lien original" id="accueil" title="Retour au lien original" /></a>
     Calculateur des stats du clan v1.6 <span id="by">(par LittleBoss)</span></div>
  <div id="entete">Cet outil permet d'avoir des stats détaillées des derniers kill de son clan sur <a href="http://heroeschronicles.nainwak.org/">Heroes Chronicles</a>.
  <br />Copier les logs de la page <a href="http://heroeschronicles.nainwak.org/clans/stats.php">stat</a> de votre clan.
  <br />Ce script tient compte du fait que les sans clans n'apportent ni ne font perdre de points.
  <br /><font color=red><u>/!\</u> Attention <u>/!\</u></font> Cet outil ne fonctionne que sur les navigateurs qui copient lors de la sélection aussi les titres des images (en l'occurrence firefox).<br /></div>
<?php
if(isset($_POST['log']) && strlen(trim($_POST['log'])) > 0)  // ne faire que si valider a été cliqué ET SI C'EST PAS VIDE ;)
{
  
    
// définition des variables contenant les balises, fonction secur_ent défini en bas du fichier
    
$log ''// variable qui contiendra le log final
    
    //___ $coup=secur_ent($_POST['coup']);    

    
$fichier_log explode("\n"$_POST['log']);
    echo 
'________________________________''<br />';
    echo 
'Résultat ci dessous''<br />';
    echo 
'¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯''<br />';
    
// boucle qui étudie chaque ligne du log pour le mettre en forme
    # le 07/06 à  18:30 [troll (52)]  [DTC] hargh a tué [undead (21)]   Esbrouf
//    # le 27/05 à  19:28 [undead (39)]  Exar a tué [gnome (38)]  [DTC] MaximusFr
# le 04/06 à  15:30 [elfe (39)]  [DTC] LuneRousse a tué [troll (29)]  [ELITE] Cratorius
//      [DTC] Gimiiiiiik a tué  [SZU] ROARN
    
$nfin true$clan ''$clan2 '';
    
$first_line TRUE$time_deb = array();
    for (
$i=$nfin $i++) {
        if (isset(
$fichier_log[$i])) {
            
$lignei trim($fichier_log[$i]);
            if (
preg_match('`#? ?le (\d+/\d+) à\s+(\d+:\d+)\s+\[\w+ \(\d+\)\]\s+(\[.*\])?\s?.* a tué \[\w+ \(\d+\)\]\s+(\[.*\])?\s*.*`'$lignei ,$match)) {
                if (
$first_line) { $first_line FALSE$time_deb = array('date'=>$match[1],'heure'=>$match[2]); }
                
//echo "$match[0] <br /> $match[3] -- $match[4] <br />"; //  -- $match[7] -- $match[8]
                
if (!isset($match[3])) { $clan $match[4]; $nfin false; }
                elseif (!isset(
$match[4])) { $clan $match[3]; $nfin false; }
                elseif (
$clan == '') { $clan $match[3]; $clan2 $match[4]; }
                else {
                    if (
$match[3] == $clan && $match[4] == $clan2 OR $match[4] == $clan && $match[3] == $clan2) { }
                    elseif (
$match[3] == $clan || $match[3] == $clan2) { $clan $match[3]; $nfin false; }
                    elseif (
$match[4] == $clan || $match[4] == $clan2) { $clan $match[4]; $nfin false; }
                    else echo 
'erreur attribuation clan<br />';
                }
            }
        }
        else 
$nfin=false;
    }
    if (
$clan != '') echo "clan : $clan<br />";
    else echo 
'Clan introuvable<br />';
    
$stats_nous = array ('nb_kill'=>0,'lvl_killer'=>0,'lvl_mort'=>0'lvl_killer_sc'=>0);
    
$stats_eux = array ('nb_kill'=>0,'lvl_killer'=>0,'lvl_mort'=>0'lvl_killer_sc'=>0);
    
$stats_heros = array();
    
$NON true;
    foreach(
$fichier_log as $lignei) {
        
//$lignei = addcslashes(trim($lignei),'-*?+[](){}.^$');
        
if($lignei) { // si la ligne i est non vide
            
if (preg_match('`#? ?le (\d+/\d+) à\s+(\d+:\d+)\s+\[(\w+) \((\d+)\)\]\s+(\[.*\])?\s?(.*) a ([\wé]+) \[(\w+) \((\d+)\)\]\s+(\[.*\])?\s*(.*?)\s?$`'$lignei ,$match)) { 
                if (
$NON$NON false;
                
//echo "$match[0] <br /> $match[1] -- $match[2] -- $match[3] -- $match[4] -- $match[5] -- $match[6] -- $match[7] -- $match[8] -- $match[9] -- $match[10] -- $match[11]<br />";
                //list($tout,$date,$heure,$racek,$lvlk,$clank,$nickk,$action,$racem,$lvlm,$clanm,$nickm)=$match;
                
list($tout,$time['date'],$time['heure'],$tueur['race'],$tueur['lvl'],$tueur['clan'],$tueur['nick'],
                
$action,$mort['race'],$mort['lvl'],$mort['clan'],$mort['nick'])=$match;
                
$tueur['nick'] = ucfirst($tueur['nick']);
                
//print_r($time); echo '<br />'; print_r($tueur); echo '<br />'; print_r($action); echo '<br />'; print_r($mort); echo '<br />';
                
if ($tueur['clan']==$clan$who 'nous'; else $who 'eux';
                ${
'stats_'.$who}['nb_kill']++;
                ${
'stats_'.$who}['lvl_killer'] += $tueur['lvl'];
                if ( 
$tueur['clan'] == '') { ${'stats_'.$who}['lvl_killer_sc'] += $mort['lvl']; }
                if ( 
$mort['clan'] == '') { ${'stats_'.$who}['lvl_killer_sc'] += $mort['lvl']; }
                ${
'stats_'.$who}['lvl_mort'] += $mort['lvl'];
                
                
inc($race["$who"]['kill']["$tueur[race]"]);
                
inc($race["$who"]['mort']["$mort[race]"]);
                
                if (
$clan == $tueur['clan']) ajout_sh($tueur['nick'],$tueur['lvl'],$mort['lvl'],$stats_heros);
                elseif (
$clan == $mort['clan']) ajout_sh($mort['nick'],$mort['lvl'],(-1*$mort['lvl']),$stats_heros);
                
//echo $lignei.'<br />';
                
            
}
        }
    }
    
    if (!
$NON) {
        
$stats_race '<br />';

        
//print_r($stats_heros);

        /*
        foreach ($race['nous']['kill'] as $races => $nb_kill) {
            if ($nb_kill > 1) $s = 's'; else $s = '';
            $stats_race .= "Les $races $clan ont fait $nb_kill kill$s.<br />";
        }
        $stats_race .= '<br />';
        foreach ($race['eux']['mort'] as $races => $nb_kill) {
            if ($nb_kill > 1) { $s = 's'; $vb = 'sont'; } else { $s = ''; $vb = 'est'; }
            $stats_race .= "$nb_kill $races$s $clan $vb mort$s.<br />";
        }
        $stats_race .= '<br />';
        foreach ($race['eux']['kill'] as $races => $nb_kill) {
            if ($nb_kill > 1) $s = 's'; else $s = '';
            $stats_race .= "Les $races ennemis ont fait $nb_kill kill$s.<br />";
        }
        $stats_race .= '<br />';
        foreach ($race['nous']['mort'] as $races => $nb_kill) {
        if ($nb_kill > 1) { $s = 's'; $vb = 'sont'; } else { $s = ''; $vb = 'est'; }
            $stats_race .= "$nb_kill $races$s ennemi$s $vb mort$s.<br />";
        }    
        */
        
$separ ''$separ2 ' | ';
        
$stats_race .= "killeurs $clan<br />";
        if (isset(
$race['nous'])) {
            foreach (
$race['nous']['kill'] as $races => $nb_kill) {
                
$stats_race .= "$separ$races -> $nb_kill";
                if (
$separ == ''$separ $separ2;
            }
        }
        if (
$stats_eux['nb_kill'] > 0) {
            
$stats_race .= "<br />morts $clan<br />"$separ '';
            foreach (
$race['eux']['mort'] as $races => $nb_kill) {
                
$stats_race .= "$separ$races -> $nb_kill";
                if (
$separ == ''$separ $separ2;
            }
            
            
$stats_race .= '<br />killeurs ennemis<br />'$separ '';
            foreach (
$race['eux']['kill'] as $races => $nb_kill) {
                
$stats_race .= "$separ$races -> $nb_kill";
                if (
$separ == ''$separ $separ2;
            }
        }
        else 
$stats_race .= '<br />Les ennemis n\'ont fait aucun kill';
        
$stats_race .= '<br />morts ennemis<br />'$separ '';
        if (isset(
$race['nous'])) {
            foreach (
$race['nous']['mort'] as $races => $nb_kill) {
                
$stats_race .= "$separ$races -> $nb_kill";
                if (
$separ == ''$separ $separ2;
            }
        }
        
//echo $stats_race;
        
        //echo "$stats_nous[lvl_killer_sc] - $stats_eux[lvl_killer_sc]";
        
if ($stats_nous['nb_kill'] > 0$stats_nous['lvl_moyen'] = format_nb($stats_nous['lvl_mort']/$stats_nous['nb_kill']);
        else 
$stats_nous['lvl_moyen'] = 'indéfini';        
        if (
$stats_eux['nb_kill'] > 0$stats_eux['lvl_moyen'] = format_nb($stats_eux['lvl_mort']/$stats_eux['nb_kill']);
        else 
$stats_eux['lvl_moyen'] = 'indéfini';
        
$nb_points $stats_nous['lvl_mort']-$stats_eux['lvl_mort']-$stats_nous['lvl_killer_sc']+$stats_eux['lvl_killer_sc'];
        
        
$fin "le $time_deb[date] à $time_deb[heure].";
        
$debut "le $time[date] à $time[heure].";
        
//$duree = date('Y-m-d H:i:s',(dateToTimestamp($fin) - dateToTimestamp($debut)));
        
$duree_sec dateToTimestamp($fin) - dateToTimestamp($debut);
        
$duree convertSecondesEnHeures($duree_sec);
        
        if (
$duree['jours'] + $duree['heures'] != 0$moyenne_jour = (int) ($nb_points / ($duree['jours'] + $duree['heures']/24));
        else 
$moyenne_jour 'indéfini';
        
$sortie "Premier kill $debut<br />Dernier kill $fin<br />Ce qui fait une durée de $duree[jours] jours et $duree[heures] heures<br /><br />";
        
$sortie .= "$stats_nous[nb_kill] ennemis tués pour un level total de $stats_nous[lvl_mort] (level moyen : $stats_nous[lvl_moyen])<br />$stats_eux[nb_kill] pertes pour un level total de $stats_eux[lvl_mort] (level moyen : $stats_eux[lvl_moyen])<br />Vous avez ainsi ";
        if (
$nb_points 0$sortie .= "perdu $nb_points points.";
        else 
$sortie .= "gagné $nb_points points ";
        
$sortie .= "(moyenne de $moyenne_jour points par jour).";
        
$sortie .= "<br />$stats_race";
        
        if (
$_POST['tri'] == 'a'ksort($stats_heros);
        elseif (
$_POST['tri'] == 'r'uasort($stats_heros'cmp_r');
        else 
arsort($stats_heros);
        
$sortie_h 'Stats par héros : le nombre de points prend en compte les sans clans<br /><br />'
        
$nb_h 0$plus '+';
        foreach(
$stats_heros as $nick => $statsn) {
            if (
$statsn['pts'] < && $plus == '+'$plus '';
            
$ratio round($statsn['pts']/$statsn['lvl'],2);
            
$sortie_h .= "$nick (lvl$statsn[lvl]) : $plus$statsn[pts] points (ratio : $ratio), nb kill : $statsn[nbkill], nb mort : $statsn[nbmort]<br />";
            
$nb_h++;
        }
        
$nb_h+=2;
        
//echo $sortie_h;
    /*
        if (isset($_POST['logurl'])) { // calcul l'url direct avec les paramètres de couleurs choisis
            if ($coup != $dcoup) { $url .= $et . 'coup=' . $coup; $et = '\&'; }
            if (preg_match('`.{4,}`', $url)) {
                echo '________________________________'. '<br />';
                $urlg = 'http://'.$_SERVER["SERVER_NAME"].$_SERVER["PHP_SELF"];
                $urlg .= stripslashes($url);
                ?>
                Pour garder votre configuration de couleur, garder <a href="<?php echo $urlg ?>">ce lien</a> dans vos marques pages. <br /><br />
                <?php
            }
            
        }
    */
        
$sortie str_replace('<br />'"\n",$sortie);
        
$sortie_h str_replace('<br />'"\n",$sortie_h);
        
?>
        <form>
             <p><textarea name="result" rows="16" cols="125" readonly="readonly" onClick="this.focus(); this.select();" ><?php echo stripslashes($sortie?></textarea></p>
             <p><textarea name="result2" rows="<?php echo $nb_h ?>" cols="125" readonly="readonly" onClick="this.focus(); this.select();" ><?php echo stripslashes($sortie_h?></textarea></p>
        </form>
        <?php
    
}
    else echo 
'Entrée incorrect';
}
elseif (isset(
$_POST['log'])) {
    echo 
'Erreur : vous n\'avez pas rempli le log<br />';
}
?>
<!-- Création de la zone de texte pour entrer le log  -->
<form action="<?php echo $_SERVER["REQUEST_URI"]; ?>" method="post">
    <p><input type="submit" value="Valider" />&nbsp;&nbsp;&nbsp;&nbsp;
    Ordre de tri : <label title="tri selon le total de points du joueur"><INPUT type=radio name="tri" value="p" CHECKED>Points</label>
    <label title="tri selon le ratio points/level du joueur"><INPUT type=radio name="tri" value="r">Ratio</label>
    <label title="tri par ordre alphabétique du nick du joueur"><INPUT type=radio name="tri" value="a">Pseudo</label>
</p>
    <p><textarea name="log" rows="20" cols="80" ></textarea></p>
    <p><input type="submit" value="Valider" /></p>
</form>
 <p></p>
 <div id="changelog"><br />Changelog :
 <br />1.6 :
 <br />- Modification graphique
 <br />1.5 :
 <br />- Correction d'un bug, le script ne marchait plus quand il n'y avait pas de # ou autre caractère préfixant les lignes
 <br />1.4 :
 <br />- Ajout du ratio et du choix pour le tri des stats par héros 
 <br />1.3 :
 <br />- Ajout des stats héros par héros
 <br />1.2 :
 <br />- Correction d'une erreur de calcul (inversion level tueur / level tué)
 <br />- Prise en compte du cas particulier 0 perte
 <br />1.1 :
 <br />- Ajout des détails par race
 </h5>
</body>
</html>
<?php
    
    
    
function format_nb($match)    {
        
//echo $match;
        
if (is_numeric($match)) return number_format($match,3,',',' ');
        else return 
$match;
    }
    
    function 
dateToTimestamp($heure)
    { 
// # le 30/06 à  13:50 [elfe (55)]  [DTC] littleboss a tué [troll (64)]  [RTT] Orgrim
        
if (preg_match('`le (\d+)/(\d+) à (\d+):(\d+)`',$heure,$match)) {
            return 
mktime($match[3], $match[4], 0$match[2], $match[1], 2002); 
        }
        else return 
"erreur";
    }
    
    function 
convertSecondesEnHeures($time) {
        
$tabTemps = array("jours" => 86400,
        
"heures" => 3600,
        
"minutes" => 60,
        
"secondes" => 1);

        
$result "";
        
$result['jours'] = 0;
        
$result['heures'] = 0;
        
        foreach(
$tabTemps as $uniteTemps => $nombreSecondesDansUnite) {
            $
$uniteTemps floor($time/$nombreSecondesDansUnite);

            
$time $time%$nombreSecondesDansUnite;

            if($
$uniteTemps || !empty($result))
            
$result["$uniteTemps"] = $$uniteTemps;
        }
        return 
$result;
    }
        
    function 
ajout_sh($nick,$level,$lvlmort,&$sh) {
        if (!isset(
$sh[$nick])) {
            
$sh[$nick] = array('pts' => 0'nbkill' => 0'nbmort' => 0'lvl' => $level);
        }
        if (
$lvlmort >= 0) {
            
$sh[$nick]['pts'] += $lvlmort;
            
$sh[$nick]['nbkill']++;
            
        }
        else {
            
$sh[$nick]['pts'] -= $level;
            
$sh[$nick]['nbmort']++;
        }
    }
    
    function 
inc(&$i
    {
        if (isset(
$i)) $i++;
        else 
$i 1;
    }
    
    function 
cmp_p($a,$b) {
        if (
$a['pts'] == $b['pts']) return 0;
        return 
$a['pts'] < $b['pts'] ? : -1;
    }
    function 
cmp_r($a,$b) {
        if (
$a['pts']/$a['lvl'] == $b['pts']/$b['lvl']) return 0;
        return 
$a['pts']/$a['lvl'] < $b['pts']/$b['lvl'] ? : -1;
    }
    function 
cmp_a($a,$b) {
        if (
$a == $b) return 0;
        return 
$a $b : -1;
    }
?>