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>
<label title="Alkandyr salum">Alk <input type="checkbox" name="alk" value="0" onClick="javascript:dectoute()" /></label>
<label title="Amyris cepa">Amy <input type="checkbox" name="amy" value="0" onClick="javascript:dectoute()" /></label>
<label title="Angelica glauca">Ang <input type="checkbox" name="ang" value="0" onClick="javascript:dectoute()" /></label>
<label title="Astrae luna">Ast <input type="checkbox" name="ast" value="0" onClick="javascript:dectoute()" /></label>
<label title="Azralae oxalis">Azr <input type="checkbox" name="azr" value="0" onClick="javascript:dectoute()" /></label>
<label title="Blinium procera">Bli <input type="checkbox" name="bli" value="0" onClick="javascript:dectoute()" /></label>
<label title="Etoilum mortem">Eto <input type="checkbox" name="eto" value="0" onClick="javascript:dectoute()" /></label>
<label title="Moleculus Herba">Mol <input type="checkbox" name="mol" value="0" onClick="javascript:dectoute()" /></label>
<label title="Pyros lavae">Pyr <input type="checkbox" name="pyr" value="0" onClick="javascript:dectoute()" /></label>
<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;
}
}
?>