您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Timers for powerups, bombs, and boosts. Shows the second it will spawn then a countdown at 10 seconds. | Greasemonkey 4.1: ✕ Tampermonkey 4.4: ✔
当前为
// ==UserScript== // @name TagPro Timers (Pubs Only) // @description Timers for powerups, bombs, and boosts. Shows the second it will spawn then a countdown at 10 seconds. | Greasemonkey 4.1: ✕ Tampermonkey 4.4: ✔ // Players show how much time is left on their active powerups. Blue = juke juice, yellow = rolling bomb, green = tagpro. // // 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. // All timers are cleared on game end. // This special version is a pub only version // @version 1.6 // @grant none // @include http://tagpro-*.koalabeast.com:* // @include http://tangent.jukejuice.com:* // @include http://*.newcompte.fr:* // @include http://tagpro-test.koalabeast.com/game // @author CFlakes // @namespace http://www.reddit.com/user/Cumflakes // @license 2014 // ==/UserScript== tagpro.ready(function timers() { if (!tagpro.playerId) { return setTimeout(timers, 250); } if (tagpro.group.socket) return; var tr = tagpro.renderer, self = tagpro.players[tagpro.playerId], tileTimer = [], ballTimer = [], gameEnd = false, playerCount = 0; tagpro.socket.on("mapupdate", function(data) { if (data.length > 1) { for (var i=0, l=data.length; i<l; i++) { switch (data[i].v) { case 6.1: case 6.2: case 6.3: case 10: case 5: case 14: case 15: handleTiles(data[i], 0); break; case 6: handleTiles(data[i], 59999, '#00FF00'); break; case '10.1': handleTiles(data[i], 29999, '#D0A9F5'); break; case '5.1': case '14.1': case '15.1': handleTiles(data[i], 9999); break; } } } else { data = data[0] || data; switch (data.v) { case 6.1: case 6.2: case 6.3: case 10: case 5: case 14: case 15: handleTiles(data, 0); break; case 6: handleTiles(data, 59999, '#00FF00'); break; case '10.1': handleTiles(data, 29999, '#D0A9F5'); break; case '5.1': case '14.1': case '15.1': handleTiles(data, 9999); break; } } }); tagpro.socket.on("p", function(data) { data = data.u || data; for (var i = 0, l = data.length; i !== l; i++) { handlePlayerUpdate(data[i], data[i].id); } }); function handlePlayerUpdate(data, id) { var player = tagpro.players[id]; if (!player.countCheck) { player.countCheck = true; playerCount++; } if (data.grip !== undefined || data.bomb !== undefined || data.tagpro !== undefined || data.draw !== undefined || data.dead !== undefined) { ballTimer[id] = ballTimer[id] || {jj: {}, rb: {}, tp: {}}; handlePlayers(data.id); } } tagpro.socket.on('playerLeft', function() { playerCount--; }); tagpro.socket.on('end', function() { gameEnd = true; if (tagpro.renderer.layers.foreground.children.length > playerCount) { tagpro.renderer.layers.foreground.removeChildren(playerCount); } }); function getTiles(onlyPups) { for (var x=0, xl=tagpro.map.length, yl=tagpro.map[0].length; x<xl; x++) { tileTimer[x] = tileTimer[x] || []; for (var y=0; y<yl; y++) { if (onlyPups) { switch (tagpro.map[x][y]) { case 6: case 6.1: case 6.2: case 6.3: tileTimer[x][y].v = tagpro.map[x][y]; break; } } else { switch (tagpro.map[x][y]) { case 6: case 6.1: case 6.2: case 6.3: case 5: case '5.1': case 14: case '14.1': case 15: case '15.1': case 10: case '10.1': tileTimer[x][y] = {v: tagpro.map[x][y]}; break; } } } } } getTiles(); function getPlayers() { for (var id in tagpro.players) { if (tagpro.players.hasOwnProperty(id)) { var player = tagpro.players[id]; if (!player.countCheck) { player.countCheck = true; playerCount++; } ballTimer[id] = ballTimer[id] || {jj: {}, rb: {}, tp: {}}; if (player.draw) { if (!player.grip) ballTimer[id].jj.check = true; if (!player.bomb) ballTimer[id].rb.check = true; if (!player.tagpro) ballTimer[id].tp.check = true; } else { ballTimer[id].jj.check = false; ballTimer[id].rb.check = false; ballTimer[id].tp.check = false; } } } } getPlayers(); tr.basicText = function(text, color, size) { return new PIXI.Text(text, { font: size || "20pt Arial", fill: color || "#FFFFFF", stroke: "#000000", strokeThickness: 3 }); }; tr.drawTileTimer = function(tile, color) { if (gameEnd) return; var timeLeft = tile.spawn - Date.now(), timer = tileTimer[tile.x][tile.y]; if (timeLeft > 10000) { if (!timer.second) { timer.second = tr.basicText(tile.time.substr(tile.time.length - 2, 2), color); timer.second.x = tile.x*40 + 3; timer.second.y = tile.y*40 + 7; tr.layers.foreground.addChild(timer.second); } timer.timeout = setTimeout(function() { tr.drawTileTimer(tile, color); }, timeLeft - 10000); } else { if (timer.second) { clearTimeout(timer.timeout); tr.layers.foreground.removeChild(timer.second); timer.second = undefined; } if (timeLeft > 0) { var tenths = Math.floor(timeLeft/100)/10 + '.0'; if (!timer.countdown) { timer.countdown = tr.basicText(tenths.substr(0, 3), color, '18pt Arial'); timer.countdown.x = tile.x*40 + 1; timer.countdown.y = tile.y*40 + 9; tr.layers.foreground.addChild(timer.countdown); } timer.countdown.setText(tenths.substr(0, 3)); timer.timeout = setTimeout(function() { tr.drawTileTimer(tile, color); }, 50); } else { if (timer.countdown) { clearTimeout(timer.timeout); tr.layers.foreground.removeChild(timer.countdown); timer.countdown = undefined; } } } }; tr.drawBallTimer = function(timer, id, i, color) { var offset = [], actPup = [tagpro.players[id].grip, tagpro.players[id].bomb, tagpro.players[id].tagpro]; offset[0] = tagpro.players[id].degree ? 11 : 0; offset[1] = ballTimer[id].jj.sprite ? offset[0]+11 : offset[0]; offset[2] = ballTimer[id].rb.sprite ? offset[1]+11 : offset[1]; if (color && !gameEnd) { timer.expires = Date.now() + 19999; timer.left = Math.floor((timer.expires - Date.now())/1000); if (!timer.sprite && actPup[i]) { timer.sprite = tr.prettyText(timer.left, color); timer.sprite.x = 40; timer.sprite.y = -5 + offset[i]; tagpro.players[id].sprites.info.addChild(timer.sprite); timer.timeout = setTimeout(function() {tr.drawBallTimer(timer, id, i);}, 50); } } else { if (actPup[i] && timer.expires - Date.now() > 0 && !gameEnd) { if (timer.expires - Date.now() > 10000) { timer.left = Math.floor((timer.expires - Date.now())/1000); } else { timer.left = (Math.floor((timer.expires - Date.now())/100)/10 + '.0').substr(0, 3); } timer.sprite.setText(timer.left); timer.sprite.y = -5 + offset[i]; timer.timeout = setTimeout(function() {tr.drawBallTimer(timer, id, i);}, 50); } else { if (timer.timeout) { clearTimeout(timer.timeout); } if (timer.sprite) { tagpro.players[id].sprites.info.removeChild(timer.sprite); timer.sprite = undefined; timer.expires = 0; timer.left = 0; } } } }; function handleTiles(tile, spawn, color) { var timer = tileTimer[tile.x][tile.y]; if (spawn) { var gameTimeLeft = tagpro.gameEndsAt - Date.now(), tileDist = {x: Math.abs(self.x - tile.x*40), y: Math.abs(self.y - tile.y*40)}, inRange = ((tagpro.spectator || (tileDist.x < 655 && tileDist.y < 415)) && gameTimeLeft - spawn > 0) ? true : false; if (inRange) { tile.spawn = Date.now() + spawn; if (color) { tile.time = '0' + Math.floor((gameTimeLeft + spawn)/1000 % 60); } if (timer.second === undefined && timer.countdown === undefined) { tr.drawTileTimer(tile, color); } } } else { if (timer.timeout) { clearTimeout(timer.timeout); } if (timer.second) { tr.layers.foreground.removeChild(timer.second); timer.second = undefined; } if (timer.countdown) { tr.layers.foreground.removeChild(timer.countdown); timer.countdown = undefined; } } if (Math.floor(tile.v) === 6) { if (tile.v === 6) { getRepeatGrabs(tile.x, tile.y); } getTiles(true); } } function handlePlayers(id) { var player = tagpro.players[id]; if (player.draw) { if (!player.grip) ballTimer[id].jj.check = true; if (!player.bomb) ballTimer[id].rb.check = true; if (!player.tagpro) ballTimer[id].tp.check = true; } else { ballTimer[id].jj.check = false; ballTimer[id].rb.check = false; ballTimer[id].tp.check = false; } if (player.grip) { if (ballTimer[id].jj.check) { getNearestPup(player.x, player.y); tr.drawBallTimer(ballTimer[id].jj, id, 0, '#58FAF4'); ballTimer[id].jj.check = false; } } if (player.bomb) { if (ballTimer[id].rb.check) { getNearestPup(player.x, player.y); tr.drawBallTimer(ballTimer[id].rb, id, 1, '#FFFF00'); ballTimer[id].rb.check = false; } } if (player.tagpro) { if (ballTimer[id].tp.check) { getNearestPup(player.x, player.y); tr.drawBallTimer(ballTimer[id].tp, id, 2, '#81F781'); ballTimer[id].tp.check = false; } } } function getRepeatGrabs(x, y) { var oldPowerup = tileTimer[x][y].v; for (var id in tagpro.players) { if (tagpro.players.hasOwnProperty(id) && tagpro.players[id].draw && !tagpro.players[id].dead) { var player = tagpro.players[id], distance = Math.sqrt(Math.pow((player.x + player.lx*7) - x*40, 2) + Math.pow((player.y + player.ly*7) - y*40, 2)); if (distance < 40) { switch (oldPowerup) { case 6.1: if (player.grip) { ballTimer[id].jj.check = true; handlePlayers(id); } break; case 6.2: if (player.bomb) { ballTimer[id].rb.check = true; handlePlayers(id); } break; case 6.3: if (player.tagpro) { ballTimer[id].tp.check = true; handlePlayers(id); } break; } } } } } function getNearestPup(px, py) { var tile, timer, distance, nearest = 9999; for (var x=0, xl=tagpro.map.length, yl=tagpro.map[0].length; x<xl; x++) { for (var y=0; y<yl; y++) { if (Math.floor(tagpro.map[x][y]) === 6) { distance = Math.sqrt(Math.pow(px - x*40, 2) + Math.pow(py - y*40, 2)); if (distance < nearest) { nearest = distance; timer = tileTimer[x][y]; tile = {x: x, y: y}; } } } } if (timer.second === undefined && timer.countdown === undefined) { tile.spawn = Date.now() + 59999; tile.time = '0' + Math.floor((tagpro.gameEndsAt - Date.now() + 59999)/1000 % 60); tile.color = '#00FF00'; if (tagpro.gameEndsAt - tile.spawn > 0) { tr.drawTileTimer(tile, tile.color); } } } });
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址