hwm_work_find

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

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

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

//
// ==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();