function refreshVue($id, $auto = false) { if (strlen($id) == 0) { die("refreshVue : Pas d'id de troll"); } global $db_vue_rm, $error, $DEV; unset($refresh_by_me); if ($DEV) { echo "DEBUG refreshVue({$id}) entré<br>\n"; } $date = date("Y-m-d H-i-s"); $date_less_24 = date("Y-m-d H-i-s", mktime(date("H"), date("i"), date("s"), date("m"), date("d") - 1, date("Y"))); $date_less_10_min = date("Y-m-d H-i-s", mktime(date("H"), date("i") - 10, date("s"), date("m"), date("d"), date("Y"))); if ($_SESSION["AuthTroll"] != $id) { $refresh_by_me = "non"; } else { $refresh_by_me = "oui"; } if ($refresh_by_me == "non") { $sql = "SELECT COUNT(*) FROM refresh_count"; $sql .= " WHERE date_refresh >= '{$date_less_24}'"; $sql .= " AND id_troll_refresh = {$id}"; $sql .= " AND by_me_refresh = '{$refresh_by_me}'"; $sql .= " AND categorie_refresh = 'classiques'"; $sql .= " AND script_name_refresh = 'SP_Vue2'"; if ($DEV) { echo "DEBUG refreshVue() {$sql} <br>\n"; } $result = mysql_query($sql, $db_vue_rm); echo mysql_error(); if (mysql_affected_rows() > 0) { list($nb) = mysql_fetch_array($result); } else { $nb = 0; } if ($DEV) { echo "DEBUG refreshVue() nb refresh par la guilde (autre que par le troll en question)"; } if ($DEV) { echo " en moins de 24 heures : {$nb} <br>"; } // Si le script public a été utilisé 24 fois en moins de 24 heures, alors on ne continues pas if ($nb >= NB_REFRESH_VUE_2D_BY_GUILDE) { die("La guilde a déjà rafraichit plus de " . NB_REFRESH_VUE_2D_BY_GUILDE . " fois en moins de 24 heures"); } } else { /* si c'est le troll lui meme qui met à jour sa vue */ $sql = "UPDATE trolls set date_last_refresh_manual_troll='{$date}' WHERE id_troll={$id}"; if ($DEV) { echo "DEBUG refreshVue() {$sql} <br>"; } mysql_query($sql, $db_vue_rm); echo mysql_error(); } /* on regarde si la vue n'est pas en cours de refresh */ $sql = "SELECT date_last_refresh_himself_troll, lock_refresh_troll "; $sql .= " FROM trolls "; $sql .= " WHERE id_troll={$id}"; $sql .= " AND lock_refresh_troll = 'oui'"; $sql .= " AND date_last_refresh_himself_troll > '{$date_less_10_min}'"; if ($DEV) { echo "DEBUG refreshVue() {$sql} <br>\n"; } $result = mysql_query($sql, $db_vue_rm); echo mysql_error(); if (mysql_affected_rows() > 0) { die("<h1>Un refresh du troll {$id} est en activité. Attendez 10 min et ré-essayez.</h1>refresh_auto()"); } /* On récupère le mot de passe */ $sql = " SELECT pass_troll"; $sql .= " FROM trolls WHERE id_troll={$id}"; if ($DEV) { echo "DEBUG refreshVue() {$sql} <br>\n"; } $result = mysql_query($sql, $db_vue_rm); echo mysql_error(); if (mysql_affected_rows() > 0) { list($passw) = mysql_fetch_array($result); } $pass = rawurlencode(stripslashes($passw)); # on "échape" les caractères spéciaux /* On vérifie le nombre de fois que le script public à été utilisé en moins de 24 heures */ $sql = "SELECT COUNT(*) FROM refresh_count"; $sql .= " WHERE date_refresh >= '{$date_less_24}'"; $sql .= " AND id_troll_refresh = {$id}"; $sql .= " AND categorie_refresh = 'classiques'"; $sql .= " AND script_name_refresh = 'SP_Vue2'"; if ($DEV) { echo "DEBUG refreshVue() {$sql} <br>\n"; } $result = mysql_query($sql, $db_vue_rm); echo mysql_error(); list($nb) = mysql_fetch_array($result); /* Si le script public a été utilisé NB_REFRESH_VUE_2D_BY_TROLL fois en moins de 24 heures, alors on ne continue pas */ if ($nb >= NB_REFRESH_VUE_2D_BY_TROLL) { die("Vous avez utilisé plus de " . NB_REFRESH_VUE_2D_BY_TROLL . " fois le script public en moins de 24 heures."); } # Subtilité: par défaut en php, les " et ' sont backslashés. Il faut donc enlever les \ unset($error); unset($ente); unset($deb); if ($DEV) { echo "DEBUG refreshVue() http://sp.mountyhall.com/SP_Vue2.php?Numero={$id}&Motdepasse={$pass}&Tresors=1&Lieux=1&Champignons=1"; } $fp = "http://sp.mountyhall.com/SP_Vue2.php?Numero={$id}&Motdepasse={$pass}&Tresors=1&Lieux=1&Champignons=1"; /*if ($fp == FALSE) die ("Erreur lors de l'appel du fichier public. Procédure de refresh stoppée");*/ $vue = html_entity_decode(file_get_contents($fp)); if (preg_match("#.*Erreur 1 : paramètres incorrects .*#", $vue)) { die("<h1 style='color:red;'>Paramètres incorrects</h1><p>Mais... qu'est-ce que vous avez donc tapé ? Envoyez-moi un mail avec vos paramètres, je tenterais de débugguer le truc.</p>"); } if (preg_match("#.*Erreur 3 : mot de passe incorrect.*#", $vue)) { $date = date("Y-m-d H-i-s"); $tmpfile = fopen("vues/list_mdp_error.txt", "a"); fwrite($tmpfile, $date . ": Troll n° " . $id . "\n"); fclose($tmpfile); die("<br><b class=red>Erreur de mot de passe.</b><br>"); } if (preg_match("#Erreur (4|5)#", $vue)) { die("<h1 style='color:red;'>Erreur du serveur.</h1><p>Il est encore en vrac. Il faudra repasser plus tard\tquand les DM l'auront remis enroute...</p>"); } preg_match("@.*#DEBUT ORIGINE(.*)#FIN ORIGINE.*@s", $vue, $origine); list($nCasesVue, $X, $Y, $Z) = explode(";", trim($origine[1])); $v2 = fopen("vues/{$id}", "w"); fwrite($v2, $vue); //fclose($fp); fclose($v2); // Le troll doit exister dans la base de données ! $troll = getTroll($id); // On met à jour le mot de passe du troll car c'est un RM if ($troll[6] == ID_GUILDE) { $sql = "UPDATE trolls set pass_troll='{$pass}' WHERE id_troll={$id}"; if ($DEV) { echo "DEBUG refreshVue() {$sql} <br>"; } mysql_query($sql, $db_vue_rm); echo mysql_error(); } // On rajoute le fait que le troll à utilisé la vue publique // mais on détermine avant si c'est le troll lui-même ou qq'1 d'autre de la guilde $date = date("Y-m-d H-i-s"); $sql = "INSERT INTO refresh_count"; $sql .= " (id_troll_refresh, date_refresh, by_me_refresh, categorie_refresh,script_name_refresh)"; $sql .= " VALUES ({$id}, '{$date}','{$refresh_by_me}','classiques','SP_Vue2')"; if ($DEV) { echo "DEBUG refreshVue() {$sql} <br>"; } mysql_query($sql, $db_vue_rm); echo mysql_error(); // Puis on supprime les accès qui date de plus de 24 heures // de toutes les entrées qui sont dans la table refresh_count $sql = "DELETE FROM refresh_count"; $sql .= " WHERE date_refresh <= '{$date_less_24}'"; if ($DEV) { echo "DEBUG refreshVue() {$sql} <br>"; } mysql_query($sql, $db_vue_rm); echo mysql_error(); if ($DEV) { echo "DEBUG : on parse depuis refreshVue <br>"; } parseFile2($id, $auto, $X, $Y, $Z, $nCasesVue, "s_public"); exit; }
$nCasesVue = $parts[1]; // On sauvegarde la position du troll $Xmoi = $X; $Ymoi = $Y; $Zmoi = $Z; if ($DEV) { echo "DEBUG parse_vue.php Vue: {$nCasesVue} X={$X}, Y={$Y} Z={$Z} \n"; } } break; } } // si l'on est authentifié, donc un RM, on met à jour la bdd if (userIsGuilde() || userIsGroupSpec()) { // Parse du fichier et mise à jour de la base de données parseFile2($_REQUEST["id_troll"], false, $Xmoi, $Ymoi, $Zmoi, $nCasesVue, false); } else { // Si l'on est pas authentifié, on affiche la vue telle quelle ?> <table class='mh_tdborder' width='60%' align="center"> <tr> <td> <table width='100%' cellspacing='0'> <tr class='mh_tdtitre' align="center"> <td> <img src='/images/titre-vue.gif'> </td> </tr> </table> </td> </tr>