Greasy Fork is available in English.
Автосдача заданий ГН
当前为
// ==UserScript==
// @name HWM_AutoReportMGTasks
// @namespace Небылица
// @version 1.25
// @description Автосдача заданий ГН
// @author Небылица
// @include /^https{0,1}:\/\/((www|qrator)\.heroeswm\.ru|178\.248\.235\.15)\/(map|mercenary_guild|home)\.php/
// @grant GM_setValue
// @grant GM_getValue
// ==/UserScript==
(function() {
"use strict";
// Вспомогательные функции
function sendGETRequest(url, mimeType, callback){ // Универсалка для отправки GET-запроса к url с выставлением заданного MIME Type и исполнением функции callback при получении ответа
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
if (typeof mimeType === "string"){
xhr.overrideMimeType(mimeType);
}
if (typeof callback === "function"){
xhr.onreadystatechange = function(){
if (xhr.readyState === 4 && xhr.status === 200){
callback.apply(xhr);
}
};
}
xhr.send();
}
//
// Код для страницы карты
if (location.pathname.indexOf("map.php") !== -1){
// проверяем наличие активного задания ГН и нахождение в секторе гильдии
if (GM_getValue("taskActive") && document.querySelector("img[src*='merc.gif'][title='Гильдия Наемников']") !== null){
// запрашиваем страницу ГН
sendGETRequest("mercenary_guild.php", "text/html; charset=windows-1251", function(){
// получаем ответ и проверяем, было ли задание сдано
var response = this.responseText;
if ((response.indexOf("<b>Статус</b>") !== -1 && response.indexOf("минут") === -1)){
// убираем флаг активного задания
GM_setValue("taskActive", false);
// запоминаем текст награды и переходим в ГН
var rewardArr = response.match(/<Br><br>([\S\s]+?)<table\sborder=0\scellspacing=0\scellpadding=0>/);
if (rewardArr !== null){
GM_setValue("reward", rewardArr[1]);
}
window.open("mercenary_guild.php", "_self");
}
});
}
}
// Код для страницы ГН
if (location.pathname.indexOf("mercenary_guild.php") !== -1){
// если имеется сохранённый текст только что сданного задания, то вставляем его в страницу и убираем прежнее значение
if (GM_getValue("reward") !== "-1"){
var tdRowspan2 = document.querySelector("td[rowspan='2']");
tdRowspan2.innerHTML = tdRowspan2.innerHTML.split("<table border")[0] + GM_getValue("reward") + "<table border" + tdRowspan2.innerHTML.split("<table border")[1];
GM_setValue("reward", "-1");
} else{
// проверяем, нет ли принятого задания, и запоминаем значение в зависимости от ответа
var documentInnerHTHL = document.documentElement.innerHTML;
if (documentInnerHTHL.indexOf("минут") !== -1 && documentInnerHTHL.indexOf("Принять") === -1){
GM_setValue("taskActive", true);
// проверяем, нет разбойники ли это и запоминаем при положительном ответе
if (documentInnerHTHL.indexOf("разбойники {") !== -1){
GM_setValue("ifRogues", true);
}
} else{
GM_setValue("taskActive", false);
}
}
}
// Код для домашней страницы
if (location.pathname.indexOf("home.php") !== -1){
// проверяем наличие активного задания на разбойников
if (GM_getValue("taskActive") && GM_getValue("ifRogues")){
var warid = document.querySelector("a[href^='warlog.php?warid=']").getAttribute("href").replace("warlog.php?warid=", "");
// запрашиваем страницу результатов боя
sendGETRequest("battle.php?lastturn=-3&warid=" + warid, null, function(){
// получаем ответ и проверяем, разбойники ли были только что, и были ли они побеждены
var response = this.responseText;
if (response.match(/<b>Проигравшая\sсторона:<\/b><\/font><br\s\/><b><font\scolor="#.{6}">(.+?)<\/font>/)[1].indexOf("разбойники") !== -1){
// сдаём груз и забываем текущее задание
GM_setValue("ifRogues", false);
window.open("map.php?action=accept_merc_task3", "_self");
}
});
}
}
})();