Navigation PRO

Map Movement

  1. // ==UserScript==
  2. // @name Navigation PRO
  3. // @namespace -
  4. // @version 1.2
  5. // @description Map Movement
  6. // @author Night
  7. // @match *://moomoo.io/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. var ws;
  12.  
  13. WebSocket.prototype.oldSend = WebSocket.prototype.send;
  14. WebSocket.prototype.send = function(m){
  15. this.oldSend(m);
  16. if (!ws){
  17. ws = this;
  18. socketFound(this);
  19. }
  20. };
  21.  
  22. function socketFound(socket){
  23. socket.addEventListener('message', function(message){
  24. handleMessage(message);
  25. });
  26. }
  27.  
  28. var playersList = [];
  29.  
  30. function parseWSMsg(s){
  31. if (s.indexOf("42") === -1) return -1;
  32. var o = s.substring(s.indexOf("["));
  33. return JSON.parse(o);
  34. }
  35.  
  36. var player = function(x,y,id,me){
  37. this.x = x;
  38. this.y = y;
  39. this.id = id;
  40. this.me = me;
  41. this.targets = [null, null];
  42.  
  43. }
  44.  
  45.  
  46. function handleMessage(m){
  47. var info = parseWSMsg(m.data);
  48. if (info[0] == "1" && !playersList[0]){
  49. var x = new player(null, null, info[1], true);
  50. playersList.push(new player(null, null, info[1], true) )
  51. }
  52.  
  53. if (info[0] == "3"){
  54. let data = info.slice(1, info.length);
  55. for (var i=0;i<data.length;i++){
  56. let playerData = data.slice(i*13,(i*13)+13)[0];
  57. if (playerData[0] == playersList[0].id){
  58. playersList[0].x = playerData[1];
  59. playersList[0].y = playerData[2];
  60. if (playersList[0].targets[0]){
  61.  
  62. let distance = Math.sqrt( Math.pow(playersList[0].targets[1]-playersList[0].y, 2) + Math.pow(playersList[0].targets[0] - playersList[0].x, 2));
  63. if (distance < 100){
  64. playersList[0].targets = [null, null];
  65. for (let elem of document.getElementsByClassName("mapTarget")){
  66. elem.remove();
  67. }
  68. ws.send(`42["3",null]`);
  69. } else {
  70. ws.send(`42["3",null]`);
  71. let delta_y = playersList[0].targets[1]-playersList[0].y;
  72. let delta_x = playersList[0].targets[0]-playersList[0].x;
  73.  
  74. let angle = Math.atan2(delta_y, delta_x);
  75. ws.send(`42["3",${angle}]`);
  76. }
  77. }
  78. }
  79. }
  80. }
  81.  
  82. document.addEventListener("click", (event)=> {
  83. [x, y] = [event.clientX, event.clientY];
  84. if (window.innerWidth >= 770){
  85. if ((20 <= x && x <= 150) && (710 <= y && y <= 840)){
  86. let mapSize = [14365, 14365];
  87. let boxSize = [130, 130];
  88. let targets = [x-20, y-710].map( (n) => { return n/130*14365; } );
  89. playersList[0].targets = targets;
  90.  
  91. for (let elem of document.getElementsByClassName("mapTarget")){
  92. elem.remove();
  93. }
  94.  
  95. let newTarget = document.createElement("div");
  96. newTarget.style = `background:red; width:8.5px; height:8.5px; border-radius:50%; position:absolute; left: ${x}px; top:${y}px; z-index:100`;
  97. newTarget.className = "mapTarget";
  98. document.getElementsByTagName("body")[0].appendChild(newTarget);
  99.  
  100. }
  101. }
  102. });
  103.  
  104. document.addEventListener("keydown", (event)=> {
  105. if (event.code == "Escape"){
  106. if (playersList[0]){
  107. if (playersList[0].targets[0]){
  108. playersList[0].targets = [null, null];
  109. for (let elem of document.getElementsByClassName("mapTarget")){
  110. elem.remove();
  111. }
  112. ws.send(`42["3",null]`);
  113. }
  114. }
  115. }
  116. });
  117. }