// ==UserScript==
// @name hwmHuntHelper
// @namespace Tamozhnya1
// @description Помощник ГО
// @author Mantens, ElMarado, CheckT, Pagan of Dark, Tamozhnya1
// @version 8.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*
// @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" : "Закрыть"}">×</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 windowObject.hwm_hints_init === 'function') windowObject.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" : "Закрыть"}">×</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 ? " exp." : " опыта."}`);
if(getPlayerBool("showTotalMonstersHealth", 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 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";
}
}