您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add extra info to the GLB play description text.
- // ==UserScript==
- // @name Extra Info In Play Text
- // @description Add extra info to the GLB play description text.
- // @namespace pbr/ei
- // @include http://goallineblitz.com/game/replay.pl?game_id=*&pbp_id=*
- // @include http://glb.warriorgeneral.com/game/replay.pl?game_id=*&pbp_id=*
- // @copyright 2009, pabst
- // @license (CC) Attribution Share Alike; http://creativecommons.org/licenses/by-sa/3.0/
- // @version 13.12.29
- // @require https://greasyfork.org/scripts/1371-libpbr2/code/libpbr2.js?version=3533
- // ==/UserScript==
- /*
- *
- * pabst did this 09/09/01+
- *
- *
- */
- var scriptName = "Extra Info In Play Text";
- var scriptVersion = "13.12.29";
- var scriptWebpage = "http://userscripts.org/scripts/show/57984";
- window.setTimeout(
- function() {
- init(false);
- }
- , 100);
- function premodTest() {
- var play_data = unsafeWindow.play_data;
- var minx = play_data[0][0].x;
- var maxx = play_data[0][0].x;
- for (var i = 1; i < unsafeWindow.play_data[0].length; i++) {
- minx = Math.min(minx, play_data[0][i].x);
- maxx = Math.max(maxx, play_data[0][i].x);
- }
- console.log(minx+" --> "+maxx+" : "+((maxx - minx)>100));
- if ((maxx-minx) > 110) return true;
- return false;
- }
- function activate(e) {
- console.log("activate "+scriptName);
- lock();
- if (unsafeWindow.play_data[0]) {
- defender_main();
- }
- else {
- console.log("early exit");
- }
- unlock();
- }
- var longPass = 15 * 3;
- var mediumPass = 7.5 * 3;
- var shortPass = 0 * 3;
- function defender_main() {
- var players = unsafeWindow.players;
- var play_data = unsafeWindow.play_data;
- var playerids = new Array();
- for (var i = 1; i < unsafeWindow.play_data[0].length; i++) {
- var data = play_data[0][i];
- if (data.id != 'ball') {
- playerids.push (data.id);
- }
- }
- var playText = document.getElementById("outcome_content").innerHTML;
- var receiver = getReceiverName(playText);
- if (receiver != null) {
- var wrid = -1;
- for (var i = 0; i < playerids.length; i++) {
- var plyr = players[playerids[i]];
- if (plyr.name == receiver) {
- wrid = playerids[i];
- break;
- }
- }
- if (wrid == -1) return;
- var min = 99999;
- var incY = 99999;
- var catchY = -1;
- var wridx = -1;
- for (var i=0; i<play_data[1].length; i++) {
- if (play_data[1][i].id == wrid) {
- wridx = i;
- break;
- }
- }
- for (var j = 0; j < play_data.length; j++) {
- var balldata = play_data[j][0];
- var snapdata = play_data[j][wridx];
- var ydepth = Math.abs(snapdata.y - balldata.y);
- var xdepth = Math.abs(snapdata.x - balldata.x);
- //???? xdepth = xdepth-3;
- var distance = Math.sqrt(ydepth*ydepth + xdepth*xdepth);
- if (distance < min) {
- incY = snapdata.y;
- min = distance;
- }
- if (distance == 0) {
- catchY = balldata.y
- break;
- }
- //console.log(min+" : "+balldata+" : "+snapdata+" : "+xdepth+" : "+ydepth);
- }
- var depth = Math.abs((incY - play_data[0][0].y));
- //console.log(depth+" -- "+catchY);
- addDistance(depth);
- if (catchY != -1) {
- var endY = play_data[play_data.length-1][0].y;
- if (catchY == 0) {
- catchY = endY;
- }
- var yac = Math.round(((Math.abs(endY - catchY))/3)*2)/2;
- yac = yac;
- if (yac != 0) {
- addYAC(yac.toFixed(1));
- }
- }
- try {
- var defPlayers = findDefender(players, play_data);
- if (defPlayers != null) {
- var max = findMax(defPlayers);
- var def = play_data[0][max];
- console.log(max+"-"+def.id+"-"+unsafeWindow.players[def.id].position+"-"+unsafeWindow.players[def.id].name);
- addDefender(players[def.id].position+"-"+players[def.id].name);
- }
- }
- catch (err) {
- console.log("yac defenders: "+err);
- }
- }
- try {
- var blockers = findBlocker(players, play_data);
- if (blockers != null) {
- var max = findMax(blockers);
- //console.log(blockers);
- var def = play_data[0][max];
- console.log(max+"-"+def.id);
- if (def.id == "ball") {
- console.log("here");
- max = findMax(blockers.slice(1));
- }
- var def = play_data[0][max];
- console.log(max+"-"+def.id);
- console.log(unsafeWindow.players[def.id].position+"-"+unsafeWindow.players[def.id].name);
- addBlocker(players[def.id].position+"-"+players[def.id].name);
- }
- }
- catch (err) {
- console.log("yac blockers: "+err);
- }
- }
- function findDefender(players, play_data) {
- var playerids = new Array();
- for (var i = 1; i < play_data[0].length; i++) {
- var data = play_data[0][i];
- if (data.id != 'ball') {
- playerids.push (data.id);
- }
- }
- var playText = document.getElementById("outcome_content").innerHTML;
- var receiver = getReceiverName(playText);
- var wrid = -1;
- for (var i = 0; i < playerids.length; i++) {
- var plyr = players[playerids[i]];
- if (plyr.name == receiver) {
- wrid = playerids[i];
- break;
- }
- }
- if (wrid == -1) return null;
- var wridx = -1;
- for (var i=0; i<play_data[1].length; i++) {
- if (play_data[1][i].id == wrid) {
- wridx = i;
- break;
- }
- }
- var defmin = 99999;
- var defPlayers = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
- var j;
- for (j = 0; j < play_data.length; j++) {
- var k=0;
- if (wridx <= 11) {
- k=1;
- }
- var fmin = 99999;
- var fidx = -1;
- for (var i=(k*11)+1; i<(k*11)+12; i++) {
- try {
- //console.log(wridx+" == "+i+" -- "+unsafeWindow.play_data[j][i]);
- var def = play_data[j][i];
- var defydepth = Math.abs(def.y - play_data[j][wridx].y);
- var defxdepth = Math.abs(def.x - play_data[j][wridx].x);
- var defdistance = Math.sqrt(defydepth*defydepth + defxdepth*defxdepth);
- if (defdistance < defmin) {
- defmin = defdistance;
- }
- if (defdistance < fmin) {
- fmin = defdistance;
- fidx = i;
- }
- defPlayers[i] = Math.max(0,defPlayers[i]-0.7);
- //console.log(unsafeWindow.players[def.id].name);
- if ((i != -1) && (defdistance < 18) && (j>5)) {
- defPlayers[i] += 1.35;
- }
- //console.log(unsafeWindow.play_data[j][i].id+" : "+defPlayers[i]);
- }
- catch(e) {
- }
- }
- if (fmin < 12) {
- defPlayers[fidx] += 0.35;
- }
- //console.log(j+" -- "+fmin+" : "+fidx+" -- "+defPlayers);
- try {
- var balldata = play_data[j+5][0];
- var wrdata = play_data[j+5][wridx];
- //console.log(balldata.x+" - "+wrdata.x+" : "+balldata.y+" - "+wrdata.y);
- if ((Math.abs(balldata.x - wrdata.x) < 15) && (Math.abs(balldata.y - wrdata.y) < 15)) {
- break;
- }
- }
- catch (e) {
- break;
- }
- if ((j == 0) && ((j+10) < (play_data.length-5))) {
- j += 9;
- }
- }
- //alert("defmin="+defmin);
- if (defmin > 11) {
- console.log("HiZ");
- defPlayers = null;
- }
- return defPlayers;
- }
- function addDefender(d) {
- var playText = document.getElementById("outcome_content").innerHTML;
- var sn = playText.indexOf('pass to ')+8;
- var en = 0;
- if (playText.indexOf(', hurried by')!=-1) {
- en = playText.indexOf(', hurried by');
- }
- else if (playText.indexOf(' up the')!=-1) {
- en = playText.indexOf(' up the');
- }
- else {
- en = playText.indexOf(' over the');
- }
- if (sn != -1) {
- var str = playText.slice(0,en)+" ("+d+")" + playText.slice(en);
- document.getElementById("outcome_content").innerHTML = str;
- }
- }
- function findBlocker(players,play_data) {
- var playerids = new Array();
- for (var i = 1; i < play_data[0].length; i++) {
- var data = play_data[0][i];
- if (data.id != 'ball') {
- playerids.push (data.id);
- }
- }
- var qbid = 0;
- for (var i = 0; i < playerids.length; i++) {
- var plyr = players[playerids[i]];
- //console.log(i+") "+plyr.position);
- if (plyr.position == "QB") {
- qbid = playerids[i];
- break;
- }
- }
- var qbidx = 0;
- for (var i=0; i<22; i++) {
- if (play_data[0][i].id == qbid) {
- qbidx = i;
- break;
- }
- }
- var lastFrame = play_data.length;
- var last = 32767;
- for (var f=0; f<play_data.length; f++) {
- var balldata = play_data[f][0];
- var qbdata = play_data[f][qbidx];
- var ydepth = Math.abs(qbdata.y - balldata.y);
- var xdepth = Math.abs(qbdata.x - balldata.x);
- var distance = Math.sqrt(ydepth*ydepth + xdepth*xdepth);
- //console.log(f+") "+distance+" --- "+last);
- if (distance > last) {
- lastFrame = f;
- break;
- }
- last = distance;
- }
- //console.log(qbid+" - "+qbidx+" : lf="+lastFrame);
- var playText = document.getElementById("outcome_content").innerHTML;
- var rusher;
- var idx = playText.indexOf(" sacked by ")+" sacked by ".length;
- if (idx != 10) {
- rusher = playText.slice(idx,idx+playText.slice(idx).indexOf(" ("));
- }
- else {
- var idx = playText.indexOf(" hurried by ")+" hurried by ".length;
- rusher = playText.slice(idx,idx+playText.slice(idx).indexOf(", "));
- }
- var rusheridx = -1;
- var rusherid = -1;
- for (var i=0; i<play_data[0].length; i++) {
- var id = play_data[0][i].id;
- if (players[id] != null) {
- if (players[id].name == rusher) {
- rusherid = id;
- rusheridx = i;
- break;
- }
- }
- }
- //console.log("rusher="+rusherid+" : "+rusheridx+" : "+players[rusherid].name);
- if (rusherid == -1) return null;
- var offmin = 99999;
- var offPlayers = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
- var offidx = -1;
- var j;
- for (j = 0; j < lastFrame; j++) {
- var k=0;
- if (rusherid <= 11) {
- k=1;
- }
- var offmin = 99999;
- var offidx = -1;
- //console.log(rusher+" - "+unsafeWindow.play_data[j][rusheridx].x+","+unsafeWindow.play_data[j][rusheridx].y);
- for (var i=(k*11)+1; i<(k*11)+12; i++) {
- var off = play_data[j][i];
- var offydist = Math.abs(off.y - play_data[j][rusheridx].y);
- var offxdist = Math.abs(off.x - play_data[j][rusheridx].x);
- var offdistance = Math.sqrt(offydist*offydist + offxdist*offxdist);
- if (offdistance < offmin) {
- offmin = offdistance;
- offidx = i;
- }
- //console.log(rusherid+"/"+rusheridx+" == "+i+" -- "+unsafeWindow.play_data[j][i].id+" = "+offdistance);
- offPlayers[i] = Math.max(0,offPlayers[i]-0.1);
- if (offdistance < 9) {
- //console.log(unsafeWindow.players[off.id].name+" -- "+offdistance+" :: "+off.x+","+off.y);
- offPlayers[i] += 1;
- }
- //console.log(offPlayers);
- }
- if (offmin < 6) {
- offPlayers[offidx] += 0.35;
- }
- if (j == 2) j += 7;
- }
- //console.log(offidx+"-"+offidx+"-"+offmin+"="+offPlayers);
- if (offmin > 15) {
- offidx = -1;
- offPlayers = null;
- }
- return offPlayers;
- }
- function findMax(arr) {
- if (arr == null) return -1;
- if (arr.length < 1) return -1;
- var idx = 0;
- var max = arr[idx];
- for (var i=1; i<arr.length; i++) {
- if (arr[i] > max) {
- idx = i;
- max = arr[i];
- }
- }
- return idx;
- }
- function getReceiverName(playText) {
- var sn = playText.indexOf('pass to ')+8;
- var en = 0;
- if (playText.indexOf(', hurried by')!=-1) {
- en = playText.indexOf(', hurried by');
- }
- else if (playText.indexOf(' up the')!=-1) {
- en = playText.indexOf(' up the');
- }
- else if (playText.indexOf(' over the')!= -1) {
- en = playText.indexOf(' over the');
- }
- else {
- return null;
- }
- var name = playText.slice(sn,en);
- return name;
- }
- function addYAC(yacnum) {
- var playText = document.getElementById("outcome_content").innerHTML;
- if (playText.indexOf('pass to') != -1){
- var str = playText;
- var idx = str.indexOf(" yd gain)")+" yd gain".length;
- if (idx < 8) {
- idx = str.indexOf(" yd loss)")+" yd loss".length;
- }
- if (idx < 8) return;
- var mod = yacnum;
- if (premodTest() == true) mod = mod/3;
- mod = parseFloat(mod).toFixed(0);
- document.getElementById("outcome_content").innerHTML=str.slice(0,idx)+", "+mod+" YAC"+str.slice(idx);
- }
- }
- function addDistance(d) {
- var playText = document.getElementById("outcome_content").innerHTML;
- if (playText.indexOf(' pass to ') != -1){
- var s = " short";
- if (d >= mediumPass) s = " medium";
- if (d >= longPass) s = " long";
- var idx = playText.indexOf(" pass to ");
- playText = playText.slice(0,idx)+s+playText.slice(idx);
- document.getElementById("outcome_content").innerHTML = playText;
- //console.log(d);
- }
- }
- function addBlocker(d) {
- var playText = document.getElementById("outcome_content").innerHTML;
- var idx = playText.indexOf(" sacked by ")+11;
- var idx2 = -1;
- if (idx != 10) {
- idx2 = playText.slice(idx).indexOf(" (");
- }
- else {
- idx = playText.indexOf(" hurried by ")+12;
- idx2 = playText.slice(idx).indexOf(", ");
- }
- if (idx > 11) {
- playText = playText.slice(0,idx+idx2)+" ("+d+")"+playText.slice(idx+idx2);
- document.getElementById("outcome_content").innerHTML = playText;
- }
- }