hwm_work_find

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

当前为 2015-11-28 提交的版本,查看 最新版本

  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.00
  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. // ==/UserScript==
  29.  
  30. var version = '1.53';
  31. var str_url = 'https://greasyfork.org/uk/scripts/13911-hwm-work-find';
  32. var str_script_name = 'Поиск и установка ГР';
  33. var str_url_aut = '/sms-create.php?mailto=Pahan&subject=Скрипт: '+str_script_name+' v'+version+'. Найдена ошибка:';
  34.  
  35. if (typeof GM_deleteValue != 'function') {
  36. this.GM_getValue=function (key,def) {return localStorage[key] || def;};
  37. this.GM_setValue=function (key,value) {return localStorage[key]=value;};
  38. this.GM_deleteValue=function (key) {return delete localStorage[key];};
  39.  
  40. this.GM_addStyle=function (key) {
  41. var style = document.createElement('style');
  42. style.textContent = key;
  43. document.querySelector("head").appendChild(style);
  44. }
  45. }
  46. if (typeof GM_listValues != 'function') {
  47. this.GM_listValues=function () {
  48. var values = [];
  49. for (var i=0; i<localStorage.length; i++) {
  50. values.push(localStorage.key(i));
  51. }
  52. return values;
  53. }
  54. }
  55.  
  56. function addEvent(elem, evType, fn) {
  57. // elem["on" + evType] = fn;
  58. if (elem.addEventListener) {
  59. elem.addEventListener(evType, fn, false);
  60. }
  61. else if (elem.attachEvent) {
  62. elem.attachEvent("on" + evType, fn);
  63. }
  64. else {
  65. elem["on" + evType] = fn;
  66. }
  67. }
  68.  
  69. function $(id) { return document.querySelector(id); }
  70.  
  71. function URLAttrValueGet(attr_name, aurl)
  72. {
  73. attr_name = attr_name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  74. var regexS = "[\\?&]" + attr_name + "=([^&#]*)";
  75. var regex = new RegExp( regexS );
  76. var results = regex.exec( aurl );
  77. if( results == null )
  78. return "";
  79. else
  80. return results[1];
  81. }
  82.  
  83. function Ajax(AMethod, AURL, AParams, ACallBackFunc)
  84. {
  85. var LRequest = new XMLHttpRequest();
  86. LRequest.open(AMethod, AURL, true);
  87. LRequest.overrideMimeType('text/html; charset=windows-1251');
  88. LRequest.send(AParams);
  89. LRequest.onreadystatechange = function()
  90. {
  91. if (LRequest.readyState == 4)
  92. {
  93. ACallBackFunc(LRequest.responseText);
  94. }
  95. };
  96. }
  97.  
  98. function Trim(AText)
  99. {
  100. return AText.replace(/^\s+|\s+$|^(&nbsp;)+|(&nbsp;)+$/g, '');
  101. }
  102.  
  103. function DeleteCRLF(AText)
  104. {
  105. return AText.replace(/[\n\r]/g, ' ').replace(/\s{2,}/g, ' ');
  106. }
  107.  
  108. //-----------------------------------
  109.  
  110. // cX_Y координаты по карте
  111. var Pahan_locX =
  112. {
  113. c50_50: 1, //Empire Capital
  114. c51_50: 2, //East River
  115. c50_49: 3, //Tiger's Lake
  116. c51_49: 4, //Rogue's Wood
  117. c50_51: 5, //Wolf's Dale
  118. c50_48: 6, //Peaceful Camp
  119. c49_51: 7, //Lizard's Lowland
  120. c49_50: 8, //Green Wood
  121. c49_48: 9, //Eagle's Nest //Inferno portal 2
  122. c50_52: 10, //Portal Ruins //Inferno portal 1
  123. c51_51: 11, //Dragon's Caves
  124. c49_49: 12, //Shining Spring
  125. c48_49: 13, //Sunny City
  126. c52_50: 14, //Magma Mines
  127. c52_49: 15, //Bear' Mountain
  128. c52_48: 16, //Fairy Trees
  129. c53_50: 17, //Harbour City
  130. c53_49: 18, //Mythril Coast //Inferno portal 3
  131. c51_52: 19, //Great Wall
  132. c51_53: 20, //Titans' Valley
  133. c52_53: 21, //Fishing Village
  134. c52_54: 22, //Kingdom Castle
  135. c48_48: 23, //Ungovernable Steppe
  136. c51_48: 24, //Crystal Garden
  137. c49_52: 25, //Empty //East Island (Old Location)
  138. c49_52: 26, //The Wilderness
  139. c48_50: 27 //Sublime Arbor
  140.  
  141. }
  142.  
  143. // Массив локаций
  144. var Pahan_locArr = new Array(
  145. // 0i 1x 2y 3r 4ne 5nr
  146. [] ,
  147. [ 1 , 50 , 50 , 1 , 'Empire Capital' , 'Столица Империи' ] ,
  148. [ 2 , 51 , 50 , 1 , 'East River' , 'Восточная Река' ] ,
  149. [ 3 , 50 , 49 , 1 , 'Tiger\'s Lake' , 'Тигриное Озеро' ] ,
  150. [ 4 , 51 , 49 , 1 , 'Rogue\'s Wood' , 'Лес Разбойников' ] ,
  151. [ 5 , 50 , 51 , 1 , 'Wolf\'s Dale' , 'Долина Волков' ] ,
  152. [ 6 , 50 , 48 , 1 , 'Peaceful Camp' , 'Мирный Лагерь' ] ,
  153. [ 7 , 49 , 51 , 1 , 'Lizard\'s Lowland' , 'Равнина Ящеров' ] ,
  154. [ 8 , 49 , 50 , 1 , 'Green Wood' , 'Зелёный Лес' ] ,
  155. [ 9 , 49 , 48 , 1 , 'Eagle\'s Nest' , 'Орлиное Гнездо' ] ,
  156. [ 10 , 50 , 52 , 1 , 'Portal\'s ruins' , 'Руины Портала' ] ,
  157. [ 11 , 51 , 51 , 1 , 'Dragon\'s Caves' , 'Пещеры Драконов' ] ,
  158. [ 12 , 49 , 49 , 1 , 'Shining Spring' , 'Сияющий Родник' ] ,
  159. [ 13 , 48 , 49 , 1 , 'Sunny City' , 'Солнечный Город' ] ,
  160. [ 14 , 52 , 50 , 1 , 'Magma Mines' , 'Магма Шахты' ] ,
  161. [ 15 , 52 , 49 , 1 , 'Bear\' Mountain' , 'Медвежья Гора' ] ,
  162. [ 16 , 52 , 48 , 1 , 'Fairy Trees' , 'Магический Лес' ] ,
  163. [ 17 , 53 , 50 , 1 , 'Harbour City ' , 'Портовый Город' ] ,
  164. [ 18 , 53 , 49 , 1 , 'Mythril Coast' , 'Мифриловый Берег' ] ,
  165. [ 19 , 51 , 52 , 1 , 'Great Wall' , 'Великая Стена' ] ,
  166. [ 20 , 51 , 53 , 1 , 'Titans\' Valley' , 'Равнина Титанов' ] ,
  167. [ 21 , 52 , 53 , 1 , 'Fishing Village' , 'Рыбачье Село' ] ,
  168. [ 22 , 52 , 54 , 1 , 'Kingdom Castle' , 'Замок Королевства' ] ,
  169. [ 23 , 48 , 48 , 1 , 'Ungovernable Steppe' , 'Непокорная Степь' ] ,
  170. [ 24 , 51 , 48 , 1 , 'Crystal Garden' , 'Кристальный Сад' ] ,
  171. [] ,
  172. [ 26 , 49 , 52 , 1 , 'The Wilderness' , 'Дикие Земли' ] ,
  173. [ 27 , 48 , 50 , 1 , 'Sublime Arbor' , 'Великое Древо' ]
  174. )
  175.  
  176. // location error
  177. // сначала путь берёт диагональ, а потом катет
  178. var Pahan_locP =
  179. {
  180. l1_14: 11 ,
  181. l1_17: 11 ,
  182. l1_26: 5 ,
  183. l1_27: 8 ,
  184.  
  185. l2_14: 15 ,
  186. l2_17: 15 ,
  187. l2_18: 15 ,
  188. l2_21: 11 ,
  189. l2_22: 11 ,
  190. l2_27: 1 ,
  191.  
  192. l3_14: 4 ,
  193. l3_16: 4 ,
  194. l3_17: 4 ,
  195. l3_26: 1 ,
  196. l3_27: 12 ,
  197.  
  198. l4_14: 15 ,
  199. l4_16: 15 ,
  200. l4_17: 15 ,
  201. l4_21: 2 ,
  202. l4_22: 2 ,
  203. l4_26: 2 ,
  204. l4_27: 3 ,
  205.  
  206. l5_14: 11 ,
  207. l5_17: 11 ,
  208. l5_19: 10 ,
  209. l5_20: 10 ,
  210. l5_21: 10 ,
  211. l5_22: 10 ,
  212. l5_27: 8 ,
  213.  
  214. l6_2: 4 ,
  215. l6_16: 4 ,
  216. l6_26: 3 ,
  217. l6_27: 12 ,
  218.  
  219. l7_13: 8 ,
  220. l7_14: 5 ,
  221. l7_17: 5 ,
  222. l7_23: 8 ,
  223. l7_26: 5 ,
  224.  
  225. l8_14: 5 ,
  226. l8_17: 5 ,
  227. l8_26: 5 ,
  228.  
  229. l9_16: 3 ,
  230. l9_26: 3 ,
  231.  
  232. l10_27: 5 ,
  233.  
  234. l11_3: 2 ,
  235. l11_6: 2 ,
  236. l11_9: 2 ,
  237. l11_21: 19 ,
  238. l11_22: 19 ,
  239. l11_26: 10 ,
  240. l11_27: 5 ,
  241.  
  242. l12_14: 3 ,
  243. l12_16: 3 ,
  244. l12_17: 3 ,
  245. l12_26: 1 ,
  246.  
  247. l13_14: 12 ,
  248. l13_16: 12 ,
  249. l13_17: 12 ,
  250.  
  251. l14_1: 11 ,
  252. l14_2: 15 ,
  253. l14_3: 15 ,
  254. l14_4: 15 ,
  255. l14_6: 15 ,
  256. l14_8: 11 ,
  257. l14_9: 15 ,
  258. l14_12: 15 ,
  259. l14_13: 15 ,
  260. l14_18: 15 ,
  261. l14_21: 11 ,
  262. l14_22: 11 ,
  263. l14_23: 15 ,
  264. l14_24: 15 ,
  265. l14_27: 11 ,
  266.  
  267. // l15_6: 4 ,
  268. // l15_9: 4 ,
  269. l15_23: 24 ,
  270. l15_26: 2 ,
  271. l15_27: 4 ,
  272.  
  273. l16_1: 15 ,
  274. l16_2: 15 ,
  275. l16_3: 15 ,
  276. l16_4: 15 ,
  277. l16_5: 15 ,
  278. l16_6: 15 ,
  279. l16_7: 15 ,
  280. l16_8: 15 ,
  281. l16_9: 15 ,
  282. l16_10: 15 ,
  283. l16_11: 15 ,
  284. l16_12: 15 ,
  285. l16_13: 15 ,
  286. l16_19: 15 ,
  287. l16_20: 15 ,
  288. l16_23: 15 ,
  289. l16_24: 15 ,
  290. l16_26: 15 ,
  291. l16_27: 15 ,
  292.  
  293. l17_2: 15 ,
  294. l17_5: 14 ,
  295. l17_7: 14 ,
  296. l17_10: 14 ,
  297. l17_11: 14 ,
  298. l17_19: 14 ,
  299. l17_20: 14 ,
  300. l17_21: 14 ,
  301. l17_22: 14 ,
  302. l17_26: 14 ,
  303. l17_27: 14 ,
  304.  
  305. l18_1: 15 ,
  306. l18_2: 15 ,
  307. l18_5: 15 ,
  308. l18_6: 15 ,
  309. l18_7: 15 ,
  310. l18_8: 15 ,
  311. l18_9: 15 ,
  312. l18_10: 17 ,
  313. l18_11: 17 ,
  314. l18_14: 17 ,
  315. l18_19: 17 ,
  316. l18_20: 17 ,
  317. l18_21: 17 ,
  318. l18_22: 17 ,
  319. l18_23: 15 ,
  320. l18_24: 15 ,
  321. l18_26: 17 ,
  322. l18_27: 15 ,
  323.  
  324. l19_1: 11 ,
  325. l19_3: 11 ,
  326. l19_5: 10 ,
  327. l19_6: 11 ,
  328. l19_7: 10 ,
  329. l19_8: 10 ,
  330. l19_9: 11 ,
  331. l19_12: 10 ,
  332. l19_13: 10 ,
  333. l19_14: 11 ,
  334. l19_15: 11 ,
  335. l19_16: 11 ,
  336. l19_17: 11 ,
  337. l19_18: 11 ,
  338. l19_23: 10 ,
  339. l19_27: 10 ,
  340.  
  341. l20_14: 19 ,
  342. l20_15: 19 ,
  343. l20_16: 19 ,
  344. l20_17: 19 ,
  345. l20_18: 19 ,
  346. l20_27: 10 ,
  347.  
  348. l21_14: 19 ,
  349. l21_15: 19 ,
  350. l21_16: 19 ,
  351. l21_17: 19 ,
  352. l21_18: 19 ,
  353. l21_27: 19 ,
  354.  
  355. l22_17: 21 ,
  356. l22_18: 21 ,
  357. l22_27: 20 ,
  358.  
  359. l23_16: 15 ,
  360. l23_26: 1 ,
  361. l23_27: 13 ,
  362.  
  363. l24_16: 15 ,
  364. l24_21: 2 ,
  365. l24_22: 2 ,
  366. l24_26: 2 ,
  367. l24_27: 3 ,
  368.  
  369. l26_7: 5 ,
  370. l26_8: 5 ,
  371. l26_9: 5 ,
  372. l26_11: 10 ,
  373. l26_12: 5 ,
  374. l26_13: 5 ,
  375. l26_14: 10 ,
  376. l26_17: 10 ,
  377. l26_20: 10 ,
  378. l26_21: 10 ,
  379. l26_22: 10 ,
  380. l26_23: 5 ,
  381. l26_24: 5 ,
  382. l26_27: 5 ,
  383.  
  384. l27_1: 8 ,
  385. l27_2: 8 ,
  386. l27_3: 12 ,
  387. l27_4: 12 ,
  388. l27_5: 7 ,
  389. l27_6: 12 ,
  390. l27_9: 12 ,
  391. l27_10: 7 ,
  392. l27_11: 7 ,
  393. l27_14: 11 ,
  394. l27_15: 4 ,
  395. l27_16: 15 ,
  396. l27_17: 15 ,
  397. l27_18: 12 ,
  398. l27_19: 10 ,
  399. l27_20: 10 ,
  400. l27_21: 20 ,
  401. l27_22: 20 ,
  402. l27_23: 13 ,
  403. l27_24: 12 ,
  404. l27_26: 8
  405.  
  406. }
  407.  
  408. var Pahan_trtime = new Array( 120 , 84 , 60 , 36 , 24 , 12 ) ; // время перемещения по прямой
  409. var Pahan_trtimed = new Array( 169 , 118 , 84 , 50 , 33 , 16 ) ; // время перемещения по диагонали
  410.  
  411. function getMoveTimeL( cz , mz , t ) {
  412. /* cz текущий сектор обсчёта
  413. mz конечный сектор обсчёта
  414. t сумма времени
  415. */
  416. if(mz == 25)
  417. alert(111);
  418.  
  419. // если прибыли в конечный пункт
  420. if( mz == cz ) {
  421. // var myT = new Date(t*1000)
  422. // myTs = myT.getSeconds()
  423. // return myT.getMinutes() + ':' + ( myTs < 10 ? '0' : '' ) + myTs ;
  424. return t;
  425. }
  426.  
  427. var nz = 0; // следующий сектор, к которому надо действительно двигаться
  428.  
  429. var kC = Pahan_locArr[cz]; //координаты текущие
  430. if(kC == undefined) return 0;
  431. var kM = Pahan_locArr[mz]; //координаты назначения
  432.  
  433. id1 = eval( 'Pahan_locP.l' + cz + '_' + mz ) //id исключение
  434.  
  435. // если есть исключения, следующий сектор будет равен ид исключения
  436. if( id1 && id1 > 0 ) {
  437. nz = id1 ;
  438. }
  439.  
  440. // если исключения, то переназначаем координаты назначения
  441. if( nz != 0 ) var kM = Pahan_locArr[nz] ;
  442.  
  443. var tx = kM[1] > kC[1] ? 1 : ( kM[1] == kC[1] ? 0 : -1 ) ;
  444. var ty = kM[2] > kC[2] ? 1 : ( kM[2] == kC[2] ? 0 : -1 ) ;
  445. var nx = parseInt( kC[1] ) + tx ;
  446. var ny = parseInt( kC[2] ) + ty ;
  447.  
  448. // t = ( ty == 0 || tx == 0 ) ? t + 120 : t + 169 ;
  449. t = ( ty == 0 || tx == 0 ) ? t + Pahan_trtime[0] : t + Pahan_trtimed[0] ;
  450. var id = eval( 'Pahan_locX.c' + nx + '_' + ny ) ;
  451. // t = t + ' ' + id + '(' + nz + ')' ;
  452.  
  453. return getMoveTimeL( id , mz , t );
  454. }
  455.  
  456. function GetCurrLocation(AHTML)
  457. {
  458. //!! var re = /<[^>]*href='([^']*)'[^>]*>&raquo;&raquo;&raquo;<\/a>/gim;
  459. var re = /<param[^>]*\/map.swf[^>]*>\s*<param[^>]*value="([^"]*)"[^>]*>/gim;
  460. var res;
  461. if ((res = re.exec(AHTML)) != null)
  462. {
  463. return res[1].split('=')[1].split(':')[1];
  464. }
  465. else
  466. return 1;
  467. }
  468.  
  469. function GetSortedLocations(LCurrLocation)
  470. {
  471. var LLocs = new Array();
  472. for (var i = 0; i < Pahan_locArr.length; i++)
  473. {
  474. var LLoc = Pahan_locArr[i];
  475. if (LLoc && (LLoc.length == 6))
  476. {
  477. LLoc[6] = getMoveTimeL(LCurrLocation, LLoc[0], 0);
  478. // alert('i: ' + i + ', LCurrLocation: ' + LCurrLocation + ', LLoc: ' + LLoc);
  479. LLocs.push(LLoc);
  480. }
  481. }
  482. LLocs.sort(function(a, b) {
  483. return a[6] - b[6];
  484. });
  485. return LLocs;
  486. }
  487.  
  488.  
  489. //EnumLocations();
  490.  
  491. //ShowFindWorkHTML('TEST!!!!!!!!!!!!!!!!', false, '');
  492.  
  493. // ---------------------------------
  494.  
  495. WorkResultFound = false;
  496. SortedLocations = null;
  497. GoldSumm = 0;
  498. WorkCountSumm = 0;
  499.  
  500. function close_find_work_info()
  501. {
  502. bg = $('#bgOverlayFindWork') ;
  503. bgc = $('#bgCenterFindWork') ;
  504. if( bg ) {
  505. bg.style.display = bgc.style.display = 'none' ;
  506. }
  507. WorkResultFound = true;
  508. }
  509.  
  510. function setCheck(ch) {
  511. if( GM_getValue( ch ) && GM_getValue( ch ) == 1 )
  512. GM_setValue( ch , 0 );
  513. else
  514. GM_setValue( ch , 1 );
  515. }
  516.  
  517. function save_min_zp()
  518. {
  519. var LValue = parseInt($('#id_min_zp').value);
  520. GM_setValue('min_zp', LValue);
  521. }
  522.  
  523. function save_max_loc_count()
  524. {
  525. var LValue = parseInt($('#id_max_loc_count').value);
  526. GM_setValue('max_loc_count', LValue);
  527. }
  528.  
  529. function ShowFindWorkHTML(AFindWorkHTML, AIsResult, AAdditionInfo)
  530. {
  531. if (WorkResultFound)
  532. return;
  533. WorkResultFound = AIsResult;
  534. if (WorkResultFound)
  535. {
  536. GM_setValue('LastFindWorkHTML', AFindWorkHTML);
  537. }
  538. if (AAdditionInfo != '')
  539. {
  540. AAdditionInfo = '<tr><td><font color="red"><b>' + AAdditionInfo + '</b></font></td></tr>';
  541. }
  542. bg = $('#bgOverlayFindWork') ;
  543. bgc = $('#bgCenterFindWork') ;
  544. if( !bg ) {
  545. bg = document.createElement('div') ;
  546. bg.id = 'bgOverlayFindWork' ;
  547. document.body.appendChild( bg );
  548. bg.style.position = 'absolute' ;
  549. bg.style.left = '0';
  550. bg.style.width = '100%';
  551. bg.style.height = '100%';
  552. bg.style.background = "#000000";
  553. bg.style.opacity = "0.5";
  554. bg.addEventListener( "click", close_find_work_info , false );
  555.  
  556. bgc = document.createElement('div') ;
  557. bgc.id = 'bgCenterFindWork' ;
  558. document.body.appendChild( bgc );
  559. bgc.style.position = 'absolute' ;
  560. bgc.style.width = '600px';
  561. bgc.style.background = "#F6F3EA";
  562. bgc.style.left = ( ( document.body.offsetWidth - 600 ) / 2 ) + 'px' ;
  563. bgc.style.zIndex = "1105";
  564. }
  565. bgc.innerHTML =
  566. '<div style="border:1px solid #abc;padding:5px;margin:2px;">' +
  567. ' <div style="float:right;border:1px solid #abc;width:15px;height:15px;text-align:center;cursor:pointer;" id="bt_closeFindWork" title="Закрыть">x</div>' +
  568. ' <center>' +
  569. ' <table>' +
  570. ' <tr>' +
  571. ' <td><b>'+str_script_name+' <font style="color:#0070FF;">'+version+'</font></b><hr/></td>' +
  572. ' </tr>' +
  573. ' ' + AAdditionInfo +
  574. ' <tr>' +
  575. ' <td>' + AFindWorkHTML + '</td>' +
  576. ' </tr>' +
  577. ' <tr><td><hr/></td></tr>' +
  578. ' <tr><td><b>Настройки:</b></td></tr>' +
  579. ' <tr>' +
  580. ' <td>' +
  581. ' <label style="cursor:pointer;"><input type="checkbox" id="id_return_after_work" title=""> Возвращатся на страницу после установки на работу</lable>' +
  582. ' </td>' +
  583. ' </tr>' +
  584. ' <tr>' +
  585. ' <td>' +
  586. ' <div><input type="text" style="width:40;" id="id_min_zp"> Минимальная зарплата, не предлагать меньшую </div>' +
  587. ' <div>Значение "0" - подходит любая зарплата</div>' +
  588. ' </td>' +
  589. ' </tr>' +
  590. ' <tr>' +
  591. ' <td>' +
  592. ' <label style="cursor:pointer;"><input type="checkbox" id="id_scan_other_locations" title=""> Искать на других локациях (только с транспортом)</lable>' +
  593. ' </td>' +
  594. ' </tr>' +
  595. ' <td>' +
  596. ' <div><input type="text" style="width:40;" id="id_max_loc_count"> Количество соседних локаций для сканирования</div>' +
  597. ' <div>Значение "0" - сканировать все локации на карте</div>' +
  598. ' </td>' +
  599. ' <tr><td><hr/></td></tr>' +
  600. ' <tr>' +
  601. ' <td style="font-weight:bold;font-size:10px;" >' +
  602. ' <a style="font-weight:bold;font-size:10px;" href="'+str_url+'">Проверить обновление скрипта.</a>' +
  603. ' <a style="font-weight:bold;font-size:10px;" href="'+str_url_aut+'">Сообщить автору о найденной ошибке.</a>' +
  604. ' </td>' +
  605. ' </tr>' +
  606. ' <tr>' +
  607. ' <td style="font-weight:bold;font-size:10px;" >' +
  608. ' Автор: <a style="font-weight:bold;font-size:10px;" href="http://www.heroeswm.ru/pl_info.php?id=30547">Pahan.</a>' +
  609. ' </td>' +
  610. ' </tr>' +
  611. ' </table>' +
  612. ' </center>' +
  613. '</div>';
  614.  
  615. addEvent($("#bt_closeFindWork"), 'click', close_find_work_info);
  616. bg.style.top = (-document.body.scrollTop)+'px';
  617. bgc.style.top = ( document.body.scrollTop + 100 ) + 'px';
  618. bg.style.display = bgc.style.display = 'block' ;
  619. var check_return = $('#id_return_after_work');
  620. check_return.checked = GM_getValue('return_after_work', 0) == 1 ? 'checked' : '' ;
  621. addEvent(check_return, 'click', function(){setCheck('return_after_work')});
  622. var Lmin_zp = $("#id_min_zp");
  623. Lmin_zp.value = parseInt(GM_getValue('min_zp', '0'));
  624. Lmin_zp.addEventListener( "change", save_min_zp , false );
  625. Lmin_zp.addEventListener( "keyup", save_min_zp , false );
  626. Lmin_zp.addEventListener( "paste", save_min_zp , false );
  627. var check_other_locations = $('#id_scan_other_locations');
  628. check_other_locations.checked = GM_getValue('scan_other_locations', 0) == 1 ? 'checked' : '' ;
  629. addEvent(check_other_locations, 'click', function(){setCheck('scan_other_locations')});
  630. var Lmax_loc_count = $("#id_max_loc_count");
  631. Lmax_loc_count.value = parseInt(GM_getValue('max_loc_count', '0'));
  632. Lmax_loc_count.addEventListener( "change", save_max_loc_count , false );
  633. Lmax_loc_count.addEventListener( "keyup", save_max_loc_count , false );
  634. Lmax_loc_count.addEventListener( "paste", save_max_loc_count , false );
  635. }
  636.  
  637. function GetObjectInfo(AObjHTML)
  638. {
  639. AObjHTML = DeleteCRLF(AObjHTML);
  640. var re = /(<table[^>]*><tr[^>]*><td[^>]*>Тип: .*)Список рабочих/gim;
  641. LInfo = (res = re.exec(AObjHTML)) ? res[1] : '';
  642. re = /Свободных мест: <b>\d+<\/b>/gim;
  643. LInfo += (res = re.exec(AObjHTML)) ? res[0] : '';
  644.  
  645. return LInfo;
  646. }
  647.  
  648. function ObjectProcess(ALocation, AObjHTML)
  649. {
  650. AObjHTML = DeleteCRLF(AObjHTML);
  651. if (ALocation == 0)
  652. {
  653. var re = /Вы уже устроены\./gim;
  654. var re2 = /Прошло меньше часа с последнего устройства на работу\. Ждите\./gim;
  655. var res;
  656. if (((res = re.exec(AObjHTML)) != null) || (res = re2.exec(AObjHTML)) != null)
  657. ShowFindWorkHTML(res[0], true, '');
  658. else
  659. {
  660. re = /Свободных мест\: <b>0<\/b>/gim;
  661. if ((res = re.exec(AObjHTML)) != null)
  662. {
  663. }
  664. else
  665. {
  666. // re = /<form[^>]*name="working"[^>]*>.*<\/form>/gim;
  667. re = /<form[^>]*name=working[^>]*>.*<\/form>/gim;
  668. if ((res = re.exec(AObjHTML)) != null)
  669. {
  670. GM_setValue('LastURL', location.href);
  671. LLastCode = GM_getValue('last_code', '');
  672. if (LLastCode != '')
  673. LLastCode = 'Последний введенный код: ' + LLastCode;
  674. ShowFindWorkHTML(GetObjectInfo(AObjHTML) + res[0], true, LLastCode);
  675. }
  676. }
  677. }
  678. }
  679. else
  680. {
  681. re = /Свободных мест\: <b>(\d+)<\/b>/gim;
  682. if ((res = re.exec(AObjHTML)) != null)
  683. {
  684. var LWorkCount = parseInt(res[1]);
  685. if (LWorkCount > 0)
  686. {
  687. re = /<tr><td>Баланс: <\/td><td><b><table[^>]*><tr><td><img[^>]*gold\.gif[^>]*><\/td><td><b>([\d,]+)<\/b><\/td><\/tr><\/table><\/b><\/td><\/tr>/gim;
  688. if ((res = re.exec(AObjHTML)) != null)
  689. {
  690. var LGold = parseInt(res[1].replace(/,/g, ''));
  691. if (LGold > 1000)
  692. {
  693. GoldSumm += LGold;
  694. WorkCountSumm += LWorkCount;
  695. }
  696. }
  697. }
  698. }
  699. }
  700. }
  701.  
  702. function FindWorkObject(ALocation, APlaceIndex, AObjIndex, APlaceHTML)
  703. {
  704. var re = /<b>(\d+)<\/b>&nbsp;<\/td><td[^>]*>&nbsp;<a[^>]*href='([^']*)'[^>]*>&raquo;&raquo;&raquo;<\/a>/gim;
  705. var res;
  706. var LLink;
  707. var LZP, LMinZP;
  708. var LFindCount = 0;
  709. while ((res = re.exec(APlaceHTML)) != null)
  710. {
  711. LZP = parseInt(res[1]);
  712. LLink = res[2];
  713. LMinZP = parseInt(GM_getValue('min_zp', '0'));
  714. // alert('LZP: ' + LZP + ', LLink: ' + LLink);
  715. if ((LMinZP == 0) || (LZP >= LMinZP))
  716. {
  717. if (LFindCount == AObjIndex)
  718. {
  719. Ajax('GET', LLink, null,
  720. function(AObjHTML)
  721. {
  722. ObjectProcess(ALocation, AObjHTML);
  723. if (!WorkResultFound)
  724. FindWorkObject(ALocation, APlaceIndex, AObjIndex + 1, APlaceHTML);
  725. }
  726. );
  727. }
  728. LFindCount++;
  729. }
  730. }
  731.  
  732. // $("#find_work").innerHTML = $("#find_work").innerHTML + '<br>' +
  733. // 'AObjIndex: ' + AObjIndex + ', LFindCount: ' + LFindCount;
  734. if (!WorkResultFound && (AObjIndex >= LFindCount))
  735. FindWorkProcess(ALocation, APlaceIndex + 1);
  736. }
  737. function FindWorkProcess(ALocation, APlaceIndex)
  738. {
  739. var PlaceCodes = ['sh', 'fc', 'mn'];
  740. var PlaceNames = ['Производства', 'Обработка', 'Добыча'];
  741.  
  742. if (APlaceIndex < PlaceCodes.length)
  743. {
  744. if ((ALocation != 0) && (APlaceIndex == 0))
  745. {
  746. GoldSumm = 0;
  747. WorkCountSumm = 0;
  748. }
  749. var LLocXY = '';
  750. if (ALocation != 0)
  751. LLocXY = 'cx=' + SortedLocations[ALocation][1] + '&cy=' + SortedLocations[ALocation][2] + '&';
  752. var LURL = '/map.php?' + LLocXY + 'st=' + PlaceCodes[APlaceIndex];
  753. Ajax('GET', LURL, null,
  754. function(AHTML)
  755. {
  756. if (!SortedLocations)
  757. SortedLocations = GetSortedLocations(GetCurrLocation(DeleteCRLF(AHTML)));
  758. ShowFindWorkHTML('Сканирование локации ' + SortedLocations[ALocation][5] +
  759. ' ' + PlaceNames[APlaceIndex] + '...<br>', false, '');
  760. FindWorkObject(ALocation, APlaceIndex, 0, AHTML);
  761. }
  762. );
  763. }
  764. else
  765. {
  766. if ((ALocation > 0) && (GoldSumm > 2000) && (WorkCountSumm > 5))
  767. {
  768. var LURL = 'http://www.heroeswm.ru/move_sector.php?id=' + SortedLocations[ALocation][0];
  769. ShowFindWorkHTML('На локации ' + SortedLocations[ALocation][5] + ' найдено:<br>' +
  770. 'Рабочих мест: <b>' + WorkCountSumm + '</b><br>' +
  771. 'Доступное для зарплаты золото: <b>' + GoldSumm + '</b><br>' +
  772. 'Перейти: <a href="' + LURL + '">' + SortedLocations[ALocation][5] + '</a>', true, ''
  773. );
  774. }
  775. else
  776. {
  777. var LMaxLocCount = -1;
  778. if (GM_getValue('scan_other_locations', 0) == 1)
  779. LMaxLocCount = parseInt(GM_getValue('max_loc_count', '0'));
  780. ALocation++;
  781. if ((LMaxLocCount == 0) || (ALocation <= LMaxLocCount))
  782. FindWorkProcess(ALocation, 0);
  783. else
  784. ShowFindWorkHTML('Поиск работы завершен.<br>' +
  785. 'Все места заняты или недостаточно золота на объектах.<br>' +
  786. 'Смените локацию, или попробуйте позже.', true, ''
  787. );
  788. }
  789. }
  790. }
  791.  
  792. function AddWorkFindHref()
  793. {
  794. var LLinks = document.querySelectorAll('a[href^="map.php"]');
  795. var LLink;
  796. if (LLinks)
  797. {
  798. for(i = 0; i < LLinks.length; i++)
  799. {
  800. LLink = LLinks[i];
  801. if (LLink.innerHTML == '<b>Карта</b>')
  802. {
  803. LNewHref = document.createElement('a');
  804. LNewHref.href = '#';
  805. LNewHref.style = "text-decoration: none;color: #f5c137;"
  806. LNewHref.innerHTML = '<b>ГР</b>';
  807. LNewHref.title = 'Найти место работы';
  808. LNewHref.id = 'find_work';
  809. LLink.parentNode.appendChild(LNewHref);
  810. addEvent($("#find_work"), "click",
  811. function()
  812. {
  813. WorkResultFound = false;
  814. GM_deleteValue('LastFindWorkHTML');
  815. GM_deleteValue('LastURL');
  816. ShowFindWorkHTML('Сканирование локации...<br>', false, '');
  817. FindWorkProcess(0, 0);
  818. }
  819. );
  820. }
  821. }
  822. }
  823. }
  824.  
  825. function PrecessReturn()
  826. {
  827. var LLastFindWorkHTML = GM_getValue('LastFindWorkHTML', '');
  828. var LLastURL = GM_getValue('LastURL', '');
  829. if ((LLastFindWorkHTML != '') && (LLastURL != ''))
  830. {
  831. // <font color="red"><b>Введен неправильный код.</b></font>
  832. var re = /<font[^>]*><b>(Введен неправильный код\.)<\/b><\/font>/gim;
  833. var re2 = /<font[^>]*><b>(На объекте недостаточно золота\.)<\/b><\/font>/gim;
  834. var re3 = /<font[^>]*><b>(Нет рабочих мест\.)<\/b><\/font>/gim;
  835. var re4 = /<center>Вы устроены на работу\.<\/center>/gim;
  836. var res;
  837. var LCode = URLAttrValueGet('code', location.href);
  838. if ((res = re.exec(document.body.innerHTML)) != null)
  839. {
  840. var LStr = res[1] + '<br>Последний введенный код: ' + LCode;
  841. ShowFindWorkHTML(LLastFindWorkHTML, true, LStr);
  842. return;
  843. }
  844. if (((res = re2.exec(document.body.innerHTML)) != null)
  845. || ((res = re3.exec(document.body.innerHTML)) != null)
  846. ){
  847. GM_setValue('last_code', LCode);
  848. return;
  849. }
  850. GM_deleteValue('LastFindWorkHTML')
  851. GM_deleteValue('LastURL');
  852. GM_deleteValue('last_code');
  853. if ((GM_getValue('return_after_work', 0) == 1)
  854. && ((res = re4.exec(document.body.innerHTML)) != null)
  855. )
  856. {
  857. location.href = LLastURL;
  858. }
  859. }
  860. }
  861.  
  862. function ProcessMain()
  863. {
  864. AddWorkFindHref();
  865. PrecessReturn();
  866. }
  867.  
  868. ProcessMain();