Nexus Clash Stat Bars

Adds bars to AP HP and MP

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Для установки этого скрипта вам необходимо установить расширение, такое как Tampermonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==UserScript==
// @name        Nexus Clash Stat Bars
// @namespace   http://userscripts.org/users/125692
// @description Adds bars to AP HP and MP
// @include        http://nexusclash.com/modules.php?name=Game*
// @include        http://www.nexusclash.com/modules.php?name=Game*
// @grant          GM_getValue
// @grant          GM_setValue 
// @grant          GM_addStyle
// @version     1.08
// ==/UserScript==
//for nexus clash. this script
// adds coloured bars to under AP/HP/MP to provide visual referenece to depletion of these stats.

try{	
if (!this.GM_getValue || (this.GM_getValue.toString && this.GM_getValue.toString().indexOf("not supported")>-1)) {
    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];
    };
  }
} catch (err) { console.log('Test if GM_getValue supported error:\n' + err.message); }

//check if start screen and store max values.
var isstart = document.evaluate(
	"//h2[starts-with(.,'Welcome back to Nexus Clash!')]", 
	document, 
	null,
	XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
	null);

if (isstart.snapshotLength == 1) {
	//we on start screen.
	//Store max ap/hp/mp values.
	var charlinks = document.evaluate( 
		"//a[starts-with(@href,'modules.php?name=Game&op=character&id=')]",
		document,
		null,
		XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
		null );
	var charid;
	var charmaxhp=0;
	var charmaxap=0;
	var charmaxmp=0;
	if (charlinks.snapshotLength > 1) {//found some charlinks
		var charlink=0;
		for (i=0;charlink=charlinks.snapshotItem(i);i++){
			//alert(i);
			charid=charlink.href.match(/id=(\d+)/)[1];
			
			charlink=charlink.parentNode.nextElementSibling.nextElementSibling;
			charmaxap=charlink.textContent.match(/\/(\d+)/)[1];
			
			charlink=charlink.nextElementSibling;
			charmaxhp=charlink.textContent.match(/\/(\d+)/)[1];
			
			charlink=charlink.nextElementSibling;
			charmaxmp=charlink.textContent.match(/\/(\d+)/)[1];	
			
			//now store 'em away
			GM_setValue("maxap"+charid,charmaxap);
			GM_setValue("maxhp"+charid,charmaxhp);
			GM_setValue("maxmp"+charid,charmaxmp);		
		} 
	}
	return; //as that is all we want to do as we are on the start screen
}


//we not on start screen so we probably in game so apply rest of script.
//add styles
GM_addStyle(".barap{height:6px;background-color:#505050;}");//COLOUR FOR BACKGROUND OF AP BAR ##0000ff is blue	
GM_addStyle(".barhp{height:6px;background-color:#ff0000;}"); //COLOUR FOR BACKGROUND OF HP BAR ##FF0000 is red
GM_addStyle(".barmp{height:6px;background-color:#0050f0;}");//COLOUR FOR BACKGROUND OF MP BAR ##8000ff is purple	
GM_addStyle(".barslider{height:5px;position:absolute;left:0px;background-color:#00ff00;}");// SET COLOUR FOR FOREGROUND OF BAR 00ff00 is green
GM_addStyle(".statbardiv{width:100%;position:absolute;top:20px;bottom:0px;left:0px;right:0px;}");
GM_addStyle(".bartd{position:relative;}");

var OVERMAXCOLOUR="#0000FF";//colour to make bar for when over max


//ADD COLOUR BARS TO AP/HP/MP
if(document.getElementById("CharacterInfo")){

	var charinfodiv=document.getElementById("CharacterInfo");
	var charlinks = document.evaluate( 
		".//a[starts-with(@href,'modules.php?name=Game&op=character&id=')]",
		charinfodiv,
		null,
		XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
		null );
	var charid=0;
	if (charlinks.snapshotLength==1){
			charid=charlinks.snapshotItem(0).href.match(/id=(\d+)/)[1];
	}
	var charmax = new Array();//lol at this way. makes code a bit shorter in for
	charmax[0]=GM_getValue("maxap"+charid,0);
	charmax[1]=GM_getValue("maxhp"+charid,0);
	charmax[2]=GM_getValue("maxmp"+charid,0);
  //alert("heh");
	if (charmax[0]&&charmax[1]&&charmax[2]){//only if all are true(ie we got a proper value)
		for(i=0;i<3;i++){//for each stat add bar
		
			var statbardiv=document.createElement('div');
			var backdiv=document.createElement('div');
			var frontdiv=document.createElement('div');	
			
			statbardiv.className="statbardiv";
			backdiv.className = i==0?"barap":i==1?"barhp":"barmp";
			frontdiv.className="barslider";
			
			var font=charinfodiv.getElementsByTagName("font")[i];//get font
			charstat=font.innerHTML.match(/-?\d+/); //get ap/hp/mp  and if -ve
			if(i==1){//the hp doesn't refill automatically most of the time.
				backdiv.title=charstat+"/"+charmax[i]+" Need "+
				(Number(charmax[i])-Number(charstat))+"hp healed";
			}
			else{// for ap and mp
				backdiv.title = charstat+"/"+charmax[i]+" Full in "+ 
				(Number(charmax[i])-Number(charstat))/4+" hours";//assume ap/mp +1 per tick
			}
	

			var frontwidth=Math.round(100*(Number(charstat)/Number(charmax[i])));
			if (frontwidth>100){//for some reason we over max
				frontwidth=100;
				frontdiv.style.backgroundColor=OVERMAXCOLOUR;//set to blue to signify over max
			}
			else if (frontwidth<0){//for some reason we at -ve values
				frontwidth=0;
			}
			frontdiv.style.width=""+frontwidth+"%";//Doing it as %;
			frontdiv.title=charstat+"/"+charmax[i];
			//alert('here');
			var hptd = charinfodiv.getElementsByTagName("td")[i+2];
			hptd.className='bartd';
			backdiv.appendChild(frontdiv);
			statbardiv.appendChild(backdiv);
			hptd.appendChild(statbardiv);
		}
	}
}// ==UserScript==
// @name        Nexus Clash Stat Bars
// @namespace   http://userscripts.org/users/125692
// @description Adds bars to AP HP and MP
// @include        http://nexusclash.com/modules.php?name=Game*
// @include        http://www.nexusclash.com/modules.php?name=Game*
// @grant          GM_getValue
// @grant          GM_setValue 
// @grant          GM_addStyle
// @version     1.07
// ==/UserScript==
//for nexus clash. this script
// adds coloured bars to under AP/HP/MP to provide visual referenece to depletion of these stats.

try{	
if (!this.GM_getValue || (this.GM_getValue.toString && this.GM_getValue.toString().indexOf("not supported")>-1)) {
    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];
    };
  }
} catch (err) { console.log('Test if GM_getValue supported error:\n' + err.message); }

//check if start screen and store max values.
var isstart = document.evaluate(
	"//h2[starts-with(.,'Welcome back to Nexus Clash!')]", 
	document, 
	null,
	XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
	null);

if (isstart.snapshotLength == 1) {
	//we on start screen.
	//Store max ap/hp/mp values.
	var charlinks = document.evaluate( 
		"//a[starts-with(@href,'modules.php?name=Game&op=character&id=')]",
		document,
		null,
		XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
		null );
	var charid;
	var charmaxhp=0;
	var charmaxap=0;
	var charmaxmp=0;
	if (charlinks.snapshotLength > 1) {//found some charlinks
		var charlink=0;
		for (i=0;charlink=charlinks.snapshotItem(i);i++){
			//alert(i);
			charid=charlink.href.match(/id=(\d+)/)[1];
			
			charlink=charlink.parentNode.nextElementSibling.nextElementSibling;
			charmaxap=charlink.textContent.match(/\/(\d+)/)[1];
			
			charlink=charlink.nextElementSibling;
			charmaxhp=charlink.textContent.match(/\/(\d+)/)[1];
			
			charlink=charlink.nextElementSibling;
			charmaxmp=charlink.textContent.match(/\/(\d+)/)[1];	
			
			//now store 'em away
			GM_setValue("maxap"+charid,charmaxap);
			GM_setValue("maxhp"+charid,charmaxhp);
			GM_setValue("maxmp"+charid,charmaxmp);		
		} 
	}
	return; //as that is all we want to do as we are on the start screen
}


//we not on start screen so we probably in game so apply rest of script.
//add styles
GM_addStyle(".barap{height:5px;background-color:#505050;}");//COLOUR FOR BACKGROUND OF AP BAR ##0000ff is blue	
GM_addStyle(".barhp{height:5px;background-color:#ff0000;}"); //COLOUR FOR BACKGROUND OF HP BAR ##FF0000 is red
GM_addStyle(".barmp{height:5px;background-color:#0050f0;}");//COLOUR FOR BACKGROUND OF MP BAR ##8000ff is purple	
GM_addStyle(".barslider{height:5px;position:absolute;left:0px;background-color:#00ff00;}");// SET COLOUR FOR FOREGROUND OF BAR 00ff00 is green
GM_addStyle(".statbardiv{width:100%;position:absolute;top:20px;bottom:0px;left:0px;right:0px;}");
GM_addStyle(".bartd{position:relative;}");

var OVERMAXCOLOUR="#0000FF";//colour to make bar for when over max


//ADD COLOUR BARS TO AP/HP/MP
if(document.getElementById("CharacterInfo")){

	var charinfodiv=document.getElementById("CharacterInfo");
	var charlinks = document.evaluate( 
		".//a[starts-with(@href,'modules.php?name=Game&op=character&id=')]",
		charinfodiv,
		null,
		XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
		null );
	var charid=0;
	if (charlinks.snapshotLength==1){
			charid=charlinks.snapshotItem(0).href.match(/id=(\d+)/)[1];
	}
	var charmax = new Array();//lol at this way. makes code a bit shorter in for
	charmax[0]=GM_getValue("maxap"+charid,0);
	charmax[1]=GM_getValue("maxhp"+charid,0);
	charmax[2]=GM_getValue("maxmp"+charid,0);
  //alert("heh");
	if (charmax[0]&&charmax[1]&&charmax[2]){//only if all are true(ie we got a proper value)
		for(i=0;i<3;i++){//for each stat add bar
		
			var statbardiv=document.createElement('div');
			var backdiv=document.createElement('div');
			var frontdiv=document.createElement('div');	
			
			statbardiv.className="statbardiv";
			backdiv.className = i==0?"barap":i==1?"barhp":"barmp";
			frontdiv.className="barslider";
			
			var font=charinfodiv.getElementsByTagName("font")[i];//get font
			charstat=font.innerHTML.match(/-?\d+/); //get ap/hp/mp  and if -ve
			if(i==1){//the hp doesn't refill automatically most of the time.
				backdiv.title=charstat+"/"+charmax[i]+" Need "+
				(Number(charmax[i])-Number(charstat))+"hp healed";
			}
			else{// for ap and mp
				backdiv.title = charstat+"/"+charmax[i]+" Full in "+ 
				(Number(charmax[i])-Number(charstat))/4+" hours";//assume ap/mp +1 per tick
			}
	

			var frontwidth=Math.round(100*(Number(charstat)/Number(charmax[i])));
			if (frontwidth>100){//for some reason we over max
				frontwidth=100;
				frontdiv.style.backgroundColor=OVERMAXCOLOUR;//set to blue to signify over max
			}
			else if (frontwidth<0){//for some reason we at -ve values
				frontwidth=0;
			}
			frontdiv.style.width=""+frontwidth+"%";//Doing it as %;
			frontdiv.title=charstat+"/"+charmax[i];
			//alert('here');
			var hptd = charinfodiv.getElementsByTagName("td")[i+2];
			hptd.className='bartd';
			backdiv.appendChild(frontdiv);
			statbardiv.appendChild(backdiv);
			hptd.appendChild(statbardiv);
		}
	}
}