HWM_Monster_Links

Добавляет ссылку на описание существ и монстров в заданиях ГН

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

Bạn sẽ cần cài đặt một tiện ích mở rộng như Tampermonkey hoặc Violentmonkey để cài đặt kịch bản này.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(Tôi đã có Trình quản lý tập lệnh người dùng, hãy cài đặt nó!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name HWM_Monster_Links
// @author  Zeleax
// @namespace   Zeleax
// @description Добавляет ссылку на описание существ и монстров в заданиях ГН
// @include /https?:\/\/(www.heroeswm.ru|178.248.235.15|www.lordswm.com|my.lordswm.com)\/(plstats_hunters.php|mercenary_guild.php)/
// @include https://daily.heroeswm.ru/help/gn/monsters.php*
// @version 1.15
// @license MIT
// @grant  none
// ==/UserScript==
// GM functions
if (typeof GM_getValue != 'function') {this.GM_getValue=function (key,def) {return localStorage[key] || def;};this.GM_setValue=function (key,value) {return localStorage[key]=value;};	this.GM_deleteValue=function (key) {return delete localStorage[key];};}

var monsterarr, monstersDaily, res, rows, txt, i, href, mlink;

if(/plstats_hunters.php/.test(location.href)){
   monsterarr = new Object();
   var ratetable = getClosestParentByTagName(getE("(//td[contains(text(),'Монстры')])"), 'table');

   rows=ratetable.getElementsByClassName("pi");
   for(i=0; i<rows.length; i++)
   {
      el = rows[i];
      if ((href = el.getAttribute("href")) && (res = /army_info.php\?name=(\S+)/.exec(href)) && res[1]){
         monsterarr[el.innerHTML] = res[1];
      }
   }
   if (Object.keys(monsterarr).length > 1) GM_setValue("monsters", JSON.stringify(monsterarr));
}
else if(/mercenary_guild.php/.test(location.href))
{
    var el = getE('//td[contains(text(),"Репутация:")]');
    txt = el.innerHTML;

    var monstername, link;

    if(((res = /'(.{2,25}) {\d+}'/.exec(txt)) || (res = /'<b>(.{2,25})-набеги \{\d+\}/.exec(txt))) && (monstername = res[1]) && (link = getCreatures()[monstername])){
        el.innerHTML = txt.replace(monstername,'<a target="_blank" href="army_info.php\?name='+link+'">'+monstername+'</a>');
    }
    else if ((res = /<b>(.{2,25})-монстр {(\d+)}/.exec(txt)) && (monstername = res[1]))
    {
        var monsterId;
        monstersDaily=getMonstersDaily();

        if(monstersDaily) monsterId= monstersDaily[monstername];
        if(!monsterId) monsterId=0;

        el.innerHTML = txt.replace(monstername+'-монстр','<a target="_blank" href="http://daily.heroeswm.ru/help/gn/monsters.php?id='+monsterId+'&lvl='+res[2]+'">'+monstername+'-монстр'+'</a>');
    }
}
else if(/daily/.test(location.href))
{
    var resLvl, x, row;
    var resId=/id=(\d+)/.exec(location.href);
    if((resId) && (resId[1]==0) ){ // значит нужно обновить и сохранить список монстров
        monstersDaily = new Object();
        el = document.getElementById('id');
        var list = getL("./option[not (@value='0')]", el);
        for (i=0 ; i<list.snapshotLength; i++) monstersDaily[list.snapshotItem(i).text]=list.snapshotItem(i).value;

        if (Object.keys(monstersDaily).length > 1) {
            console.log('Сохранить для getMonstersDaily():', JSON.stringify(monstersDaily));
        }
    }
    else if((resLvl=/lvl=(\d+)/.exec(location.href)) && (x = document.getElementsByClassName("Table")))
    {
        let regex = new RegExp( '\\{'+resLvl[1]+'\\}','i');
        for(i=0, row; row=x[0].rows[i]; i++)
            if(regex.test(row.cells[0].innerHTML)) {row.style.backgroundColor = "yellow"; break; }
    }
}

function getCreatures(){
   if ((monsterarr==null || monsterarr==undefined) && !(monsterarr=JSON.parse( GM_getValue("monsters", null))))
      window.open(document.location.origin+'/plstats_hunters.php');
   return monsterarr;
}

function getMonstersDaily(){
return JSON.parse( '{"Адепты":"494","Адские жеребцы":"76","Адские жнецы":"284","Адские псы":"74","Ангелы":"132","Арбалетчики":"42","Архангелы":"249","Архидемоны":"293","Архидьяволы":"292","Архиличи":"146","Архимаги":"104","Ассасины":"56","Астральные драконы":"514","Баньши":"515","Бегемоты":"131","Берсерки":"163","Бестии":"49","Бесы":"78","Бехолдеры":"207","Боевые грифоны":"36","Боевые единороги":"147","Боевые кентавры":"309","Боевые маги":"578","Вампиры":"15","Вармонгеры":"330","Ведьмы-призраки":"522","Великие левиафаны":"214","Верховные друиды":"120","Вестники смерти":"235","Виверны":"336","Визири джиннов":"579","Владычицы тени":"239","Водные элементали":"156","Вожаки":"436","Воздушные элементали":"153","Воины-наёмники":"21","Воители":"158","Воры-колдуны":"125","Воры-разведчики":"123","Воры-убийцы":"124","Высшие ангелы":"496","Высшие вампиры":"118","Высшие личи":"341","Гарпии":"200","Гарпии-ведьмы":"201","Гарпунеры":"378","Гигантские ящеры":"45","Гидры":"50","Глубоководные черти":"212","Гниющие зомби":"270","Гоблины":"14","Гоблины-лучники":"314","Гоблины-маги":"545","Гоблины-трапперы":"386","Гоги":"285","Големы смерти":"520","Головорезы":"254","Горные стражи":"339","Гремлины":"9","Гремлины-вредители":"253","Грифоны":"3","Громовержцы":"167","Демонессы":"122","Детёныши ящера":"46","Джинны":"39","Джинны-султаны":"105","Дикие энты":"589","Дочери земли":"333","Дочери неба":"332","Древние бегемоты":"301","Древние энты":"238","Дриады":"31","Друиды":"26","Духи":"512","Дьяволы":"82","Дьяволята":"281","Единороги":"38","Железные големы":"12","Жрецы рун":"164","Защитники веры":"260","Защитники гор":"157","Зелёные драконы":"103","Земные элементали":"154","Злобные глаза":"208","Зомби":"5","Изумрудные драконы":"100","Имперские грифоны":"117","Инквизиторы":"145","Искусительницы":"485","Ифриты":"280","Ифриты султаны":"282","Каменные горгульи":"8","Камнегрызы":"203","Камнееды":"202","Кентавры":"310","Князья вампиров":"513","Колоссы":"106","Кони преисподней":"290","Костоломы":"114","Костяные драконы":"133","Кочевые кентавры":"311","Кошмары":"150","Красные драконы":"747","Крестьяне":"4","Кристальные драконы":"590","Кровавые ящеры":"47","Кровоглазые циклопы":"399","Кшатрии ракшасы":"580","Лазутчики":"52","Латники":"71","Левиафаны":"213","Лесные снайперы":"261","Личи":"29","Ловчие":"696","Лучники":"2","Маги":"16","Магма драконы":"169","Магнитные големы":"259","Магоги":"287","Мастера копья":"160","Мастера лука":"72","Мегеры":"315","Медведи":"172","Метатели копья":"159","Минотавры":"55","Минотавры-надсмотрщики":"317","Минотавры-стражи":"70","Могильные големы":"521","Монахи":"37","Морские черти":"211","Мумии":"268","Мумии фараонов":"269","Мятежники":"35","Наездники на волках":"18","Наездники на гиенах":"859","Наездники на кабанах":"318","Наездники на медведях":"161","Наездники на ящерах":"51","Налётчики на волках":"43","Нимфы":"255","Обсидиановые горгульи":"44","Огненные гончие":"288","Огненные демоны":"79","Огненные драконы":"168","Огненные птицы":"536","Огненные элементали":"155","Огры":"24","Огры-ветераны":"535","Огры-маги":"119","Огры-шаманы":"855","Ополченцы":"34","Орки":"23","Орки-вожди":"73","Орки-тираны":"534","Орки-шаманы":"546","Паладины":"234","Палачи":"335","Пауки":"198","Пехотинцы":"10","Пещерные владыки":"236","Пещерные гидры":"149","Пещерные демоны":"83","Пещерные отродья":"291","Привидения":"11","Призраки":"68","Призрачные драконы":"300","Принцессы ракшас":"93","Проворные наездники":"316","Проклятые бегемоты":"861","Птицы грома":"148","Птицы тьмы":"544","Раджи ракшас":"108","Рогатые демоны":"77","Рогатые жнецы":"283","Роки":"30","Рыцари":"90","Рыцари смерти":"273","Рыцари тьмы":"272","Светлые единороги":"588","Свирепые бегемоты":"538","Свободные циклопы":"433","Сирены":"209","Сирены-искусительницы":"210","Скелеты":"1","Скелеты-арбалетчики":"340","Скелеты-воины":"267","Скелеты-лучники":"28","Стальные големы":"69","Старейшины рун":"165","Старшие гремлины":"32","Старшие демоны":"289","Старшие друиды":"587","Степные бойцы":"320","Степные воины":"319","Степные волки":"27","Степные гоблины":"329","Степные циклопы":"397","Стихийные горгульи":"256","Стрелки":"257","Стрелки-наёмники":"20","Суккубы":"81","Сумеречные ведьмы":"94","Сумеречные драконы":"102","Танцующие с ветром":"258","Танцующие с клинками":"25","Танцующие со смертью":"41","Таны":"166","Тёмные виверны":"337","Тёмные всадники":"121","Тёмные гидры":"746","Титаны":"107","Титаны шторма":"581","Тролли":"204","Убийцы":"334","Умертвия":"91","Феи":"17","Фениксы":"464","Фурии":"53","Хобгоблины":"33","Хозяева медведей":"162","Хозяйки ночи":"745","Церберы":"75","Циклопы":"89","Циклопы-генералы":"537","Циклопы-короли":"237","Циклопы-шаманы":"860","Чародеи-наёмники":"126","Чемпионы":"495","Черные тролли":"205","Черти":"80","Чёрные драконы":"101","Чумные зомби":"40","Шаманки":"331","Штурмовые грифоны":"493","Эльфийские лучники":"19","Энты":"92","Ядовитые пауки":"199"}')}

// доступ по xpath
function getE(xpath,el,docObj){return (docObj?docObj:document).evaluate(xpath,(el?el:(docObj?docObj.body:document.body)),null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;}
function getL(xpath,el,docObj){return (docObj?docObj:document).evaluate(xpath,(el?el:(docObj?docObj.body:document.body)),null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);}

// поиск ближайшего родителя по имени тега
function getClosestParentByTagName(el, tag){var p, e, fnd=false, tf=tag.toLowerCase();e=el;do{p=e.parentElement;if((p) && (p.tagName.toLowerCase()==tf)){fnd=true;break;} e=p;} while (e);
return fnd?p:null;}