hwm_work_find

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

当前为 2016-01-08 提交的版本,查看 最新版本

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

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址