NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @author dw4rf & Casperovskii; ElMarado // @collaborator style: sw.East // @name HWM_Style_Pereka4_Mod // @description ru: Добаляет прогресс бар, который показывает положение вашей суммарной умелки относительно средней на уровне; en: Add progress bar for sum of faction exp. and balance coef. // @namespace Pereka4 // @version 2.9.2 // @icon http://i.imgur.com/GScgZzY.jpg // @encoding utf-8 // @include *//*heroeswm.ru/home.php* // @include *//178.248.235.15/home.php* // @include *//*lordswm.com/home.php* // @include *//*heroeswm.ru/pl_info.php* // @include *//178.248.235.15/pl_info.php* // @include *//*lordswm.com/pl_info.php* // @require https://openuserjs.org/src/libs/Marti/GM_setStyle.js // @grant GM_addStyle // @grant GM_deleteValue // @grant GM_getValue // @grant GM_setValue // @grant GM_registerMenuCommand // @updateURL https://openuserjs.org/meta/chesheerk/HWM_Style_Pereka4_Mod.meta.js // @license MIT // @copyright 2013-2018, sw.East (https://www.heroeswm.ru/pl_info.php?id=3541252) // ==/UserScript== // API method adds a string of CSS to the document GM_addStyle(` .pereka4_progress { position: relative; width: 200px; margin: 3px 0 3px 8px; background-color: #727272; height: 5px; } .pereka4_progress_bar { height: 5px; max-width: 200px; background-color: #8bc34a; padding: 0 auto; } .pereka4_bar_perc { color: #455a64; font-size: 9px; margin-top: -9px; padding: 0 1px; text-align: center; height: 9px; width: 30px; white-space: nowrap; } .exp-container {padding-left: 8px;} .color_bar_perc_pereka4 {padding: 0 3px;} .exp-low {background-color: #d35e50;} .exp-norm {background-color: #8bc34a;} .exp-hight {background-color: #4663b9;} `); //addGlobalStyle('.exp-container{text-align:right;width:202px;height:16px;margin: 2px 0 -10px 8px;padding: 0 0 0 2px;border: none;font-weight: bold;}'); function browser() { var ua = navigator.userAgent; if (ua.search(/MSIE/) > 0) return 'Internet Explorer'; if (ua.search(/Firefox/) > 0) return 'Firefox'; if (ua.search(/Opera/) > 0) return 'Opera'; if (ua.search(/Chrome/) > 0) return 'Google Chrome'; if (ua.search(/Safari/) > 0) return 'Safari'; if (ua.search(/Konqueror/) > 0) return 'Konqueror'; if (ua.search(/Iceweasel/) > 0) return 'Debian Iceweasel'; if (ua.search(/SeaMonkey/) > 0) return 'SeaMonkey'; // Браузеров очень много, все вписывать смысле нет, Gecko почти везде встречается if (ua.search(/Gecko/) > 0) return 'Gecko'; // а может это вообще поисковый робот return 'Search Bot'; } function main(e){ var browserVersion = browser(); var version = "2.92"; var srednya_umka = 0; var vilka = 1; var umk_min = 0; var umk_max = 0; var sum_umk = 0; var lang_en = new Array(); var lang_uk = lang_en; var lang_us = lang_en; var lang_com = lang_en; lang_en['Knight'] = 'Knight'; lang_en['Necromancer'] = 'Necromancer'; lang_en['Wizard'] = 'Wizard'; lang_en['Elf'] = 'Elf'; lang_en['Barbarian'] = 'Barbarian'; lang_en['Dark elf'] = 'Dark elf'; lang_en['Demon'] = 'Demon'; lang_en['Dwarf'] = 'Dwarf'; lang_en['Steepe barbarian'] = 'Steepe barbarian'; lang_en['Combat level'] = 'Combat level'; var lang_ru = new Array(); lang_ru['Knight'] = '\u0420\u044B\u0446\u0430\u0440\u044C'; lang_ru['Necromancer'] = '\u041D\u0435\u043A\u0440\u043E\u043C\u0430\u043D\u0442'; lang_ru['Wizard'] = '\u041C\u0430\u0433'; lang_ru['Elf'] = '\u042D\u043B\u044C\u0444'; lang_ru['Barbarian'] = '\u0412\u0430\u0440\u0432\u0430\u0440'; lang_ru['Dark elf'] = '\u0422\u0435\u043C\u043D\u044B\u0439 \u044D\u043B\u044C\u0444'; lang_ru['Demon'] = '\u0414\u0435\u043C\u043E\u043D'; lang_ru['Dwarf'] = '\u0413\u043D\u043E\u043C'; lang_ru['Steepe barbarian'] = '\u0421\u0442\u0435\u043f\u043d\u043e\u0439 \u0432\u0430\u0440\u0432\u0430\u0440'; lang_ru['Combat level'] = '\u0411\u043E\u0435\u0432\u043E\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C'; var language=lang_en; // Определение языка var lingua; if (location.hostname.match('lordswm')) {lingua='en';} else {lingua = 'ru';} try{ eval('language = lang_' + lingua); }catch(e){ } //Фракции var factions = [ T('Knight'),T('Necromancer'),T('Wizard'),T('Elf'),T('Barbarian'),T('Dark elf'),T('Demon'),T('Dwarf'),T('Steepe barbarian') ]; //Средние умения фракций на 3-22 уровне var sred_umk = [ 70,130,200,340,560,950,1510,2260,3240,4510,6350, 9210,13960,21070,31060,43820,59740,80040,104720,167260 ]; //Вилки границ недокача/перекача от средних умений фракций на 3-22 уровне var vilka_um = [ 2.5, 2.2, 1.9, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6, 1.6 ]; var XPFirst = XPathResult.FIRST_ORDERED_NODE_TYPE; // Постоянные для первого элемента XPath var XPList = XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE; // Постоянные элементы списка XPath /** * Поиск по документу с помощью XPath * * Ввод: * xpath Выражение для поиска * xpres Тип поиска * * Вывод: * Ссылка на найденный объект */ function find(xpath, xpres,startnode){ if (!startnode) {startnode=document;} var ret = document.evaluate(xpath, startnode, null, xpres, null); return xpres == XPFirst ? ret.singleNodeValue : ret; } /** * Добавляет узел после 1 условия * * Ввод: * refChild узел ссылки * newChild узлы, которые будут добавлены */ function insertAfter(newChild, refChild) { node.parentNode.insertBefore(newChild, refChild.nextSibling); } /** * Создание элемента * * Ввод: * tag Название нового элемента * content Содержание нового элемента в текстовом формате * * Вывод: * Ссылка на созданный элемент */ function elem(tag, content){ var ret = document.createElement(tag); ret.innerHTML = content; return ret; } /** * Перевод текста на определенный язык * * Ввод: * Текст для перевода * * Вывод: * Перевод */ function T(testo){ // Язык по умолчанию, если слово не существует: английский if (language[testo] == undefined) return lang_en[testo]; else return language[testo]; } /** * Создание прогресс бара * * Ввод: * Текущий опыт * Текущее умение фракции * Уровень * * Вывод: * HTML для создания прогресс бара */ //function makeProgressBar(exp_attuale, min_umka, max_umka, vlk, lvl){ function makeProgressBar(exp_attuale, min_umka, max_umka, vlk, lvl){ exp_attuale = exp_attuale - min_umka; max_umka = max_umka - min_umka; var perc = exp_attuale * 100 / max_umka; var ins_txt=""; // Stile //var addGlobalStyle = ""; if (lvl > 18) ins_txt=" (\u0423 19-22 \u0443\u0440\u043E\u0432\u043D\u044F \u043D\u0435 \u0443\u0447\u0438\u0442\u044B\u0432\u0430\u0435\u0442\u0441\u044F)." if (perc<100 && perc>0) { var progress_bar_html = "<div class=\"pereka4_progress\">"+ "<div class=\"pereka4_progress_bar exp-norm\" style=\"width:" + perc +"%\"></div>"+ "<div class=\"pereka4_bar_perc color_bar_perc_pereka4\" style=\"margin-left:" + perc +"%\">" + Math.round(perc)/1 +" %</div>"+ "</div>"+ "<div class=\"exp-container\">\u0412 \u043D\u043E\u0440\u043C\u0435!"+ins_txt+"</div>"; } if (perc>100){ perc = 100; var progress_bar_html = "<div class=\"pereka4_progress\">"+ "<div class=\"pereka4_progress_bar exp-hight\" style=\"width:" + perc +"%\"></div>"+ "<div class=\"pereka4_bar_perc color_bar_perc_pereka4\" style=\"margin-left:" + perc +"%\">" + Math.round(perc)/1 +" %</div>"+ "</div>"+ "<div class=\"exp-container\">\u041F\u0435\u0440\u0435\u043A\u0430\u0447!"+ins_txt+ "<br />\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u043E\u043F\u044B\u0442\u0430:"+ (((sum_umk/srednya_umka/vlk)-1)*100).toFixed(2) + "</div>"; } if (perc<0) { perc = 0; var progress_bar_html = "<div class=\"pereka4_progress\" style=\"background-color: #d35e50 !important;\">"+ "<div class=\"pereka4_progress_bar exp-low\" style=\"width:" + perc +"%\"></div>"+ "<div class=\"pereka4_bar_perc color_bar_perc_pereka4\" style=\"margin-left:" + perc +"%\">" + Math.round(perc)/1 +" %</div>"+ "</div>"+ "<div class=\"exp-container\">\u041D\u0435\u0434\u043E\u043A\u0430\u0447!"+ins_txt+ "<br />\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0443\u043C\u0435\u043D\u0438\u0439:"+ Math.round(((srednya_umka/sum_umk)-1)*1000)/10 + "</div>"; } return progress_bar_html; } function showExpBar(){ var tabelle = find("//table", XPList); var player_info = ""; var skill_info = ""; var player_faction = ""; if (location.href.indexOf('home.php') != -1) { //var bg-color = "#fff"; //Поиск страницы for (var i = 25; i < tabelle.snapshotLength; i++){ if (!tabelle.snapshotItem(i)) continue; if (!tabelle.snapshotItem(i).childNodes[0]) continue; if (!tabelle.snapshotItem(i).childNodes[0].childNodes[0]) continue; //Player level if (tabelle.snapshotItem(i).childNodes[0].childNodes[0].childNodes[0]) { if (tabelle.snapshotItem(i).childNodes[0].childNodes[0].childNodes[0].innerHTML.indexOf(T('Combat level') +":") > 0) { player_info = tabelle.snapshotItem(i).childNodes[0].childNodes[0].childNodes[0]; // color GM_addStyle(".color_bar_perc_pereka4 {background-color: #fff;}"); } } //Skill Info if (tabelle.snapshotItem(i).childNodes[0].childNodes[0].childNodes[1]) { if (tabelle.snapshotItem(i).childNodes[0].childNodes[0].childNodes[1].innerHTML.indexOf(T('Knight') +":") > 0) { skill_info = tabelle.snapshotItem(i).childNodes[0].childNodes[0].childNodes[1]; } } } } else if (location.href.indexOf('pl_info.php') != -1) { //Поиск страницы for (var i = 25; i < tabelle.snapshotLength; i++){ if (!tabelle.snapshotItem(i)) continue; if (!tabelle.snapshotItem(i).childNodes[0]) continue; //Player Info if (tabelle.snapshotItem(i).childNodes[0].childNodes[2]) { if (tabelle.snapshotItem(i).childNodes[0].childNodes[2].childNodes[0]) { if (tabelle.snapshotItem(i).childNodes[0].childNodes[2].childNodes[0].textContent.indexOf(T('Combat level') +":") > 0) { player_info = tabelle.snapshotItem(i).childNodes[0].childNodes[2].childNodes[0]; // color GM_addStyle(".color_bar_perc_pereka4 {background-color: #f5f3ea;}"); } } } //Skill Info if (tabelle.snapshotItem(i).childNodes[0].childNodes[1]) { if (tabelle.snapshotItem(i).childNodes[0].childNodes[1].childNodes[1]) { if (tabelle.snapshotItem(i).childNodes[0].childNodes[1].childNodes[1].textContent.indexOf(T('Knight')) > 0) { skill_info = tabelle.snapshotItem(i).childNodes[0].childNodes[1].childNodes[1]; } } } } /*tabelle.snapshotItem(31).childNodes[0].childNodes[0].childNodes[0].innerHTML.search(/\- (.*)</); player_faction = RegExp.$1; alert("player_faction = "+player_faction);*/ } //alert(player_faction+'\n\n'+factions.indexOf(player_faction)); //========== Combat Level var lvl_info = player_info.textContent.split("\u00BB")[1]; lvl_info.search(/(.*)\((.*)\)(.*)/); var lvl_attuale = eval(RegExp.$1.replace(T('Combat level') +": ","")); //БУ var exp_attuale = 0; var skills = skill_info.innerHTML.split("> "); //========== Player Faction(s) var active_faction_index = factions.indexOf(player_faction); // show ALL factions for(var faction_index=0; faction_index<factions.length; faction_index++){ lvl_info = skills[faction_index]; lvl_info.search(/\((\d*.?\d*)\)/); exp_attuale = RegExp.$1; sum_umk = sum_umk + Number(exp_attuale); } sum_umk = Math.round(sum_umk*100)/100; var nomerumki = (lvl_attuale - 3); srednya_umka = sred_umk[nomerumki]; vilka = vilka_um[nomerumki]; umk_min = sred_umk[nomerumki]/vilka; umk_max = sred_umk[nomerumki]*vilka; if (lvl_attuale>2){ //progress_bar_html = makeProgressBar(sum_umk, umk_min, umk_max, vilka, lvl_attuale); progress_bar_html = makeProgressBar(sum_umk, umk_min, umk_max, vilka, lvl_attuale); } if (faction_index<factions.length-1) { var next_faction = factions[faction_index + 1]; skill_info.innerHTML = skill_info.innerHTML.replace("<br> "+ next_faction, progress_bar_html +" "+ next_faction); skill_info.innerHTML = skill_info.innerHTML.replace("<br> <b>"+ next_faction, progress_bar_html +" <b>"+ next_faction); } else { skill_info.innerHTML = skill_info.innerHTML.replace("<br> \u0413\u0438\u043B\u044C\u0434\u0438\u044F \u041E\u0445\u043E\u0442\u043D\u0438\u043A\u043E\u0432","<br> <span style='font-weight: bold;'>\u0421\u0443\u043C\u043C\u0430 \u0443\u043C\u0435\u043D\u0438\u0439:</span> "+ sum_umk + progress_bar_html +"<br> \u0413\u0438\u043B\u044C\u0434\u0438\u044F \u041E\u0445\u043E\u0442\u043D\u0438\u043A\u043E\u0432"); } }; // Конкретные действия для некоторых страниц if (location.href.indexOf('home.php') != -1) showExpBar(); if (location.href.indexOf('pl_info.php') != -1) showExpBar(); }; main(false);