Guest User

Untitled

a guest
Mar 26th, 2016
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.94 KB | None | 0 0
  1. // ==UserScript==
  2. // @name TagPro Timers (Pubs Only)
  3. // @description Timers for powerups, bombs, and boosts. Shows the second it will spawn then a countdown at 10 seconds.
  4. // Players show how much time is left on their active powerups. Blue = juke juice, yellow = rolling bomb, green = tagpro.
  5. //
  6. // Will not show timers on things that happened out of view, or if the spawn date is greater than the time left in the game.
  7. // All timers are cleared on game end.
  8. // This special version is a pub only version
  9. // @version 1.3
  10. // @grant none
  11. // @include http://tagpro-*.koalabeast.com:*
  12. // @include http://tangent.jukejuice.com:*
  13. // @include http://*.newcompte.fr:*
  14. // @author CFlakes
  15. // @namespace http://www.reddit.com/user/Cumflakes
  16. // @license 2014
  17. // ==/UserScript==
  18.  
  19. tagpro.ready(function timers() {
  20. if (!tagpro.playerId) {
  21. return setTimeout(timers, 250);
  22. }
  23.  
  24. if (tagpro.group.socket) return;
  25.  
  26. var tr = tagpro.renderer,
  27. self = tagpro.players[tagpro.playerId],
  28. tileTimer = [],
  29. ballTimer = [],
  30. gameEnd = false,
  31. playerCount = 0;
  32.  
  33. tagpro.socket.on("mapupdate", function(data) {
  34. if (data.length > 1) {
  35. for (var i=0, l=data.length; i<l; i++) {
  36. switch (data[i].v) {
  37. case 6.1:
  38. case 6.2:
  39. case 6.3:
  40. case 10:
  41. case 5:
  42. case 14:
  43. case 15:
  44. handleTiles(data[i], 0);
  45. break;
  46. case 6:
  47. handleTiles(data[i], 59999, '#00FF00');
  48. break;
  49. case '10.1':
  50. handleTiles(data[i], 29999, '#D0A9F5');
  51. break;
  52. case '5.1':
  53. case '14.1':
  54. case '15.1':
  55. handleTiles(data[i], 9999);
  56. break;
  57. }
  58. }
  59. } else {
  60. data = data[0] || data;
  61. switch (data.v) {
  62. case 6.1:
  63. case 6.2:
  64. case 6.3:
  65. case 10:
  66. case 5:
  67. case 14:
  68. case 15:
  69. handleTiles(data, 0);
  70. break;
  71. case 6:
  72. handleTiles(data, 59999, '#00FF00');
  73. break;
  74. case '10.1':
  75. handleTiles(data, 29999, '#D0A9F5');
  76. break;
  77. case '5.1':
  78. case '14.1':
  79. case '15.1':
  80. handleTiles(data, 9999);
  81. break;
  82. }
  83. }
  84. });
  85.  
  86. tagpro.socket.on("p", function(data) {
  87. data = data.u || data;
  88. for (var i = 0, l = data.length; i !== l; i++) {
  89. handlePlayerUpdate(data[i], data[i].id);
  90. }
  91. });
  92.  
  93. function handlePlayerUpdate(data, id) {
  94. var player = tagpro.players[id];
  95. if (!player.countCheck) {
  96. player.countCheck = true;
  97. playerCount++;
  98. }
  99. if (data.grip !== undefined || data.bomb !== undefined || data.tagpro !== undefined || data.draw !== undefined || data.dead !== undefined) {
  100. ballTimer[id] = ballTimer[id] || {jj: {}, rb: {}, tp: {}};
  101. handlePlayers(data.id);
  102. }
  103. }
  104.  
  105. tagpro.socket.on('playerLeft', function() {
  106. playerCount--;
  107. });
  108.  
  109. tagpro.socket.on('end', function() {
  110. gameEnd = true;
  111. if (tagpro.renderer.layers.foreground.children.length > playerCount) {
  112. tagpro.renderer.layers.foreground.removeChildren(playerCount);
  113. }
  114. });
  115.  
  116. function getTiles(onlyPups) {
  117. for (var x=0, xl=tagpro.map.length, yl=tagpro.map[0].length; x<xl; x++) {
  118. tileTimer[x] = tileTimer[x] || [];
  119. for (var y=0; y<yl; y++) {
  120. if (onlyPups) {
  121. switch (tagpro.map[x][y]) {
  122. case 6:
  123. case 6.1:
  124. case 6.2:
  125. case 6.3:
  126. tileTimer[x][y].v = tagpro.map[x][y];
  127. break;
  128. }
  129. } else {
  130. switch (tagpro.map[x][y]) {
  131. case 6:
  132. case 6.1:
  133. case 6.2:
  134. case 6.3:
  135. case 5:
  136. case '5.1':
  137. case 14:
  138. case '14.1':
  139. case 15:
  140. case '15.1':
  141. case 10:
  142. case '10.1':
  143. tileTimer[x][y] = {v: tagpro.map[x][y]};
  144. break;
  145. }
  146. }
  147. }
  148. }
  149. }
  150. getTiles();
  151.  
  152. function getPlayers() {
  153. for (var id in tagpro.players) {
  154. if (tagpro.players.hasOwnProperty(id)) {
  155. var player = tagpro.players[id];
  156. if (!player.countCheck) {
  157. player.countCheck = true;
  158. playerCount++;
  159. }
  160. ballTimer[id] = ballTimer[id] || {jj: {}, rb: {}, tp: {}};
  161. if (player.draw) {
  162. if (!player.grip) ballTimer[id].jj.check = true;
  163. if (!player.bomb) ballTimer[id].rb.check = true;
  164. if (!player.tagpro) ballTimer[id].tp.check = true;
  165. } else {
  166. ballTimer[id].jj.check = false;
  167. ballTimer[id].rb.check = false;
  168. ballTimer[id].tp.check = false;
  169. }
  170. }
  171. }
  172. }
  173. getPlayers();
  174.  
  175. tr.basicText = function(text, color, size) {
  176. return new PIXI.Text(text, {
  177. font: size || "20pt Arial",
  178. fill: color || "#FFFFFF",
  179. stroke: "#000000",
  180. strokeThickness: 3
  181. });
  182. };
  183.  
  184. tr.drawTileTimer = function(tile, color) {
  185. if (gameEnd) return;
  186. /*var timeLeft = tile.spawn - Date.now(),
  187. timer = tileTimer[tile.x][tile.y];
  188. if (timeLeft > 10000) {
  189. if (!timer.second) {
  190. timer.second = tr.basicText(tile.time.substr(tile.time.length - 2, 2), color);
  191. timer.second.x = tile.x*40 + 3;
  192. timer.second.y = tile.y*40 + 7;
  193. tr.layers.foreground.addChild(timer.second);
  194. }
  195. timer.timeout = setTimeout(function() {
  196. tr.drawTileTimer(tile, color);
  197. }, timeLeft - 10000);
  198. } else {
  199. if (timer.second) {
  200. clearTimeout(timer.timeout);
  201. tr.layers.foreground.removeChild(timer.second);
  202. timer.second = undefined;
  203. }
  204. if (timeLeft > 0) {
  205. var tenths = Math.floor(timeLeft/100)/10 + '.0';
  206. if (!timer.countdown) {
  207. timer.countdown = tr.basicText(tenths.substr(0, 3), color, '18pt Arial');
  208. timer.countdown.x = tile.x*40 + 1;
  209. timer.countdown.y = tile.y*40 + 9;
  210. tr.layers.foreground.addChild(timer.countdown);
  211. }
  212. timer.countdown.setText(tenths.substr(0, 3));
  213. timer.timeout = setTimeout(function() {
  214. tr.drawTileTimer(tile, color);
  215. }, 50);
  216. } else {
  217. if (timer.countdown) {
  218. clearTimeout(timer.timeout);
  219. tr.layers.foreground.removeChild(timer.countdown);
  220. timer.countdown = undefined;
  221. }
  222. }
  223. }*/
  224. };
  225.  
  226. tr.drawBallTimer = function(timer, id, i, color) {
  227. var offset = [],
  228. actPup = [tagpro.players[id].grip, tagpro.players[id].bomb, tagpro.players[id].tagpro];
  229. offset[0] = tagpro.players[id].degree ? 11 : 0;
  230. offset[1] = ballTimer[id].jj.sprite ? offset[0]+11 : offset[0];
  231. offset[2] = ballTimer[id].rb.sprite ? offset[1]+11 : offset[1];
  232. if (color && !gameEnd) {
  233. timer.expires = Date.now() + 19999;
  234. timer.left = Math.floor((timer.expires - Date.now())/1000);
  235. if (!timer.sprite && actPup[i]) {
  236. timer.sprite = tr.prettyText(timer.left, color);
  237. timer.sprite.x = 40;
  238. timer.sprite.y = -5 + offset[i];
  239. tagpro.players[id].sprites.info.addChild(timer.sprite);
  240. timer.timeout = setTimeout(function() {tr.drawBallTimer(timer, id, i);}, 50);
  241. }
  242. } else {
  243. if (actPup[i] && timer.expires - Date.now() > 0 && !gameEnd) {
  244. if (timer.expires - Date.now() > 10000) {
  245. timer.left = Math.floor((timer.expires - Date.now())/1000);
  246. } else {
  247. timer.left = (Math.floor((timer.expires - Date.now())/100)/10 + '.0').substr(0, 3);
  248. }
  249. timer.sprite.setText(timer.left);
  250. timer.sprite.y = -5 + offset[i];
  251. timer.timeout = setTimeout(function() {tr.drawBallTimer(timer, id, i);}, 50);
  252. } else {
  253. if (timer.timeout) {
  254. clearTimeout(timer.timeout);
  255. }
  256. if (timer.sprite) {
  257. tagpro.players[id].sprites.info.removeChild(timer.sprite);
  258. timer.sprite = undefined;
  259. timer.expires = 0;
  260. timer.left = 0;
  261. }
  262. }
  263. }
  264. };
  265.  
  266. function handleTiles(tile, spawn, color) {
  267. var timer = tileTimer[tile.x][tile.y];
  268. if (spawn) {
  269. var gameTimeLeft = tagpro.gameEndsAt - Date.now(),
  270. tileDist = {x: Math.abs(self.x - tile.x*40), y: Math.abs(self.y - tile.y*40)},
  271. inRange = ((tagpro.spectator || (tileDist.x < 655 && tileDist.y < 415)) && gameTimeLeft - spawn > 0) ? true : false;
  272. if (inRange) {
  273. tile.spawn = Date.now() + spawn;
  274. if (color) {
  275. tile.time = '0' + Math.floor((gameTimeLeft + spawn)/1000 % 60);
  276. }
  277. if (timer.second === undefined && timer.countdown === undefined) {
  278. tr.drawTileTimer(tile, color);
  279. }
  280. }
  281. } else {
  282. if (timer.timeout) {
  283. clearTimeout(timer.timeout);
  284. }
  285. if (timer.second) {
  286. tr.layers.foreground.removeChild(timer.second);
  287. timer.second = undefined;
  288. }
  289. if (timer.countdown) {
  290. tr.layers.foreground.removeChild(timer.countdown);
  291. timer.countdown = undefined;
  292. }
  293. }
  294. if (Math.floor(tile.v) === 6) {
  295. if (tile.v === 6) {
  296. getRepeatGrabs(tile.x, tile.y);
  297. }
  298. getTiles(true);
  299. }
  300. }
  301.  
  302. function handlePlayers(id) {
  303. var player = tagpro.players[id];
  304. if (player.draw) {
  305. if (!player.grip) ballTimer[id].jj.check = true;
  306. if (!player.bomb) ballTimer[id].rb.check = true;
  307. if (!player.tagpro) ballTimer[id].tp.check = true;
  308. } else {
  309. ballTimer[id].jj.check = false;
  310. ballTimer[id].rb.check = false;
  311. ballTimer[id].tp.check = false;
  312. }
  313. if (player.grip) {
  314. if (ballTimer[id].jj.check) {
  315. getNearestPup(player.x, player.y);
  316. tr.drawBallTimer(ballTimer[id].jj, id, 0, '#58FAF4');
  317. ballTimer[id].jj.check = false;
  318. }
  319. }
  320. if (player.bomb) {
  321. if (ballTimer[id].rb.check) {
  322. getNearestPup(player.x, player.y);
  323. tr.drawBallTimer(ballTimer[id].rb, id, 1, '#FFFF00');
  324. ballTimer[id].rb.check = false;
  325. }
  326. }
  327. if (player.tagpro) {
  328. if (ballTimer[id].tp.check) {
  329. getNearestPup(player.x, player.y);
  330. tr.drawBallTimer(ballTimer[id].tp, id, 2, '#81F781');
  331. ballTimer[id].tp.check = false;
  332. }
  333. }
  334. }
  335.  
  336. function getRepeatGrabs(x, y) {
  337. var oldPowerup = tileTimer[x][y].v;
  338. for (var id in tagpro.players) {
  339. if (tagpro.players.hasOwnProperty(id) && tagpro.players[id].draw && !tagpro.players[id].dead) {
  340. var player = tagpro.players[id],
  341. distance = Math.sqrt(Math.pow((player.x + player.lx*7) - x*40, 2) + Math.pow((player.y + player.ly*7) - y*40, 2));
  342. if (distance < 40) {
  343. switch (oldPowerup) {
  344. case 6.1:
  345. if (player.grip) {
  346. ballTimer[id].jj.check = true;
  347. handlePlayers(id);
  348. }
  349. break;
  350. case 6.2:
  351. if (player.bomb) {
  352. ballTimer[id].rb.check = true;
  353. handlePlayers(id);
  354. }
  355. break;
  356. case 6.3:
  357. if (player.tagpro) {
  358. ballTimer[id].tp.check = true;
  359. handlePlayers(id);
  360. }
  361. break;
  362. }
  363. }
  364. }
  365. }
  366. }
  367.  
  368. function getNearestPup(px, py) {
  369. var tile,
  370. timer,
  371. distance,
  372. nearest = 9999;
  373. for (var x=0, xl=tagpro.map.length, yl=tagpro.map[0].length; x<xl; x++) {
  374. for (var y=0; y<yl; y++) {
  375. if (Math.floor(tagpro.map[x][y]) === 6) {
  376. distance = Math.sqrt(Math.pow(px - x*40, 2) + Math.pow(py - y*40, 2));
  377. if (distance < nearest) {
  378. nearest = distance;
  379. timer = tileTimer[x][y];
  380. tile = {x: x, y: y};
  381. }
  382. }
  383. }
  384. }
  385. if (timer.second === undefined && timer.countdown === undefined) {
  386. tile.spawn = Date.now() + 59999;
  387. tile.time = '0' + Math.floor((tagpro.gameEndsAt - Date.now() + 59999)/1000 % 60);
  388. tile.color = '#00FF00';
  389. if (tagpro.gameEndsAt - tile.spawn > 0) {
  390. tr.drawTileTimer(tile, tile.color);
  391. }
  392. }
  393. }
  394. });
Add Comment
Please, Sign In to add comment