HWM_DuelAlert

Смена цвета значка ГТ, если в текущей заявке есть минимум 1 дуэлянт

目前為 2017-12-14 提交的版本,檢視 最新版本

// ==UserScript==
// @name         HWM_DuelAlert
// @namespace    Небылица
// @version      1.16
// @description  Смена цвета значка ГТ, если в текущей заявке есть минимум 1 дуэлянт
// @author       Небылица
// @include      /^https{0,1}:\/\/((www|qrator)\.heroeswm\.ru|178\.248\.235\.15)\/.+/
// @exclude      /^https{0,1}:\/\/((www|qrator)\.heroeswm\.ru|178\.248\.235\.15)\/(login|war|cgame|frames|chat|chatonline|ch_box|chat_line|ticker|chatpost)\.php.*/
// @grant        GM_setValue
// @grant        GM_getValue
// ==/UserScript==

(function() {
    "use strict";

    // Вспомогательные функции
    function sendGETRequest(url, callback){ // Универсалка для отправки GET-запроса к url с исполнением функции callback при получении ответа
        var xhr = new XMLHttpRequest();

        xhr.open("GET", url, true);
        xhr.onreadystatechange = function(){
            if (xhr.readyState === 4 && xhr.status === 200){
                if (typeof callback === "function"){
                    callback.apply(xhr);
                }
            }
        };
        xhr.send();
    }
    function changeIcon(HTML, icon, newIconSrc, currentMomentOnServerInMs){ // Подсчёт количества дуэлянтов, и смена цвета значка при наличии
        // задаём переменную-счётчик и вытягиваем кол-во людей для случаев наблюдения изнутри и снаружи заявки
        var duelistsNumber = 0,
            insideArr = HTML.match(/<\/b>\s([\d]+?)<br>/),
            outsideArr = HTML.match(/\s\(([\d]+?)\)/);

        // считаем кол-во дуэлянтов (кроме себя в случае нахождения в заявке)
        if (insideArr !== null){
            duelistsNumber = parseInt(insideArr[1]) - 1; // для наблюдения изнутри заявки
        } else if (outsideArr !== null){
            duelistsNumber = parseInt(outsideArr[1]); // для наблюдения снаружи заявки
        }

        // если есть другие дуэлянты, то меняем значок и запоминаем результат
        if (duelistsNumber > 0){
            icon.src = newIconSrc;

            GM_setValue("duelistsPresent", true);
            GM_setValue("checkMoment", currentMomentOnServerInMs);
        }
    }
    //

    // получаем иконку ГТ и текущий момент времени на сервере, задаём код для нового значка
    var icon = document.querySelector("img[src*='team_ev_top.gif'][title='Гильдия Тактиков']"),
        newIconSrc = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAA6ElEQVR42n2RvwrCMBDG+wIKahAdVEQEqbYIogguIqYgIuIg2Hcq9Gk6d1Bwyea/tbtL3uDzmqagxfbgI1y43+XynWH8CXmycZ0zBJNqck4rMIpC7q3iAm9UhjcoweuRuqQ25a0vUf7b8WirC2ExdQbdZATRS3K5zLwoDxYiZwjXWcPlv4qmJuQiC9DM0cpUAF43vC9n4HGDuyZgTMAsC+wIWJqqI54auGvAImCSA/hbrqAYiIt9zouB+JP+hifFDoeosxxA+y76DGGnhqBZQdioQTS1S7OcvQhT29rStrZZ8QLTSPfwLz6syKeScQa/4wAAAABJRU5ErkJggg==",

        currentMoment = new Date(),
        currentMomentOnServer = new Date(Date.now() + currentMoment.getTimezoneOffset()*60000 + 10800000);

    // Если есть иконка, это не ночное окно и не последняя минута набора, то запускаем скрипт
    if (icon !== null && !(currentMomentOnServer.getHours() >= 3 && currentMomentOnServer.getHours() < 8) && (currentMomentOnServer.getMinutes() % 10) !== 9){
        // если нет валидной по времени информации, что дуэлянт есть, то запрашиваем данные
        if (!(GM_getValue("duelistsPresent") && (currentMomentOnServer.getTime() - GM_getValue("checkMoment")) < 540000)){
            GM_setValue("duelistsPresent", false);

            // если находимся не на странице ГТ, то запрашиваем её код с сервера
            if (location.pathname.indexOf("pvp_guild.php") === -1){
                sendGETRequest("pvp_guild.php", function(){
                    // запускаем функцию смены значка
                    changeIcon(this.responseText, icon, newIconSrc, currentMomentOnServer.getTime());
                });
            } else{ // если находимся на странице ГТ, то получаем её код сразу в браузере
                // запускаем функцию смены значка
                changeIcon(document.documentElement.outerHTML, icon, newIconSrc, currentMomentOnServer.getTime());
            }
        } else{ // если есть валидная по времени информация, что дуэлянт есть, то меняем значок сразу
            icon.src = newIconSrc;
        }
    }
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址