Advertisement
AngelfirezF

Moomoo.io Aim Bot/Auto Heal Script

Mar 24th, 2018
11,598
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name         moomoo auto aim / aimbot and auto heal, working after patch
  3. // @namespace    -
  4. // @version      1.2
  5. // @description  aims at nearest player and heals when you're hurt (Toggle key: I)
  6. // @creator       AngelfirezF
  7. // @match        *://moomoo.io/*
  8. // @grant        none
  9. // ==/UserScript==
  10.  
  11.  
  12. var EnumStates = {
  13.     NONE : -1,
  14.     HEAL : 0,
  15.     AIM : 1,
  16.     BOTH : 2
  17. };
  18.  
  19. var playersNear = [];
  20. var ws;
  21. var id;
  22. var f = 0;
  23. var user;
  24. var canvas = document.querySelector("#gameCanvas");
  25. var hasApple = true;
  26. var currentTarget;
  27. var state = EnumStates.BOTH;
  28.  
  29. function Player(id, x, y, tribe){
  30.     this.id = id;
  31.     this.x = x;
  32.     this.y = y;
  33.     this.tribe = tribe;
  34. }
  35. Player.prototype.getAngle = function(){
  36.     return Math.atan2(this.deltaY, this.deltaX);
  37. };
  38.  
  39. Player.prototype.getDistance = function(){
  40.     return Math.sqrt(Math.pow(this.deltaX, 2) + Math.pow(this.deltaY, 2));
  41. };
  42.  
  43. function lookAtPointRelativeToCharacter(x, y){
  44.     var centerX = innerWidth / 2;
  45.     var centerY = innerHeight / 2;
  46.     canvas.dispatchEvent(new MouseEvent("mousemove", {
  47.         clientX: centerX + x,
  48.         clientY: centerY + y
  49.     }));
  50. }
  51.  
  52. WebSocket.prototype.oldSend = WebSocket.prototype.send;
  53. WebSocket.prototype.send = function(m){
  54.     var parsed = parseWSMsg(m);
  55.     this.oldSend(currentTarget && parsed[0] === "2" ? "42[\"2\"," + currentTarget.getAngle() + "]" : m);
  56.     if (!ws){
  57.         ws = this;
  58.         socketFound(this);
  59.     }
  60. };
  61.  
  62. function socketFound(socket){
  63.     console.log("found socket object");
  64.     socket.addEventListener('message', function(e){
  65.         handleMessage(e);
  66.     });
  67. }
  68.  
  69. function handleMessage(e){
  70.     var m = e.data;
  71.     //console.log(m);
  72.     var parsed = parseWSMsg(m);
  73.     if (parsed[0] === "3"){ //position update
  74.         playersNear = [];
  75.         var data = parsed[1];
  76.         for (var i = 0; i < data.length ; i += 12) { //loop to assign chunks of the array to a player
  77.             var playerData = data.slice(i, i + 12);
  78.             var player = new Player(playerData[0], playerData[1], playerData[2], playerData[7]);
  79.             //console.log(player.id,player.x,player.y);
  80.             if (player.id !== id) playersNear.push(player);
  81.             else user = player;
  82.         }
  83.         if (currentTarget) currentTarget = null; //reset it, it'll be updated soon
  84.         if ((state === EnumStates.AIM || state === EnumStates.BOTH) && playersNear.length > 0){
  85.             var closestPlayer = getClosestPlayer();
  86.             if (closestPlayer.getDistance() < 200 && (closestPlayer.tribe !== user.tribe || user.tribe === null)) aimAt(closestPlayer);
  87.         }
  88.     }
  89.     if (parsed[0] === "1" && !id){
  90.         id = parsed[1];
  91.         console.log("id found: " + id);
  92.     }
  93.     if (parsed[0] === "10" && parsed[1] === id && parsed[2] !== 100 && (state === EnumStates.HEAL || state === EnumStates.BOTH)){
  94.         heal();
  95.     }
  96. }
  97.  
  98. function aimAt(target){
  99.     lookAtPointRelativeToCharacter(target.deltaX, target.deltaY);
  100.     currentTarget = target;
  101. }
  102.  
  103. function getClosestPlayer(){
  104.     var closestPlayer;
  105.     for (var i = 0 ; i < playersNear.length; i++){
  106.         var currentPlayer = playersNear[i];
  107.         currentPlayer.deltaX = currentPlayer.x - user.x;
  108.         currentPlayer.deltaY = currentPlayer.y - user.y;
  109.         if (i === 0 || currentPlayer.getDistance() < closestPlayer.getDistance()){
  110.             closestPlayer = currentPlayer;
  111.         }
  112.     }
  113.     return closestPlayer;
  114. }
  115.  
  116. function parseWSMsg(s){
  117.     if (s.indexOf("42") === -1) return -1;
  118.     var o = s.substring(s.indexOf("["));
  119.     return JSON.parse(o);
  120. }
  121.  
  122. function heal(){
  123.     console.log("healing");
  124.     if (hasApple){
  125.         if (!haveApple()){
  126.             heal();
  127.             return;
  128.         }
  129.         else ws.send("42[\"5\",0,null]");
  130.     }
  131.     else ws.send("42[\"5\",1,null]");
  132.     ws.send("42[\"4\",1,null]");
  133. }
  134.  
  135. function haveApple(){
  136.     if (hasApple) hasApple = isElementVisible(document.getElementById("actionBarItem9"));
  137.     return hasApple;
  138. }
  139.  
  140. function isElementVisible(e) {
  141.     return (e.offsetParent !== null);
  142. }
  143.  
  144. document.addEventListener('keydown', function(e){
  145.     if (e.keyCode === 73 && document.activeElement.id.toLowerCase() !== 'chatbox'){ //Toggle key is I
  146.         changeState();
  147.     }
  148. });
  149.  
  150. function changeState(){
  151.     if (state === EnumStates.BOTH) state = EnumStates.NONE;
  152.     else state++;
  153.     var t;
  154.     switch (state){
  155.         case EnumStates.NONE:
  156.             t = "Aim + heal off";
  157.             break;
  158.         case EnumStates.HEAL:
  159.             t = "Heal on";
  160.             break;
  161.         case EnumStates.AIM:
  162.             t = "Aim on";
  163.             break;
  164.         case EnumStates.BOTH:
  165.             t = "Aim + heal on";
  166.     }
  167.     document.title = t;
  168.     revertTitle();
  169. }
  170.  
  171. function revertTitle(){
  172.     f++;
  173.     setTimeout(function(){
  174.         f--;
  175.         if (!f) {
  176.             document.title = "Moo Moo";
  177.         }
  178.     }, 1500);
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement