hwm_work_find

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

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