// ==UserScript==
// @name Replay Rewrite - Follow Player
// @desciption description
// @namespace pbr
// @description Skip replays that don't have a selected player
// @include http://goallineblitz.com/game/replay.pl?game_id=*&pbp_id=*
// @include http://glb.warriorgeneral.com/game/replay.pl?game_id=*&pbp_id=*
// @copyright 2010, 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==
var scriptName = "Follow Player";
var scriptVersion = "13.12.29";
var scriptWebpage = "http://userscripts.org/scripts/show/88782";
var lastSelected = null;
var playerIds = new Array();
var playerNames = new Array();
var playerReplays = new Array();
var plays = null;
window.setTimeout( function() {
init(true);
}, 1000);
function activate(e) {
console.log("activate follow");
lock();
pbp();
if (document.getElementById("player_select") == null) {
createControls();
}
removePlayers();
addPlayers();
unlock();
}
function pbp() {
var tag = document.getElementById("pbp");
if (tag == null) {
setTimeout(pbp, 300);
}
else if (tag.childNodes.length == 0) {
setTimeout(pbp, 300);
}
else {
var p = new Array();
var plText = tag.innerHTML.split("pbp_id=");
for (var i=1; i<plText.length; i++) {
p.push(parseInt(plText[i])+"");
}
console.log("fp pl.len="+p.length);
plays = p;
}
}
function createControls() {
var div = document.createElement("div");
div.setAttribute("id","player_controls");
div.setAttribute("style","width: 650px; margin-top: 4px;");
var left = document.createElement("a");
left.setAttribute("class","button left");
left.innerHTML = "<span>< Prev</span>";
left.addEventListener("click",prevPlayer,true);
var select = document.createElement("select");
select.setAttribute("id","player_select");
var right = document.createElement("a");
right.setAttribute("class","button left");
right.innerHTML = "<span>> Next</span>";
right.addEventListener("click",nextPlayer,true);
var info = document.createElement("div");
info.setAttribute("id","player_replay_count");
div.appendChild(left);
div.appendChild(select);
div.appendChild(right);
div.appendChild(info);
var footer = document.getElementById("replay_footer");
footer.insertBefore(div,footer.childNodes[5]);
}
function removePlayers() {
while (document.getElementById("player_select").options.length > 0) {
document.getElementById("player_select").remove(0);
}
}
function addPlayers() {
var select = document.getElementById("player_select");
for (p in unsafeWindow.players) {
var pos = unsafeWindow.players[p].position;
var name = unsafeWindow.players[p].name;
var id = p;
var option = document.createElement("option");
option.text = name;
var pos = null;
for (var i=0; i<select.options.length; i++) {
if (select.options[i].text > option.text) {
pos = select.options[i];
break;
}
}
select.add(option, pos);
}
var others = false;
for (var j=0; j<playerNames.length; j++) {
var found = false;
for (var i=0; i<select.options.length; i++) {
if (select.options[i].text == playerNames[j]) {
found = true;
break;
}
}
if (found == false) {
if (others == false) {
others = true;
var option = document.createElement("option");
option.text = "---------------";
select.add(option, null);
}
var option = document.createElement("option");
option.text = playerNames[j];
select.add(option, null);
}
}
var options = select.options;
for (var i=0; i<options.length; i++) {
if (options[i].text == lastSelected) {
select.selectedIndex = i;
break;
}
}
}
function prevPlayer() {
if (plays == null) setTimeout(prevPlayer, 500);
console.log("prevPlayer: plays.length="+plays.length);
var select = document.getElementById("player_select");
if (select.selectedIndex < 0) return;
var id = null;
var name = select.options[select.selectedIndex].text;
for (var i=0; i<playerNames.length; i++) {
if (name == playerNames[i]) {
id = playerIds[i];
break;
}
}
if (id == null) {
for (p in unsafeWindow.players) {
if (unsafeWindow.players[p].name == name) {
id = p;
break;
}
}
}
if (id == null) {
console.log(id+") "+name+" : player not found?");
return;
}
var data = null;
for (var i=0; i<playerIds.length; i++) {
if (playerIds[i] == id) {
data = playerReplays[i];
playerNames[i] = name;
lastSelected = name;
break;
}
}
if (data == null) {
if (id == null) return;
var address = document.location.href.toString();
address = address.split("&")[0];
address = address.replace("replay","player_replays");
address += "&player_id="+id;
console.log(address);
getInetPage(address,loadPlayer,null);
setTimeout(prevPlayer, 500);
return;
}
else {
var currentPlay = document.getElementById("rrplay").value;
currentPlay = parseInt(currentPlay.split("pbp_id=")[1]);
console.log("current play is : "+currentPlay);
for (var i=1; i<data.length; i++) {
if (data[i] >= currentPlay) {
var prevPlay = data[i-1];
console.log("prev play is : "+prevPlay);
for (var j=0; j<plays.length; j++) {
if (plays[j] == prevPlay) {
var pplaybtn = document.getElementsByClassName("pplaybtn")[0];
pplaybtn.setAttribute("id",j);
console.log(prevPlay+" : "+currentPlay+" : "+j);
var info = document.getElementById("player_replay_count");
info.innerHTML = (i)+" of "+data.length;
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", false, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
pplaybtn.firstChild.dispatchEvent(evt);
break;
}
}
break;
}
}
}
}
function nextPlayer() {
if (plays == null) setTimeout(nextPlayer, 500);
console.log("nextPlayer: plays.length="+plays.length);
var select = document.getElementById("player_select");
if (select.selectedIndex < 0) return;
var id = null;
var name = select.options[select.selectedIndex].text;
for (var i=0; i<playerNames.length; i++) {
if (name == playerNames[i]) {
id = playerIds[i];
break;
}
}
if (id == null) {
for (p in unsafeWindow.players) {
if (unsafeWindow.players[p].name == name) {
id = p;
break;
}
}
}
if (id == null) {
console.log(id+") "+name+" : player not found?");
return;
}
var data = null;
for (var i=0; i<playerIds.length; i++) {
if (playerIds[i] == id) {
data = playerReplays[i];
playerNames[i] = name;
lastSelected = name;
break;
}
}
if (data == null) {
if (id == null) return;
var address = document.location.href.toString();
address = address.split("&")[0];
address = address.replace("replay","player_replays");
address += "&player_id="+id;
console.log(address);
getInetPage(address,loadPlayer,null);
setTimeout(nextPlayer, 500);
return;
}
else {
var currentPlay = document.getElementById("rrplay").value;
currentPlay = parseInt(currentPlay.split("pbp_id=")[1]);
console.log("current play is : "+currentPlay);
for (var i=0; i<data.length; i++) {
if (data[i] > currentPlay) {
var nextPlay = data[i];
console.log("next play is : "+nextPlay);
for (var j=0; j<plays.length; j++) {
if (plays[j] == nextPlay) {
var nplaybtn = document.getElementsByClassName("nplaybtn")[0];
nplaybtn.setAttribute("id",j);
console.log(nextPlay+" : "+currentPlay+" : "+j);
var info = document.getElementById("player_replay_count");
info.innerHTML = (i+1)+" of "+data.length;
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", false, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
nplaybtn.firstChild.dispatchEvent(evt);
break;
}
}
break;
}
}
}
}
function loadPlayer(address, page) {
var playerId = parseInt(address.split("player_id=")[1])+"";
var pbp = new Array();
var text = page.responseText.split("pbp_id=");
for (var i=1; i<text.length; i++) {
pbp.push(parseInt(text[i])+"");
}
playerIds.push(playerId);
playerReplays.push(pbp);
}