Guest User

NALTP Jerseys

a guest
Dec 2nd, 2016
355
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.56 KB | None | 0 0
  1. // ==UserScript==
  2. // @name TagPro NewJerseys
  3. // @version 1.0.3
  4. // @description Set and change ball jerseys directly from the group page
  5. // @author zeeres
  6. // @include http://tagpro-*.koalabeast.com*
  7. // @grant GM_setValue
  8. // @grant GM_getValue
  9. // @grant GM_deleteValue
  10. // @grant GM_log
  11. // ==/UserScript==
  12.  
  13. //== This script is based on Some Ball -1's "TagPro Jerseys" script ==\\
  14.  
  15. var spinJerseys = true; //true or false
  16.  
  17. // Add your own imgur album links here inside quotes with commas between quoted album links
  18. // For example: var customAlbums = ["http://imgur.com/a/0zBNw", "http://imgur.com/a/1abcD"]; (do not include comma if only 1 album)
  19. // 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)
  20. var Albums = ["https://imgur.com/a/tEXAp", "https://imgur.com/a/DSl3a"];
  21.  
  22. // Add your own imgur image links here inside quotes with commas between quoted image links, it must links to the png file
  23. // For example: var customImages = ["http://i.imgur.com/17aAwABc.png", "http://i.imgur.com/abc123DEF.png"]; (do not include comma if only 1 image)
  24. // 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)
  25. var Images = ["http://i.imgur.com/s5qMtnL.png"]; // not implemented atm
  26.  
  27. var client_id = 'c638f51525edea6'; // don't steal my client-id. get your own very quickly from here: https://api.imgur.com/oauth2/addclient
  28.  
  29. var default_data = {stored: true, active: true, isPrivate: false, lastRedTeam: false, lastRedTeamName: 'Red', lastBlueTeam: false, lastBlueTeamName: 'Blue', leagues: [], showLeagues: [], known_teams: {}}; // default data
  30.  
  31. class Settings {
  32. constructor(data) {
  33. this.prefix = 'TPNJ_';
  34. if (GM_getValue(this.prefix+'stored') === undefined) { // never stored values yet
  35. this.data = data;
  36. this.store_all();
  37. } else {
  38. this.data = {};
  39. for (var d in default_data) {
  40. this.data[d] = GM_getValue(this.prefix+d);
  41. }
  42. }
  43. }
  44. set(variable, value) {
  45. this.data[variable] = value;
  46. GM_setValue(this.prefix+variable, value);
  47. }
  48. delete(variable) {
  49. delete this.data[variable];
  50. GM_deleteValue(this.prefix+variable);
  51. }
  52. get(variable) {
  53. var value = GM_getValue(this.prefix+variable);
  54. var keys = Object.keys(default_data);
  55. var found = false;
  56. for(var i = 0; i < keys.length; i++) {
  57. if (keys[i] === variable) found = true;
  58. }
  59. if (value === undefined && !found) {
  60. this.set(variable, default_data[variable]);
  61. return default_data[variable];
  62. } else return value;
  63. }
  64. store_all() {
  65. for (var d in this.data) {
  66. GM_setValue(this.prefix+d, this.data[d]);
  67. }
  68. }
  69. log_all() {
  70. for (var d in this.data) {
  71. console.log(d + ': ' + this.data[d]);
  72. }
  73. }
  74. delete_all() {
  75. for (var d in this.data) {
  76. GM_deleteValue(this.prefix+d);
  77. }
  78. }
  79. }
  80.  
  81. function ObjectIndexOf(myArray, property, searchTerm) { // searches for a property in a {}-object
  82. for(var i = 0, len = myArray.length; i < len; i++) {
  83. if (myArray[i][property] === searchTerm) return i;
  84. }
  85. return -1;
  86. }
  87.  
  88.  
  89. function ajax_read_albums() {
  90. for (var a = 0; a < Albums.length; a++) {
  91. var match = /([A-Za-z]+)\|([0-9])/; // imgur description will be matched for this
  92. var id = Albums[a].match(/http[s]?:\/\/imgur\.com\/a\/(.+)[\/]?/)[1]; // [0] is the whole string, [1] only the matched group (.+);
  93. $.ajax({
  94. url: 'https://api.imgur.com/3/album/'+id+'/images',
  95. headers: {
  96. 'Authorization': 'Client-ID '+client_id // don't steal my client-id. get your own very quickly from here: https://api.imgur.com/oauth2/addclient
  97. },
  98. type: 'GET',
  99. success: function(ajax) {
  100. var data = settings.get('leagues');
  101. ajax.data.forEach(function(curr) {
  102. if(curr.description && curr.title)
  103. {
  104. var descriptor = curr.description.match(match);
  105. var league_index = ObjectIndexOf(data, "league", descriptor[1]);
  106. if (league_index === -1) // new league
  107. {
  108. data.push({"league": descriptor[1], "teams": []});
  109. league_index = data.length-1;
  110. }
  111. var team_index = ObjectIndexOf(data[league_index].teams, "team", curr.title);
  112. var jersey_type = parseInt(descriptor[2]);
  113. var jersey = (jersey_type === 1)?'red':((jersey_type === 2)?'blue':'neutral');
  114. if(team_index === -1) // new team
  115. {
  116. data[league_index].teams.push({"team": curr.title, "jerseys": {jersey: curr.id}});
  117. } else {
  118. data[league_index].teams[team_index].jerseys[jersey] = curr.id;
  119. }
  120. }
  121. });
  122. settings.set('leagues', data);
  123. }
  124. });
  125. }
  126. }
  127.  
  128. function inactive_hide() {
  129. $("#tpnj-ul").hide();
  130. $("#tpnj-header").css('background', '#54752d');
  131. $("label#tpnj-league").hide();
  132. }
  133.  
  134. function create_html() {
  135. var data = settings.get('leagues');
  136. var $spectators = $('#spectators');
  137. $('<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="tnjp_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');
  138. $('input[name="tpnj_active"]').prop('checked', settings.get('active'));
  139. $('input[name="tpnj_active"]').change(function() {
  140. settings.set('active', this.checked);
  141. if (this.checked) {
  142. settings.set('active', true);
  143. $("#tpnj-ul").show();
  144. $("#tpnj-header").css('background', '#8bc34a');
  145. $("label#tpnj-league").show();
  146. html_data();
  147. } else {
  148. settings.set('active', false);
  149. inactive_hide();
  150. }
  151. });
  152.  
  153. var $playerGroup = $('#tpnj_group');
  154. var showLeagues = settings.get('showLeagues');
  155. for (var league = 0; league < data.length; league++) { // button for each league
  156. $playerGroup.append('<label class="btn btn-default" id="tpnj-league"><input type="checkbox" name="tpnj_league_' + league + '"> ' + data[league].league + '</label>');
  157. if (showLeagues.indexOf(league) !== -1) {
  158. $('input[name="tpnj_league_' + league + '"]').prop('checked', true);
  159. }
  160. $('input[name="tpnj_league_' + league + '"]').change(function() {
  161. var id = parseInt(this.name.match(/tpnj_league_([0-9]*)/)[1]);
  162. var index = showLeagues.indexOf(id);
  163. if (this.checked) {
  164. if (index === -1) {
  165. showLeagues.push(id);
  166. settings.set('showLeagues', showLeagues);
  167. }
  168. } else {
  169. if (index !== -1) {
  170. showLeagues.splice(index, 1);
  171. settings.set('showLeagues', showLeagues);
  172. }
  173. }
  174. html_data();
  175. });
  176. }
  177.  
  178. var $redselect = $('#redselect');
  179. $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>');
  180. $("#redjersey-preview").hide();
  181. $('#redTeamJerseys').on('change', function() {
  182. var val = $('option:selected', this).attr('value');
  183. settings.set('lastRedTeam', val);
  184. if (val !== 'none') {
  185. var d = val.split('.');
  186. var img = data[d[0]].teams[d[1]].jerseys[d[2]];
  187. $("#redjersey-preview").attr("src", "http://i.imgur.com/" + img + ".png").show();
  188. update_known_teams(val, 'red');
  189. html_data();
  190. } else $("#redjersey-preview").hide();
  191. });
  192.  
  193. var $blueselect = $('#blueselect');
  194. $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>');
  195. $("#bluejersey-preview").hide();
  196. $('#blueTeamJerseys').on('change', function() {
  197. var val = $('option:selected', this).attr('value');
  198. settings.set('lastBlueTeam', val);
  199. if (val !== 'none') {
  200. var d = val.split('.');
  201. var img = data[d[0]].teams[d[1]].jerseys[d[2]];
  202. $("#bluejersey-preview").attr("src", "http://i.imgur.com/" + img + ".png").show();
  203. update_known_teams(val, 'blue');
  204. } else $("#bluejersey-preview").hide();
  205. });
  206. if (!settings.get('active')) inactive_hide();
  207. }
  208.  
  209. function update_known_teams(val, teamcolor) {
  210. var known_teams = settings.get('known_teams');
  211. var teamName = (teamcolor === 'red')?settings.get('redTeamName'):settings.get('blueTeamName');
  212. if (teamName !== 'Red' && teamName !== 'Blue') {
  213. known_teams[teamName] = val;
  214. }
  215. settings.set('known_teams', known_teams);
  216. }
  217.  
  218. function convert_known_team(team_name, teamcolor) { // convert known_team ("league.team.jersey") to appropriate teamcolor
  219. var ltj = settings.get('known_teams')[team_name];
  220. if (ltj === undefined) return false; // if not found
  221. var d = ltj.split('.');
  222. var color = d[3];
  223. if (d[2] !== 'neutral') color = teamcolor;
  224. return d[0]+'.'+d[1]+'.'+color;
  225. }
  226.  
  227. function html_data() {
  228. var data = settings.get('leagues');
  229. $('#redTeamJerseys').children().remove(); // remove all teams from select box
  230. $('#blueTeamJerseys').children().remove(); // remove all teams from select box
  231. // add teams to select box again
  232. var showLeagues = settings.get('showLeagues');
  233. for (var l in showLeagues) {
  234. var li = showLeagues[l];
  235. var $groupRed = $('<optgroup label="'+data[li].league+'">');
  236. var $groupBlue = $('<optgroup label="'+data[li].league+'">');
  237. for(var t = 0; t < data[li].teams.length; t++)
  238. {
  239. var team = data[li].teams[t].team;
  240. var jerseys = data[li].teams[t].jerseys;
  241. var option = '';
  242. if (jerseys.red) $groupRed.append('<option value="'+li+'.'+t+'.red">'+team+'</option>'); // value format: "league_index.team_index.jersey_type
  243. if (jerseys.blue) $groupBlue.append('<option value="'+li+'.'+t+'.blue">'+team+'</option>'); // value format: "league_index.team_index.jersey_type
  244. if (jerseys.neutral) {
  245. $groupRed.append('<option value="'+li+'.'+t+'.neutral">'+team+' (n)</option>'); // value format: "league_index.team_index.jersey_type
  246. $groupBlue.append('<option value="'+li+'.'+t+'.neutral">'+team+' (n)</option>'); // value format: "league_index.team_index.jersey_type
  247. }
  248. }
  249. $('#redTeamJerseys')[0].add($groupRed[0]);
  250. $('#blueTeamJerseys')[0].add($groupBlue[0]);
  251. }
  252.  
  253. var lastRedTeam = settings.get('lastRedTeam');
  254. var d, img;
  255. var known_teams = settings.get('known_teams');
  256. if(lastRedTeam) {
  257. $('#redTeamJerseys').val(lastRedTeam);
  258. d = lastRedTeam.split('.');
  259. } else {
  260. $('#redTeamJerseys').val(known_teams[settings.get('redTeamName')]);
  261. }
  262. if (d !== undefined) { // if lastRedTeam is not of the format "league.team.jersey"
  263. img = data[d[0]].teams[d[1]].jerseys[d[2]];
  264. $("#redjersey-preview").attr("src", "http://i.imgur.com/" + img + ".png").show();
  265. }
  266.  
  267. var db, imgb;
  268. var lastBlueTeam = settings.get('lastBlueTeam');
  269. if(lastBlueTeam) {
  270. $('#blueTeamJerseys').val(lastBlueTeam);
  271. db = lastBlueTeam.split('.');
  272. } else {
  273. $('#blueTeamJerseys').val(known_teams[settings.get('blueTeamName')]);
  274. }
  275. if (db !== undefined) {
  276. imgb = data[db[0]].teams[db[1]].jerseys[db[2]];
  277. $("#bluejersey-preview").attr("src", "http://i.imgur.com/" + imgb + ".png").show();
  278. }
  279. }
  280.  
  281. function sort_data() {
  282. // sort data
  283. var data = settings.get('leagues');
  284. data.sort(function(a, b) { // sort data by league name:
  285. var nameA = a.league.toUpperCase();
  286. var nameB = b.league.toUpperCase();
  287. return nameA.localeCompare(nameB);
  288. });
  289. for (var l = 0; l < data.length; l++) { // sort teams in each league
  290. data[l].teams.sort(function(a, b) {
  291. var nameA = a.team.toUpperCase();
  292. var nameB = b.team.toUpperCase();
  293. return nameA.localeCompare(nameB);
  294. });
  295. }
  296. settings.set('leagues', data);
  297. }
  298.  
  299. var WhereAmI = function(){
  300. if (window.location.port) {
  301. return('game');
  302. } else if (window.location.pathname.startsWith('/groups/')) {
  303. return('group');
  304. } else {
  305. return('elsewhere');
  306. }
  307. };
  308.  
  309. var IAmIn = WhereAmI();
  310. var settings = new Settings(default_data);
  311. //settings.delete_all();
  312. //settings = new Settings();
  313.  
  314. if(IAmIn === 'group') // group page
  315. {
  316. var init = false;
  317. tagpro.group.socket.on('private',function(priv) {
  318. if (!priv.isPrivate) settings.set('isPrivate', false);
  319. if (priv.isPrivate && !init)
  320. {
  321. ajax_read_albums();
  322. sort_data();
  323. settings.store_all();
  324. create_html();
  325. html_data();
  326. settings.set('isPrivate', true);
  327. init = true;
  328. tagpro.group.socket.on('setting',function(setting) {
  329. var data = settings.get('leagues');
  330. var known_teams = settings.get('known_teams');
  331. var known_teams_ltj;
  332. if (setting.name === 'redTeamName') {
  333. known_teams_ltj = known_teams[setting.value];
  334. settings.set('redTeamName', setting.value);
  335. if (setting.value !== 'Red' && known_teams_ltj) {
  336. var ltjr = convert_known_team(setting.value, 'red');
  337. if (ltjr) {
  338. $('#redTeamJerseys').val(convert_known_team(setting.value, 'red'));
  339. var d = ltjr.split('.');
  340. if (d !== undefined) { // if ltjr is not of the format "league.team.jersey"
  341. var img = data[d[0]].teams[d[1]].jerseys[d[2]];
  342. $("#redjersey-preview").attr("src", "http://i.imgur.com/" + img + ".png").show();
  343. settings.set('lastRedTeam', ltjr);
  344. }
  345. }
  346. }
  347. } else if (setting.name === 'blueTeamName') {
  348. known_teams_ltj = settings.get('known_teams')[setting.value];
  349. settings.set('blueTeamName', setting.value);
  350. if (setting.value !== 'Blue' && known_teams_ltj) {
  351. var ltjb = convert_known_team(setting.value, 'blue');
  352. if (ltjb) {
  353. $('#blueTeamJerseys').val(ltjb);
  354. var db = ltjb.split('.');
  355. if (db !== undefined) { // if ltjb is not of the format "league.team.jersey"
  356. var imgb = data[db[0]].teams[db[1]].jerseys[db[2]];
  357. $("#bluejersey-preview").attr("src", "http://i.imgur.com/" + imgb + ".png").show();
  358. settings.set('lastBlueTeam', ltjb);
  359. }
  360. }
  361. }
  362. }
  363. });
  364. }
  365. });
  366. }
  367. else if (IAmIn === 'game') { // ingame, draw jersey if there is one
  368. tagpro.ready(function() {
  369. if (tagpro.group.socket && settings.get('isPrivate') && settings.get('active')) // if script is activated and group is private
  370. {
  371. var ltjr = settings.get('lastRedTeam');
  372. var ltjb = settings.get('lastBlueTeam');
  373. if ((ltjr && ltjr !== undefined) || (ltjb && ltjb !== undefined)) { // one of red or blue is not false => at least one jersey was set
  374. var leagues = settings.get('leagues');
  375. var dr = ltjr.split('.'), db = ltjb.split('.');
  376. var imgr = leagues[dr[0]].teams[dr[1]].jerseys[dr[2]], imgb = leagues[db[0]].teams[db[1]].jerseys[db[2]];
  377. var tr = tagpro.renderer,
  378. oldUPSP = tr.updatePlayerSpritePosition;
  379.  
  380. tr.createJersey = function(player) {
  381. var img = (player.team === 1)?imgr:imgb;
  382. if(!img) // make empty container if one team doesn't have a jersey
  383. {
  384. if(player.sprites.jersey) player.sprites.ball.removeChild(player.sprites.jersey);
  385. player.sprites.jersey = new PIXI.DisplayObjectContainer();
  386. player.sprites.jersey.team = player.team;
  387. player.sprites.ball.addChildAt(player.sprites.jersey,1);
  388. }
  389. else
  390. {
  391. if(player.sprites.jersey) player.sprites.ball.removeChild(player.sprites.jersey);
  392. player.sprites.jersey = new PIXI.Sprite(PIXI.Texture.fromImage('http://i.imgur.com/' + img + '.png'));
  393. player.sprites.jersey.team = player.team;
  394. player.sprites.ball.addChildAt(player.sprites.jersey, 1); // add on top of ball, below other stuff
  395. player.sprites.jersey.anchor.x = 0.5;
  396. player.sprites.jersey.anchor.y = 0.5;
  397. player.sprites.jersey.x = 20;
  398. player.sprites.jersey.y = 20;
  399. }
  400. };
  401. tr.updatePlayerSpritePosition = function(player) {
  402. if(!player.sprites.jersey) tr.createJersey(player);
  403. if(player.sprites.jersey.team!==player.team) tr.createJersey(player);
  404. var index = player.sprites.ball.getChildIndex(player.sprites.actualBall)+1;
  405. if(index!==player.sprites.ball.getChildIndex(player.sprites.jersey)) player.sprites.ball.setChildIndex(player.sprites.jersey,index);
  406. if(spinJerseys) player.sprites.jersey.rotation = player.angle;
  407. oldUPSP(player);
  408. };
  409. }
  410. } else { // if not in group, reset the last teams
  411. settings.set('lastRedTeam', false);
  412. settings.set('lastBlueTeam', false);
  413. settings.set('isPrivate', false);
  414. }
  415. });
  416. }
Advertisement
Add Comment
Please, Sign In to add comment