convertlog recreatelog potions plantes stats_clan zn_distance stats_kill cartfidel common_function sources outils

Source du fichier plantes.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,plante,plantes,alchimie">
        <title>Répartition des plantes HC</title>
        <?php require_once('common_function.php'); include('designhc.html'); ?>
 </head>
 <style type="text/css">
.couleur_cel_b {
    color: purple;
}
.couleur_cel0 {
    color: black;
}
.couleur_cel1 {
    color: green;
}
.couleur_cel2 {
    color: blue;
}
.couleur_cel3 {
    color: red;
}
</style>
<script type="text/javascript">
<!--
function affichage(liste_pla) {
    document.getElementById('aff').innerHTML = liste_pla;
}
function dectoute() {
    if(document.getElementById('toute').checked==true){
        document.getElementById('toute').checked=false;
    }
}
-->
</script>
  <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>
     Répartition des plantes v1.8 <span id="by">(par LittleBoss)</span></div>
  <div id="entete"><noscript><font color="red">Activer le javascript afin de pouvoir utiliser toutes les possibilités de cet outil</font><br /></noscript>
  Cet outil permet d'obtenir un rapide aperçu de la répartition des plantes de la détection sur <a href="http://heroeschronicles.nainwak.org/">Heroes Chronicles</a>.
  <br />Copier ci dessous toute votre détection objet (clique dans la détection objet, controle A, controle C).
  <a href="#" class="affnext" onclick="affiche(this,'findescr');return false;"><br />Afficher la suite</a>
  <span id="findescr">
  <br />Survoler une case pour afficher les plantes de la case.
  <br />Faites page précédente pour changer quelque chose sans avoir à tout rerentrer.
  <br />La recherche automatique de sa position actuelle peut se tromper dans le cas d'une détection avec très peu d'objets.
  <br />Rester sur une entrée de formulaire pour que s'affiche les détails de son utilisation.
  </span>
  <br /><span id="whatnew">NEW : affichage de la position des auberges et des magasins de magie</span>
  </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
    
    $fichier_log = explode("\n", $_POST['log']);

    // boucle qui étudie chaque ligne du log pour le mettre en forme
    
    
    $verif = TRUE; $actuel_pla = '';
    $etape = 1;    $lig = 0; $col = 0; $incer = '';
    $col_case = secur_ent($_POST['col_case']);
    if (!is_int($col_case)) $verif = FALSE;
    $lig_case = secur_ent($_POST['lig_case']);
    if (!is_int($lig_case)) $verif = FALSE;
    $nb_case = secur_ent($_POST['nb_case']);
    if (!is_int($nb_case)) $verif = FALSE;
    if ($nb_case < 1 || $nb_case > 4) { $nb_case = 4; }
    
    if (!isset($_POST['toutes'])) {
        $toutes = FALSE;  $etape = 0;
        $regex_pla = ''; $sep = '';
        if (isset($_POST['alk'])) { $regex_pla .= 'Alkandyr salum'; $sep = '|'; }
        if (isset($_POST['amy'])) { $regex_pla .= $sep.'Amyris cepa'; $sep = '|'; }
        if (isset($_POST['ang'])) { $regex_pla .= $sep.'Angelica glauca'; $sep = '|'; }
        if (isset($_POST['ast'])) { $regex_pla .= $sep.'Astrae luna'; $sep = '|'; }
        if (isset($_POST['azr'])) { $regex_pla .= $sep.'Azralae oxalis'; $sep = '|'; }
        if (isset($_POST['bli'])) { $regex_pla .= $sep.'Blinium procera'; $sep = '|'; }
        if (isset($_POST['eto'])) { $regex_pla .= $sep.'Etoilum mortem'; $sep = '|'; }
        if (isset($_POST['mol'])) { $regex_pla .= $sep.'Moleculus Herba'; $sep = '|'; }
        if (isset($_POST['pyr'])) { $regex_pla .= $sep.'Pyros lavae'; $sep = '|'; }
        if (isset($_POST['tau'])) { $regex_pla .= $sep.'Taurinum nainis'; $sep = '|'; }
        if (isset($_POST['champi'])) { $regex_pla .= $sep.'Aurisse|Bromoure|Eiffeti|Feith|Foltris|FracheBlou|Gachprom|Ilphyis|Iridioum|Kantas|Konbandite|Mangniftov|Pinquetivi|Sanghi|Vespeine|Warth'; }
        //echo $regex_pla;
    }
    else { $toutes = TRUE; $regex_pla = 'Alkandyr salum|Amyris cepa|Angelica glauca|Astrae luna|Azralae oxalis|Blinium procera|Etoilum mortem|Moleculus Herba|Pyros lavae|Taurinum nainis|Aurisse|Bromoure|Eiffeti|Feith|Foltris|FracheBlou|Gachprom|Ilphyis|Iridioum|Kantas|Konbandite|Mangniftov|Pinquetivi|Sanghi|Vespeine|Warth'; }
    if ($verif) {
        $position['colmin'] = $col_case - $nb_case;
        $position['colmax'] = $col_case + $nb_case;
        $position['ligmin'] = $lig_case - $nb_case;
        $position['ligmax'] = $lig_case + $nb_case;
        //remplissage du tableau
        foreach($fichier_log as $lignei) {
            $lignei = trim($lignei); 
            if($lignei) { // si la ligne i est non vide    
                if (preg_match("`($regex_pla)`", $lignei,$match)) {
                    if ($etape == 0 && !$toutes) { $etape = 1; }
                    $actuel_pla = $match[0];
                }    
                elseif ( $etape == 1 && preg_match('`Distance : \d - Position : (\d+),(\d+)`', $lignei, $match)) { 
                    $etape = 2; $col = $match[1]; $lig = $match[2];
                }
                elseif ($etape == 2) {
                    if (preg_match('`Type: Plante`', $lignei, $match)) { 
                        inc($nb_plante[$lig][$col]); allonge($liste_pla[$lig][$col],$actuel_pla);
                    }
                    if ($toutes) $etape = 1;
                    else $etape = 0;
                }                        
            }
        }    
    }
    else {
        $rlig[0] = 0; $rcol[0] = 0;
        $position['ligmin'] = 200; $position['ligmax'] = 0; $position['colmin'] = 200; $position['colmax'] = 0;
        foreach($fichier_log as $lignei) {
            $lignei = trim($lignei); 
            if($lignei) { // si la ligne i est non vide
                if (preg_match("`($regex_pla)`", $lignei,$match)) {
                    if ($etape == 0 && !$toutes) { $etape = 1; }
                    $actuel_pla = $match[0];
                }                
                elseif (preg_match('`Distance : (\d) - Position : (\d+),(\d+)`', $lignei, $match)) { 
                    //recherche de position
                    if ($col != $match[2] || $lig != $match[3]) { // pour éviter la procédure compare_pos de comparer deux positions identiques
                        $col = $match[2]; $lig = $match[3]; $dist = $match[1];
                        //if ($lig == '54' && $col == '43') echo "<br />case $col,$lig";
                        if ($rlig[0] != 1) {
                            if ($rlig[0] == 0) { liste_pos($rlig,$lig,$dist); }
                            else compare_pos($rlig,$lig,$dist);
                        }
                        if ($rcol[0] != 1) {
                            if ($rcol[0] == 0) { liste_pos($rcol,$col,$dist); }
                            else compare_pos($rcol,$col,$dist);
                        }
                        //if ($lig == '54' && $col == '43') echo "fin<br />";
                    }
                    else { $col = $match[2]; $lig = $match[3]; }
                    if ($etape == 1) $etape = 2;
                }
                elseif ($etape == 2) {
                    if (preg_match('`Type: Plante`', $lignei, $match)) { 
                        inc($nb_plante[$lig][$col]); allonge($liste_pla[$lig][$col],$actuel_pla);
                        if ($col < $position['colmin']) $position['colmin'] = $col;
                        if ($col > $position['colmax']) $position['colmax'] = $col;
                        if ($lig < $position['ligmin']) $position['ligmin'] = $lig;
                        if ($lig > $position['ligmax']) $position['ligmax'] = $lig;    
                    }
                    if ($toutes) $etape = 1;
                    else $etape = 0;
                }                        
            }
        }
        if ($rcol[0] != 1 || $rlig[0] != 1) {
            $tab_lig = $rlig[1]; $tab_col = $rcol[1];
            if (isset($nb_plante[$tab_lig][$tab_col])) {
                rech_case($rcol,$rlig,$nb_plante);
            }
            $incer = ' (erreur possible)';
        }
        $col_case = $rcol[1];
        $lig_case = $rlig[1];
        
        $position['colmin'] = min($col_case,$position['colmin']);
        $position['colmax'] = max($col_case,$position['colmax']);
        $position['ligmin'] = min($lig_case,$position['ligmin']);
        $position['ligmax'] = max($lig_case,$position['ligmax']);
    }

    echo "Votre position : $col_case,$lig_case$incer";
        
    initPositionAuberges($posAuberges);
    initPositionMagie($posMago);

    $bgcolor = '';
    
    $tab_affichage = '<table BORDER><td></td>';
    for($j = $position['colmin'] ; $j <= $position['colmax'] ; $j++) {
        $tab_affichage .= '<td ALIGN="center" WIDTH="30" HEIGHT="30" >'.$j.'</td>';
    }
    
    for($i = $position['ligmin'] ; $i <= $position['ligmax'] ; $i++) {
        $tab_affichage .= '</tr><tr><td ALIGN="center" WIDTH="30" HEIGHT="30" >'.$i.'</td>';
        for($j = $position['colmin'] ; $j <= $position['colmax'] ; $j++) {
            if (!isset($nb_plante[$i][$j])) { $nb_plante[$i][$j] = ''; $liste_pla[$i][$j] = ''; }
            //$tab_affichage .= '<td ALIGN="center" WIDTH="30" HEIGHT="30">'.$nb_plante[$i][$j].'</td>';
            $nb_act = $nb_plante[$i][$j]; if ($nb_act >6) $k=3; elseif ($nb_act>3) $k=2; elseif ($nb_act>0) $k=1; else $k=0;
            if ($i == $lig_case && $j == $col_case) { $bgcolor = ($k==2)? 'bgcolor="darkblue" ':'bgcolor="blue" '; }
            elseif(isset($posAuberges[$j][$i])) { $bgcolor = 'bgcolor="orange"'; }
            elseif(isset($posMago[$j][$i])) { $bgcolor = 'bgcolor="yellow"'; }
            $tab_affichage .= "<td onmouseover=\"javascript:affichage('$j,$i :<br />".$liste_pla[$i][$j]."')\" ALIGN=\"center\" $bgcolor class=\"couleur_cel$k\" >".$nb_act.'</td>';
            $bgcolor = '';
        }
    }
    $tab_affichage .= '</table>';
    
    echo "<table><td valign=\"top\" >$tab_affichage";
    echo "</td><td id=\"aff\"></td></table>";
/*
    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
        }
        
    }
*/
}
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" /></p>
    <label class="labelbox" title="Visualiser toutes les plantes">Toute les plantes : <input type="checkbox" name="toutes" value="1" checked="check" id="toute" /></label>
    <label title="Tous les Champignons">Champi : <input type="checkbox" name="champi" value="1" onClick="javascript:dectoute()" /></label>&nbsp;&nbsp;
    <label title="Alkandyr salum">Alk <input type="checkbox" name="alk" value="0" onClick="javascript:dectoute()" /></label>&nbsp;&nbsp;
    <label title="Amyris cepa">Amy <input type="checkbox" name="amy" value="0" onClick="javascript:dectoute()" /></label>&nbsp;&nbsp;
    <label title="Angelica glauca">Ang <input type="checkbox" name="ang" value="0" onClick="javascript:dectoute()" /></label>&nbsp;&nbsp;
    <label title="Astrae luna">Ast <input type="checkbox" name="ast" value="0" onClick="javascript:dectoute()" /></label>&nbsp;&nbsp;
    <label title="Azralae oxalis">Azr <input type="checkbox" name="azr" value="0" onClick="javascript:dectoute()" /></label>&nbsp;&nbsp;
    <label title="Blinium procera">Bli <input type="checkbox" name="bli" value="0" onClick="javascript:dectoute()" /></label>&nbsp;&nbsp;
    <label title="Etoilum mortem">Eto <input type="checkbox" name="eto" value="0" onClick="javascript:dectoute()" /></label>&nbsp;&nbsp;
    <label title="Moleculus Herba">Mol <input type="checkbox" name="mol" value="0" onClick="javascript:dectoute()" /></label>&nbsp;&nbsp;
    <label title="Pyros lavae">Pyr <input type="checkbox" name="pyr" value="0" onClick="javascript:dectoute()" /></label>&nbsp;&nbsp;
    <label title="Taurinum nainis">Tau <input type="checkbox" name="tau" value="0" onClick="javascript:dectoute()" /></label>
    <table>
    <tr><td><textarea id="input" name="log" rows="20" cols="60" ></textarea></td><td>
    <label class="labelbox" title="Ligne de votre case">Ligne de sa case : <input type="text" name="lig_case" value='auto' size=5></label>
    <label class="labelbox" title="Colonne de votre case">Colonne de sa case : <input type="text" name="col_case" value='auto' size=5></label>
    <label class="labelbox" title="Nombre entre 1 et 4">Nombre de cases à la ronde : <input type="text" name="nb_case" value='auto' size=5></label>
    </td></tr></table>
    <p><input type="submit" value="Valider" /></p>
</form>
 <p></p>
    <div id="changelog"><br />Changelog :
    <br />1.8 :
    <br />- Modification graphique
    <br />1.7 : 
    <br />- Affiche une couleur spéciale sur les auberges (orange) et sur les magasins de magie (jaune)
    <br />1.63 :   
    <br />- Le nombre de plantes sur sa case ne peut plus être de la même couleur que celle de fond
    <br />- Amélioration de la précision du calcul automatique de sa position
    <br />1.62 :   
    <br />- Cadre bloqué en haut afin d'éviter un décalage lors d'un trop grand nombre de plante sur une case
    <br />1.61 :   
    <br />- Correction d'un bug : Des balises étaient oubliées ce qui entrainaient un décochage de la case toute inopportun sur certains navigateurs
    <br />1.6 :  
    <br />- Affiche la liste des plantes au survol plutôt qu'au clic
    <br />- Le cas particulier où notre case n'apparait pas dans le tableau n'existe plus
    <br />1.5 :  
    <br />- La case toute se décoche toute seule si on coche une autre case
    <br />1.4 :  
    <br />- Cliquer sur une case affiche les plantes de la case
    <br />1.3 :  
    <br />- On peut maintenant sélectionner les plantes à apparaitre
    <br />1.2 :  
    <br />- Optimisation du code
    <br />- Correction d'un problème pour le cas non automatique
    <br />1.1 :
    <br />- Ajout des couleurs
 </div>
</body>
</html>
<?php
    
    
    function inc(&$i) 
    {
        if (isset($i)) $i++;
        else $i = 1;
    }
    
    function allonge(&$var,$txt) 
    {
        $sdl = '<br />';
        if (isset($txt)) $var .= "$txt$sdl";
        else $var = $txt.$sdl;
    }    
    
    function compare_pos(&$coord,$pos,$dist) {
        $fin = $coord[0] + 1; $min = $pos-$dist; $max = $pos+$dist; $i = 1;
        while ($i < $fin) {
            //echo '<br />if ($coord[$i] < $min || $coord[$i] > $max) {<br />';
            //echo "if ($coord[$i] < $min || $coord[$i] > $max) {<br />";
            if ($coord[$i] < $min || $coord[$i] > $max) {
                //echo "suppr<br>"; 
                if ($coord[0] == $i && $i > 1) { $coord[0]--; /*$coord[$i] = $coord[$coord[0]];*/ $fin--; }
                else { $coord[$i] = $coord[$coord[0]]; $coord[0]--; $fin--; }
            }
            else $i++;
        }
        //echo '<br>';
    }
    
    function liste_pos(&$coord,$pos,$dist) {
        $deb = $pos - $dist;
        $coord[0] = 2*$dist + 1;
        for ($i=1 ; $i<=$coord[0] ; $i++) {
            $coord[$i] = $deb++;
        }
    }
    
    function rech_case(&$rcol,&$rlig,$nb_plante) {
        $col_max = $rcol[0]+1; $lig_max = $rlig[0]+1; $nfin = TRUE;
        for ($i=1 ; $i<$lig_max && $nfin ; $i++)
            for ($j=1 ; $j<$lig_max && $nfin ; $j++)
                if (!isset($nb_plante[$rlig[$i]][$rcol[$j]])) { $nfin = FALSE; $rcol[1] = $rcol[$j]; $rlig[1] = $rlig[$i]; }
    }
    
    function initPositionAuberges(&$position)
    {
        // auberge en carré
        foreach(array(34,41,49,57) as $x)
        {
            foreach(array(27,33,39,45,51,57,64) as $y)
            {
                $position[$x][$y] = 1;
            }
        }
        
        // spécial ouest
        $position[26][28] = 1;
        foreach(array(34,40,51,59) as $y)
        {
            $position[27][$y] = 1;
        }
        $position[28][65] = 1;
        
        // spécial ouest
        $position[63][27] = 1;
        $position[66][32] = 1;
        $position[64][37] = 1;
        $position[63][43] = 1;
        $position[64][49] = 1;
        $position[64][56] = 1;
        $position[65][63] = 1;
    }
    
    function initPositionMagie(&$position)
    {
        // mago en carré
        $position[33][31] = 1;
        foreach(array(30,36,42,54,61) as $y)
        {
            foreach(array(34,41,49,57) as $x)
            {
                $position[$x][$y] = 1;
            }
        }
        unset($position[34][30]); 
        //unset($position[41][54]);
        
        // autres
        foreach(array(34,47,57) as $x) {
            $position[$x][48] = 1;
        }
    }
?>