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);
		}
	}
}