Player Progression Tracker

Stores player attributes for the Deeproute.com online football game

当前为 2018-03-09 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name           Player Progression Tracker
// @namespace      Deep Route
// @author         Triplex
// @version        1.3.3
// @description      Stores player attributes for the Deeproute.com online football game
// @grant          GM_getValue
// @grant          GM_setValue
// @include        http://deeproute.com/default.asp?js=oneplayer&lookatplayer=*&leagueno=*
// @include        http://deeproute.com/default.asp?js=oneplayer&lookatplayer=*&myleagueno=*
// @include        http://deeproute.com/?js=oneplayer&lookatplayer=*&leagueno=*
// @include        http://deeproute.com/?js=oneplayer&lookatplayer=*&myleagueno=*
// @include        http://deeproute.com/default.asp?js=rosters&myleagueno=*&myteamno=*
// @include        http://deeproute.com/?js=rosters&myleagueno=*&myteamno=*
// @include        http://deeproute.com/?js=oneplayer&leagueno=*&lookatplayer=*
// @include        http://deeproute.com/?js=oneplayer&myleagueno=*&lookatplayer=*
// @include        http://deeproute.com/default.asp?js=oneplayer&leagueno=*&lookatplayer=*
// ==/UserScript==

var prefix="DR_progress";
var run=0, attr=[], attrstr="", lgno=0, playerid=0, curryear=-1, counter=0, pidlist=[];

function addtr(intable, incol, isBold) {

	var tr1 = document.createElement("tr"), color;
	intable.appendChild(tr1);

	if (counter++%2===0) {
		color='#FFFFDD';
	}
	else {
		color='#EEFFFF';
	}

	for (var x=0; x<incol.length; x++) {

		var td1 = document.createElement("td");
		td1.setAttribute('align','center');
		var newDiv = document.createElement('div');
		newDiv.innerHTML=incol[x];
		td1.appendChild(newDiv);
		if (isBold || x===0) {
			td1.setAttribute('style', 'font-weight: bold;');
		}
		td1.setAttribute('bgcolor', color);

		tr1.appendChild(td1);
	}

}


function parseData(instr) {

	var ptr1=0, ptr2, ptr3, year, str1;

	alldata=[];

	while (1) {
		ptr2=instr.indexOf(":", ptr1);
		ptr3=instr.indexOf(".", ptr2+1);
		if (ptr2<0 || ptr3<0) {
			break;
		}
		var tmp=new Array (1);
		year=parseInt(instr.substring(ptr1, ptr2));
		str1=instr.substring(ptr2+1, ptr3);
		ptr1=ptr3+1;
		tmp[0]=year;

		for (var x=0; x<str1.length; x+=2) {
			ptr2=str1.substring(x, x+2);
			if (ptr2.substring(0, 1) == '0') {
				ptr3=ptr2.substring(1, 2);
				ptr2=ptr3;
			}
			tmp[tmp.length]=parseInt(ptr2);
		}

		alldata[alldata.length]=tmp;
	}


	for (var x=0; x<alldata.length; x++) {
		for (var y=x+1; y<alldata.length; y++) {
			if (alldata[x][0] > alldata[y][0]) {
				var tmp0=alldata[x];
				alldata[x]=alldata[y];
				alldata[y]=tmp0;
			}
		}
	}

}

function constructCols(inname, index1, index2) {

	var cols=[];
	cols[0]=inname;

	var gainStyling = "style='font-weight: bold; color: DarkGreen'";
	var lossStyling = "style='font-weight: bold; color: DarkRed'";

	for (var x=0; x<alldata.length; x++) {
		var cell = (alldata[x][index1]).toString() + "/" + (alldata[x][index2]).toString();
		if (x > 0) {
			var curDelta;
			var potDelta;
			var currentDeltaInt = alldata[x][index1] - alldata[x-1][index1];
			var potentialDeltaInt = alldata[x][index2] - alldata[x-1][index2];

			if (currentDeltaInt < 0) {
				curDelta = "<span class='attLoss' " + lossStyling + ">" + currentDeltaInt.toString() + "</span>";
			}
			else if (currentDeltaInt > 0) {
				curDelta = "<span class='attGain' " + gainStyling + ">+" + currentDeltaInt.toString() + "</span>";
			}
			else {
				curDelta = "+" + currentDeltaInt.toString();
			}

			if (potentialDeltaInt < 0) {
				potDelta = "<span class='potentialLoss' " + lossStyling + ">" + potentialDeltaInt.toString() + "</span>";
			}
			else if (potentialDeltaInt > 0) {
				potDelta = "<span class='potentialGain' " + gainStyling + ">+" + potentialDeltaInt.toString() + "</span>";
			}
			else {
				potDelta = "+" + potentialDeltaInt.toString();
			}

			cell = cell.concat("<span class='delta" + x + "' style='display: none'> (" + curDelta + "/" + potDelta + ")</span>");
		}
		cols[x+1]=cell;
	}

	cols[cols.length]=(attr[index1-1]).toString() + "/" + (attr[index2-1]).toString();
	return cols;
}


function print_progression() {

	var indexstr=prefix+"_"+lgno+"_"+playerid;
	var storedata=GM_getValue(indexstr, null);
	var divptr=document.getElementById("progress_mesg"), cols;

	if (storedata===null || storedata=="deleted") {
		divptr.innerHTML="No historical data is saved previously or data of this player is deleted";
	}
	else if (run==1) {
		divptr.innerHTML="Progression table is displayed already";
	}
	else {

		run=1;
		parseData(storedata);

		var outtable = document.createElement("table");
		outtable.setAttribute("border","1");
		outtable.setAttribute("cellspacing","0");
		outtable.setAttribute('style','width: 100%; table-layout: fixed');
		outtable.setAttribute('id',"combine table");

		cols=[];
		cols[0]="Season";
		for (var x=0; x<alldata.length; x++) {
			if (x === 0) {
				cols[x+1]=alldata[x][0];
			}
			else {
				cols[x+1]=alldata[x][0] + " " + addShowHideButtons(x);
			}
		}
		cols[cols.length]="Current";

		addtr(outtable, cols, 1);
		addtr(outtable, constructCols("Overall", 187, 188) ,0);
		addtr(outtable, constructCols("Strength/Size", 9, 10) ,0);
		addtr(outtable, constructCols("Stamina", 49, 50) ,0);
		addtr(outtable, constructCols("Toughness", 51, 52) ,0);
		addtr(outtable, constructCols("Athleticism", 57, 58) ,0);
		addtr(outtable, constructCols("Intelligence", 11, 12) ,0);
		addtr(outtable, constructCols("Leadership", 13, 14) ,0);
		addtr(outtable, constructCols("Discipline", 27, 28) ,0);
		addtr(outtable, constructCols("Clutch", 23, 24) ,0);
		addtr(outtable, constructCols("Consistency", 53, 54) ,0);
		addtr(outtable, constructCols("Passing Arm", 1, 2) ,0);
		addtr(outtable, constructCols("Passing Accuracy", 3, 4) ,0);
		addtr(outtable, constructCols("Handle Snap", 63, 64) ,0);
		addtr(outtable, constructCols("Escapability", 5, 6) ,0);
		addtr(outtable, constructCols("Speed/Size", 33, 34) ,0);
		addtr(outtable, constructCols("Footwork", 35, 36) ,0);
		addtr(outtable, constructCols("Cover Skills/Size", 81, 82) ,0);
		addtr(outtable, constructCols("Protect ball", 37, 38) ,0);
		addtr(outtable, constructCols("Shed Blocker", 59, 60) ,0);
		addtr(outtable, constructCols("Pass Catching", 15, 16) ,0);
		addtr(outtable, constructCols("Route", 17, 18) ,0);
		addtr(outtable, constructCols("First Step", 25, 26) ,0);
		addtr(outtable, constructCols("Run Blocking", 19, 20) ,0);
		addtr(outtable, constructCols("Pass Blocking", 21, 22) ,0);
		addtr(outtable, constructCols("Snapping", 61, 62) ,0);
		addtr(outtable, constructCols("Motor", 7, 8) ,0);
		addtr(outtable, constructCols("Read Opposition", 55, 56) ,0);
		addtr(outtable, constructCols("Tackling", 29, 30) ,0);
		addtr(outtable, constructCols("Leaping", 31, 32) ,0);
		addtr(outtable, constructCols("Feel Pressure", 45, 46) ,0);
		addtr(outtable, constructCols("Find Opening", 47, 48) ,0);
		addtr(outtable, constructCols("FG Accuracy", 41, 42) ,0);
		addtr(outtable, constructCols("Kicking Strength", 39, 40) ,0);
		addtr(outtable, constructCols("Punting Accuracy", 43, 44) ,0);

		divptr.innerHTML="Player Progression:";  

		var divptr=document.getElementById("progress_mesg");
		divptr.parentNode.insertBefore(outtable, divptr.nextSibling);
	}

	for (var i=1; i<alldata.length; i++) {
		var showButtonName = "showDelta" + i;
		var hideButtonName = "hideDelta" + i;
		var deltaSpanName = "delta" + i;
		var showDeltaButton = document.getElementById(showButtonName);
		showDeltaButton.addEventListener("click", showDelta.bind(null, deltaSpanName, showButtonName, hideButtonName), false);

		var hideDeltaButton = document.getElementById(hideButtonName);
		hideDeltaButton.addEventListener("click", hideDelta.bind(null, deltaSpanName, showButtonName, hideButtonName), false);
	}
}

function save_data() {

	var indexstr=prefix+"_"+lgno+"_"+playerid;
	var storedata=GM_getValue(indexstr, null);

	if ((storedata===null || storedata=="deleted") && attr!=="" && curryear!=-1) {
		GM_setValue(indexstr, curryear.toString()+":"+attrstr+".");
		var divptr=document.getElementById("progress_mesg");
		divptr.innerHTML="Attributes Saved";
	}
	else if (curryear!=-1) {
		parseData(storedata);
		var found=0;
		for (var x=0; x<alldata.length; x++) {
			if (alldata[x][0] == curryear) {
				found=1;
				break;
			}
		}

		var divptr=document.getElementById("progress_mesg");

		if (found===0) {
			GM_setValue(indexstr, storedata+curryear.toString()+":"+attrstr+".");
			divptr.innerHTML="Attributes Saved";
		}
		else {
			divptr.innerHTML="This season's attributes are already saved";
		}
	}
	else {
		var divptr=document.getElementById("progress_mesg");
		divptr.innerHTML="Save failed: Can't find current year info in the page. Try saving whole team instead";
	}
}

function save_all() {

	for (var x=0; x<pidlist.length; x++) {

		var indexstr=prefix+"_"+lgno+"_"+pidlist[x];
		var str1="pattnoinj"+pidlist[x];
		var attsptr=document.getElementsByName(str1);
		var atts=attsptr[0].value.toString();
		var storedata=GM_getValue(indexstr, null);

		if (storedata===null || storedata=="deleted") {
			GM_setValue(indexstr, curryear.toString()+":"+atts+".");
		}
		else {
			parseData(storedata);
			var found=0;
			for (var y=0; y<alldata.length; y++) {
				if (alldata[y][0] == curryear) {
					found=1;
					break;
				}
			}

			if (found===0) {
				GM_setValue(indexstr, storedata+curryear.toString()+":"+atts+".");
			}
		}
	}

	var divptr=document.getElementById("progress_all_mesg");
	divptr.innerHTML="Attributes of all players saved";

}

function delete_all() {

	var shouldDelete = confirm("are you sure you want to delete all records?"); 

	if (shouldDelete === true) {
		for (var x=0; x<pidlist.length; x++) {

			var indexstr=prefix+"_"+lgno+"_"+pidlist[x];
			var storedata=GM_getValue(indexstr, null);

			if (storedata!==null) {
				GM_setValue(indexstr, "deleted");
			}
		}

		var divptr=document.getElementById("progress_all_mesg");
		divptr.innerHTML="Attribuite records deleted";
	}

}

function delete_data() {

	var shouldDelete = confirm("are you sure you want to delete this player's records?"); 

	if (shouldDelete === true) {
		var indexstr=prefix+"_"+lgno+"_"+playerid;
		GM_setValue(indexstr, "deleted");
		var divptr=document.getElementById("progress_mesg");
		divptr.innerHTML="Old data deleted";
	}
}

function addShowHideButtons(x) {
	var buttons = "<a id='showDelta" + x + "' style='display: inline'>(+/-)</a>" + 
		"<a id='hideDelta" + x + "' style='display: none'>(+/-)</a>";
	return buttons;
}

// hide the difference in attributes from the previous year
function hideDelta(className, showButtonName, hideButtonName) {
	var toHide = document.getElementsByClassName(className);
	for (var i=0; i<toHide.length; i++) {
		toHide[i].style.display = "none";
	}
	var showDeltaButton = document.getElementById(showButtonName);
	showDeltaButton.style.display = "inline";

	var hideDeltaButton = document.getElementById(hideButtonName);
	hideDeltaButton.style.display = "none";
}

// show the difference in attributes from the previous year
function showDelta(className, showButtonName, hideButtonName) {
	var toShow = document.getElementsByClassName(className);
	for (var i=0; i<toShow.length; i++) {
		toShow[i].style.display = "inline";
	}

	var showDeltaButton = document.getElementById(showButtonName);
	showDeltaButton.style.display = "none";

	var hideDeltaButton = document.getElementById(hideButtonName);
	hideDeltaButton.style.display = "inline";
}

window.setTimeout( function() {

	var url=window.location.toString();

	if (url.indexOf("oneplayer",0) >= 0) {


		var buttontable = document.createElement('table');
		buttontable.setAttribute('cellspacing', '0');
		buttontable.setAttribute('cellpadding', '0');
		buttontable.setAttribute('id', 'track_table');

		var newtr=document.createElement('tr');
		buttontable.appendChild(newtr);
		var newtd1 = document.createElement('td');
		newtd1.setAttribute('colspan', '10');
		var newDiv2 = document.createElement('div');
		newDiv2.align = 'center';
		newDiv2.innerHTML = '<input type="button" style="font-size: 10pt; font-weight: bold; width: 100%; height: 30px" value="Show Progression">';
		newDiv2.addEventListener('click', function() { print_progression(); }, true);
		newtd1.appendChild(newDiv2);
		newtr.appendChild(newtd1);

		newtd1 = document.createElement('td');
		newtd1.setAttribute('colspan', '10');
		newDiv2 = document.createElement('div');
		newDiv2.align = 'center';
		newDiv2.innerHTML = '<input type="button" style="font-size: 10pt; font-weight: bold; width: 100%; height: 30px" value="Save current season\'s Attributes">'; 
		newDiv2.addEventListener('click', function() { save_data(); }, true);
		newtd1.appendChild(newDiv2);
		newtr.appendChild(newtd1);

		newtd1 = document.createElement('td');
		newtd1.setAttribute('colspan', '10');
		newDiv2 = document.createElement('div');
		newDiv2.align = 'center';
		newDiv2.innerHTML = '<input type="button" style="font-size: 10pt; font-weight: bold; width: 100%; height: 30px" value="Delete saved data">'; 
		newDiv2.addEventListener('click', function() { delete_data(); }, true);
		newtd1.appendChild(newDiv2);
		newtr.appendChild(newtd1);

		var newDiv = document.createElement('div');
		newDiv.setAttribute("id", "progress_mesg");
		newDiv.innerHTML='&nbsp;';


		var target = document.getElementById('hili1');
		if (target) { 

			target.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.insertBefore(
				newDiv, target.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.nextSibling);


			target.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.insertBefore(
				buttontable, target.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.nextSibling);
		}

		var ptr1, ptr2, ptr3, input=document.body.innerHTML, lgptr=document.getElementById("mylgno"), yearptr=document.getElementById("hiyear");

		if (lgptr!==null) lgno=lgptr.value;
		var yearptr1=document.getElementById("thisyear");
		if (yearptr1!==null) curryear=parseInt(yearptr1.value);
		else {
			if (yearptr!==null) {
				curryear=parseInt(yearptr.value);
				if (curryear<10) {
					curryear=-1;
				}
			}
		}

		ptr1=input.indexOf("by Game Stats");
		if (ptr1>=0) {
			ptr2=input.lastIndexOf("\">", ptr1);
			ptr3=input.lastIndexOf("lookatplayer=", ptr1);
			if (ptr3>=0 && ptr2>ptr3) {
				playerid=parseInt(input.substring(ptr3+13, ptr2));
			}
		}

		ptr1=input.indexOf("attsnoinj", 0);
		attrstr="";

		if (ptr1>=0) {
			ptr2=input.indexOf("value=\"", ptr1);
			ptr3=input.indexOf("\"", ptr2+7);
			if (ptr2>=0 && ptr3>ptr2) {

				attrstr=input.substring(ptr2+7, ptr3);

				for (var x=0; x<attrstr.length; x+=2) {
					ptr1=attrstr.substring(x, x+2);
					if (ptr1.substring(0, 1) == '0') {
						ptr2=ptr1.substring(1, 2);
						ptr1=ptr2;
					}
					attr[attr.length]=parseInt(ptr1);
				}
			}
		}
	}
	else if (url.indexOf("rosters",0) >= 0) {

		var lgptr=document.getElementById("mylgno"), pids=document.getElementsByName("pid"), yearptr=document.getElementById("myseason");
		var currptr=0, ptr1, ptr2, str1;

		if (lgptr!==null) lgno=lgptr.value;
		if (yearptr!==null) curryear=parseInt(yearptr.value);

		str1=(pids[0].value).toString();

		while (1) {
			ptr1=str1.indexOf("!", currptr);
			ptr2=str1.indexOf(" ", ptr1+1);
			if (ptr1<0 || ptr2<0) {
				break;
			}
			pidlist[pidlist.length]=parseInt(str1.substring(ptr1+1, ptr2));
			currptr=ptr2;
		}

		var buttontable = document.createElement('table');
		buttontable.setAttribute('cellspacing', '0');
		buttontable.setAttribute('cellpadding', '0');
		buttontable.setAttribute('id', 'track_table');

		var newtr=document.createElement('tr');
		buttontable.appendChild(newtr);
		var newtd1 = document.createElement('td');
		newtd1.setAttribute('colspan', '10');
		var newDiv2 = document.createElement('div');
		newDiv2.align = 'center';
		newDiv2.innerHTML = '<input type="button" style="font-size: 10pt; font-weight: bold; width: 100%; height: 30px" value="Record all players\' attributes">';
		newDiv2.addEventListener('click', function() { save_all(); }, true);
		newtd1.appendChild(newDiv2);
		newtr.appendChild(newtd1);

		newtr=document.createElement('tr');
		buttontable.appendChild(newtr);
		newtd1 = document.createElement('td');
		newtd1.setAttribute('colspan', '10');
		newDiv2 = document.createElement('div');
		newDiv2.align = 'center';
		newDiv2.innerHTML = '<input type="button" style="font-size: 10pt; font-weight: bold; width: 100%; height: 30px" value="Delete all players\' records">'; 
		newDiv2.addEventListener('click', function() { delete_all(); }, true);
		newtd1.appendChild(newDiv2);
		newtr.appendChild(newtd1);

		var newDiv = document.createElement('div');
		newDiv.setAttribute("id", "progress_all_mesg");
		newDiv.innerHTML='&nbsp;';

		var target = document.getElementById('storeme');

		if (target) {

			target.parentNode.parentNode.parentNode.parentNode.parentNode.insertBefore(newDiv, 
				target.parentNode.parentNode.parentNode.parentNode.nextSibling);

			target.parentNode.parentNode.parentNode.parentNode.parentNode.insertBefore(buttontable, 
				target.parentNode.parentNode.parentNode.parentNode.nextSibling);
		}
	}



}, 200);