hwm_GO_exp

Helper to guild of Hunters (2015.06.22)

当前为 2015-08-14 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name hwm_GO_exp
  3. // @description Helper to guild of Hunters (2015.06.22)
  4. // @author ElMarado (Based on script Mantens)
  5. // @version 3.41
  6. // @include http://178.248.235.15/group_wars.php*
  7. // @include http://178.248.235.15/home.php*
  8. // @include http://178.248.235.15/map.php*
  9. // @include http://*.heroeswm.*/group_wars.php*
  10. // @include http://*.heroeswm.*/home.php*
  11. // @include http://*.heroeswm.*/map.php*
  12. // @grant GM_getValue
  13. // @grant GM_setValue
  14. // @icon https://app.box.com/representation/file_version_34029013909/image_2048/1.png
  15. // @namespace https://greasyfork.org/users/14188
  16. // ==/UserScript==
  17. (function () {
  18. var max_exp = 0;
  19. var version = "3.41";
  20. var url_cur = location.href;
  21. var url_home = "home.php";
  22. var url_map = "map.php";
  23. var url_war = "group_wars.php";
  24. var url_1 = "www.heroeswm.ru";
  25. var url_2 = "178.248.235.15";
  26. var url_3 = "qrator.heroeswm.ru";
  27. var url_1_home = "www.heroeswm.ru/home.php";
  28. var url_2_home = "178.248.235.15/home.php";
  29. var url_3_home = "qrator.heroeswm.ru/home.php";
  30. var str_url = "https://monkeyguts.com/code.php?id=658";
  31. var all_tables = document.getElementsByTagName('table');
  32. var short_button = GM_getValue("short_button" , false);
  33. var enable_Exp_Half = GM_getValue("enable_Exp_Half" , true);
  34. var enable_5_procent = GM_getValue("enable_5_procent" , false);
  35. var only_Gud_ExpUm = GM_getValue("only_Gud_ExpUm", true);
  36. var alarm_Green_Hunt = GM_getValue("alarm_Green_Hunt", false);
  37. var grin_Pis = GM_getValue("grin_Pis", false);
  38. if(url_cur.indexOf(url_1) != -1) {
  39. var pl_level = GM_getValue("hunt_exp_pl_1_level", "none"); //ур.героя
  40. var koef = GM_getValue("koef_dop_exp_1", 1.0); //коэф перекача www
  41. var limit_exp = GM_getValue("limit_exp_1", 0); //С какого порога опыта пропускать охоты
  42. var google_str = GM_getValue("google_str_1", ""); //строка фильтра
  43. var skip_mode = GM_getValue("skip_mode_1", true); //Пропускать по опыту или по имени
  44. }
  45. if(url_cur.indexOf(url_2) != -1) {
  46. var pl_level = GM_getValue("hunt_exp_pl_2_level", "none");
  47. var koef = GM_getValue("koef_dop_exp_2", 1.0);
  48. var limit_exp = GM_getValue("limit_exp_2", 0);
  49. var google_str = GM_getValue("google_str_2", "");
  50. var skip_mode = GM_getValue("skip_mode_2", true);
  51. }
  52. if(url_cur.indexOf(url_3) != -1) {
  53. var pl_level = GM_getValue("hunt_exp_pl_3_level", "none");
  54. var koef = GM_getValue("koef_dop_exp_3", 1.0);
  55. var limit_exp = GM_getValue("limit_exp_3", 0);
  56. var google_str = GM_getValue("google_str_3", "");
  57. var skip_mode = GM_getValue("skip_mode_3", true);
  58. }
  59. //********************
  60. var str_pl_lvl = 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_green_hunt = ustring("Выгодная охота");
  67. var str_exp = ustring("&nbspопыта.");
  68. var str_settings_1 = ustring("&nbspНастройки ГО&nbsp");
  69. var str_settings_2 = ustring("&nbspГО&nbsp");
  70. var str_start = ustring("Скрипт: Помощник ГО. Версия: ");
  71. var str_show_1 = ustring("Отображать опыт с помощником, если убьёте по 50%");
  72. var str_show_2 = ustring("Отображать сколько убить мобов для минимального прироста");
  73. var str_show_3 = ustring("Отображать формулу опыта помощника (при выгодных охотах)");
  74. var str_hilight = ustring("Подсвечивать охоты с выгодной экспоумкой (на странице групповых боёв)");
  75. var str_alarm_hunt = ustring("Предупреждать если есть незаполненная выгодная охота (в групповых боях)");
  76. var str_Grin_Pis = ustring("Включить Грин Пис (скрывать предложения охот)");
  77. var str_short_button = ustring("Сделать кнопку настроек короткую.");
  78. var str_koef_0 = ustring("Текущий коэффициент перекача:&nbsp");
  79. var str_koef_1 = ustring("Введите новый коэффициент перекача от 1.0 до 9.9999: ");
  80. var str_skip_select_1 = ustring("Пропускать мобов: ");
  81. var str_skip_select_2 = ustring("по опыту (1)");
  82. var str_skip_select_3 = ustring("по имени (2)");
  83. var str_skip_hunt = ustring("1. Пропускать охоты с опытом больше чем:");
  84. var str_title_1 = ustring("Если значение 0, то опыт не учитывается.");
  85. var str_skip_hunt_txt = ustring("2. Пропускать мобов не содержащих в имени сочетания символов:");
  86. var str_title_2 = ustring("Регист букв не имеет значения. Всё кроме русских букв, цифр и пробелов удаляется. Если пусто - никого не пропускает.");
  87. var str_need_skip = ustring("ГO. Охоты можно пропустить.");
  88. var str_skip = ustring("ГO. Охоту пропускаю.");
  89. var str_hunt_found = ustring("ГO. Охота найдена.");
  90. var str_no_found_in_base= ustring("Не найдено в базе существ. Возможно опечатались или стоит не тот язык.");
  91. var str_update = ustring("Проверить обновление скрипта.");
  92. var str_autor = ustring("Сообщить автору о найденной ошибке.");
  93. var str_url_aut = ustring("/sms-create.php?mailto=ElMarado&subject=Скрипт: Помощник ГО v")+version+ustring(". Найдена ошибка:");
  94. //************ Начало фрагментов кода от (C) Demin с моими вставками и комментариями **********************************
  95. function showSettings() {
  96. if (url_cur.indexOf('map.php') == -1) return;
  97. var x1= document.querySelector("td >a[href*='ecostat.php']");
  98. if (x1 == null) return;
  99. x1 = x1.parentNode;
  100. var str_settings, width_but, left_pos;
  101. if (short_button==0) { str_settings = str_settings_1; width_but = 80; left_pos = 393;}
  102. else { str_settings = str_settings_2; width_but = 20; left_pos = 468;}
  103. var d = document.createElement('div');
  104. d.setAttribute('style', 'position: absolute; margin: -5px 0px 0px '+left_pos+'px; text-align: center;');//Положение кнопки, для вызова настроек
  105. d.innerHTML = '<style> .hwm_go * {font-size: 12px; color: #FFFF00;} .cell_go {white-space: nowrap; height: 18px; background: #4190FF; font-weight: bold;} </style>' +
  106. '<table class="hwm_go" width='+width_but+'px> <tr height=20>' + // Размер кнопки и фон, для вызова настроек
  107. '<td class="cell_go" style="cursor:pointer" id="set_go"><font style="font-size:12px;">'+str_settings+'</font></td>' +
  108. '</tr> </table>';
  109. x1.insertBefore(d,x1.firstChild); //Вставка куска
  110. addEvent( $("set_go"), "click", settings_go ); //Привязка к куску на клик вызов функции
  111. //************
  112. function settings_go_close()
  113. {
  114. var bg = $('bgOverlay');
  115. var bgc = $('bgCenter');
  116. bg.parentNode.removeChild(bg);
  117. bgc.parentNode.removeChild(bgc);
  118. }
  119. function settings_go()
  120. {
  121. var bg = $('bgOverlay');
  122. var bgc = $('bgCenter');
  123. var bg_height = ScrollHeight();
  124. if ( !bg )
  125. {
  126. bg = document.createElement('div');
  127. document.body.appendChild( bg );
  128. bgc = document.createElement('div');
  129. document.body.appendChild( bgc );
  130. }
  131. bg.id = 'bgOverlay';
  132. bg.style.position = 'absolute';
  133. bg.style.left = '0px';
  134. bg.style.width = '100%';
  135. bg.style.background = "#000000";
  136. bg.style.opacity = "0.5";
  137. bg.style.zIndex = "1100";
  138. bgc.id = 'bgCenter';
  139. bgc.style.position = 'absolute';
  140. bgc.style.left = ( ( ClientWidth() - 580 ) / 2 ) + 'px';
  141. bgc.style.width = '600px';
  142. bgc.style.background = "#F6F3EA";
  143. bgc.style.zIndex = "1105";
  144. addEvent(bg, "click", settings_go_close);
  145. //форма и внешний вид окно настроек
  146. bgc.innerHTML = '<div style="border:1px 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_tr" title="Close">x</div><table>'+
  147. //заголовок окна настроек
  148. '<tr><td colspan=2><b>'+str_start+'<font style="color:#0070FF;">'+version+'</font></b><hr/></td></tr>' +
  149. //Опыт с помощником 50/50
  150. '<tr><td colspan=2><label><input type=checkbox '+(enable_Exp_Half=="1"?"checked":"")+' id=set_enable_Exp_Half title=""> '+str_show_1+'</label><br></td></tr>'+
  151. //кол-во для мин.прироста
  152. '<tr><td colspan=2><label><input type=checkbox '+(enable_5_procent=="1"?"checked":"")+' id=set_enable_5_procent title=""> '+str_show_2+'</label><br></td></tr>'+
  153. //подсвечивать выгодные охоты
  154. '<tr><td colspan=2><label><input type=checkbox '+(only_Gud_ExpUm=="1"?"checked":"")+' id=set_only_Gud_ExpUm title=""> '+str_hilight+'</label><br></td></tr>'+
  155. //Предупреждать если есть незапоненная выгодная охота.
  156. '<tr><td colspan=2><label><input type=checkbox '+(alarm_Green_Hunt=="1"?"checked":"")+' id=set_alarm_Green_Hunt title=""> '+str_alarm_hunt+'</label><br></td></tr>'+
  157. //Грин Пис.
  158. '<tr><td colspan=2><label><input type=checkbox '+(grin_Pis=="1"?"checked":"")+' id=set_Grin_Pis title=""> '+str_Grin_Pis+'</label><br><hr/></td></tr>'+
  159. //коэфициент перекача
  160. '<tr><td colspan=2>'+str_koef_0+'<font style="color:#0070FF;"><b id=k_p>'+Number(koef).toFixed(4) +'</b></font><br></td></tr>' +
  161. '<tr><td colspan=2>'+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"><br><hr/></td></tr>'+
  162. //Выбор пропусков str_skip_select_3
  163. '<tr><td colspan=2>'+str_skip_select_1+
  164. '<label><input type=checkbox '+(skip_mode=="1"?"checked":"")+' id=set_skip_mode1 title="">'+str_skip_select_2+'</label>'+
  165. '<label><input type=checkbox '+(skip_mode=="0"?"checked":"")+' id=set_skip_mode2 title="">'+str_skip_select_3+'</label></td></tr>'+
  166. //пропуск охот по опыту
  167. '<tr><td width="52%">'+str_skip_hunt+'</td><td width="48%" align="left" title="'+str_title_1+'"> '+
  168. '<input id="set_limit_exp" value="'+limit_exp+'" size="3" maxlength="5"><input type="submit" id="set_limit_exp_ok" value="OK"></td></tr>'+
  169. //пропуск охот по тексту
  170. '<tr><td colspan=2>'+str_skip_hunt_txt+'</td></tr>'+
  171. '<tr><td colspan=2" title="'+str_title_2+'">'+
  172. '<input id="set_google_str" value="'+google_str+'" size="80" maxlength="80"><input type="submit" id="set_google_str_ok" value="OK"></td></tr>'+
  173. '<tr><td colspan=2><hr/></td></tr>'+
  174. //Сделать кнопку настройки короткую/длинную
  175. '<tr><td colspan=2><label><input type=checkbox '+(short_button=="1"?"checked":"")+' id=set_short_button title=""> <font size="1" color="blue">'+str_short_button+'</font></label><br><hr/></td></tr>'+
  176. //ссылка на сайт скрипта
  177. '<tr><td><a href="'+str_url+'">'+str_update+'</a></td><td colspan=2 align="right"><a href="'+str_url_aut+'">'+str_autor+'</a></td></tr></table>'; //концовка
  178. //назначение вызова функция при событиях кнопок и чекбоксов
  179. addEvent($("bt_close_tr"), "click", settings_go_close); //крестик в углу
  180. addEvent($("set_enable_Exp_Half"), "click", change_enable_Exp_Half); //чек-бокс
  181. addEvent($("set_enable_5_procent"), "click", change_enable_5_procent); //чек-бокс
  182. addEvent($("set_only_Gud_ExpUm"), "click", change_only_Gud_ExpUm); //чек-бокс
  183. addEvent($("set_alarm_Green_Hunt"), "click", change_alarm_Green_Hunt); //чек-бокс
  184. addEvent($("set_Grin_Pis"), "click", change_Grin_Pis); //чек-бокс
  185. addEvent($("set_short_button"), "click", change_short_button); //чек-бокс
  186. addEvent($("set_koef_ok"), "click", change_koef); //поле ввода
  187. addEvent($("set_limit_exp_ok"), "click", change_limit_exp); //поле ввода
  188. addEvent($("set_google_str_ok"), "click", change_google_str); //строка ввода
  189. addEvent($("set_skip_mode1"), "click", change_skip_mode); //радио
  190. addEvent($("set_skip_mode2"), "click", change_skip_mode); //радио
  191. bg.style.top = '0px';
  192. bg.style.height = bg_height + 'px';
  193. bgc.style.top = ( window.pageYOffset + 155 ) + 'px';
  194. bg.style.display = '';
  195. bgc.style.display = '';
  196. }
  197. //********* обработчики полей ввода *******
  198. function change_skip_mode()
  199. {
  200. skip_mode = !skip_mode;
  201. document.getElementById('set_skip_mode1').checked = skip_mode;
  202. document.getElementById('set_skip_mode2').checked = !skip_mode;
  203. if ( url_cur.indexOf(url_1) != -1) GM_setValue("skip_mode_1", skip_mode);
  204. if ( url_cur.indexOf(url_2) != -1) GM_setValue("skip_mode_2", skip_mode);
  205. if ( url_cur.indexOf(url_3) != -1) GM_setValue("skip_mode_3", skip_mode);
  206. }
  207. function change_koef()
  208. {
  209. if ( Number( $("set_koef").value ) >= 1 ) koef = $("set_koef").value; else koef = Number(1.0);
  210. document.getElementById('k_p').innerHTML = Number(koef).toFixed(4);
  211. if ( url_cur.indexOf(url_1) != -1) GM_setValue("koef_dop_exp_1", koef);
  212. if ( url_cur.indexOf(url_2) != -1) GM_setValue("koef_dop_exp_2", koef);
  213. if ( url_cur.indexOf(url_3) != -1) GM_setValue("koef_dop_exp_3", koef);
  214. }
  215. function change_limit_exp()
  216. {
  217. if ( Number( $("set_limit_exp").value ) >= 0 ) limit_exp = Number($("set_limit_exp").value).toFixed(0); else limit_exp = 0;
  218. if ( url_cur.indexOf(url_1) != -1) GM_setValue("limit_exp_1", limit_exp);
  219. if ( url_cur.indexOf(url_2) != -1) GM_setValue("limit_exp_2", limit_exp);
  220. if ( url_cur.indexOf(url_3) != -1) GM_setValue("limit_exp_3", limit_exp);
  221. }
  222. function change_google_str()
  223. {
  224. var name_mob;
  225. google_str = ustring($ustring($("set_google_str").value).replace(/[^ 0-9А-Яа-яЁё)]/g, ""));//удаление лишних символов
  226. google_str = google_str.toLocaleLowerCase().trim();//конвертируем в маленькие символы и убираем пробелы в конце и начале.
  227. google_str = google_str.replace(/ {1,}/g," "); //удаление множественных пробелов
  228. document.getElementById('set_google_str').value = google_str;
  229. var google_array = google_str.split(" ");
  230. for (var i in google_array) { //перебор слов поиска
  231. for (var key in mob_rus_exp) { //перебор имен существ из базы
  232. name_mob = key.replace(/\s+/g, '');//удаляем все пробелы в имени
  233. if ((google_str.length == 0) || (ustring(name_mob).toLocaleLowerCase().indexOf(google_array[i]) != -1)) {
  234. //если пусто или слово подходит для поиска
  235. if ( url_cur.indexOf(url_1) != -1) GM_setValue("google_str_1", google_str);
  236. if ( url_cur.indexOf(url_2) != -1) GM_setValue("google_str_2", google_str);
  237. if ( url_cur.indexOf(url_3) != -1) GM_setValue("google_str_3", google_str);
  238. return;
  239. }
  240. }
  241. }
  242. alert(str_no_found_in_base);
  243. }
  244. //*********** обработчики чек-боксов *****
  245. function change_enable_Exp_Half() {GM_setValue("enable_Exp_Half", enable_Exp_Half = !enable_Exp_Half);}
  246. function change_enable_5_procent() {GM_setValue("enable_5_procent",enable_5_procent = !enable_5_procent);}
  247. function change_only_Gud_ExpUm() {GM_setValue("only_Gud_ExpUm", only_Gud_ExpUm = !only_Gud_ExpUm);}
  248. function change_alarm_Green_Hunt() {GM_setValue("alarm_Green_Hunt",alarm_Green_Hunt = !alarm_Green_Hunt);}
  249. function change_Grin_Pis() {GM_setValue("grin_Pis", grin_Pis = !grin_Pis);}
  250. function change_short_button() {GM_setValue("short_button",short_button = !short_button);
  251. if (short_button==0) { str_settings = str_settings_1; width_but = 80; left_pos = 393;}
  252. else { str_settings = str_settings_2; width_but = 20; left_pos = 468;}
  253. d.setAttribute('style', 'position: absolute; margin: -5px 0px 0px '+left_pos+'px; text-align: center;');//Положение кнопки, для вызова настроек
  254. d.innerHTML = '<style> .hwm_go * {font-size: 12px; color: #FFFF00;} .cell_go {white-space: nowrap; height: 18px; background: #4190FF; font-weight: bold;} </style>' +
  255. '<table class="hwm_go" width='+width_but+'px> <tr height=20>' + // Размер кнопки и фон, для вызова настроек
  256. '<td class="cell_go" style="cursor:pointer" id="set_go"><font style="font-size:12px;">'+str_settings+'</font></td>' +
  257. '</tr> </table>';
  258. addEvent( $("set_go"), "click", settings_go ); //Привязка к куску на клик вызов функции
  259. }
  260. //********** непонятно что, взято 1:1 у Demin ******
  261. function $(id) { return document.querySelector("#"+id); }
  262. function addEvent(elem, evType, fn) {
  263. if (elem.addEventListener) elem.addEventListener(evType, fn, false);
  264. else if (elem.attachEvent) elem.attachEvent("on" + evType, fn);
  265. else elem["on" + evType] = fn;
  266. }
  267. function ClientWidth() {return document.compatMode=='CSS1Compat' && document.documentElement?document.documentElement.clientWidth:document.body.clientWidth;}
  268. function ScrollHeight() {return Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);}
  269. }
  270. //************ Конец фрагментов кода от (C) Demin **********************************
  271. var sectors = {
  272. "cx=50&cy=50":1, //Empire Capital
  273. "cx=51&cy=50":2, //East River
  274. "cx=50&cy=49":3, //Tiger Lake
  275. "cx=51&cy=49":4, //Rogues' Wood
  276. "cx=50&cy=51":5, //Wolf Dale
  277. "cx=50&cy=48":6, //Peaceful Camp
  278. "cx=49&cy=51":7, //Lizard Lowland
  279. "cx=49&cy=50":8, //Green Wood
  280. "cx=49&cy=48":9, //Eagle Nest
  281. "cx=50&cy=52":10, //Portal Ruins
  282. "cx=51&cy=51":11, //Dragon Caves
  283. "cx=49&cy=49":12, //Shining Spring
  284. "cx=48&cy=49":13, //Sunny Sity
  285. "cx=52&cy=50":14, //Magma Mines
  286. "cx=52&cy=49":15, //Bear Mountain
  287. "cx=52&cy=48":16, //Fairy Trees
  288. "cx=53&cy=50":17, //Harbour City (Port City)
  289. "cx=53&cy=49":18, //Mithril Coast
  290. "cx=51&cy=52":19, //GreatWall
  291. "cx=51&cy=53":20, //Titans' Valley
  292. "cx=52&cy=53":21, //Fishing Village
  293. "cx=52&cy=54":22, //Kingdom Capital
  294. "cx=48&cy=48":23, //Ungovernable Steppe
  295. "cx=51&cy=48":24, //Crystal Garden
  296. "cx=53&cy=52":25, //East Island
  297. "cx=49&cy=52":26, //The Wilderness
  298. "cx=48&cy=50":27 //Sublime Arbor
  299. }
  300. var mob_rus_exp = {//228 существ
  301. "Адепты" :121,
  302. "Адские жеребцы" :136,
  303. "Адские жнецы" :250,
  304. "Адские псы" :33,
  305. "Ангелы" :330,
  306. "Арбалетчики" :19,
  307. "Архангелы" :390,
  308. "Архидемоны" :312,
  309. "Архидьяволы" :311,
  310. "Архиличи" :110,
  311. "Архимаги" :70,
  312. "Ассасины" :33,
  313. "Астральные драконы" :310,
  314. "Баньши" :205,
  315. "Бегемоты" :350,
  316. "Берсерки" :42,
  317. "Бестии" :30,
  318. "Бесы" :6,
  319. "Бехолдеры" :33,
  320. "Боевые грифоны" :45,
  321. "Боевые единороги" :135,
  322. "Боевые кентавры" :21,
  323. "Боевые маги" :72,
  324. "Вампиры" :68,
  325. "Вармонгеры" :36,
  326. "Ведьмы-призраки" :30,
  327. "Великие левиафаны" :300,
  328. "Верховные друиды" :101,
  329. "Вестники смерти" :205,
  330. "Виверны" :170,
  331. "Визири джиннов" :110,
  332. "Владычицы тени" :185,
  333. "Водные элементали" :57,
  334. "Вожаки" :100,
  335. "Воздушные элементали" :59,
  336. "Воины-наёмники" :25,
  337. "Воители" :12,
  338. "Воры-колдуны" :35,
  339. "Воры-разведчики" :35,
  340. "Воры-убийцы" :35,
  341. "Высшие ангелы" :390,
  342. "Высшие вампиры" :70,
  343. "Высшие личи" :100,
  344. "Гарпии" :29,
  345. "Гарпии-ведьмы" :45,
  346. "Гарпунеры" :18,
  347. "Гигантские ящеры" :25,
  348. "Гидры" :108,
  349. "Глубоководные черти" :140,
  350. "Гниющие зомби" :17,
  351. "Гоблины" :5,
  352. "Гоблины-лучники" :9,
  353. "Гоблины-маги" :9,
  354. "Гоблины-трапперы" :15,
  355. "Гоги" :13,
  356. "Големы смерти" :329,
  357. "Головорезы" :6,
  358. "Горные стражи" :24,
  359. "Гремлины" :5,
  360. "Гремлины-вредители" :9,
  361. "Грифоны" :59,
  362. "Громовержцы" :162,
  363. "Демонессы" :67,
  364. "Детёныши ящера" :13,
  365. "Джинны" :103,
  366. "Джинны султаны" :110,
  367. "Дикие энты" :210,
  368. "Дочери земли" :72,
  369. "Дочери неба" :75,
  370. "Древние бегемоты" :390,
  371. "Древние энты" :210,
  372. "Дриады" :20,
  373. "Друиды" :74,
  374. "Духи" :27,
  375. "Дьяволы" :245,
  376. "Дьяволята" :10,
  377. "Единороги" :124,
  378. "Железные големы" :33,
  379. "Жрецы рун" :59,
  380. "Защитники веры" :20,
  381. "Защитники гор" :7,
  382. "Зелёные драконы" :350,
  383. "Земные элементали" :63,
  384. "Злая Лошадь 2014" :45,
  385. "Злобные глаза" :33,
  386. "Зомби" :11,
  387. "Изумрудные драконы" :400,
  388. "Имперские грифоны" :62,
  389. "Инквизиторы" :121,
  390. "Искусительницы" :65,
  391. "Ифриты" :200,
  392. "Ифриты султаны" :250,
  393. "Каменные горгульи" :16,
  394. "Камнегрызы" :67,
  395. "Камнееды" :56,
  396. "Кентавры" :13,
  397. "Князья вампиров" :70,
  398. "Колоссы" :350,
  399. "Кони преисподней" :138,
  400. "Костоломы" :27,
  401. "Костяные драконы" :280,
  402. "Кочевые кентавры" :20,
  403. "Кошмары" :140,
  404. "Крестьяне" :5,
  405. "Кристальные драконы" :400,
  406. "Кровавые ящеры" :30,
  407. "Кровоглазые циклопы" :500,
  408. "Кшатрии ракшасы" :162,
  409. "Лазутчики" :20,
  410. "Латники" :21,
  411. "Левиафаны" :250,
  412. "Лесные снайперы" :42,
  413. "Личи" :87,
  414. "Лучники" :15,
  415. "Маги" :63,
  416. "Магма драконы" :329,
  417. "Магнитные големы" :57,
  418. "Магоги" :16,
  419. "Мастера копья" :17,
  420. "Мастера лука" :42,
  421. "Мегеры" :49,
  422. "Медведи" :22,
  423. "Метатели копья" :11,
  424. "Минотавры" :39,
  425. "Минотавры стражи" :56,
  426. "Минотавры-надсмотрщики":56,
  427. "Могильные големы" :400,
  428. "Монахи" :101,
  429. "Морские черти" :120,
  430. "Мумии" :115,
  431. "Мумии фараонов" :135,
  432. "Мятежники" :10,
  433. "Наездники на волках" :20,
  434. "Наездники на кабанах" :31,
  435. "Наездники на медведях" :24,
  436. "Наездники на ящерах" :65,
  437. "Налётчики на волках" :31,
  438. "Нимфы" :20,
  439. "Обсидиановые горгульи" :26,
  440. "Огненные гончие" :36,
  441. "Огненные демоны" :23,
  442. "Огненные драконы" :255,
  443. "Огненные птицы" :117,
  444. "Огненные элементали" :60,
  445. "Огры" :60,
  446. "Огры маги" :74,
  447. "Огры-ветераны" :75,
  448. "Ополченцы" :7,
  449. "Орки" :29,
  450. "Орки вожди" :38,
  451. "Орки-тираны" :38,
  452. "Орки-шаманы" :33,
  453. "Паладины" :262,
  454. "Палачи" :83,
  455. "Пауки" :15,
  456. "Пехотинцы" :17,
  457. "Пещерные владыки" :195,
  458. "Пещерные гидры" :115,
  459. "Пещерные демоны" :157,
  460. "Пещерные отродья" :165,
  461. "Привидения" :26,
  462. "Призраки" :27,
  463. "Призрачные драконы" :310,
  464. "Принцессы ракшас" :155,
  465. "Проворные наездники" :94,
  466. "Птицы грома" :115,
  467. "Птицы тьмы" :120,
  468. "Раджи ракшас" :160,
  469. "Рогатые демоны" :14,
  470. "Рогатые жнецы" :200,
  471. "Роки" :104,
  472. "Рыцари" :232,
  473. "Рыцари смерти" :190,
  474. "Рыцари тьмы" :160,
  475. "Светлые единороги" :135,
  476. "Свирепые бегемоты" :410,
  477. "Свободные циклопы" :700,
  478. "Сирены" :60,
  479. "Сирены-искусительницы" :70,
  480. "Скелеты" :6,
  481. "Скелеты-арбалетчики" :12,
  482. "Скелеты-воины" :10,
  483. "Скелеты-лучники" :10,
  484. "Стальные големы" :54,
  485. "Старейшины рун" :100,
  486. "Старшие гремлины" :9,
  487. "Старшие демоны" :20,
  488. "Старшие друиды" :101,
  489. "Степные бойцы" :23,
  490. "Степные воины" :21,
  491. "Степные волки" :20,
  492. "Степные гоблины" :5,
  493. "Степные циклопы" :390,
  494. "Стихийные горгульи" :25,
  495. "Стрелки" :16,
  496. "Стрелки-наёмники" :15,
  497. "Суккубы" :61,
  498. "Сумеречные ведьмы" :157,
  499. "Сумеречные драконы" :350,
  500. "Танцующие с ветром" :33,
  501. "Танцующие с клинками" :20,
  502. "Танцующие со смертью" :33,
  503. "Таны" :131,
  504. "Тёмные виверны" :195,
  505. "Тёмные всадники" :94,
  506. "Титаны" :400,
  507. "Титаны шторма" :400,
  508. "Тролли" :150,
  509. "Убийцы" :70,
  510. "Умертвия" :165,
  511. "Феи" :12,
  512. "Фениксы" :600,
  513. "Фурии" :49,
  514. "Хобгоблины" :9,
  515. "Хозяева медведей" :36,
  516. "Церберы" :41,
  517. "Циклопы" :172,
  518. "Циклопы короли" :182,
  519. "Циклопы-генералы" :187,
  520. "Чародеи-наёмники" :35,
  521. "Чемпионы" :252,
  522. "Черные тролли" :180,
  523. "Черти" :10,
  524. "Чёрные драконы" :400,
  525. "Чумные зомби" :15,
  526. "Шаманки" :66,
  527. "Штурмовые грифоны" :62,
  528. "Эльфийские лучники" :38,
  529. "Энты" :187,
  530. "Ядовитые пауки" :30
  531. };
  532. //****************************************************
  533. /** Библиотека юникода
  534. *
  535. * Реализует функции работы с юникодом.
  536. * @file lib_unicode.js
  537. * @version 1.1.0
  538. * @author DrunkenStranger
  539. * @link http://userscripts.org/users/362572
  540. * @license GPL
  541. */
  542. function uchar(s) {
  543. switch (s[0]) {
  544. case "А": return "\u0410";
  545. case "Б": return "\u0411";
  546. case "В": return "\u0412";
  547. case "Г": return "\u0413";
  548. case "Д": return "\u0414";
  549. case "Е": return "\u0415";
  550. case "Ж": return "\u0416";
  551. case "З": return "\u0417";
  552. case "И": return "\u0418";
  553. case "Й": return "\u0419";
  554. case "К": return "\u041a";
  555. case "Л": return "\u041b";
  556. case "М": return "\u041c";
  557. case "Н": return "\u041d";
  558. case "О": return "\u041e";
  559. case "П": return "\u041f";
  560. case "Р": return "\u0420";
  561. case "С": return "\u0421";
  562. case "Т": return "\u0422";
  563. case "У": return "\u0423";
  564. case "Ф": return "\u0424";
  565. case "Х": return "\u0425";
  566. case "Ц": return "\u0426";
  567. case "Ч": return "\u0427";
  568. case "Ш": return "\u0428";
  569. case "Щ": return "\u0429";
  570. case "Ъ": return "\u042a";
  571. case "Ы": return "\u042b";
  572. case "Ь": return "\u042c";
  573. case "Э": return "\u042d";
  574. case "Ю": return "\u042e";
  575. case "Я": return "\u042f";
  576. case "а": return "\u0430";
  577. case "б": return "\u0431";
  578. case "в": return "\u0432";
  579. case "г": return "\u0433";
  580. case "д": return "\u0434";
  581. case "е": return "\u0435";
  582. case "ж": return "\u0436";
  583. case "з": return "\u0437";
  584. case "и": return "\u0438";
  585. case "й": return "\u0439";
  586. case "к": return "\u043a";
  587. case "л": return "\u043b";
  588. case "м": return "\u043c";
  589. case "н": return "\u043d";
  590. case "о": return "\u043e";
  591. case "п": return "\u043f";
  592. case "р": return "\u0440";
  593. case "с": return "\u0441";
  594. case "т": return "\u0442";
  595. case "у": return "\u0443";
  596. case "ф": return "\u0444";
  597. case "х": return "\u0445";
  598. case "ц": return "\u0446";
  599. case "ч": return "\u0447";
  600. case "ш": return "\u0448";
  601. case "щ": return "\u0449";
  602. case "ъ": return "\u044a";
  603. case "ы": return "\u044b";
  604. case "ь": return "\u044c";
  605. case "э": return "\u044d";
  606. case "ю": return "\u044e";
  607. case "я": return "\u044f";
  608. case "Ё": return "\u0401";
  609. case "ё": return "\u0451";
  610. default: return s[0];
  611. }
  612. }
  613.  
  614. function ustring(s) {
  615. s = String(s);
  616. var result = "";
  617. for (var i = 0; i < s.length; i++)
  618. result += uchar(s[i]);
  619. return result;
  620. }
  621. //****************************************************
  622. function $uchar(s) {
  623. switch (s[0]) {
  624. case "\u0410": return "А";
  625. case "\u0411": return "Б";
  626. case "\u0412": return "В";
  627. case "\u0413": return "Г";
  628. case "\u0414": return "Д";
  629. case "\u0415": return "Е";
  630. case "\u0416": return "Ж";
  631. case "\u0417": return "З";
  632. case "\u0418": return "И";
  633. case "\u0419": return "Й";
  634. case "\u041a": return "К";
  635. case "\u041b": return "Л";
  636. case "\u041c": return "М";
  637. case "\u041d": return "Н";
  638. case "\u041e": return "О";
  639. case "\u041f": return "П";
  640. case "\u0420": return "Р";
  641. case "\u0421": return "С";
  642. case "\u0422": return "Т";
  643. case "\u0423": return "У";
  644. case "\u0424": return "Ф";
  645. case "\u0425": return "Х";
  646. case "\u0426": return "Ц";
  647. case "\u0427": return "Ч";
  648. case "\u0428": return "Ш";
  649. case "\u0429": return "Щ";
  650. case "\u042a": return "Ъ";
  651. case "\u042b": return "Ы";
  652. case "\u042c": return "Ь";
  653. case "\u042d": return "Э";
  654. case "\u042e": return "Ю";
  655. case "\u042f": return "Я";
  656. case "\u0430": return "а";
  657. case "\u0431": return "б";
  658. case "\u0432": return "в";
  659. case "\u0433": return "г";
  660. case "\u0434": return "д";
  661. case "\u0435": return "е";
  662. case "\u0436": return "ж";
  663. case "\u0437": return "з";
  664. case "\u0438": return "и";
  665. case "\u0439": return "й";
  666. case "\u043a": return "к";
  667. case "\u043b": return "л";
  668. case "\u043c": return "м";
  669. case "\u043d": return "н";
  670. case "\u043e": return "о";
  671. case "\u043f": return "п";
  672. case "\u0440": return "р";
  673. case "\u0441": return "с";
  674. case "\u0442": return "т";
  675. case "\u0443": return "у";
  676. case "\u0444": return "ф";
  677. case "\u0445": return "х";
  678. case "\u0446": return "ц";
  679. case "\u0447": return "ч";
  680. case "\u0448": return "ш";
  681. case "\u0449": return "щ";
  682. case "\u044a": return "ъ";
  683. case "\u044b": return "ы";
  684. case "\u044c": return "ь";
  685. case "\u044d": return "э";
  686. case "\u044e": return "ю";
  687. case "\u044f": return "я";
  688. case "\u0401": return "Ё";
  689. case "\u0451": return "ё";
  690. default: return s[0];
  691. }
  692. }
  693. function $ustring(s) {
  694. s = String(s);
  695. var result = "";
  696. for (var i = 0; i < s.length; i++) result += $uchar(s[i]);
  697. return result;
  698. }
  699. // ********* считывание уровня героя **********
  700. function getLevel() {
  701. if(url_cur.indexOf(url_home) == -1){ return; }
  702. for (var k = 0; k < all_tables.length; k++)
  703. {
  704. if (!all_tables[k]) continue;
  705. if (!all_tables[k].childNodes[0]) continue;
  706. if (!all_tables[k].childNodes[0].childNodes[0]) continue;
  707. if (!all_tables[k].childNodes[0].childNodes[0].childNodes[0]) continue;
  708. if (!all_tables[k].childNodes[0].childNodes[0].childNodes[0].innerHTML) continue;
  709.  
  710. var str_tbl_info = all_tables[k].childNodes[0].childNodes[0].childNodes[0].innerHTML;
  711.  
  712. if (str_tbl_info.indexOf(str_pl_lvl) > 0)
  713. {
  714. str_tbl_info = str_tbl_info.substring(str_tbl_info.indexOf(str_pl_lvl) + str_pl_lvl.length);
  715. pl_level = str_tbl_info.substring(0, str_tbl_info.search(/\D/));
  716. break;
  717. }
  718. }
  719. if(url_cur.indexOf(url_1_home) != -1)
  720. {
  721. GM_setValue("hunt_exp_pl_1_level", pl_level);
  722. return;
  723. }
  724. if(url_cur.indexOf(url_2_home) != -1)
  725. {
  726. GM_setValue("hunt_exp_pl_2_level", pl_level);
  727. return;
  728. }
  729. if(url_cur.indexOf(url_3_home) != -1)
  730. {
  731. GM_setValue("hunt_exp_pl_3_level", pl_level);
  732. return;
  733. }
  734. }
  735. // ***************************************************
  736. function needSkip(skip,mob,expirience)
  737. {
  738. // alert(mob+': '+expirience+'<='+limit_exp+'. Onb|T CMOTPETb?: '+skip_mode);
  739. if (skip_mode) {
  740. if ((limit_exp == 0) || (expirience*1 <= limit_exp*1)) skip = false;
  741. } else {
  742. if (google_str.length == 0) { skip = false; return skip; }
  743. var str_mob = mob.replace(/\s+/g, ''); //удаляем все пробелы в имени
  744. str_mob = str_mob.toLocaleLowerCase();
  745. var google_array = google_str.split(" ");
  746. for (var i in google_array) {
  747. if (str_mob.indexOf(google_array[i]) != -1) skip = false;
  748. }
  749. }
  750. return skip;
  751. }
  752. //****************************************************
  753. function skip_hunt(hunt) {
  754. var x= document.querySelector("td >a[href*='ecostat.php']");
  755. if (x == null) return;
  756. document.title = str_skip;
  757. setTimeout(function() { window.location.href = 'http://'+location.hostname+'/'+'map.php?action=skip'; }, 3000);
  758. }
  759. // ***************************************************
  760. function showExperience() {
  761. if(url_cur.indexOf(url_map) == -1){ return; }
  762. var my_td_danger, total_exp, full_exp, next_count, exp_with_helper, next_half_count, min_count, exp_min_count, next_min_count;
  763. var str_hunt, str_total_exp, next_level;//, min_kills, exp_min_kills;
  764. var mob_name ="";
  765. var str_dop ="";
  766. var mob_exp = 0;
  767. var temp = 0;
  768. var hunt_available = false;
  769. var skip_all_mob = true;
  770. for (var k = 0; k < all_tables.length; k++)
  771. {
  772. if (all_tables[k].className == "wbwhite")
  773. {
  774. if (all_tables[k].childNodes[0].childNodes[0].children.length < 2) {break;}
  775. my_td_danger = all_tables[k].childNodes[0].childNodes[0].childNodes[2];
  776. if (!my_td_danger){ return; } //no hunt...
  777.  
  778. str_hunt = all_tables[k].childNodes[0].childNodes[0].childNodes[1].innerHTML;
  779. mob_count = str_hunt.substring(str_hunt.indexOf("(")+1, str_hunt.indexOf(ustring('шт.'))-1);
  780. mob_name = str_hunt.substring(str_hunt.indexOf(">")+1, str_hunt.indexOf("</"));
  781. mob_exp = mob_rus_exp[$ustring(mob_name)];
  782. hunt_available = true;
  783.  
  784. total_exp = Math.floor(mob_exp * mob_count / 5); //Полный опыт в одиночку
  785. full_exp = total_exp;
  786. next_count = (mob_count*1.3).toFixed(0); //Прирост при победе в одиночку
  787.  
  788. exp_with_helper = (total_exp / 2).toFixed(0); //Опыт с помощником (50/50)
  789. next_half_count = (mob_count*Math.pow(1.3, 0.5)).toFixed(0); //Прирост при победе с помощником (50/50)
  790.  
  791. min_count = (mob_count / 5 - 0.5).toFixed(0); //Для минимального 5% прироста
  792. exp_min_count = (Math.floor(mob_exp * min_count / 5)).toFixed(0); //Опыт при минимальном приросте
  793. next_min_count = (mob_count*Math.pow(1.3, 0.2)).toFixed(0); //Прирост при убийстве <=20% будет ~5.4%
  794. total_exp = total_exp > pl_level*500 ? pl_level*500 : total_exp; //Если опыт больше верхней отсечки по уровню
  795. exp_with_helper = exp_with_helper > pl_level*500 ? pl_level*500 : exp_with_helper;
  796. exp_min_count = exp_min_count > pl_level*500 ? pl_level*500 : exp_min_count;
  797. if (pl_level > 2) { //Если опыт меньше нижней отсечки по уровню (3+ уровни)
  798. total_exp = total_exp < pl_level*70 ? pl_level*70 : total_exp;
  799. exp_with_helper = exp_with_helper < pl_level*35 ? pl_level*35 : exp_with_helper;
  800. exp_min_count = exp_min_count < pl_level*14 ? pl_level*14 : exp_min_count;
  801. }
  802. total_exp = (total_exp * koef).toFixed(0);
  803. exp_with_helper = (exp_with_helper * koef).toFixed(0);
  804. exp_min_count = (exp_min_count * koef).toFixed(0);
  805. //-------------- Вставим кусок кода ---------------
  806. // total_exp - опыт с учетом коэф. перекача
  807. skip_all_mob = needSkip(skip_all_mob,mob_name,full_exp);
  808. //-------------------------------------------------
  809. str_total_exp = total_exp;
  810. next_level = Number(pl_level)+1;
  811. if (total_exp > max_exp && max_exp > 0) { all_tables[k].childNodes[0].style.background = '#FFA07A' ; }
  812. if (total_exp != full_exp) str_dop = ustring(' (из ')+full_exp+ustring(')'); else str_dop ="";
  813. 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>';
  814. if ((total_exp < next_level*70) && (pl_level > 1)) {str_total_exp +='<br> <font style="color:#0000CD">'+str_kill_now.replace('STR9', next_level).replace('STR10',next_level*70)+'</font>';}
  815.  
  816. 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>'};
  817.  
  818. if (enable_5_procent) {str_total_exp = str_total_exp + '<font style="font-size:10px;color:#007FFF"><i><center>'+str_min_kol.replace('STR3', min_count).replace('STR4', exp_min_count).replace('STR8', next_min_count)+'</center></i></font>'};
  819.  
  820. all_tables[k].childNodes[0].childNodes[0].childNodes[1].innerHTML = str_hunt + str_total_exp;
  821. }
  822. }
  823. if (skip_all_mob && hunt_available) skip_hunt();
  824. // alert(skip_all_mob+' '+hunt_available+' '+limit_exp+' '+google_str.length+' '+skip_mode);
  825. if (!skip_all_mob && hunt_available && ((limit_exp != 0) || (!skip_mode && (google_str.length != 0)) ) ) document.title = str_hunt_found;
  826. }
  827. //****************************************************
  828. function helpers() {
  829. if(url_cur.indexOf(url_war) == -1){ return; }
  830. var ems, elem, elem2, str_hunt, mob_count, mob_name, total_exp, backgrn, sect, s_sect;
  831. var alr = 0;
  832. for (var k = 0; k < all_tables.length; k++)
  833. {
  834. if (all_tables[k].className == "wb")
  835. {
  836. ems = all_tables[k].querySelectorAll( "td > a[href*='map.php?cx']");
  837. for (var i = 0; i < ems.length; i++) {
  838. if (!ems[i].parentNode.parentNode.childNodes[6].childNodes[4]) {
  839. elem = ems[i].parentNode.parentNode.childNodes[6].childNodes[3].childNodes[0]; //odin v drugom sektore ili inoi level
  840. } else if (!ems[i].parentNode.parentNode.childNodes[6].childNodes[6]) {
  841. elem = ems[i].parentNode.parentNode.childNodes[6].childNodes[5].childNodes[0]; //odin v moem sektore
  842. elem2 = ems[i].parentNode.parentNode.childNodes[6].childNodes[4]; //odin v moem sektore
  843. } else {
  844. elem = ems[i].parentNode.parentNode.childNodes[6].childNodes[6].childNodes[0]; //dvoe v drugom sektore
  845. }
  846. str_hunt = elem.innerHTML;
  847. mob_count = str_hunt.substring(str_hunt.search(/\(/)+1, str_hunt.search(/\)/));
  848. mob_name = str_hunt.substring(0, str_hunt.search(/\(/));
  849. total_exp = Math.floor(mob_rus_exp[$ustring(mob_name)] * mob_count / 5);
  850. backgrn = '';
  851. if (elem.parentNode.parentNode.childElementCount != 5) {
  852. s_sect = ems[i].href;
  853. sect = s_sect.substring(s_sect.lastIndexOf("?")+1,s_sect.length);
  854. s_sect =s_sect.replace("map.php?"+sect,"move_sector.php?id="+sectors[sect]);
  855. ems[i].innerHTML += ustring('<br><font style="color:#FF3244;"><b>Перейти</b></font>');
  856. ems[i].href = s_sect;
  857. }
  858. if (only_Gud_ExpUm && (total_exp< pl_level*133) ){ backgrn = ' background:#cfd';}
  859. if (only_Gud_ExpUm && (total_exp< pl_level*70) ){ backgrn = ' background:#0f0';}
  860. if (alarm_Green_Hunt && (total_exp< pl_level*133) && (elem.parentNode.parentNode.childElementCount != 5)){ alr = 1;}
  861. elem.innerHTML += '<font style="font-size:12px; color:#013220;'+ backgrn+'"><b>'+' '+total_exp+'</b></font>'+str_exp;
  862. }
  863. }
  864. }
  865. if (alr == 1) alert(str_green_hunt);
  866. if (alarm_Green_Hunt) setTimeout(function(){ window.location.href = 'http://'+location.hostname+'/'+'group_wars.php?filter=hunt'; }, 5000);
  867. }
  868. //****************************************************
  869. function hideHunt() {
  870. var tb;
  871. if(url_cur.indexOf(url_map) == -1){ return; }
  872. for (var k = 0; k < all_tables.length; k++)
  873. {
  874. tb = all_tables[k];
  875. if (tb.className == "wbwhite")
  876. {
  877. if (tb.childNodes[0].childNodes[0].children.length < 2) {break;}
  878. tb.parentNode.removeChild(tb.nextSibling);
  879. tb.parentNode.removeChild(tb);
  880. k--;
  881. }
  882. }
  883. }
  884. //****************************************************
  885. getLevel();
  886. showSettings();
  887. if (!grin_Pis) showExperience()
  888. else hideHunt();
  889. helpers();
  890. })();