Greasy Fork is available in English.

★moomoo.io EnemyRadar

Shows the direction and rough distance of invisible enemies.

  1. // ==UserScript==
  2. // @name ★moomoo.io EnemyRadar
  3. // @version 1.0
  4. // @description Shows the direction and rough distance of invisible enemies.
  5. // @author nekosan
  6. // @match *://moomoo.io/*
  7. // @grant none
  8. // @namespace https://greasyfork.org/en/scripts/29215-moomoo-io-enemyradar
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. 'use strict';
  13.  
  14. var conf = {
  15. 'radar': {
  16. 'color': '#ffffff',
  17. 'w': '20',
  18. 'h': '20'
  19. },
  20. 'maxScreenWidth': 1920,
  21. 'maxScreenHeight': 1080
  22. };
  23.  
  24. var SID;
  25. var socket;
  26. var player_x = 0;
  27. var player_y = 0;
  28. var player_team = null;
  29. var user = [];
  30.  
  31. setTimeout(function () {
  32. var c = setInterval(function () {
  33. if (typeof io !== 'undefined' && io !== null) {
  34. if (typeof storeBuy === 'function' && typeof Object.keys(io.managers) [0] !== 'undefined') {
  35. socket = io.managers[Object.keys(io.managers) [0]].nsps['/'];
  36. socket.on('1', function (e) {
  37. SID = e;
  38. });
  39. socket.on('2', function (e, t) {
  40. if (!t) user.push([e[0], e[1], e[2], 0, 0, null]);
  41. });
  42. socket.on('4', function (e) {
  43. removeUserID(e);
  44. });
  45. socket.on('13', function (e) {
  46. removeUserSID(e);
  47. });
  48. socket.on('3', function (e) {
  49. for (var i = 0; i < user.length; i++) {
  50. $('#enemyradar' + user[i][1]).css({ 'display': 'none' });
  51. }
  52. for (var t = 0; t < e.length; t += 8) {
  53. if (e[t] == SID) {
  54. player_x = e[t + 1];
  55. player_y = e[t + 2];
  56. player_team = e[t + 6];
  57. } else {
  58. addUser(e[t], e[t + 1], e[t + 2], e[t + 6]);
  59. }
  60. }
  61. });
  62. clearInterval(c);
  63. }
  64. }
  65. }, 200);
  66. }, 1000);
  67.  
  68. function addUser(sid, x, y, team) {
  69. for (var i = 0; i < user.length; i++) {
  70. if (user[i][1] === sid) {
  71. user[i][3] = x;
  72. user[i][4] = y;
  73. user[i][5] = team;
  74. break;
  75. }
  76. }
  77. if (!$('#enemyradar' + sid).length) {
  78. $(document.body).append('<div id="enemyradar' + sid + '" style="' +
  79. 'display: none;' +
  80. 'position: absolute;' +
  81. 'left: 0;' +
  82. 'top: 0;' +
  83. 'color: #ffffff;' +
  84. 'width: 0;' +
  85. 'height: 0;' +
  86. 'border-style: solid;' +
  87. 'border-width: 10px 0 10px 20px;' +
  88. 'border-color: transparent transparent transparent ' + conf.radar.color + ';' +
  89. '"></div>');
  90. }
  91. var center_x = window.innerWidth / 2;
  92. var center_y = window.innerHeight / 2;
  93. var rad = getRadian(player_x, player_y, x, y);
  94. var per = getDistance(0, 0, (player_x - x), (player_y - y) * (16 / 9)) * 100 / (conf.maxScreenHeight / 2);
  95. var alpha = per / center_y;
  96. if (alpha > 1.0) alpha = 1.0;
  97. var dis = center_y * alpha;
  98. var tx = center_x + dis * Math.cos(rad) - conf.radar.w / 2;
  99. var ty = center_y + dis * Math.sin(rad) - conf.radar.h / 2;
  100. $('#enemyradar' + sid).css({
  101. 'left': tx + 'px',
  102. 'top': ty + 'px',
  103. 'display': ((player_team === null || player_team !== team) ? 'block' : 'none'),
  104. 'opacity': alpha,
  105. 'transform': 'rotate(' + RtoD(rad) + 'deg)'
  106. });
  107. }
  108.  
  109. function removeUserID(id) {
  110. for (var i = 0; i < user.length; i++) {
  111. if (user[i][0] == id) {
  112. $('#enemyradar' + user[i][1]).remove();
  113. user.splice(i, 1);
  114. break;
  115. }
  116. }
  117. }
  118.  
  119. function removeUserSID(sid) {
  120. for (var i = 0; i < user.length; i++) {
  121. if (user[i][1] == sid) {
  122. $('#enemyradar' + user[i][1]).remove();
  123. user.splice(i, 1);
  124. break;
  125. }
  126. }
  127. }
  128.  
  129. function getRadian(x1, y1, x2, y2) {
  130. return Math.atan2(y2 - y1, x2 - x1);
  131. }
  132. function getDistance(x1, y1, x2, y2) {
  133. return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
  134. }
  135. function RtoD(r) {
  136. return r * 180 / Math.PI;
  137. }
  138. function DtoR(d) {
  139. return d * Math.PI / 180;
  140. }
  141. })();