★moomoo.io ActionMacro

Action Macro (SpeedilyBuildItem/ChangeWepon&Hat/...)

  1. // ==UserScript==
  2. // @name ★moomoo.io ActionMacro
  3. // @version 1.3
  4. // @description Action Macro (SpeedilyBuildItem/ChangeWepon&Hat/...)
  5. // @author nekosan
  6. // @match *://moomoo.io/*
  7. // @grant none
  8. // @namespace https://greasyfork.org/en/scripts/29157-moomoo-io-actionmacro
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. 'use strict';
  13.  
  14. // Hat
  15. var hat = 0;
  16. var ID_BummleHat = 8;
  17. var ID_StrawHat = 2;
  18. var ID_WinterCap = 15;
  19. var ID_CowboyHat = 5;
  20. var ID_RangerHat = 4;
  21. var ID_ExplorerHat = 18;
  22. var ID_MarksmanCap = 1;
  23. var ID_SoldierHelmet = 6;
  24. var ID_HoneycrispHat = 13;
  25. var ID_MinersHelmet = 9;
  26. var ID_BoosterHat = 12;
  27. var ID_BushGear = 10;
  28. var ID_SpikeGear = 11;
  29. var ID_BushidoArmor = 16;
  30. var ID_SamuraiArmor = 20;
  31.  
  32. // Wepon
  33. var subitemmode = 0; // (0:BoostPad 1:PitTrap)
  34. var flag_subweapon = false;
  35.  
  36. // Item
  37. var food = 1; // 0:apple 1:cokkie
  38. var wall = 2; // 2:woodwall 3:stonewall
  39. var spike = 5; // 4:spikes 5:greater spikes
  40. var mill = 6; // 6:windmill 7:faster windmill
  41. var mine = 8; // 9:mine
  42. var trap = 9; // 9:pit trap
  43. var boost = 10; // 10:boost pad
  44.  
  45. var dir;
  46. document.getElementById('gameCanvas').addEventListener('mousemove', function (e) {
  47. dir = Math.atan2(e.pageY - window.innerHeight / 2, e.pageX - window.innerWidth / 2);
  48. });
  49.  
  50. function send(n, v) {
  51. io.managers[Object.keys(io.managers) [0]].nsps['/'].emit(n, v);
  52. }
  53.  
  54. function p(a, itemid) {
  55. if (a !== 0) {
  56. send('2', dir + a);
  57. }
  58. send('5', itemid);
  59. send('4', 1);
  60. }
  61.  
  62. document.addEventListener('keydown', function (e) {
  63. if (document.activeElement.id == 'chatBox') return;
  64. switch (e.keyCode) {
  65. // [CapsLock]
  66. case 240:
  67. if (hat == ID_BoosterHat) {
  68. hat = ID_SamuraiArmor;
  69. } else {
  70. hat = ID_BoosterHat;
  71. }
  72. storeEquip(hat);
  73. break;
  74. // [Space]
  75. case 32:
  76. e.preventDefault();
  77. p(0, boost);
  78. setTimeout(function () {
  79. p(0, boost);
  80. setTimeout(function () {
  81. p(1.5, spike);
  82. p(-1.5, spike);
  83. setTimeout(function () {
  84. p(1.5, spike);
  85. p(-1.5, spike);
  86. setTimeout(function () {
  87. p(0, spike);
  88. }, 80);
  89. }, 80);
  90. }, 50);
  91. }, 200);
  92. break;
  93. // [0]
  94. case 48:
  95. subitemmode = (subitemmode === 0) ? 1 : 0;
  96. break;
  97. // [B]
  98. case 66:
  99. p(0, subitemmode === 0 ? boost : trap);
  100. break;
  101. // [C]
  102. case 67:
  103. if (subitemmode === 0) {
  104. p(0, boost);
  105. setTimeout(function () {
  106. p(2, spike);
  107. p(-2, spike);
  108. }, 300);
  109. } else {
  110. p(0, trap);
  111. }
  112. break;
  113. // [F]
  114. case 70:
  115. p(0, spike);
  116. break;
  117. // [G]
  118. case 71:
  119. p(0.7, spike);
  120. p(-0.7, spike);
  121. break;
  122. // [H]
  123. case 72:
  124. p(0, spike);
  125. p(1.4, spike);
  126. p(-1.4, spike);
  127. break;
  128. // [I]
  129. case 73:
  130. p(2.5, mill);
  131. p(-2.5, mill);
  132. p(1, mill);
  133. p(-1, mill);
  134. break;
  135. // [J]
  136. case 74:
  137. p( Math.PI / 3, spike);
  138. p(-Math.PI / 3, spike);
  139. p(Math.PI, spike);
  140. break;
  141. // [N]
  142. case 78:
  143. p(2.5, mill);
  144. p(-2.5, mill);
  145. break;
  146. // [Q]
  147. case 81:
  148. p(0, food);
  149. break;
  150. // [R]
  151. case 82:
  152. p(Math.PI, spike);
  153. break;
  154. // [T]
  155. case 84:
  156. p(Math.PI,trap);
  157. break;
  158. // [V]
  159. case 86:
  160. p(2.3, spike);
  161. p(-2.3, spike);
  162. break;
  163. // [X]
  164. case 88:
  165. p( Math.PI / 3, wall);
  166. p(-Math.PI / 3, wall);
  167. p(Math.PI, wall);
  168. break;
  169. // [Z]
  170. case 90:
  171. p(0.7, wall);
  172. p(-0.7, wall);
  173. break;
  174. }
  175. if (e.shiftKey) {
  176. flag_subweapon = !flag_subweapon;
  177.  
  178. // Sub Weapon
  179. if (flag_subweapon) {
  180. // hunting bow
  181. if ($('#actionBarItem3').css('display') != 'none') {
  182. $('#actionBarItem3').click();
  183. if (hat != ID_MarksmanCap) {
  184. hat = ID_MarksmanCap;
  185. }
  186. storeEquip(hat);
  187. // wooden shield
  188. } else if ($('#actionBarItem5').css('display') != 'none') {
  189. $('#actionBarItem5').click();
  190. }
  191. // Main Weapon
  192. } else {
  193. // great axe
  194. if ($('#actionBarItem1').css('display') != 'none') {
  195. $('#actionBarItem1').click();
  196. // short sword
  197. } else if ($('#actionBarItem2').css('display') != 'none') {
  198. $('#actionBarItem2').click();
  199. }
  200. if (hat == ID_MarksmanCap) {
  201. hat = ID_BoosterHat;
  202. storeEquip(hat);
  203. }
  204. }
  205. }
  206. });
  207.  
  208. document.addEventListener('contextmenu', function (e) {
  209. if (document.activeElement.id == 'chatBox') return false;
  210. p(0, subitemmode === 0 ? boost : trap);
  211. }, false);
  212. })();