Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
                $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>