Regeneration [GW]

Более подробная информация о выздоровлении персонажа.

K instalaci tototo skriptu si budete muset nainstalovat rozšíření jako Tampermonkey, Greasemonkey nebo Violentmonkey.

You will need to install an extension such as Tampermonkey to install this script.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Userscripts.

You will need to install an extension such as Tampermonkey to install this script.

K instalaci tohoto skriptu si budete muset nainstalovat manažer uživatelských skriptů.

(Už mám manažer uživatelských skriptů, nechte mě ho nainstalovat!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Už mám manažer uživatelských stylů, nechte mě ho nainstalovat!)

// ==UserScript==
// @name             Regeneration [GW]
// @namespace
// @description      Более подробная информация о выздоровлении персонажа.
// @include          http://www.ganjawars.ru/me/*
// @version          1.01
// @author           W_or_M, modified by TWW for Chrome
// @namespace https://greasyfork.org/users/154957
// ==/UserScript==

(function() {

// НАСТРОЙКИ
//-----------------------------------    
var sound80  = 22;  // звуковое оповещение при 80%, для отключения 0
var sound100 = 22;  // звуковое оповещение при 100%, для отключения 0
var color    = 'blue'; // цвет надписи, формат - #XXXXXX (X - от 0 до F)
//-----------------------------------

var state;
var hp_current;
var hp_max;
var hp_speed;

// куки
function setCookie (name, value, expires, path, domain, secure) {
      document.cookie = name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}

function getCookie(name) {
	var cookie = " " + document.cookie;
	var search = " " + name + "=";
	var setStr = null;
	var offset = 0;
	var end = 0;
	if (cookie.length > 0) {
		offset = cookie.indexOf(search);
		if (offset != -1) {
			offset += search.length;
			end = cookie.indexOf(";", offset)
			if (end == -1) {
				end = cookie.length;
			}
			setStr = unescape(cookie.substring(offset, end));
		}
	}
	return(setStr);
}

function playSound(soundId) {
    
    // создаем контейнер, если еще не создан
    if (root.document.getElementById('flashcontent') == null) {
        
        var div = root.document.createElement('div');
        div.id = 'flashcontent';
        root.document.body.appendChild(div);
        
    }

    root.document.getElementById('flashcontent').innerHTML = '<embed height="1" width="1" flashvars="soundPath=/sounds/'+ soundId +'.mp3" allowscriptaccess="always" quality="high" bgcolor="#F5fff5" name="gr_server" id="gr_server" src="http://images.ganjawars.ru/i/play.swf" type="application/x-shockwave-flash"/>';
    
}

// установка состояния
function setState(stateId) {
    
    state = stateId;
    setCookie('regen_state', stateId, 0, '/');
    
}

var root = typeof unsafeWindow != 'undefined' ? unsafeWindow : window;

// мы на главной
if (root.location.href.indexOf('http://www.ganjawars.ru/me/') >= 0) {
    	
	var tmp = root.document.head.innerHTML;	
	var myArray2 = tmp.match(/<script[^>]*>([\s\S]*?)<\/script>/)[1];
	hp_speed = parseFloat(/var hp_speed=(.*)\;/i.exec(myArray2)[1]);

    // ищем "здоровье"
    var b = root.document.getElementsByTagName('b');
    for (var i = 0, l = b.length; i < l; i++) {
        
        // нашли
        if (b[i].innerHTML == 'Здоровье:' && b[i].parentNode.tagName == 'FONT') {
            
            var node = b[i].parentNode.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling;
			
			hp_current = parseInt(b[i].parentNode.nextSibling.nextSibling.innerHTML,10);
			var myArray = b[i].parentNode.nextSibling.nextSibling.parentNode.innerHTML;
			hp_max = parseInt(/\<\/div\>\&nbsp\;\/\&nbsp\;(\d+)\<br\>/ig.exec(myArray)[1],10);			
            break;
            
        }
        
    }
    
    
    if (node != 'undefined') {

        state = getCookie('regen_state')
        
        // выздоровление
        var p = root.document.createElement('p');
        p.id = 'regen_hp';
        p.style.margin = 0;
        p.style.padding = 0;
        p.style.color = color;
        //p.setAttribute('style', 'margin: 0;padding: 0;color: '+ color +';');
        p.innerHTML = ' &nbsp;» <span style="font-weight: bold">Выздоровление:</span> <span id="regen_hp_percent"></span>';
        node.parentNode.insertBefore(p, node);
        
        var regenHp = root.document.getElementById('regen_hp');

		updatehp();
    }
    
}

function updatehp()
{
	
	var obj = root.document.getElementById('regen_hp_percent');

	// старая функция
	hp_current = hp_current + hp_speed;
	var rnd = hp_speed > 1 ? 1 : 10;
	if (hp_current > hp_max) hp_current = hp_max;
	var res = Math.round(hp_current * rnd) / rnd;
	root.document.getElementById('hpdiv').innerHTML = res;
	
	// текущее хп в процентах
	var hpPercent = (hp_current / hp_max) * 100;
	hpPercent = hpPercent >= 100 ? 100 : hpPercent;
	obj.innerHTML = Math.floor(hpPercent) +'%';
	
	// время
	if (hpPercent < 80) {
		var sec = Math.floor(((hp_max * 0.8) - hp_current) / hp_speed);
		var date = new Date(sec * 1000);
		var split = date.getSeconds() < 10 ? ':0' : ':';
		var timeZone = Math.floor(date.getTimezoneOffset() / 60);
		obj.innerHTML += ', <span style="font-weight: bold">'+ ((date.getHours() + timeZone) > 0 ? date.getHours() + timeZone + ':' : '') + date.getMinutes() + split + date.getSeconds()  + '</span> (до 80%)';
	}

	if (hpPercent < 100) {
		var sec = Math.floor(((hp_max) - hp_current) / hp_speed);
		var date = new Date(sec * 1000);
		var split = date.getSeconds() < 10 ? ':0' : ':';
		var timeZone = Math.floor(date.getTimezoneOffset() / 60);
		obj.innerHTML += ', <span style="font-weight: bold">'+ ((date.getHours() + timeZone) > 0 ? date.getHours() + timeZone + ':' : '') + date.getMinutes() + split + date.getSeconds()  + '</span> (до 100%)';
		
	}

	if (hpPercent < 100 && hpPercent  >= 80 && (state == 0 || state == null)) {
		
		setState(1);
		
	}
	
	if (hpPercent >= 100 && state == 3) {
		
		setState(2);
		
	}

	// состояния
	// 0 - пустое
	// 1 - получили 80%
	// 2 - получили 100%
	// 3 - получили 80%, но еще не получили 100%
	// 4 - финиш
	if (state == null && state == 0) {
		
		
		
	} else if (state == 1 && sound80 > 0) {
		
		playSound(sound80);
		setState(3);
		
	} else if (state == 2 && sound100 > 0) {
		
		playSound(sound100);
		setState(4);
		
	} else if (state >= 3 && hpPercent < 100) {
		
		state = hpPercent < 80 ? 0 : 3;
		setState(state);
		
	}

	setTimeout(function(){updatehp()}, 1000);
}

})();