您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Помощник ГО
当前为
// ==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); }