// ==UserScript== // @name HWM_MGQuickReturn // @namespace Небылица // @version 1.11 // @description Быстрый возврат в сектор ГН // @author Небылица // @include /^https{0,1}:\/\/((www|qrator)\.heroeswm\.ru|178\.248\.235\.15)\/(map|mercenary_guild|war)\.php/ // @grant GM_setValue // @grant GM_getValue // @downloadURL none // ==/UserScript== (function() { "use strict"; // Вспомогательные функции function getLinkToReturn(HTML){ // Возвращает ссылку на переход в ближайший сектор с ГН (или сразу на гильдию, если идти и не нужно) – скармливать код страницы карты // получаем код текущего района var currentLocaleRegExp = /cmbut1\*(.*?):/, currentLocaleIdArr = currentLocaleRegExp.exec(HTML), currentLocaleId; if (currentLocaleIdArr !== null){ currentLocaleId = currentLocaleIdArr[1]; } else{ currentLocaleRegExp = /FlashVars(.*?):/; currentLocaleIdArr = currentLocaleRegExp.exec(HTML); if (currentLocaleIdArr !== null){ currentLocaleIdArr = currentLocaleIdArr[1].split('*'); currentLocaleId = currentLocaleIdArr[currentLocaleIdArr.length - 1]; } else {currentLocaleId = 1;} } var localesСorrespondence = { "1": "2", // Empire Capital "2": "0", // East River "3": "6", // Tiger Lake "4": "2", // Rogues' Wood "5": "2", // Wolf Dale "6": "0", // Peaceful Camp "7": "2", // Lizard Lowland "8": "2", // Green Wood "9": "6", // Eagle Nest "10": "2", // Portal Ruins "11": "2", // Dragons' Caves "12": "6", // Shining Spring "13": "6", // Sunny City "14": "2", // Magma Mines "15": "16", // Bear Mountain "16": "0", // Fairy Trees "17": "16", // Harbour City "18": "16", // Mythril Coast "19": "21", // Great Wall "20": "21", // Titans' Valley "21": "0", // Fishing Village "22": "21", // Kingdom Castle "23": "6", // Ungovernable Steppe "24": "6", // Crystal Garden "25": "", // East Island "26": "2", // The Wilderness "27": "6" // Sublime Arbor } var localeToReturn = localesСorrespondence[currentLocaleId], linkToReturn = (localeToReturn !== "0") ? ("move_sector.php?id=" + localeToReturn) : "mercenary_guild.php"; return linkToReturn; } function insertAfter(newNode, referenceNode){ // Вставка newNode после referenceNode referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); } var documentInnerHTHL = document.documentElement.innerHTML; switch (location.pathname){ case "/map.php": // добавляем кнопку на возврат для разбойников if (GM_getValue("showReturnButton")){ // определяем кнопку и элемент, после которого вставлять var returnToMGButton = document.createElement("a"), referenceNode = document.querySelector("b > a[href^='map.php?cx=']").parentElement; // собираем кнопку returnToMGButton.setAttribute("href", getLinkToReturn(documentInnerHTHL)); returnToMGButton.innerHTML = "Вернуться в ГН"; // вставляем кнопку insertAfter(returnToMGButton, referenceNode); insertAfter(document.createElement("br"), referenceNode); insertAfter(document.createElement("br"), referenceNode); } // при входе в бой ГН запоминаем сектор (ссылку) для возврата через "Продолжить" var acceptButton = document.querySelector("a[href^='/map.php?action=accept_merc_task']"); if (acceptButton !== null){ acceptButton.onclick = function(event){ event.preventDefault(); GM_setValue("linkToReturn", getLinkToReturn(documentInnerHTHL)); // идём в бой window.open(event.target.href, "_self"); } } break; case "/mercenary_guild.php": // если имеется принятое задание if (documentInnerHTHL.indexOf("минут") !== -1 && documentInnerHTHL.indexOf("Принять") === -1 && documentInnerHTHL.indexOf("Вы еще не приняли это задание") === -1){ if (documentInnerHTHL.indexOf("Армия") !== -1){ // для армий ставим соответствующий флаг GM_setValue("ifArmy", true); } if (documentInnerHTHL.indexOf("разбойники {") !== -1){ // для разбойников ставим показ кнопки и пишем возврат груза через "Продолжить" GM_setValue("showReturnButton", true); GM_setValue("linkToReturn", "map.php?action=accept_merc_task3"); } } else{ // иначе затираем ссылку, показ кнопки и флаг армии GM_setValue("linkToReturn", ""); GM_setValue("showReturnButton", false); GM_setValue("ifArmy", false); } break; // перенаправляем кнопку "Продолжить" при наличии сохранённой ссылки case "/war.php": var linkToReturn = GM_getValue("linkToReturn"); if (linkToReturn !== ""){ var continueButton = document.getElementById("btn_continue_WatchBattle"); if (continueButton !== null){ continueButton.onclick = function(event){ event.preventDefault(); // для всего, кроме проигранных армий переходим по сохранённой ссылке и убираем её из хранилища if (!(GM_getValue("ifArmy") && document.getElementById("finalresult_text").innerHTML.indexOf("Победившая сторона:
Армия") !== -1)){ GM_setValue("linkToReturn", ""); window.open(linkToReturn, "_self"); } else{ // для проигранных армий выходим на карту window.open("map.php", "_self"); } } } } break; } })();