Смена цвета значка ГТ, если в текущей заявке есть минимум 1 дуэлянт
当前为
// ==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;
}
}
})();