auto aim / auto healer and aimbot

this is my first script is probably not the best but enjoy <3 (toggle:|)

  1. // ==UserScript==
  2. // @name auto aim / auto healer and aimbot
  3. // @namespace -
  4. // @version 0.1
  5. // @description this is my first script is probably not the best but enjoy <3 (toggle:|)
  6. // @author Adelita
  7. // @match https://moomoo.io
  8.  
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. var EnumStates = {
  13. NONE : -1,
  14. HEAL : 100,
  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. }

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址