Replay Rewrite - Player Stats

By pabst Last update Jan 16, 2011 — Installed 3,456 times.

There are 9 previous versions of this script.

// ==UserScript==
// @name           Stats On Replay
// @namespace      pbr/sor
// @include        http://*goallineblitz.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        11.01.16
// @require        http://userscripts.org/scripts/source/28938.user.js
// @require        http://userscripts.org/scripts/source/31573.user.js
// @require        http://userscripts.org/scripts/source/54630.user.js
// ==/UserScript==

const scriptName = "Player Stats";
const scriptVersion = "11.01.16";
const scriptWebpage = "http://userscripts.org/scripts/show/54525";
/* 
 * 
 * pabst did this 08/06/26+
 *
 * 
 */

var stats = null;
var playerStats = null;
var plays = null;
var currentPlay = -1;

window.setTimeout( function() {
	init(true);
}, 100);

function activate(e) {
    console.log("activate player stats");

    lock();

    pbp();
}

function addStats() {
	var area = document.getElementById("replay_area");
	var width = area.clientWidth/2;

    var specialTeams = false;
    if (document.getElementsByClassName("P").length > 0) specialTeams = true;
    else if (document.getElementsByClassName("K").length > 0) specialTeams = true;
    
	var players = document.getElementsByClassName("player_name");
    playerStats = new Array(players.length);
	for (var i=0; i<players.length; i++) {
		var left = false;
		if (players[i].offsetLeft > width) {
			left = true;
		}
        var id = players[i].href.split("=")[1];
        playerStats[id] = fetchStats(id, specialTeams);
		if (left == true) {
			players[i].addEventListener("mouseover",function(e) { over(e,true); }, false);
			players[i].addEventListener("mouseout",function(e) { out(e,true); }, false);
		}
		else {
			players[i].addEventListener("mouseover",function(e) { over(e,false); }, false);
			players[i].addEventListener("mouseout",function(e) { out(e,false); }, false);
		}
	}
}

function over(e, left) {
    var id = e.target.href.split("=")[1];
	unsafeWindow.set_tip(playerStats[id], left, null, true);
}

function out(e) {
	unsafeWindow.unset_tip();
}

function pbp() {
   var tag = document.getElementById("pbp");
   if (tag == null) {
       setTimeout(pbp, 300);
   }
   else if (tag.childNodes.length == 0) {
       setTimeout(pbp, 300);
   }
   else {
       var page = new Object();
       page.responseText = tag.innerHTML;
       pbpHandler(null, page);
   }
}

function pbpHandler(address, page) {
    if (plays == null) {
        loadPBPSimple(page);
    }
    
    var addr = window.location.toString();
    var rrplay = document.getElementById("rrplay");
    if (rrplay != null) {
        addr = rrplay.value;
    }
	for (var i=0; i<plays.length-1; i++) {
		if (plays[i].replay == addr) {
			currentPlay = i;
			break;
		}
	}
    //console.log("current play is "+currentPlay);

    //addScore();

    stats = new Stats();
	for (var i=0; i<currentPlay; i++) {
		playHandler(stats, new Drive(), plays[i]);
	}
    addStats();

    unlock();
}

function fetchStats(id, specialTeams) {
//    console.log("id is "+id);
    var player = null;
    var player_names = document.getElementsByClassName("player_name");
    for (var j=0; j<player_names.length; j++) {
        var href = player_names[j].href.toString().split("=")[1];
        if (href == id) {
            player = player_names[j];
            break;
        }
    }

    var icon = player.parentNode.getElementsByTagName("img")[0].src;
    while (icon.indexOf("/") != -1) {
        icon = icon.slice(icon.indexOf("/")+1);
    }
    var pos = icon.replace(".gif","");
    if (isNaN(parseFloat(pos.slice(pos.length-1))) == false) {
        pos = pos.slice(0,pos.length-1);
    }
    switch (pos) {
            case "LDE" :
            case "RDE" : pos = "DE"; break;
            case "LOT" :
            case "ROT" : pos = "OT"; break;
            case "LG" :
            case "RG" : pos = "OG"; break;
            case "NT" : pos = "DT"; break;
            case "RILB" :
            case "LILB" :
            case "ROLB" :
            case "LOLB" :
            case "MLB" : pos = "LB"; break;
    }

    var name = player.innerHTML;
    name = name.replace("&nbsp;"," ").replace(/\s+$/,"");
//    console.log(specialTeams+"] ("+pos+") '"+name+"'");
    var html = "";
    if (pos.match("K") != null) {
        html = getKickingString(stats, name);
    }
    else if (pos.match("P") != null) {
        html = getPuntingString(stats, name);
    }
    else if (specialTeams == true) {
        html = "";
        var tmp = getReturnString(stats, name, true);
        if (tmp != "") html += tmp;
        tmp = getReturnString(stats, name, false);
        if (tmp != "") html += tmp;
        tmp = getDefensiveSTString(stats, name);
        if (tmp != "") html += tmp;
    }
    else {
        if ((pos.match("QB") != null) || (pos.match("ball.gif") != null)) {
            var tmp = getPassingString(stats, name);
            if (tmp != "") {
                html += tmp;
            }
            tmp = getRushingString(stats, name);
            if (tmp != "") {
                html += "<br>";
                html += tmp;
            }
        }
        else if ((pos.match("HB") != null) || (pos.match("FB") != null)) {
            var tmp = getRushingString(stats, name);
            if (tmp != "") {
                html += tmp;
            }
            tmp = getReceivingString(stats, name);
            if (tmp != "") {
                html += "<br>";
                html += tmp;
            }
        }
        else if ((pos.match("WR") != null) || (pos.match("TE") != null)) {
            html = getReceivingString(stats, name);
        }
        else if (pos.match("KR") != null) {
            html = getReturnString(stats, name, true);
        }
        else if (pos.match("PR") != null) {
            html = getReturnString(stats, name, false);
        }
        else if ((pos.match("RS") != null) || (pos.match("OS") != null) ||
                (pos.match("LS") != null)) {
            html = getDefensiveSTString(stats, name);
        }
        else if ((pos.match("OU") != null) || (pos.match("IN") != null) ||
                (pos.match("BW") != null) || (pos.match("FW") != null)) {
            html = getDefensiveSTString(stats, name);
        }
        else if ((pos.match("CB") != null) || (pos.match("S") != null)) {
            var tmp = getDefensiveString(stats, name, "rush");
            if (tmp != "") {
                html += tmp;
            }
            tmp = getDefensiveString(stats, name, "pass");
            if (tmp != "") {
                html += "<br>";
                html += tmp;
            }
        }
        else if ((pos.match("G") != null) || (pos.match("C") != null) ||
                 (pos.match("OT") != null)) {
            html = getOffensiveLineString(stats, name);
        }
        else {
            var tmp = getDefensiveString(stats, name, "rush");
            if (tmp != "") {
                html += tmp;
            }
            tmp = getDefensiveString(stats, name, "pass");
            if (tmp != "") {
                html += "<br>";
                html += tmp;
            }
        }
    }
//    console.log("html is "+html);
    return html;
}

function getPassingString(stats, name) {
	var output = "";
	var index = stats.playerPassingName[1].indexOf(name);
	if (index != -1) {
		var s = stats.playerPassingStats[1][index];
		var cmp = s[0];
		var att = s[1];
		var y = s[2];
		var td = s[3];
		var inter = s[4];

		output = att+" / "+cmp+", "+y.toFixed(0)+" yards";
		if (td != 0) output += ", "+td+" td";
		if (inter != 0) output += ", "+inter+" int";
		//console.log(s);
        var titles = ["Cmp","Att","Pct.","Yards","TD","Int"];
        var data = [cmp, att, (100*cmp/att).toFixed(0)+"%", y.toFixed(0), td, inter];
        output = buildTable(titles, data);
        //console.log(output);
	}
	return output;
}
function getRushingString(stats, name) {
	var output = "";
	var index = stats.playerRushingName[1].indexOf(name);
	if (index != -1) {
		var s = stats.playerRushingStats[1][index];
		var att = s[0];
		var y = s[1];
        var lng = s[2]
		var sr = (100*s[3] / s[0]).toFixed(0);
		//var td = s[?];
		//if (td != 0) output += ", "+td+" td";
		//console.log(s);

		output = att+" att, "+y.toFixed(0)+" yards";
        var titles = ["Att","Yards","Avg","Lng","SR"];
        var data = [att, y.toFixed(0), (y/att).toFixed(2), lng.toFixed(0), sr+"%"];
        output = buildTable(titles, data);
	}
	return output;
}
function getReceivingString(stats, name) {
	var output = "";
	var index = stats.playerReceivingName[1].indexOf(name);
	if (index != -1) {
		var s = stats.playerReceivingStats[1][index];
		var tgt = s[1];
		var rec = s[0];
		var d = s[2];
		var y = s[3];
        var lng = s[4];
		//var td = s[?];

		output = "";
		if (tgt == rec) {
			output += rec+" rec, "+y.toFixed(0)+" yards";
		}
		else {
			output = tgt +" tgt";
			if (rec != 0) output += ", "+rec+" rec, "+y.toFixed(0)+" yards";
		}
		if (d != 0) output += ", "+d+" drop";
		//if (td != 0) output += ", "+td+" td";
		//console.log(s);
        var titles = ["Tgt","Cmp","Yards","Avg","Lng"];
        var data = [tgt, rec, y.toFixed(0), (y/tgt).toFixed(2), lng.toFixed(0)];
        output = buildTable(titles, data);
	}
	return output;
}
function getOffensiveLineString(stats, name) {
	return "";
}
function getDefensiveString(stats, name, type) {
	var output = "";
    if (type == "rush") {
		var tk=0; var miss=0; var stop=0; var dft=0; var ypt=0;
    	var rush = stats.playerDefensiveRushName[0].indexOf(name);
		if (rush != -1) {
			tk += stats.playerDefensiveRushStats[0][rush][0];
			miss += stats.playerDefensiveRushStats[0][rush][1];
			stop += stats.playerDefensiveRushStats[0][rush][3];
			dft += stats.playerDefensiveRushStats[0][rush][4];
			if (tk == 0) {
				ypt = 0.0;
			}
			else {
	            ypt = (stats.playerDefensiveRushStats[0][rush][2] / tk).toFixed(1);
	        }

            var titles = ["Tkl","Miss","YPT","Stop","Dft"];
            var data = [tk,miss,ypt,stop,dft];
            output = buildTable(titles, data);
		}
    }
    else {
		var tk=0; var miss=0; var stop=0; var dft=0; var pd=0; var ypt=0; var inter=0;
    	var pass = stats.playerDefensivePassName[0].indexOf(name);
		if (pass != -1) {
			tk += stats.playerDefensivePassStats[0][pass][0];
			miss += stats.playerDefensivePassStats[0][pass][1];
			stop += stats.playerDefensivePassStats[0][pass][3];
			dft += stats.playerDefensivePassStats[0][pass][4];
			pd += stats.playerDefensivePassStats[0][pass][7];
			if (tk == 0) {
				ypt = 0.0;
			}
			else {
	            ypt = (stats.playerDefensivePassStats[0][pass][2] / tk).toFixed(1);
	        }
//			pd += stats.playerDefensivePassStats[0][pass][6];

            var titles = ["Tkl","Miss","YPT","Stop","Dft", "Int", "PD"];
            var data = [tk,miss,ypt,stop,dft,inter,pd];
            output = buildTable(titles, data);
		}
    }
    return output;
}
function getReturnString(stats, name, isKickRet) {
	var output = "";
	var rn = stats.playerKickReturnName;
	var rs = stats.playerKickReturnStats;
	if (isKickRet == false) {
		rn = stats.playerPuntReturnName;
		rs = stats.playerPuntReturnStats;
	}
	var index = rn[1].indexOf(name);

	if (index != -1) {
		var s = rs[1][index];
		var ret = s[0];
		var y = s[1];
		var td = s[3];
		var lng = s[2];

        var titles = ["KR","Yards","Avg","Lng","TD"];
        if (isKickRet == false) titles[0] = "PR";
        var data = [ret,y.toFixed(0),(y/ret).toFixed(1),lng,td];
        output = buildTable(titles, data);
	}
	return output;
}
function getDefensiveSTString(stats, name) {
	var output = "";
	var index = stats.playerDefensiveSTName[0].indexOf(name);

	if (index != -1) {
		var tk = stats.playerDefensiveSTStats[0][index][0];
		var miss = stats.playerDefensiveSTStats[0][index][1];
        var ypt = 0.0;
        if (tk != 0) {
            ypt = (stats.playerDefensiveSTStats[0][index][2] / tk).toFixed(2);
        }
        
        var titles = ["Tkl","Miss","YPT"];
        var data = [tk,miss,ypt];
        output = buildTable(titles, data);
	}
	return output;
}
function getKickingString(stats, name) {
	var output = "";
	var index = stats.playerKickingName[0].indexOf(name);

	if (index != -1) {
		var k = stats.playerKickingStats[0][index][0];
		var y = stats.playerKickingStats[0][index][1];
		var tb = stats.playerKickingStats[0][index][3];
        var net = stats.playerKickingStats[0][index][5];
		var lng = stats.playerKickingStats[0][index][2];
		var in20 = stats.playerKickingStats[0][index][4];

        var titles = ["K","Yards","Avg","Net","Lng","TB"];
        var data = [k,y.toFixed(0),(y/k).toFixed(1),(net/k).toFixed(1),lng,tb];
        output = buildTable(titles, data);
	}
	return output;
}
function getPuntingString(stats, name) {
	var output = "";
	var index = stats.playerPuntingName[0].indexOf(name);

	if (index != -1) {
		var p = stats.playerPuntingStats[0][index][0];
		var y = stats.playerPuntingStats[0][index][1];
		var tb = stats.playerPuntingStats[0][index][3];
        var net = stats.playerPuntingStats[0][index][5];
		var lng = stats.playerPuntingStats[0][index][2];
		var in20 = stats.playerPuntingStats[0][index][4];

        var titles = ["P","Yards","Avg","Net","Lng","In20"];
        var data = [p,y.toFixed(0),(y/p).toFixed(1),(net/p).toFixed(1),lng,in20];
        output = buildTable(titles, data);
	}
	return output;
}

function buildTable(col, data) {
    var output = '<table>';
    output += '<tbody">';

    output += '<tr>';
    for (var i=0; i<col.length; i++) {
        output += '<th style="text-align: center">'+col[i]+'</th>';
    }
    output += "</tr>"

    output += '<tr>';
    for (var i=0; i<data.length; i++) {
        output += '<td style="text-align: center; background-color: black;">'+data[i]+'</td>';
    }
    output += "</tr>"

    output += "</tbody></table>";
//    console.log(output);
    return output;
}