Last active
August 5, 2017 00:42
-
-
Save jbaaybaay/e0c7a3d6202db7bf2ef76f20e62f1b17 to your computer and use it in GitHub Desktop.
NLTP Jersey Script S10
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 TagPro NLTP Jerseys Season 10 | |
// @version 1.3 | |
// @description Set and change ball jerseys directly from the group page | |
// @author zeeres, modified by ballparts/JBB | |
// @include http://tagpro-*.koalabeast.com* | |
// @grant GM_setValue | |
// @grant GM_getValue | |
// @grant GM_deleteValue | |
// @grant GM_log | |
// ==/UserScript== | |
//== This script is based on Some Ball -1's "TagPro Jerseys" script ==\\ | |
var spinJerseys = true; // true or false | |
// Add your own imgur album links here inside quotes with commas between quoted album links | |
// For example: var customAlbums = ["http://imgur.com/a/0zBNw", "http://imgur.com/a/1abcD"]; (do not include comma if only 1 album) | |
// Images should have titles that match team names and a single digit numerical description that matches team color (0 for either/both, 1 for red, 2 for blue) | |
var Albums = ["http://imgur.com/a/LPSNV"]; | |
// Add your own imgur image links here inside quotes with commas between quoted image links, it must links to the png file | |
// For example: var customImages = ["http://i.imgur.com/17aAwABc.png", "http://i.imgur.com/abc123DEF.png"]; (do not include comma if only 1 image) | |
// Images should have titles that match team names and a single digit numerical description that matches team color (0 for either/both, 1 for red, 2 for blue) | |
// var Images = ["http://i.imgur.com/lSseOzF.png", "http://i.imgur.com/11QxhMC.png"]; // not implemented atm | |
var client_id = 'c638f51525edea6'; // don't steal my client-id. get your own very quickly from here: https://api.imgur.com/oauth2/addclient | |
var default_data = {stored: true, active: true, isPrivate: false, lastRedTeam: false, lastRedTeamName: 'Red', lastBlueTeam: false, lastBlueTeamName: 'Blue', leagues: [], showLeagues: [], known_teams: {}}; // default data | |
var debug = false; | |
function logd(message) { | |
if (debug) console.log(message); | |
} | |
class Settings { | |
constructor(data) { | |
this.prefix = 'TPNJ_'; | |
if (GM_getValue(this.prefix+'stored') === undefined) { // never stored values yet | |
this.data = data; | |
this.store_all(); | |
} else { | |
this.data = {}; | |
for (var d in default_data) { | |
this.data[d] = GM_getValue(this.prefix+d); | |
} | |
} | |
} | |
set(variable, value) { | |
this.data[variable] = value; | |
GM_setValue(this.prefix+variable, value); | |
logd('have set ' + variable + ' to ' + value); | |
logd('check ' + this.prefix + variable + ' was set to ' + GM_getValue(this.prefix+variable)); | |
} | |
delete(variable) { | |
delete this.data[variable]; | |
GM_deleteValue(this.prefix+variable); | |
} | |
get(variable, share_prefix) { | |
share_prefix = share_prefix || false; | |
var value = (share_prefix)?(JSON.parse(window.localStorage.getItem(share_prefix+variable))):GM_getValue(this.prefix+variable); | |
logd((share_prefix)?(variable + ' (from localStorage) is:'):(variable + ' is:')); | |
logd(value); | |
var keys = Object.keys(default_data); | |
var found = false; | |
for(var i = 0; i < keys.length; i++) { | |
if (keys[i] === variable) found = true; | |
} | |
if (value === undefined && !found) { | |
this.set(variable, default_data[variable]); | |
return default_data[variable]; | |
} else return value; | |
} | |
share(variable) { | |
window.localStorage.setItem(this.prefix+variable, JSON.stringify(this.data[variable])); | |
} | |
store_all() { | |
for (var d in this.data) { | |
GM_setValue(this.prefix+d, this.data[d]); | |
} | |
} | |
log_all() { | |
for (var d in this.data) { | |
console.log(d + ': ' + this.data[d]); | |
} | |
} | |
delete_all() { | |
for (var d in this.data) { | |
GM_deleteValue(this.prefix+d); | |
} | |
} | |
} | |
function ObjectIndexOf(myArray, property, searchTerm) { // searches for a property in a {}-object | |
for(var i = 0, len = myArray.length; i < len; i++) { | |
if (myArray[i][property] === searchTerm) return i; | |
} | |
return -1; | |
} | |
function ajax_read_albums() { | |
for (var a = 0; a < Albums.length; a++) { | |
var match = /([A-Za-z0-9_]+)\|([0-9])/; // imgur description will be matched for this | |
logd('Albums['+a+']: ' + Albums[a]); | |
var id = Albums[a].match(/http[s]?:\/\/imgur\.com\/a\/(.+)[\/]?/)[1]; // [0] is the whole string, [1] only the matched group (.+); | |
logd('id: ' + id); | |
$.ajax({ | |
url: 'https://api.imgur.com/3/album/'+id+'/images', | |
headers: { | |
'Authorization': 'Client-ID '+client_id // don't steal my client-id. get your own very quickly from here: https://api.imgur.com/oauth2/addclient | |
}, | |
type: 'GET', | |
success: function(ajax) { | |
var data = settings.get('leagues'); | |
ajax.data.forEach(function(curr) { | |
if(curr.description && curr.title) | |
{ | |
var descriptor = curr.description.match(match); | |
logd('description: ' + curr.description); | |
logd('description.match: ' + curr.description.match(match)); | |
var league_index = ObjectIndexOf(data, "league", descriptor[1]); | |
if (league_index === -1) // new league | |
{ | |
data.push({"league": descriptor[1], "teams": []}); | |
league_index = data.length-1; | |
} | |
var team_index = ObjectIndexOf(data[league_index].teams, "team", curr.title); | |
var jersey_type = parseInt(descriptor[2]); | |
var jersey = (jersey_type === 1)?'red':((jersey_type === 2)?'blue':'neutral'); | |
if(team_index === -1) // new team | |
{ | |
data[league_index].teams.push({"team": curr.title, "jerseys": {}}); | |
team_index = data[league_index].teams.length-1; | |
} | |
//logd('data:'); | |
//logd(data); | |
//logd('league_index:'); | |
//logd(league_index); | |
//logd('team_index:'); | |
//logd(team_index); | |
data[league_index].teams[team_index].jerseys[jersey] = curr.id; | |
} | |
}); | |
logd('ajax2 data: '); | |
logd(data); | |
settings.set('leagues', data); | |
} | |
}); | |
} | |
} | |
function inactive_hide() { | |
$("#tpnj-ul").hide(); | |
$("#tpnj-header").css('background', '#54752d'); | |
$("label#tpnj-league").hide(); | |
} | |
function create_html() { | |
var data = settings.get('leagues'); | |
var $spectators = $('#spectators'); | |
$('<div id="tpnj" class="col-md-12 private-game"><div id="tpnj_group" class="player-group"><div id="tpnj-header" class="player-group-header" style="background: #8bc34a; color: #fff;"><div class="team-name">TagPro NewJerseys</div><div class="pull-right"><label class="btn btn-default" id="clear_btn">clear data</label><label class="btn btn-default" id="tpnj_switch"><input type="checkbox" name="tpnj_active"> active</label></div><div class="clearfix"></div></div><ul id="tpnj-ul" style="background: #353535; border-radius: 0 0 3px 3px; border: 1px solid #404040; border-top: 1px solid #2b2b2b; padding: 10px; overflow-y: auto;"><div id="redselect" class="col-md-6 private-game"></div><div id="blueselect" class="col-md-6 private-game"></div></ul></div></div>').insertBefore('#spectators'); | |
$('input[name="tpnj_active"]').prop('checked', settings.get('active')); | |
$('input[name="tpnj_active"]').change(function() { | |
settings.set('active', this.checked); | |
if (this.checked) { | |
settings.set('active', true); | |
$("#tpnj-ul").show(); | |
$("#tpnj-header").css('background', '#8bc34a'); | |
$("label#tpnj-league").show(); | |
html_data(); | |
} else { | |
settings.set('active', false); | |
inactive_hide(); | |
} | |
}); | |
$('#clear_btn').on('click', function() { | |
settings.delete_all(); | |
alert('You will need to refresh again manually after this page refreshes in order to load the jersey image data.'); | |
window.location.reload(); | |
}); | |
var $playerGroup = $('#tpnj_group'); | |
var showLeagues = settings.get('showLeagues'); | |
logd('showLeagues:'); | |
logd(showLeagues); | |
logd('data.length: ' + data.length); | |
var ord = sort_data(), | |
order = ord[0], | |
order_teams = ord[1]; | |
//order = [0, 1, 2, 3, 4, 5]; | |
logd('ord:'); | |
logd(ord); | |
for (var league = 0; league < order.length; league++) { // button for each league | |
$playerGroup.append('<label class="btn btn-default" id="tpnj-league"><input type="checkbox" name="tpnj_league_' + order[league] + '"> ' + data[order[league]].league + '</label>'); | |
if (showLeagues.indexOf(order[league]) !== -1) { | |
$('input[name="tpnj_league_' + order[league] + '"]').prop('checked', true); | |
} | |
$('input[name="tpnj_league_' + order[league] + '"]').change(function() { | |
var id = parseInt(this.name.match(/tpnj_league_([0-9]*)/)[1]); | |
logd('change_id:' + id); | |
var index = showLeagues.indexOf(id); | |
logd('index: ' + index); | |
if (this.checked) { | |
if (index === -1) { | |
showLeagues.push(id); | |
settings.set('showLeagues', showLeagues); | |
} | |
} else { | |
if (index !== -1) { | |
showLeagues.splice(index, 1); | |
settings.set('showLeagues', showLeagues); | |
} | |
} | |
html_data(); | |
}); | |
} | |
var $redselect = $('#redselect'); | |
$redselect.append('<select id="redTeamJerseys" class="form-control" style="width: 100%"><option value="none">Choose Jersey</option></select></br><div class="player-group small" style="text-align: center;"><img id="redjersey-preview" src=""></div>'); | |
$("#redjersey-preview").hide(); | |
$('#redTeamJerseys').on('change', function() { | |
var val = $('option:selected', this).attr('value'); | |
settings.set('lastRedTeam', val, true); | |
if (val !== 'none') { | |
var d = val.split('.'); | |
var img = data[d[0]].teams[d[1]].jerseys[d[2]]; | |
$("#redjersey-preview").attr("src", "http://i.imgur.com/" + img + ".png").show(); | |
update_known_teams(val, 'red'); | |
html_data(); | |
} else $("#redjersey-preview").hide(); | |
}); | |
var $blueselect = $('#blueselect'); | |
$blueselect.append('<select id="blueTeamJerseys" class="form-control" style="width: 100%"><option value="none">Choose Jersey</option></select></br><div class="player-group small" style="text-align: center;"><img id="bluejersey-preview" src=""></div>'); | |
$("#bluejersey-preview").hide(); | |
$('#blueTeamJerseys').on('change', function() { | |
var val = $('option:selected', this).attr('value'); | |
settings.set('lastBlueTeam', val, true); | |
if (val !== 'none') { | |
var d = val.split('.'); | |
var img = data[d[0]].teams[d[1]].jerseys[d[2]]; | |
$("#bluejersey-preview").attr("src", "http://i.imgur.com/" + img + ".png").show(); | |
update_known_teams(val, 'blue'); | |
} else $("#bluejersey-preview").hide(); | |
}); | |
if (!settings.get('active')) inactive_hide(); | |
} | |
function update_known_teams(val, teamcolor) { | |
var known_teams = settings.get('known_teams'); | |
var teamName = (teamcolor === 'red')?settings.get('redTeamName'):settings.get('blueTeamName'); | |
if (teamName !== 'Red' && teamName !== 'Blue') { | |
known_teams[teamName] = val; | |
} | |
settings.set('known_teams', known_teams, true); | |
} | |
function convert_known_team(team_name, teamcolor) { // convert known_team (teamname, not "ltj") to appropriate teamcolor ltj | |
var ltj = settings.get('known_teams')[team_name]; | |
if (ltj === undefined) return false; // if not found | |
var d = ltj.split('.'); | |
var color = d[3]; | |
if (d[2] !== 'neutral') color = teamcolor; | |
return d[0]+'.'+d[1]+'.'+color; | |
// TODO: check if new ltj is available | |
} | |
function convert_ltj(ltj, teamcolor) { // convert ltj to appropriate teamcolor ltj | |
var d = ltj.split('.'); | |
var color = d[3]; | |
if (d[2] !== 'neutral') color = teamcolor; | |
return d[0]+'.'+d[1]+'.'+color; | |
// TODO: check if new ltj is available | |
} | |
function html_data() { | |
var data = settings.get('leagues'); | |
$('#redTeamJerseys').children().remove(); // remove all teams from select box | |
$('#blueTeamJerseys').children().remove(); // remove all teams from select box | |
// add teams to select box again | |
var showLeagues = settings.get('showLeagues'); | |
logd('showLeagues: ' + showLeagues); | |
for (var l in showLeagues) { | |
var li = showLeagues[l]; | |
var $groupRed = $('<optgroup label="'+data[li].league+'">'); | |
var $groupBlue = $('<optgroup label="'+data[li].league+'">'); | |
for(var t = 0; t < data[li].teams.length; t++) | |
{ | |
var team = data[li].teams[t].team; | |
var jerseys = data[li].teams[t].jerseys; | |
var option = ''; | |
if (jerseys.red) $groupRed.append('<option value="'+li+'.'+t+'.red">'+team+'</option>'); // value format: "league_index.team_index.jersey_type | |
if (jerseys.blue) $groupBlue.append('<option value="'+li+'.'+t+'.blue">'+team+'</option>'); // value format: "league_index.team_index.jersey_type | |
if (jerseys.neutral) { | |
$groupRed.append('<option value="'+li+'.'+t+'.neutral">'+team+' (n)</option>'); // value format: "league_index.team_index.jersey_type | |
$groupBlue.append('<option value="'+li+'.'+t+'.neutral">'+team+' (n)</option>'); // value format: "league_index.team_index.jersey_type | |
} | |
} | |
$('#redTeamJerseys')[0].add($groupRed[0]); | |
$('#blueTeamJerseys')[0].add($groupBlue[0]); | |
} | |
var lastRedTeam = settings.get('lastRedTeam'); | |
var d, img; | |
var known_teams = settings.get('known_teams'); | |
if(lastRedTeam) { | |
$('#redTeamJerseys').val(lastRedTeam); | |
d = lastRedTeam.split('.'); | |
} else { | |
$('#redTeamJerseys').val(known_teams[settings.get('redTeamName')]); | |
} | |
if (d !== undefined) { // if lastRedTeam is not of the format "league.team.jersey" | |
img = data[d[0]].teams[d[1]].jerseys[d[2]]; | |
$("#redjersey-preview").attr("src", "http://i.imgur.com/" + img + ".png").show(); | |
} | |
var db, imgb; | |
var lastBlueTeam = settings.get('lastBlueTeam'); | |
if(lastBlueTeam) { | |
$('#blueTeamJerseys').val(lastBlueTeam); | |
db = lastBlueTeam.split('.'); | |
} else { | |
$('#blueTeamJerseys').val(known_teams[settings.get('blueTeamName')]); | |
} | |
if (db !== undefined) { | |
imgb = data[db[0]].teams[db[1]].jerseys[db[2]]; | |
$("#bluejersey-preview").attr("src", "http://i.imgur.com/" + imgb + ".png").show(); | |
} | |
} | |
function sort_data() { | |
// sort data | |
var data = settings.get('leagues'); | |
data.sort(function(a, b) { // sort data by league name: | |
var nameA = a.league.toUpperCase(); | |
var nameB = b.league.toUpperCase(); | |
return nameA.localeCompare(nameB); | |
}); | |
for (var l = 0; l < data.length; l++) { // sort teams in each league | |
data[l].teams.sort(function(a, b) { | |
var nameA = a.team.toUpperCase(); | |
var nameB = b.team.toUpperCase(); | |
return nameA.localeCompare(nameB); | |
}); | |
} | |
var sorted = data, | |
order = [], | |
order_teams = []; | |
logd('sorted: '); | |
logd(sorted); | |
data = settings.get('leagues'); | |
for (var i = 0; i < sorted.length; i++) { | |
var index = ObjectIndexOf(data, "league", sorted[i].league); | |
logd('index:'); | |
logd(index); | |
order.push(index); | |
var order_team = []; | |
for (var t = 0; t < sorted[i].teams.length; t++) { | |
var index2 = ObjectIndexOf(data[index].teams, "team", sorted[i].teams[t]); | |
order_team.push(index2); | |
} | |
order_teams.push(order_team); | |
} | |
logd('order:'); | |
logd(order); | |
logd('order_teams:'); | |
logd(order_teams); | |
return [order, order_teams]; | |
} | |
var WhereAmI = function(){ | |
if (window.location.port) { | |
return('game'); | |
} else if (window.location.pathname.startsWith('/groups/')) { | |
return('group'); | |
} else { | |
return('elsewhere'); | |
} | |
}; | |
var IAmIn = WhereAmI(); | |
var settings = new Settings(default_data); | |
//settings.delete_all(); | |
//settings = new Settings(); | |
if(IAmIn === 'group') // group page | |
{ | |
var init = false; | |
tagpro.group.socket.on('private',function(priv) { | |
if (!priv.isPrivate) settings.set('isPrivate', false); | |
if (priv.isPrivate && !init) | |
{ | |
ajax_read_albums(); | |
settings.store_all(); | |
logd('asdf: ' + settings.get('leagues')); | |
create_html(); | |
html_data(); | |
settings.set('isPrivate', true); | |
init = true; | |
tagpro.group.socket.on('setting',function(setting) { | |
var data = settings.get('leagues'); | |
var known_teams = settings.get('known_teams'); | |
for (var t in known_teams) { | |
logd('t: ' + t); | |
if (known_teams.hasOwnProperty(t)) { | |
logd('known_teams[' + t + ']: ' + known_teams[t]); | |
} | |
} | |
var known_teams_ltj; | |
if (setting.name === 'redTeamName') { | |
known_teams_ltj = known_teams[setting.value]; | |
logd('known_teams_ltj red: ' + known_teams_ltj); | |
settings.set('redTeamName', setting.value); | |
if (setting.value !== 'Red' && known_teams_ltj) { | |
var ltjr = convert_known_team(setting.value, 'red'); | |
if (ltjr) { | |
logd('convert_known_team red: ' + convert_known_team(setting.value, 'red')); | |
$('#redTeamJerseys').val(convert_known_team(setting.value, 'red')); | |
var d = ltjr.split('.'); | |
if (d !== undefined) { // if ltjr is not of the format "league.team.jersey" | |
var img = data[d[0]].teams[d[1]].jerseys[d[2]]; | |
$("#redjersey-preview").attr("src", "http://i.imgur.com/" + img + ".png").show(); | |
settings.set('lastRedTeam', ltjr, true); | |
} | |
} | |
} | |
} else if (setting.name === 'blueTeamName') { | |
var redTeamName = settings.get('redTeamName'), | |
blueTeamName = settings.get('blueTeamName'); | |
known_teams_ltj = settings.get('known_teams')[setting.value]; | |
logd('known_teams_ltj blue: ' + known_teams_ltj); | |
settings.set('blueTeamName', setting.value); | |
if (setting.value !== 'Blue' && known_teams_ltj) { | |
var ltjb = convert_known_team(setting.value, 'blue'); | |
if (ltjb) { | |
logd('convert_known_team blue: ' + ltjb); | |
$('#blueTeamJerseys').val(ltjb); | |
var db = ltjb.split('.'); | |
if (db !== undefined) { // if ltjb is not of the format "league.team.jersey" | |
var imgb = data[db[0]].teams[db[1]].jerseys[db[2]]; | |
$("#bluejersey-preview").attr("src", "http://i.imgur.com/" + imgb + ".png").show(); | |
settings.set('lastBlueTeam', ltjb, true); | |
} | |
} | |
} /* else if (setting.value === 'Blue' && blueTeamName === 'Blue') { // if teams are switched (without custom names being set) | |
var ltj1 = convert_ltj($('#redTeamJerseys').val(), 'blue'), | |
ltj2 = convert_ltj($('#blueTeamJerseys').val(), 'red'); | |
$('#redTeamJerseys').val(ltj2); | |
$('#blueTeamJerseys').val(ltj1); | |
var d2 = ltj2.split('.'); | |
if (d2 !== undefined) { | |
var img2 = data[d2[0]].teams[d2[1]].jerseys[d2[2]]; | |
$("#redjersey-preview").attr("src", "http://i.imgur.com/" + img2 + ".png").show(); | |
settings.set('lastRedTeam', ltj2, true); | |
} | |
var d1 = ltj1.split('.'); | |
if (d1 !== undefined) { | |
var img1 = data[d1[0]].teams[d1[1]].jerseys[d1[2]]; | |
$("#bluejersey-preview").attr("src", "http://i.imgur.com/" + img1 + ".png").show(); | |
settings.set('lastBlueTeam', ltj1, true); | |
} | |
}*/ // TODO: also triggers when refreshing/coming back from game, workaround? | |
} | |
}); | |
} | |
}); | |
} | |
else if (IAmIn === 'game') { // ingame, draw jersey if there is one | |
settings.share('leagues'); | |
settings.share('known_teams'); | |
settings.share('lastRedTeam'); | |
settings.share('lastBlueTeam'); | |
tagpro.ready(function() { | |
if (tagpro.group.socket && settings.get('isPrivate') && settings.get('active')) // if script is activated and group is private | |
{ | |
var ltjr = settings.get('lastRedTeam'); | |
var ltjb = settings.get('lastBlueTeam'); | |
if ((ltjr && ltjr !== undefined) || (ltjb && ltjb !== undefined)) { // one of red or blue is not false => at least one jersey was set | |
var leagues = settings.get('leagues'); | |
var dr = ltjr.split('.'), db = ltjb.split('.'); | |
var imgr = leagues[dr[0]].teams[dr[1]].jerseys[dr[2]], imgb = leagues[db[0]].teams[db[1]].jerseys[db[2]]; | |
logd('dr:' + dr); | |
logd('db:' + db); | |
var tr = tagpro.renderer, | |
oldUPSP = tr.updatePlayerSpritePosition; | |
tr.createJersey = function(player) { | |
var img = (player.team === 1)?imgr:imgb; | |
if(!img) // make empty container if one team doesn't have a jersey | |
{ | |
if(player.sprites.jersey) player.sprites.ball.removeChild(player.sprites.jersey); | |
player.sprites.jersey = new PIXI.DisplayObjectContainer(); | |
player.sprites.jersey.team = player.team; | |
player.sprites.ball.addChildAt(player.sprites.jersey,1); | |
} | |
else | |
{ | |
if(player.sprites.jersey) player.sprites.ball.removeChild(player.sprites.jersey); | |
player.sprites.jersey = new PIXI.Sprite(PIXI.Texture.fromImage('http://i.imgur.com/' + img + '.png')); | |
player.sprites.jersey.team = player.team; | |
player.sprites.ball.addChildAt(player.sprites.jersey, 1); // add on top of ball, below other stuff | |
player.sprites.jersey.anchor.x = 0.5; | |
player.sprites.jersey.anchor.y = 0.5; | |
player.sprites.jersey.x = 20; | |
player.sprites.jersey.y = 20; | |
} | |
}; | |
tr.updatePlayerSpritePosition = function(player) { | |
if(!player.sprites.jersey) tr.createJersey(player); | |
if(player.sprites.jersey.team!==player.team) tr.createJersey(player); | |
var index = player.sprites.ball.getChildIndex(player.sprites.actualBall)+1; | |
if(index!==player.sprites.ball.getChildIndex(player.sprites.jersey)) player.sprites.ball.setChildIndex(player.sprites.jersey,index); | |
if(spinJerseys) player.sprites.jersey.rotation = player.angle; | |
oldUPSP(player); | |
}; | |
} | |
} else { // if not in group, reset the last teams | |
settings.set('lastRedTeam', false, true); | |
settings.set('lastBlueTeam', false, true); | |
settings.set('isPrivate', false); | |
} | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment