Nexus Clash Stat Bars

Adds bars to AP HP and MP

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 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);
		}
	}
}