// ==UserScript==
// @name HWM_HuntingExpirience
// @author Pahan https://greasyfork.org/uk/users/18377-pahan
// @namespace hwm_pahan
// @description Показывает опыт для охоты, автопропуск, настройки для перекачей
// @homepage https://greasyfork.org/en/users/18377-pahan
// @icon http://dcdn.heroeswm.ru/avatars/30/nc-5/30547.gif
// @version 1.2
// @encoding utf-8
// @include http://*heroeswm.ru/home.php*
// @include http://*heroeswm.ru/map.php*
// @grant GM_deleteValue
// @grant GM_getValue
// @grant GM_listValues
// @grant GM_setValue
// @grant GM_addStyle
// @grant GM_log
// @grant GM_openInTab
// @grant GM_xmlhttpRequest
// ==/UserScript==
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];
}
// -----------------------------------------------
var GlobalCultureName = location.href.match('lordswm') ? "en-US" : "ru-RU",
GlobalStrings = {
"ru-RU" : {
// Sell : "Пр-ь:",
},
"en-US" : {
// Sell : "Sell:",
}
},
GlobalLocalizedString = GlobalStrings[GlobalCultureName];
// -----------------------------------------------
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);
};
}
var
LMinExp = 999999;
function ExperienceProcess(AValue, ALink, AIndex)
{
if (LMinExp > AValue)
LMinExp = AValue;
var LID = 'hunt_exp_' + AIndex;
var LEl = $('#' + LID);
if (!LEl)
ALink.parentNode.innerHTML +=
'<br><spans style="color:red" id="' + LID + '">Опыт: ' + Math.ceil(AValue) + '</span>';
}
function ExperienceCalculate(AMobExp, ACount, ALevel)
{
var LExp = parseInt(AMobExp * ACount / 5);
var LExpCoef = parseFloat(GM_getValue('exp_coef', '1'));
if (ALevel >=3)
LExp = Math.max(LExp, ALevel * 70) * LExpCoef;
return LExp;
}
var
LExpAllFound = true;
function Run(ALevel, ALink, AIndex)
{
var
LMonster = ALink.href.split('=')[1],
LArr = ALink.parentNode.innerHTML.split('('),
LMonsterCount = -1,
LExperience;
if (LArr.length < 2)
return;
LMonsterCount = parseInt(LArr[1]);
var LExperience = GM_getValue(LMonster, '');
if (LExperience == '')
{
LExpAllFound = false;
Ajax('GET', ALink.href, null,
function(AHTML)
{
var
LIndex = 0,
LPage = document.body.appendChild(document.createElement('div')),
LParams = '';
LPage.style.position = 'absolute';
LPage.style.width = '0px';
LPage.style.height = '0px';
LPage.style.overflow = 'hidden';
LPage.innerHTML = AHTML;
LParams = LPage.querySelector('param[value*="M001"]').getAttribute('value').split('|')[1];
LIndex = LParams.length - 1;
while (isNaN(parseInt(LParams[LIndex])))
LIndex--;
LExperience = Number(LParams.substring(LIndex - 4, LIndex));
GM_setValue(LMonster, LExperience);
LParams = ExperienceCalculate(LExperience, LMonsterCount, ALevel);
ExperienceProcess(LParams, ALink, AIndex);
}
);
}
else
{
var
LParams = ExperienceCalculate(LExperience, LMonsterCount, ALevel);
ExperienceProcess(LParams, ALink, AIndex);
}
}
function links_process(ALinks)
{
for(var i = 0; i < ALinks.length; i++)
{
var LLink = ALinks[i];
Run(parseInt(GM_getValue('level', '0')), LLink, i);
}
}
function setCheck(ch) {
if( GM_getValue( ch ) && GM_getValue( ch ) == 1 )
GM_setValue( ch , 0 );
else
GM_setValue( ch , 1 );
}
function close_setting_form() {
bg = $('#bgOverlay1') ;
bgc = $('#bgCenter1') ;
if( bg ) {
bg.style.display = bgc.style.display = 'none' ;
}
}
function recalc_coef()
{
var LExpCoef = parseFloat(GM_getValue('exp_coef', '1'));
var LScriptExp = parseInt($('#id_script_exp').value);
var LRealExp = parseInt($('#id_real_exp').value);
var LNewExpCoef = LRealExp / (LScriptExp / LExpCoef);
GM_setValue('exp_coef', LNewExpCoef.toFixed(3));
open_setting_form();
}
function save_coef()
{
var LNewExpCoef = parseFloat($('#id_exp_coef').value);
GM_setValue('exp_coef', LNewExpCoef.toFixed(3));
}
function save_skip_exp()
{
var LSkiptExp = parseInt($('#id_skip_exp').value);
GM_setValue('skip_exp', LSkiptExp);
}
function open_setting_form()
{
bg = $('#bgOverlay1') ;
bgc = $('#bgCenter1') ;
if( !bg ) {
bg = document.createElement('div') ;
bg.id = 'bgOverlay1' ;
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_setting_form , false );
bgc = document.createElement('div') ;
bgc.id = 'bgCenter1' ;
document.body.appendChild( bgc );
bgc.style.position = 'absolute' ;
bgc.style.width = '400px';
bgc.style.background = "#F6F3EA";
bgc.style.left = ( ( document.body.offsetWidth - 400 ) / 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_close1" title="Закрыть">x</div>' +
' <center>' +
' <table>' +
' <tr>' +
' <td><b>Настройки:</b></td>' +
' </tr>' +
' <tr>' +
' <td>' +
' <div>Если Вы перекач и для вас опыт показывает не верно</div>' +
' <div>Измените свой коэфициент опыта</div>' +
' <div>Или пересчетайте через калькулятор</div>' +
' <div><input type="text" style="width:80;" id="id_exp_coef"> Коэфициент увеличения опыта</div>' +
' </td>' +
' </tr>' +
' <tr>' +
' <td><b>Калькулятор коэфициента опыта:</b></td>' +
' </tr>' +
' <tr>' +
' <td>' +
' <div><input type="text" style="width:80;" id="id_script_exp"> Опыт который посчитал вам скрипт</div>' +
' <div><input type="text" style="width:80;" id="id_real_exp"> Реально полученый опыт</div>' +
' <div><input type="button" id="id_recalc_coef" value="Пересчитать"></div>' +
' </td>' +
' </tr>' +
' <tr>' +
' <td><b>Автоматический пропуск охоты:</b></td>' +
' </tr>' +
' <tr>' +
' <td>' +
' <div><input type="text" style="width:80;" id="id_skip_exp"> Опыт для автоматического пропуска </div>' +
' <div>Значение "0" - не пропускать охоты автоматически</div>' +
' </td>' +
' </tr>' +
' </table>' +
' </center>' +
'</div>';
$("#bt_close1").addEventListener( "click", close_setting_form , false );
var Lexp_coef = $("#id_exp_coef");
Lexp_coef.value = parseFloat(GM_getValue('exp_coef', '1'));
Lexp_coef.addEventListener( "change", save_coef , false );
Lexp_coef.addEventListener( "keyup", save_coef , false );
Lexp_coef.addEventListener( "paste", save_coef , false );
$("#id_recalc_coef").addEventListener( "click", recalc_coef , false );
var Lskip_exp = $("#id_skip_exp");
Lskip_exp.value = parseInt(GM_getValue('skip_exp', '0'));
Lskip_exp.addEventListener( "change", save_skip_exp , false );
Lskip_exp.addEventListener( "keyup", save_skip_exp , false );
Lskip_exp.addEventListener( "paste", save_skip_exp , false );
bg.style.top = (-document.body.scrollTop)+'px';
bgc.style.top = ( document.body.scrollTop + 100 ) + 'px';
bg.style.display = bgc.style.display = 'block' ;
}
function add_settings()
{
var LDiv = $("#hwm_hant_options");
if (LDiv)
return;
var LLinks = document.querySelectorAll('a[href^="ecostat.php"]');
if (LLinks && (LLinks.length > 0))
{
var LLink = LLinks[0];
LDiv = document.createElement('div');
LDiv.innerHTML = '<div style="text-decoration:underline;cursor:pointer;font-weight:bold;font-size:10px;" id="hwm_hant_options">Настройки калькулятора опыта охоты';
LLink.parentNode.appendChild(LDiv);
$("#hwm_hant_options").addEventListener( "click", open_setting_form , false );
}
}
function calc_hant()
{
LExpAllFound = true;
var LLinks = document.querySelectorAll('a[href^="army_info.php"]');
var LLink;
if (LLinks)
links_process(LLinks);
add_settings();
if(LExpAllFound)
{
var LSkipExp = parseInt(GM_getValue('skip_exp', '0'));
if ((LMinExp != 999999) && (LSkipExp > 0) && (LMinExp > LSkipExp))
document.location.href = 'http://www.heroeswm.ru/map.php?action=skip';
}
else
setTimeout(calc_hant, 1000);
}
function save_level()
{
var list = document.getElementsByTagName("b");
for(var i = 0; i < list.length; i++)
{
var elem = list[i];
if (elem.innerHTML.indexOf('\u0411\u043E\u0435\u0432\u043E\u0439\u0020\u0443\u0440\u043E\u0432\u0435\u043D\u044C') === 0)
{
var regex = /(\d+)/;
var regex_res = regex.exec(elem.innerHTML);
if (regex_res)
{
var LLevel = parseInt(regex_res[1]);
if (LLevel)
GM_setValue('level', LLevel);
}
return;
}
}
}
function ProcessMain()
{
if (location.href.indexOf('/map.php') > -1)
calc_hant();
else
if (location.href.indexOf('/home.php') > -1)
save_level();
}
ProcessMain();