SHARE
TWEET

Untitled

a guest May 19th, 2017 52 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name         TagPro Easter Aim Helper
  3. // @version      0.4.2
  4. // @author       Some Ball -1
  5. // @include      http://tagpro-*.koalabeast.com:*
  6. // @grant        none
  7. // ==/UserScript==
  8. /* jshint -W097 */
  9. 'use strict';
  10.  
  11. var wait = 0;
  12. tagpro.ready(function init() {
  13.     var rotation = false;
  14.     var rotationSpeed = 0.25; //number in radians to change each step
  15.     var rotationFreq = 50; //milliseconds between rotation steps
  16.    
  17.     var lineWidth = 23; //23 is default
  18.    
  19.     var showCount = true;
  20.    
  21.     var clickThroughScoreboard = false; //will not be able to report or change name via scoreboard if enabled
  22.    
  23.     var disableRightClickOnCanvas = false; //also allows right click to shoot if enabled
  24.    
  25.     var customEggs = false;
  26.     var redEgg = 'http://i.imgur.com/K0B2Nem.png';
  27.     var blueEgg = 'http://i.imgur.com/4bqBaDp.png';
  28.    
  29.     var customCrosshair = 'http://i.imgur.com/SqgcQCb.png'; //url for custom crosshair image, designed for a 32x32 image; set to empty single quote marks, '', to disable
  30.    
  31.    
  32.     var tr = tagpro.renderer;
  33.     if(!tr.stage.click) {
  34.         if(wait>25) return;
  35.         wait++;
  36.         return setTimeout(init,10);
  37.     }
  38.    
  39.    
  40.     if(clickThroughScoreboard) $('#options').css('pointer-events','none');
  41.    
  42.     var mousePos = {x: 0, y: 0};
  43.     if(customCrosshair) {
  44.         $("<style type='text/css'>canvas{cursor: url("+customCrosshair+") 16 16, crosshair !important;}</style>").appendTo("head");
  45.         $('body').append('<img id="crosshair" src='+customCrosshair+' style="display: none; position: absolute; pointer-events: none;">');
  46.         $(document).keydown(function(e) {
  47.             if(tagpro.disableControls) return;
  48.             $('#crosshair').show().css({top: (mousePos.y-16)+'px', left: (mousePos.x+17)+'px'});
  49.         });
  50.     }
  51.    
  52.     var usps = tr.updatePlayerSpritePosition;
  53.     tr.updatePlayerSpritePosition = function(player) {
  54.         if(player.id===tagpro.playerId && (!player.sprites.mouseLine || !player.sprites.mouseLine.parent)) {
  55.             var rect = new PIXI.Graphics();
  56.             rect.beginFill(player.team===1?0xff0000:0x0000ff).drawRect(0,0,lineWidth,40*15).alpha = 0.5;
  57.             rect.pivot.set(lineWidth/2,-lineWidth/2);
  58.             rect.position.set(20,20);
  59.             player.sprites.mouseLine = rect;
  60.             player.sprites.ball.addChildAt(player.sprites.mouseLine,0);
  61.         }
  62.         return usps.apply(this,arguments);
  63.     }
  64.    
  65.     if(customEggs) {
  66.         tr.drawMarsball = function(object, position) {
  67.             if (object.type == "marsball") {
  68.                 return oldDrawMarsball(object, position);
  69.             }
  70.  
  71.             if (object.type !== "egg") {
  72.                 return;
  73.             }
  74.  
  75.             if (tagpro.spectator) {
  76.                 object.draw = true;
  77.             }
  78.  
  79.             if (object.team === "Red") {
  80.                 object.sprite = new PIXI.Sprite.fromImage(redEgg);
  81.             } else {
  82.                 object.sprite = new PIXI.Sprite.fromImage(blueEgg);
  83.             }
  84.  
  85.             object.sprite.position.x = position.x;
  86.             object.sprite.position.y = position.y;
  87.             object.sprite.pivot.set(-8, -4);
  88.  
  89.             tagpro.renderer.layers.foreground.addChild(object.sprite);
  90.  
  91.             object.sprite.keep = true;
  92.             if (!object.draw) {
  93.                 object.sprite.visible = false;
  94.             }
  95.         };
  96.     }
  97.    
  98.     function ab(v1,v2) { return Math.atan((v1.x-v2.x)/(v1.y-v2.y)) };
  99.    
  100.     var clearable;
  101.     function disableTint() {
  102.         if(!clearable) {
  103.             var me = tagpro.players[tagpro.playerId];
  104.             if(me.sprites.mouseLine) me.sprites.mouseLine.tint = 0x000000;
  105.             clearable = setTimeout(() => {
  106.                 if(me.sprites.mouseLine) me.sprites.mouseLine.tint = 0xffffff;
  107.                 clearable = false;
  108.             }, 1000);
  109.         }
  110.     }
  111.  
  112.     var pause = 0;
  113.     tr.stage.interactive = true;
  114.     tr.stage.click = function(event) {
  115.         if(!event.originalEvent) {
  116.             if(rotation) return;
  117.             event.global = mousePos;
  118.         }
  119.  
  120.         //var pos = event.getLocalPosition(tr.gameContainer);
  121.         var pos = {
  122.             x: (event.global.x-tr.gameContainer.position.x)/tr.gameContainer.scale.x,
  123.             y: (event.global.y-tr.gameContainer.position.y)/tr.gameContainer.scale.y
  124.         };
  125.         tagpro.socket.emit("click",pos);
  126.         disableTint();
  127.     };
  128.     if(disableRightClickOnCanvas) {
  129.         $('#viewport').attr('oncontextmenu','return false;');
  130.         tr.stage.rightclick = function(event) {
  131.             tr.stage.click(event);
  132.         }
  133.     }
  134.     tr.stage.mousemove = function(event) {
  135.         var me = tagpro.players[tagpro.playerId];
  136.         if(!me.sprites.mouseLine) return;
  137.         mousePos = event.global;//{x: event.originalEvent.pageX, y: event.originalEvent.pageY};
  138.         $('#crosshair').hide();
  139.         var pos = event.getLocalPosition(tr.gameContainer);
  140.         pause = 1;
  141.         me.sprites.mouseLine.rotation = Math.PI+(((Math.round(me.y)+20)<pos.y)?Math.PI:0)-ab({x: Math.round(me.x)+20,y: Math.round(me.y)+20},{x: pos.x,y: pos.y});
  142.     };
  143.    
  144.     $(document).click((event) => {
  145.         if(event.target!=$('#viewport')[0]) {
  146.             var e = {originalEvent: true};
  147.             e.global = {x: event.pageX-parseInt($('#viewport').css('left')), y: event.pageY-parseInt($('#viewport').css('top'))};
  148.             tr.stage.click(e);
  149.         }
  150.     });
  151.    
  152.     if(showCount) {
  153.         var pops = 0;
  154.         var tags = 0;
  155.         function makeCount(me) {
  156.             me.sprites.count = tr.veryPrettyText(tags+' - '+pops, me.team===1?'#ff0000':'#2222ff');
  157.             me.sprites.count.position.x = 4-Math.round((new PIXI.Text(tags+' - '+pops, {font: "bold 8pt Arial"})).width/2);
  158.             me.sprites.count.position.y = 40;
  159.             me.sprites.info.addChild(me.sprites.count);
  160.         }
  161.         tagpro.socket.on('p',(data) => {
  162.             data = data.u || data;
  163.             for(var i = 0;i < data.length;i++) {
  164.                 if(data[i].id===tagpro.playerId) {
  165.                     var me = tagpro.players[tagpro.playerId];
  166.                     if(me.sprites) {
  167.                         if(!me.sprites.count) makeCount(me);
  168.                         if(data[i]['s-pops'] || data[i]['s-tags']) {
  169.                             if(data[i]['s-pops']) pops = data[i]['s-pops'];
  170.                             if(data[i]['s-tags']) tags = data[i]['s-tags'];
  171.                             if(me.sprites.count) me.sprites.info.removeChild(me.sprites.count);
  172.                             makeCount(me);
  173.                         }
  174.                     }
  175.                 }
  176.             }
  177.         });
  178.     }
  179.  
  180.     if(rotation) {
  181.         tagpro.events.register({
  182.             keyDown: function(key) {
  183.                 var me = tagpro.players[tagpro.playerId];
  184.                 if(key==='space' && me.sprites && me.sprites.mouseLine) {
  185.                     var e = {originalEvent: true};
  186.                     e.global = {x: Math.round(me.x)+20-10*Math.sin(me.sprites.mouseLine.rotation)+tr.gameContainer.position.x,
  187.                                 y: Math.round(me.y)+20+10*Math.cos(me.sprites.mouseLine.rotation)+tr.gameContainer.position.y};
  188.                     tr.stage.click(e);
  189.                 }
  190.             }
  191.         });
  192.  
  193.         setInterval(function() {
  194.             var me = tagpro.players[tagpro.playerId];
  195.             if(pause>0) pause++;
  196.             else if(me && me.sprites && me.sprites.mouseLine) me.sprites.mouseLine.rotation += rotationSpeed;
  197.             if(pause>5) pause = 0;
  198.         }, rotationFreq);
  199.     }
  200. });
RAW Paste Data
Top