Greasy Fork

来自缓存

Greasy Fork is available in English.

GLB Player Scout

GLB Speed Script

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name           GLB Player Scout
// @namespace      GLB//
// @include        https://glb.warriorgeneral.com/game/replay.pl?game_id=*&pbp_id=*
// @include        http://glb.warriorgeneral.com/game/replay.pl?game_id=*&pbp_id=*
// @description    GLB Speed Script
// @version 0.0.1.20230813172012
// ==/UserScript==

function getElementsByClassName(classname, par){
  var a=[];   
  var re = new RegExp('\\b' + classname + '\\b');      
  var els = par.getElementsByTagName("*"); 
  for(var i=0,j=els.length; i<j; i++){       
    if(re.test(els[i].className)){  
      a.push(els[i]);
    }
  }
  return a;
};

function calc(e) {
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
ctx.clearRect(0,0,500,50)
ctx.strokeStyle = "red";
ctx.beginPath();
ctx.moveTo(0, 50);
maxA = 0
selected.setAttribute('style', 'background-color:none')
selected = e.target
var old_color = e.target.getAttribute('style')
var playerid = e.target.parentNode.getAttribute('id')
playerid = playerid.split('pos_dot_', 2)[1]
//e.target.innerHTML.split('pos_dot_', 2)[1]
//playerid = playerid.split('"', 2)[0]
playerid = "{id: '" + playerid + "',"
temp2 = 0
avgV = 0
maxV = 0
maxTick = 0
test2.length = 0
e.target.setAttribute('style', 'background-color:black')

var test = document.getElementById('body_container').innerHTML.split(playerid, 100)
for(var i=0,j=test.length; i<j; i++) {
	test2[i] = test[i].split("},{id:", 2)[0]
}
for(var i=0,j=test2.length; i<j; i++) {
	temp = test2[i].split("x:", 2)[1]
	X_Coords[i] = temp.split(",y:", 2)[0]
}
for(var i=0,j=test2.length; i<j; i++) {
	temp = test2[i].split(",y:", 2)[1]
	Y_Coords[i] = temp.split(",p: ", 2)[0]
	if (temp.split(",p: ", 2).length == 2) {P_Coords[i] = 1}
}
X_Coords[0] = X_Coords[1]
Y_Coords[0] = Y_Coords[1]
var currenttick = 0
for(var i=0,j=test2.length-1; i<j; i++) {
	var test8 = test2.length -1
	ctx.lineTo(currenttick*(500/test8), Math.abs(Math.sqrt(Math.pow(Math.abs(parseFloat(Y_Coords[i+1]) - parseFloat(Y_Coords[i])), 2) + Math.pow(Math.abs(parseFloat(X_Coords[i+1]) - parseFloat(X_Coords[i])), 2))*10-50));
	currenttick = currenttick + 1
}
for(var i=1,j=Y_Coords.length-1; i<j; i++) {
	if (P_Coords[i] != 1) {
	temp = Math.sqrt(Math.pow(Math.abs(parseFloat(Y_Coords[i]) - parseFloat(Y_Coords[i-1])), 2) + Math.pow(Math.abs(parseFloat(X_Coords[i]) - parseFloat(X_Coords[i-1])), 2))
	maxV = Math.max(temp,maxV)
	if (maxV == temp) {maxTick = i}}
	if (maxV == temp) {
		XSpeed.setAttribute('style', 'left:' + ((parseFloat(X_Coords[i])*3) - 6) + 'px; top: ' + ((parseFloat(Y_Coords[i])*3) - 6) + 'px')
		replayarea.appendChild(XSpeed)
	}
}
temp = 0
for(var i=1,j=Y_Coords.length-1; i<j; i++) {
	if (P_Coords[i] != 1) {
	temp = temp + Math.sqrt(Math.pow(Math.abs(parseFloat(Y_Coords[i]) - parseFloat(Y_Coords[i-1])), 2) + Math.pow(Math.abs(parseFloat(X_Coords[i]) - parseFloat(X_Coords[i-1])), 2))}
}
avgA = 0
avgAC = 0
for(var i=1,j=Y_Coords.length-1; i<j; i++) {
	if (P_Coords[i] != 1) {
	temp4 = Math.sqrt(Math.pow(Math.abs(parseFloat(Y_Coords[i+1]) - parseFloat(Y_Coords[i])), 2) + Math.pow(Math.abs(parseFloat(X_Coords[i+1]) - parseFloat(X_Coords[i])), 2))
	temp3 = Math.sqrt(Math.pow(Math.abs(parseFloat(Y_Coords[i]) - parseFloat(Y_Coords[i-1])), 2) + Math.pow(Math.abs(parseFloat(X_Coords[i]) - parseFloat(X_Coords[i-1])), 2))
	if (temp4 >= temp3) {
	maxA = Math.max(maxA, (temp4 - temp3))
	if (maxA == (temp4 - temp3)) {maxAT = i;}
	if (maxA == (temp4 - temp3)) {
		XAccel.setAttribute('style', 'left:' + ((parseFloat(X_Coords[i])*3) - 6) + 'px; top: ' + ((parseFloat(Y_Coords[i])*3) - 6) + 'px')
		replayarea.appendChild(XAccel)
	}
	avgA = avgA + (temp4 - temp3)
	avgAC = avgAC + 1}
}
}
var ticks_CD = new Array(); ticks_CD[0] = 0; ticks_CD[1] = 0
var ticks_CD10 = new Array(); ticks_CD10[0] = 0; ticks_CD10[1] = 0; ticks_CD10[4] = 0; ticks_CD10[5] = 0; ticks_CD10[6] = 0; ticks_CD10[7] = 0;
var ticks_CD20 = new Array(); ticks_CD20[0] = 0; ticks_CD20[1] = 0; ticks_CD20[4] = 0; ticks_CD20[5] = 0; ticks_CD20[6] = 0; ticks_CD20[7] = 0;
var ticks_CD30 = new Array(); ticks_CD30[0] = 0; ticks_CD30[1] = 0; ticks_CD30[4] = 0; ticks_CD30[5] = 0; ticks_CD30[6] = 0; ticks_CD30[7] = 0;
var ticks_CD40 = new Array(); ticks_CD40[0] = 0; ticks_CD40[1] = 0; ticks_CD40[4] = 0; ticks_CD40[5] = 0; ticks_CD40[6] = 0; ticks_CD40[7] = 0;
var ticks_CD50 = new Array(); ticks_CD50[0] = 0; ticks_CD50[1] = 0; ticks_CD50[4] = 0; ticks_CD50[5] = 0; ticks_CD50[6] = 0; ticks_CD50[7] = 0;
for(var i=1,j=Y_Coords.length-1; i<j; i++) {
	if (P_Coords[i] != 1) {
	vector1 = Math.abs(parseFloat(X_Coords[i]) - parseFloat(X_Coords[i-1])) / Math.abs(parseFloat(Y_Coords[i]) - parseFloat(Y_Coords[i-1]))
	vector2 = Math.abs(parseFloat(X_Coords[i+1]) - parseFloat(X_Coords[i])) / Math.abs(parseFloat(Y_Coords[i+1]) - parseFloat(Y_Coords[i]))
	temp2 = Math.abs(Math.atan(vector1) - Math.atan(vector2)) * 180/Math.PI
	speed1 = Math.sqrt(Math.pow(Math.abs(parseFloat(Y_Coords[i+1]) - parseFloat(Y_Coords[i])), 2) + Math.pow(Math.abs(parseFloat(X_Coords[i+1]) - parseFloat(X_Coords[i])), 2))
	speed2 = Math.sqrt(Math.pow(Math.abs(parseFloat(Y_Coords[i]) - parseFloat(Y_Coords[i-1])), 2) + Math.pow(Math.abs(parseFloat(X_Coords[i]) - parseFloat(X_Coords[i-1])), 2))
	if (temp2 >= 10 && temp2 < 20) {
		ticks_CD10[0] = ticks_CD10[0] + 1
		ticks_CD10[1] = ticks_CD10[1] + Math.sqrt(Math.pow(Math.abs(parseFloat(Y_Coords[i]) - parseFloat(Y_Coords[i-1])), 2) + Math.pow(Math.abs(parseFloat(X_Coords[i]) - parseFloat(X_Coords[i-1])), 2))
		if (speed1 < speed2) {
			ticks_CD10[4] = ticks_CD10[4] + speed1 - speed2
			ticks_CD10[5] = ticks_CD10[5] + 1}
		if (speed1 > speed2) {
			ticks_CD10[6] = ticks_CD10[6] + speed1 - speed2
			ticks_CD10[7] = ticks_CD10[7] + 1}}
	if (temp2 >= 20 && temp2 < 30) {
		ticks_CD20[0] = ticks_CD20[0] + 1
		ticks_CD20[1] = ticks_CD20[1] + Math.sqrt(Math.pow(Math.abs(parseFloat(Y_Coords[i]) - parseFloat(Y_Coords[i-1])), 2) + Math.pow(Math.abs(parseFloat(X_Coords[i]) - parseFloat(X_Coords[i-1])), 2))
		if (speed1 < speed2) {
			ticks_CD20[4] = ticks_CD20[4] + speed1 - speed2
			ticks_CD20[5] = ticks_CD20[5] + 1}
		if (speed1 > speed2) {
			ticks_CD20[6] = ticks_CD20[6] + speed1 - speed2
			ticks_CD20[7] = ticks_CD20[7] + 1}}
	if (temp2 >= 30 && temp2 < 40) {
		ticks_CD30[0] = ticks_CD30[0] + 1
		ticks_CD30[1] = ticks_CD30[1] + Math.sqrt(Math.pow(Math.abs(parseFloat(Y_Coords[i]) - parseFloat(Y_Coords[i-1])), 2) + Math.pow(Math.abs(parseFloat(X_Coords[i]) - parseFloat(X_Coords[i-1])), 2))
		if (speed1 < speed2) {
			ticks_CD30[4] = ticks_CD30[4] + speed1 - speed2
			ticks_CD30[5] = ticks_CD30[5] + 1}
		if (speed1 > speed2) {
			ticks_CD30[6] = ticks_CD30[6] + speed1 - speed2
			ticks_CD30[7] = ticks_CD30[7] + 1}}
	if (temp2 >= 40 && temp2 < 50) {
		ticks_CD40[0] = ticks_CD40[0] + 1
		ticks_CD40[1] = ticks_CD40[1] + Math.sqrt(Math.pow(Math.abs(parseFloat(Y_Coords[i]) - parseFloat(Y_Coords[i-1])), 2) + Math.pow(Math.abs(parseFloat(X_Coords[i]) - parseFloat(X_Coords[i-1])), 2))
		if (speed1 < speed2) {
			ticks_CD40[4] = ticks_CD40[4] + speed1 - speed2
			ticks_CD40[5] = ticks_CD40[5] + 1}
		if (speed1 > speed2) {
			ticks_CD40[6] = ticks_CD40[6] + speed1 - speed2
			ticks_CD40[7] = ticks_CD40[7] + 1}}
	if (temp2 >= 50) {
		ticks_CD50[0] = ticks_CD50[0] + 1
		ticks_CD50[1] = ticks_CD50[1] + Math.sqrt(Math.pow(Math.abs(parseFloat(Y_Coords[i]) - parseFloat(Y_Coords[i-1])), 2) + Math.pow(Math.abs(parseFloat(X_Coords[i]) - parseFloat(X_Coords[i-1])), 2))
		if (speed1 < speed2) {
			ticks_CD50[4] = ticks_CD50[4] + speed1 - speed2
			ticks_CD50[5] = ticks_CD50[5] + 1}
		if (speed1 > speed2) {
			ticks_CD50[6] = ticks_CD50[6] + speed1 - speed2
			ticks_CD50[7] = ticks_CD50[7] + 1}}
}
}
var total_ticks = Y_Coords.length-1
avgV = (temp) / (X_Coords.length-1)
document.getElementById('maxspeed').innerHTML = (maxV*10).toFixed(2)
document.getElementById('avgspeed').innerHTML = (avgV*10).toFixed(2)
document.getElementById('maxspeedtick').innerHTML = maxTick + ' ticks'
document.getElementById('maxaccel').innerHTML = (maxA*10).toFixed(2)
document.getElementById('avgaccel').innerHTML = ((avgA/avgAC)*10).toFixed(2)
document.getElementById('maxacceltick').innerHTML = maxAT + ' ticks'
document.getElementById('totalticks').innerHTML = total_ticks
document.getElementById('changeticks10d').innerHTML = ticks_CD10[0]
document.getElementById('changeticks20d').innerHTML = ticks_CD20[0]
document.getElementById('changeticks30d').innerHTML = ticks_CD30[0]
document.getElementById('changeticks40d').innerHTML = ticks_CD40[0]
document.getElementById('changeticks50d').innerHTML = ticks_CD50[0]
document.getElementById('changeticks10V').innerHTML = ((ticks_CD10[1] /(ticks_CD10[0]+0.00000001))*10).toFixed(2)
document.getElementById('changeticks20V').innerHTML = ((ticks_CD20[1] /(ticks_CD20[0]+0.00000001))*10).toFixed(2)
document.getElementById('changeticks30V').innerHTML = ((ticks_CD30[1] /(ticks_CD30[0]+0.00000001))*10).toFixed(2)
document.getElementById('changeticks40V').innerHTML = ((ticks_CD40[1] /(ticks_CD40[0]+0.00000001))*10).toFixed(2)
document.getElementById('changeticks50V').innerHTML = ((ticks_CD50[1] /(ticks_CD50[0]+0.00000001))*10).toFixed(2)
document.getElementById('changeticks10de').innerHTML = (ticks_CD10[4]*10).toFixed(2)
document.getElementById('changeticks20de').innerHTML = (ticks_CD20[4]*10).toFixed(2)
document.getElementById('changeticks30de').innerHTML = (ticks_CD30[4]*10).toFixed(2)
document.getElementById('changeticks40de').innerHTML = (ticks_CD40[4]*10).toFixed(2)
document.getElementById('changeticks50de').innerHTML = (ticks_CD50[4]*10).toFixed(2)

document.getElementById('changeticks10avde').innerHTML = ((ticks_CD10[4]/(ticks_CD10[5]+0.00000001))*10).toFixed(2) + ' (' + ticks_CD10[5] + ' ticks)'
document.getElementById('changeticks20avde').innerHTML = ((ticks_CD20[4]/(ticks_CD20[5]+0.00000001))*10).toFixed(2) + ' (' + ticks_CD20[5] + ' ticks)'
document.getElementById('changeticks30avde').innerHTML = ((ticks_CD30[4]/(ticks_CD30[5]+0.00000001))*10).toFixed(2) + ' (' + ticks_CD30[5] + ' ticks)'
document.getElementById('changeticks40avde').innerHTML = ((ticks_CD40[4]/(ticks_CD40[5]+0.00000001))*10).toFixed(2) + ' (' + ticks_CD40[5] + ' ticks)'
document.getElementById('changeticks50avde').innerHTML = ((ticks_CD50[4]/(ticks_CD50[5]+0.00000001))*10).toFixed(2) + ' (' + ticks_CD50[5] + ' ticks)'

document.getElementById('changeticks10avac').innerHTML = ((ticks_CD10[6]/(ticks_CD10[7]+0.00000001))*10).toFixed(2) + ' (' + ticks_CD10[7] + ' ticks)'
document.getElementById('changeticks20avac').innerHTML = ((ticks_CD20[6]/(ticks_CD20[7]+0.00000001))*10).toFixed(2) + ' (' + ticks_CD20[7] + ' ticks)'
document.getElementById('changeticks30avac').innerHTML = ((ticks_CD30[6]/(ticks_CD30[7]+0.00000001))*10).toFixed(2) + ' (' + ticks_CD30[7] + ' ticks)'
document.getElementById('changeticks40avac').innerHTML = ((ticks_CD40[6]/(ticks_CD40[7]+0.00000001))*10).toFixed(2) + ' (' + ticks_CD40[7] + ' ticks)'
document.getElementById('changeticks50avac').innerHTML = ((ticks_CD50[6]/(ticks_CD50[7]+0.00000001))*10).toFixed(2) + ' (' + ticks_CD50[7] + ' ticks)'

document.getElementById('changeticks10ac').innerHTML = (ticks_CD10[6]*10).toFixed(2)
document.getElementById('changeticks20ac').innerHTML = (ticks_CD20[6]*10).toFixed(2)
document.getElementById('changeticks30ac').innerHTML = (ticks_CD30[6]*10).toFixed(2)
document.getElementById('changeticks40ac').innerHTML = (ticks_CD40[6]*10).toFixed(2)
document.getElementById('changeticks50ac').innerHTML = (ticks_CD50[6]*10).toFixed(2)
ctx.stroke()

Y_Coords.length = 0
X_Coords.length = 0
P_Coords.length = 0
}

var playernames2 = getElementsByClassName('player_icon o_icon', document)
var playernames = getElementsByClassName('player_icon d_icon', document)
for(var i=0,j=playernames2.length; i<j; i++) {
	playernames2[i].addEventListener('click', calc, false)
	playernames[i].addEventListener('click', calc, false)
}
var test1 = document.getElementsByTagName('div')[document.getElementsByTagName('div').length-3]

test1.innerHTML = '<br><b>Velocity:<br clear="left" /><canvas style="background: lightgray; border-width:1px; border-style: solid; border-collapse: collapse" width="500" height="50" id="canvas">'
test1.innerHTML = test1.innerHTML+ '<table style="border-collapse:collapse; border-width: 1px; border-style: solid"><tr class="nonalternating_color forum_head"><td colspan="2" width="200px">Speed</td></tr><tr class="alternating_color2"><td>Average Speed</td><td style="text-align:right" id="avgspeed"></td></tr><tr class="alternating_color1"><td>Maximum Speed</td><td style="text-align:right" id="maxspeed"></td></tr><tr class="alternating_color2"><td>Point of Max</td><td style="text-align:right" id="maxspeedtick"></td></tr><tr class="alternating_color1"><td>Average Acceleration</td><td style="text-align:right" id="avgaccel"></td></tr><tr class="alternating_color2"><td>Max Acceleration</td><td style="text-align:right" id="maxaccel"></td></tr><tr class="alternating_color1"><td>Point of Max Accel</td><td style="text-align:right" id="maxacceltick"></td></tr></table>'
test1.innerHTML = test1.innerHTML + '<table width="100%" style="border-collapse:collapse; border-width: 1px; border-style: solid"><tr class="nonalternating_color forum_head"><td colspan="7" width="300px">Agility</td></tr><tr style="font-weight:bold;text-align:right"><td style="text-align:left">Direction Change<td>Ticks<td>Speed<td>Speed Lost<td>Avg Loss<td>Speed Gained<td>Avg Gain<tr style="text-align:right" class="alternating_color1"><td style="text-align:left">10-19 degrees</td><td id="changeticks10d"></td><td id="changeticks10V"><td id="changeticks10de"></td><td id="changeticks10avde"></td><td id="changeticks10ac"></td><td id="changeticks10avac"></td></tr><tr style="text-align:right" class="alternating_color2"><td style="text-align:left">20-29 degrees</td><td id="changeticks20d"></td><td id="changeticks20V"></td><td id="changeticks20de"></td><td id="changeticks20avde"></td><td id="changeticks20ac"></td><td id="changeticks20avac"></td></tr><tr style="text-align:right" class="alternating_color1"><td style="text-align:left">30-39 degrees</td><td id="changeticks30d"></td><td id="changeticks30V"></td><td id="changeticks30de"></td><td id="changeticks30avde"></td><td id="changeticks30ac"></td><td id="changeticks30avac"></td></tr><tr style="text-align:right" class="alternating_color2"><td style="text-align:left">40-49 degrees</td><td id="changeticks40d"></td><td id="changeticks40V"></td><td id="changeticks40de"></td><td id="changeticks40avde"></td><td id="changeticks40ac"></td><td id="changeticks40avac"></td></tr><tr style="text-align:right" class="alternating_color1"><td style="text-align:left">50+ degrees</td><td id="changeticks50d"></td><td id="changeticks50V"></td><td id="changeticks50de"></td><td id="changeticks50avde"></td><td id="changeticks50ac"></td><td id="changeticks50avac"></td></tr></table>'
test1.innerHTML = test1.innerHTML + '<table style="border-collapse:collapse; border-width: 1px; border-style: solid"><tr class="nonalternating_color forum_head"><td colspan="2" width="100px">Other</td><tr class="alternating_color2"><td>Total Ticks</td><td id="totalticks"></td></tr></table>'
var vector1 = 0
var vector2 = 0
var temp2 = 0
var avgV = 0
var maxV = 0
var maxTick = 0
var test2 = new Array()
var X_Coords = new Array()
var Y_Coords = new Array()
var P_Coords = new Array()
var temp = 'temp'
var temp3 = 0
var temp4 = 0
var maxA = 0
var maxAT = 0
var avgA = 0
var avgAC = 0
var selected = test1
var XSpeed = document.createElement('div')
XSpeed.innerHTML = "<font color='pink'><b>X1</b></font>"
XSpeed.setAttribute('class', 'player_icon')
var XAccel = document.createElement('div')
XAccel.innerHTML = "<font color='lightblue'><b>X2</b></font>"
XAccel.setAttribute('class', 'player_icon')
var replayarea = document.getElementById('replay_area')

var offPlayers = getElementsByClassName("player_icon o_icon",document);
for(var j=0; j<offPlayers.length; j++) {
offPlayers[j].firstChild.setAttribute("onclick","");
}
var defPlayers = getElementsByClassName("player_icon d_icon",document);
for(var j=0; j<offPlayers.length; j++) {
defPlayers[j].firstChild.setAttribute("onclick","");
}