// ==UserScript==
// @name HWM_MGRewardsStats
// @namespace Небылица
// @version 1.01
// @description Статистика золота и элементов, полученных в ГН
// @author Небылица
// @include /^https{0,1}:\/\/((www|qrator)\.heroeswm\.ru|178\.248\.235\.15)\/mercenary_guild\.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();
}
function saveToFile(data, filename, type){ // Сохраняет данные data в файл с именем filename, используя blob-объект с типом type (на базе https://stackoverflow.com/a/30832210)
var file = new Blob([data], {type: type});
if (window.navigator.msSaveOrOpenBlob){ // IE10+
window.navigator.msSaveOrOpenBlob(file, filename);
} else{ // Others
var a = document.createElement("a"),
url = URL.createObjectURL(file);
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
setTimeout(function(){
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}, 0);
}
}
function addLeadingZero(string){ // Вставляет ведущий ноль в строку с элементом даты/времени, если в ней только 1 цифра
string = string.toString();
if (string.length === 1){string = "0" + string;}
return string;
}
//
// Забиваем дефолтные значения в хранилище
if (GM_getValue("dataCollectionSince") === undefined){ // дата начала сбора статистики
var currentMoment = new Date(),
currentMomentOnServer = new Date(Date.now() + currentMoment.getTimezoneOffset()*60000 + 10800000);
GM_setValue("dataCollectionSince",
addLeadingZero(currentMomentOnServer.getDate()) + "." +
addLeadingZero((currentMomentOnServer.getMonth() + 1)) + "." +
currentMomentOnServer.getFullYear().toString().slice(2, 4) + " " +
addLeadingZero(currentMomentOnServer.getHours()) + ":" +
addLeadingZero(currentMomentOnServer.getMinutes())
);
}
if (GM_getValue("rewardsList") === undefined){GM_setValue("rewardsList", "");} // полный список наград
if (GM_getValue("tasksTotal") === undefined){GM_setValue("tasksTotal", 0);} // общее число заданий
if (GM_getValue("tasksAccomplished") === undefined){GM_setValue("tasksAccomplished", 0);} // успешно выполненных
if (GM_getValue("tasksFailed") === undefined){GM_setValue("tasksFailed", 0);} // проваленных
if (GM_getValue("goldTotal") === undefined){GM_setValue("goldTotal", 0);} // всего золота получено
if (GM_getValue("elementsTotal") === undefined){GM_setValue("elementsTotal", 0);} // всего элементов получено
if (GM_getValue("elementsDouble") === undefined){GM_setValue("elementsDouble", 0);} // двойных выпадений
// счётчики полученного золота по типам заданий
if (GM_getValue("goldFromArmies") === undefined){GM_setValue("goldFromArmies", 0);} // армии
if (GM_getValue("goldFromConspirators") === undefined){GM_setValue("goldFromConspirators", 0);} // заговорщики
if (GM_getValue("goldFromInvaders") === undefined){GM_setValue("goldFromInvaders", 0);} // захватчики
if (GM_getValue("goldFromMonsters") === undefined){GM_setValue("goldFromMonsters", 0);} // монстры
if (GM_getValue("goldFromRaids") === undefined){GM_setValue("goldFromRaids", 0);} // набеги
if (GM_getValue("goldFromVanguards") === undefined){GM_setValue("goldFromVanguards", 0);} // отряды
if (GM_getValue("goldFromBrigands") === undefined){GM_setValue("goldFromBrigands", 0);} // разбойники
// счётчики выполненных заданий по типам
if (GM_getValue("accomplishedArmies") === undefined){GM_setValue("accomplishedArmies", 0);} // армии
if (GM_getValue("accomplishedConspirators") === undefined){GM_setValue("accomplishedConspirators", 0);} // заговорщики
if (GM_getValue("accomplishedInvaders") === undefined){GM_setValue("accomplishedInvaders", 0);} // захватчики
if (GM_getValue("accomplishedMonsters") === undefined){GM_setValue("accomplishedMonsters", 0);} // монстры
if (GM_getValue("accomplishedRaids") === undefined){GM_setValue("accomplishedRaids", 0);} // набеги
if (GM_getValue("accomplishedVanguards") === undefined){GM_setValue("accomplishedVanguards", 0);} // отряды
if (GM_getValue("accomplishedBrigands") === undefined){GM_setValue("accomplishedBrigands", 0);} // разбойники
// счётчики полученных элементов по типам
if (GM_getValue("gainedAbrasives") === undefined){GM_setValue("gainedAbrasives", 0);} // арбазивы
if (GM_getValue("gainedViperVenoms") === undefined){GM_setValue("gainedViperVenoms", 0);} // змеиные яды
if (GM_getValue("gainedTigerClaws") === undefined){GM_setValue("gainedTigerClaws", 0);} // клыки тигра
if (GM_getValue("gainedIceCrystals") === undefined){GM_setValue("gainedIceCrystals", 0);} // ледяные кристаллы
if (GM_getValue("gainedMoonstones") === undefined){GM_setValue("gainedMoonstones", 0);} // лунные камни
if (GM_getValue("gainedFireCrystals") === undefined){GM_setValue("gainedFireCrystals", 0);} // огненные кристаллы
if (GM_getValue("gainedMeteoriteShards") === undefined){GM_setValue("gainedMeteoriteShards", 0);} // осколки метеорита
if (GM_getValue("gainedWitchBlooms") === undefined){GM_setValue("gainedWitchBlooms", 0);} // цветки ведьм
if (GM_getValue("gainedWindflowers") === undefined){GM_setValue("gainedWindflowers", 0);} // цветки ветров
if (GM_getValue("gainedFernFlowers") === undefined){GM_setValue("gainedFernFlowers", 0);} // цветки папоротника
if (GM_getValue("gainedToadstools") === undefined){GM_setValue("gainedToadstools", 0);} // ядовитые грибы
//
var documentInnerHTHL = document.documentElement.innerHTML,
currentTask = GM_getValue("currentTask");
// Код для страницы принятого задания
if (documentInnerHTHL.indexOf("минут") !== -1 && documentInnerHTHL.indexOf("Принять") === -1 && documentInnerHTHL.indexOf("Вы еще не приняли это задание") === -1){
// получаем и запоминаем текущее задание
var currentTaskArr = documentInnerHTHL.match(/'<b>(.+?)<\/b>/);
if (currentTaskArr !== null){
GM_setValue("currentTask", currentTaskArr[1]);
}
} else if (documentInnerHTHL.indexOf("мин.") === -1){ // если ни принятого, ни сданного (но ещё не обсчитанного) задания нет, то стираем сохранённое значение
GM_setValue("currentTask", "-1");
}
// Код для страницы сданного задания (с защитой от двойного прогона при обновлении страницы до появления нового)
if (documentInnerHTHL.indexOf("мин.") !== -1 && currentTask !== "-1"){
// увеличиваем счётчик сданных заданий
GM_setValue("tasksTotal", GM_getValue("tasksTotal") + 1);
// получаем текст награды (без статуса)
var rewardArr = documentInnerHTHL.match(/<b>Вы\sполучаете\s(.+?)<\/b>/);
if (rewardArr !== null){ // если награда есть
var reward = rewardArr[1];
// увеличиваем счётчик успешно выполненных заданий
GM_setValue("tasksAccomplished", GM_getValue("tasksAccomplished") + 1);
// увеличиваем кол-во полученного золота
var gainedGold = parseInt(reward.match(/([\d]+?)\sзолота/)[1]);
GM_setValue("goldTotal", GM_getValue("goldTotal") + gainedGold);
// получаем тип задания
var taskTypeArr = (currentTask !== undefined) ? currentTask.match(/(Армия|заговорщики|захватчики|монстр|набеги|Отряд|разбойники)/) : null,
subKey = "";
if (taskTypeArr !== null){
// выставляем кусок ключа в зависимости от типа задания
switch (taskTypeArr[1]){
case "Армия": subKey = "Armies";
break;
case "заговорщики": subKey = "Conspirators";
break;
case "захватчики": subKey = "Invaders";
break;
case "монстр": subKey = "Monsters";
break;
case "набеги": subKey = "Raids";
break;
case "Отряд": subKey = "Vanguards";
break;
case "разбойники": subKey = "Brigands";
}
// увеличиваем пару переменных (сумму полученного золота и счётчик выполненных), соответствующих типу задания
if (subKey !== ""){
GM_setValue("goldFrom" + subKey, GM_getValue("goldFrom" + subKey) + gainedGold);
GM_setValue("accomplished" + subKey, GM_getValue("accomplished" + subKey) + 1);
}
}
// получаем выпавшие элементы
var gainedElementsArr = reward.match(/(абразив|змеиный\sяд|клык\sтигра|ледяной\sкристалл|лунный\sкамень|огненный\sкристалл|осколок\sметеорита|цветок\sведьм|цветок\sветров|цветок\sпапоротника|ядовитый\sгриб)/g);
if (gainedElementsArr !== null){ // если элементы есть
var gainedElementsNumber = gainedElementsArr.length;
// увеличиваем общий счётчик выпавших элементов
GM_setValue("elementsTotal", GM_getValue("elementsTotal") + gainedElementsNumber);
// если выпало 2 элемента, то увеличиваем счётчик двойных
if (gainedElementsNumber === 2){
GM_setValue("elementsDouble", GM_getValue("elementsDouble") + 1);
}
// цикл по массиву с элементами
var i,
maxI = gainedElementsNumber;
subKey = "";
for (i=0;i<maxI;i++){
// выставляем кусок ключа в зависимости от типа элемента
switch (gainedElementsArr[i]){
case "абразив": subKey = "Abrasives";
break;
case "змеиный яд": subKey = "ViperVenoms";
break;
case "клык тигра": subKey = "TigerClaws";
break;
case "ледяной кристалл": subKey = "IceCrystals";
break;
case "лунный камень": subKey = "Moonstones";
break;
case "огненный кристалл": subKey = "FireCrystals";
break;
case "осколок метеорита": subKey = "MeteoriteShards";
break;
case "цветок ведьм": subKey = "WitchBlooms";
break;
case "цветок ветров": subKey = "Windflowers";
break;
case "цветок папоротника": subKey = "FernFlowers";
break;
case "ядовитый гриб": subKey = "Toadstools";
}
// увеличиваем счётчик выпадений соответствующего элемента
if (subKey !== ""){
GM_setValue("gained" + subKey, GM_getValue("gained" + subKey) + 1);
}
}
}
// запрашиваем домашнюю страницу
sendGETRequest("home.php", "text/html; charset=windows-1251", function(){
// получаем номер выполненного задания
var response = this.responseText,
taskNumberArr = response.match(/Гильдия\sНаемников:\s[\d]{1,2}\s\(([\d]+?)\)/),
taskNumber = (taskNumberArr !== null) ? taskNumberArr[1] : "",
rewardsList = GM_getValue("rewardsList");
// записываем в хранилище строчку для очередной награды
if (rewardsList !== ""){
GM_setValue("rewardsList", taskNumber + ": " + reward + " за '" + currentTask + "'" + " " + rewardsList);
} else{
GM_setValue("rewardsList", taskNumber + ": " + reward + " за '" + currentTask + "'");
}
});
} else{ // если награды нет
// увеличиваем счётчик проваленных заданий
GM_setValue("tasksFailed", GM_getValue("tasksFailed") + 1);
}
// забываем текущее задание
GM_setValue("currentTask", "-1");
}
// Код отображения статистики
var MGRewardsStatsHeaderDiv = document.createElement("div"); // создаём элемент для вставки
MGRewardsStatsHeaderDiv.setAttribute("id", "MGRewardsStatsHeaderDiv"); // задаём ему id
// вводим переменные для доступа к значениям из хранилища
var rewardsList,
tasksTotal = GM_getValue("tasksTotal"),
tasksAccomplished = GM_getValue("tasksAccomplished"),
tasksFailed = GM_getValue("tasksFailed"),
goldTotal = GM_getValue("goldTotal"),
elementsTotal = GM_getValue("elementsTotal"),
elementsDouble = GM_getValue("elementsDouble"),
goldFromArmies = GM_getValue("goldFromArmies"),
goldFromConspirators = GM_getValue("goldFromConspirators"),
goldFromInvaders = GM_getValue("goldFromInvaders"),
goldFromMonsters = GM_getValue("goldFromMonsters"),
goldFromRaids = GM_getValue("goldFromRaids"),
goldFromVanguards = GM_getValue("goldFromVanguards"),
goldFromBrigands = GM_getValue("goldFromBrigands"),
accomplishedArmies = GM_getValue("accomplishedArmies"),
accomplishedConspirators = GM_getValue("accomplishedConspirators"),
accomplishedInvaders = GM_getValue("accomplishedInvaders"),
accomplishedMonsters = GM_getValue("accomplishedMonsters"),
accomplishedRaids = GM_getValue("accomplishedRaids"),
accomplishedVanguards = GM_getValue("accomplishedVanguards"),
accomplishedBrigands = GM_getValue("accomplishedBrigands"),
gainedAbrasives = GM_getValue("gainedAbrasives"),
gainedViperVenoms = GM_getValue("gainedViperVenoms"),
gainedTigerClaws = GM_getValue("gainedTigerClaws"),
gainedIceCrystals = GM_getValue("gainedIceCrystals"),
gainedMoonstones = GM_getValue("gainedMoonstones"),
gainedFireCrystals = GM_getValue("gainedFireCrystals"),
gainedMeteoriteShards = GM_getValue("gainedMeteoriteShards"),
gainedWitchBlooms = GM_getValue("gainedWitchBlooms"),
gainedWindflowers = GM_getValue("gainedWindflowers"),
gainedFernFlowers = GM_getValue("gainedFernFlowers"),
gainedToadstools = GM_getValue("gainedToadstools");
// собираем строчки с дополнительной информацией в скобках при различных показателях
var tasksAccomplishedPercentageString = (tasksTotal !== 0) ? " (" + Math.round(tasksAccomplished/tasksTotal*100) + "%)" : "",
tasksFailedPercentageString = (tasksTotal !== 0) ? " (" + Math.round(tasksFailed/tasksTotal*100) + "%)" : "",
goldTotalPerTaskString = (tasksAccomplished !== 0) ? " (" + Math.round(goldTotal/tasksAccomplished) + "/зад.)" : "",
elementsTotalPercentageString = (tasksAccomplished !== 0) ? " (<span title='Шанс на получение хотя бы одного элемента с задания'>" + Math.round((elementsTotal-elementsDouble)/tasksAccomplished*100) + "%</span>; <span title='Среднее количество элементов на задание (с учётом двойных)'>" + (elementsTotal/tasksAccomplished).toFixed(2) + "</span>)" : "",
elementsDoublePercentageString = (tasksAccomplished !== 0) ? " (<span title='Шанс на двойное выпадение элементов в расчёте на задание'>" + (elementsDouble/tasksAccomplished*100).toFixed(2) + "%</span>)" : "",
goldFromArmiesPerTaskString = (accomplishedArmies !== 0) ? " (" + Math.round(goldFromArmies/accomplishedArmies) + "/зад.)" : "",
goldFromConspiratorsPerTaskString = (accomplishedConspirators !== 0) ? " (" + Math.round(goldFromConspirators/accomplishedConspirators) + "/зад.)" : "",
goldFromInvadersPerTaskString = (accomplishedInvaders !== 0) ? " (" + Math.round(goldFromInvaders/accomplishedInvaders) + "/зад.)" : "",
goldFromMonstersPerTaskString = (accomplishedMonsters !== 0) ? " (" + Math.round(goldFromMonsters/accomplishedMonsters) + "/зад.)" : "",
goldFromRaidsPerTaskString = (accomplishedRaids !== 0) ? " (" + Math.round(goldFromRaids/accomplishedRaids) + "/зад.)" : "",
goldFromVanguardsPerTaskString = (accomplishedVanguards !== 0) ? " (" + Math.round(goldFromVanguards/accomplishedVanguards) + "/зад.)" : "",
goldFromBrigandsPerTaskString = (accomplishedBrigands !== 0) ? " (" + Math.round(goldFromBrigands/accomplishedBrigands) + "/зад.)" : "",
gainedAbrasivesPercentageString = (elementsTotal !== 0) ? " (" + Math.round(gainedAbrasives/elementsTotal*100) + "%)" : "",
gainedViperVenomsPercentageString = (elementsTotal !== 0) ? " (" + Math.round(gainedViperVenoms/elementsTotal*100) + "%)" : "",
gainedTigerClawsPercentageString = (elementsTotal !== 0) ? " (" + Math.round(gainedTigerClaws/elementsTotal*100) + "%)" : "",
gainedIceCrystalsPercentageString = (elementsTotal !== 0) ? " (" + Math.round(gainedIceCrystals/elementsTotal*100) + "%)" : "",
gainedMoonstonesPercentageString = (elementsTotal !== 0) ? " (" + Math.round(gainedMoonstones/elementsTotal*100) + "%)" : "",
gainedFireCrystalsPercentageString = (elementsTotal !== 0) ? " (" + Math.round(gainedFireCrystals/elementsTotal*100) + "%)" : "",
gainedMeteoriteShardsPercentageString = (elementsTotal !== 0) ? " (" + Math.round(gainedMeteoriteShards/elementsTotal*100) + "%)" : "",
gainedWitchBloomsPercentageString = (elementsTotal !== 0) ? " (" + Math.round(gainedWitchBlooms/elementsTotal*100) + "%)" : "",
gainedWindflowersPercentageString = (elementsTotal !== 0) ? " (" + Math.round(gainedWindflowers/elementsTotal*100) + "%)" : "",
gainedFernFlowersPercentageString = (elementsTotal !== 0) ? " (" + Math.round(gainedFernFlowers/elementsTotal*100) + "%)" : "",
gainedToadstoolsPercentageString = (elementsTotal !== 0) ? " (" + Math.round(gainedToadstools/elementsTotal*100) + "%)" : "";
// задаём код элемента для вставки
MGRewardsStatsHeaderDiv.innerHTML =
"<style>" +
"#MGRewardsStatsHeaderDiv{" +
"margin: 7px 0px 5px 0px;" +
"text-align: center;" +
"}" +
"#MGRewardsStatsHeaderTitleShowHide, #MGRewardsStatsInnerDiv2TitleShowHide, #MGRewardsStatsInnerDiv3TitleShowHide, #MGRewardsStatsInnerDiv4TitleShowHide, #MGRewardsStatsInnerDiv4TitleExportToFile{" +
"color: blue;" +
"cursor: pointer;" +
"}" +
"#MGRewardsStatsInnerDiv1{" +
"margin: 5px 0px 15px 0px;" +
"}" +
"#MGRewardsStatsInnerDiv2InnerContainer, #MGRewardsStatsInnerDiv3InnerContainer, #MGRewardsStatsInnerDiv4InnerContainer{" +
"margin: 5px 0px 5px 0px;" +
"}" +
"#MGRewardsStatsInnerDiv4InnerContainer{" +
"padding: 0% 20% 0% 20%;" +
"text-align: left;" +
"white-space: pre-wrap;" +
"}" +
".MGRewardsStatsInnerSpanLeft{" +
"display: inline-block;" +
"width: 53%;" +
"text-align: right;" +
"}" +
".MGRewardsStatsInnerSpanRight{" +
"display: inline-block;" +
"width: 47%;" +
"text-align: left;" +
"}" +
"</style>" +
"<hr width='90%'>" +
"<div id='MGRewardsStatsHeaderTitle'>" +
"<b>Статистика наград ГН</b>: " +
"<font id='MGRewardsStatsHeaderTitleShowHide'>" +
"показать информацию" +
"</font>" +
"</div>" +
"<div id='MGRewardsStatsInnerContainer'>" +
"<div id='MGRewardsStatsInnerDiv1'>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Сдано заданий: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + tasksTotal + "</b></span><br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Выполнено: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + tasksAccomplished + "</b>" + tasksAccomplishedPercentageString + "</span><br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Провалено: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + tasksFailed + "</b>" + tasksFailedPercentageString + "</span><br>" +
"<br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Золота получено: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + goldTotal + "</b>" + goldTotalPerTaskString + "</span><br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Элементов: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + elementsTotal + "</b>" + elementsTotalPercentageString + "</span><br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Двойных: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + elementsDouble + "</b>" + elementsDoublePercentageString + "</span><br>" +
"<br>" +
"<font size='1'>Сбор данных идёт с " + GM_getValue("dataCollectionSince") + "</font>" +
"</div>" +
"<div id='MGRewardsStatsInnerDiv2'>" +
"<div id='MGRewardsStatsInnerDiv2Title'>" +
"<span class='MGRewardsStatsInnerSpanLeft'><b>Золото по заданиям</b>: </span><span class='MGRewardsStatsInnerSpanRight'>" + "<font id='MGRewardsStatsInnerDiv2TitleShowHide'>" +
"показать" +
"</font></span>" +
"</div>" +
"<div id='MGRewardsStatsInnerDiv2InnerContainer'>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Армии: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + goldFromArmies + "</b>" + goldFromArmiesPerTaskString + "</span><br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Заговорщики: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + goldFromConspirators + "</b>" + goldFromConspiratorsPerTaskString + "</span><br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Захватчики: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + goldFromInvaders + "</b>" + goldFromInvadersPerTaskString + "</span><br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Монстры: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + goldFromMonsters + "</b>" + goldFromMonstersPerTaskString + "</span><br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Набеги: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + goldFromRaids + "</b>" + goldFromRaidsPerTaskString + "</span><br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Отряды: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + goldFromVanguards + "</b>" + goldFromVanguardsPerTaskString + "</span><br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Разбойники: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + goldFromBrigands + "</b>" + goldFromBrigandsPerTaskString + "</span><br>" +
"</div>" +
"</div>" +
"<div id='MGRewardsStatsInnerDiv3'>" +
"<div id='MGRewardsStatsInnerDiv3Title'>" +
"<span class='MGRewardsStatsInnerSpanLeft'><b>Элементы по видам</b>: </span><span class='MGRewardsStatsInnerSpanRight'>" + "<font id='MGRewardsStatsInnerDiv3TitleShowHide'>" +
"показать" +
"</font></span>" +
"</div>" +
"<div id='MGRewardsStatsInnerDiv3InnerContainer'>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Абразив: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + gainedAbrasives + "</b>" + gainedAbrasivesPercentageString + "</span><br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Змеиный яд: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + gainedViperVenoms + "</b>" + gainedViperVenomsPercentageString + "</span><br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Клык тигра: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + gainedTigerClaws + "</b>" + gainedTigerClawsPercentageString + "</span><br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Ледяной кристалл: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + gainedIceCrystals + "</b>" + gainedIceCrystalsPercentageString + "</span><br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Лунный камень: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + gainedMoonstones + "</b>" + gainedMoonstonesPercentageString + "</span><br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Огненный кристалл: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + gainedFireCrystals + "</b>" + gainedFireCrystalsPercentageString + "</span><br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Осколок метеорита: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + gainedMeteoriteShards + "</b>" + gainedMeteoriteShardsPercentageString + "</span><br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Цветок ведьм: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + gainedWitchBlooms + "</b>" + gainedWitchBloomsPercentageString + "</span><br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Цветок ветров: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + gainedWindflowers + "</b>" + gainedWindflowersPercentageString + "</span><br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Цветок папоротника: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + gainedFernFlowers + "</b>" + gainedFernFlowersPercentageString + "</span><br>" +
"<span class='MGRewardsStatsInnerSpanLeft'>Ядовитый гриб: </span><span class='MGRewardsStatsInnerSpanRight'><b>" + gainedToadstools + "</b>" + gainedToadstoolsPercentageString + "</span><br>" +
"</div>" +
"</div>" +
"<div id='MGRewardsStatsInnerDiv4'>" +
"<div id='MGRewardsStatsInnerDiv4Title'>" +
"<span class='MGRewardsStatsInnerSpanLeft'><b>Полный список наград</b>: </span><span class='MGRewardsStatsInnerSpanRight'>" +
"<font id='MGRewardsStatsInnerDiv4TitleShowHide'>" +
"показать" +
"</font>" +
" / " +
"<font id='MGRewardsStatsInnerDiv4TitleExportToFile'>" +
"сохранить в файл" +
"</font>" +
"</span>" +
"</div>" +
"<div id='MGRewardsStatsInnerDiv4InnerContainer'>" +
"</div>" +
"</div>" +
"</div>";
// увеличиваем отступ на странице сданного задания и при наличии доступного, но не просмотренного задания и нахождении в другом районе
if (documentInnerHTHL.indexOf("мин.") !== -1 || documentInnerHTHL.indexOf("Для Вас есть задание") !== -1){
MGRewardsStatsHeaderDiv.style.margin = "20px 0px 5px 0px";
}
// убираем дублирование горизонтальной линии при просмотре из другого района страницы сданного задания (без награды, с таймером до нового)
if (documentInnerHTHL.indexOf("Вы находитесь в другом районе") !== -1 && documentInnerHTHL.indexOf("минут") === -1 && documentInnerHTHL.indexOf("Для Вас есть задание") === -1){
var hr = document.querySelector("hr[width='90%']");
hr.parentNode.removeChild(hr);
}
// вставляем элемент в страницу
document.querySelector("td[rowspan='2']").appendChild(MGRewardsStatsHeaderDiv);
// задаём переменные для доступа к добавленным элементам
var MGRewardsStatsInnerContainer = document.getElementById("MGRewardsStatsInnerContainer"),
MGRewardsStatsHeaderTitleShowHide = document.getElementById("MGRewardsStatsHeaderTitleShowHide"),
MGRewardsStatsInnerDiv2InnerContainer = document.getElementById("MGRewardsStatsInnerDiv2InnerContainer"),
MGRewardsStatsInnerDiv2TitleShowHide = document.getElementById("MGRewardsStatsInnerDiv2TitleShowHide"),
MGRewardsStatsInnerDiv3InnerContainer = document.getElementById("MGRewardsStatsInnerDiv3InnerContainer"),
MGRewardsStatsInnerDiv3TitleShowHide = document.getElementById("MGRewardsStatsInnerDiv3TitleShowHide"),
MGRewardsStatsInnerDiv4InnerContainer = document.getElementById("MGRewardsStatsInnerDiv4InnerContainer"),
MGRewardsStatsInnerDiv4TitleShowHide = document.getElementById("MGRewardsStatsInnerDiv4TitleShowHide"),
MGRewardsStatsInnerDiv4TitleExportToFile = document.getElementById("MGRewardsStatsInnerDiv4TitleExportToFile");
// по умолчанию скрываем внутренние блоки
MGRewardsStatsInnerContainer.style.display = "none";
MGRewardsStatsInnerDiv2InnerContainer.style.display = "none";
MGRewardsStatsInnerDiv3InnerContainer.style.display = "none";
MGRewardsStatsInnerDiv4InnerContainer.style.display = "none";
// вешаем событие по клику на "показать/скрыть информацию" в заголовке главного информационного блока статистики
MGRewardsStatsHeaderTitleShowHide.onclick = function(){
// если скрыто, то показываем; если открыто, то скрываем; ставим соответствующий текст на кнопке
if (MGRewardsStatsInnerContainer.style.display === "none"){
MGRewardsStatsInnerContainer.style.display = "block";
MGRewardsStatsHeaderTitleShowHide.innerHTML = "скрыть информацию";
} else{
MGRewardsStatsInnerContainer.style.display = "none";
MGRewardsStatsHeaderTitleShowHide.innerHTML = "показать информацию";
}
};
// задаём события по клику на "показать/скрыть" в заголовках внутренних блоков
MGRewardsStatsInnerDiv2TitleShowHide.onclick = function(){
// если скрыто, то показываем; если открыто, то скрываем; ставим соответствующий текст на кнопке
if (MGRewardsStatsInnerDiv2InnerContainer.style.display === "none"){
MGRewardsStatsInnerDiv2InnerContainer.style.display = "block";
MGRewardsStatsInnerDiv2TitleShowHide.innerHTML = "скрыть";
} else{
MGRewardsStatsInnerDiv2InnerContainer.style.display = "none";
MGRewardsStatsInnerDiv2TitleShowHide.innerHTML = "показать";
}
};
MGRewardsStatsInnerDiv3TitleShowHide.onclick = function(){
// если скрыто, то показываем; если открыто, то скрываем; ставим соответствующий текст на кнопке
if (MGRewardsStatsInnerDiv3InnerContainer.style.display === "none"){
MGRewardsStatsInnerDiv3InnerContainer.style.display = "block";
MGRewardsStatsInnerDiv3TitleShowHide.innerHTML = "скрыть";
} else{
MGRewardsStatsInnerDiv3InnerContainer.style.display = "none";
MGRewardsStatsInnerDiv3TitleShowHide.innerHTML = "показать";
}
};
MGRewardsStatsInnerDiv4TitleShowHide.onclick = function(){
rewardsList = GM_getValue("rewardsList");
// задаём код элемента; если скрыт, то показываем; если открыт, то скрываем; ставим соответствующий текст на кнопке
if (MGRewardsStatsInnerDiv4InnerContainer.style.display === "none"){
if (rewardsList !== ""){ // вставляем плейсхолдер при отсутствии сохранённых наград
MGRewardsStatsInnerDiv4InnerContainer.innerHTML = rewardsList;
} else{
MGRewardsStatsInnerDiv4InnerContainer.style.padding = "0px";
MGRewardsStatsInnerDiv4InnerContainer.innerHTML = "<center>(пока не сохранено ни одной награды)</center>";
}
MGRewardsStatsInnerDiv4InnerContainer.style.display = "block";
MGRewardsStatsInnerDiv4TitleShowHide.innerHTML = "скрыть";
} else{
MGRewardsStatsInnerDiv4InnerContainer.style.display = "none";
MGRewardsStatsInnerDiv4TitleShowHide.innerHTML = "показать";
}
};
// вешаем событие по клику на "сохранить в файл" в заголовке блока с полным списком наград
MGRewardsStatsInnerDiv4TitleExportToFile.onclick = function(){
rewardsList = GM_getValue("rewardsList");
// получаем текущую дату в формате dd-mm-yy и сохраняем список наград в txt-файл
var currentMoment = new Date(),
currentMomentOnServer = new Date(Date.now() + currentMoment.getTimezoneOffset()*60000 + 10800000),
filename =
"Статистика наград ГН " +
addLeadingZero(currentMomentOnServer.getDate()) + "-" +
addLeadingZero(currentMomentOnServer.getMonth() + 1) + "-" +
currentMomentOnServer.getFullYear().toString().slice(2, 4) +
".txt";
saveToFile(rewardsList.replace(/ /g, "\r\n"), filename, "text/plain");
};
})();