hwm_work_find

Поиск места работы с любой страницы игры

目前為 2016-01-07 提交的版本,檢視 最新版本

  1. //
  2. // ==UserScript==
  3. // @name hwm_work_find
  4. // @author Pahan https://greasyfork.org/uk/users/18377-pahan
  5. // @namespace hwm_pahan
  6. // @description Поиск места работы с любой страницы игры
  7. // @homepage https://greasyfork.org/uk/scripts/13911-hwm-work-find
  8. // @icon http://dcdn.heroeswm.ru/avatars/30/nc-5/30547.gif
  9. // @version 2.10
  10. // @encoding utf-8
  11. // @include http://www.heroeswm.ru/*
  12. // @include http://qrator.heroeswm.ru/*
  13. // @include http://178.248.235.15/*
  14. // @include http://www.lordswm.com/*
  15. // @exclude */rightcol.php*
  16. // @exclude */ch_box.php*
  17. // @exclude */chat*
  18. // @exclude */ticker.html*
  19. // @exclude */frames*
  20. // @exclude */brd.php*
  21. // @grant GM_deleteValue
  22. // @grant GM_getValue
  23. // @grant GM_listValues
  24. // @grant GM_setValue
  25. // @grant GM_addStyle
  26. // @grant GM_log
  27. // @grant GM_openInTab
  28. // @grant GM_xmlhttpRequest
  29. // ==/UserScript==
  30.  
  31. var version = '2.10';
  32. var idn = 'work_find';
  33. var str_url = 'https://greasyfork.org/uk/scripts/13911-hwm-work-find';
  34. var str_script_name = 'Поиск места работы';
  35. var str_url_aut = '/sms-create.php?mailto=Pahan&subject=Скрипт: '+str_script_name+' v'+version+'. Найдена ошибка:';
  36. var str_url_sps = '/transfer.php?pahan_sps=' + encodeURIComponent('Подарок. Спасибо за скрипт: '+str_script_name+' v'+version+'.');
  37.  
  38. if (typeof GM_deleteValue != 'function') {
  39. this.GM_getValue=function (key,def) {return localStorage[key] || def;};
  40. this.GM_setValue=function (key,value) {return localStorage[key]=value;};
  41. this.GM_deleteValue=function (key) {return delete localStorage[key];};
  42.  
  43. this.GM_addStyle=function (key) {
  44. var style = document.createElement('style');
  45. style.textContent = key;
  46. document.querySelector("head").appendChild(style);
  47. }
  48. }
  49. if (typeof GM_listValues != 'function') {
  50. this.GM_listValues=function () {
  51. var values = [];
  52. for (var i=0; i<localStorage.length; i++) {
  53. values.push(localStorage.key(i));
  54. }
  55. return values;
  56. }
  57. }
  58.  
  59. GM_addStyle('.dialog {background-color: #F6F3EA; border-radius: 5px; box-sizing: border-box; box-shadow: 0 0 0px 12px rgba(200, 200, 200, 0.5); left: calc(50% - 300px); max-height: calc(100% - 100px); overflow: auto; padding: 15px; position: fixed; top: 50px; z-index: 1105;}');
  60. GM_addStyle('.dialogOverlay {background-color: rgba(0, 0, 0, 0.7); height: 100%; left: 0; position: fixed; top: 0; width: 100%;}');
  61. GM_addStyle('.btn_close {position:absolute;left:calc(100% - 45px);float:right;border:1px solid #abc;width:15px;height:15px;text-align:center;cursor:pointer;}');
  62. GM_addStyle('.btn_settings {text-decoration:underline;cursor:pointer;font-weight:bold;font-size:10px;width:500px;}');
  63. GM_addStyle('.small_text {font-weight:bold;font-size:10px;}');
  64.  
  65. function addEvent(elem, evType, fn) {
  66. // elem["on" + evType] = fn;
  67. if (elem.addEventListener) {
  68. elem.addEventListener(evType, fn, false);
  69. }
  70. else if (elem.attachEvent) {
  71. elem.attachEvent("on" + evType, fn);
  72. }
  73. else {
  74. elem["on" + evType] = fn;
  75. }
  76. }
  77.  
  78. function $(id) { return document.querySelector(id); }
  79.  
  80. function URLAttrValueGet(attr_name, aurl)
  81. {
  82. attr_name = attr_name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  83. var regexS = "[\\?&]" + attr_name + "=([^&#]*)";
  84. var regex = new RegExp( regexS );
  85. var results = regex.exec( aurl );
  86. if( results == null )
  87. return "";
  88. else
  89. return results[1];
  90. }
  91.  
  92. function Ajax(AMethod, AURL, AParams, ACallBackFunc)
  93. {
  94. var LRequest = new XMLHttpRequest();
  95. LRequest.open(AMethod, AURL, true);
  96. LRequest.overrideMimeType('text/html; charset=windows-1251');
  97. LRequest.send(AParams);
  98. LRequest.onreadystatechange = function()
  99. {
  100. if (LRequest.readyState == 4)
  101. {
  102. ACallBackFunc(LRequest.responseText);
  103. }
  104. };
  105. }
  106.  
  107. function Trim(AText)
  108. {
  109. return AText.replace(/^\s+|\s+$|^(&nbsp;)+|(&nbsp;)+$/g, '');
  110. }
  111.  
  112. function DeleteCRLF(AText)
  113. {
  114. return AText.replace(/[\n\r]/g, ' ').replace(/\s{2,}/g, ' ');
  115. }
  116.  
  117. function Assert(ACondition, AMessage)
  118. {
  119. if (ACondition)
  120. return;
  121. localStorage['trade.status'] = 'Stoped';
  122. alert('ERROR: ' + AMessage);
  123. throw new Error(AMessage);
  124. }
  125.  
  126. function FloatFormat(AFloat)
  127. {
  128. return Math.round(AFloat).toString();
  129. }
  130.  
  131. function IntFormatWithThouthandSeparator(num){
  132. var n = num.toString(), p = n.indexOf('.');
  133. return n.replace(/\d(?=(?:\d{3})+(?:\.|$))/g, function($0, i){
  134. return p<0 || i<p ? ($0+',') : $0;
  135. });
  136. }
  137.  
  138. // ------------------ dialog
  139.  
  140. function close_setting_form() {
  141. bg = $('#bgOverlay' + idn) ;
  142. bgc = $('#bgCenter' + idn) ;
  143. if( bg ) {
  144. bg.style.display = bgc.style.display = 'none' ;
  145. }
  146. }
  147.  
  148. function clear_all_params()
  149. {
  150. if (confirm("Вы действительно хотите скинуть все сохраненные настройки?"))
  151. {
  152. var keys = GM_listValues();
  153. for (var i=0, key=null; key=keys[i]; i++) {
  154. GM_deleteValue(key);
  155. }
  156. close_find_work_info();
  157. }
  158. }
  159.  
  160. function setCheck(ch)
  161. {
  162. if( GM_getValue( ch ) && GM_getValue( ch ) == 1 )
  163. GM_setValue( ch , 0 );
  164. else
  165. GM_setValue( ch , 1 );
  166. }
  167.  
  168. function setEdit(id, key)
  169. {
  170. var LValue = parseInt($('#' + id).value);
  171. GM_setValue(key, LValue);
  172. }
  173.  
  174. function show_dialog_base(ASettingsHTML)
  175. {
  176. bg = $('#bgOverlay' + idn) ;
  177. bgc = $('#bgCenter' + idn) ;
  178. if( !bg ) {
  179. bg = document.createElement('div') ;
  180. bg.id = 'bgOverlay' + idn;
  181. document.body.appendChild( bg );
  182. bg.className = 'dialogOverlay';
  183. addEvent(bg, 'click', close_setting_form);
  184.  
  185. bgc = document.createElement('div') ;
  186. bgc.id = 'bgCenter' + idn ;
  187. document.body.appendChild( bgc );
  188. bgc.className = 'dialog';
  189.  
  190. bgc.innerHTML =
  191. '<div style="border:1px solid #abc;padding:5px;margin:2px;">' +
  192. ' <div class="btn_close" id="bt_close'+idn+'" title="Закрыть">x</div>' +
  193. ' <center>' +
  194. ' <table>' +
  195. ' <tr>' +
  196. ' <td><b>'+str_script_name+' <font style="color:#0070FF;">'+version+'</font></b></td>' +
  197. ' </tr>' +
  198. ' <tr><td><hr/></td></tr>' +
  199. ' <tr>' +
  200. ' <td><div id="dialog_content'+idn+'">(Empty)</div></td>' +
  201. ' </tr>' +
  202. ' <tr><td><hr/></td></tr>' +
  203. ' <tr>' +
  204. ' <td class="small_text" >' +
  205. ' <a class="small_text" href="'+str_url+'">Обновить</a>&nbsp;&nbsp;' +
  206. ' <a class="small_text" href="'+str_url_aut+'">Нашли ошибку?</a>&nbsp;&nbsp;' +
  207. ' <a class="small_text" href="'+str_url_sps+'">Сказать спасибо</a>&nbsp;&nbsp;' +
  208. ' <a class="small_text" style="left:calc(50% - 100px);" href="javascript:void(0);" id="settings_reset'+idn+'">Скинуть все настройки</a> ' +
  209. ' </td>' +
  210. ' </tr>' +
  211. ' <tr>' +
  212. ' <td class="small_text" >' +
  213. ' Автор: <a class="small_text" href="http://www.heroeswm.ru/pl_info.php?id=30547">Pahan.</a>' +
  214. ' </td>' +
  215. ' </tr>' +
  216. ' </table>' +
  217. ' </center>' +
  218. '</div>';
  219.  
  220. addEvent($('#bt_close' + idn), 'click', close_setting_form);
  221. addEvent($('#settings_reset' + idn), 'click', clear_all_params);
  222. }
  223. bg.style.display = bgc.style.display = 'block' ;
  224. $('#dialog_content'+idn).innerHTML = ASettingsHTML;
  225. }
  226.  
  227. function show_settings_base(ASettingsHTML)
  228. {
  229. show_dialog_base('<div><b>Настройки:</b></div>' + ASettingsHTML);
  230. }
  231.  
  232. // ------------------ dialog
  233.  
  234. function SpsProcess()
  235. {
  236. if (location.href.indexOf('/transfer.php') > -1)
  237. {
  238. var LSps = decodeURIComponent(URLAttrValueGet('pahan_sps', location.href));
  239. if (LSps != '')
  240. {
  241. document.forms.f.nick.value = 'Pahan';
  242. document.forms.f.gold.value = '500';
  243. document.forms.f.desc.value = LSps;
  244. }
  245. }
  246. }
  247. SpsProcess();
  248.  
  249. //-----------------------------------
  250.  
  251. // cX_Y координаты по карте
  252. var Pahan_locX =
  253. {
  254. c50_50: 1, //Empire Capital
  255. c51_50: 2, //East River
  256. c50_49: 3, //Tiger's Lake
  257. c51_49: 4, //Rogue's Wood
  258. c50_51: 5, //Wolf's Dale
  259. c50_48: 6, //Peaceful Camp
  260. c49_51: 7, //Lizard's Lowland
  261. c49_50: 8, //Green Wood
  262. c49_48: 9, //Eagle's Nest //Inferno portal 2
  263. c50_52: 10, //Portal Ruins //Inferno portal 1
  264. c51_51: 11, //Dragon's Caves
  265. c49_49: 12, //Shining Spring
  266. c48_49: 13, //Sunny City
  267. c52_50: 14, //Magma Mines
  268. c52_49: 15, //Bear' Mountain
  269. c52_48: 16, //Fairy Trees
  270. c53_50: 17, //Harbour City
  271. c53_49: 18, //Mythril Coast //Inferno portal 3
  272. c51_52: 19, //Great Wall
  273. c51_53: 20, //Titans' Valley
  274. c52_53: 21, //Fishing Village
  275. c52_54: 22, //Kingdom Castle
  276. c48_48: 23, //Ungovernable Steppe
  277. c51_48: 24, //Crystal Garden
  278. c49_52: 25, //Empty //East Island (Old Location)
  279. c49_52: 26, //The Wilderness
  280. c48_50: 27 //Sublime Arbor
  281.  
  282. }
  283.  
  284. // Массив локаций
  285. var Pahan_locArr = new Array(
  286. // 0i 1x 2y 3r 4ne 5nr
  287. [] ,
  288. [ 1 , 50 , 50 , 1 , 'Empire Capital' , 'Столица Империи' ] ,
  289. [ 2 , 51 , 50 , 1 , 'East River' , 'Восточная Река' ] ,
  290. [ 3 , 50 , 49 , 1 , 'Tiger\'s Lake' , 'Тигриное Озеро' ] ,
  291. [ 4 , 51 , 49 , 1 , 'Rogue\'s Wood' , 'Лес Разбойников' ] ,
  292. [ 5 , 50 , 51 , 1 , 'Wolf\'s Dale' , 'Долина Волков' ] ,
  293. [ 6 , 50 , 48 , 1 , 'Peaceful Camp' , 'Мирный Лагерь' ] ,
  294. [ 7 , 49 , 51 , 1 , 'Lizard\'s Lowland' , 'Равнина Ящеров' ] ,
  295. [ 8 , 49 , 50 , 1 , 'Green Wood' , 'Зелёный Лес' ] ,
  296. [ 9 , 49 , 48 , 1 , 'Eagle\'s Nest' , 'Орлиное Гнездо' ] ,
  297. [ 10 , 50 , 52 , 1 , 'Portal\'s ruins' , 'Руины Портала' ] ,
  298. [ 11 , 51 , 51 , 1 , 'Dragon\'s Caves' , 'Пещеры Драконов' ] ,
  299. [ 12 , 49 , 49 , 1 , 'Shining Spring' , 'Сияющий Родник' ] ,
  300. [ 13 , 48 , 49 , 1 , 'Sunny City' , 'Солнечный Город' ] ,
  301. [ 14 , 52 , 50 , 1 , 'Magma Mines' , 'Магма Шахты' ] ,
  302. [ 15 , 52 , 49 , 1 , 'Bear\' Mountain' , 'Медвежья Гора' ] ,
  303. [ 16 , 52 , 48 , 1 , 'Fairy Trees' , 'Магический Лес' ] ,
  304. [ 17 , 53 , 50 , 1 , 'Harbour City ' , 'Портовый Город' ] ,
  305. [ 18 , 53 , 49 , 1 , 'Mythril Coast' , 'Мифриловый Берег' ] ,
  306. [ 19 , 51 , 52 , 1 , 'Great Wall' , 'Великая Стена' ] ,
  307. [ 20 , 51 , 53 , 1 , 'Titans\' Valley' , 'Равнина Титанов' ] ,
  308. [ 21 , 52 , 53 , 1 , 'Fishing Village' , 'Рыбачье Село' ] ,
  309. [ 22 , 52 , 54 , 1 , 'Kingdom Castle' , 'Замок Королевства' ] ,
  310. [ 23 , 48 , 48 , 1 , 'Ungovernable Steppe' , 'Непокорная Степь' ] ,
  311. [ 24 , 51 , 48 , 1 , 'Crystal Garden' , 'Кристальный Сад' ] ,
  312. [] ,
  313. [ 26 , 49 , 52 , 1 , 'The Wilderness' , 'Дикие Земли' ] ,
  314. [ 27 , 48 , 50 , 1 , 'Sublime Arbor' , 'Великое Древо' ]
  315. )
  316.  
  317. // location error
  318. // сначала путь берёт диагональ, а потом катет
  319. var Pahan_locP =
  320. {
  321. l1_14: 11 ,
  322. l1_17: 11 ,
  323. l1_26: 5 ,
  324. l1_27: 8 ,
  325.  
  326. l2_14: 15 ,
  327. l2_17: 15 ,
  328. l2_18: 15 ,
  329. l2_21: 11 ,
  330. l2_22: 11 ,
  331. l2_27: 1 ,
  332.  
  333. l3_14: 4 ,
  334. l3_16: 4 ,
  335. l3_17: 4 ,
  336. l3_26: 1 ,
  337. l3_27: 12 ,
  338.  
  339. l4_14: 15 ,
  340. l4_16: 15 ,
  341. l4_17: 15 ,
  342. l4_21: 2 ,
  343. l4_22: 2 ,
  344. l4_26: 2 ,
  345. l4_27: 3 ,
  346.  
  347. l5_14: 11 ,
  348. l5_17: 11 ,
  349. l5_19: 10 ,
  350. l5_20: 10 ,
  351. l5_21: 10 ,
  352. l5_22: 10 ,
  353. l5_27: 8 ,
  354.  
  355. l6_2: 4 ,
  356. l6_16: 4 ,
  357. l6_26: 3 ,
  358. l6_27: 12 ,
  359.  
  360. l7_13: 8 ,
  361. l7_14: 5 ,
  362. l7_17: 5 ,
  363. l7_23: 8 ,
  364. l7_26: 5 ,
  365.  
  366. l8_14: 5 ,
  367. l8_17: 5 ,
  368. l8_26: 5 ,
  369.  
  370. l9_16: 3 ,
  371. l9_26: 3 ,
  372.  
  373. l10_27: 5 ,
  374.  
  375. l11_3: 2 ,
  376. l11_6: 2 ,
  377. l11_9: 2 ,
  378. l11_21: 19 ,
  379. l11_22: 19 ,
  380. l11_26: 10 ,
  381. l11_27: 5 ,
  382.  
  383. l12_14: 3 ,
  384. l12_16: 3 ,
  385. l12_17: 3 ,
  386. l12_26: 1 ,
  387.  
  388. l13_14: 12 ,
  389. l13_16: 12 ,
  390. l13_17: 12 ,
  391.  
  392. l14_1: 11 ,
  393. l14_2: 15 ,
  394. l14_3: 15 ,
  395. l14_4: 15 ,
  396. l14_6: 15 ,
  397. l14_8: 11 ,
  398. l14_9: 15 ,
  399. l14_12: 15 ,
  400. l14_13: 15 ,
  401. l14_18: 15 ,
  402. l14_21: 11 ,
  403. l14_22: 11 ,
  404. l14_23: 15 ,
  405. l14_24: 15 ,
  406. l14_27: 11 ,
  407.  
  408. // l15_6: 4 ,
  409. // l15_9: 4 ,
  410. l15_23: 24 ,
  411. l15_26: 2 ,
  412. l15_27: 4 ,
  413.  
  414. l16_1: 15 ,
  415. l16_2: 15 ,
  416. l16_3: 15 ,
  417. l16_4: 15 ,
  418. l16_5: 15 ,
  419. l16_6: 15 ,
  420. l16_7: 15 ,
  421. l16_8: 15 ,
  422. l16_9: 15 ,
  423. l16_10: 15 ,
  424. l16_11: 15 ,
  425. l16_12: 15 ,
  426. l16_13: 15 ,
  427. l16_19: 15 ,
  428. l16_20: 15 ,
  429. l16_23: 15 ,
  430. l16_24: 15 ,
  431. l16_26: 15 ,
  432. l16_27: 15 ,
  433.  
  434. l17_2: 15 ,
  435. l17_5: 14 ,
  436. l17_7: 14 ,
  437. l17_10: 14 ,
  438. l17_11: 14 ,
  439. l17_19: 14 ,
  440. l17_20: 14 ,
  441. l17_21: 14 ,
  442. l17_22: 14 ,
  443. l17_26: 14 ,
  444. l17_27: 14 ,
  445.  
  446. l18_1: 15 ,
  447. l18_2: 15 ,
  448. l18_5: 15 ,
  449. l18_6: 15 ,
  450. l18_7: 15 ,
  451. l18_8: 15 ,
  452. l18_9: 15 ,
  453. l18_10: 17 ,
  454. l18_11: 17 ,
  455. l18_14: 17 ,
  456. l18_19: 17 ,
  457. l18_20: 17 ,
  458. l18_21: 17 ,
  459. l18_22: 17 ,
  460. l18_23: 15 ,
  461. l18_24: 15 ,
  462. l18_26: 17 ,
  463. l18_27: 15 ,
  464.  
  465. l19_1: 11 ,
  466. l19_3: 11 ,
  467. l19_5: 10 ,
  468. l19_6: 11 ,
  469. l19_7: 10 ,
  470. l19_8: 10 ,
  471. l19_9: 11 ,
  472. l19_12: 10 ,
  473. l19_13: 10 ,
  474. l19_14: 11 ,
  475. l19_15: 11 ,
  476. l19_16: 11 ,
  477. l19_17: 11 ,
  478. l19_18: 11 ,
  479. l19_23: 10 ,
  480. l19_27: 10 ,
  481.  
  482. l20_14: 19 ,
  483. l20_15: 19 ,
  484. l20_16: 19 ,
  485. l20_17: 19 ,
  486. l20_18: 19 ,
  487. l20_27: 10 ,
  488.  
  489. l21_14: 19 ,
  490. l21_15: 19 ,
  491. l21_16: 19 ,
  492. l21_17: 19 ,
  493. l21_18: 19 ,
  494. l21_27: 19 ,
  495.  
  496. l22_17: 21 ,
  497. l22_18: 21 ,
  498. l22_27: 20 ,
  499.  
  500. l23_16: 15 ,
  501. l23_26: 1 ,
  502. l23_27: 13 ,
  503.  
  504. l24_16: 15 ,
  505. l24_21: 2 ,
  506. l24_22: 2 ,
  507. l24_26: 2 ,
  508. l24_27: 3 ,
  509.  
  510. l26_7: 5 ,
  511. l26_8: 5 ,
  512. l26_9: 5 ,
  513. l26_11: 10 ,
  514. l26_12: 5 ,
  515. l26_13: 5 ,
  516. l26_14: 10 ,
  517. l26_17: 10 ,
  518. l26_20: 10 ,
  519. l26_21: 10 ,
  520. l26_22: 10 ,
  521. l26_23: 5 ,
  522. l26_24: 5 ,
  523. l26_27: 5 ,
  524.  
  525. l27_1: 8 ,
  526. l27_2: 8 ,
  527. l27_3: 12 ,
  528. l27_4: 12 ,
  529. l27_5: 7 ,
  530. l27_6: 12 ,
  531. l27_9: 12 ,
  532. l27_10: 7 ,
  533. l27_11: 7 ,
  534. l27_14: 11 ,
  535. l27_15: 4 ,
  536. l27_16: 15 ,
  537. l27_17: 15 ,
  538. l27_18: 12 ,
  539. l27_19: 10 ,
  540. l27_20: 10 ,
  541. l27_21: 20 ,
  542. l27_22: 20 ,
  543. l27_23: 13 ,
  544. l27_24: 12 ,
  545. l27_26: 8
  546.  
  547. }
  548.  
  549. var Pahan_trtime = new Array( 120 , 84 , 60 , 36 , 24 , 12 ) ; // время перемещения по прямой
  550. var Pahan_trtimed = new Array( 169 , 118 , 84 , 50 , 33 , 16 ) ; // время перемещения по диагонали
  551.  
  552. function getMoveTimeL( cz , mz , t ) {
  553. /* cz текущий сектор обсчёта
  554. mz конечный сектор обсчёта
  555. t сумма времени
  556. */
  557.  
  558. // если прибыли в конечный пункт
  559. if( mz == cz ) {
  560. // var myT = new Date(t*1000)
  561. // myTs = myT.getSeconds()
  562. // return myT.getMinutes() + ':' + ( myTs < 10 ? '0' : '' ) + myTs ;
  563. return t;
  564. }
  565.  
  566. var nz = 0; // следующий сектор, к которому надо действительно двигаться
  567.  
  568. var kC = Pahan_locArr[cz]; //координаты текущие
  569. if(kC == undefined) return 0;
  570. var kM = Pahan_locArr[mz]; //координаты назначения
  571.  
  572. id1 = eval( 'Pahan_locP.l' + cz + '_' + mz ) //id исключение
  573.  
  574. // если есть исключения, следующий сектор будет равен ид исключения
  575. if( id1 && id1 > 0 ) {
  576. nz = id1 ;
  577. }
  578.  
  579. // если исключения, то переназначаем координаты назначения
  580. if( nz != 0 ) var kM = Pahan_locArr[nz] ;
  581.  
  582. var tx = kM[1] > kC[1] ? 1 : ( kM[1] == kC[1] ? 0 : -1 ) ;
  583. var ty = kM[2] > kC[2] ? 1 : ( kM[2] == kC[2] ? 0 : -1 ) ;
  584. var nx = parseInt( kC[1] ) + tx ;
  585. var ny = parseInt( kC[2] ) + ty ;
  586.  
  587. // t = ( ty == 0 || tx == 0 ) ? t + 120 : t + 169 ;
  588. t = ( ty == 0 || tx == 0 ) ? t + Pahan_trtime[0] : t + Pahan_trtimed[0] ;
  589. var id = eval( 'Pahan_locX.c' + nx + '_' + ny ) ;
  590. // t = t + ' ' + id + '(' + nz + ')' ;
  591.  
  592. return getMoveTimeL( id , mz , t );
  593. }
  594.  
  595. function GetCurrLocation(AHTML)
  596. {
  597. //!! var re = /<[^>]*href='([^']*)'[^>]*>&raquo;&raquo;&raquo;<\/a>/gim;
  598. var re = /<param[^>]*\/map.swf[^>]*>\s*<param[^>]*value="([^"]*)"[^>]*>/gim;
  599. var res;
  600. if ((res = re.exec(AHTML)) != null)
  601. {
  602. return res[1].split('=')[1].split(':')[1];
  603. }
  604. else
  605. return 1;
  606. }
  607.  
  608. function GetSortedLocations(LCurrLocation)
  609. {
  610. var LLocs = new Array();
  611. for (var i = 0; i < Pahan_locArr.length; i++)
  612. {
  613. var LLoc = Pahan_locArr[i];
  614. if (LLoc && (LLoc.length == 6))
  615. {
  616. LLoc[6] = getMoveTimeL(LCurrLocation, LLoc[0], 0);
  617. // alert('i: ' + i + ', LCurrLocation: ' + LCurrLocation + ', LLoc: ' + LLoc);
  618. LLocs.push(LLoc);
  619. }
  620. }
  621. LLocs.sort(function(a, b) {
  622. return a[6] - b[6];
  623. });
  624. return LLocs;
  625. }
  626.  
  627. // ---------------------------------
  628.  
  629. WorkResultFound = false;
  630. SortedLocations = null;
  631. GoldSumm = 0;
  632. WorkCountSumm = 0;
  633.  
  634. function show_settings()
  635. {
  636. WorkResultFound = true;
  637. var LStr =
  638. ' <table>' +
  639. ' <tr>' +
  640. ' <td>' +
  641. ' <label style="cursor:pointer;"><input type="checkbox" id="id_return_after_work" title=""> Возвращатся на страницу после установки на работу</lable>' +
  642. ' </td>' +
  643. ' </tr>' +
  644. ' <tr>' +
  645. ' <td>' +
  646. ' <div><input type="text" style="width:40;" id="id_min_zp"> Минимальная зарплата, не предлагать меньшую </div>' +
  647. ' <div>Значение "0" - подходит любая зарплата</div>' +
  648. ' </td>' +
  649. ' </tr>' +
  650. ' <tr>' +
  651. ' <td>' +
  652. ' <label style="cursor:pointer;"><input type="checkbox" id="id_scan_other_locations" title=""> Искать на других локациях (только с транспортом)</lable>' +
  653. ' </td>' +
  654. ' </tr>' +
  655. ' <tr>' +
  656. ' <td>' +
  657. ' <div><input type="text" style="width:40;" id="id_max_loc_count"> Количество соседних локаций для сканирования</div>' +
  658. ' <div>Значение "0" - сканировать все локации на карте</div>' +
  659. ' </td>' +
  660. ' </tr>' +
  661. ' <tr>' +
  662. ' <td>' +
  663. ' <label style="cursor:pointer;"><input type="checkbox" id="id_show_settled_window" title=""> ' +
  664. ' Показывать после установки окно с надписью "Вы устроены на работу."</label">' +
  665. ' </td>' +
  666. ' </tr>' +
  667. ' <tr>' +
  668. ' <td>' +
  669. ' <div><input type="text" style="width:80;" id="id_min_obj_work_count"> Пропускать объект если свободных рабочих мест меньшe</div>' +
  670. ' <div><input type="text" style="width:80;" id="id_min_obj_gold_count"> Пропускать объект если золота меньше</div>' +
  671. ' <div><input type="text" style="width:80;" id="id_min_loc_work_count"> Пропускать локацию если свободных рабочих мест меньшe</div>' +
  672. ' <div><input type="text" style="width:80;" id="id_min_loc_gold_count"> Пропускать локацию если золота меньше</div>' +
  673. ' </td>' +
  674. ' </tr>' +
  675. ' </table>';
  676.  
  677. show_settings_base(LStr);
  678. var check_return = $('#id_return_after_work');
  679. check_return.checked = GM_getValue('return_after_work', 0) == 1 ? 'checked' : '' ;
  680. addEvent(check_return, 'click', function(){setCheck('return_after_work')});
  681. var Lmin_zp = $("#id_min_zp");
  682. Lmin_zp.value = parseInt(GM_getValue('min_zp', '0'));
  683. Lmin_zp.addEventListener( "change", function(){setEdit('id_min_zp', 'min_zp')}, false );
  684. Lmin_zp.addEventListener( "keyup", function(){setEdit('id_min_zp', 'min_zp')}, false );
  685. Lmin_zp.addEventListener( "paste", function(){setEdit('id_min_zp', 'min_zp')}, false );
  686. var check_other_locations = $('#id_scan_other_locations');
  687. check_other_locations.checked = GM_getValue('scan_other_locations', 0) == 1 ? 'checked' : '' ;
  688. addEvent(check_other_locations, 'click', function(){setCheck('scan_other_locations')});
  689. var Lmax_loc_count = $("#id_max_loc_count");
  690. Lmax_loc_count.value = parseInt(GM_getValue('max_loc_count', '0'));
  691. Lmax_loc_count.addEventListener( "change", function(){setEdit('id_max_loc_count', 'max_loc_count')} , false );
  692. Lmax_loc_count.addEventListener( "keyup", function(){setEdit('id_max_loc_count', 'max_loc_count')} , false );
  693. Lmax_loc_count.addEventListener( "paste", function(){setEdit('id_max_loc_count', 'max_loc_count')} , false );
  694.  
  695. var check_settled_window = $('#id_show_settled_window');
  696. check_settled_window.checked = GM_getValue('show_settled_window', 0) == 1 ? 'checked' : '' ;
  697. addEvent(check_settled_window, 'click', function(){setCheck('show_settled_window')});
  698. var Lmin_obj_work_count = $("#id_min_obj_work_count");
  699. Lmin_obj_work_count.value = parseInt(GM_getValue('min_obj_work_count', '0'));
  700. Lmin_obj_work_count.addEventListener( "change", function(){setEdit('id_min_obj_work_count', 'min_obj_work_count')} , false );
  701. Lmin_obj_work_count.addEventListener( "keyup", function(){setEdit('id_min_obj_work_count', 'min_obj_work_count')} , false );
  702. Lmin_obj_work_count.addEventListener( "paste", function(){setEdit('id_min_obj_work_count', 'min_obj_work_count')} , false );
  703.  
  704. var Lmin_obj_gold_count = $("#id_min_obj_gold_count");
  705. Lmin_obj_gold_count.value = parseInt(GM_getValue('min_obj_gold_count', '0'));
  706. Lmin_obj_gold_count.addEventListener( "change", function(){setEdit('id_min_obj_gold_count', 'min_obj_gold_count')} , false );
  707. Lmin_obj_gold_count.addEventListener( "keyup", function(){setEdit('id_min_obj_gold_count', 'min_obj_gold_count')} , false );
  708. Lmin_obj_gold_count.addEventListener( "paste", function(){setEdit('id_min_obj_gold_count', 'min_obj_gold_count')} , false );
  709.  
  710. var Lmin_loc_work_count = $("#id_min_loc_work_count");
  711. Lmin_loc_work_count.value = parseInt(GM_getValue('min_loc_work_count', '0'));
  712. Lmin_loc_work_count.addEventListener( "change", function(){setEdit('id_min_loc_work_count', 'min_loc_work_count')} , false );
  713. Lmin_loc_work_count.addEventListener( "keyup", function(){setEdit('id_min_loc_work_count', 'min_loc_work_count')} , false );
  714. Lmin_loc_work_count.addEventListener( "paste", function(){setEdit('id_min_loc_work_count', 'min_loc_work_count')} , false );
  715.  
  716. var Lmin_loc_gold_count = $("#id_min_loc_gold_count");
  717. Lmin_loc_gold_count.value = parseInt(GM_getValue('min_loc_gold_count', '0'));
  718. Lmin_loc_gold_count.addEventListener( "change", function(){setEdit('id_min_loc_gold_count', 'min_loc_gold_count')} , false );
  719. Lmin_loc_gold_count.addEventListener( "keyup", function(){setEdit('id_min_loc_gold_count', 'min_loc_gold_count')} , false );
  720. Lmin_loc_gold_count.addEventListener( "paste", function(){setEdit('id_min_loc_gold_count', 'min_loc_gold_count')} , false );
  721. }
  722.  
  723. function cancel_scan_work()
  724. {
  725. WorkResultFound = true;
  726. }
  727.  
  728. function ShowFindWorkHTML(AFindWorkHTML, AIsResult, AAdditionInfo)
  729. {
  730. if (WorkResultFound)
  731. return;
  732. WorkResultFound = AIsResult;
  733. if (WorkResultFound)
  734. GM_setValue('LastFindWorkHTML', AFindWorkHTML);
  735. if (AAdditionInfo != '')
  736. AAdditionInfo = '<div>' + AAdditionInfo + '</div>';
  737. show_dialog_base(AAdditionInfo +
  738. '<div>' + AFindWorkHTML + '</div>' +
  739. '<div><hr/></div>' +
  740. '<div class="btn_settings" id="fw_settings"><b>Открыть настройки</b></div>'
  741. )
  742. addEvent($('#bt_close' + idn), 'click', cancel_scan_work);
  743. addEvent($('#bgOverlay' + idn), 'click', cancel_scan_work);
  744. addEvent($("#fw_settings"), 'click', show_settings);
  745. }
  746.  
  747. function GetObjectInfo(AObjHTML)
  748. {
  749. AObjHTML = DeleteCRLF(AObjHTML);
  750. var re = /(<table[^>]*><tr[^>]*><td[^>]*>Тип: .*)Список рабочих/gim;
  751. LInfo = (res = re.exec(AObjHTML)) ? res[1] : '';
  752. re = /Свободных мест: <b>\d+<\/b>/gim;
  753. LInfo += (res = re.exec(AObjHTML)) ? res[0] : '';
  754.  
  755. return LInfo;
  756. }
  757.  
  758. function CheckResExists(AHTML)
  759. {
  760. // <td class="wb"><font color="red">0.01</font> / 50</td>
  761. var re = /<td[^>]*><font[^>]*color=red[^>]*>([0-9]*\.?[0-9]*)<\/font>\s*\/\s*([0-9]*\.?[0-9]*)<\/td>/gim;
  762. var res;
  763. if ((res = re.exec(AHTML)) != null)
  764. {
  765. return false;
  766. }
  767. return true;
  768. }
  769.  
  770. function ObjectProcess(ALocation, AObjHTML)
  771. {
  772. AObjHTML = DeleteCRLF(AObjHTML);
  773. var re = /Вы уже устроены\./gim;
  774. var re2 = /Прошло меньше часа с последнего устройства на работу\. Ждите\./gim;
  775. var res;
  776. if (((res = re.exec(AObjHTML)) != null) || (res = re2.exec(AObjHTML)) != null)
  777. {
  778. ShowFindWorkHTML(res[0], true, '');
  779. return;
  780. }
  781. re = /Свободных мест\: <b>(\d+)<\/b>/gim;
  782. if ((res = re.exec(AObjHTML)) == null)
  783. return;
  784. var LWorkCount = parseInt(res[1]);
  785. var LWorkCountMin = Math.max(parseInt(GM_getValue('min_obj_work_count', 0)), 1);
  786. if (LWorkCount < LWorkCountMin)
  787. return;
  788. re = /<tr><td>Баланс: <\/td><td><b><table[^>]*><tr><td><img[^>]*gold\.gif[^>]*><\/td><td><b>([\d,]+)<\/b><\/td><\/tr><\/table><\/b><\/td><\/tr>/gim;
  789. if ((res = re.exec(AObjHTML)) == null)
  790. return;
  791. var LGold = parseInt(res[1].replace(/,/g, ''));
  792. var LGoldMin = Math.max(parseInt(GM_getValue('min_obj_gold_count', 0)), 20);
  793. if (LGold < LGoldMin)
  794. return;
  795. if (!CheckResExists(AObjHTML))
  796. return;
  797. if (ALocation == 0)
  798. {
  799. // e = /<form[^>]*name="working"[^>]*>.*<\/form>/gim;
  800. re = /<form[^>]*name=working[^>]*>.*<\/form>/gim;
  801. if ((res = re.exec(AObjHTML)) != null)
  802. {
  803. GM_setValue('LastURL', location.href);
  804. LLastCode = GM_getValue('last_code', '');
  805. if (LLastCode != '')
  806. LLastCode = '<font color="red"><b>Последний введенный код: ' + LLastCode + '</b></font>';
  807. ShowFindWorkHTML(GetObjectInfo(AObjHTML) + res[0], true, LLastCode);
  808. AddRealZPInfo();
  809. }
  810. }
  811. else
  812. {
  813. GoldSumm += LGold;
  814. WorkCountSumm += LWorkCount;
  815. }
  816. }
  817.  
  818. function FindWorkObject(ALocation, APlaceIndex, AObjIndex, APlaceHTML)
  819. {
  820. if (APlaceHTML.indexOf('i/index2012/enter0.jpg') > -1)
  821. {
  822. ShowFindWorkHTML('Вы не залогированы.<br>' +
  823. 'Перезайдите в игру.', true, ''
  824. );
  825. return;
  826. }
  827.  
  828. var re = /<b>(\d+)<\/b>&nbsp;<\/td><td[^>]*>&nbsp;<a[^>]*href='([^']*)'[^>]*>&raquo;&raquo;&raquo;<\/a>/gim;
  829. var res;
  830. var LLink;
  831. var LZP, LMinZP;
  832. var LFindCount = 0;
  833. while ((res = re.exec(APlaceHTML)) != null)
  834. {
  835. LZP = parseInt(res[1]);
  836. LLink = res[2];
  837. LMinZP = parseInt(GM_getValue('min_zp', '0'));
  838. // alert('LZP: ' + LZP + ', LLink: ' + LLink);
  839. if ((LMinZP == 0) || (LZP >= LMinZP))
  840. {
  841. if (LFindCount == AObjIndex)
  842. {
  843. Ajax('GET', LLink, null,
  844. function(AObjHTML)
  845. {
  846. ObjectProcess(ALocation, AObjHTML);
  847. if (!WorkResultFound)
  848. FindWorkObject(ALocation, APlaceIndex, AObjIndex + 1, APlaceHTML);
  849. }
  850. );
  851. }
  852. LFindCount++;
  853. }
  854. }
  855.  
  856. // $("#find_work").innerHTML = $("#find_work").innerHTML + '<br>' +
  857. // 'AObjIndex: ' + AObjIndex + ', LFindCount: ' + LFindCount;
  858. if (!WorkResultFound && (AObjIndex >= LFindCount))
  859. FindWorkProcess(ALocation, APlaceIndex + 1);
  860. }
  861. function FindWorkProcess(ALocation, APlaceIndex)
  862. {
  863. var PlaceCodes = ['sh', 'fc', 'mn'];
  864. var PlaceNames = ['Производства', 'Обработка', 'Добыча'];
  865.  
  866. if (APlaceIndex < PlaceCodes.length)
  867. {
  868. if (APlaceIndex == 0)
  869. {
  870. GoldSumm = 0;
  871. WorkCountSumm = 0;
  872. }
  873. var LLocXY = '';
  874. if (ALocation != 0)
  875. LLocXY = 'cx=' + SortedLocations[ALocation][1] + '&cy=' + SortedLocations[ALocation][2] + '&';
  876. var LURL = '/map.php?' + LLocXY + 'st=' + PlaceCodes[APlaceIndex];
  877. Ajax('GET', LURL, null,
  878. function(AHTML)
  879. {
  880. if (!SortedLocations)
  881. SortedLocations = GetSortedLocations(GetCurrLocation(DeleteCRLF(AHTML)));
  882. ShowFindWorkHTML('Сканирование локации ' + SortedLocations[ALocation][5] +
  883. ' ' + PlaceNames[APlaceIndex] + '...<br>', false, '');
  884. FindWorkObject(ALocation, APlaceIndex, 0, AHTML);
  885. }
  886. );
  887. }
  888. else
  889. {
  890. var LWorkCountSummMin = Math.max(parseInt(GM_getValue('min_loc_work_count', 0)), 5);
  891. var LGoldSummMin = Math.max(parseInt(GM_getValue('min_loc_gold_count', 0)), 2000);
  892. if ((ALocation > 0) && (WorkCountSumm >= LWorkCountSummMin) && (GoldSumm >= LGoldSummMin))
  893. {
  894. var LURL = 'http://www.heroeswm.ru/move_sector.php?id=' + SortedLocations[ALocation][0];
  895. ShowFindWorkHTML('На локации ' + SortedLocations[ALocation][5] + ' найдено:<br>' +
  896. 'Рабочих мест: <b>' + WorkCountSumm + '</b><br>' +
  897. 'Доступное для зарплаты золото: <b>' + IntFormatWithThouthandSeparator(GoldSumm) + '</b><br>' +
  898. 'Перейти: <a href="' + LURL + '">' + SortedLocations[ALocation][5] + '</a>', true, ''
  899. );
  900. }
  901. else
  902. {
  903. var LMaxLocCount = -1;
  904. if (GM_getValue('scan_other_locations', 0) == 1)
  905. LMaxLocCount = parseInt(GM_getValue('max_loc_count', '0'));
  906. ALocation++;
  907. if ((LMaxLocCount == 0) || (ALocation <= LMaxLocCount))
  908. FindWorkProcess(ALocation, 0);
  909. else
  910. ShowFindWorkHTML('Поиск работы завершен.<br>' +
  911. 'Все места заняты или недостаточно золота на объектах.<br>' +
  912. 'Смените локацию, или попробуйте позже.', true, ''
  913. );
  914. }
  915. }
  916. }
  917.  
  918. function StartScan()
  919. {
  920. WorkResultFound = false;
  921. GM_deleteValue('LastFindWorkHTML');
  922. GM_deleteValue('LastURL');
  923. ShowFindWorkHTML('Сканирование локации...<br>', false, '');
  924. FindWorkProcess(0, 0);
  925. }
  926. function AddWorkFindHref()
  927. {
  928. var LLinks = document.querySelectorAll('a[href*="map.php"]');
  929. var LLink;
  930. if (LLinks)
  931. {
  932. for(i = 0; i < LLinks.length; i++)
  933. {
  934. LLink = LLinks[i];
  935. if (LLink.innerHTML == '<b>Карта</b>')
  936. {
  937. var LColor = '#f5c137';
  938. if (GM_getValue('IsWorking', true) == false)
  939. LColor = 'red';
  940. LNewHref = document.createElement('a');
  941. LNewHref.href = 'javascript:void(0)';
  942. LNewHref.style = 'text-decoration: none;color: ' + LColor + ';'
  943. LNewHref.innerHTML = '<b>ГР</b>';
  944. LNewHref.title = 'Найти место работы';
  945. LNewHref.id = 'find_work';
  946. LLink.parentNode.appendChild(LNewHref);
  947. addEvent($("#find_work"), "click", StartScan);
  948. }
  949. }
  950. }
  951. }
  952.  
  953. function ProcessReturn()
  954. {
  955. var LCode = URLAttrValueGet('code', location.href);
  956. if ((LCode == '') && (GM_getValue('IsProcessReturn', false) === false))
  957. return;
  958.  
  959. GM_deleteValue('IsProcessReturn');
  960. var LLastFindWorkHTML = GM_getValue('LastFindWorkHTML', '');
  961. var LLastURL = GM_getValue('LastURL', '');
  962. var LCmd = parseInt(GM_getValue('cmd', 0));
  963. if ((LLastFindWorkHTML != '') && (LCmd == 0))
  964. {
  965. // <font color="red"><b>Введен неправильный код.</b></font>
  966. var re = /<font[^>]*><b>(Введен неправильный код\.)<\/b><\/font>/gim;
  967. var re2 = /<font[^>]*><b>(На объекте недостаточно золота\.)<\/b><\/font>/gim;
  968. var re3 = /<font[^>]*><b>(Нет рабочих мест\.)<\/b><\/font>/gim;
  969. var re4 = /<center>(Вы устроены на работу\.)<\/center>/gim;
  970. var res;
  971. if ((res = re.exec(document.body.innerHTML)) != null)
  972. LCmd = 1;
  973. else
  974. if (((res = re2.exec(document.body.innerHTML)) != null)
  975. || ((res = re3.exec(document.body.innerHTML)) != null)
  976. )
  977. LCmd = 2;
  978. else
  979. if ((res = re4.exec(document.body.innerHTML)) != null)
  980. LCmd = 3;
  981. if (LCmd == 0)
  982. {
  983. GM_deleteValue('last_code');
  984. GM_deleteValue('last_work_info');
  985. GM_deleteValue('cmd');
  986. GM_deleteValue('LastFindWorkHTML');
  987. }
  988. else
  989. {
  990. GM_setValue('last_code', LCode);
  991. GM_setValue('last_work_info', res[1]);
  992. GM_setValue('cmd', LCmd);
  993. }
  994. if (LLastURL != '')
  995. {
  996. GM_deleteValue('LastURL');
  997. if (GM_getValue('return_after_work', 0) == 1)
  998. {
  999. GM_setValue('IsProcessReturn', true);
  1000. location.href = LLastURL;
  1001. return;
  1002. }
  1003. }
  1004. }
  1005.  
  1006. if ((LLastFindWorkHTML != '') && (LCmd != 0))
  1007. {
  1008. LCode = GM_getValue('last_code', 0);
  1009. var LWorkInfo = GM_getValue('last_work_info', '');
  1010.  
  1011. GM_deleteValue('last_work_info');
  1012. GM_deleteValue('cmd');
  1013. if (LCmd == 1)
  1014. {
  1015. GM_deleteValue('LastFindWorkHTML');
  1016. var LStr = '<font color="red">' + LWorkInfo + '</font><br>' +
  1017. '<div class="btn_settings" id="fw_restart_scan">Сканировать заново</div>';
  1018. ShowFindWorkHTML(LStr, true, '');
  1019. addEvent($("#fw_restart_scan"), 'click', StartScan);
  1020.  
  1021. // GM_setValue('LastURL', location.href);
  1022. // GM_deleteValue('last_code');
  1023. // ShowFindWorkHTML(LLastFindWorkHTML, true, LStr);
  1024. // AddRealZPInfo();
  1025. }
  1026. else
  1027. if (LCmd == 2)
  1028. {
  1029. GM_deleteValue('LastFindWorkHTML');
  1030. var LStr = '<font color="red">' + LWorkInfo + '</font><br>' +
  1031. '<div class="btn_settings" id="fw_restart_scan">Сканировать заново</div>';
  1032. ShowFindWorkHTML(LStr, true, '');
  1033. addEvent($("#fw_restart_scan"), 'click', StartScan);
  1034. }
  1035. else
  1036. if (LCmd == 3)
  1037. {
  1038. GM_deleteValue('LastFindWorkHTML');
  1039. GM_deleteValue('last_code');
  1040. if (GM_getValue('show_settled_window', 0) == 1)
  1041. ShowFindWorkHTML('<font color="#0070FF">' + LWorkInfo + '</font>', true, '');
  1042. }
  1043. else
  1044. {
  1045. GM_deleteValue('last_code');
  1046. GM_deleteValue('last_work_info');
  1047. GM_deleteValue('cmd');
  1048. GM_deleteValue('LastFindWorkHTML');
  1049. }
  1050. }
  1051. else
  1052. {
  1053. GM_deleteValue('last_code');
  1054. GM_deleteValue('last_work_info');
  1055. GM_deleteValue('cmd');
  1056. GM_deleteValue('LastFindWorkHTML');
  1057. }
  1058. }
  1059.  
  1060. function AddRealZPInfo()
  1061. {
  1062. var LCoefsGR = new Array(1.0, 1.1, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8, 4.0);
  1063. var LTD = null;
  1064. var LTDels = document.getElementsByTagName('td');
  1065. for( var i = 0; i < LTDels.length; i++ )
  1066. if (LTDels[i].innerHTML == 'Зарплата: ')
  1067. {
  1068. LTD = LTDels[i];
  1069. var LBels = LTD.parentNode.getElementsByTagName('b');
  1070. var LB = null;
  1071. var re = /^([\d,]+)$/gim;
  1072. var res;
  1073. for( var j = 0; j < LBels.length; j++ )
  1074. if ((res = re.exec(LBels[j].innerHTML)) != null)
  1075. {
  1076. LB = LBels[j];
  1077. LZP = parseInt(res[1].replace(/,/g, ''));
  1078. var LLevel = parseInt(GM_getValue('LevelGR', 0));
  1079. var LCoefGR = LCoefsGR[LLevel];
  1080. var LCoefFine = 1;
  1081. var re2 = /<b>&nbsp;\*&nbsp;(\d+\.\d+) штраф трудоголика\.<\/b>/gim;
  1082. var res2;
  1083. if ((res2 = re2.exec(LTD.parentNode.innerHTML)) != null)
  1084. LCoefFine = parseFloat(res2[1]);
  1085. var LRealZP = FloatFormat(LZP * LCoefGR * LCoefFine);
  1086.  
  1087. var LTitle =
  1088. 'Зарплата: ' + LZP + '\n' +
  1089. 'Реальная зарплата: ' + LRealZP + '\n' +
  1090. 'Уровень ГР: ' + LLevel + '\n' +
  1091. 'Кофицциэнт ГР: ' + LCoefGR + '\n' +
  1092. 'Штраф трудоголика: ' + ((LCoefFine == 1) ? 'Отсутствует' : LCoefFine);
  1093. LB.innerHTML = LB.innerHTML +
  1094. ' (<font style="font-size:12px" color="red" title="' + LTitle + '">' + LRealZP + '</font>)';
  1095. }
  1096. }
  1097. }
  1098.  
  1099. function SaveLevelGR()
  1100. {
  1101. //var re = /^([\d]+)$/gim;
  1102. var re = /Гильдия Рабочих: ([\d]+) /gim;
  1103. var res;
  1104. if ((res = re.exec(document.body.innerHTML)) != null)
  1105. GM_setValue('LevelGR', res[1]);
  1106. }
  1107.  
  1108. function InitIsWorking()
  1109. {
  1110. var b = document.querySelector("body");
  1111. if (location.pathname=='/home.php' && document.querySelector("img[src$='i/s_defence.gif']"))
  1112. {
  1113. var work_unemployed = '\u0412\u044B \u043D\u0438\u0433\u0434\u0435 \u043D\u0435 \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442\u0435';
  1114. // vychislenie vremeni servera (s podderzkoj scripta time_seconds)
  1115. var time_home = /\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u0442\u0440\u043e\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0447\u0435\u0440\u0435\u0437 (\d+)/;
  1116. var time_home2 = / \u0441 (\d+):(\d+)<\/td>/;
  1117.  
  1118. var LIsWorking = true;
  1119. // podhvatyvanie vremeni okonchaniya raboty s home.php i ego proverka
  1120. if ( time_home.exec( b.innerHTML ) )
  1121. LIsWorking = true;
  1122. else if ( time_home2.exec( b.innerHTML ) )
  1123. LIsWorking = true;
  1124. else
  1125. if ( b.innerHTML.match( work_unemployed ) )
  1126. LIsWorking = false;
  1127. GM_setValue('IsWorking', LIsWorking);
  1128. }
  1129. if ( location.pathname=='/object_do.php' )
  1130. {
  1131. var work_obj_do = '\u0412\u044b \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443';
  1132. if ( b.innerHTML.match( work_obj_do ) )
  1133. GM_setValue('IsWorking', true);
  1134. }
  1135. }
  1136.  
  1137. function ProcessMain()
  1138. {
  1139. InitIsWorking();
  1140. AddWorkFindHref();
  1141. ProcessReturn();
  1142. if (location.href.indexOf('/object-info.php') > -1)
  1143. AddRealZPInfo();
  1144. if (location.href.indexOf('/home.php') > -1)
  1145. SaveLevelGR();
  1146. }
  1147.  
  1148. ProcessMain();