HWM GO Helper

Помощник ГО (версия от 2021.11.18)

  1. // ==UserScript==
  2. // @name HWM GO Helper
  3. // @namespace https://greasyfork.org/ru/users/170936
  4. // @description Помощник ГО (версия от 2021.11.18)
  5. // @author ElMarado (Based on script Mantens) (Update by CheckT)
  6. // @version 6.31
  7. // @include https://www.heroeswm.ru/group_wars.php*
  8. // @include https://www.heroeswm.ru/plstats_hunters.php*
  9. // @include https://www.heroeswm.ru/home.php*
  10. // @include https://www.heroeswm.ru/map.php*
  11. // @include https://www.lordswm.com/group_wars.php*
  12. // @include https://www.lordswm.com/plstats_hunters.php*
  13. // @include https://www.lordswm.com/home.php*
  14. // @include https://www.lordswm.com/map.php*
  15. // @include http://178.248.235.15/group_wars.php*
  16. // @include http://178.248.235.15/plstats_hunters.php*
  17. // @include http://178.248.235.15/home.php*
  18. // @include http://178.248.235.15/map.php*
  19. // @grant GM_getValue
  20. // @grant GM_setValue
  21. // @icon https://app.box.com/representation/file_version_34029013909/image_2048/1.png?shared_name=hz97b2qwo2ycc5ospb7ccffn13w3ehc4
  22. // @license GPL-3.0+
  23. // ==/UserScript==
  24.  
  25. // Update by CheckT
  26. // небольшая доработка скрипта hwm_GO_exp от ElMarado (Based on script Mantens)
  27. // - хранение настроек независимо по игрокам
  28. // - кнопка "пометить всех птиц"
  29. // Оригинал https://greasyfork.org/ru/scripts/11692-hwm-go-exp
  30.  
  31. (function () {
  32. var gm_prefix = 'go_'+getPlayerId()+'_'; //префикс всех хранимых данных
  33.  
  34. var max_exp = 0;
  35. var version = "6.31 (2021.11.18)";
  36. var url_cur = location.href;
  37. var url_home = "home.php";
  38. var url_map = "map.php";
  39. var url_war = "group_wars.php";
  40. var str_url = "https://greasyfork.org/ru/scripts/398040";
  41. var all_tables = document.getElementsByTagName('div');
  42. var short_button = gm_get_bool("short_button");
  43. var enable_Exp_Half = gm_get_bool("enable_Exp_Half");
  44. var enable_5_procent = gm_get_bool("enable_5_procent");
  45. var only_Gud_ExpUm = gm_get_bool("only_Gud_ExpUm");
  46. var find_Hunt = gm_get_bool("find_Hunt");
  47. var beep_if_free = gm_get_bool("beep_if_free");
  48. var show_archive = gm_get_bool("show_archive");
  49. var grin_Pis = gm_get_bool("grin_Pis");
  50. var pic_enable = gm_get_bool("pic_enable");
  51. var show_HP = gm_get_bool("show_HP", true);
  52. var skip_no_half = gm_get_bool("skip_no_half");
  53. var pl_level = gm_get("hunt_exp_pl_level", "none"); //ур.героя
  54. var koef = gm_get("koef_dop_exp", 1.0); //коэф перекача
  55. var limit_exp = gm_get("limit_exp", 0); //С какого порога опыта пропускать охоты
  56. var skip_mode = gm_get_bool("skip_mode", true); //Пропускать по опыту или по списку: true - опыт, false - список
  57. var skip_base = gm_get("skip_base", ""); //h база пропусков на существ: 0 - пропускать, 1 - оставить
  58. //********************
  59. var str_pl_lvl = ustring("Боевой уровень: ");
  60. var str_kol = ustring('шт.');
  61. var str_sum_exp = ustring("За них дадут <b> STR1dopSTR </b> опыта. Потом их будет ~STR6 шт.");
  62. var str_kill_now = ustring("Убей сейчас! На STR9 уровне за них дадут <b> STR10 </b> опыта.");
  63. var str_hlp_exp = ustring("За убийство с помощником (50/50) Вам дадут <b> STR2 </b> опыта. В следующий раз предложат ~STR7 шт.");
  64. var str_min_kol = ustring("Для Min (~5%) прироста надо убить не более STR3 шт (STR4 опыта). В следующий раз предложат ~STR8 шт.");
  65. var str_exp_helper = ustring("Опыт помощника: [70..133]*Уровень*Набранная умка*[1.1-Зелье].");
  66. var str_exp = ustring("&nbspопыта.");
  67. var str_settings_1 = ustring("&nbsp&nbspНастройки ГО&nbsp&nbsp");
  68. var str_settings_2 = ustring("&nbsp&nbspГО&nbsp&nbsp");
  69. var str_start = ustring("Скрипт: Помощник ГО. Версия: ");
  70. var str_show_1 = ustring("Отображать <b>опыт с помощником</b>, если убьёте по 50%");
  71. var str_show_2 = ustring("Отображать сколько убить существ <b>для минимального прироста</b> существ");
  72. var str_show_3 = ustring("Отображать формулу опыта помощника (при выгодных охотах)");
  73. var str_hilight = ustring("Подсвечивать <b>охоты с выгодной экспоумкой</b> <font color=grey>(на странице групповых боёв)</font>");
  74. var str_find_hunt = ustring("<b>Поиск чужих охот</b> <font color=grey>(групповые бои)</font>. Обновление: <b>15с.</b> ");
  75. var str_beep_if_free = ustring("Если нашёл, <b>вывод звука</b>:");
  76. var str_show_archive = ustring("Отображать <b>ссылки на рекорды</b> из архива");
  77. var str_Grin_Pis = ustring("Включить режим<b><font color=green size=3>&nbspGreenPeace&nbsp</font></b>(скрывать предложения охот)");
  78. var str_show_HP = ustring("Отображать <b>суммарные HP существ</b>");
  79. var str_short_button = ustring("Сделать кнопку <b><font color=royalblue>&nbspНастройки ГО&nbsp</font></b> короткой (<b><font color=royalblue>&nbspГО&nbsp</font></b>)");
  80. var str_koef_0 = ustring("Текущий коэффициент перекача:&nbsp");
  81. var str_koef_1 = ustring("Введите новый коэффициент перекача от 1.0 до 9.9999: ");
  82. var str_skip_select_1 = ustring("Пропускать существ: ");
  83. var str_skip_select_2 = ustring("по опыту или ");
  84. var str_skip_select_3 = ustring("по списку ");
  85. var str_skip_hunt = ustring("Пропускать охоты с опытом больше чем:");
  86. var str_title_1 = ustring("Если значение 0, то опыт не учитывается");
  87. var str_pic_enable = ustring("Отображать картинки существ в списке")
  88. var str_no_skip = ustring("Вы уже в заявке!");
  89. var str_skip_enable = ustring("Пройти мимо");
  90. var str_arh_record = ustring("Рекорд из архива (до 01.03.2015)");
  91. var str_need_skip = ustring("ГO. Охоты можно пропустить.");
  92. var str_auto_skip = ustring("ГO. Охоту пропускаю.");
  93. var str_hunt_found = ustring("ГO. Охота найдена.");
  94. var str_show_archive_r = ustring("Архив рекордов до 01.03.2015");
  95. var str_hide_archive_r = ustring("Текущие рекорды");
  96. var str_update = ustring("Проверить обновление скрипта.");
  97. var str_autor = ustring("Сообщить о найденной ошибке.");
  98. var str_url_aut = ustring("/sms-create.php?mailto=&subject=Скрипт: Помощник ГО v. ")+version+ustring(". Найдена ошибка:");
  99. var str_zagl1_list = ustring("Выберите существ для охоты. Всего ");
  100. var str_zagl2_list = ustring(".");
  101. var str_all_mark = ustring("Пометить всех");
  102. var str_all_unmark = ustring("Снять у всех");
  103. var str_all_flying = ustring("Все летающие");
  104. var str_all_noflying = ustring("Кроме летающих");
  105. var str_skip_no_half = ustring(" и <b><font color=royalblue>(</font></b>оставлять [1/2] или ");
  106. var str_diamond_search = ustring(" бриллианта");
  107. //*************** Конвертация ********************************
  108. function hex_2_bin(hex) {
  109. var hex2bin = {
  110. 0: "0000", 1: "0001", 2: "0010", 3: "0011",
  111. 4: "0100", 5: "0101", 6: "0110", 7: "0111",
  112. 8: "1000", 9: "1001", A: "1010", B: "1011",
  113. C: "1100", D: "1101", E: "1110", F: "1111"
  114. };
  115. var str_bin = "";
  116. for (var i=0; i<hex.length;i++) str_bin +=hex2bin[hex[i]];
  117. return str_bin;
  118. }
  119. //*************** Конвертация ********************************
  120. function bin_2_hex(bin) {
  121. var bin2hex = {
  122. "0000": "0", "0001": "1", "0010": "2", "0011": "3",
  123. "0100": "4", "0101": "5", "0110": "6", "0111": "7",
  124. "1000": "8", "1001": "9", "1010": "A", "1011": "B",
  125. "1100": "C", "1101": "D", "1110": "E", "1111": "F"
  126. };
  127. var n_hex_sym = Math.ceil(bin.length/4);
  128. var str_hex = "";
  129. var sym4;
  130. for (var i=0; i< n_hex_sym; i++) {
  131. sym4 = bin.substr(i*4,4);
  132. str_hex += bin2hex[sym4];
  133. }
  134. return str_hex;
  135. }
  136. //***********************************************************
  137. function fill_hex_massive (n, s) {
  138. var arr = "";
  139. for (var i = 0; i < n; i++) arr += s;
  140. return arr;
  141. }
  142. //***********************************************************
  143. function show_List() {
  144. if (url_cur.indexOf('map.php') == -1) return;
  145. if (skip_mode) { //если пропуск по опыту, то кнопку вызова списка не отображать
  146. var elem = document.getElementById("get_list_go");
  147. if (elem != null) elem.parentNode.removeChild(elem); //если кнопка уже есть, то её убрать
  148. return;
  149. }
  150. // var x2= document.querySelector("div >a[href*='ecostat.php']");
  151. var x2= document.querySelector("div[class*='global_container_block_header']");
  152. if (x2 == null) return;
  153. x2 = x2.parentNode;
  154. var str_settings = "\u21B4";
  155. var d = document.createElement('div');
  156. d.id="get_list_go";
  157. d.setAttribute('style', 'position: absolute; margin: 0px 0px 0px 900px; text-align: center;'); //Положение кнопки, для вызова настроек
  158. d.innerHTML = '<style> .hwm_go * {font-size: 12px; color: #592C08;} .cell_go {white-space: nowrap; height: 20px; font-weight: bold; cursor: pointer; -webkit-filter: brightness(1.2); filter: brightness(120%); position: relative; display: inline-block; background: url(i/btns/job_fl_btn_bg.png) #d4b87e; background-size: 100% 100%; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; transition-duration: .1s; -webkit-transition-duration: .1s; -moz-transition-duration: .1s; -o-transition-duration: .1s; -ms-transition-duration: .1s; box-shadow: inset 0 0 0 1px #fce6b0, inset 0 0 0 2px #a78750, 0 0 0 1px rgba(0,0,0,.13);} </style>' +
  159. '<table class="list_go" width=20px> <tr height=20>' + // Размер кнопки и фон, для вызова настроек
  160. // '<td class="cell_list" style="cursor:pointer" id="set_list"><font style="font-size:20px;">'+str_settings+'</font></td>' +
  161. '<td class="cell_list" style="white-space: nowrap; height: 20px; font-weight: bold; cursor: pointer; position: relative; display: inline-block; background: url(i/btns/job_fl_btn_bg.png) #d4b87e; background-size: 100% 100%; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; transition-duration: .1s; -webkit-transition-duration: .1s; -moz-transition-duration: .1s; -o-transition-duration: .1s; -ms-transition-duration: .1s; box-shadow: inset 0 0 0 1px #fce6b0, inset 0 0 0 2px #a78750, 0 0 0 1px rgba(0,0,0,.13);" id="set_list">&nbsp<img width="18" src="//dcdn.heroeswm.ru/i/mobile_view/icons_add/pismo.png">&nbsp</td>' + '</tr> </table>';
  162. x2.insertBefore(d,x2.firstChild); //Вставка куска
  163. addEvent( $("set_list"), "click", settings_list ); //Привязка к куску на клик вызов функции
  164. //************
  165. function list_close()
  166. {
  167. var bg = $('bgOverlay');
  168. var bgc = $('bgCenter');
  169. bg.parentNode.removeChild(bg);
  170. bgc.parentNode.removeChild(bgc);
  171. }
  172. //************
  173. function settings_list()
  174. {
  175. var bg = $('bgOverlay');
  176. var bgc = $('bgCenter');
  177. var bg_height = ScrollHeight();
  178. if ( !bg )
  179. {
  180. bg = document.createElement('div');
  181. document.body.appendChild( bg );
  182. bgc = document.createElement('div');
  183. document.body.appendChild( bgc );
  184. }
  185. bg.id = 'bgOverlay';
  186. bg.style.position = 'absolute';
  187. bg.style.left = '0px';
  188. bg.style.width = '100%';
  189. bg.style.background = "#000000";
  190. bg.style.opacity = "0.5";
  191. bg.style.zIndex = "1100";
  192. bgc.id = 'bgCenter';
  193. bgc.style.position = 'absolute';
  194. bgc.style.left = ( ( ClientWidth() - 420 ) / 2 ) + 'px';
  195. bgc.style.width = '475px';
  196. bgc.style.height = '475px';
  197. bgc.style.overflow = 'auto'; //scrolling
  198. bgc.style.background = "#F6F3EA";
  199. bgc.style.zIndex = "1105";
  200. addEvent(bg, "click", list_close); //клик вне окна
  201. //форма и внешний вид окно настроек
  202. var s_style = "<style>.cre_mon_image2 {position:absolute;top:0;left:0;}.cre_creature {font-weight:400;font-family: 'Arial',sans-serif; width: 60px; position: relative; letter-spacing: normal;font-size: 16px; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; display:inline-block;}</style>";
  203. var s_innerHTML = s_style+'<div style="border:0px solid #abc;padding:5px;margin:2px;"><div style="float:right;border:1px solid #abc;width:15px;height:15px;text-align:center;cursor:pointer;" id="bt_close_tr2" title="Close">x</div>'+
  204. //заголовок окна настроек
  205. '<table cellspacing="0" ><tr><td colspan=2><b>'+str_zagl1_list+'<font style="color:#FF0000;"> '+n_monstrs+'</font> '+str_zagl2_list+'</b><hr/></td></tr>'+
  206. //пропуск охот по опыту
  207. '<tr><td colspan=2>'+
  208. '<input type="submit" id="set_all_mark_ok" value="'+str_all_mark +'">'+
  209. '<input type="submit" id="set_all_flying_ok" value="'+str_all_flying+'">'+
  210. '<input type="submit" id="set_all_noflying_ok" value="'+str_all_noflying+'">'+
  211. '<input type="submit" id="set_all_unmark_ok" value="'+str_all_unmark+'">'+
  212. '</td></tr>';
  213. var n_m = 0;
  214. var s_bgcolor;
  215. var s_pic_out="";
  216. for (var key in mob_rus_exp) { //перебор существ из базы и выводим чекбоксы с именем существа
  217. if (skip_bin_base[n_m]=="1") s_bgcolor="style=background-color:#B0FFB0;"; else s_bgcolor="";
  218. if (pic_enable) s_pic_out = '<tr><td><div class="cre_creature"><img width="60" height="50" border="0" src="http://hwm.cdnvideo.ru/i/portraits/'+mob_rus_exp[$ustring(key)][2]+'anip33.png"> <img class="cre_mon_image2" width="60" height="50" border="0" src="http://hwm.cdnvideo.ru/i/army_html/frame_lvl1_120x100_woa.png?v=1"></td>';//выводим картинку
  219. s_innerHTML += s_pic_out+
  220. '<td '+s_bgcolor+' id=cell_'+n_m+'><label><input type=checkbox '+(skip_bin_base[n_m]==1?"checked":"")+' id=set_monstr_'+n_m+'>'+ //выводим чекбокс
  221. '<font style="font-size:16px; vertical-align:center">'+ustring(key)+'</font></label></div></td></tr>'; //выводим имя существа
  222. n_m++;
  223. }
  224. s_innerHTML +='</table>'; //концовка
  225. bgc.innerHTML = s_innerHTML;
  226. n_m = 0;
  227. //********* назначение событий *******
  228. for (var key in mob_rus_exp) { appendEvent(n_m++); } //назначаем на события на каждый чек бокс
  229. document.getElementById('set_all_mark_ok').onclick = function(){all_mark_ok("F")}; //Пометить все
  230. document.getElementById('set_all_flying_ok').onclick = function(){all_flying_mark()}; //Пометить летающих
  231. document.getElementById('set_all_noflying_ok').onclick = function(){all_noflying_mark()}; //Кроме летающих
  232. document.getElementById('set_all_unmark_ok').onclick = function(){all_mark_ok("0")}; //Сбросить все
  233. addEvent($("bt_close_tr2"), "click", list_close); //крестик в углу
  234.  
  235. bg.style.top = '0px';
  236. bg.style.height = bg_height + 'px';
  237. bgc.style.top = ( window.pageYOffset + 155 ) + 'px';
  238. bg.style.display = '';
  239. bgc.style.display = '';
  240. }
  241. //********* обработчики полей ввода *******
  242. function appendEvent(n) { document.getElementById('set_monstr_'+n).onclick = function(){change_enable_mostr(n)};}
  243. function change_enable_mostr(n) { //Обработка чекбоксов с изменением массивов
  244. var s_bgcolor;
  245. skip_bin_base = skip_bin_base.substr(0,n)+ (1-skip_bin_base[n]) +skip_bin_base.substr(n+1);
  246. skip_base = bin_2_hex(skip_bin_base);
  247. if (skip_bin_base[n]=="1") s_bgcolor="#B0FFB0"; else s_bgcolor="";
  248. document.getElementById("cell_"+n).style.backgroundColor = s_bgcolor;
  249. gm_set("skip_base", skip_base);
  250. }
  251. function all_mark_ok(zn){ //заполняем массив значением zn
  252. skip_base = fill_hex_massive(skip_base.length, zn);
  253. skip_bin_base = hex_2_bin(skip_base);
  254. var n = 0;
  255. var s_bgcolor;
  256. var bool = true;
  257. if (zn == "0") bool = false;
  258. for (var key in mob_rus_exp) {
  259. if (skip_bin_base[n]=="1") s_bgcolor="#B0FFB0"; else s_bgcolor="";
  260. document.getElementById("cell_"+n).style.backgroundColor = s_bgcolor;
  261. document.getElementById('set_monstr_'+n++).checked = bool;
  262. }
  263. gm_set("skip_base", skip_base);
  264. }
  265.  
  266. function all_flying_mark(){ //заполняем летающих существ
  267. var n = 0;
  268. for (var key in mob_rus_exp) {
  269. if(mob_rus_exp[key][3] == 1){
  270. skip_bin_base = skip_bin_base.substr(0,n)+"1"+skip_bin_base.substr(n+1);
  271. document.getElementById("cell_"+n).style.backgroundColor = "#B0FFB0";
  272. document.getElementById('set_monstr_'+n).checked = true;
  273. }
  274. n++;
  275. }
  276. skip_base = bin_2_hex(skip_bin_base);
  277. gm_set("skip_base", skip_base);
  278. }
  279.  
  280. function all_noflying_mark(){ //заполняем всех кроме летающих существ
  281. var n = 0;
  282. for (var key in mob_rus_exp) {
  283. if(mob_rus_exp[key][3] == 0){
  284. skip_bin_base = skip_bin_base.substr(0,n)+"1"+skip_bin_base.substr(n+1);
  285. document.getElementById("cell_"+n).style.backgroundColor = "#B0FFB0";
  286. document.getElementById('set_monstr_'+n).checked = true;
  287. }
  288. n++;
  289. }
  290. skip_base = bin_2_hex(skip_bin_base);
  291. gm_set("skip_base", skip_base);
  292. }
  293.  
  294. //************
  295. function $(id) { return document.querySelector("#"+id); }
  296. function addEvent(elem, evType, fn) {
  297. if (elem.addEventListener) elem.addEventListener(evType, fn, false);
  298. else if (elem.attachEvent) elem.attachEvent("on" + evType, fn);
  299. else elem["on" + evType] = fn;
  300. }
  301. function ClientWidth() {return document.compatMode=='CSS1Compat' && document.documentElement?document.documentElement.clientWidth:document.body.clientWidth;}
  302. function ScrollHeight() {return Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);}
  303. }
  304. //************ Начало фрагментов кода от (C) Demin с моими вставками и комментариями **********************************
  305. function showSettings() {
  306. if (url_cur.indexOf('map.php') == -1) return;
  307. // var x1= document.querySelector("div >a[href*='ecostat.php']");
  308. var x1= document.querySelector("div[class*='global_container_block_header']");
  309. if (x1 == null) return;
  310. x1 = x1.parentNode;
  311. var str_settings, width_but, left_pos;
  312. if (short_button==0) { str_settings = str_settings_1; width_but = 80; left_pos = 493;}
  313. else { str_settings = str_settings_2; width_but = 20; left_pos = 468;}
  314. var d = document.createElement('div');
  315. d.setAttribute('style', 'position: absolute; margin: 0px 0px 0px 780px; text-align: center;'); //Положение кнопки, для вызова настроек
  316. d.innerHTML = '<style> .hwm_go * {font-size: 12px; color: #592C08;} .cell_go {white-space: nowrap; height: 20px; font-weight: bold; cursor: pointer; -webkit-filter: brightness(1.2); filter: brightness(120%); position: relative; display: inline-block; background: url(i/btns/job_fl_btn_bg.png) #d4b87e; background-size: 100% 100%; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; transition-duration: .1s; -webkit-transition-duration: .1s; -moz-transition-duration: .1s; -o-transition-duration: .1s; -ms-transition-duration: .1s; box-shadow: inset 0 0 0 1px #fce6b0, inset 0 0 0 2px #a78750, 0 0 0 1px rgba(0,0,0,.13);} </style>' +
  317. '<table class="hwm_go" width='+width_but+'px> <tr height=20>' + // Размер кнопки и фон, для вызова настроек
  318. '<td class="cell_go" style="cursor:pointer" id="set_go"><font style="font-size:12px;">'+str_settings+'</font></td>' +
  319. '</tr> </table>';
  320. x1.insertBefore(d,x1.firstChild); //Вставка куска
  321. addEvent( $("set_go"), "click", settings_go ); //Привязка к куску на клик вызов функции
  322. //************
  323. function settings_go_close()
  324. {
  325. var bg = $('bgOverlay');
  326. var bgc = $('bgCenter');
  327. bg.parentNode.removeChild(bg);
  328. bgc.parentNode.removeChild(bgc);
  329. }
  330. //************
  331. function settings_go()
  332. {
  333. var bg = $('bgOverlay');
  334. var bgc = $('bgCenter');
  335. var bg_height = ScrollHeight();
  336. if ( !bg )
  337. {
  338. bg = document.createElement('div');
  339. document.body.appendChild( bg );
  340. bgc = document.createElement('div');
  341. document.body.appendChild( bgc );
  342. }
  343. bg.id = 'bgOverlay';
  344. bg.style.position = 'absolute';
  345. bg.style.left = '0px';
  346. bg.style.width = '100%';
  347. bg.style.background = "#000000";
  348. bg.style.opacity = "0.5";
  349. bg.style.zIndex = "1100";
  350. bgc.id = 'bgCenter';
  351. bgc.style.position = 'absolute';
  352. bgc.style.left = ( ( ClientWidth() - 600 ) / 2 ) + 'px';
  353. bgc.style.width = '610px';
  354. bgc.style.background = "#F6F3EA";
  355. bgc.style.zIndex = "1105";
  356. addEvent(bg, "click", settings_go_close);
  357. //форма и внешний вид окно настроек
  358. //общая рамка
  359. bgc.innerHTML = '<div style="border:1px solid #abc;padding:5px;margin:2px;">'+
  360. //заголовок окна настроек / версия скрипта / количество существ
  361. '<table><tr><td colspan=3><b>'+str_start+'<font style="color:#0070FF;">'+version+'</font>. Всего существ: <font style="color:#FF0000;">'+n_monstrs+'</font>'+str_zagl2_list+'</b>'+
  362. //кнопка закрытия
  363. '<div style="float:right;border:1px solid #abc;width:15px;height:15px;text-align:center;cursor:pointer;" id="bt_close_tr" title="Close">x</div><hr/>'+
  364. //Суммарное HP.
  365. '<label><input type=checkbox '+html_if_checked(show_HP)+' id=set_show_HP title=""> '+str_show_HP+'</label><br>'+
  366. //Опыт с помощником 50/50
  367. '<label><input type=checkbox '+html_if_checked(enable_Exp_Half)+' id=set_enable_Exp_Half title=""> '+str_show_1+'</label><br>'+
  368. //кол-во для мин.прироста
  369. '<label><input type=checkbox '+html_if_checked(enable_5_procent)+' id=set_enable_5_procent title=""> '+str_show_2+'</label><hr/>'+
  370. //подсвечивать выгодные охоты
  371. '<label><input type=checkbox '+html_if_checked(only_Gud_ExpUm)+' id=set_only_Gud_ExpUm title=""> '+str_hilight+'</label><br>'+
  372. //Искать чужие охоты (в групповых боях). Обновление: 5с.
  373. '<label><input type=checkbox '+html_if_checked(find_Hunt)+' id=set_find_Hunt title=""> '+str_find_hunt+'</label>'+
  374. //Предупреждать, если есть незаполненная охота.
  375. '<label>'+str_beep_if_free+'<input type=checkbox '+html_if_checked(beep_if_free)+' id=set_beep_if_free title=""></label><hr/>'+
  376. //Рекорд из архива.
  377. '<label><input type=checkbox '+html_if_checked(show_archive)+' id=set_show_archive title=""> '+str_show_archive+'</label> <img src="https://dcdn.heroeswm.ru/i/icons/attr_knowledge.png" width="18"><br>'+
  378. //Грин Пис.
  379. '<label><input type=checkbox '+html_if_checked(grin_Pis)+' id=set_Grin_Pis title=""> '+str_Grin_Pis+'</label><hr/>'+
  380. '</td></tr>'+
  381. //коэфициент перекача
  382. '<tr><td colspan=3>'+
  383. str_koef_0+'<font style="color:#0070FF;"><b id=k_p>' +Number(koef).toFixed(4) +'</b></font><br>' +
  384. str_koef_1+' <input id="set_koef" value="' +Number(koef).toFixed(4) +'"size="4" maxlength="6"> <input type="submit" id="set_koef_ok" value="OK"><hr/>'+
  385. //Выбор пропусков str_skip_select_3
  386. str_skip_select_1+
  387. '<label><input type=checkbox '+(skip_mode==1?"checked":"")+' id=set_skip_mode1 title="">'+str_skip_select_2+'</label>'+
  388. '<label><input type=checkbox '+(skip_mode==0?"checked":"")+' id=set_skip_mode2 title="">'+str_skip_select_3+'</label>'+
  389. '<label>'+str_skip_no_half+'<img width="16" height="16" border="0" title="Бриллианты" src="http://hwm.cdnvideo.ru/i/diamond.gif">'+
  390. '<input type=checkbox '+(skip_no_half==1?"checked":"")+' id=set_skip_no_half title=""><b><font style="color:#4169E1;">)</font></b></label></td></tr>'+
  391. //пропуск охот по опыту
  392. '<tr><td width="52%">'+str_skip_hunt+'</td><td colspan=2 width="48%" align="left" title="'+str_title_1+'"> '+
  393. '<input id="set_limit_exp" value="'+limit_exp+'" size="5" maxlength="6"><input type="submit" id="set_limit_exp_ok" value="OK"></td></tr>'+
  394. '<tr><td colspan=3>'+
  395. //Выбор Отображать картинки в списке или нет
  396. '<label><input type=checkbox '+html_if_checked(pic_enable)+' id=set_pic_enable title=""> '+str_pic_enable+'</label><hr/>'+
  397. //Сделать кнопку настройки короткую/длинную
  398. '<label><input type=checkbox '+html_if_checked(short_button)+' id=set_short_button title=""> '+str_short_button+'</label><hr/></td></tr>'+
  399. //ссылка на сайт скрипта
  400. '<tr><td width="40%"><a href="'+str_url+'" target=_blanc>'+str_update+'</a></td><td colspan=2 width="60%" align="right"><a href="'+str_url_aut+'" target=_blanc>'+str_autor+'</a></td></tr></table>'; //концовка
  401. //назначение вызова функция при событиях кнопок и чекбоксов
  402. addEvent($("bt_close_tr"), "click", settings_go_close); //крестик в углу
  403. addEvent($("set_enable_Exp_Half"), "click", change_enable_Exp_Half); //чек-бокс
  404. addEvent($("set_enable_5_procent"), "click", change_enable_5_procent); //чек-бокс
  405. addEvent($("set_only_Gud_ExpUm"), "click", change_only_Gud_ExpUm); //чек-бокс
  406. addEvent($("set_find_Hunt"), "click", change_find_Hunt); //чек-бокс
  407. addEvent($("set_beep_if_free"), "click", change_beep_if_free); //чек-бокс
  408. addEvent($("set_show_archive"), "click", change_show_archive); //чек-бокс
  409. addEvent($("set_show_HP"), "click", change_show_HP); //чек-бокс
  410. addEvent($("set_Grin_Pis"), "click", change_Grin_Pis); //чек-бокс
  411. addEvent($("set_short_button"), "click", change_short_button); //чек-бокс
  412. addEvent($("set_koef_ok"), "click", change_koef); //поле ввода
  413. addEvent($("set_limit_exp_ok"), "click", change_limit_exp); //поле ввода
  414. addEvent($("set_skip_mode1"), "click", change_skip_mode); //радио
  415. addEvent($("set_skip_mode2"), "click", change_skip_mode); //радио
  416. addEvent($("set_skip_no_half"), "click", change_skip_no_half); //радио
  417. addEvent($("set_pic_enable"), "click", change_pic_enable); //чек-бокс
  418. bg.style.top = '0px';
  419. bg.style.height = bg_height + 'px';
  420. bgc.style.top = ( window.pageYOffset + 155 ) + 'px';
  421. bg.style.display = '';
  422. bgc.style.display = '';
  423. }
  424. //********* обработчики полей ввода *******
  425. function change_skip_mode()
  426. {
  427. skip_mode = !skip_mode;
  428. document.getElementById('set_skip_mode1').checked = skip_mode;
  429. document.getElementById('set_skip_mode2').checked = !skip_mode;
  430. show_List();
  431. gm_set_bool("skip_mode", skip_mode);
  432. }
  433. function change_koef()
  434. {
  435. if ( Number( $("set_koef").value ) >= 1 ) koef = $("set_koef").value; else koef = Number(1.0);
  436. document.getElementById('k_p').innerHTML = Number(koef).toFixed(4);
  437. gm_set("koef_dop_exp", koef);
  438. }
  439. function change_limit_exp()
  440. {
  441. if ( Number( $("set_limit_exp").value ) >= 0 ) limit_exp = Number($("set_limit_exp").value).toFixed(0); else limit_exp = 0;
  442. gm_set("limit_exp", limit_exp);
  443. }
  444. //*********** обработчики чек-боксов *****
  445. function change_skip_no_half() {gm_set_bool("skip_no_half", skip_no_half = !skip_no_half);}
  446. function change_enable_Exp_Half() {gm_set_bool("enable_Exp_Half", enable_Exp_Half = !enable_Exp_Half);}
  447. function change_enable_5_procent() {gm_set_bool("enable_5_procent", enable_5_procent = !enable_5_procent);}
  448. function change_only_Gud_ExpUm() {gm_set_bool("only_Gud_ExpUm", only_Gud_ExpUm = !only_Gud_ExpUm);}
  449. function change_find_Hunt() {gm_set_bool("find_Hunt", find_Hunt = !find_Hunt);}
  450. function change_beep_if_free() {gm_set_bool("beep_if_free", beep_if_free = !beep_if_free);}
  451. function change_show_archive() {gm_set_bool("show_archive", show_archive = !show_archive);}
  452. function change_show_HP() {gm_set_bool("show_HP", show_HP = !show_HP);}
  453. function change_Grin_Pis() {gm_set_bool("grin_Pis", grin_Pis = !grin_Pis);}
  454. function change_pic_enable() {gm_set_bool("pic_enable",pic_enable = !pic_enable);}
  455. function change_short_button() {gm_set_bool("short_button",short_button = !short_button);
  456. if (short_button==0) { str_settings = str_settings_1; width_but = 80; left_pos = 493;}
  457. else { str_settings = str_settings_2; width_but = 20; left_pos = 468;}
  458. d.setAttribute('style', 'position: absolute; margin: 0px 0px 0px 780px; text-align: center;'); //Положение кнопки, для вызова настроек
  459. d.innerHTML = '<style> .hwm_go * {font-size: 12px; color: #592C08;} .cell_go {white-space: nowrap; height: 20px; font-weight: bold; cursor: pointer; -webkit-filter: brightness(1.2); filter: brightness(120%); position: relative; display: inline-block; background: url(i/btns/job_fl_btn_bg.png) #d4b87e; background-size: 100% 100%; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; transition-duration: .1s; -webkit-transition-duration: .1s; -moz-transition-duration: .1s; -o-transition-duration: .1s; -ms-transition-duration: .1s; box-shadow: inset 0 0 0 1px #fce6b0, inset 0 0 0 2px #a78750, 0 0 0 1px rgba(0,0,0,.13);} </style>' +
  460. '<table class="hwm_go" width='+width_but+'px> <tr height=20>' + // Размер кнопки и фон, для вызова настроек
  461. '<td class="cell_go" style="cursor:pointer" id="set_go"><font style="font-size:12px;">'+str_settings+'</font></td>' +
  462. '</tr> </table>';
  463. addEvent( $("set_go"), "click", settings_go ); //Привязка к куску на клик вызов функции
  464. }
  465. //********** непонятно что, взято 1:1 у Demin ******
  466. function $(id) { return document.querySelector("#"+id); }
  467. function addEvent(elem, evType, fn) {
  468. if (elem.addEventListener) elem.addEventListener(evType, fn, false);
  469. else if (elem.attachEvent) elem.attachEvent("on" + evType, fn);
  470. else elem["on" + evType] = fn;
  471. }
  472. function ClientWidth() {return document.compatMode=='CSS1Compat' && document.documentElement?document.documentElement.clientWidth:document.body.clientWidth;}
  473. function ScrollHeight() {return Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);}
  474. }
  475. //************ Конец фрагментов кода от (C) Demin **********************************
  476. var sectors = {
  477. "cx=50&cy=50":1, //Empire Capital
  478. "cx=51&cy=50":2, //East River
  479. "cx=50&cy=49":3, //Tiger Lake
  480. "cx=51&cy=49":4, //Rogues' Wood
  481. "cx=50&cy=51":5, //Wolf Dale
  482. "cx=50&cy=48":6, //Peaceful Camp
  483. "cx=49&cy=51":7, //Lizard Lowland
  484. "cx=49&cy=50":8, //Green Wood
  485. "cx=49&cy=48":9, //Eagle Nest
  486. "cx=50&cy=52":10, //Portal Ruins
  487. "cx=51&cy=51":11, //Dragon Caves
  488. "cx=49&cy=49":12, //Shining Spring
  489. "cx=48&cy=49":13, //Sunny Sity
  490. "cx=52&cy=50":14, //Magma Mines
  491. "cx=52&cy=49":15, //Bear Mountain
  492. "cx=52&cy=48":16, //Fairy Trees
  493. "cx=53&cy=50":17, //Harbour City (Port City)
  494. "cx=53&cy=49":18, //Mithril Coast
  495. "cx=51&cy=52":19, //GreatWall
  496. "cx=51&cy=53":20, //Titans' Valley
  497. "cx=52&cy=53":21, //Fishing Village
  498. "cx=52&cy=54":22, //Kingdom Capital
  499. "cx=48&cy=48":23, //Ungovernable Steppe
  500. "cx=51&cy=48":24, //Crystal Garden
  501. "cx=53&cy=52":25, //East Island
  502. "cx=49&cy=52":26, //The Wilderness
  503. "cx=48&cy=50":27 //Sublime Arbor
  504. }
  505. //****************************************************
  506. var mob_rus_exp = { //Cтруктура: [опыт,HP,код,птица]
  507. "Абордажники":[30,16,"bpirate",0],
  508. "Адепты":[121,80,"zealot",0],
  509. "Адские жеребцы":[136,50,"nightmare",0],
  510. "Адские жнецы":[250,99,"zhryak",0],
  511. "Адские псы":[33,15,"demondog",0],
  512. "Айсберговые элементали":[50,90,"iceelb",1],
  513. "Алмазные големы":[110,60,"diamondgolem",0],
  514. "Ангелы":[330,180,"angel",1],
  515. "Арбалетчики":[19,10,"marksman",0],
  516. "Архангелы":[390,220,"archangel",1],
  517. "Архидемоны":[312,211,"archdemon",0],
  518. "Архидьяволы":[311,199,"archdevil",0],
  519. "Архиличи":[110,55,"archlich",0],
  520. "Архимаги":[70,30,"archmage",0],
  521. "Ассасины":[33,14,"assasin",0],
  522. "Ассиды":[53,30,"assida",1],
  523. "Астральные драконы":[310,150,"ghostdragon",1],
  524. "Баньши":[205,110,"banshee",0],
  525. "Бегемоты":[350,210,"behemoth",0],
  526. "Берсерки":[42,25,"berserker",0],
  527. "Бестии":[30,16,"maiden",0],
  528. "Бесы":[6,4,"imp",0],
  529. "Бехолдеры":[33,22,"beholder",0],
  530. "Боевые грифоны":[45,35,"battlegriffin",1],
  531. "Боевые единороги":[135,77,"silverunicorn",0],
  532. "Боевые кентавры":[21,10,"mcentaur",0],
  533. "Боевые маги":[72,29,"battlemage",0],
  534. "Боевые слоны":[120,100,"slon",0],
  535. "Вампиры":[68,30,"vampire",0],
  536. "Вармонгеры":[36,20,"warmong",0],
  537. "Ведьмы-призраки":[30,20,"cursed_",1],
  538. "Ведьмы моря":[70,35,"priestessup",0],
  539. "Великаны":[160,100,"giant",0],
  540. "Великаны-лучники":[130,100,"giantarch",0],
  541. "Великие левиафаны":[300,250,"upleviathan",0],
  542. "Вендиго":[20,25,"wendigo",0],
  543. "Верховные друиды":[101,38,"ddeld",0],
  544. "Вестники смерти":[205,100,"wraith",0],
  545. "Виверны":[170,90,"wyvern",1],
  546. "Визири джиннов":[110,50,"djinn_vizier",1],
  547. "Владычицы тени":[185,90,"matriarch",0],
  548. "Водные элементали":[57,43,"water",0],
  549. "Вожаки":[100,48,"chieftain",0],
  550. "Воздушные элементали":[59,30,"air",1],
  551. "Воины Анубиса":[420,200,"anubisup",0],
  552. "Воины-наёмники":[25,24,"mercfootman",0],
  553. "Воители":[12,12,"shieldguard",0],
  554. "Волшебные драконы":[800,500,"faeriedragon",1],
  555. "Воры-колдуны":[35,30,"thiefmage",0],
  556. "Воры-разведчики":[35,45,"thiefwarrior",0],
  557. "Воры-убийцы":[35,40,"thiefarcher",0],
  558. "Высшие ангелы":[390,220,"seraph2",1],
  559. "Высшие вампиры":[70,35,"vampirelord",0],
  560. "Высшие личи":[100,55,"masterlich",0],
  561. "Гарпии":[29,15,"harpy",1],
  562. "Гарпии-ведьмы":[45,15,"harpyhag",1],
  563. "Гарпунеры":[18,10,"harpooner",0],
  564. "Гигантские ящеры":[25,25,"lizard_",0],
  565. "Гидры":[108,80,"hydra",0],
  566. "Глаза тьмы":[33,26,"darkeye",0],
  567. "Глубоководные черти":[140,105,"upseamonster",0],
  568. "Гниющие зомби":[17,23,"rotzombie",0],
  569. "Гоблины":[5,3,"goblin",0],
  570. "Гоблины-лучники":[9,3,"goblinarcher",0],
  571. "Гоблины-маги":[9,3,"goblinmag",0],
  572. "Гоблины-трапперы":[15,7,"trapper",0],
  573. "Гоги":[13,13,"gog",0],
  574. "Големы смерти":[329,350,"dgolem",0],
  575. "Головорезы":[6,8,"brute",0],
  576. "Горные стражи":[24,12,"mountaingr",0],
  577. "Гремлины":[5,5,"gremlin",0],
  578. "Гремлины-вредители":[9,6,"saboteurgremlin",0],
  579. "Грифоны":[59,30,"griffon",1],
  580. "Громовержцы":[162,120,"thunderlord",0],
  581. "Демонессы":[67,30,"succubusm",0],
  582. "Детёныши ящера":[13,13,"smalllizard_",0],
  583. "Джинны":[103,40,"djinn",1],
  584. "Джинны-султаны":[110,45,"djinn_sultan",1],
  585. "Дикие энты":[210,175,"savageent",0],
  586. "Дозорные":[7,5,"robber",0],
  587. "Дочери земли":[72,35,"eadaughter",0],
  588. "Дочери неба":[75,35,"sdaughter",0],
  589. "Древние бегемоты":[390,250,"abehemoth",0],
  590. "Древние мумии":[135,80,"amummy",0],
  591. "Древние энты":[210,181,"ancienent",0],
  592. "Дриады":[20,6,"sprite",1],
  593. "Друиды":[74,34,"dd_",0],
  594. "Духи":[27,20,"poltergeist",1],
  595. "Дьяволы":[245,166,"devil",0],
  596. "Дьяволята":[10,6,"vermin",0],
  597. "Единороги":[124,57,"unicorn",0],
  598. "Железные големы":[33,18,"golem",0],
  599. "Жрецы рун":[59,60,"runepriest",0],
  600. "Жрицы луны":[60,50,"priestmoon",0],
  601. "Жрицы солнца":[70,55,"priestsun",0],
  602. "Защитники веры":[20,23,"vindicator",0],
  603. "Защитники гор":[7,7,"defender",0],
  604. "Зелёные драконы":[350,200,"greendragon",1],
  605. "Земные элементали":[63,75,"earth",0],
  606. "Злобные глаза":[33,22,"evileye",0],
  607. "Зомби":[11,17,"zombie",0],
  608. "Изумрудные драконы":[400,200,"emeralddragon",1],
  609. "Имперские грифоны":[62,35,"impergriffin",1],
  610. "Инквизиторы":[121,80,"inquisitor",0],
  611. "Искусительницы":[65,26,"seducer",0],
  612. "Ифриты":[200,90,"efreeti",1],
  613. "Ифриты султаны":[250,100,"efreetisultan",1],
  614. "Йети":[400,280,"yeti",0],
  615. "Каменные горгульи":[16,15,"gargoly",1],
  616. "Каменные монстры":[20,28,"kammon",0],
  617. "Камнегрызы":[67,55,"kamnegryz",0],
  618. "Камнееды":[56,45,"kamneed",0],
  619. "Кентавры":[13,6,"fcentaur",0],
  620. "Князья вампиров":[70,40,"vampireprince",0],
  621. "Колдуны-ренегаты":[6,6,"outlaw",0],
  622. "Колоссы":[350,175,"colossus",0],
  623. "Кони преисподней":[138,66,"hellstallion",0],
  624. "Корсарки":[32,12,"piratkaup",0],
  625. "Корсары":[16,13,"apirate",0],
  626. "Костоломы":[27,20,"brawler",0],
  627. "Костяные драконы":[280,150,"bonedragon",1],
  628. "Кочевники":[50,30,"nomad",0],
  629. "Кочевые кентавры":[20,9,"ncentaur",0],
  630. "Кошмары":[140,66,"stallion",0],
  631. "Красные драконы":[400,235,"reddragon",1],
  632. "Крестьяне":[5,4,"paesant",0],
  633. "Крестоносцы":[27,30,"crusader",0],
  634. "Кристальные драконы":[400,200,"crystaldragon",1],
  635. "Кровавые ящеры":[30,35,"redlizard_",0],
  636. "Кровоглазые циклопы":[500,235,"bloodeyecyc",0],
  637. "Кшатрии ракшасы":[162,135,"rakshasa_kshatra",0],
  638. "Лавовые драконы":[329,275,"lavadragon",0],
  639. "Лазутчики":[20,10,"scout",0],
  640. "Латники":[21,26,"swordman",0],
  641. "Левиафаны":[250,200,"leviathan",0],
  642. "Ледяные элементали":[50,45,"iceel",1],
  643. "Лепреконы":[11,7,"lepr",0],
  644. "Лесные снайперы":[42,12,"arcaneelf",0],
  645. "Лесные хоббиты":[9,6,"bobbit",0],
  646. "Личи":[87,50,"lich",0],
  647. "Ловчие":[34,15,"stalker",0],
  648. "Лучники":[15,7,"archer",0],
  649. "Маги":[63,18,"mage",0],
  650. "Магические элементали":[200,80,"magicel",0],
  651. "Магма драконы":[329,280,"magmadragon",0],
  652. "Магнитные големы":[57,28,"magneticgolem",0],
  653. "Магоги":[16,13,"magog",0],
  654. "Мантикоры":[130,80,"manticore",1],
  655. "Мастера копья":[17,12,"skirmesher",0],
  656. "Мастера лука":[42,14,"hunterelf",0],
  657. "Мегеры":[49,24,"bloodsister",0],
  658. "Медведи":[22,22,"bear",0],
  659. "Медузы королевы":[55,30,"medusaup",0],
  660. "Метатели копья":[11,10,"spearwielder",0],
  661. "Минотавры":[39,31,"minotaur",0],
  662. "Минотавры-стражи":[56,35,"minotaurguard_",0],
  663. "Минотавры-надсмотрщики":[56,40,"taskmaster",0],
  664. "Могильные големы":[400,400,"dgolemup",0],
  665. "Молотобойцы":[12,9,"gnomon",0],
  666. "Монахи":[101,54,"priest",0],
  667. "Морские дьяволы":[300,190,"piratemonster",0],
  668. "Морские черти":[120,90,"seamonster",0],
  669. "Мумии":[115,50,"mummy",0],
  670. "Мумии фараонов":[135,70,"pharaoh",0],
  671. "Мятежники":[10,7,"enforcer",0],
  672. "Наги":[160,110,"naga",0],
  673. "Наездники на верблюдах":[60,40,"dromad",0],
  674. "Наездники на волках":[20,10,"wolfrider",0],
  675. "Наездники на гиенах":[31,13,"hyenarider",0],
  676. "Наездники на кабанах":[31,14,"boarrider",0],
  677. "Наездники на медведях":[24,25,"bearrider",0],
  678. "Наездники на ящерах":[65,40,"lizardrider",0],
  679. "Налетчики на верблюдах":[70,45,"dromadup",0],
  680. "Налётчики на волках":[31,12,"hobwolfrider",0],
  681. "Никсы-воины":[180,90,"reptiloidup",0],
  682. "Нимфы":[20,6,"dryad_",1],
  683. "Обсидиановые горгульи":[26,20,"obsgargoly",1],
  684. "Огненные гончие":[36,15,"firehound",0],
  685. "Огненные демоны":[23,13,"fdemon",0],
  686. "Огненные драконы":[255,230,"firedragon",0],
  687. "Огненные птицы":[117,65,"firebird_",1],
  688. "Огненные элементали":[60,43,"fire",0],
  689. "Огры":[60,50,"ogre",0],
  690. "Огры-ветераны":[75,70,"ogrebrutal",0],
  691. "Огры-маги":[74,65,"ogremagi",0],
  692. "Огры-шаманы":[74,55,"ogreshaman",0],
  693. "Одноглазые пираты":[190,120,"fatpirateup",0],
  694. "Ополченцы":[7,6,"conscript",0],
  695. "Орки":[29,12,"orc",0],
  696. "Орки-вожди":[38,18,"orcchief",0],
  697. "Орки-тираны":[38,20,"orcrubak",0],
  698. "Орки-шаманы":[33,13,"orcshaman",0],
  699. "Паладины":[262,100,"paladin",0],
  700. "Палачи":[83,40,"executioner",0],
  701. "Пауки":[15,9,"spider",0],
  702. "Пехотинцы":[17,16,"footman",0],
  703. "Пещерные владыки":[195,120,"pitlord_",0],
  704. "Пещерные гидры":[115,125,"deephydra",0],
  705. "Пещерные демоны":[157,110,"pitfiend_",0],
  706. "Пещерные отродья":[165,140,"pitspawn",0],
  707. "Пиратки":[20,10,"piratka",0],
  708. "Пираты зомби":[200,150,"zpirate",0],
  709. "Пираты Ктулху":[350,200,"piratemonsterup",0],
  710. "Пироманьяки":[10,20,"piroman",0],
  711. "Привидения":[26,8,"ghost",1],
  712. "Прибрежные налётчики":[10,19,"spearthrower",0],
  713. "Призраки":[27,19,"spectre",1],
  714. "Призраки пираток":[17,8,"gpiratka",1],
  715. "Призрачные драконы":[310,160,"spectraldragon",1],
  716. "Принцессы ракшас":[155,120,"rakshas",0],
  717. "Проворные наездники":[94,50,"briskrider",0],
  718. "Проклятые бегемоты":[400,250,"dbehemoth",0],
  719. "Проклятые горгульи":[25,35,"hgarg",1],
  720. "Проклятые энты":[250,215,"cursedent",0],
  721. "Птицы грома":[115,65,"thunderbird",1],
  722. "Птицы тьмы":[120,60,"darkbird",1],
  723. "Пустынные налетчики":[50,40,"vulture",1],
  724. "Пустынные рейдеры":[22,12,"duneraider",0],
  725. "Пустынные убийцы":[24,12,"duneraiderup",0],
  726. "Раджи ракшас":[160,140,"rakshasa_raja",0],
  727. "Ретиарии":[12,25,"gladiator",0],
  728. "Рогатые демоны":[14,13,"hdemon",0],
  729. "Рогатые жнецы":[200,99,"rapukk",0],
  730. "Роки": [104,55,"roc",1],
  731. "Рыцари":[232,90,"knight",0],
  732. "Рыцари смерти":[190,100,"deadknight",0],
  733. "Рыцари тьмы":[160,90,"blackknight",0],
  734. "Светлые единороги":[135,80,"pristineunicorn",0],
  735. "Свирепые бегемоты":[410,280,"dbehemoth",0],
  736. "Свободные циклопы":[700,225,"untamedcyc",0],
  737. "Северные наездники":[36,30,"whitebearrider",0],
  738. "Серебряные пегасы":[50,30,"spegasus",1],
  739. "Силачи":[20,50,"kachok",0],
  740. "Сирены":[60,20,"siren",0],
  741. "Сирены-искусительницы":[70,24,"upsiren",0],
  742. "Скелеты":[6,4,"sceleton",0],
  743. "Скелеты-арбалетчики":[12,6,"skmarksman",0],
  744. "Скелеты-воины":[10,5,"sceletonwar",0],
  745. "Скелеты-корсары":[10,4,"skeletonpirateup",0],
  746. "Скелеты-моряки":[6,4,"cpirate",0],
  747. "Скелеты-лучники":[10,4,"sceletonarcher",0],
  748. "Скелеты-пираты": [7,4, "skeletonpirate",0],
  749. "Скорпионы":[6,4,"scorp",0],
  750. "Слуги Анубиса": [350,160,"anubis",0],
  751. "Снежные воины":[35,27,"chuvak",0],
  752. "Стальные големы":[54,24,"steelgolem",0],
  753. "Старейшины рун":[100,70,"runepatriarch",0],
  754. "Старшие гремлины":[9,6,"mastergremlin",0],
  755. "Старшие демоны":[20,13,"jdemon",0],
  756. "Старшие друиды":[101,34,"ddhigh",0],
  757. "Степные бойцы":[23,12,"mauler",0],
  758. "Степные воины":[21,12,"warrior",0],
  759. "Степные волки":[20,25,"swolf",0],
  760. "Степные гоблины":[5,3,"goblinus",0],
  761. "Степные циклопы":[390,220,"cyclopus",0],
  762. "Стихийные горгульи":[25,16,"elgargoly",1],
  763. "Стрелки":[16,8,"crossbowman",0],
  764. "Стрелки-наёмники":[15,8,"mercarcher",0],
  765. "Суккубы":[61,20,"succub",0],
  766. "Сумеречные ведьмы":[157,80,"witch",0],
  767. "Сумеречные драконы":[350,200,"shadowdragon",1],
  768. "Танцующие с ветром":[33,14,"winddancer",0],
  769. "Танцующие с клинками":[20,12,"dancer",0],
  770. "Танцующие со смертью":[33,12,"bladedancer",0],
  771. "Таны":[131,100,"thane",0],
  772. "Тёмные виверны":[195,105,"foulwyvern",1],
  773. "Тёмные всадники":[94,50,"grimrider",0],
  774. "Тёмные гидры":[115,125,"foulhydra",0],
  775. "Тёмные горгульи":[21,30,"burbuly",1],
  776. "Титаны":[400,190,"titan",0],
  777. "Титаны шторма":[400,190,"stormtitan",0],
  778. "Троглодиты":[5,5,"troglodyte",0],
  779. "Тролли":[150,150,"troll",0],
  780. "Тэнгу":[100,45,"tengu",1],
  781. "Убийцы":[70,34,"slayer",0],
  782. "Умертвия":[165,95,"wight",0],
  783. "Феи":[12,5,"pp",1],
  784. "Фениксы":[600,777,"phoenix",1],
  785. "Флибустьеры":[75,18,"shootpirateup",0],
  786. "Фурии":[49,16,"fury",0],
  787. "Хищные растения":[92,60,"plant",0],
  788. "Хобгоблины":[9,4,"hobgoblin",0],
  789. "Хозяева медведей":[36,30,"blackbearrider",0],
  790. "Хозяйки ночи":[185,100,"mistress",0],
  791. "Церберы":[41,15,"cerberus",0],
  792. "Циклопы":[172,85,"cyclop",0],
  793. "Циклопы-генералы":[187,100,"cyclopod_",0],
  794. "Циклопы-короли":[182,95,"cyclopking",0],
  795. "Циклопы-шаманы":[190,105,"cyclopshaman",0],
  796. "Чародеи-наёмники":[35,36,"mercwizard",0],
  797. "Чемпионы":[252,100,"champion",0],
  798. "Черные скорпионы":[9,5,"scorpup",0],
  799. "Черные тролли":[180,180,"blacktroll",0],
  800. "Черти":[10,6,"familiar",0],
  801. "Чёрные драконы":[400,240,"blackdragon",1],
  802. "Чумные зомби":[15,17,"plaguezombie",0],
  803. "Шакалы":[30,24,"shakal",0],
  804. "Шакалы-воины":[45,30,"shakalup",0],
  805. "Шаманки":[66,30,"shamaness",0],
  806. "Шпионки":[14,9,"banditkaup",0],
  807. "Штурмовые грифоны":[62,52,"battlegriffon",1],
  808. "Штурмовые слоны":[150,110,"slonup",0],
  809. "Эльфийские лучники":[38,10,"elf",0],
  810. "Энты":[187,175,"ent",0],
  811. "Ядовитые пауки":[30,14,"spiderpois",0]
  812. // "Злой Петушок 2017":[60,77,"rooster",1],
  813. // "Злой пёс 2018":[100,88 ,"evildog",0],
  814. // "Свин 2019":[16,19,"pig2019",0],
  815. };
  816. var n_monstrs = 0;
  817. for (var key in mob_rus_exp) {n_monstrs++} //считаем кол-во существ в базе
  818. if (skip_base.length*4 < n_monstrs) { //если существ стало больше, чем в хранящемся массиве с пропусками,
  819. skip_base = fill_hex_massive(Math.ceil(n_monstrs/4), "0"); //то расширяем массив вверх до кол-ва кратного 4 и сбрасываем hex массив
  820. }
  821. var skip_bin_base = hex_2_bin(skip_base); //создаем bin массив
  822. //****************************************************
  823. /** Библиотека юникода
  824. *
  825. * Реализует функции работы с юникодом.
  826. * @file lib_unicode.js
  827. * @version 1.1.0
  828. * @author DrunkenStranger
  829. * @link http://userscripts.org/users/362572
  830. * @license GPL
  831. */
  832. function uchar(s) {
  833. switch (s[0]) {
  834. case "А": return "\u0410";
  835. case "Б": return "\u0411";
  836. case "В": return "\u0412";
  837. case "Г": return "\u0413";
  838. case "Д": return "\u0414";
  839. case "Е": return "\u0415";
  840. case "Ж": return "\u0416";
  841. case "З": return "\u0417";
  842. case "И": return "\u0418";
  843. case "Й": return "\u0419";
  844. case "К": return "\u041a";
  845. case "Л": return "\u041b";
  846. case "М": return "\u041c";
  847. case "Н": return "\u041d";
  848. case "О": return "\u041e";
  849. case "П": return "\u041f";
  850. case "Р": return "\u0420";
  851. case "С": return "\u0421";
  852. case "Т": return "\u0422";
  853. case "У": return "\u0423";
  854. case "Ф": return "\u0424";
  855. case "Х": return "\u0425";
  856. case "Ц": return "\u0426";
  857. case "Ч": return "\u0427";
  858. case "Ш": return "\u0428";
  859. case "Щ": return "\u0429";
  860. case "Ъ": return "\u042a";
  861. case "Ы": return "\u042b";
  862. case "Ь": return "\u042c";
  863. case "Э": return "\u042d";
  864. case "Ю": return "\u042e";
  865. case "Я": return "\u042f";
  866. case "а": return "\u0430";
  867. case "б": return "\u0431";
  868. case "в": return "\u0432";
  869. case "г": return "\u0433";
  870. case "д": return "\u0434";
  871. case "е": return "\u0435";
  872. case "ж": return "\u0436";
  873. case "з": return "\u0437";
  874. case "и": return "\u0438";
  875. case "й": return "\u0439";
  876. case "к": return "\u043a";
  877. case "л": return "\u043b";
  878. case "м": return "\u043c";
  879. case "н": return "\u043d";
  880. case "о": return "\u043e";
  881. case "п": return "\u043f";
  882. case "р": return "\u0440";
  883. case "с": return "\u0441";
  884. case "т": return "\u0442";
  885. case "у": return "\u0443";
  886. case "ф": return "\u0444";
  887. case "х": return "\u0445";
  888. case "ц": return "\u0446";
  889. case "ч": return "\u0447";
  890. case "ш": return "\u0448";
  891. case "щ": return "\u0449";
  892. case "ъ": return "\u044a";
  893. case "ы": return "\u044b";
  894. case "ь": return "\u044c";
  895. case "э": return "\u044d";
  896. case "ю": return "\u044e";
  897. case "я": return "\u044f";
  898. case "Ё": return "\u0401";
  899. case "ё": return "\u0451";
  900. default: return s[0];
  901. }
  902. }
  903.  
  904. function ustring(s) {
  905. s = String(s);
  906. var result = "";
  907. for (var i = 0; i < s.length; i++)
  908. result += uchar(s[i]);
  909. return result;
  910. }
  911. //****************************************************
  912. function $uchar(s) {
  913. switch (s[0]) {
  914. case "\u0410": return "А";
  915. case "\u0411": return "Б";
  916. case "\u0412": return "В";
  917. case "\u0413": return "Г";
  918. case "\u0414": return "Д";
  919. case "\u0415": return "Е";
  920. case "\u0416": return "Ж";
  921. case "\u0417": return "З";
  922. case "\u0418": return "И";
  923. case "\u0419": return "Й";
  924. case "\u041a": return "К";
  925. case "\u041b": return "Л";
  926. case "\u041c": return "М";
  927. case "\u041d": return "Н";
  928. case "\u041e": return "О";
  929. case "\u041f": return "П";
  930. case "\u0420": return "Р";
  931. case "\u0421": return "С";
  932. case "\u0422": return "Т";
  933. case "\u0423": return "У";
  934. case "\u0424": return "Ф";
  935. case "\u0425": return "Х";
  936. case "\u0426": return "Ц";
  937. case "\u0427": return "Ч";
  938. case "\u0428": return "Ш";
  939. case "\u0429": return "Щ";
  940. case "\u042a": return "Ъ";
  941. case "\u042b": return "Ы";
  942. case "\u042c": return "Ь";
  943. case "\u042d": return "Э";
  944. case "\u042e": return "Ю";
  945. case "\u042f": return "Я";
  946. case "\u0430": return "а";
  947. case "\u0431": return "б";
  948. case "\u0432": return "в";
  949. case "\u0433": return "г";
  950. case "\u0434": return "д";
  951. case "\u0435": return "е";
  952. case "\u0436": return "ж";
  953. case "\u0437": return "з";
  954. case "\u0438": return "и";
  955. case "\u0439": return "й";
  956. case "\u043a": return "к";
  957. case "\u043b": return "л";
  958. case "\u043c": return "м";
  959. case "\u043d": return "н";
  960. case "\u043e": return "о";
  961. case "\u043f": return "п";
  962. case "\u0440": return "р";
  963. case "\u0441": return "с";
  964. case "\u0442": return "т";
  965. case "\u0443": return "у";
  966. case "\u0444": return "ф";
  967. case "\u0445": return "х";
  968. case "\u0446": return "ц";
  969. case "\u0447": return "ч";
  970. case "\u0448": return "ш";
  971. case "\u0449": return "щ";
  972. case "\u044a": return "ъ";
  973. case "\u044b": return "ы";
  974. case "\u044c": return "ь";
  975. case "\u044d": return "э";
  976. case "\u044e": return "ю";
  977. case "\u044f": return "я";
  978. case "\u0401": return "Ё";
  979. case "\u0451": return "ё";
  980. default: return s[0];
  981. }
  982. }
  983. function $ustring(s) {
  984. s = String(s);
  985. var result = "";
  986. for (var i = 0; i < s.length; i++) result += $uchar(s[i]);
  987. return result;
  988. }
  989. // ********* считывание уровня героя **********
  990. function getLevel() {
  991. if(url_cur.indexOf(url_home) == -1){ return; }
  992.  
  993. for (var k = 0; k < all_tables.length; k++)
  994. {
  995. if (!all_tables[k]) continue;
  996. if (!all_tables[k].childNodes[0]) continue;
  997. if (!all_tables[k].childNodes[0].childNodes[0]) continue;
  998. if (!all_tables[k].childNodes[0].childNodes[0].childNodes[0]) continue;
  999. if (!all_tables[k].childNodes[0].childNodes[0].childNodes[0].innerHTML) continue;
  1000.  
  1001. var str_tbl_info = all_tables[k].childNodes[0].childNodes[0].childNodes[0].innerHTML;
  1002.  
  1003. if (str_tbl_info.indexOf(str_pl_lvl) > 0)
  1004. {
  1005. str_tbl_info = str_tbl_info.substring(str_tbl_info.indexOf(str_pl_lvl) + str_pl_lvl.length);
  1006. pl_level = str_tbl_info.substring(0, str_tbl_info.search(/\D/));
  1007. break;
  1008. }
  1009. }
  1010. gm_set("hunt_exp_pl_level", pl_level);
  1011. }
  1012. // ***************************************************
  1013. function needSkip(skip,mob,expirience,half) //нужно ли пропускать моба?
  1014. {
  1015. if ( (!skip_no_half) || (half) ) { //Если режим поиска половинок, а это не половинка, то пропускаем
  1016. if (skip_mode) {
  1017. if ((limit_exp == 0) || (expirience*1 <= limit_exp*1)) skip = false;
  1018. } else {
  1019. var n = 0;
  1020. for (var key in mob_rus_exp) {
  1021. if ((ustring(key) == mob) && (skip_bin_base[n] == "1")) { skip = false; return skip; }
  1022. n++;
  1023. }
  1024. }
  1025. }
  1026. return skip;
  1027. }
  1028. //****************************************************
  1029. function skip_hunt() { //пропустить охоту
  1030. var x= document.querySelector("div >a[href*='ecostat.php']");
  1031. if (x == null) return;
  1032. document.title = str_auto_skip;
  1033. setTimeout(function() { window.location.href = location.protocol+'//'+location.hostname+'/'+'map.php?action=skip'; }, 2000);
  1034. }
  1035. //****************************************************
  1036. function skip_en() { //добавить ссылку на пропуск охот, если стоишь в заявке на бой или карточную игру
  1037. var x = document.querySelectorAll("tr > td[colspan*='2']");
  1038. if (x.length == 0) return;
  1039. for (var k = 0; k < x.length; k++) {
  1040. if (x[k].innerHTML == str_no_skip) {
  1041. x[k].align = 'right';
  1042. x[k].innerHTML ='<a href="map.php?action=skip">'+str_skip_enable+'</a>';
  1043. }
  1044. }
  1045. }
  1046. //****************************************************
  1047. function link2arh_record() { //добавить ссылку на рекорд из архива
  1048. var link_record, s, el;
  1049. var x = document.querySelectorAll("div > a[href*='mid=']");
  1050. if (x.length == 0) return;
  1051. for (var k = 0; k < x.length; k++) {
  1052. link_record = x[k].href;
  1053. s = link_record.split('&mid');
  1054. link_record = s[0]+'&show_archive=1&mid'+s[1];
  1055. x[k].insertAdjacentHTML("afterEnd" ,'<br><a href="'+link_record+'" target=_blanc><img border="0" title="'+str_arh_record
  1056. +'" src="http://dcdn.heroeswm.ru/i/s_knowledge.gif"></a>');
  1057. }
  1058. }
  1059. // ***************************************************
  1060. function showExperience() {
  1061. skip_en();
  1062. if (show_archive) {link2arh_record();}
  1063. if(url_cur.indexOf(url_map) == -1){ return; }
  1064. var my_td_danger, total_exp, full_exp, next_count, exp_with_helper, next_half_count, min_count, exp_min_count, next_min_count, mob_HP;
  1065. var str_hunt, str_total_exp, next_level;//, min_kills, exp_min_kills;
  1066. var mob_name ="";
  1067. var str_dop ="";
  1068. var mob_exp = 0;
  1069. var temp = 0;
  1070. var hunt_available = false;
  1071. var half_hunt = false;
  1072. var diamand_hunt = false;
  1073. var half_diamond_hunt = false;
  1074. var skip_all_mob = true;
  1075. for (var k = 0; k < all_tables.length; k++)
  1076. {
  1077. // if (all_tables[k].className == "wbwhite ohota_block global_inside_shadow map_table_margin")
  1078. // if (all_tables[k].id == "neut_show")
  1079. if (all_tables[k].id.indexOf("neut_show") != -1)
  1080. {
  1081. // if (all_tables[k].childNodes[1].childNodes[0].childNodes[0].childNodes[0].tagName != "DIV") continue;
  1082. // if (all_tables[k].childNodes[1].childNodes[0].children.length < 2) {break;}
  1083. // my_td_danger = all_tables[k].childNodes[1];
  1084. //if (!my_td_danger){ return; } //no hunt...
  1085.  
  1086. str_hunt = all_tables[k].childNodes[1].childNodes[0].childNodes[0].innerHTML;
  1087. var mob_count_b = all_tables[k].childNodes[1].childNodes[0].childNodes[0].childNodes[3].innerHTML;
  1088. if (str_hunt.indexOf("[1/2]") !=-1) {half_hunt = true} else {half_hunt = false}; //это половинка?
  1089. if (str_hunt.indexOf(str_diamond_search) !=-1) {diamand_hunt = true} else {diamand_hunt = false}; //это brilliant?
  1090. half_diamond_hunt = diamand_hunt || half_hunt;
  1091.  
  1092. mob_count = mob_count_b.substring(0, mob_count_b.indexOf(str_kol)-1)
  1093. mob_name = str_hunt.substring(str_hunt.indexOf(">")+1, str_hunt.indexOf("</"));
  1094. var mob_data = mob_rus_exp[$ustring(mob_name)];
  1095. if(!mob_data){
  1096. //новый моб
  1097. mob_data = [0,0,"new mob",0];
  1098. }
  1099. if (show_HP){
  1100. mob_HP = mob_data[1] * mob_count;
  1101. str_hunt = str_hunt.replace(str_kol,str_kol+' <font style="font-size:10px;color:#CD00CD">HP:<B>'+mob_HP+'</B></font>');
  1102. all_tables[k].childNodes[1].childNodes[0].childNodes[0].innerHTML = str_hunt;
  1103. }
  1104. mob_exp = mob_data[0];
  1105. hunt_available = true;
  1106.  
  1107. total_exp = Math.round(mob_exp * mob_count / 5); //Полный опыт в одиночку
  1108. full_exp = total_exp;
  1109. next_count = (mob_count*1.3).toFixed(0); //Прирост при победе в одиночку
  1110.  
  1111. exp_with_helper = (total_exp / 2).toFixed(0); //Опыт с помощником (50/50)
  1112. next_half_count = (mob_count*Math.pow(1.3, 0.5)).toFixed(0); //Прирост при победе с помощником (50/50)
  1113.  
  1114. min_count = (mob_count / 5 - 0.5).toFixed(0); //Для минимального 5% прироста
  1115. exp_min_count = (Math.floor(mob_exp * min_count / 5)).toFixed(0); //Опыт при минимальном приросте
  1116. next_min_count = (mob_count*Math.pow(1.3, 0.2)).toFixed(0); //Прирост при убийстве <=20% будет ~5.4%
  1117. total_exp = total_exp > pl_level*500 ? pl_level*500 : total_exp; //Если опыт больше верхней отсечки по уровню
  1118. exp_with_helper = exp_with_helper > pl_level*500 ? pl_level*500 : exp_with_helper;
  1119. exp_min_count = exp_min_count > pl_level*500 ? pl_level*500 : exp_min_count;
  1120. if (pl_level > 2) { //Если опыт меньше нижней отсечки по уровню (3+ уровни)
  1121. total_exp = total_exp < pl_level*100 ? pl_level*100 : total_exp;
  1122. exp_with_helper = exp_with_helper < pl_level*35 ? pl_level*35 : exp_with_helper;
  1123. exp_min_count = exp_min_count < pl_level*14 ? pl_level*14 : exp_min_count;
  1124. }
  1125. total_exp = (total_exp * koef).toFixed(0);
  1126. exp_with_helper = (exp_with_helper * koef).toFixed(0);
  1127. exp_min_count = (exp_min_count * koef).toFixed(0);
  1128. //-------------- Вставим кусок кода ---------------
  1129. skip_all_mob = needSkip(skip_all_mob,mob_name,full_exp,half_diamond_hunt);
  1130. //alert(needSkip(true,mob_name,full_exp,half_hunt)+' skip_mode: '+skip_mode);
  1131. if ((!needSkip(true,mob_name,full_exp,half_diamond_hunt)) ){//&& (!skip_mode)) { //Если есть ли моб в нашем списке
  1132. all_tables[k].childNodes[1].style.background = "#D1FFD1";
  1133. }
  1134. //-------------------------------------------------
  1135. // total_exp - опыт с учетом коэф. перекача
  1136. str_total_exp = total_exp;
  1137. next_level = Number(pl_level)+1;
  1138. if (total_exp > max_exp && max_exp > 0) { all_tables[k].childNodes[0].style.background = '#FFA07A' ; }
  1139. if (total_exp != full_exp) str_dop = ustring(' (из ')+full_exp+ustring(')'); else str_dop ="";
  1140. str_total_exp ='<br> <font style="font-size:10px;color:#0000CD">'+str_sum_exp.replace('STR1', str_total_exp).replace('dopSTR', str_dop).replace('STR6', next_count)+'</font>';
  1141. if ((total_exp < next_level*100) && (pl_level > 1)) {str_total_exp +='<br> <font style="color:#0000CD">'+str_kill_now.replace('STR9', next_level).replace('STR10',next_level*100)+'</font>';}
  1142.  
  1143. if (enable_Exp_Half) {str_total_exp = str_total_exp + '<br> <font style="font-size:10px;color:#CD00CD">'+str_hlp_exp.replace('STR2', exp_with_helper).replace('STR7', next_half_count)+'</font>'};
  1144.  
  1145. if (enable_5_procent) {str_total_exp = str_total_exp + '<font style="font-size:11px;color:#007FFF"><i><center>'+str_min_kol.replace('STR3', min_count).replace('STR4', exp_min_count).replace('STR8', next_min_count)+'</center></i></font>'};
  1146.  
  1147. all_tables[k].childNodes[1].childNodes[0].childNodes[0].innerHTML = str_hunt + str_total_exp;
  1148. }
  1149. }
  1150. if (skip_all_mob && hunt_available) skip_hunt();
  1151. if (!skip_all_mob && hunt_available && ((limit_exp != 0) || (!skip_mode )) ) document.title = str_hunt_found;
  1152. }
  1153. //****************************************************
  1154. function helpers() { //анализ страницы групповых боев
  1155.  
  1156. if(url_cur.indexOf(url_war) == -1){ return; }
  1157. var ems, ems2, elem, elem2, str_hunt, mob_count, mob_name, total_exp, backgrn, sect, s_sect;
  1158. var dt = 9000;
  1159. ems = document.querySelectorAll("a[href*='bselect.php']");
  1160. if (ems.length == 0) return;
  1161. ems2=ems[1].parentNode.parentNode;
  1162. ems = ems2.querySelectorAll( "td > a[href*='map.php?cx']");
  1163.  
  1164. for (var i = 0; i < ems.length; i++) {
  1165. if (!ems[i].parentNode.parentNode.childNodes[6].childNodes[4]) {
  1166. elem = ems[i].parentNode.parentNode.childNodes[6].childNodes[3].childNodes[0]; //odin v drugom sektore ili inoi level
  1167. } else if (!ems[i].parentNode.parentNode.childNodes[6].childNodes[6]) {
  1168. elem = ems[i].parentNode.parentNode.childNodes[6].childNodes[5].childNodes[0]; //odin v moem sektore
  1169. elem2 = elem.parentNode.parentNode.childNodes[3].childNodes[0]; //
  1170. if ((beep_if_free) && (elem2.tagName == 'B')) {
  1171. new Audio("https://zvukogram.com/mp3/cats/1002/vyistrel-iz-vintovki-po-misheni.mp3").play();
  1172. dt = 15000;
  1173. }
  1174. } else {
  1175. elem = ems[i].parentNode.parentNode.childNodes[6].lastChild.childNodes[0]; //dvoe v moem ili drugom sektore
  1176. }
  1177. str_hunt = elem.innerHTML;
  1178. mob_count = str_hunt.substring(str_hunt.search(/\(/)+1, str_hunt.search(/\)/));
  1179. mob_name = str_hunt.substring(0, str_hunt.search(/\(/));
  1180. total_exp = Math.floor(mob_rus_exp[$ustring(mob_name)][0] * mob_count / 5);
  1181. backgrn = '';
  1182. if (elem.parentNode.parentNode.childElementCount != 5) {
  1183. s_sect = ems[i].href;
  1184. sect = s_sect.substring(s_sect.lastIndexOf("?")+1,s_sect.length);
  1185. s_sect =s_sect.replace("map.php?"+sect,"move_sector.php?id="+sectors[sect]);
  1186. ems[i].innerHTML += ustring('<br><font style="color:#FF3244;"><b>Перейти</b></font>');
  1187. ems[i].href = s_sect;
  1188. }
  1189. if (only_Gud_ExpUm && (total_exp< pl_level*133) ){ backgrn = ' background:#cfd';}
  1190. if (only_Gud_ExpUm && (total_exp< pl_level*100) ){ backgrn = ' background:#0f0';}
  1191. elem.innerHTML += ' <font style="font-size:12px; color:#013220;'+ backgrn+'"><b>'+''+total_exp+'</b></font>'+str_exp;
  1192. if (show_HP){
  1193. var mob_data = mob_rus_exp[$ustring(mob_name)];
  1194. mob_HP = mob_data[1] * mob_count;
  1195. elem.innerHTML +=' <font style="font-size:12px;color:#CD00CD">HP:&nbsp;<b>'+mob_HP+'</b></font>'
  1196. }
  1197. }
  1198. if (find_Hunt) setTimeout(function(){ window.location.href = location.protocol+'//'+location.hostname+'/'+'group_wars.php?filter=hunt'; }, dt);
  1199. }
  1200. //****************************************************
  1201. function hideHunt() { //режим гринпис - скрытие отображения охот
  1202. var tb;
  1203. if(url_cur.indexOf(url_map) == -1){ return; }
  1204. for (var k = 0; k < all_tables.length; k++)
  1205. {
  1206. if (all_tables[k].id.indexOf("neut_show") != -1)
  1207. {
  1208. tb = all_tables[k];
  1209. tb.parentNode.removeChild(tb.nextSibling);
  1210. tb.parentNode.removeChild(tb);
  1211. k--;
  1212. }
  1213. }
  1214. }
  1215. //****************************************************************************************
  1216. function add_archive() { //добавить ссылку на архив рекордов на странице рекордов
  1217. var ems, s_full, spl, s, s_url;
  1218. if (url_cur.indexOf('level') == -1) return;
  1219. if (url_cur.indexOf('show_archive=1') == -1)
  1220. {
  1221. if (url_cur.indexOf('mid') == -1)
  1222. {
  1223. s_url = url_cur+'&show_archive=1';
  1224. } else {
  1225. spl = url_cur.split('&mid');
  1226. s_url = spl[0]+'&show_archive=1&mid'+spl[1];
  1227. }
  1228. s = str_show_archive_r;
  1229. } else {
  1230. spl = url_cur.split('&show_archive=1');
  1231. s_url = spl[0]+spl[1];
  1232. s = str_hide_archive_r;
  1233. }
  1234. ems = document.querySelectorAll( "div > center > a[href*='plstats_hunters.php?level']");
  1235. if (ems.length != 0) {
  1236. s_full = '<br><center><a href="'+s_url+'"><b><font color="blue">'+s+'</font></b></a></center>';
  1237. ems[0].parentNode.insertAdjacentHTML("afterEnd" ,s_full);
  1238. }
  1239. }
  1240. //****************************************************
  1241. function hunt_hilight() { //заменяет ссылку в групповые бои на такую же с выделением свободных охот
  1242. var link_old = "group_wars.php";
  1243. var link_new = "group_wars.php?filter=hunt";
  1244. var nodeList = document.getElementsByTagName("a");
  1245. for (var i = 0; i < nodeList.length; i++)
  1246. {
  1247. if (nodeList[i].href.indexOf(link_old)!=-1)
  1248. {
  1249. nodeList[i].href = nodeList[i].href.replace(link_old,link_new);
  1250. return;
  1251. }
  1252. }
  1253. }
  1254. //****************************************************
  1255. getLevel();
  1256. showSettings();
  1257. show_List();
  1258. if (!grin_Pis) showExperience()
  1259. else hideHunt();
  1260. helpers();
  1261. hunt_hilight();
  1262. if (url_cur.indexOf('plstats_hunters') != -1) add_archive();
  1263.  
  1264. //------------------------------
  1265. function GM_get_once(key, def){
  1266. var val = GM_getValue(key, def);
  1267. GM_deleteValue(key);
  1268. return val;
  1269. }
  1270.  
  1271. function GM_load_num(key, def){
  1272. var val = Number(GM_getValue(key, def));
  1273. return isNaN(val) ? def : val;
  1274. }
  1275.  
  1276. // 1 -> true; otherwise false
  1277. function GM_load_bool_from_num(key, def){
  1278. var val = Number(GM_getValue(key, def));
  1279. return isNaN(val) ? false : val==1;
  1280. }
  1281.  
  1282. // true -> 1; otherwise 0
  1283. function GM_save_num_from_bool(key, val){
  1284. GM_setValue(key, val ? 1 : 0);
  1285. }
  1286.  
  1287. function gm_get(key, def){
  1288. return GM_getValue(gm_prefix+key, def);
  1289. }
  1290.  
  1291. function gm_set(key, val){
  1292. return GM_setValue(gm_prefix+key, val);
  1293. }
  1294.  
  1295. function gm_del(key, def){
  1296. var val = GM_getValue(gm_prefix+key);
  1297. GM_deleteValue(gm_prefix+key);
  1298. return val ? val : def;
  1299. }
  1300.  
  1301. function gm_get_num(key, val){
  1302. return GM_load_num(gm_prefix+key, val);
  1303. }
  1304.  
  1305. function gm_set_bool(key, val){
  1306. return GM_save_num_from_bool(gm_prefix+key, val);
  1307. }
  1308.  
  1309. function gm_get_bool(key, def){
  1310. return GM_load_bool_from_num(gm_prefix+key , def?1:0);
  1311. }
  1312. function getPlayerId(){
  1313. var hunter_ref = getI("//a[contains(@href, 'pl_hunter_stat')]");
  1314. //min 2 для home; min 1 для остальных - если включены выпадающие вкладки
  1315. //min 1 для home; min 0 для остальных - если отключены выпадающие вкладки
  1316. if ( !hunter_ref || hunter_ref.snapshotLength == 0 || (hunter_ref.snapshotLength == 1 && location.pathname == '/home.php') ) {
  1317. //отключены вкладки или разлогин
  1318. var ids=/pl_id=(\d+)/.exec(document.cookie);
  1319. return ids ? ids[1] : 'unknown';
  1320. } else {
  1321. return hunter_ref.snapshotItem(0).href.split('?id=')[1];
  1322. }
  1323. }
  1324. function getI(xpath,elem){return document.evaluate(xpath,(elem?elem:document),null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);}
  1325.  
  1326. function html_if_checked(val){
  1327. return val ? ' checked' : '';
  1328. }
  1329. })();