Last active
January 30, 2020 16:09
-
-
Save nabbynz/6133ab322f42a92edd1b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Show R300 Win% on Players | |
// @description Shows players Rolling 300 Win% on their ball (and/or in a table) | |
// Works for registered (green) names only (and only if they appear on tagpro-stats.com) | |
// @version 0.1.6 | |
// @include http://tagpro-*.koalabeast.com:* | |
// @include http://*.newcompte.fr:* | |
// @connect tagpro-stats.com | |
// @connect koalabeast.com | |
// @connect newcompte.fr | |
// @grant GM_setValue | |
// @grant GM_getValue | |
// @grant GM_deleteValue | |
// @grant GM_addStyle | |
// @grant GM_xmlhttpRequest | |
// @updateURL https://gist.github.com/nabbynz/6133ab322f42a92edd1b/raw/TagPro_Show_R300WinPC_On_Players.user.js | |
// @downloadURL https://gist.github.com/nabbynz/6133ab322f42a92edd1b/raw/TagPro_Show_R300WinPC_On_Players.user.js | |
// @license GPL | |
// @author nabby (using code by ProfessorTag) | |
// ==/UserScript== | |
console.log('START: ' + GM_info.script.name + ' (v' + GM_info.script.version + ' by ' + GM_info.script.author + ')'); | |
tagpro.ready(function() { | |
var showOnBall = true; | |
var showTable = false; | |
var textColorOnBall = '#FDD017'; | |
var textPositionOnBall = {x:20, y:30}; | |
if (tagpro.serverHost === null) tagpro.serverHost = document.URL.replace('http://', '').replace(/:(.*)/, ''); | |
function getAllPlayers(auth) { | |
auth = auth || false; | |
var players = []; | |
for (var playerId in tagpro.players) { | |
if ( (tagpro.players.hasOwnProperty(playerId)) && (!auth || (auth && tagpro.players[playerId].auth)) ) { | |
players.push(tagpro.players[playerId]); | |
} | |
} | |
return players; | |
} | |
function addTextToBall(player) { | |
if (!player.sprites.R3PWP) { | |
var R3PWP_PrettyText = tagpro.renderer.prettyText(player.R3PWP.R300WinP, textColorOnBall); | |
R3PWP_PrettyText.x = textPositionOnBall.x; | |
R3PWP_PrettyText.y = textPositionOnBall.y; | |
R3PWP_PrettyText.alpha = 0.4; | |
player.sprites.R3PWP = R3PWP_PrettyText; | |
player.sprites.name.addChild(player.sprites.R3PWP); | |
} | |
} | |
function getProfileId(player) { | |
GM_xmlhttpRequest({ | |
method: 'GET', | |
url: 'http://www.tagpro-stats.com/autocomplete.php?string=' + encodeURIComponent(player.name) + '+', | |
onload: function(response) { | |
if (!response.responseText) { | |
return; | |
} | |
var tpStatsId = response.responseText.match(new RegExp('(\\d+)\'>' + player.name + '<', 'i'))[1]; | |
if (!tpStatsId) return; | |
GM_xmlhttpRequest({ | |
method: 'GET', | |
url: 'http://www.tagpro-stats.com/profile.php?userid=' + tpStatsId, | |
onload: function(response) { | |
if (!response.responseText) { | |
return; | |
} | |
var profileId = response.responseText.match(/profile\/([^"]+)/)[1]; | |
if (!profileId) return; | |
knownPlayerIds[player.name] = {}; //add to our known players so faster next time | |
knownPlayerIds[player.name].profileId = profileId; | |
GM_setValue('knownPlayerIds', knownPlayerIds); | |
getWinPercentage(player); | |
} | |
}); | |
} | |
}); | |
} | |
function showPlayersTable() { | |
var players = getAllPlayers(false); | |
$('#R3PWP_Players').remove(); | |
$('#R3PWP_Mini').append('<table id="R3PWP_Players" style="text-align:center; line-height:9px"></div>'); | |
$('#R3PWP_Players').append('<tr><th id="R3PWP_Refresh">P</th><th title="Rolling 300 Win %">R</th><th title="Today\'s Win %">T</th><th title="Weekly Win %">W</th><th title="Monthly Win %">M</th></tr>'); | |
$.each(players, function(key, player) { | |
if (player.auth && player.hasOwnProperty('R3PWP') && knownPlayerIds.hasOwnProperty(player.name)) { | |
var profileURL = "http://" + tagpro.serverHost + "/profile/" + knownPlayerIds[player.name].profileId; | |
$('#R3PWP_Players').append('<tr style="color:'+(player.team == 1 ? '#ffb0b0' : '#c0c0ff')+'"><td><a href="'+profileURL+'" target="_blank" style="color:'+(player.team == 1 ? '#ffb0b0' : '#c0c0ff')+'; text-decoration:underline">'+player.name+'</a></td><td>'+player.R3PWP.R300WinP+'</td><td>'+player.R3PWP.TodayWinP+'</td><td>'+player.R3PWP.WeekWinP+'</td><td>'+player.R3PWP.MonthWinP+'</td></tr>'); | |
} else { | |
$('#R3PWP_Players').append('<tr style="color:'+(player.team == 1 ? '#ffb0b0' : '#c0c0ff')+'"><td>'+player.name+'</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>'); | |
} | |
}); | |
} | |
function getWinPercentage(player) { | |
if (!player.hasOwnProperty('R3PWP')) { | |
player.R3PWP = {}; | |
} | |
if (!player.R3PWP.hasOwnProperty('R300WinP')) { | |
var profileURL = "http://" + tagpro.serverHost + "/profile/" + knownPlayerIds[player.name].profileId; | |
GM_xmlhttpRequest({ | |
method: 'GET', | |
url: profileURL, | |
onload: function(response) { | |
if (!response.responseText) { | |
return; | |
} | |
player.R3PWP.profileId = knownPlayerIds[player.name].profileId; | |
player.R3PWP.R300WinP = $(response.responseText).find('#rolling').find('tbody').find('tr').eq(0).find('td').eq(1).text().trim(); //this cell contains the R300 Win% value | |
player.R3PWP.TodayWinP = $(response.responseText).find('#all-stats').find('tbody').find('tr').eq(0).find('td').eq(1).text().trim(); //"Today" Win% value | |
player.R3PWP.WeekWinP = $(response.responseText).find('#all-stats').find('tbody').find('tr').eq(0).find('td').eq(2).text().trim(); //"Week" Win% value | |
player.R3PWP.MonthWinP = $(response.responseText).find('#all-stats').find('tbody').find('tr').eq(0).find('td').eq(3).text().trim(); //"Month" Win% value | |
if ((showOnBall === true) && (!player.sprites.R3PWP)) { | |
addTextToBall(player); | |
} | |
if (showTable === true) { | |
showPlayersTable(); | |
} | |
}, | |
onerror: function(response) { | |
console.log('Win% on Players Error: '+player.name); | |
console.log(response); | |
} | |
}); | |
} else { | |
if (showTable === true) { | |
showPlayersTable(); | |
} | |
} | |
} | |
if (showTable === true) { | |
GM_addStyle("#R3PWP_Players th { text-align:center; cursor:default; background:#fff; color:#000; }"); | |
GM_addStyle("#R3PWP_Players td { text-align:center; cursor:default; padding:1px 1px 0 1px }"); | |
} | |
$('#exit').after('<div id="R3PWP_Mini" style="display:inline-block; position:absolute; top:300px; font-size:10px; background:#333; opacity:0.5"></table>'); | |
//GM_deleteValue('knownPlayerIds'); | |
var knownPlayerIds = GM_getValue('knownPlayerIds', {}); | |
tagpro.socket.on('time', function() { | |
setTimeout(function() { | |
var authPlayers = getAllPlayers(true); | |
$.each(authPlayers, function(key, player) { | |
if (knownPlayerIds.hasOwnProperty(player.name)) { | |
getWinPercentage(player); | |
} else { | |
getProfileId(player); | |
} | |
}); | |
}, 500); | |
}); | |
tagpro.socket.on('chat', function(data) { | |
if ((data.from === null) && (tagpro.state === 1)) { //system message | |
if (data.message.indexOf('has joined the') >= 0) { //update balls (& table) when a player joining | |
var authPlayers = getAllPlayers(true); | |
$.each(authPlayers, function(key, player) { | |
if (knownPlayerIds.hasOwnProperty(player.name)) { | |
getWinPercentage(player); | |
} else { | |
getProfileId(player); | |
} | |
}); | |
} else if (data.message.indexOf('has left the') >= 0) { //update the table when a player leaves | |
if (showTable === true) { | |
showPlayersTable(); | |
} | |
} | |
} | |
}); | |
$('#R3PWP_Mini').on('click', '#R3PWP_Refresh', function() { | |
var authPlayers = getAllPlayers(true); | |
$.each(authPlayers, function(key, player) { | |
if (knownPlayerIds.hasOwnProperty(player.name)) { | |
getWinPercentage(player); | |
} else { | |
getProfileId(player); | |
} | |
}); | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
tagpro.serverHost is busted. I've put in an alternate solution using window.location that you can find here if you want to update this.