// ==UserScript==
// @name hwmHuntHelper
// @namespace Tamozhnya1
// @description Помощник ГО
// @author Mantens, ElMarado, CheckT, Pagan of Dark, Tamozhnya1
// @version 6.4
// @include https://www.heroeswm.ru/group_wars.php*
// @include https://www.heroeswm.ru/plstats_hunters.php*
// @include https://www.heroeswm.ru/home.php*
// @include https://www.heroeswm.ru/map.php*
// @include https://www.lordswm.com/group_wars.php*
// @include https://www.lordswm.com/plstats_hunters.php*
// @include https://www.lordswm.com/home.php*
// @include https://www.lordswm.com/map.php*
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_deleteValue
// @license MIT
// ==/UserScript==
// Update by CheckT
// небольшая доработка скрипта hwm_GO_exp от ElMarado (Based on script Mantens)
// - хранение настроек независимо по игрокам
// - кнопка "пометить всех птиц"
// Оригинал https://greasyfork.org/ru/scripts/11692-hwm-go-exp
const playerIdMatch = document.cookie.match(/pl_id=(\d+)/);
if(!playerIdMatch) {
return;
}
const PlayerId = playerIdMatch[1];
const lang = document.documentElement.lang || (location.hostname == "www.lordswm.com" ? "en" : "ru");
const isEn = lang == "en";
const isNewPersonPage = document.querySelector("div#hwm_no_zoom") ? true : false;
if(location.pathname == "/home.php" || location.pathname == "/pl_info.php" && getUrlParamValue(location.href, "id") == PlayerId) {
if(isNewPersonPage) {
const levelInfoCell = Array.from(document.querySelectorAll("div.home_pers_info")).find(x => x.innerHTML.includes(isEn ? "Combat level" : "Боевой уровень"));
setPlayerValue("PlayerLevel", parseInt(levelInfoCell.querySelector("div[id=bartext] > span").innerText));
} else {
setPlayerValue("PlayerLevel", parseInt(new RegExp(`<b>${isEn ? "Combat level" : "Боевой уровень"}: (\\d+?)<\\/b>`).exec(document.documentElement.innerHTML)[1]));
}
}
const PlayerLevel = parseInt(getPlayerValue("PlayerLevel", 1));
const sectors = {
"cx=50&cy=50": 1, //Empire Capital
"cx=51&cy=50": 2, //East River
"cx=50&cy=49": 3, //Tiger Lake
"cx=51&cy=49": 4, //Rogues' Wood
"cx=50&cy=51": 5, //Wolf Dale
"cx=50&cy=48": 6, //Peaceful Camp
"cx=49&cy=51": 7, //Lizard Lowland
"cx=49&cy=50": 8, //Green Wood
"cx=49&cy=48": 9, //Eagle Nest
"cx=50&cy=52": 10, //Portal Ruins
"cx=51&cy=51": 11, //Dragon Caves
"cx=49&cy=49": 12, //Shining Spring
"cx=48&cy=49": 13, //Sunny Sity
"cx=52&cy=50": 14, //Magma Mines
"cx=52&cy=49": 15, //Bear Mountain
"cx=52&cy=48": 16, //Fairy Trees
"cx=53&cy=50": 17, //Harbour City (Port City)
"cx=53&cy=49": 18, //Mithril Coast
"cx=51&cy=52": 19, //GreatWall
"cx=51&cy=53": 20, //Titans' Valley
"cx=52&cy=53": 21, //Fishing Village
"cx=52&cy=54": 22, //Kingdom Capital
"cx=48&cy=48": 23, //Ungovernable Steppe
"cx=51&cy=48": 24, //Crystal Garden
"cx=53&cy=52": 25, //East Island
"cx=49&cy=52": 26, //The Wilderness
"cx=48&cy=50": 27 //Sublime Arbor
}
//****************************************************
const monstersTemplate = [{ name: 'bpirate', title: "Абордажники", experience: 30, health: 16, canFly: false, newYear: false }, { name: 'zealot', title: "Адепты", experience: 121, health: 80, canFly: false, newYear: false }, { name: 'nightmare', title: "Адские жеребцы", experience: 136, health: 50, canFly: false, newYear: false }, { name: 'zhryak', title: "Адские жнецы", experience: 250, health: 99, canFly: false, newYear: false }, { name: 'demondog', title: "Адские псы", experience: 33, health: 15, canFly: false, newYear: false }, { name: 'reanimatorup', title: "Адские реаниматоры", experience: 43, health: 27, canFly: false, newYear: false }, { name: 'troglodyteup', title: "Адские троглодиты", experience: 7, health: 6, canFly: false, newYear: false }, { name: 'iceelb', title: "Айсберговые элементали", experience: 50, health: 90, canFly: true, newYear: false }, { name: 'diamondgolem', title: "Алмазные големы", experience: 110, health: 60, canFly: false, newYear: false }, { name: 'yetiup', title: "Алмасты", experience: 400, health: 290, canFly: false, newYear: false }, { name: 'angel', title: "Ангелы", experience: 330, health: 180, canFly: true, newYear: false }, { name: 'marksman', title: "Арбалетчики", experience: 19, health: 10, canFly: false, newYear: false }, { name: 'archangel', title: "Архангелы", experience: 390, health: 220, canFly: true, newYear: false }, { name: 'archdemon', title: "Архидемоны", experience: 312, health: 211, canFly: false, newYear: false }, { name: 'archdevil', title: "Архидьяволы", experience: 311, health: 199, canFly: false, newYear: false }, { name: 'archlich', title: "Архиличи", experience: 110, health: 55, canFly: false, newYear: false }, { name: 'archmage', title: "Архимаги", experience: 70, health: 30, canFly: false, newYear: false }, { name: 'assasin', title: "Ассасины", experience: 33, health: 14, canFly: false, newYear: false }, { name: 'assida', title: "Ассиды", experience: 53, health: 30, canFly: true, newYear: false }, { name: 'ghostdragon', title: "Астральные драконы", experience: 310, health: 150, canFly: true, newYear: false }, { name: 'banshee', title: "Баньши", experience: 205, health: 110, canFly: false, newYear: false }, { name: 'behemoth', title: "Бегемоты", experience: 350, health: 210, canFly: false, newYear: false }, { name: 'berserker', title: "Берсерки", experience: 42, health: 25, canFly: false, newYear: false }, { name: 'maiden', title: "Бестии", experience: 30, health: 16, canFly: false, newYear: false }, { name: 'imp', title: "Бесы", experience: 6, health: 4, canFly: false, newYear: false }, { name: 'beholder', title: "Бехолдеры", experience: 33, health: 22, canFly: false, newYear: false }, { name: 'wisp', title: "Блуждающие огни", experience: 7, health: 10, canFly: true, newYear: false }, { name: 'battlegriffin', title: "Боевые грифоны", experience: 45, health: 35, canFly: true, newYear: false }, { name: 'silverunicorn', title: "Боевые единороги", experience: 135, health: 77, canFly: false, newYear: false }, { name: 'mcentaur', title: "Боевые кентавры", experience: 21, health: 10, canFly: false, newYear: false }, { name: 'battlemage', title: "Боевые маги", experience: 72, health: 29, canFly: false, newYear: false }, { name: 'slon', title: "Боевые слоны", experience: 120, health: 100, canFly: false, newYear: false }, { name: 'vampire', title: "Вампиры", experience: 68, health: 30, canFly: false, newYear: false }, { name: 'warmong', title: "Вармонгеры", experience: 36, health: 20, canFly: false, newYear: false }, { name: 'cursed_', title: "Ведьмы-призраки", experience: 30, health: 20, canFly: true, newYear: false }, { name: 'priestessup', title: "Ведьмы моря", experience: 70, health: 35, canFly: false, newYear: false }, { name: 'giant', title: "Великаны", experience: 160, health: 100, canFly: false, newYear: false }, { name: 'giantarch', title: "Великаны-лучники", experience: 130, health: 100, canFly: false, newYear: false }, { name: 'upleviathan', title: "Великие левиафаны", experience: 300, health: 250, canFly: false, newYear: false }, { name: 'wendigo', title: "Вендиго", experience: 20, health: 25, canFly: false, newYear: false }, { name: 'ddeld', title: "Верховные друиды", experience: 101, health: 38, canFly: false, newYear: false }, { name: 'wraith', title: "Вестники смерти", experience: 205, health: 100, canFly: false, newYear: false }, { name: 'wyvern', title: "Виверны", experience: 170, health: 90, canFly: true, newYear: false }, { name: 'djinn_vizier', title: "Визири джиннов", experience: 110, health: 50, canFly: true, newYear: false }, { name: 'matriarch', title: "Владычицы тени", experience: 185, health: 90, canFly: false, newYear: false }, { name: 'water', title: "Водные элементали", experience: 57, health: 43, canFly: false, newYear: false }, { name: 'chieftain', title: "Вожаки", experience: 100, health: 48, canFly: false, newYear: false }, { name: 'air', title: "Воздушные элементали", experience: 59, health: 30, canFly: true, newYear: false }, { name: 'anubisup', title: "Воины Анубиса", experience: 420, health: 200, canFly: false, newYear: false }, { name: 'battlerager', title: "Воины ярости", experience: 42, health: 30, canFly: false, newYear: false }, { name: 'mercfootman', title: "Воины-наёмники", experience: 25, health: 24, canFly: false, newYear: false }, { name: 'shieldguard', title: "Воители", experience: 12, health: 12, canFly: false, newYear: false }, { name: 'faeriedragon', title: "Волшебные драконы", experience: 800, health: 500, canFly: true, newYear: false }, { name: 'thiefmage', title: "Воры-колдуны", experience: 35, health: 30, canFly: false, newYear: false }, { name: 'thiefwarrior', title: "Воры-разведчики", experience: 35, health: 45, canFly: false, newYear: false }, { name: 'thiefarcher', title: "Воры-убийцы", experience: 35, health: 40, canFly: false, newYear: false }, { name: 'seraph2', title: "Высшие ангелы", experience: 390, health: 220, canFly: true, newYear: false }, { name: 'vampirelord', title: "Высшие вампиры", experience: 70, health: 35, canFly: false, newYear: false }, { name: 'masterlich', title: "Высшие личи", experience: 100, health: 55, canFly: false, newYear: false }, { name: 'highwayman', title: "Вышибалы", experience: 30, health: 24, canFly: false, newYear: false }, { name: 'harpy', title: "Гарпии", experience: 29, health: 15, canFly: true, newYear: false }, { name: 'harpyhag', title: "Гарпии-ведьмы", experience: 45, health: 15, canFly: true, newYear: false }, { name: 'harpooner', title: "Гарпунеры", experience: 18, health: 10, canFly: false, newYear: false }, { name: 'bigspider', title: "Гигантские пауки", experience: 50, health: 55, canFly: false, newYear: false }, { name: 'lizard_', title: "Гигантские ящеры", experience: 25, health: 25, canFly: false, newYear: false }, { name: 'hydra', title: "Гидры", experience: 108, health: 80, canFly: false, newYear: false }, { name: 'darkeye', title: "Глаза тьмы", experience: 33, health: 26, canFly: false, newYear: false }, { name: 'upseamonster', title: "Глубоководные черти", experience: 140, health: 105, canFly: false, newYear: false }, { name: 'rotzombie', title: "Гниющие зомби", experience: 17, health: 23, canFly: false, newYear: false }, { name: 'goblin', title: "Гоблины", experience: 5, health: 3, canFly: false, newYear: false }, { name: 'goblinarcher', title: "Гоблины-лучники", experience: 9, health: 3, canFly: false, newYear: false }, { name: 'goblinmag', title: "Гоблины-маги", experience: 9, health: 3, canFly: false, newYear: false }, { name: 'trapper', title: "Гоблины-трапперы", experience: 15, health: 7, canFly: false, newYear: false }, { name: 'gog', title: "Гоги", experience: 13, health: 13, canFly: false, newYear: false }, { name: 'dgolem', title: "Големы смерти", experience: 329, health: 350, canFly: false, newYear: false }, { name: 'brute', title: "Головорезы", experience: 6, health: 8, canFly: false, newYear: false }, { name: 'mountaingr', title: "Горные стражи", experience: 24, health: 12, canFly: false, newYear: false }, { name: 'gremlin', title: "Гремлины", experience: 5, health: 5, canFly: false, newYear: false }, { name: 'saboteurgremlin', title: "Гремлины-вредители", experience: 9, health: 6, canFly: false, newYear: false }, { name: 'griffon', title: "Грифоны", experience: 59, health: 30, canFly: true, newYear: false }, { name: 'thunderlord', title: "Громовержцы", experience: 162, health: 120, canFly: false, newYear: false }, { name: 'axegnom', title: "Громоглавы", experience: 14, health: 10, canFly: false, newYear: false }, { name: 'nomadup', title: "Гунны", experience: 60, health: 33, canFly: false, newYear: false }, { name: 'deserter', title: "Дезертиры", experience: 40, health: 25, canFly: false, newYear: false }, { name: 'succubusm', title: "Демонессы", experience: 67, health: 30, canFly: false, newYear: false }, { name: 'smalllizard_', title: "Детёныши ящера", experience: 13, health: 13, canFly: false, newYear: false }, { name: 'djinn', title: "Джинны", experience: 103, health: 40, canFly: true, newYear: false }, { name: 'djinn_sultan', title: "Джинны-султаны", experience: 110, health: 45, canFly: true, newYear: false }, { name: 'savageent', title: "Дикие энты", experience: 210, health: 175, canFly: false, newYear: false }, { name: 'robber', title: "Дозорные", experience: 7, health: 5, canFly: false, newYear: false }, { name: 'eadaughter', title: "Дочери земли", experience: 72, health: 35, canFly: false, newYear: false }, { name: 'sdaughter', title: "Дочери неба", experience: 75, health: 35, canFly: false, newYear: false }, { name: 'abehemoth', title: "Древние бегемоты", experience: 390, health: 250, canFly: false, newYear: false }, { name: 'ancientpig', title: "Древние кабаны", experience: 12, health: 15, canFly: false, newYear: false }, { name: 'amummy', title: "Древние мумии", experience: 135, health: 80, canFly: false, newYear: false }, { name: 'ancienent', title: "Древние энты", experience: 210, health: 181, canFly: false, newYear: false }, { name: 'sprite', title: "Дриады", experience: 20, health: 6, canFly: true, newYear: false }, { name: 'dd_', title: "Друиды", experience: 74, health: 34, canFly: false, newYear: false }, { name: 'poltergeist', title: "Духи", experience: 27, health: 20, canFly: true, newYear: false }, { name: 'forestspirit', title: "Духи леса", experience: 90, health: 50, canFly: true, newYear: false }, { name: 'ocean', title: "Духи океана", experience: 53, health: 30, canFly: true, newYear: false }, { name: 'devil', title: "Дьяволы", experience: 245, health: 166, canFly: false, newYear: false }, { name: 'vermin', title: "Дьяволята", experience: 10, health: 6, canFly: false, newYear: false }, { name: 'unicorn', title: "Единороги", experience: 124, health: 57, canFly: false, newYear: false }, { name: 'golem', title: "Железные големы", experience: 33, health: 18, canFly: false, newYear: false }, { name: 'runepriest', title: "Жрецы рун", experience: 59, health: 60, canFly: false, newYear: false }, { name: 'priestmoon', title: "Жрицы луны", experience: 60, health: 50, canFly: false, newYear: false }, { name: 'priestess', title: "Жрицы моря", experience: 70, health: 35, canFly: false, newYear: false }, { name: 'priestsun', title: "Жрицы солнца", experience: 70, health: 55, canFly: false, newYear: false }, { name: 'vindicator', title: "Защитники веры", experience: 20, health: 23, canFly: false, newYear: false }, { name: 'defender', title: "Защитники гор", experience: 7, health: 7, canFly: false, newYear: false }, { name: 'greendragon', title: "Зелёные драконы", experience: 350, health: 200, canFly: true, newYear: false }, { name: 'earth', title: "Земные элементали", experience: 63, health: 75, canFly: false, newYear: false }, { name: 'evileye', title: "Злобные глаза", experience: 33, health: 22, canFly: false, newYear: false }, { name: 'zombie', title: "Зомби", experience: 11, health: 17, canFly: false, newYear: false }, { name: 'emeralddragon', title: "Изумрудные драконы", experience: 400, health: 200, canFly: true, newYear: false }, { name: 'impergriffin', title: "Имперские грифоны", experience: 62, health: 35, canFly: true, newYear: false }, { name: 'inquisitor', title: "Инквизиторы", experience: 121, health: 80, canFly: false, newYear: false }, { name: 'seducer', title: "Искусительницы", experience: 65, health: 26, canFly: false, newYear: false }, { name: 'efreeti', title: "Ифриты", experience: 200, health: 90, canFly: true, newYear: false }, { name: 'efreetisultan', title: "Ифриты султаны", experience: 250, health: 100, canFly: true, newYear: false }, { name: 'yeti', title: "Йети", experience: 400, health: 280, canFly: false, newYear: false }, { name: 'boar', title: "Кабаны", experience: 12, health: 17, canFly: false, newYear: false }, { name: 'gargoly', title: "Каменные горгульи", experience: 16, health: 15, canFly: true, newYear: false }, { name: 'kammon', title: "Каменные монстры", experience: 20, health: 28, canFly: false, newYear: false }, { name: 'kamnegryz', title: "Камнегрызы", experience: 67, health: 55, canFly: false, newYear: false }, { name: 'kamneed', title: "Камнееды", experience: 56, health: 45, canFly: false, newYear: false }, { name: 'fcentaur', title: "Кентавры", experience: 13, health: 6, canFly: false, newYear: false }, { name: 'vampireprince', title: "Князья вампиров", experience: 70, health: 40, canFly: false, newYear: false }, { name: 'outlaw', title: "Колдуны-ренегаты", experience: 6, health: 6, canFly: false, newYear: false }, { name: 'colossus', title: "Колоссы", experience: 350, health: 175, canFly: false, newYear: false }, { name: 'hellstallion', title: "Кони преисподней", experience: 138, health: 66, canFly: false, newYear: false }, { name: 'piratkaup', title: "Корсарки", experience: 32, health: 12, canFly: false, newYear: false }, { name: 'apirate', title: "Корсары", experience: 16, health: 13, canFly: false, newYear: false }, { name: 'brawler', title: "Костоломы", experience: 27, health: 20, canFly: false, newYear: false }, { name: 'bonedragon', title: "Костяные драконы", experience: 280, health: 150, canFly: true, newYear: false }, { name: 'nomad', title: "Кочевники", experience: 50, health: 30, canFly: false, newYear: false }, { name: 'ncentaur', title: "Кочевые кентавры", experience: 20, health: 9, canFly: false, newYear: false }, { name: 'stallion', title: "Кошмары", experience: 140, health: 66, canFly: false, newYear: false }, { name: 'reddragon', title: "Красные драконы", experience: 400, health: 235, canFly: true, newYear: false }, { name: 'paesant', title: "Крестьяне", experience: 5, health: 4, canFly: false, newYear: false }, { name: 'crusader', title: "Крестоносцы", experience: 27, health: 30, canFly: false, newYear: false }, { name: 'crystaldragon', title: "Кристальные драконы", experience: 400, health: 200, canFly: true, newYear: false }, { name: 'redlizard_', title: "Кровавые ящеры", experience: 30, health: 35, canFly: false, newYear: false }, { name: 'bloodeyecyc', title: "Кровоглазые циклопы", experience: 500, health: 235, canFly: false, newYear: false }, { name: 'rakshasa_kshatra', title: "Кшатрии ракшасы", experience: 162, health: 135, canFly: false, newYear: false }, { name: 'lavadragon', title: "Лавовые драконы", experience: 329, health: 275, canFly: false, newYear: false }, { name: 'scout', title: "Лазутчики", experience: 20, health: 10, canFly: false, newYear: false }, { name: 'banditka', title: "Лазутчицы", experience: 12, health: 8, canFly: false, newYear: false }, { name: 'swordman', title: "Латники", experience: 21, health: 26, canFly: false, newYear: false }, { name: 'leviathan', title: "Левиафаны", experience: 250, health: 200, canFly: false, newYear: false }, { name: 'iceddragon', title: "Ледяные драконы", experience: 250, health: 220, canFly: true, newYear: false }, { name: 'iceel', title: "Ледяные элементали", experience: 50, health: 45, canFly: true, newYear: false }, { name: 'lepr', title: "Лепреконы", experience: 11, health: 7, canFly: false, newYear: false }, { name: 'arcaneelf', title: "Лесные снайперы", experience: 42, health: 12, canFly: false, newYear: false }, { name: 'bobbit', title: "Лесные хоббиты", experience: 9, health: 6, canFly: false, newYear: false }, { name: 'shaman', title: "Лесные шаманы", experience: 200, health: 110, canFly: false, newYear: false }, { name: 'lich', title: "Личи", experience: 87, health: 50, canFly: false, newYear: false }, { name: 'stalker', title: "Ловчие", experience: 34, health: 15, canFly: false, newYear: false }, { name: 'archer', title: "Лучники", experience: 15, health: 7, canFly: false, newYear: false }, { name: 'mage', title: "Маги", experience: 63, health: 18, canFly: false, newYear: false }, { name: 'magicel', title: "Магические элементали", experience: 200, health: 80, canFly: false, newYear: false }, { name: 'magmadragon', title: "Магма драконы", experience: 329, health: 280, canFly: false, newYear: false }, { name: 'magneticgolem', title: "Магнитные големы", experience: 57, health: 28, canFly: false, newYear: false }, { name: 'magog', title: "Магоги", experience: 16, health: 13, canFly: false, newYear: false }, { name: 'manticore', title: "Мантикоры", experience: 130, health: 80, canFly: true, newYear: false }, { name: 'skirmesher', title: "Мастера копья", experience: 17, health: 12, canFly: false, newYear: false }, { name: 'hunterelf', title: "Мастера лука", experience: 42, health: 14, canFly: false, newYear: false }, { name: 'negro', title: "Матросы-чужеземцы", experience: 24, health: 17, canFly: false, newYear: false }, { name: 'bloodsister', title: "Мегеры", experience: 49, health: 24, canFly: false, newYear: false }, { name: 'bear', title: "Медведи", experience: 22, health: 22, canFly: false, newYear: false }, { name: 'medusa', title: "Медузы", experience: 45, health: 25, canFly: false, newYear: false }, { name: 'medusaup', title: "Медузы королевы", experience: 55, health: 30, canFly: false, newYear: false }, { name: 'spearwielder', title: "Метатели копья", experience: 11, health: 10, canFly: false, newYear: false }, { name: 'minotaur', title: "Минотавры", experience: 39, health: 31, canFly: false, newYear: false }, { name: 'minotaurguard_', title: "Минотавры-стражи", experience: 56, health: 35, canFly: false, newYear: false }, { name: 'taskmaster', title: "Минотавры-надсмотрщики", experience: 56, health: 40, canFly: false, newYear: false }, { name: 'dgolemup', title: "Могильные големы", experience: 400, health: 400, canFly: false, newYear: false }, { name: 'cbal', title: "Мобильные баллисты", experience: 100, health: 65, canFly: false, newYear: false }, { name: 'gnomon', title: "Молотобойцы", experience: 12, health: 9, canFly: false, newYear: false }, { name: 'priest', title: "Монахи", experience: 101, health: 54, canFly: false, newYear: false }, { name: 'piratemonster', title: "Морские дьяволы", experience: 300, health: 190, canFly: false, newYear: false }, { name: 'seamonster', title: "Морские черти", experience: 120, health: 90, canFly: false, newYear: false }, { name: 'mummy', title: "Мумии", experience: 115, health: 50, canFly: false, newYear: false }, { name: 'pharaoh', title: "Мумии фараонов", experience: 135, health: 70, canFly: false, newYear: false }, { name: 'enforcer', title: "Мятежники", experience: 10, health: 7, canFly: false, newYear: false }, { name: 'naga', title: "Наги", experience: 160, health: 110, canFly: false, newYear: false }, { name: 'dromad', title: "Наездники на верблюдах", experience: 60, health: 40, canFly: false, newYear: false }, { name: 'wolfrider', title: "Наездники на волках", experience: 20, health: 10, canFly: false, newYear: false }, { name: 'hyenarider', title: "Наездники на гиенах", experience: 31, health: 13, canFly: false, newYear: false }, { name: 'boarrider', title: "Наездники на кабанах", experience: 31, health: 14, canFly: false, newYear: false }, { name: 'bearrider', title: "Наездники на медведях", experience: 24, health: 25, canFly: false, newYear: false }, { name: 'lizardrider', title: "Наездники на ящерах", experience: 65, health: 40, canFly: false, newYear: false }, { name: 'dromadup', title: "Налетчики на верблюдах", experience: 70, health: 45, canFly: false, newYear: false }, { name: 'hobwolfrider', title: "Налётчики на волках", experience: 31, health: 12, canFly: false, newYear: false }, { name: 'reptiloid', title: "Никсы", experience: 110, health: 80, canFly: false, newYear: false }, { name: 'reptiloidup', title: "Никсы-воины", experience: 180, health: 90, canFly: false, newYear: false }, { name: 'dryad_', title: "Нимфы", experience: 20, health: 6, canFly: true, newYear: false }, { name: 'obsgargoly', title: "Обсидиановые горгульи", experience: 26, health: 20, canFly: true, newYear: false }, { name: 'firehound', title: "Огненные гончие", experience: 36, health: 15, canFly: false, newYear: false }, { name: 'fdemon', title: "Огненные демоны", experience: 23, health: 13, canFly: false, newYear: false }, { name: 'firedragon', title: "Огненные драконы", experience: 255, health: 230, canFly: false, newYear: false }, { name: 'firebird_', title: "Огненные птицы", experience: 117, health: 65, canFly: true, newYear: false }, { name: 'fire', title: "Огненные элементали", experience: 60, health: 43, canFly: false, newYear: false }, { name: 'ogre', title: "Огры", experience: 60, health: 50, canFly: false, newYear: false }, { name: 'ogrebrutal', title: "Огры-ветераны", experience: 75, health: 70, canFly: false, newYear: false }, { name: 'ogremagi', title: "Огры-маги", experience: 74, health: 65, canFly: false, newYear: false }, { name: 'ogreshaman', title: "Огры-шаманы", experience: 74, health: 55, canFly: false, newYear: false }, { name: 'fatpirateup', title: "Одноглазые пираты", experience: 190, health: 120, canFly: false, newYear: false }, { name: 'conscript', title: "Ополченцы", experience: 7, health: 6, canFly: false, newYear: false }, { name: 'orc', title: "Орки", experience: 29, health: 12, canFly: false, newYear: false }, { name: 'orcchief', title: "Орки-вожди", experience: 38, health: 18, canFly: false, newYear: false }, { name: 'orcrubak', title: "Орки-тираны", experience: 38, health: 20, canFly: false, newYear: false }, { name: 'orcshaman', title: "Орки-шаманы", experience: 33, health: 13, canFly: false, newYear: false }, { name: 'paladin', title: "Паладины", experience: 262, health: 100, canFly: false, newYear: false }, { name: 'executioner', title: "Палачи", experience: 83, health: 40, canFly: false, newYear: false }, { name: 'spider', title: "Пауки", experience: 15, health: 9, canFly: false, newYear: false }, { name: 'footman', title: "Пехотинцы", experience: 17, health: 16, canFly: false, newYear: false }, { name: 'pitlord_', title: "Пещерные владыки", experience: 195, health: 120, canFly: false, newYear: false }, { name: 'deephydra', title: "Пещерные гидры", experience: 115, health: 125, canFly: false, newYear: false }, { name: 'pitfiend_', title: "Пещерные демоны", experience: 157, health: 110, canFly: false, newYear: false }, { name: 'pitspawn', title: "Пещерные отродья", experience: 165, health: 140, canFly: false, newYear: false }, { name: 'piratka', title: "Пиратки", experience: 20, health: 10, canFly: false, newYear: false }, { name: 'zpirate', title: "Пираты зомби", experience: 200, health: 150, canFly: false, newYear: false }, { name: 'piratemonsterup', title: "Пираты Ктулху", experience: 350, health: 200, canFly: false, newYear: false }, { name: 'piroman', title: "Пироманьяки", experience: 10, health: 20, canFly: false, newYear: false }, { name: 'hungerplant', title: "Пожиратели плоти", experience: 130, health: 70, canFly: false, newYear: false }, { name: 'ghost', title: "Привидения", experience: 26, health: 8, canFly: true, newYear: false }, { name: 'spearthrower', title: "Прибрежные налётчики", experience: 10, health: 19, canFly: false, newYear: false }, { name: 'spectre', title: "Призраки", experience: 27, health: 19, canFly: true, newYear: false }, { name: 'gpiratka', title: "Призраки пираток", experience: 17, health: 8, canFly: true, newYear: false }, { name: 'spectraldragon', title: "Призрачные драконы", experience: 310, health: 160, canFly: true, newYear: false }, { name: 'rakshas', title: "Принцессы ракшас", experience: 155, health: 120, canFly: false, newYear: false }, { name: 'briskrider', title: "Проворные наездники", experience: 94, health: 50, canFly: false, newYear: false }, { name: 'dbehemoth', title: "Проклятые бегемоты", experience: 400, health: 250, canFly: false, newYear: false }, { name: 'hgarg', title: "Проклятые горгульи", experience: 25, health: 35, canFly: true, newYear: false }, { name: 'cursedent', title: "Проклятые энты", experience: 250, health: 215, canFly: false, newYear: false }, { name: 'thunderbird', title: "Птицы грома", experience: 115, health: 65, canFly: true, newYear: false }, { name: 'darkbird', title: "Птицы тьмы", experience: 120, health: 60, canFly: true, newYear: false }, { name: 'vulture', title: "Пустынные налетчики", experience: 50, health: 40, canFly: true, newYear: false }, { name: 'duneraider', title: "Пустынные рейдеры", experience: 22, health: 12, canFly: false, newYear: false }, { name: 'duneraiderup', title: "Пустынные убийцы", experience: 24, health: 12, canFly: false, newYear: false }, { name: 'rakshasa_raja', title: "Раджи ракшас", experience: 160, health: 140, canFly: false, newYear: false }, { name: 'tombraider', title: "Расхитители могил", experience: 14, health: 10, canFly: false, newYear: false }, { name: 'gladiator', title: "Ретиарии", experience: 12, health: 25, canFly: false, newYear: false }, { name: 'hdemon', title: "Рогатые демоны", experience: 14, health: 13, canFly: false, newYear: false }, { name: 'rapukk', title: "Рогатые жнецы", experience: 200, health: 99, canFly: false, newYear: false }, { name: 'roc', title: "Роки", experience: 104, health: 55, canFly: true, newYear: false }, { name: 'brigand', title: "Рубаки", experience: 6, health: 5, canFly: false, newYear: false }, { name: 'knight', title: "Рыцари", experience: 232, health: 90, canFly: false, newYear: false }, { name: 'deadknight', title: "Рыцари смерти", experience: 190, health: 100, canFly: false, newYear: false }, { name: 'blackknight', title: "Рыцари тьмы", experience: 160, health: 90, canFly: false, newYear: false }, { name: 'pristineunicorn', title: "Светлые единороги", experience: 135, health: 80, canFly: false, newYear: false }, { name: 'dbehemoth', title: "Свирепые бегемоты", experience: 410, health: 280, canFly: false, newYear: false }, { name: 'untamedcyc', title: "Свободные циклопы", experience: 700, health: 225, canFly: false, newYear: false }, { name: 'scarabup', title: "Священные скарабеи", experience: 11, health: 6, canFly: true, newYear: false }, { name: 'whitebearrider', title: "Северные наездники", experience: 36, health: 30, canFly: false, newYear: false }, { name: 'spegasus', title: "Серебряные пегасы", experience: 50, health: 30, canFly: true, newYear: false }, { name: 'kachok', title: "Strongmen", experience: 20, health: 50, canFly: false, newYear: false }, { name: 'siren', title: "Сирены", experience: 60, health: 20, canFly: false, newYear: false }, { name: 'upsiren', title: "Сирены-искусительницы", experience: 70, health: 24, canFly: false, newYear: false }, { name: 'scarab', title: "Скарабеи", experience: 10, health: 6, canFly: true, newYear: false }, { name: 'sceleton', title: "Скелеты", experience: 6, health: 4, canFly: false, newYear: false }, { name: 'skmarksman', title: "Скелеты-арбалетчики", experience: 12, health: 6, canFly: false, newYear: false }, { name: 'sceletonwar', title: "Скелеты-воины", experience: 10, health: 5, canFly: false, newYear: false }, { name: 'skeletonpirateup', title: "Скелеты-корсары", experience: 10, health: 4, canFly: false, newYear: false }, { name: 'cpirate', title: "Скелеты-моряки", experience: 6, health: 4, canFly: false, newYear: false }, { name: 'sceletonarcher', title: "Скелеты-лучники", experience: 10, health: 4, canFly: false, newYear: false }, { name: 'skeletonpirate', title: "Скелеты-пираты", experience: 7, health: 4, canFly: false, newYear: false }, { name: 'manticoreup', title: "Скорпикоры", experience: 140, health: 80, canFly: true, newYear: false }, { name: 'scorp', title: "Скорпионы", experience: 6, health: 4, canFly: false, newYear: false }, { name: 'anubis', title: "Слуги Анубиса", experience: 350, health: 160, canFly: false, newYear: false }, { name: 'krokodil', title: "Служители оазисов", experience: 110, health: 70, canFly: false, newYear: false }, { name: 'chuvak', title: "Снежные воины", experience: 35, health: 27, canFly: false, newYear: false }, { name: 'snowwolf', title: "Снежные волки", experience: 70, health: 50, canFly: false, newYear: false }, { name: 'steelgolem', title: "Стальные големы", experience: 54, health: 24, canFly: false, newYear: false }, { name: 'runepatriarch', title: "Старейшины рун", experience: 100, health: 70, canFly: false, newYear: false }, { name: 'mastergremlin', title: "Старшие гремлины", experience: 9, health: 6, canFly: false, newYear: false }, { name: 'jdemon', title: "Старшие демоны", experience: 20, health: 13, canFly: false, newYear: false }, { name: 'ddhigh', title: "Старшие друиды", experience: 101, health: 34, canFly: false, newYear: false }, { name: 'mauler', title: "Степные бойцы", experience: 23, health: 12, canFly: false, newYear: false }, { name: 'warrior', title: "Степные воины", experience: 21, health: 12, canFly: false, newYear: false }, { name: 'swolf', title: "Степные волки", experience: 20, health: 25, canFly: false, newYear: false }, { name: 'goblinus', title: "Степные гоблины", experience: 5, health: 3, canFly: false, newYear: false }, { name: 'cyclopus', title: "Степные циклопы", experience: 390, health: 220, canFly: false, newYear: false }, { name: 'elgargoly', title: "Стихийные горгульи", experience: 25, health: 16, canFly: true, newYear: false }, { name: 'crossbowman', title: "Стрелки", experience: 16, health: 8, canFly: false, newYear: false }, { name: 'mercarcher', title: "Стрелки-наёмники", experience: 15, health: 8, canFly: false, newYear: false }, { name: 'succub', title: "Суккубы", experience: 61, health: 20, canFly: false, newYear: false }, { name: 'witch', title: "Сумеречные ведьмы", experience: 157, health: 80, canFly: false, newYear: false }, { name: 'shadowdragon', title: "Сумеречные драконы", experience: 350, health: 200, canFly: true, newYear: false }, { name: 'winddancer', title: "Танцующие с ветром", experience: 33, health: 14, canFly: false, newYear: false }, { name: 'dancer', title: "Танцующие с клинками", experience: 20, health: 12, canFly: false, newYear: false }, { name: 'bladedancer', title: "Танцующие со смертью", experience: 33, health: 12, canFly: false, newYear: false }, { name: 'thane', title: "Таны", experience: 131, health: 100, canFly: false, newYear: false }, { name: 'foulwyvern', title: "Тёмные виверны", experience: 195, health: 105, canFly: true, newYear: false }, { name: 'grimrider', title: "Тёмные всадники", experience: 94, health: 50, canFly: false, newYear: false }, { name: 'foulhydra', title: "Тёмные гидры", experience: 115, health: 125, canFly: false, newYear: false }, { name: 'burbuly', title: "Тёмные горгульи", experience: 21, health: 30, canFly: true, newYear: false }, { name: 'titan', title: "Титаны", experience: 400, health: 190, canFly: false, newYear: false }, { name: 'stormtitan', title: "Титаны шторма", experience: 400, health: 190, canFly: false, newYear: false }, { name: 'fatpirate', title: "Толстяки", experience: 180, health: 100, canFly: false, newYear: false }, { name: 'troglodyte', title: "Троглодиты", experience: 5, health: 5, canFly: false, newYear: false }, { name: 'troll', title: "Тролли", experience: 150, health: 150, canFly: false, newYear: false }, { name: 'tengu', title: "Тэнгу", experience: 100, health: 45, canFly: true, newYear: false }, { name: 'slayer', title: "Убийцы", experience: 70, health: 34, canFly: false, newYear: false }, { name: 'verblud', title: "Угонщики верблюдов", experience: 55, health: 35, canFly: false, newYear: false }, { name: 'wight', title: "Умертвия", experience: 165, health: 95, canFly: false, newYear: false }, { name: 'pp', title: "Феи", experience: 12, health: 5, canFly: true, newYear: false }, { name: 'phoenix', title: "Фениксы", experience: 600, health: 777, canFly: true, newYear: false }, { name: 'shootpirateup', title: "Флибустьеры", experience: 75, health: 18, canFly: false, newYear: false }, { name: 'fury', title: "Фурии", experience: 49, health: 16, canFly: false, newYear: false }, { name: 'plant', title: "Хищные растения", experience: 92, health: 60, canFly: false, newYear: false }, { name: 'hobbit', title: "Хоббиты", experience: 8, health: 4, canFly: false, newYear: false }, { name: 'hobgoblin', title: "Хобгоблины", experience: 9, health: 4, canFly: false, newYear: false }, { name: 'blackbearrider', title: "Хозяева медведей", experience: 36, health: 30, canFly: false, newYear: false }, { name: 'mistress', title: "Хозяйки ночи", experience: 185, health: 100, canFly: false, newYear: false }, { name: 'cerberus', title: "Церберы", experience: 41, health: 15, canFly: false, newYear: false }, { name: 'cyclop', title: "Циклопы", experience: 172, health: 85, canFly: false, newYear: false }, { name: 'cyclopod_', title: "Циклопы-генералы", experience: 187, health: 100, canFly: false, newYear: false }, { name: 'cyclopking', title: "Циклопы-короли", experience: 182, health: 95, canFly: false, newYear: false }, { name: 'cyclopshaman', title: "Циклопы-шаманы", experience: 190, health: 105, canFly: false, newYear: false }, { name: 'mercwizard', title: "Чародеи-наёмники", experience: 35, health: 36, canFly: false, newYear: false }, { name: 'champion', title: "Чемпионы", experience: 252, health: 100, canFly: false, newYear: false }, { name: 'blackwidow', title: "Черные вдовы", experience: 40, health: 14, canFly: false, newYear: false }, { name: 'scorpup', title: "Черные скорпионы", experience: 9, health: 5, canFly: false, newYear: false }, { name: 'blacktroll', title: "Черные тролли", experience: 180, health: 180, canFly: false, newYear: false }, { name: 'familiar', title: "Черти", experience: 10, health: 6, canFly: false, newYear: false }, { name: 'blackdragon', title: "Чёрные драконы", experience: 400, health: 240, canFly: true, newYear: false }, { name: 'plaguezombie', title: "Чумные зомби", experience: 15, health: 17, canFly: false, newYear: false }, { name: 'shakal', title: "Шакалы", experience: 30, health: 24, canFly: false, newYear: false }, { name: 'shakalup', title: "Шакалы-воины", experience: 45, health: 30, canFly: false, newYear: false }, { name: 'shamaness', title: "Шаманки", experience: 66, health: 30, canFly: false, newYear: false }, { name: 'banditkaup', title: "Шпионки", experience: 14, health: 9, canFly: false, newYear: false }, { name: 'battlegriffon', title: "Штурмовые грифоны", experience: 62, health: 52, canFly: true, newYear: false }, { name: 'slonup', title: "Штурмовые слоны", experience: 150, health: 110, canFly: false, newYear: false }, { name: 'elf', title: "Эльфийские лучники", experience: 38, health: 10, canFly: false, newYear: false }, { name: 'treant', title: "Энты", experience: 187, health: 175, canFly: false, newYear: false }, { name: 'spiderpois', title: "Ядовитые пауки", experience: 30, health: 14, canFly: false, newYear: false }, { name: 'tenguup', title: "Ямабуси Тэнгу", experience: 100, health: 60, canFly: true, newYear: false }, { name: 'flamelord', title: "Ярлы", experience: 162, health: 120, canFly: false, newYear: false }, { name: 'bull2021', title: "Злой бык 2021", experience: 69, health: 71, canFly: false, newYear: true }, { name: 'pig2019', title: "Свин 2019", experience: 16, health: 19, canFly: false, newYear: true }, { name: 'evildog', title: "Злой пёс 2018", experience: 100, health: 88, canFly: false, newYear: true }, { name: 'rooster', title: "Злой Петушок 2017", experience: 60, health: 77, canFly: true, newYear: true }];
// let monsterData = Object.keys(mob_rus_exp).reduce((t, x, i) => [...t, `{ id: ${i + 1}, name: '${mob_rus_exp[x][2]}', title: isEn ? '${x}' : '${x}', experience: ${mob_rus_exp[x][0]}, health: ${mob_rus_exp[x][1]}, canFly: ${mob_rus_exp[x][3] == 1 ? 'true' : 'false'} }`], []);
// let monsterData = monstersTemplate.reduce((t, x, i) => [...t, `{ name: '${x.name}', title: "${x.title}", experience: ${x.experience}, health: ${x.health}, canFly: ${x.canFly}, newYear: false }`], []);
// console.log(`[${monsterData.join(", ")}]`);
//sortBy(monsters, false, "title"); // Пока намерен сортировать вставкой в нужное место
//deleteValue("monsters");
if(!getValue("monsters")) {
setValue("monsters", JSON.stringify(monstersTemplate));
}
const monsters = JSON.parse(getValue("monsters"));
main();
function main() {
createSettingsCaller();
applyGreenPeace();
if(!getPlayerBool("grin_Pis")) {
Array.from(document.querySelectorAll("tr > td[colspan*='2']")).filter(x => x.innerHTML == (isEn ? "You are already in a challenge!" : "Вы уже в заявке!")).forEach(x => { x.align = 'right'; x.innerHTML = `<a href="map.php?action=skip">${isEn ? "Skip" : "Пройти мимо"}</a>`; }); //добавить ссылку на пропуск охот, если стоишь в заявке на бой или карточную игру
if(getPlayerBool("show_archive")) {
for(const ref of document.querySelectorAll("div > a[href*='mid=']")) {
const s = ref.href.split('&mid');
ref.insertAdjacentHTML("afterEnd", `<br><a href="${s[0]}&show_archive=1&mid${s[1]}" target=_blanc><img border="0" title="${isEn ? "Archive record before 2015-03-01" : "Рекорд из архива (до 01.03.2015"}" src="http://dcdn.heroeswm.ru/i/s_knowledge.gif"></a>`); //добавить ссылку на рекорд из архива
}
}
showExperience();
}
huntHelpers();
Array.from(document.querySelectorAll("a[href*='group_wars.php']")).forEach(x => x.href = x.href.replace("group_wars.php", "group_wars.php?filter=hunt")); //заменяет ссылку в групповые бои на такую же с выделением свободных охот
if(location.href.indexOf('plstats_hunters') != -1) {
add_archive();
}
}
function createTraceMonstersPanelCaller(monstersListContainer) {
const monstersListActivator = addElement('div', { id: "get_list_go", class: "job_fl_btn show_hint", style: "width: 20px; height: 20px; vertical-align: middle; display: inline-block;", innerHTML: `<img src="//dcdn.heroeswm.ru/i/mobile_view/icons_add/pismo.png" style="width: 16px; height: 16px;">` }, monstersListContainer);
monstersListActivator.addEventListener("click", showTraceMonstersPanel);
}
function showTraceMonstersPanel() {
const panelName = "Monsters";
let bg = document.getElementById(`bg${panelName}Overlay`);
let bgc = document.getElementById(`bg${panelName}Center`);
if(bg) {
bg.style.display = "block";
bgc.style.display = "block";
return;
}
bg = addElement('div', { id: `bg${panelName}Overlay`, style: "position: fixed; left: 0px; width: 100%; top: 0px; height: 100%; background: #000000; opacity: 0.5; z-index: 1120;" }, document.body);
bgc = addElement('div', { id: `bg${panelName}Center`, style: `position: fixed; left: ${(document.body.offsetWidth - 650) / 2}px; width: 650px; top: 150px; height: 475px; overflow: auto; background: #F6F3EA; z-index: 1121;` }, document.body);
bg.addEventListener("click", function() { hidePanel(panelName); }); //клик вне окна
let monstersTableHtml = "";
for(const monster of monsters) {
monstersTableHtml += `
<tr name="${monster.name}">`;
if(getPlayerBool("pic_enable")) {
monstersTableHtml += `
<td style="text-align: center;"><img style="height: 25px; width: 30px; border: 0;" src="https://dcdn.heroeswm.ru/i/portraits/${monster.name}anip33.png"></td>`;
} else {
monstersTableHtml += "<td></td>";
}
monstersTableHtml += `
<td style="text-align: center;"><input name=title type=text value="${isEn && monster.enTitle ? monster.enTitle : monster.title}"></td>
<td style="text-align: center;"><input name=experience type=number value="${monster.experience}" style="width: 70px;"></td>
<td style="text-align: center;"><input name=health type=number value="${monster.health}" style="width: 70px;"></td>
<td style="text-align: center;"><input name=canFly type=checkbox ${monster.canFly ? "checked" : ""}></td>
<td style="text-align: center;"><input name=wanted type=checkbox ${monster.wanted ? "checked" : ""}></td>
<td style="text-align: center;"><input name=newYear type=checkbox ${monster.newYear ? "checked" : ""}></td>
</tr>`;
}
bgc.innerHTML = `
<style>
.cre_mon_image2 {
position:absolute;top:0;left:0;
}
.cre_creature {
font-weight:400;font-family: 'Arial',sans-serif; width: 60px; position: relative; letter-spacing: normal;font-size: 16px; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; display:inline-block;
}
</style>
<div style="border:0px solid #abc;padding:5px;margin:2px;">
<div style="float:right;border:1px solid #abc;width:15px;height:15px;text-align:center;cursor:pointer;" id="bt_close_tr2" title="Close">x</div>
<div>
<b>${isEn ? "Select creatures for hunt. Total" : "Выберите существ для охоты. Всего"} <font style="color:#FF0000;"> ${monsters.length}</font></b>
<hr/>
<input type="submit" id="set_all_mark_ok" value="${isEn ? "Look for all" : "Искать всех"}">
<input type="submit" id="set_all_unmark_ok" value="${isEn ? "Don't look for anyone" : "Не искать никого"}">
</div>
<table cellspacing="0" >
<tr>
<th>${isEn ? "Image" : "Изображение"}</th>
<th>${isEn ? "Title" : "Заголовок"}</th>
<th>${isEn ? "Experience" : "Опыт"}</th>
<th>${isEn ? "Health" : "Здоровье"}</th>
<th>${isEn ? "Can fly" : "Летает"}</th>
<th>${isEn ? "Wanted" : "Разыскивается"}</th>
<th>${isEn ? "New year" : "Новогодний"}</th>
</tr>
${monstersTableHtml}
</table>`;
document.getElementById('set_all_mark_ok').addEventListener("click", wantedAll);
document.getElementById('set_all_unmark_ok').addEventListener("click", unwantAll);
document.getElementById("bt_close_tr2").addEventListener("click", function() { hidePanel(panelName); }); //крестик в углу
Array.from(bgc.querySelectorAll("input[name=title]")).forEach(x => x.addEventListener("change", function() { setMonsterProperty(this.closest("tr").getAttribute("name"), isEn ? "enTitle" : "title", this.value); }));
Array.from(bgc.querySelectorAll("input[name=experience]")).forEach(x => x.addEventListener("change", function() { setMonsterProperty(this.closest("tr").getAttribute("name"), this.name, this.value); }));
Array.from(bgc.querySelectorAll("input[name=health]")).forEach(x => x.addEventListener("change", function() { setMonsterProperty(this.closest("tr").getAttribute("name"), this.name, this.value); }));
Array.from(bgc.querySelectorAll("input[name=wanted]")).forEach(x => x.addEventListener("change", function() { setMonsterProperty(this.closest("tr").getAttribute("name"), this.name, this.checked); }));
Array.from(bgc.querySelectorAll("input[name=newYear]")).forEach(x => x.addEventListener("change", function() { setMonsterProperty(this.closest("tr").getAttribute("name"), this.name, this.checked); }));
}
function setMonsterProperty(monsterName, propertyName, propertyValue) {
//console.log(`monsterName: ${monsterName}, propertyName: ${propertyName}, propertyValue: ${propertyValue}`);
const monster = monsters.find(x => x.name == monsterName);
monster[propertyName] = propertyValue;
setValue("monsters", JSON.stringify(monsters));
}
function wantedAll() {
monsters.forEach(x => { x.wanted = true; });
setValue("monsters", JSON.stringify(monsters));
bindWanted();
}
function unwantAll() {
monsters.forEach(x => { x.wanted = false; });
setValue("monsters", JSON.stringify(monsters));
bindWanted();
}
function bindWanted() {
const monstersPanel = document.getElementById(`bgMonstersCenter`);
Array.from(monstersPanel.querySelectorAll("input[name=wanted]")).forEach(x => {
const monster = monsters.find(y => y.name == x.closest("tr").getAttribute("name"));
x.checked = monster?.wanted || false;
});
}
function createSettingsCaller() {
const settingsButtonContainer = document.querySelector("div#hwm_map_objects_and_buttons > div.job_fl_btns_block");
if(settingsButtonContainer) {
settingsButtonContainer.insertAdjacentHTML("beforeend", `
<a id=huntHelperSettingsButton href="javascript:void(0);" class="map_sel_obj_t" style="width: 200px;">
<div class="job_fl_btn show_hint" title="${isEn ? "HuntHelper script settings" : "Настройки скрипта HuntHelper"}">
<img src="https://dcdn.heroeswm.ru/i/btns/job_fl_btn_hunters.png">
</div>
</a>`);
document.getElementById("huntHelperSettingsButton").addEventListener("click", function() { showPanel("Settings"); });
}
}
function showPanel(panelName) {
let bg = document.getElementById(`bg${panelName}Overlay`);
let bgc = document.getElementById(`bg${panelName}Center`);
if(bg) {
bg.style.display = "block";
bgc.style.display = "block";
return;
}
bg = addElement('div', { id: `bg${panelName}Overlay`, style: "position: fixed; left: 0px; width: 100%; top: 0px; height: 100%; background: #000000; opacity: 0.5; z-index: 1110;" }, document.body);
bgc = addElement('div', { id: `bg${panelName}Center`, style: `position: fixed; left: ${(document.body.offsetWidth - 650) / 2}px; width: 650px; top: 150px; background: #F6F3EA; z-index: 1111;` }, document.body);
bg.addEventListener("click", function() { hidePanel(panelName); });
bgc.innerHTML = `
<div style="border:1px solid #abc;padding:5px;margin:2px;">
<table>
<tr>
<td colspan=3>
<b>${isEn ? "Script: Hunter's guild helper. Version" : "Скрипт: Помощник ГО. Версия"}: <font style="color:#0070FF;">${GM_info.script.version}</font>. Всего существ: <font style="color:#FF0000;">${monsters.length}</font></b>
<div style="float:right;border:1px solid #abc;width:15px;height:15px;text-align:center;cursor:pointer;" id="bt_close_tr" title="${isEn ? "Close" : "Закрыть"}">x</div>
<br>
<label><input type=checkbox id=set_enable_Exp_Half title=""> ${isEn ? "Show <b>exp with helper</b>, if kill 50% each" : "Отображать <b>опыт с помощником</b>, если убьёте по 50%"}</label><br>
<label><input type=checkbox id=set_enable_5_procent title=""> ${isEn ? "Отображать сколько убить существ <b>для минимального прироста</b> существ" : "Отображать сколько убить существ <b>для минимального прироста</b> существ"}</label>
<hr/>
<label><input type=checkbox id=set_show_archive title=""> ${isEn ? "Show <b>archive records links</b>" : "Отображать <b>ссылки на рекорды</b> из архива"}</label> <img src="https://dcdn.heroeswm.ru/i/icons/attr_knowledge.png" width="18">
<br>
<label><input type=checkbox id=set_show_HP title=""> ${isEn ? "Show HP" : "Показать HP"}</label>
<br>
<label><input type=checkbox id=set_Grin_Pis title=""> ${isEn ? "<b><font color=green size=3> GreenPeace </font></b> mode enable (hide hunts" : "Включить режим<b><font color=green size=3> GreenPeace </font></b>(скрывать предложения охот"}</label>
<hr/>
</td>
</tr>
<tr>
<td colspan=3>
${isEn ? "Overexp rate" : "Коэффициент перекача"} <input id="set_koef" value="${getPlayerValue("koef_dop_exp", 1)}" style="width: 100px;" maxlength="6" type="number">
<hr/>
${isEn ? "Looking for" : "Поиск"}
<br>
<label><input type=checkbox id=lookingForMarkedInListCheckbox> ${isEn ? "creatures marked in the list" : "существ отмеченных в списке"}</label><span id=monstersListContainer></span>
<br>
${isEn ? "experience less then" : "опыт меньше, чем"}: <input id="experienceLimitInput" type="number" value="${getPlayerValue("experienceLimit", "0")}" style="width: 70px;">
<br>
<label><input type=checkbox id=lookingForHalfAmountCheckbox> ${isEn ? "half ([1/2])" : "половинок ([1/2])"}</label>
<br>
<label><input type=checkbox id=lookingForDiamandCheckbox> <img width="16" height="16" border="0" title="${isEn ? "Diamands" : "Бриллианты"}" src="https://dcdn.heroeswm.ru/i/r/48/diamonds.png"></label>
<br>
<label><input type=checkbox id=lookingForFlyingCheckbox> ${isEn ? "flying" : "летающих"}</label>
<br>
<label><input type=checkbox id=lookingForAdvancedGuildPointsCheckbox> ${isEn ? "advanced guild points" : "увеличенные очки гильдии"}</label>
</td>
</tr>
<tr>
<td colspan=3>
<label><input type=checkbox id=set_pic_enable title=""> ${isEn ? "Show creatures images" : "Отображать картинки существ в списке"}</label>
<hr/>
</td>
</tr>
<tr>
<td width="40%">
<a href="https://greasyfork.org/ru/scripts/434534-hwm-go-helper" target=_blanc>${isEn ? "Check for update" : "Проверить обновление скрипта."}</a>
</td>
<td colspan=2 width="60%" align="right">
<a href="sms-create.php?mailto=&subject=${isEn ? "Script hunter's guild helper" : "Скрипт: Помощник ГО"} v. ${GM_info.script.version}. ${isEn ? "Error found" : "Найдена ошибка"}:}" target=_blanc>${isEn ? "Report error" : "Сообщить о найденной ошибке."}</a>
</td>
</tr>
</table>
</div>`;
document.getElementById("bt_close_tr").addEventListener("click", function() { hidePanel(panelName); });
document.getElementById("set_enable_Exp_Half").addEventListener("click", function() { setPlayerValue("enable_Exp_Half", this.checked); });
document.getElementById("set_enable_5_procent").addEventListener("click", function() { setPlayerValue("enable_5_procent", this.checked); });
document.getElementById("set_show_archive").addEventListener("click", function() { setPlayerValue("show_archive", this.checked); });
document.getElementById("set_Grin_Pis").addEventListener("click", function() { setPlayerValue("grin_Pis", this.checked); applyGreenPeace(); });
document.getElementById("set_koef").addEventListener("change", function() { setPlayerValue("koef_dop_exp", Number(this.value)); });
document.getElementById("lookingForMarkedInListCheckbox").addEventListener("click", function() { setPlayerValue("lookingForMarkedInList", this.checked); });
document.getElementById("experienceLimitInput").addEventListener("change", function() { setPlayerValue("experienceLimit", this.value); });
document.getElementById("lookingForHalfAmountCheckbox").addEventListener("click", function() { setPlayerValue("lookingForHalfAmount", this.checked); });
document.getElementById("lookingForDiamandCheckbox").addEventListener("click", function() { setPlayerValue("lookingForDiamand", this.checked); });
document.getElementById("lookingForFlyingCheckbox").addEventListener("click", function() { setPlayerValue("lookingForFlying", this.checked); });
document.getElementById("lookingForAdvancedGuildPointsCheckbox").addEventListener("click", function() { setPlayerValue("lookingForAdvancedGuildPoints", this.checked); });
document.getElementById("set_pic_enable").addEventListener("click", function() { setPlayerValue("pic_enable", this.checked); });
document.getElementById("set_show_HP").addEventListener("click", function() { setPlayerValue("show_HP", this.checked); });
bindSettings();
createTraceMonstersPanelCaller(document.getElementById("monstersListContainer"));
}
function bindSettings() {
document.getElementById("set_enable_Exp_Half").checked = getPlayerBool("enable_Exp_Half");
document.getElementById("set_enable_5_procent").checked = getPlayerBool("enable_5_procent");
document.getElementById("set_show_archive").checked = getPlayerBool("show_archive");
document.getElementById("set_Grin_Pis").checked = getPlayerBool("grin_Pis");
document.getElementById("lookingForMarkedInListCheckbox").checked = getPlayerBool("lookingForMarkedInList");
document.getElementById("experienceLimitInput").value = getPlayerValue("experienceLimit", "");
document.getElementById("lookingForHalfAmountCheckbox").checked = getPlayerBool("lookingForHalfAmount");
document.getElementById("lookingForDiamandCheckbox").checked = getPlayerBool("lookingForDiamand");
document.getElementById("lookingForFlyingCheckbox").checked = getPlayerBool("lookingForFlying");
document.getElementById("lookingForAdvancedGuildPointsCheckbox").checked = getPlayerBool("lookingForAdvancedGuildPoints");
document.getElementById("set_pic_enable").checked = getPlayerBool("pic_enable");
document.getElementById("set_show_HP").checked = getPlayerBool("show_HP", true);
}
function hidePanel(panelName) {
document.getElementById(`bg${panelName}Overlay`).style.display = "none";
document.getElementById(`bg${panelName}Center`).style.display = "none";
}
function showExperience() {
if(location.pathname != '/map.php') {
return;
}
const koef = parseFloat(getPlayerValue("koef_dop_exp", 1));
const hunts = Array.from(document.querySelectorAll("div[id^=neut_right_block] > div:first-child > div:first-child")).map(x => {
const armyRef = x.querySelector("a[href^='army_info.php?name=']");
const name = getUrlParamValue(armyRef.href, "name");
const amount = parseInt(x.querySelector("b").innerText.match(/(\d+)/)[1]);
const title = armyRef.innerText;
let gold = 0;
const goldMatch = x.innerHTML.match(new RegExp(`(\\d+) ${isEn ? "gold" : "золота"}`));
if(goldMatch) {
gold = parseInt(goldMatch[1]);
}
let monster = monsters.find(x => x.name == name);
if(!monster) {
monster = { name: name, title: isEn ? "" : title, enTitle: isEn ? title : "", experience: 0, health: 0 };
monsters.push(monster);
setValue("monsters", JSON.stringify(monsters));
} else {
if(isEn) {
if(!monster.enTitle) {
setMonsterProperty(name, "enTitle", title);
}
} else {
if(!monster.title) {
setMonsterProperty(name, "title", title);
}
}
}
const fullExperience = Math.round(amount * monster.experience / 5);
let experience = Math.min(fullExperience, PlayerLevel * 500);
if(PlayerLevel > 2) { //Если опыт меньше нижней отсечки по уровню (3+ уровни)
experience = Math.max(experience, PlayerLevel * 100);
}
experience = Math.round(experience * koef); // total_exp - опыт с учетом коэф. перекача
const isHalfAmount = x.innerHTML.includes("[1/2]");
const isDiamand = x.innerHTML.includes("diamonds.png");
let guildPoints = 1;
const guildPointsMacth = x.innerText.match(/\+([2,3,5])/);
if(guildPointsMacth) {
guildPoints = parseInt(guildPointsMacth[1]);
}
return { name: name, title: title, amount: amount, title: title, gold: gold, monster: monster, huntDescriptionPanel: x, fullExperience: fullExperience, experience: experience, isHalfAmount: isHalfAmount, isDiamand: isDiamand, guildPoints: guildPoints };
});
if(hunts.length == 0) {
return;
}
console.log(hunts);
document.title = isEn ? "Hunt found" : "Охота найдена";
// Если находимся в режиме поиска, то пропускаем охоты, не отвечающие критериям поиска. В режиме поиска мы находимся, если включен хоть один критериев поиска.
if(getPlayerBool("lookingForMarkedInList") && monsters.find(x => x.wanted) || Number(getPlayerValue("experienceLimit")) > 0 || getPlayerBool("lookingForHalfAmount") || getPlayerBool("lookingForDiamand") || getPlayerBool("lookingForFlying") || getPlayerBool("lookingForAdvancedGuildPoints")) {
let found = false;
if(!found && getPlayerBool("lookingForMarkedInList")) {
found = hunts.find(x => x.monster.wanted) ? true : false;
}
if(!found && Number(getPlayerValue("experienceLimit")) > 0) {
found = hunts.find(x => x.experience <= Number(getPlayerValue("experienceLimit"))) ? true : false;
}
if(!found && getPlayerBool("lookingForHalfAmount")) {
found = hunts.find(x => x.isHalfAmount) ? true : false;
}
if(!found && getPlayerBool("lookingForDiamand")) {
found = hunts.find(x => x.isDiamand) ? true : false;
}
if(!found && getPlayerBool("lookingForFlying")) {
found = hunts.find(x => x.monster.canFly) ? true : false;
}
if(!found && getPlayerBool("lookingForAdvancedGuildPoints")) {
found = hunts.find(x => x.guildPoints > 1) ? true : false;
}
if(!found) {
const skipButton = document.querySelector(`div#map_hunt_block_div div[hint^='${isEn ? "Pass" : "Пройти"}']`);
if(skipButton) {
document.title = isEn ? "Hunt skipped" : "Охота пропущена";
skipButton.dispatchEvent(new MouseEvent('click')); //setTimeout(function() { window.location.href = location.protocol+'//'+location.hostname+'/'+'map.php?action=skip'; }, 2000);
}
}
}
for(const hunt of hunts) {
if(getPlayerBool("show_HP", true)) {
const amountEndIndex = hunt.huntDescriptionPanel.innerHTML.indexOf(")");
hunt.huntDescriptionPanel.innerHTML = hunt.huntDescriptionPanel.innerHTML.substring(0, amountEndIndex) + ` <font style="font-size:10px;color:#CD00CD">HP:<b>${hunt.monster.health * hunt.amount}</b></font>` + hunt.huntDescriptionPanel.innerHTML.substring(amountEndIndex);
}
const min_count = Math.round(hunt.amount / 5 - 0.5); //Для минимального 5% прироста
let exp_min_count = Math.min(Math.floor(hunt.monster.experience * min_count / 5), PlayerLevel * 500); //Опыт при минимальном приросте
let exp_with_helper = Math.min(Math.round(hunt.fullExperience / 2), PlayerLevel * 500); //Опыт с помощником (50/50)
if(PlayerLevel > 2) { //Если опыт меньше нижней отсечки по уровню (3+ уровни)
exp_with_helper = exp_with_helper < PlayerLevel * 35 ? PlayerLevel * 35 : exp_with_helper;
exp_min_count = exp_min_count < PlayerLevel * 14 ? PlayerLevel * 14 : exp_min_count;
}
exp_with_helper = (exp_with_helper * koef).toFixed(0);
exp_min_count = (exp_min_count * koef).toFixed(0);
if(hunt.monster.wanted) {
hunt.huntDescriptionPanel.style.background = "#D1FFD1"; //Если есть ли моб в нашем списке
}
if(hunt.experience > parseInt(getPlayerValue("experienceLimit", 0)) && parseInt(getPlayerValue("experienceLimit", 0)) > 0) {
hunt.huntDescriptionPanel.style.background = '#FFA07A';
}
let str_dop = "";
if(hunt.experience != hunt.fullExperience) {
str_dop = ` (${isEn ? "from" : "из"} ${hunt.fullExperience})`;
}
let str_total_exp = `<br> <font style="font-size:10px;color:#0000CD">${isEn ? "You gain" : "Вы получите"} <b>${hunt.experience}${str_dop}</b> ${isEn ? "exp. Next amount" : "опыта. Следующее количество"} ~${(hunt.amount * 1.3).toFixed(0)}${isEn ? "" : " шт."}</font>`;
if(hunt.experience < (PlayerLevel + 1) * 100 && PlayerLevel > 1) {
str_total_exp += `<br><font style="color:#0000CD">${isEn ? "Kill it now! On level" : "Убей сейчас! На"} ${PlayerLevel + 1} ${isEn ? " you gain" : "уровне за них дадут"} <b>${(PlayerLevel + 1) * 100}</b> ${isEn ? "exp" : "опыта"}.</font>`;
}
if(getPlayerBool("enable_Exp_Half")) {
str_total_exp = str_total_exp + `<br><font style="font-size: 10px; color:#CD00CD">${isEn ? "За убийство с помощником (50/50 Вам дадут" : "За убийство с помощником (50/50 Вам дадут"} <b>${exp_with_helper}</b> ${isEn ? "опыта. В следующий раз предложат" : "опыта. В следующий раз предложат"} ~${(hunt.amount * Math.pow(1.3, 0.5)).toFixed(0)} шт.}</font>`;
};
if(getPlayerBool("enable_5_procent")) {
str_total_exp = str_total_exp + `<font style="font-size: 11px; color: #007FFF"><i><center>${isEn ? "Для Min (~5% прироста надо убить не более" : "Для Min (~5% прироста надо убить не более"} ${min_count} шт (${exp_min_count} опыта. В следующий раз предложат ~${(hunt.amount * Math.pow(1.3, 0.2)).toFixed(0)} шт.</center></i></font>`;
};
hunt.huntDescriptionPanel.insertAdjacentHTML("beforeend", str_total_exp);
}
}
function huntHelpers() {
if(location.pathname != '/group_wars.php') {
return;
}
const battleRows = Array.from(document.querySelectorAll("center table.wb > tbody > tr"));
for(const titleRow of battleRows.slice(0, 1)) {
titleRow.cells[3].innerHTML += `
<label style="font-size: 7pt;">${isEn ? "Hunter" : "Охотник"}<input type=checkbox id=set_find_Hunt title=""></label>`;
titleRow.cells[6].innerHTML += `
<label style="font-size: 7pt;">${isEn ? "Show HP" : "Показать HP"}<input type=checkbox id=set_show_HP title=""></label>
<label style="font-size: 7pt;">${isEn ? "Signal" : "Сигнал"}<input type=checkbox id=set_beep_if_free title=""></label>`;
document.getElementById("set_find_Hunt").addEventListener("click", function() { setPlayerValue("find_Hunt", this.checked); location.reload(); });
document.getElementById("set_beep_if_free").addEventListener("click", function() { setPlayerValue("beep_if_free", this.checked); });
document.getElementById("set_show_HP").addEventListener("click", function() { setPlayerValue("show_HP", this.checked); location.reload(); });
document.getElementById("set_find_Hunt").checked = getPlayerBool("find_Hunt");
document.getElementById("set_beep_if_free").checked = getPlayerBool("beep_if_free");
document.getElementById("set_show_HP").checked = getPlayerBool("show_HP", true);
}
for(const row of battleRows.slice(1)) {
const mapRef = row.querySelector("td > a[href*='map.php?cx']");
if(!mapRef) {
if(getPlayerBool("find_Hunt")) {
row.style.display = "none";
}
continue;
}
const battleDescriptionCell = row.childNodes[6];
const monstrRef = battleDescriptionCell.querySelector("a[href^='army_info.php?name=']");
const monsterTitle = monstrRef.querySelector("i").innerText;
const monstersAmount = parseInt(monstrRef.parentNode.innerHTML.match(/\((\d+)\)/)[1]);
const monster = monsters.find(x => x.title == monsterTitle);
if(!monster) {
console.log(`Не найден monsterTitle: ${monsterTitle}, monstersAmount: ${monstersAmount}`)
continue;
}
//console.log(mapRef.href.replace("/map.php", "/move_sector.php").replace(mapRef.search, `?id=${sectors[mapRef.search.slice(1)]}`));
mapRef.href = mapRef.href.replace("/map.php", "/move_sector.php").replace(mapRef.search, `?id=${sectors[mapRef.search.slice(1)]}`);
mapRef.title = isEn ? "Go" : "Перейти";
const total_exp = Math.floor(monster.experience * monstersAmount / 5);
const backgroundColor = total_exp < PlayerLevel * 133 ? "#cfd" : (total_exp < PlayerLevel * 100 ? "#0f0" : 'inherit');
battleDescriptionCell.insertAdjacentHTML("beforeend", `<br><font style="font-size: 7pt; color: #013220; background-color: ${backgroundColor};"><b>${total_exp}</b></font>${isEn ? " exp." : " опыта."}`);
if(getPlayerBool("show_HP", true)) {
battleDescriptionCell.insertAdjacentHTML("beforeend", ` <font style="font-size: 7pt; color: #CD00CD">HP: <b>${monster.health * monstersAmount}</b></font>`);
}
if(getPlayerBool("beep_if_free") && battleDescriptionCell.innerHTML.includes(isEn ? "Join" : "Вступить")) {
new Audio("https://zvukogram.com/mp3/cats/1002/vyistrel-iz-vintovki-po-misheni.mp3").play();
}
}
}
function add_archive() { //добавить ссылку на архив рекордов на странице рекордов
var ems, s_full, spl, s, s_url;
if(location.href.indexOf('level') == -1) return;
if(location.href.indexOf('show_archive=1') == -1) {
if(location.href.indexOf('mid') == -1) {
s_url = location.href + '&show_archive=1';
} else {
spl = location.href.split('&mid');
s_url = spl[0] + '&show_archive=1&mid' + spl[1];
}
s = isEn ? "Records archive before 01.03.2015" : "Архив рекордов до 01.03.2015";
} else {
spl = location.href.split('&show_archive=1');
s_url = spl[0] + spl[1];
s = isEn ? "Current records" : "Текущие рекорды";
}
ems = document.querySelectorAll("div > center > a[href*='plstats_hunters.php?level']");
if(ems.length != 0) {
s_full = '<br><center><a href="' + s_url + '"><b><font color="blue">' + s + '</font></b></a></center>';
ems[0].parentNode.insertAdjacentHTML("afterEnd", s_full);
}
}
function applyGreenPeace() {
const map_hunt_block_div = document.getElementById("map_hunt_block_div");
if(map_hunt_block_div) {
map_hunt_block_div.style.display = getPlayerBool("grin_Pis") ? "none" : "block";
}
}
function getValue(key, defaultValue) { return GM_getValue(key, defaultValue); };
function setValue(key, value) { GM_setValue(key, value); };
function deleteValue(key) { return GM_deleteValue(key); };
function getPlayerValue(key, defaultValue) { return GM_getValue(`${key}${PlayerId}`, defaultValue); };
function setPlayerValue(key, value) { GM_setValue(`${key}${PlayerId}`, value); };
function deletePlayerValue(key) { return GM_deleteValue(`${key}${PlayerId}`); };
function listValues() { return GM_listValues(); }
function getPlayerBool(valueName, defaultValue = false) { return getBool(valueName + PlayerId, defaultValue); }
function getBool(valueName, defaultValue = false) {
const value = getValue(valueName);
//console.log(`valueName: ${valueName}, value: ${value}, ${typeof(value)}`)
if(value != undefined) {
if(typeof(value) == "string") {
return value == "true";
}
if(typeof(value) == "boolean") {
return value;
}
}
return defaultValue;
}
function GM_addStyle(css) { addElement("style", { type: "text/css", innerHTML: css }, document.head); }
function addElement(type, data = {}, parent = undefined, insertPosition = "beforeend") {
const el = document.createElement(type);
for(const key in data) {
if(key == "innerText" || key == "innerHTML") {
el[key] = data[key];
} else {
el.setAttribute(key, data[key]);
}
}
if(parent) {
parent.insertAdjacentElement(insertPosition, el);
}
return el;
}
function sortBy(field, reverse, evaluator) {
const key = evaluator ? function(x) { return evaluator(x[field]); } : function(x) { return x[field]; };
return function(a, b) { return a = key(a), b = key(b), (reverse ? -1 : 1) * ((a > b) - (b > a)); }
}
function getUrlParamValue(url, paramName) { return (new URLSearchParams(url.split("?")[1])).get(paramName); }