hwmHuntHelper

Помощник ГО

// ==UserScript==
// @name           hwmHuntHelper
// @namespace      Tamozhnya1
// @description    Помощник ГО
// @author         Mantens, ElMarado, CheckT, Pagan of Dark, Tamozhnya1
// @version        8.5
// @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*
// @require https://update.greasyfork.org/scripts/490927/1360667/Tamozhnya1Lib.js
// @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

if(!PlayerId) {
    return;
}
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" : "Боевой уровень"));
        if(levelInfoCell) {
            setPlayerValue("PlayerLevel", parseInt(levelInfoCell.querySelector("div[id=bartext] > span").innerText));
        }
    } else {
        const levelExec = new RegExp(`<b>${isEn ? "Combat level" : "Боевой уровень"}: (\\d+?)<\\/b>`).exec(document.documentElement.innerHTML);
        if(levelExec) {
            setPlayerValue("PlayerLevel", parseInt(levelExec[1]) || 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
}
//deleteValue("monstersVersion");
//console.log(`monstersVersion: ${getValue("monstersVersion", "")}, ${getValue("monstersVersion", "") < "6.5"}`);
if(getValue("monstersVersion", "") < "8.4") {
    var oldMonsters = JSON.parse(getValue("monsters", "[]"));
    deleteValue("monsters");
}
if(!getValue("monsters")) {
    const monstersTemplate = [{"name":"bpirate","title":"Абордажники","experience":30,"health":16,"canFly":false,"newYear":false,"enTitle":"Pirate Fighters"},{"name":"zealot","title":"Адепты","experience":121,"health":80,"canFly":false,"newYear":false,"enTitle":"Exorcists"},{"name":"hellcharger","title":"Адские жеребцы","experience":136,"health":50,"canFly":false,"newYear":false,"imageName":"nightmare","enTitle":"Hell horses"},{"name":"zhryak","title":"Адские жнецы","experience":250,"health":99,"canFly":false,"newYear":false,"enTitle":"Hell reapers"},{"name":"hellhound","title":"Адские псы","experience":33,"health":15,"canFly":false,"newYear":false,"imageName":"demondog","enTitle":"Wolfhounds"},{"name":"reanimatorup","title":"Адские реаниматоры","experience":43,"health":27,"canFly":false,"newYear":false,"enTitle":"Infernal reanimators"},{"name":"troglodyteup","title":"Адские троглодиты","experience":7,"health":6,"canFly":false,"newYear":false,"enTitle":"Infernal Troglodytes"},{"name":"iceelb","title":"Айсберговые элементали","experience":50,"health":90,"canFly":true,"newYear":false,"enTitle":"Iceberg elementals"},{"name":"diamondgolem","title":"Алмазные големы","experience":110,"health":60,"canFly":false,"newYear":false,"enTitle":"Diamond golems"},{"name":"yetiup","title":"Алмасты","experience":400,"health":290,"canFly":false,"newYear":false,"enTitle":"Almases"},{"name":"angel","title":"Ангелы","experience":330,"health":180,"canFly":true,"newYear":false,"enTitle":"Angels"},{"name":"marksman","title":"Арбалетчики","experience":19,"health":10,"canFly":false,"newYear":false,"enTitle":"Crossbowmen"},{"name":"archangel","title":"Архангелы","experience":390,"health":220,"canFly":true,"newYear":false,"enTitle":"Archangels"},{"name":"archdemon","title":"Архидемоны","experience":312,"health":211,"canFly":false,"newYear":false,"enTitle":"Antichrists"},{"name":"archdevil","title":"Архидьяволы","experience":311,"health":199,"canFly":false,"newYear":false,"enTitle":"Archdevils"},{"name":"archlich","title":"Архиличи","experience":110,"health":55,"canFly":false,"newYear":false,"enTitle":"Archliches"},{"name":"archmage","title":"Архимаги","experience":70,"health":30,"canFly":false,"newYear":false,"enTitle":"Lorekeepers"},{"name":"assassin","title":"Ассасины","experience":33,"health":14,"canFly":false,"newYear":false,"imageName":"assasin","enTitle":"Poisoners"},{"name":"assida","title":"Ассиды","experience":53,"health":30,"canFly":true,"newYear":false,"enTitle":"Ayssids"},{"name":"ghostdragon","title":"Астральные драконы","experience":310,"health":150,"canFly":true,"newYear":false,"enTitle":"Mirage dragons"},{"name":"banshee","title":"Баньши","experience":205,"health":110,"canFly":false,"newYear":false,"enTitle":"Death proclaimers"},{"name":"behemoth","title":"Бегемоты","experience":350,"health":210,"canFly":false,"newYear":false,"enTitle":"Behemoths"},{"name":"berserker","title":"Берсерки","experience":42,"health":25,"canFly":false,"newYear":false,"enTitle":"Berserkers"},{"name":"maiden","title":"Бестии","experience":30,"health":16,"canFly":false,"newYear":false,"enTitle":"Rogues"},{"name":"imp","title":"Бесы","experience":6,"health":4,"canFly":false,"newYear":false,"enTitle":"Imps"},{"name":"beholder","title":"Бехолдеры","experience":33,"health":22,"canFly":false,"newYear":false,"enTitle":"Beholders"},{"name":"wisp","title":"Блуждающие огни","experience":7,"health":10,"canFly":true,"newYear":false,"enTitle":"Will-O-Wisps"},{"name":"battlegriffin","title":"Боевые грифоны","experience":45,"health":35,"canFly":true,"newYear":false,"enTitle":"Frenzied griffins"},{"name":"silverunicorn","title":"Боевые единороги","experience":135,"health":77,"canFly":false,"newYear":false,"enTitle":"Brilliant unicorns"},{"name":"mcentaur","title":"Боевые кентавры","experience":21,"health":10,"canFly":false,"newYear":false,"enTitle":"Tempered centaurs"},{"name":"battlemage","title":"Боевые маги","experience":72,"health":29,"canFly":false,"newYear":false,"enTitle":"Battlemagi"},{"name":"slon","title":"Боевые слоны","experience":120,"health":100,"canFly":false,"newYear":false,"enTitle":"Fighting elephants"},{"name":"vampire","title":"Вампиры","experience":68,"health":30,"canFly":false,"newYear":false,"enTitle":"Vampires"},{"name":"warmong","title":"Вармонгеры","experience":36,"health":20,"canFly":false,"newYear":false,"enTitle":"Protectors"},{"name":"cursed","title":"Ведьмы-призраки","experience":30,"health":20,"canFly":true,"newYear":false,"imageName":"cursed_","enTitle":"Cursed witches"},{"name":"priestessup","title":"Ведьмы моря","experience":70,"health":35,"canFly":false,"newYear":false,"enTitle":"Sea witches"},{"name":"giant","title":"Великаны","experience":160,"health":100,"canFly":false,"newYear":false,"enTitle":"Trashers"},{"name":"giantarch","title":"Великаны-лучники","experience":130,"health":100,"canFly":false,"newYear":false,"enTitle":"Giant archers"},{"name":"upleviathan","title":"Великие левиафаны","experience":300,"health":250,"canFly":false,"newYear":false,"enTitle":"Great leviathans"},{"name":"wendigo","title":"Вендиго","experience":20,"health":25,"canFly":false,"newYear":false,"enTitle":"Wendigos"},{"name":"druideld","title":"Верховные друиды","experience":101,"health":38,"canFly":false,"newYear":false,"imageName":"ddeld","enTitle":"Anchorites"},{"name":"wraith","title":"Вестники смерти","experience":205,"health":100,"canFly":false,"newYear":false,"enTitle":"Death heralds"},{"name":"wyvern","title":"Виверны","experience":170,"health":90,"canFly":true,"newYear":false,"enTitle":"Tamed wyverns"},{"name":"djinn_vizier","title":"Визири джиннов","experience":110,"health":50,"canFly":true,"newYear":false,"enTitle":"Fortune genies"},{"name":"matriarch","title":"Владычицы тени","experience":185,"health":90,"canFly":false,"newYear":false,"enTitle":"Dark sibyls"},{"name":"water","title":"Водные элементали","experience":57,"health":43,"canFly":false,"newYear":false,"enTitle":"Water elementals"},{"name":"chieftain","title":"Вожаки","experience":100,"health":48,"canFly":false,"newYear":false,"enTitle":"Chieftains"},{"name":"air","title":"Воздушные элементали","experience":59,"health":30,"canFly":true,"newYear":false,"enTitle":"Air elementals"},{"name":"anubisup","title":"Воины Анубиса","experience":420,"health":200,"canFly":false,"newYear":false,"enTitle":"Anubis warriors"},{"name":"battlerager","title":"Воины ярости","experience":42,"health":30,"canFly":false,"newYear":false,"enTitle":"Beastslayers"},{"name":"mercfootman","title":"Воины-наёмники","experience":25,"health":24,"canFly":false,"newYear":false,"enTitle":"Mercenary warriors"},{"name":"shieldguard","title":"Воители","experience":12,"health":12,"canFly":false,"newYear":false,"enTitle":"Veterans"},{"name":"faeriedragon","title":"Волшебные драконы","experience":800,"health":500,"canFly":true,"newYear":false,"enTitle":"Faerie dragons"},{"name":"thiefmage","title":"Воры-колдуны","experience":35,"health":30,"canFly":false,"newYear":false,"enTitle":"Renegade magicians"},{"name":"thiefwarrior","title":"Воры-разведчики","experience":35,"health":45,"canFly":false,"newYear":false,"enTitle":"Renegade scouts"},{"name":"thiefarcher","title":"Воры-убийцы","experience":35,"health":40,"canFly":false,"newYear":false,"enTitle":"Renegade thugs"},{"name":"seraph2","title":"Высшие ангелы","experience":390,"health":220,"canFly":true,"newYear":false,"enTitle":"Thrones"},{"name":"vampirelord","title":"Высшие вампиры","experience":70,"health":35,"canFly":false,"newYear":false,"enTitle":"Vampire counts"},{"name":"masterlich","title":"Высшие личи","experience":100,"health":55,"canFly":false,"newYear":false,"enTitle":"Demiliches"},{"name":"highwayman","title":"Вышибалы","experience":30,"health":24,"canFly":false,"newYear":false,"enTitle":"Bruisers"},{"name":"harpy","title":"Гарпии","experience":29,"health":15,"canFly":true,"newYear":false,"enTitle":"Harpies"},{"name":"harpyhag","title":"Гарпии-ведьмы","experience":45,"health":15,"canFly":true,"newYear":false,"enTitle":"Raiding harpies"},{"name":"harpooner","title":"Гарпунеры","experience":18,"health":10,"canFly":false,"newYear":false,"enTitle":"Harpooners"},{"name":"bigspider","title":"Гигантские пауки","experience":50,"health":55,"canFly":false,"newYear":false,"enTitle":"Giant Spiders"},{"name":"lizard","title":"Гигантские ящеры","experience":25,"health":25,"canFly":false,"newYear":false,"imageName":"lizard_","enTitle":"Giant lizards"},{"name":"hydra","title":"Гидры","experience":108,"health":80,"canFly":false,"newYear":false,"enTitle":"Hydras"},{"name":"darkeye","title":"Глаза тьмы","experience":33,"health":26,"canFly":false,"newYear":false,"enTitle":"Shadow eyes"},{"name":"upseamonster","title":"Глубоководные черти","experience":140,"health":105,"canFly":false,"newYear":false,"enTitle":"Voracious anglerfish"},{"name":"rotzombie","title":"Гниющие зомби","experience":17,"health":23,"canFly":false,"newYear":false,"enTitle":"Ghouls"},{"name":"goblin","title":"Гоблины","experience":5,"health":3,"canFly":false,"newYear":false,"enTitle":"Goblins"},{"name":"goblinarcher","title":"Гоблины-лучники","experience":9,"health":3,"canFly":false,"newYear":false,"enTitle":"Goblin archers"},{"name":"goblinmag","title":"Гоблины-маги","experience":9,"health":3,"canFly":false,"newYear":false,"enTitle":"Goblin warlocks"},{"name":"trapper","title":"Гоблины-трапперы","experience":15,"health":7,"canFly":false,"newYear":false,"enTitle":"Goblin trappers"},{"name":"gogachi","title":"Гоги","experience":13,"health":13,"canFly":false,"newYear":false,"imageName":"gog","enTitle":"Gogs"},{"name":"dgolem","title":"Големы смерти","experience":329,"health":350,"canFly":false,"newYear":false,"enTitle":"Death golems"},{"name":"brute","title":"Головорезы","experience":6,"health":8,"canFly":false,"newYear":false,"enTitle":"Brutes"},{"name":"mountaingr","title":"Горные стражи","experience":24,"health":12,"canFly":false,"newYear":false,"enTitle":"Mountain sentries"},{"name":"gremlin","title":"Гремлины","experience":5,"health":5,"canFly":false,"newYear":false,"enTitle":"Gremlins"},{"name":"saboteurgremlin","title":"Гремлины-вредители","experience":9,"health":6,"canFly":false,"newYear":false,"enTitle":"Gremlin wreckers"},{"name":"griffon","title":"Грифоны","experience":59,"health":30,"canFly":true,"newYear":false,"enTitle":"Griffins"},{"name":"thunderlord","title":"Громовержцы","experience":162,"health":120,"canFly":false,"newYear":false,"enTitle":"Invokers"},{"name":"axegnom","title":"Громоглавы","experience":14,"health":10,"canFly":false,"newYear":false,"enTitle":"Thunderheads"},{"name":"nomadup","title":"Гунны","experience":60,"health":33,"canFly":false,"newYear":false,"enTitle":"Huns"},{"name":"deserter","title":"Дезертиры","experience":40,"health":25,"canFly":false,"newYear":false,"enTitle":"Deserters"},{"name":"succubusmis","title":"Демонессы","experience":67,"health":30,"canFly":false,"newYear":false,"imageName":"succubusm","enTitle":"Mistresses"},{"name":"smalllizard","title":"Детёныши ящера","experience":13,"health":13,"canFly":false,"newYear":false,"imageName":"smalllizard_","enTitle":"Lizard cubs"},{"name":"djinn","title":"Джинны","experience":103,"health":40,"canFly":true,"newYear":false,"enTitle":"Genies"},{"name":"djinn_sultan","title":"Джинны-султаны","experience":110,"health":45,"canFly":true,"newYear":false,"enTitle":"Senior genies"},{"name":"savageent","title":"Дикие энты","experience":210,"health":175,"canFly":false,"newYear":false,"enTitle":"Savage Treant"},{"name":"robber","title":"Дозорные","experience":7,"health":5,"canFly":false,"newYear":false,"enTitle":"Outriders"},{"name":"eadaughter","title":"Дочери земли","experience":72,"health":35,"canFly":false,"newYear":false,"enTitle":"Earth shamans"},{"name":"sdaughter","title":"Дочери неба","experience":75,"health":35,"canFly":false,"newYear":false,"enTitle":"Sky shamans"},{"name":"ancientbehemoth","title":"Древние бегемоты","experience":390,"health":250,"canFly":false,"newYear":false,"imageName":"abehemoth","enTitle":"Ancient Behemoths"},{"name":"ancientpig","title":"Древние кабаны","experience":12,"health":15,"canFly":false,"newYear":false,"enTitle":"Ancient boars"},{"name":"amummy","title":"Древние мумии","experience":135,"health":80,"canFly":false,"newYear":false,"enTitle":"Ancient mummies"},{"name":"ancienent","title":"Древние энты","experience":210,"health":181,"canFly":false,"newYear":false,"enTitle":"Ironroot treefolk"},{"name":"sprite","title":"Дриады","experience":20,"health":6,"canFly":true,"newYear":false,"enTitle":"Sprites"},{"name":"druid","title":"Друиды","experience":74,"health":34,"canFly":false,"newYear":false,"imageName":"dd_","enTitle":"Druids"},{"name":"poltergeist","title":"Духи","experience":27,"health":20,"canFly":true,"newYear":false,"enTitle":"Poltergeists"},{"name":"forestspirit","title":"Духи леса","experience":90,"health":50,"canFly":true,"newYear":false,"enTitle":"Spirits of forest","imageName":"spirit"},{"name":"ocean","title":"Духи океана","experience":53,"health":30,"canFly":true,"newYear":false,"enTitle":"Ocean spirits"},{"name":"devil","title":"Дьяволы","experience":245,"health":166,"canFly":false,"newYear":false,"enTitle":"Devils"},{"name":"vermin","title":"Дьяволята","experience":10,"health":6,"canFly":false,"newYear":false,"enTitle":"Vermins"},{"name":"unicorn","title":"Единороги","experience":124,"health":57,"canFly":false,"newYear":false,"enTitle":"Unicorns"},{"name":"iron_golem","title":"Железные големы","experience":33,"health":18,"canFly":false,"newYear":false,"imageName":"golem","enTitle":"Golems"},{"name":"runepriest","title":"Жрецы рун","experience":59,"health":60,"canFly":false,"newYear":false,"enTitle":"Priests"},{"name":"priestmoon","title":"Жрицы луны","experience":60,"health":50,"canFly":false,"newYear":false,"enTitle":"Moon Priestesses","imageName":"zhrica"},{"name":"priestess","title":"Жрицы моря","experience":70,"health":35,"canFly":false,"newYear":false,"enTitle":"Sea priestesses"},{"name":"priestsun","title":"Жрицы солнца","experience":70,"health":55,"canFly":false,"newYear":false,"enTitle":"Sun Priestesses","imageName":"zhricaup"},{"name":"vindicator","title":"Защитники веры","experience":20,"health":23,"canFly":false,"newYear":false,"enTitle":"Crusaders"},{"name":"defender","title":"Защитники гор","experience":7,"health":7,"canFly":false,"newYear":false,"enTitle":"Sentries"},{"name":"greendragon","title":"Зелёные драконы","experience":350,"health":200,"canFly":true,"newYear":false,"enTitle":"Green dragons"},{"name":"earth","title":"Земные элементали","experience":63,"health":75,"canFly":false,"newYear":false,"enTitle":"Earth elementals"},{"name":"evileye","title":"Злобные глаза","experience":33,"health":22,"canFly":false,"newYear":false,"enTitle":"Evil eyes"},{"name":"zombie","title":"Зомби","experience":11,"health":17,"canFly":false,"newYear":false,"enTitle":"Zombies"},{"name":"emeralddragon","title":"Изумрудные драконы","experience":400,"health":200,"canFly":true,"newYear":false,"enTitle":"Jade dragons"},{"name":"impergriffin","title":"Имперские грифоны","experience":62,"health":35,"canFly":true,"newYear":false,"enTitle":"Royal griffins"},{"name":"inquisitor","title":"Инквизиторы","experience":121,"health":80,"canFly":false,"newYear":false,"enTitle":"Clerics"},{"name":"seducer","title":"Искусительницы","experience":65,"health":26,"canFly":false,"newYear":false,"enTitle":"Temptresses"},{"name":"efreeti","title":"Ифриты","experience":200,"health":90,"canFly":true,"newYear":false,"enTitle":"Efreeti"},{"name":"efreetisultan","title":"Ифриты султаны","experience":250,"health":100,"canFly":true,"newYear":false,"enTitle":"Efreeti sultans"},{"name":"yeti","title":"Йети","experience":400,"health":280,"canFly":false,"newYear":false,"enTitle":"Yeties"},{"name":"boar","title":"Кабаны","experience":12,"health":17,"canFly":false,"newYear":false,"enTitle":"Boars"},{"name":"stone_gargoyle","title":"Каменные горгульи","experience":16,"health":15,"canFly":true,"newYear":false,"imageName":"gargoly","enTitle":"Gargoyles"},{"name":"kammon","title":"Каменные монстры","experience":20,"health":28,"canFly":false,"newYear":false,"enTitle":"Stone monsters"},{"name":"kamnegryz","title":"Камнегрызы","experience":67,"health":55,"canFly":false,"newYear":false,"enTitle":"Stonegnawers"},{"name":"kamneed","title":"Камнееды","experience":56,"health":45,"canFly":false,"newYear":false,"enTitle":"Stoneeaters"},{"name":"fcentaur","title":"Кентавры","experience":13,"health":6,"canFly":false,"newYear":false,"enTitle":"Centaurs"},{"name":"vampireprince","title":"Князья вампиров","experience":70,"health":40,"canFly":false,"newYear":false,"enTitle":"Dreadlords"},{"name":"outlaw","title":"Колдуны-ренегаты","experience":6,"health":6,"canFly":false,"newYear":false,"enTitle":"Turncoat Mages"},{"name":"colossus","title":"Колоссы","experience":350,"health":175,"canFly":false,"newYear":false,"enTitle":"Giants"},{"name":"hellkon","title":"Кони преисподней","experience":138,"health":66,"canFly":false,"newYear":false,"imageName":"hellstallion","enTitle":"Searing horses"},{"name":"piratkaup","title":"Корсарки","experience":32,"health":12,"canFly":false,"newYear":false,"enTitle":"Women corsairs"},{"name":"apirate","title":"Корсары","experience":16,"health":13,"canFly":false,"newYear":false,"enTitle":"Corsairs"},{"name":"brawler","title":"Костоломы","experience":27,"health":20,"canFly":false,"newYear":false,"enTitle":"Brawlers"},{"name":"bonedragon","title":"Костяные драконы","experience":280,"health":150,"canFly":true,"newYear":false,"enTitle":"Skeletal dragons"},{"name":"nomad","title":"Кочевники","experience":50,"health":30,"canFly":false,"newYear":false,"enTitle":"Nomads"},{"name":"ncentaur","title":"Кочевые кентавры","experience":20,"health":9,"canFly":false,"newYear":false,"enTitle":"Centaur outriders"},{"name":"nightmare","title":"Кошмары","experience":140,"health":66,"canFly":false,"newYear":false,"imageName":"stallion","enTitle":"Nightmares"},{"name":"reddragon","title":"Красные драконы","experience":400,"health":235,"canFly":true,"newYear":false,"enTitle":"Red dragons"},{"name":"peasant","title":"Крестьяне","experience":5,"health":4,"canFly":false,"newYear":false,"imageName":"paesant","enTitle":"Farmers"},{"name":"crusader","title":"Крестоносцы","experience":27,"health":30,"canFly":false,"newYear":false,"enTitle":"Templars"},{"name":"crystaldragon","title":"Кристальные драконы","experience":400,"health":200,"canFly":true,"newYear":false,"enTitle":"Crystal Dragons"},{"name":"redlizard","title":"Кровавые ящеры","experience":30,"health":35,"canFly":false,"newYear":false,"imageName":"redlizard_","enTitle":"Vampiric lizards"},{"name":"bloodeyecyc","title":"Кровоглазые циклопы","experience":500,"health":235,"canFly":false,"newYear":false,"enTitle":"Tribal beholders"},{"name":"rakshasa_kshatra","title":"Кшатрии ракшасы","experience":162,"health":135,"canFly":false,"newYear":false,"enTitle":"Sphynx immortals"},{"name":"lavadragon","title":"Лавовые драконы","experience":329,"health":275,"canFly":false,"newYear":false,"enTitle":"Core dragons"},{"name":"scout","title":"Лазутчики","experience":20,"health":10,"canFly":false,"newYear":false,"enTitle":"Bandits"},{"name":"banditka","title":"Лазутчицы","experience":12,"health":8,"canFly":false,"newYear":false,"enTitle":"Infiltrators"},{"name":"squire","title":"Латники","experience":21,"health":26,"canFly":false,"newYear":false,"imageName":"swordman","enTitle":"Guardians"},{"name":"leviathan","title":"Левиафаны","experience":250,"health":200,"canFly":false,"newYear":false,"enTitle":"Leviathans"},{"name":"iceddragon","title":"Ледяные драконы","experience":250,"health":220,"canFly":true,"newYear":false,"enTitle":"Iced dragons","imageName":"icedragon"},{"name":"iceel","title":"Ледяные элементали","experience":50,"health":45,"canFly":true,"newYear":false,"enTitle":"Ice elementals"},{"name":"leprekon","title":"Лепреконы","experience":11,"health":7,"canFly":false,"newYear":false,"imageName":"lepr","enTitle":"Leprechauns"},{"name":"arcaneelf","title":"Лесные снайперы","experience":42,"health":12,"canFly":false,"newYear":false,"enTitle":"Sharpshooters"},{"name":"bobbit","title":"Лесные хоббиты","experience":9,"health":6,"canFly":false,"newYear":false,"enTitle":"Forest hobbits"},{"name":"shaman","title":"Лесные шаманы","experience":200,"health":110,"canFly":false,"newYear":false,"enTitle":"Forest shamans"},{"name":"lich","title":"Личи","experience":87,"health":50,"canFly":false,"newYear":false,"enTitle":"Liches"},{"name":"stalker","title":"Ловчие","experience":34,"health":15,"canFly":false,"newYear":false,"enTitle":"Stalkers"},{"name":"archer","title":"Лучники","experience":15,"health":7,"canFly":false,"newYear":false,"enTitle":"Bowmen"},{"name":"mage","title":"Маги","experience":63,"health":18,"canFly":false,"newYear":false,"enTitle":"Magi"},{"name":"magicel","title":"Магические элементали","experience":200,"health":80,"canFly":false,"newYear":false,"enTitle":"Magic elementals"},{"name":"magmadragon","title":"Магма драконы","experience":329,"health":280,"canFly":false,"newYear":false,"enTitle":"Magma dragons"},{"name":"magneticgolem","title":"Магнитные големы","experience":57,"health":28,"canFly":false,"newYear":false,"enTitle":"Lodestone golems"},{"name":"megogachi","title":"Магоги","experience":16,"health":13,"canFly":false,"newYear":false,"imageName":"magog","enTitle":"Magogs"},{"name":"raremamont","title":"Мамонты","experience":160,"health":110,"canFly":false,"newYear":false,"enTitle":"Mammoths","imageName":"mamont"},{"name":"manticore","title":"Мантикоры","experience":130,"health":80,"canFly":true,"newYear":false,"enTitle":"Manticores"},{"name":"skirmesher","title":"Мастера копья","experience":17,"health":12,"canFly":false,"newYear":false,"enTitle":"Master spearmen"},{"name":"masterhunter","title":"Мастера лука","experience":42,"health":14,"canFly":false,"newYear":false,"imageName":"hunterelf","enTitle":"Grandmaster bowmen"},{"name":"negro","title":"Матросы-чужеземцы","experience":24,"health":17,"canFly":false,"newYear":false,"enTitle":"Sailors-strangers"},{"name":"bloodsister","title":"Мегеры","experience":49,"health":24,"canFly":false,"newYear":false,"enTitle":"Termagants"},{"name":"bear","title":"Медведи","experience":22,"health":22,"canFly":false,"newYear":false,"enTitle":"Bears"},{"name":"medusa","title":"Медузы","experience":45,"health":25,"canFly":false,"newYear":false,"enTitle":"Medusas"},{"name":"medusaup","title":"Медузы королевы","experience":55,"health":30,"canFly":false,"newYear":false,"enTitle":"Medusas Queens"},{"name":"spearwielder","title":"Метатели копья","experience":11,"health":10,"canFly":false,"newYear":false,"enTitle":"Spearmen"},{"name":"minotaur","title":"Минотавры","experience":39,"health":31,"canFly":false,"newYear":false,"enTitle":"Tamed minotaurs"},{"name":"minotaurguard","title":"Минотавры-стражи","experience":56,"health":35,"canFly":false,"newYear":false,"imageName":"minotaurguard_","enTitle":"Minotaur soldiers"},{"name":"taskmaster","title":"Минотавры-надсмотрщики","experience":56,"health":40,"canFly":false,"newYear":false,"enTitle":"Minotaur gladiators"},{"name":"dgolemup","title":"Могильные големы","experience":400,"health":400,"canFly":false,"newYear":false,"enTitle":"Sepulcher golems"},{"name":"cbal","title":"Мобильные баллисты","experience":100,"health":65,"canFly":false,"newYear":false,"enTitle":"Mobile ballista"},{"name":"gnomon","title":"Молотобойцы","experience":12,"health":9,"canFly":false,"newYear":false,"enTitle":"Warhammerers"},{"name":"priest","title":"Монахи","experience":101,"health":54,"canFly":false,"newYear":false,"enTitle":"Monks"},{"name":"piratemonster","title":"Морские дьяволы","experience":300,"health":190,"canFly":false,"newYear":false,"enTitle":"Sailors` devil"},{"name":"seamonster","title":"Морские черти","experience":120,"health":90,"canFly":false,"newYear":false,"enTitle":"Anglerfish"},{"name":"mummy","title":"Мумии","experience":115,"health":50,"canFly":false,"newYear":false,"enTitle":"Mummies"},{"name":"pharaoh","title":"Мумии фараонов","experience":135,"health":70,"canFly":false,"newYear":false,"enTitle":"Sphynx mummies"},{"name":"enforcer","title":"Мятежники","experience":10,"health":7,"canFly":false,"newYear":false,"enTitle":"Rebels"},{"name":"naga","title":"Наги","experience":160,"health":110,"canFly":false,"newYear":false,"enTitle":"Nagas"},{"name":"dromad","title":"Наездники на верблюдах","experience":60,"health":40,"canFly":false,"newYear":false,"enTitle":"Camel riders"},{"name":"wolfrider","title":"Наездники на волках","experience":20,"health":10,"canFly":false,"newYear":false,"enTitle":"Wolf Riders"},{"name":"hyenarider","title":"Наездники на гиенах","experience":31,"health":13,"canFly":false,"newYear":false,"enTitle":"Hyena riders"},{"name":"boarrider","title":"Наездники на кабанах","experience":31,"health":14,"canFly":false,"newYear":false,"enTitle":"Boar riders"},{"name":"bearrider","title":"Наездники на медведях","experience":24,"health":25,"canFly":false,"newYear":false,"enTitle":"Dwarven ursary"},{"name":"darkrider","title":"Наездники на ящерах","experience":65,"health":40,"canFly":false,"newYear":false,"imageName":"lizardrider","enTitle":"Lizard cavalry"},{"name":"dromadup","title":"Налетчики на верблюдах","experience":70,"health":45,"canFly":false,"newYear":false,"enTitle":"Camel raiders"},{"name":"wolfraider","title":"Налётчики на волках","experience":31,"health":12,"canFly":false,"newYear":false,"imageName":"hobwolfrider","enTitle":"Wolf Raiders"},{"name":"reptiloid","title":"Никсы","experience":110,"health":80,"canFly":false,"newYear":false,"enTitle":"Nixes"},{"name":"reptiloidup","title":"Никсы-воины","experience":180,"health":90,"canFly":false,"newYear":false,"enTitle":"Nix warriors"},{"name":"dryad","title":"Нимфы","experience":20,"health":6,"canFly":true,"newYear":false,"imageName":"dryad_","enTitle":"Dryads"},{"name":"obsgargoyle","title":"Обсидиановые горгульи","experience":26,"health":20,"canFly":true,"newYear":false,"imageName":"obsgargoly","enTitle":"Enchanted gargoyles"},{"name":"hotdog","title":"Огненные гончие","experience":36,"health":15,"canFly":false,"newYear":false,"imageName":"firehound","enTitle":"Blazing hounds"},{"name":"hornedoverseer","title":"Огненные демоны","experience":23,"health":13,"canFly":false,"newYear":false,"imageName":"fdemon","enTitle":"Incendiaries"},{"name":"firedragon","title":"Огненные драконы","experience":255,"health":230,"canFly":false,"newYear":false,"enTitle":"Lava dragons"},{"name":"firebird","title":"Огненные птицы","experience":117,"health":65,"canFly":true,"newYear":false,"imageName":"firebird_","enTitle":"Firebirds"},{"name":"fire","title":"Огненные элементали","experience":60,"health":43,"canFly":false,"newYear":false,"enTitle":"Fire elementals"},{"name":"ogre","title":"Огры","experience":60,"health":50,"canFly":false,"newYear":false,"enTitle":"Ogres"},{"name":"ogrebrutal","title":"Огры-ветераны","experience":75,"health":70,"canFly":false,"newYear":false,"enTitle":"Ogre trophy-hunters"},{"name":"ogremagi","title":"Огры-маги","experience":74,"health":65,"canFly":false,"newYear":false,"enTitle":"Ogre magi"},{"name":"ogreshaman","title":"Огры-шаманы","experience":74,"health":55,"canFly":false,"newYear":false,"enTitle":"Ogre shamans"},{"name":"fatpirateup","title":"Одноглазые пираты","experience":190,"health":120,"canFly":false,"newYear":false,"enTitle":"One-eyed pirates"},{"name":"conscript","title":"Ополченцы","experience":7,"health":6,"canFly":false,"newYear":false,"enTitle":"Recruits"},{"name":"orc","title":"Орки","experience":29,"health":12,"canFly":false,"newYear":false,"enTitle":"Orcs"},{"name":"orcchief","title":"Орки-вожди","experience":38,"health":18,"canFly":false,"newYear":false,"enTitle":"Orc chiefs"},{"name":"orcrubak","title":"Орки-тираны","experience":38,"health":20,"canFly":false,"newYear":false,"enTitle":"Orc tyrants"},{"name":"orcshaman","title":"Орки-шаманы","experience":33,"health":13,"canFly":false,"newYear":false,"enTitle":"Orc shamans"},{"name":"paladin","title":"Паладины","experience":262,"health":100,"canFly":false,"newYear":false,"enTitle":"Paladins"},{"name":"executioner","title":"Палачи","experience":83,"health":40,"canFly":false,"newYear":false,"enTitle":"Warlords"},{"name":"spider","title":"Пауки","experience":15,"health":9,"canFly":false,"newYear":false,"enTitle":"Spiders"},{"name":"footman","title":"Пехотинцы","experience":17,"health":16,"canFly":false,"newYear":false,"enTitle":"Swordsmen"},{"name":"pitlord","title":"Пещерные владыки","experience":195,"health":120,"canFly":false,"newYear":false,"imageName":"pitlord_","enTitle":"Pit demons"},{"name":"deephydra","title":"Пещерные гидры","experience":115,"health":125,"canFly":false,"newYear":false,"enTitle":"Ladons"},{"name":"pitfiend","title":"Пещерные демоны","experience":157,"health":110,"canFly":false,"newYear":false,"imageName":"pitfiend_","enTitle":"Cave demons"},{"name":"pity","title":"Пещерные отродья","experience":165,"health":140,"canFly":false,"newYear":false,"imageName":"pitspawn","enTitle":"Abyss demons"},{"name":"piratka","title":"Пиратки","experience":20,"health":10,"canFly":false,"newYear":false,"enTitle":"Women pirates"},{"name":"zpirate","title":"Пираты зомби","experience":200,"health":150,"canFly":false,"newYear":false,"enTitle":"Zombie pirates"},{"name":"piratemonsterup","title":"Пираты Ктулху","experience":350,"health":200,"canFly":false,"newYear":false,"enTitle":"Pirates of Cthulhu"},{"name":"piroman","title":"Пироманьяки","experience":10,"health":20,"canFly":false,"newYear":false,"enTitle":"Pyromaniacs"},{"name":"hungerplant","title":"Пожиратели плоти","experience":130,"health":70,"canFly":false,"newYear":false,"enTitle":"Flesh-eating trees"},{"name":"ghost","title":"Привидения","experience":26,"health":8,"canFly":true,"newYear":false,"enTitle":"Ghosts"},{"name":"spearthrower","title":"Прибрежные налётчики","experience":10,"health":19,"canFly":false,"newYear":false,"enTitle":"Coastal raiders","imageName":"jpirate"},{"name":"spectre","title":"Призраки","experience":27,"health":19,"canFly":true,"newYear":false,"enTitle":"Apparitions"},{"name":"gpiratka","title":"Призраки пираток","experience":17,"health":8,"canFly":true,"newYear":false,"enTitle":"Ghosts of pirates"},{"name":"spectraldragon","title":"Призрачные драконы","experience":310,"health":160,"canFly":true,"newYear":false,"enTitle":"Shadow dragons"},{"name":"rakshasa_rani","title":"Принцессы ракшас","experience":155,"health":120,"canFly":false,"newYear":false,"imageName":"rakshas","enTitle":"Sphynx guardians"},{"name":"briskrider","title":"Проворные наездники","experience":94,"health":50,"canFly":false,"newYear":false,"enTitle":"Lizard chargers"},{"name":"cursedbehemoth","title":"Проклятые бегемоты","experience":400,"health":250,"canFly":false,"newYear":false,"imageName":"dbehemoth","enTitle":"Cursed behemoths"},{"name":"predator","title":"Проклятые горгульи","experience":25,"health":35,"canFly":true,"newYear":false,"imageName":"hgarg","enTitle":"Cursed Gargoyles"},{"name":"cursedent","title":"Проклятые энты","experience":250,"health":215,"canFly":false,"newYear":false,"enTitle":"Cursed treefolk"},{"name":"thunderbird","title":"Птицы грома","experience":115,"health":65,"canFly":true,"newYear":false,"enTitle":"Thunderbirds"},{"name":"darkbird","title":"Птицы тьмы","experience":120,"health":60,"canFly":true,"newYear":false,"enTitle":"Dark rocs"},{"name":"vulture","title":"Пустынные налетчики","experience":50,"health":40,"canFly":true,"newYear":false,"enTitle":"Desert Raiders"},{"name":"duneraider","title":"Пустынные рейдеры","experience":22,"health":12,"canFly":false,"newYear":false,"enTitle":"Dune raiders"},{"name":"duneraiderup","title":"Пустынные убийцы","experience":24,"health":12,"canFly":false,"newYear":false,"enTitle":"Dune assassins"},{"name":"rakshasa_raja","title":"Раджи ракшас","experience":160,"health":140,"canFly":false,"newYear":false,"enTitle":"Sphynx warriors"},{"name":"tombraider","title":"Расхитители могил","experience":14,"health":10,"canFly":false,"newYear":false,"enTitle":"Grave raiders"},{"name":"gladiator","title":"Ретиарии","experience":12,"health":25,"canFly":false,"newYear":false,"enTitle":"Retiarius"},{"name":"horneddemon","title":"Рогатые демоны","experience":14,"health":13,"canFly":false,"newYear":false,"imageName":"hdemon","enTitle":"Demons"},{"name":"rapukk","title":"Рогатые жнецы","experience":200,"health":99,"canFly":false,"newYear":false,"enTitle":"Horned reapers"},{"name":"rocbird","title":"Роки","experience":104,"health":55,"canFly":true,"newYear":false,"imageName":"roc","enTitle":"Rocs"},{"name":"brigand","title":"Рубаки","experience":6,"health":5,"canFly":false,"newYear":false,"enTitle":"Vagabonds"},{"name":"cavalier","title":"Рыцари","experience":232,"health":90,"canFly":false,"newYear":false,"imageName":"knight","enTitle":"Cavalry"},{"name":"deadknight","title":"Рыцари смерти","experience":190,"health":100,"canFly":false,"newYear":false,"enTitle":"Unholy knights"},{"name":"blackknight","title":"Рыцари тьмы","experience":160,"health":90,"canFly":false,"newYear":false,"enTitle":"Black knights"},{"name":"pristineunicorn","title":"Светлые единороги","experience":135,"health":80,"canFly":false,"newYear":false,"enTitle":"Pristine Unicorns"},{"name":"dbehemoth","title":"Свирепые бегемоты","experience":410,"health":280,"canFly":false,"newYear":false,"enTitle":"Infuriated behemoths"},{"name":"untamedcyc","title":"Свободные циклопы","experience":700,"health":225,"canFly":false,"newYear":false,"enTitle":"Unfettered cyclops"},{"name":"scarabup","title":"Священные скарабеи","experience":11,"health":6,"canFly":true,"newYear":false,"enTitle":"Sacred scarabs"},{"name":"whitebearrider","title":"Северные наездники","experience":36,"health":30,"canFly":false,"newYear":false,"enTitle":"Rearguard ursary"},{"name":"spegasus","title":"Серебряные пегасы","experience":50,"health":30,"canFly":true,"newYear":false,"enTitle":"Silver pegasus"},{"name":"kachok","title":"Силачи","enTitle":"Strongmen","experience":20,"health":50,"canFly":false,"newYear":false},{"name":"siren","title":"Сирены","experience":60,"health":20,"canFly":false,"newYear":false,"enTitle":"Sirens"},{"name":"upsiren","title":"Сирены-искусительницы","experience":70,"health":24,"canFly":false,"newYear":false,"enTitle":"Seducing sirens"},{"name":"scarab","title":"Скарабеи","experience":10,"health":6,"canFly":true,"newYear":false,"enTitle":"Scarabs"},{"name":"skeleton","title":"Скелеты","experience":6,"health":4,"canFly":false,"newYear":false,"imageName":"sceleton","enTitle":"Skeletons"},{"name":"skmarksman","title":"Скелеты-арбалетчики","experience":12,"health":6,"canFly":false,"newYear":false,"enTitle":"Skeletal crossbowmen"},{"name":"sceletonwar","title":"Скелеты-воины","experience":10,"health":5,"canFly":false,"newYear":false,"enTitle":"Skeletal legionnaires"},{"name":"skeletonpirateup","title":"Скелеты-корсары","experience":10,"health":4,"canFly":false,"newYear":false,"enTitle":"Skeletal corsairs","imageName":"dpirateup"},{"name":"cpirate","title":"Скелеты-моряки","experience":6,"health":4,"canFly":false,"newYear":false,"enTitle":"Skeleton sailor"},{"name":"skeletonarcher","title":"Скелеты-лучники","experience":10,"health":4,"canFly":false,"newYear":false,"imageName":"sceletonarcher","enTitle":"Skeletal bowmen"},{"name":"skeletonpirate","title":"Скелеты-пираты","experience":7,"health":4,"canFly":false,"newYear":false,"enTitle":"Skeletal pirates","imageName":"dpirate"},{"name":"manticoreup","title":"Скорпикоры","experience":140,"health":80,"canFly":true,"newYear":false,"enTitle":"Scorpicores"},{"name":"scorp","title":"Скорпионы","experience":6,"health":4,"canFly":false,"newYear":false,"enTitle":"Scorpions"},{"name":"anubis","title":"Слуги Анубиса","experience":350,"health":160,"canFly":false,"newYear":false,"enTitle":"Anubis avatars"},{"name":"krokodil","title":"Служители оазисов","experience":110,"health":70,"canFly":false,"newYear":false,"enTitle":"Oasis acolytes"},{"name":"chuvak","title":"Снежные воины","experience":35,"health":27,"canFly":false,"newYear":false,"enTitle":"Snow warriors"},{"name":"snowwolf","title":"Снежные волки","experience":70,"health":50,"canFly":false,"newYear":false,"enTitle":"Snow wolves"},{"name":"steelgolem","title":"Стальные големы","experience":54,"health":24,"canFly":false,"newYear":false,"enTitle":"Modern golems"},{"name":"runepatriarch","title":"Старейшины рун","experience":100,"health":70,"canFly":false,"newYear":false,"enTitle":"Patriarchs"},{"name":"mastergremlin","title":"Старшие гремлины","experience":9,"health":6,"canFly":false,"newYear":false,"enTitle":"Gremlin engineers"},{"name":"jdemon","title":"Старшие демоны","experience":20,"health":13,"canFly":false,"newYear":false,"enTitle":"Fiends"},{"name":"ddhigh","title":"Старшие друиды","experience":101,"health":34,"canFly":false,"newYear":false,"enTitle":"High Druids"},{"name":"mauler","title":"Степные бойцы","experience":23,"health":12,"canFly":false,"newYear":false,"enTitle":"Enforcers"},{"name":"warrior","title":"Степные воины","experience":21,"health":12,"canFly":false,"newYear":false,"enTitle":"Invaders"},{"name":"swolf","title":"Степные волки","experience":20,"health":25,"canFly":false,"newYear":false,"enTitle":"Plains wolves"},{"name":"goblinus","title":"Степные гоблины","experience":5,"health":3,"canFly":false,"newYear":false,"enTitle":"Tribal goblins"},{"name":"cyclopus","title":"Степные циклопы","experience":390,"health":220,"canFly":false,"newYear":false,"enTitle":"Tribal cyclops"},{"name":"elgargoly","title":"Стихийные горгульи","experience":25,"health":16,"canFly":true,"newYear":false,"enTitle":"Grotesques"},{"name":"crossman","title":"Стрелки","experience":16,"health":8,"canFly":false,"newYear":false,"imageName":"crossbowman","enTitle":"Wardens"},{"name":"mercarcher","title":"Стрелки-наёмники","experience":15,"health":8,"canFly":false,"newYear":false,"enTitle":"Mercenary archers"},{"name":"succubus","title":"Суккубы","experience":61,"health":20,"canFly":false,"newYear":false,"imageName":"succub","enTitle":"Succubi"},{"name":"shadow_witch","title":"Сумеречные ведьмы","experience":157,"health":80,"canFly":false,"newYear":false,"imageName":"witch","enTitle":"Dark witches"},{"name":"shadowdragon","title":"Сумеречные драконы","experience":350,"health":200,"canFly":true,"newYear":false,"enTitle":"Twilight dragons"},{"name":"wdancer","title":"Танцующие с ветром","experience":33,"health":14,"canFly":false,"newYear":false,"imageName":"winddancer","enTitle":"Forest brethren"},{"name":"dancer","title":"Танцующие с клинками","experience":20,"health":12,"canFly":false,"newYear":false,"enTitle":"Forest keepers"},{"name":"wardancer","title":"Танцующие со смертью","experience":33,"health":12,"canFly":false,"newYear":false,"imageName":"bladedancer","enTitle":"Elite forest keepers"},{"name":"thane","title":"Таны","experience":131,"health":100,"canFly":false,"newYear":false,"enTitle":"Dreadbanes"},{"name":"foulwyvern","title":"Тёмные виверны","experience":195,"health":105,"canFly":true,"newYear":false,"enTitle":"Venomous wyverns"},{"name":"grimrider","title":"Тёмные всадники","experience":94,"health":50,"canFly":false,"newYear":false,"enTitle":"Lizard assailants"},{"name":"foulhydra","title":"Тёмные гидры","experience":115,"health":125,"canFly":false,"newYear":false,"enTitle":"Foul hydras"},{"name":"burbuly","title":"Тёмные горгульи","experience":21,"health":30,"canFly":true,"newYear":false,"enTitle":"Dark Gargoyles"},{"name":"titan","title":"Титаны","experience":400,"health":190,"canFly":false,"newYear":false,"enTitle":"Titans"},{"name":"stormtitan","title":"Титаны шторма","experience":400,"health":190,"canFly":false,"newYear":false,"enTitle":"Stormcallers"},{"name":"fatpirate","title":"Толстяки","experience":180,"health":100,"canFly":false,"newYear":false,"enTitle":"Fatso"},{"name":"troglodyte","title":"Троглодиты","experience":5,"health":5,"canFly":false,"newYear":false,"enTitle":"Troglodytes"},{"name":"troll","title":"Тролли","experience":150,"health":150,"canFly":false,"newYear":false,"enTitle":"Trolls"},{"name":"tengu","title":"Тэнгу","experience":100,"health":45,"canFly":true,"newYear":false,"enTitle":"Tengu"},{"name":"slayer","title":"Убийцы","experience":70,"health":34,"canFly":false,"newYear":false,"enTitle":"Commanders"},{"name":"verblud","title":"Угонщики верблюдов","experience":55,"health":35,"canFly":false,"newYear":false,"enTitle":"Camel thieves"},{"name":"wight","title":"Умертвия","experience":165,"health":95,"canFly":false,"newYear":false,"enTitle":"Death envoys"},{"name":"pixel","title":"Феи","experience":12,"health":5,"canFly":true,"newYear":false,"imageName":"pp","enTitle":"Faeries"},{"name":"phoenix","title":"Фениксы","experience":600,"health":777,"canFly":true,"newYear":false,"enTitle":"Phoenixes"},{"name":"shootpirateup","title":"Флибустьеры","experience":75,"health":18,"canFly":false,"newYear":false,"enTitle":"Flibustiers"},{"name":"fury","title":"Фурии","experience":49,"health":16,"canFly":false,"newYear":false,"enTitle":"Shrews"},{"name":"plant","title":"Хищные растения","experience":92,"health":60,"canFly":false,"newYear":false,"enTitle":"Waspworts"},{"name":"hobbit","title":"Хоббиты","experience":8,"health":4,"canFly":false,"newYear":false,"enTitle":"Hobbits"},{"name":"hobgoblin","title":"Хобгоблины","experience":9,"health":4,"canFly":false,"newYear":false,"enTitle":"Hobgoblins"},{"name":"blackbearrider","title":"Хозяева медведей","experience":36,"health":30,"canFly":false,"newYear":false,"enTitle":"Frontier ursary"},{"name":"mistress","title":"Хозяйки ночи","experience":185,"health":100,"canFly":false,"newYear":false,"enTitle":"Shadow mistresses"},{"name":"cerberus","title":"Церберы","experience":41,"health":15,"canFly":false,"newYear":false,"enTitle":"Cerberi"},{"name":"cyclop","title":"Циклопы","experience":172,"health":85,"canFly":false,"newYear":false,"enTitle":"Cyclops"},{"name":"cyclopod","title":"Циклопы-генералы","experience":187,"health":100,"canFly":false,"newYear":false,"imageName":"cyclopod_","enTitle":"Cyclop generals"},{"name":"cyclopking","title":"Циклопы-короли","experience":182,"health":95,"canFly":false,"newYear":false,"enTitle":"Cyclop kings"},{"name":"shamancyclop","title":"Циклопы-шаманы","experience":190,"health":105,"canFly":false,"newYear":false,"imageName":"cyclopshaman","enTitle":"Cyclops shamans"},{"name":"mercwizard","title":"Чародеи-наёмники","experience":35,"health":36,"canFly":false,"newYear":false,"enTitle":"Mercenary sorcerers"},{"name":"champion","title":"Чемпионы","experience":252,"health":100,"canFly":false,"newYear":false,"enTitle":"Chargers"},{"name":"blackwidow","title":"Черные вдовы","experience":40,"health":14,"canFly":false,"newYear":false,"enTitle":"Black widows"},{"name":"scorpup","title":"Черные скорпионы","experience":9,"health":5,"canFly":false,"newYear":false,"enTitle":"Black scorpions"},{"name":"blacktroll","title":"Черные тролли","experience":180,"health":180,"canFly":false,"newYear":false,"enTitle":"Crazed trolls"},{"name":"familiar","title":"Черти","experience":10,"health":6,"canFly":false,"newYear":false,"enTitle":"Spawns"},{"name":"blackdragon","title":"Чёрные драконы","experience":400,"health":240,"canFly":true,"newYear":false,"enTitle":"Black dragons"},{"name":"plaguezombie","title":"Чумные зомби","experience":15,"health":17,"canFly":false,"newYear":false,"enTitle":"Infected zombies"},{"name":"shakal","title":"Шакалы","experience":30,"health":24,"canFly":false,"newYear":false,"enTitle":"Jackals"},{"name":"shakalup","title":"Шакалы-воины","experience":45,"health":30,"canFly":false,"newYear":false,"enTitle":"Jackals-warriors"},{"name":"shamaness","title":"Шаманки","experience":66,"health":30,"canFly":false,"newYear":false,"enTitle":"Shamans"},{"name":"banditkaup","title":"Шпионки","experience":14,"health":9,"canFly":false,"newYear":false,"enTitle":"Spies"},{"name":"battlegriffon","title":"Штурмовые грифоны","experience":62,"health":52,"canFly":true,"newYear":false,"enTitle":"Wild griffins"},{"name":"slonup","title":"Штурмовые слоны","experience":150,"health":110,"canFly":false,"newYear":false,"enTitle":"Assault elephants"},{"name":"elf","title":"Эльфийские лучники","experience":38,"health":10,"canFly":false,"newYear":false,"enTitle":"Elven bowmen"},{"name":"treant","title":"Энты","experience":187,"health":175,"canFly":false,"newYear":false,"enTitle":"Treefolk","imageName":"ent"},{"name":"spiderpois","title":"Ядовитые пауки","experience":30,"health":14,"canFly":false,"newYear":false,"enTitle":"Venomous spiders"},{"name":"tenguup","title":"Ямабуси Тэнгу","experience":100,"health":60,"canFly":true,"newYear":false,"enTitle":"Yamabushi Tengu"},{"name":"flamelord","title":"Ярлы","experience":162,"health":120,"canFly":false,"newYear":false,"enTitle":"Punishers"},{"name":"evilbunny2023","title":"Злой кроля 2023","experience":130,"health":123,"canFly":false,"newYear":true,"enTitle":"Evil rabbit 2023"},{"name":"evilcat2023","title":"Злой котик 2023","experience":45,"health":23,"canFly":false,"newYear":true,"enTitle":"Evil cat 2023"},{"name":"eviltiger2022","title":"Злой тигр 2022","experience":100,"health":122,"canFly":false,"newYear":true,"enTitle":"Furious Tiger 2022"},{"name":"bull2021","title":"Злой бык 2021","experience":69,"health":71,"canFly":false,"newYear":true,"enTitle":"Ox 2021","imageName":"byk2"},{"name":"rat2020","title":"Злая крыса 2020","experience":20,"health":20,"canFly":false,"newYear":true,"enTitle":"Rat 2020"},{"name":"pig2019","title":"Свин 2019","experience":16,"health":19,"canFly":false,"newYear":true,"enTitle":"Pig 2019","imageName":"evilpig"},{"name":"evildog","title":"Злой пёс 2018","experience":100,"health":88,"canFly":false,"newYear":true,"enTitle":"Evil Dog 2018"},{"name":"rooster","title":"Злой Петушок 2017","experience":60,"health":77,"canFly":true,"newYear":true,"enTitle":"Evil Rooster 2017"},{"name":"gorilla","title":"Злая Обезьяна 2016","experience":40,"health":66,"canFly":false,"newYear":true,"enTitle":"Evil Monkey 2016"},{"name":"kozel","title":"Злой Козел 2015","experience":35,"health":55,"canFly":false,"newYear":true,"enTitle":"Evil Goat 2015"},{"name":"evilhorse","title":"Злая Лошадь 2014","experience":45,"health":84,"canFly":false,"newYear":true,"enTitle":"Mad horse 2014"},{"name":"evilsnake","title":"Злая Змея 2013","experience":45,"health":73,"canFly":false,"newYear":true,"enTitle":"Mad snake 2013"},{"name":"ppirateup","title":"Одноногие пираты","experience":55,"health":30,"canFly":false,"newYear":false,"enTitle":"One-legged pirates"}
    ,{"name":"pikeman","title":"Копейщики","experience":15,"health":15,"canFly":false,"newYear":false,"enTitle":"Pikemen"}
    ];
    // 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(", ")}]`);
    if(oldMonsters) {
        //console.log(oldMonsters)
        oldMonsters.forEach(x => { let found = monstersTemplate.find(y => y.name == x.name); if(found) { found.wanted = x.wanted ? true : false; } })
    }
    setValue("monsters", JSON.stringify(monstersTemplate));
    setValue("monstersVersion", GM_info.script.version);
}
const monsters = JSON.parse(getValue("monsters"));
monsters.sort(sortBy(isEn ? "enTitle" : "title"));

main();
function main() {
    createSettingsCaller();
    applyGreenPeace();
    if(!getPlayerBool("hideHunts")) {
        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.pathname == "/plstats_hunters.php") {
        // const monstersInfo = Array.from(document.querySelectorAll("a[href^='army_info.php?name=']")).map(x => ({ name: getUrlParamValue(x.href, "name"), title: x.innerText }));
        // console.log(monstersInfo.filter(x => !monsters.map(y => y.name).includes(x.name)));
        
        // monsters.forEach(x => {
            // const monsterInfo = monstersInfo.find(y => y.name == x.name);
            // if(isEn && monsterInfo) {
                // x.enTitle = monsterInfo.title;
            // }
        // })
        // monsters.forEach(x => {
            // const monsterInfo = monstersInfo.find(y => y.title == x.title);
            // if(x.name != monsterInfo.name) {
                // x.imageName = x.name;
                // x.name = monsterInfo.name;
            // }
        // })
        //console.log(JSON.stringify(monsters));
        //console.log(monstersInfo.filter(x => !monsters.map(y => y.title).includes(x.title)));
        add_archive();
    }
}
function showExperience() {
    if(location.pathname != '/map.php') {
        return;
    }
    const map_hunt_block_div = document.querySelector("div#map_hunt_block_div");
    if(map_hunt_block_div) {
        const lastChild = map_hunt_block_div.lastChild;
        if(lastChild.tagName?.toLowerCase() == "br") {
            lastChild.remove();
        }
    }
    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]");
        let diamonds = x.innerHTML.includes("diamonds.png") ? 0.1 : 0;
        const diamondsMatch = new RegExp(isEn ? "([\\d\\.]+) diamond" : "([\\d\\.]+) бриллиант").exec(x.innerHTML);
        if(diamondsMatch) {
            diamonds = parseFloat(diamondsMatch[1]);
        }
        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, diamonds: diamonds, guildPoints: guildPoints };
    });
    if(hunts.length == 0) {
        return;
    }
    console.log(hunts);
    document.title = isEn ? "Hunt found" : "Охота найдена";
    // Если находимся в режиме поиска, то пропускаем охоты, не отвечающие критериям поиска. В режиме поиска мы находимся, если включен хоть один критериев поиска.
    const isLookingFor = getPlayerBool("lookingForMarkedInList") && monsters.find(x => x.wanted) || Number(getPlayerValue("experienceLimit")) > 0 || getPlayerBool("lookingForHalfAmount") || getPlayerBool("lookingForDiamond") || getPlayerBool("lookingForFlying") || getPlayerBool("lookingForAdvancedGuildPoints");
    if(isLookingFor) {
        const found = hunts.find(isHuntMatch) ? true : false;
        if(!found) {
            const skipButton = document.querySelector(`div#map_hunt_block_div div[hint^='${isEn ? "Pass" : "Пройти"}']`);
            if(skipButton) {
                document.title = isEn ? "Hunt skipped" : "Охота пропущена";
                if(getPlayerBool("skipUnmatchedHunts")) {
                    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("isShortHuntDescription")) {
            hunt.huntDescriptionPanel.innerHTML = `<a href="army_info.php?name=${hunt.name}">${hunt.title}</a> (${hunt.amount}${hunt.isHalfAmount ? "[1/2]" : ""}) ${isEn ? "guard" : "стерегут"}${hunt.gold > 0 ? ` ${hunt.gold} ${isEn ? "g." : "з."}`: ""}${hunt.diamonds > 0 ? ` ${hunt.diamonds} <img style="width: 16px; height: 16px; border: 0; vertical-align: middle;" title="${isEn ? "Diamonds" : "Бриллианты"}" src="https://dcdn.heroeswm.ru/i/r/48/diamonds.png">`: ""}`;
            hunt.huntDescriptionPanel.style.fontSize = "11px";
            if(hunt.guildPoints > 1) {
                hunt.huntDescriptionPanel.insertAdjacentHTML("beforeend", `<b>(+${hunt.guildPoints})</b>`);
            }
        }
        const hp = getPlayerBool("showTotalMonstersHealth", true) ? ` <font style="font-size: 9px;color:#CD00CD">HP:<b>${hunt.monster.health * hunt.amount}</b></font>` : "";
        if(getPlayerBool("showTotalMonstersHealth", true)) {
            const amountEndIndex = hunt.huntDescriptionPanel.innerHTML.indexOf(")");
            hunt.huntDescriptionPanel.innerHTML = hunt.huntDescriptionPanel.innerHTML.substring(0, amountEndIndex) + hp + hunt.huntDescriptionPanel.innerHTML.substring(amountEndIndex);
        }
        const min_count = Math.round(hunt.amount / 5 - 0.5); //Для минимального 5% прироста, чтобы получить минимальную умелку 0.2 (20% от 1) убиваем 20% существ
        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 = Math.max(exp_with_helper, PlayerLevel * 35);
            exp_min_count = Math.max(exp_min_count, PlayerLevel * 14);
        }
        exp_with_helper = (exp_with_helper * koef).toFixed(0);
        exp_min_count = (exp_min_count * koef).toFixed(0);

        if(isLookingFor && isHuntMatch(hunt)) {
            hunt.huntDescriptionPanel.closest("div[id^=neut_show]").style.background = "#D1FFD1";
        }
        const fullExperienceText = hunt.experience != hunt.fullExperience ? ` (${isEn ? "from" : "из"} ${hunt.fullExperience})` : "";
        hunt.huntDescriptionPanel.insertAdjacentHTML("beforeend", `
<style>
.huntVariants {
    border-collapse: collapse;
}
.huntVariants td,
.huntVariants th {
    font-size: 7pt;
    border: 1px solid #b94a48 !important;
}
</style>
<table class="huntVariants">
    <tr><th>${isEn ? "Hunt" : "Варианты охоты"}</th><th>${isEn ? "Exp" : "Опыт"}</th><th>${isEn ? "Next amount" : "След. кол-во"}</th></tr>
    <tr><td>${isEn ? "by oneself" : "в одиночку"} 100%</td><td>${hunt.experience}${fullExperienceText}</td><td>${(hunt.amount * 1.3).toFixed(0)}</td></tr>
    <tr${getPlayerBool("enable_Exp_Half") ? "" : " style='display: none;'"}><td>${isEn ? "with a partner" : "с напарником"} 50%</td><td>${exp_with_helper}</td><td>${(hunt.amount * Math.pow(1.3, 0.5)).toFixed(0)}</td></tr>
    <tr${getPlayerBool("enable_5_procent") ? "" : " style='display: none;'"}><td title="${isEn ? "with a partner for min growth 5.6%" : "с напарником для минимального прироста в 5.6%"}">${isEn ? "with a partner" : "с напарником"} 20% (${min_count})</td><td>${exp_min_count}</td><td>${(hunt.amount * Math.pow(1.3, 0.2)).toFixed(0)}</td></tr>
</table>
`);
        if(hunt.experience < (PlayerLevel + 1) * 100 && PlayerLevel > 1) {
            hunt.huntDescriptionPanel.insertAdjacentHTML("beforeend", `<br><font style="color:#0000CD">${isEn ? "Kill it now! On level" : "Убей сейчас! На"} ${PlayerLevel + 1} ${isEn ? " you gain" : "уровне за них дадут"} <b>${(PlayerLevel + 1) * 100}</b> ${isEn ? "exp" : "опыта"}.</font>`);
        }
    }
}
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", showMonstersPanel);
}
function showMonstersPanel() {
    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}">
    <td style="text-align: center;"><img name=monsterPicture style="height: 25px; width: 30px; border: 0; display: ${getPlayerBool("viewMonsterPictures") ? "" : "none"};" src="https://dcdn.heroeswm.ru/i/portraits/${monster.imageName || monster.name}anip33.png"></td>
    <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>
    .grid {
        border-collapse: collapse;
    }
    .grid th, .grid td {
        border: 1px solid black;
    }
    .grid-header td {
        text-align: center;
        font-weight: bold;
    }
</style>
<div style="border: 1px solid #abc; padding: 5px; margin: 2px;">
    <div>
        <b>${isEn ? "Select creatures for hunt. Total" : "Выберите существ для охоты. Всего"} <font style="color: #FF0000;">${monsters.length}</font></b>
        <input type="button" id="lookForAllButton" value="${isEn ? "Look for all" : "Искать всех"}">
        <input type="button" id="dontLookForAnyoneButton" value="${isEn ? "Don't look for anyone" : "Не искать никого"}">
        <button id="closeMonstersListButton" type="button" style="float: right; cursor: pointer; font-size: 20px;" title="${isEn ? "Close" : "Закрыть"}">&times;</button>
        <hr/>
    </div>
    <table class=grid cellspacing="0">
        <tr class="grid-header">
            <td><input type=checkbox id=viewMonsterPicturesCheckbox title="${isEn ? "Show pictures" : "Показать картинки"}"></td>
            <td>${isEn ? "Title" : "Заголовок"}</td>
            <td>${isEn ? "Experience" : "Опыт"}</td>
            <td>${isEn ? "Health" : "Здоровье"}</td>
            <td>${isEn ? "Can fly" : "Летает"}</td>
            <td>${isEn ? "Wanted" : "Разыски<br>вается"}</td>
            <td>${isEn ? "New year" : "Ново<br>годний"}</td>
        </tr>
        ${monstersTableHtml}
    </table>
</div>`;
    document.getElementById("viewMonsterPicturesCheckbox").addEventListener("click", function() { setPlayerValue("viewMonsterPictures", this.checked); toggleMonsterPictures(); });
    document.getElementById("viewMonsterPicturesCheckbox").checked = getPlayerBool("viewMonsterPictures");

    document.getElementById('lookForAllButton').addEventListener("click", wantedAll);
    document.getElementById('dontLookForAnyoneButton').addEventListener("click", unwantAll);
    document.getElementById("closeMonstersListButton").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 toggleMonsterPictures() {
    Array.from(document.querySelectorAll("img[name=monsterPicture]")).forEach(x => x.style.display = getPlayerBool("viewMonsterPictures") ? "" : "none");
}
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" hint="${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", showSettingsPanel);
        if(typeof win.hwm_hints_init === 'function') win.hwm_hints_init();
    }
}
function showSettingsPanel() {
    const panelName = "Settings";
    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;">
    <b>${getScriptReferenceHtml()} ${getSendErrorMailReferenceHtml()} ${isEn ? "Creatures total" : "Всего существ"}: <font style="color:#FF0000;">${monsters.length}</font></b>
    <button id="closeSettingsButton" type="button" style="float: right; cursor: pointer; font-size: 20px;" title="${isEn ? "Close" : "Закрыть"}">&times;</button>

    <br>
    <label><input type=checkbox id=isShortHuntDescriptionCheckbox> ${isEn ? "Brief hunt description" : "Краткое сообщение об охоте"}</label>
    <br>
    <label><input type=checkbox id=showTotalMonstersHealthCheckBox> ${isEn ? "Show total monsters health" : "Показать суммарное здоровье монстров"}</label>
    <br>
    <label><input type=checkbox id=set_enable_Exp_Half> ${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> ${isEn ? "Display how many creatures to kill <b>for the minimum increase</b> of creatures" : "Отображать сколько убить существ <b>для минимального прироста</b> существ"}</label>
    <hr/>
    <label><input type=checkbox id=set_show_archive> ${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=hideHuntsCheckbox> ${isEn ? "Hide hunts" : "Скрыть охоты"} (<b><font color=green size=3>GreenPeace</font></b>)</label>
    <br>
    ${isEn ? "Overexp rate" : "Коэффициент перекача"} <input id="set_koef" value="${getPlayerValue("koef_dop_exp", 1)}" style="width: 100px;" maxlength="6" type="number">
    <hr/>
    <label><input type=checkbox id=skipUnmatchedHuntsCheckbox> ${isEn ? "Skip unmatched hunts" : "Пропускать неподходящие охоты"}</label>
    <br>
    <b>${isEn ? "Looking for" : "Искать"}</b>
    <br>
    <label>1) <input type=checkbox id=lookingForMarkedInListCheckbox> ${isEn ? "creatures marked in the list" : "существ отмеченных в списке"}</label><span id=monstersListContainer></span>
    <br>
    2) ${isEn ? "experience less then" : "опыт меньше, чем"}: <input id="experienceLimitInput" type="number" value="${getPlayerValue("experienceLimit", "0")}" style="width: 70px;">
    <br>
    <label>3) <input type=checkbox id=lookingForHalfAmountCheckbox> ${isEn ? "half amount ([1/2])" : "половинки ([1/2])"}</label>
    <br>
    <label>4) <input type=checkbox id=lookingForDiamondCheckbox> <img width="16" height="16" border="0" title="${isEn ? "Diamonds" : "Бриллианты"}" src="https://dcdn.heroeswm.ru/i/r/48/diamonds.png"></label>
    <br>
    <label>5) <input type=checkbox id=lookingForFlyingCheckbox> ${isEn ? "flying" : "летающих"}</label>
    <br>
    <span><label>6) <input type=checkbox id=lookingForAdvancedGuildPointsCheckbox> ${isEn ? "advanced guild points" : "увеличенные очки гильдии"}</label> <form style="display: inline-block;" oninput="minAdvancedPointsOutput.value = minAdvancedPointsInput.value"><input id=minAdvancedPointsInput type=range list=advancedGuildPointsDatalist min=2 max=5 style="width: 60px; vertical-align: middle;" onfocus="this.select();"/><output name=minAdvancedPointsOutput for="minAdvancedPointsInput"></output></form> ${isEn ? "and more" : "и более"}</span>
    <datalist id="advancedGuildPointsDatalist">
      <option value="2"></option>
      <option value="3"></option>
      <option value="5"></option>
    </datalist>
</div>`;
    document.getElementById("closeSettingsButton").addEventListener("click", function() { hidePanel(panelName); });
    document.getElementById("isShortHuntDescriptionCheckbox").addEventListener("click", function() { setPlayerValue("isShortHuntDescription", this.checked); });
    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("hideHuntsCheckbox").addEventListener("click", function() { setPlayerValue("hideHunts", this.checked); applyGreenPeace(); });
    document.getElementById("set_koef").addEventListener("change", function() { setPlayerValue("koef_dop_exp", Number(this.value)); });

    document.getElementById("skipUnmatchedHuntsCheckbox").addEventListener("click", function() { setPlayerValue("skipUnmatchedHunts", this.checked); });
    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("lookingForDiamondCheckbox").addEventListener("click", function() { setPlayerValue("lookingForDiamond", this.checked); });
    document.getElementById("lookingForFlyingCheckbox").addEventListener("click", function() { setPlayerValue("lookingForFlying", this.checked); });
    document.getElementById("lookingForAdvancedGuildPointsCheckbox").addEventListener("click", function() { setPlayerValue("lookingForAdvancedGuildPoints", this.checked); });
    document.getElementById("minAdvancedPointsInput").addEventListener("change", function() { setPlayerValue("minAdvancedPoints", this.value); });

    document.getElementById("showTotalMonstersHealthCheckBox").addEventListener("click", function() { setPlayerValue("showTotalMonstersHealth", this.checked); });
    bindSettings();

    createTraceMonstersPanelCaller(document.getElementById("monstersListContainer"));
}
function bindSettings() {
    document.getElementById("isShortHuntDescriptionCheckbox").checked = getPlayerBool("isShortHuntDescription");
    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("hideHuntsCheckbox").checked = getPlayerBool("hideHunts");

    document.getElementById("skipUnmatchedHuntsCheckbox").checked = getPlayerBool("skipUnmatchedHunts");
    document.getElementById("lookingForMarkedInListCheckbox").checked = getPlayerBool("lookingForMarkedInList");
    document.getElementById("experienceLimitInput").value = getPlayerValue("experienceLimit", "");
    document.getElementById("lookingForHalfAmountCheckbox").checked = getPlayerBool("lookingForHalfAmount");
    document.getElementById("lookingForDiamondCheckbox").checked = getPlayerBool("lookingForDiamond");
    document.getElementById("lookingForFlyingCheckbox").checked = getPlayerBool("lookingForFlying");
    document.getElementById("lookingForAdvancedGuildPointsCheckbox").checked = getPlayerBool("lookingForAdvancedGuildPoints");
    document.getElementById("minAdvancedPointsInput").value = getPlayerValue("minAdvancedPoints", "2");
    document.querySelector("output[name=minAdvancedPointsOutput]").value = getPlayerValue("minAdvancedPoints", "2");

    document.getElementById("showTotalMonstersHealthCheckBox").checked = getPlayerBool("showTotalMonstersHealth", true);
}
function hidePanel(panelName) {
    document.getElementById(`bg${panelName}Overlay`).style.display = "none";
    document.getElementById(`bg${panelName}Center`).style.display = "none";
}
function isHuntMatch(hunt) {
    if(getPlayerBool("lookingForMarkedInList") && hunt.monster.wanted) {
        return true;
    }
    if(hunt.experience <= Number(getPlayerValue("experienceLimit"))) {
        return true;
    }
    if(getPlayerBool("lookingForHalfAmount") && hunt.isHalfAmount) {
        return true;
    }
    if(getPlayerBool("lookingForDiamond") && hunt.diamonds > 0) {
        return true;
    }
    if(getPlayerBool("lookingForFlying") && hunt.monster.canFly) {
        return true;
    }
    if(getPlayerBool("lookingForAdvancedGuildPoints") && hunt.guildPoints >= parseInt(getPlayerValue("minAdvancedPoints", "2"))) {
        return true;
    }
    return false;
}
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=showTotalMonstersHealthCheckBox 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("showTotalMonstersHealthCheckBox").addEventListener("click", function() { setPlayerValue("showTotalMonstersHealth", 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("showTotalMonstersHealthCheckBox").checked = getPlayerBool("showTotalMonstersHealth", 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 ? "&nbspexp." : "&nbspопыта."}`);
        if(getPlayerBool("showTotalMonstersHealth", true)) {
            battleDescriptionCell.insertAdjacentHTML("beforeend", ` <font style="font-size: 7pt; color: #CD00CD">HP:&nbsp;<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 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" : "Текущие рекорды";
    }
    const ems = document.querySelectorAll("div > center > a[href*='plstats_hunters.php?level']");
    if(ems.length != 0) {
        ems[0].parentNode.insertAdjacentHTML("afterEnd", `<br><center><a href="${s_url}"><b><font color="blue">${s}</font></b></a></center>`);
    }
}
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("hideHunts") ? "none" : "block";
    }
}