hwm_work_find

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

Verzia zo dňa 16.11.2015. Pozri najnovšiu verziu.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

//
// ==UserScript==
// @name           hwm_work_find
// @author         Pahan https://greasyfork.org/uk/users/18377-pahan
// @namespace      hwm_pahan
// @description    Поиск и установка на работу с любой страницы игры
// @homepage       https://greasyfork.org/uk/scripts/13911-hwm-work-find
// @icon           http://dcdn.heroeswm.ru/avatars/30/nc-5/30547.gif
// @version        1.51
// @encoding 	   utf-8
// @include        http://www.heroeswm.ru/*
// @include        http://qrator.heroeswm.ru/*
// @include        http://178.248.235.15/*
// @include        http://www.lordswm.com/*
// @exclude        */rightcol.php*
// @exclude        */ch_box.php*
// @exclude        */chat*
// @exclude        */ticker.html*
// @exclude        */frames*
// @exclude        */brd.php*
// @grant          GM_deleteValue
// @grant          GM_getValue
// @grant          GM_listValues
// @grant          GM_setValue
// @grant          GM_addStyle
// @grant          GM_log
// @grant          GM_openInTab
// ==/UserScript==

var version = '1.51';
var str_url = 'https://greasyfork.org/uk/scripts/13911-hwm-work-find';
var str_script_name = 'Поиск и установка ГР';
var str_url_aut = '/sms-create.php?mailto=Pahan&subject=Скрипт: '+str_script_name+' v'+version+'. Найдена ошибка:';

if (typeof GM_deleteValue != 'function') {
	this.GM_getValue=function (key,def) {return localStorage[key] || def;};
	this.GM_setValue=function (key,value) {return localStorage[key]=value;};
	this.GM_deleteValue=function (key) {return delete localStorage[key];};

	this.GM_addStyle=function (key) {
		var style = document.createElement('style');
		style.textContent = key;
		document.querySelector("head").appendChild(style);
	}
}
if (typeof GM_listValues != 'function') {
	this.GM_listValues=function () {
		var values = [];
		for (var i=0; i<localStorage.length; i++) {
			values.push(localStorage.key(i));
		}
		return values;
	}
}

function addEvent(elem, evType, fn) {
//    elem["on" + evType] = fn;
	if (elem.addEventListener) {
		elem.addEventListener(evType, fn, false);
	}
	else if (elem.attachEvent) {
		elem.attachEvent("on" + evType, fn);
	}
	else {
		elem["on" + evType] = fn;
	}
}

function $(id) { return document.querySelector(id); } 

function URLAttrValueGet(attr_name, aurl)
{
 attr_name = attr_name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
 var regexS = "[\\?&]" + attr_name + "=([^&#]*)";
 var regex = new RegExp( regexS );
 var results = regex.exec( aurl );
 if( results == null )
  return "";
 else
  return results[1];
}

function Ajax(AMethod, AURL, AParams, ACallBackFunc)
{
  var LRequest = new XMLHttpRequest();
  LRequest.open(AMethod, AURL, true);
  LRequest.overrideMimeType('text/html; charset=windows-1251');
  LRequest.send(AParams);
  LRequest.onreadystatechange = function()
  {
    if (LRequest.readyState == 4)
    {
      ACallBackFunc(LRequest.responseText);
    }  
  };
} 

function Trim(AText)
{
  return AText.replace(/^\s+|\s+$|^(&nbsp;)+|(&nbsp;)+$/g, '');
}

// ---------------------------------

WorkResultFound = false;

function close_find_work_info()
{
  bg = $('#bgOverlayFindWork') ;
  bgc = $('#bgCenterFindWork') ;
  if( bg ) {
      bg.style.display = bgc.style.display = 'none' ;
  }
}

function ShowFindWorkHTML(AFindWorkHTML, AIsResult)
{
  WorkResultFound = AIsResult;
  
  bg = $('#bgOverlayFindWork') ;
  bgc = $('#bgCenterFindWork') ;
  if( !bg ) {
      bg = document.createElement('div') ;
      bg.id = 'bgOverlayFindWork' ;
      document.body.appendChild( bg );
      bg.style.position = 'absolute' ;
      bg.style.left = '0';
      bg.style.width = '100%';
      bg.style.height = '100%';
      bg.style.background = "#000000";
      bg.style.opacity = "0.5";
      bg.addEventListener( "click", close_find_work_info , false );

      bgc = document.createElement('div') ;
      bgc.id = 'bgCenterFindWork' ;
      document.body.appendChild( bgc );
      bgc.style.position = 'absolute' ;
      bgc.style.width = '600px';
      bgc.style.background = "#F6F3EA";
      bgc.style.left = ( ( document.body.offsetWidth - 600 ) / 2 ) + 'px' ;
      bgc.style.zIndex = "1105";
  }
  
  bgc.innerHTML = 
    '<div style="border:1px solid #abc;padding:5px;margin:2px;">' +
    '  <div style="float:right;border:1px solid #abc;width:15px;height:15px;text-align:center;cursor:pointer;" id="bt_closeFindWork" title="Закрыть">x</div>' +
    '  <center>' +
    '    <table>' +
    '      <tr>' +
    '        <td><b>'+str_script_name+' <font style="color:#0070FF;">'+version+'</font></b><hr/></td>' +
    '      </tr>' +
    '      <tr>' +
    '        <td>' + AFindWorkHTML + '</td>' +
    '      </tr>' +
    '      <tr><td><hr/></td></tr>' +
    '      <tr>' +
    '        <td style="font-weight:bold;font-size:10px;" >' +
    '          <a style="font-weight:bold;font-size:10px;" href="'+str_url+'">Проверить обновление скрипта.</a>' +
    '          <a style="font-weight:bold;font-size:10px;" href="'+str_url_aut+'">Сообщить автору о найденной ошибке.</a>' +
    '        </td>' +
    '      </tr>' +
    '      <tr>' +
    '        <td style="font-weight:bold;font-size:10px;" >' +
    '          Автор: <a style="font-weight:bold;font-size:10px;" href="http://www.heroeswm.ru/pl_info.php?id=30547">Pahan.</a>' +
    '        </td>' +
    '      </tr>' +
    '    </table>' +    '',
    '  </center>' +
    '</div>';

  $("#bt_closeFindWork").addEventListener( "click", close_find_work_info , false );    
  
  bg.style.top = (-document.body.scrollTop)+'px';
  bgc.style.top = ( document.body.scrollTop + 100 ) + 'px';
  bg.style.display = bgc.style.display = 'block' ;    
}

function GetObjectInfo(AObjHTML)
{
  var LFirst = AObjHTML.indexOf('Тип:');
  var LEnd = AObjHTML.indexOf('Окончание смены');
  var LLast = AObjHTML.indexOf('</td>', LEnd);
  var LInfo = AObjHTML.substr(LFirst, LLast - LFirst);
  
  var re = /Свободных мест: <b>\d+<\/b>/gim;
  LInfo += (res = re.exec(AObjHTML)) ? res[0] : '';

  return LInfo;
}

function ObjectProcess(AObjHTML)
{
  AObjHTML = AObjHTML.replace(/[\n\r]/g, ' ').replace(/\s{2,}/g, ' ');
  var re = /Вы уже устроены\./gim;
  var re2 = /Прошло меньше часа с последнего устройства на работу\. Ждите\./gim;
  var res;
  if (((res = re.exec(AObjHTML)) != null) || (res = re2.exec(AObjHTML)) != null)
    ShowFindWorkHTML(res[0], true);
  else
  {
    re = /Свободных мест\: <b>0<\/b>/gim;
    if ((res = re.exec(AObjHTML)) != null)
    {}
    else
    {
//      re = /<form[^>]*name="working"[^>]*>.*<\/form>/gim;
      re = /<form[^>]*name=working[^>]*>.*<\/form>/gim;
      if ((res = re.exec(AObjHTML)) != null)
      {
        ShowFindWorkHTML(GetObjectInfo(AObjHTML) + res[0], true);
      }
    }
  }  
} 

function FindWorkObject(APlaceIndex, AObjIndex, APlaceHTML)
{
//  href="object-info.php?id=163">»»»</a>
  var re = /<[^>]*href='([^']*)'[^>]*>&raquo;&raquo;&raquo;<\/a>/gim;
  var res;
  var LLink;  
  var LFindCount = 0;
  while ((res = re.exec(APlaceHTML)) != null)
  {
    LLink = res[1];
    if (LFindCount == AObjIndex)
    {
      Ajax('GET', LLink, null,
        function(AObjHTML)
        {
          ObjectProcess(AObjHTML);
          if (!WorkResultFound)
            FindWorkObject(APlaceIndex, AObjIndex + 1, APlaceHTML);
        }
      );
    }
    LFindCount++;
  }

//  $("#find_work").innerHTML = $("#find_work").innerHTML + '<br>' +     
//    'AObjIndex: ' + AObjIndex + ', LFindCount: ' + LFindCount;
          
  if (!WorkResultFound && (AObjIndex >= LFindCount)) 
    FindWorkProcess(APlaceIndex + 1);
}

function FindWorkProcess(APlaceIndex)
{
  var works = ['sh', 'fc', 'mn'];
  var names = ['Производства', 'Обработка', 'Добыча'];

  if (APlaceIndex >= works.length)
  {
    ShowFindWorkHTML('Поиск работы завершен.<br>' +
      'Все места заняты или недостаточно золота на объектах.<br>' +
      'Смените локацию, или попробуйте позже.', true);
    return;
  }

  ShowFindWorkHTML('Сканирование ' + names[APlaceIndex] + '...', false);
  Ajax('GET', '/map.php?st=' + works[APlaceIndex], null,
    function(AHTML)
    {
      FindWorkObject(APlaceIndex, 0, AHTML);
    }
  );
}

function AddWorkFindHref()
{
  var LLinks = document.querySelectorAll('a[href^="map.php"]');
  var LLink;
  if (LLinks)
  {                
    for(i = 0; i < LLinks.length; i++)
    {                   
      LLink = LLinks[i];
      if (LLink.innerHTML == '<b>Карта</b>')
      {
        LNewHref = document.createElement('a');
        LNewHref.href = '#';
        LNewHref.style = "text-decoration: none;color: #f5c137;" 
        LNewHref.innerHTML = '<b>ГР</b>';
        LNewHref.title = 'Найти место работы';
        LNewHref.id = 'find_work';
        LLink.parentNode.appendChild(LNewHref);
        
        addEvent($("#find_work"), "click",
          function()
          {
            WorkResultFound = false;
            FindWorkProcess(0);
          }
        );
      }
    }
  }
}

function ProcessMain()
{  
  AddWorkFindHref();
}

ProcessMain();