NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==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.1 // @include http://tagpro-*.koalabeast.com:* // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // @grant GM_addStyle // @grant GM_xmlhttpRequest // @license GPL // @author nabby (using code by ProfessorTag) // ==/UserScript== tagpro.ready(function() { console.log("START: Show R300 Win% on Players..."); //-------- Editable Options -------- var showOnBall = true; var showTable = true; var textColorOnBall = '#FDD017'; var textPositionOnBall = {x:20, y:30}; //-------- End of Options -------- 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.5; 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_Mini').remove(); $('#exit').after('<div id="R3PWP_Mini" style="display:inline-block; position:absolute; top:300px; font-size:10px; background:#333; opacity:0.5"><table id="R3PWP_Players" style="text-align:center; line-height:9px"></table></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('table').eq(0).find('tr').eq(2).find('td').eq(9).text(); //this cell contains the R300 Win% value player.R3PWP.TodayWinP = $(response.responseText).find('table').eq(2).find('tr').eq(1).find('td').eq(9).text(); //"Today" Win% value player.R3PWP.WeekWinP = $(response.responseText).find('table').eq(2).find('tr').eq(2).find('td').eq(9).text(); //"Week" Win% value player.R3PWP.MonthWinP = $(response.responseText).find('table').eq(2).find('tr').eq(3).find('td').eq(9).text(); //"Month" Win% value if ((showOnBall === true) && (!player.sprites.R3PWP)) { addTextToBall(player); } if (showTable === true) { showPlayersTable(); } } }); } 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 }"); } //GM_deleteValue('knownPlayerIds'); var knownPlayerIds = GM_getValue('knownPlayerIds', {}); tagpro.socket.on('time', function() { var x = 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) { 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) { if (showTable === true) { showPlayersTable(); } } } }); });