您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
GLB Speed Script
// ==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",""); }