i30Mod

BEST WS SENDER MOD! ESC = Mod Menu, P = WS Sender, L = Console Command. [ = advanced autochat. Change autochat: press L, then enter advAc2 = "<your autochat here>" || Features: Increases FPS, Blocks Ads, Biome Map, and more! This is a utility mod, not a hack. Made by i30cps.

安装此脚本?
作者推荐脚本

您可能也喜欢Fake Gold Bot Troll

安装此脚本
  1. // ==UserScript==
  2. // @name i30Mod
  3. // @author i30cps
  4. // @version 1.9.0
  5. // @description BEST WS SENDER MOD! ESC = Mod Menu, P = WS Sender, L = Console Command. [ = advanced autochat. Change autochat: press L, then enter advAc2 = "<your autochat here>" || Features: Increases FPS, Blocks Ads, Biome Map, and more! This is a utility mod, not a hack. Made by i30cps.
  6. // @match *://moomoo.io/*
  7. // @match *://sandbox.moomoo.io/*
  8. // @match *://dev.moomoo.io/*
  9. // @match *://abc.moomoo.io/*
  10. // @icon data:image/png;base64,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
  11. // @require https://gf.qytechs.cn/scripts/423602-msgpack/code/msgpack.js?version=912797
  12. // @require http://code.jquery.com/jquery-3.3.1.min.js
  13. // @require https://code.jquery.com/ui/1.12.0/jquery-ui.min.js
  14. // @require https://cdnjs.cloudflare.com/ajax/libs/jquery-confirm/3.3.0/jquery-confirm.min.js
  15. // @license MIT
  16. // @namespace -
  17. // ==/UserScript==
  18.  
  19. /*
  20.  
  21. NN
  22. WW WXXW
  23. WXKXW WXKXW
  24. W0OKNNXXXNNNK0KN
  25. N;kOOkxxk;:;NWW
  26. :0;kkxdd:0:WNX
  27. :;_:Kxdj;:NWN
  28. ;jXXolWNlWN
  29. WKkXddolo0W _________________________
  30. WXWWNloOW | |
  31. NWdNWkN | discord is rotator#2860 |
  32. nN WNNWxOX |_________________________|
  33. cikx WNNKOOKW
  34. CWKxxX WNNWXNWNW
  35. kxxd WNNWNNWN
  36. XdxX WNNWWNWNW WxXxxXxxXW
  37. kxxd WNNWWNNWK kxXdxXddxXxNwWXNN
  38. WOxKW WNWWNWKWK kxdkxxoXowxXWXxXNXW0N
  39. kkxxxxdd NNWWWNWKxxdpllloooooddoxkdXNNWXN
  40. xxkddddxxxxKWWWWNxxxdlplclloodxkkOOWWNXLNJ
  41. xxxxxxdxxNNNWWNWkxxkxxxxkOO00WNWNWNXWXW
  42. dxxxxNWWWNWWWNWNWWWWNNWWWNWWWNWWW
  43. NKKNWWWWNWWNNWWWNWWWWNNWW
  44. WNWWWWWNWWWNWWNW
  45.  
  46. */
  47.  
  48. // auto updater
  49. let version = '1.9.0';
  50.  
  51. fetch('https://rotator.cf/i30version').then(response => response.text()).then(txt => {
  52. if (version < txt) alert(`You are not running the latest version of i30Mod (latest: ${txt}; current: ${version}) - Update at https://rotr.cf/i30`);
  53. });
  54.  
  55. // antiinvis
  56. CanvasRenderingContext2D.prototype.rotatef = CanvasRenderingContext2D.prototype.rotate
  57. CanvasRenderingContext2D.prototype.rotate = function(e){
  58. if(Math.abs(e) > 1e300) {
  59. e = Math.atan2(Math.cos(e), Math.sin(e));
  60. this.globalAlpha = 0.85;
  61. this.rotatef(e);
  62. } else {
  63. this.rotatef(e);
  64. }
  65. };
  66.  
  67. setTimeout(() => {
  68. $("#ot-sdk-btn-floating").remove() // remove the cookie thing
  69. $("#gameCanvas").css('cursor', 'url(http://cur.cursors-4u.net/user/use-1/use153.cur), default');
  70. $("#enterGame").css('cursor', 'url(http://cur.cursors-4u.net/user/use-1/use153.cur), default');
  71. document.getElementById('loadingText').innerHTML = "i30cps mod isn't unfair, and thus isn't a hack.";
  72. document.getElementById('gameName').innerHTML = 'i30cps';
  73. window.location.native_resolution = true;
  74. $("#consentBlock").css({display: "none"});
  75. $("#youtuberOf").css({display: "none"});
  76. $("#mapDisplay").css({background: `url('https://i.imgur.com/fgFsQJp.png')`});
  77. document.getElementById("linksContainer2").innerHTML = `<a href="https://www.youtube.com/" target="_blank" class="menuLink">YouTube</a> | <a href="https://discord.com/channels/@me" target="_blank" class="menuLink"> Discord </a> | <a href="https://youtube.com/watch?v=dQw4w9WgXcQ" target="_blank" class="menuLink"> Little Bots </a> `
  78. }, 1200);
  79. console.log("The mod is working.");
  80. $("#gameCanvas").css('cursor', 'url(http://cur.cursors-4u.net/user/use-1/use153.cur), default');
  81. $("#enterGame").css('cursor', 'url(http://cur.cursors-4u.net/user/use-1/use153.cur), default');
  82. document.getElementById('loadingText').innerHTML = "i30cps mod isn't unfair, and thus isn't a hack.";
  83. document.getElementById('gameName').innerHTML = 'i30cps';
  84. document.getElementById("leaderboard").append('i30cps\' Utility Mod');
  85. window.location.native_resolution = true;
  86. $("promoImgHolder").remove();
  87. $("#consentBlock").css({display: "none"});
  88. $("#youtuberOf").css({display: "none"});
  89. $("#mapDisplay").css({background: `url('https://i.imgur.com/fgFsQJp.png')`});
  90. document.getElementById("linksContainer2").innerHTML = `<a href="https://www.youtube.com/" target="_blank" class="menuLink">YouTube</a> | <a href="https://discord.com/channels/@me" target="_blank" class="menuLink"> Discord </a> | <a href="https://youtube.com/watch?v=dQw4w9WgXcQ" target="_blank" class="menuLink"> Little Bots </a> `
  91.  
  92. try {
  93. document.getElementById("moomooio_728x90_home").style.display = "none"; //Remove sidney's ads
  94. $("#moomooio_728x90_home").parent().css({display: "none"});
  95. } catch (e) {
  96. console.log("error removing ad");
  97. }
  98.  
  99. function login(username, sk=0) {
  100. doNewSend(['sp', [{name: username, skin: sk, mofoll: 1}]])
  101. }
  102.  
  103. let mouseX;
  104. let mouseY;
  105.  
  106. let width;
  107. let height;
  108.  
  109. var doAdvAc1 = false;
  110. var doAdvAc2 = false;
  111. var animateInterval = 1000;
  112. var advAc2pos = 0;
  113. var advAc1pos = 0;
  114. // below is advanced autochat 1. it contains vulgar language, so i stored the base64 encoded version of it
  115. // next line (advAc) contains the lyrics to russian paradise - ak-47
  116. var advAc = atob('RXllcywgZXllcwpKdXN0IGxvb2sgaW4gbXkgZXllcwpKdXN0IGxvb2sgaW4gbXkgZXllcyBhbmQKeW91J2xsIHNlZSBydXNzaWFuIHBhcmFkaXNlCiAgICAgLSAtIC0gICAgIApKdXN0IGxvb2sgaW4gbXkgZXllcyBhbmQKeW91J2xsIHNlZSBydXNzaWFuIHBhcmFkaXNlCkp1c3QgbG9vayBpbiBteSBleWVzIGFuZAp5b3UnbGwgc2VlIHJ1c3NpYW4gcGFyYWRpc2UKSnVzdCBsb29rIGluIG15IGV5ZXMgYW5kCnlvdSdsbCBzZWUgcnVzc2lhbiBwYXJhZGlzZQpKdXN0IGxvb2sgaW4gbXkgZXllcyBhbmQKeW91J2xsIHNlZSBydXNzaWFuIHBhcmFkaXNlCkhlbGxvLCBteSBuYW1lIGlzIFZhc3lhCmFuZCBJJ20gZnJvbSBSb3N0b3Ygb24gRG9uCkFuZCByaWdodCBub3cgbWFraW5nIHJhcApvbiB0aGUgbWljcm9waG9uZQpJIHNob3cgeW91IHJlYWwgaG9vZCwKdmVyeSB2ZXJ5IGJhZCBob29kOgpObyBzaG9lcywgbm8gaG9tZSBhbmQgYmFkIGZvb2QKQnV0IHRoaXMgaXMgbXkgcm9vdHMsIG15IHRydXRoCkFkZGlkYXMgYm9vdHMsCmFuZCBjYXAgQ2hpY2FnbyBCdWxscwpDb3BzIHdhbm5hIGNhdGNoIG1lIGV2ZXJ5IGRheSwKYW5kIGV2ZXJ5IG5pZ2h0OwpCdXQgSSBhbSBub3QgYWZyYWlkLAp0aGF0J3MgbXkgUGFybGlhbWVudCBsaWdodApZZXN0ZXJkYXksIEkgaW5zdGFsbGVkClNreXBlIG9uIG15IGNvbXAKQnV0IHRoZXkgY3V0IG9mZiB0aGUgbGlnaHQKaW4gbXkgaG9tZQpJJ20gbm90IGxvb3NpbmcgaG9wZSwKaXRzIGJldHRlciB0byBsaXZlIGluIHRoaXMgZ28KVGhhbiBnbyBhd2F5IGFuZCBzZWxsIGEgc291bApTb21lYm9keSBzaG90IHNvbWUgYnJhdmUgaGVhcnQKU29tZWJvZHkgbGl0dGxlIGZpc2gsCnNvbWVib2R5IGJsb29kIHNoYXJrOwpTb21lYm9keSBtZWV0IHNvbWVib2R5LAphbmQga2lsbCBzb21lYm9keTsKSGFuZHMgKHplc3RvYm90aSBzbm8pCmhhdmUgc29tZSBtb25leQpNeSBFc2NhbGFkZSBpcyBsaWtlIEJvaW5nIDc0NwpJIHN0YXJ0IGluIHRoaXMgcm91bmQKYXQgZWxldmVuClRoZSB0aW1lIGlzIDExOjQ1ClRoaXMgaXMgbXkgbGlmZSwKbXkgbWluZCBhbmQgbXkgZmx5OwpJbSBkcml2aW5nIGZyb20KbXkgcGllY2Ugb2YgYSBidXkKSGFuZCBtb3ZlIG15IG1vbmV5CnRvIER1YmFpIG9yIFBhdGFpClRoaXMgaXMgcnVzc2lhbiBncm91bmQsCnRoaXMgaXMgcnVzc2lhbiBza3kKU29ycnkgbWFtYSwKSSdtIGEgZ2FuZ3N0YSAtIHZlcnkgYmFkIGd1eQpKdXN0IGxvb2sgaW4gbXkgZXllcyBhbmQKeW91J2xsIHNlZSBydXNzaWFuIHBhcmFkaXNlCkp1c3QgbG9vayBpbiBteSBleWVzIGFuZAp5b3UnbGwgc2VlIHJ1c3NpYW4gcGFyYWRpc2UKSnVzdCBsb29rIGluIG15IGV5ZXMgYW5kCnlvdSdsbCBzZWUgcnVzc2lhbiBwYXJhZGlzZQpKdXN0IGxvb2sgaW4gbXkgZXllcyBhbmQKeW91J2xsIHNlZSBydXNzaWFuIHBhcmFkaXNlCkhpIEkgYW0gVml0eWEsIGZyb20gRUtCCkNpdHkgb2YgRWthdGVyaW5hLCAyODcgeWVhcnMKSSB3cml0ZSBteSByYXAsIG9ubHkgZm9yIHlvdQpCZWNhdXNlIHlvdSBzYXk6Ck1hbiwgdGhpcyBpcyB0cnVlClRvZGF5CkkgZ28gb3VyIHN0dWRpbyBHYXpnb2xkZXIKQW5kIGNyZWF0ZSBvbiBjb21wdXRlcgphICJOZXcgZm9sZGVyIgpKIHB1c2ggcmFjayByYWNrCkkgc2luZyByYXAgcmFwCk1pY3JvcGhvbmUgY2hlY2sgY2hlY2sKVGhpcyBpcyByZWFsIHNoHml0IHNoHml0Ck1hbWEgaSBtaXNzIHlvdSwKY29taW5nIHNvb24sIEkgZ28gaG9tZQpJIGNyeSwKd2hlbiB0aGVuIEkgc2VlIG15IHBob3RvIGFsYnVtCkkgZG9uJ3QgZm9yZ2V0IGFib3V0Cm15IGJlcmV6YSBmcmllbmQKTW9zY293IGlzIGdyZWF0LApJIGNyZWF0ZSBuZXcgcmFwCkkgZG9uJ3QgaGF2ZSBoZXJlIGdpcmxmcmllbmQKTXkgbGFzdCBnaXJsIHNheToKImZ1HmNrIHlvdSBtYW4hIgoiZnUeY2sgeW91ciByYXAhIgpCZWNhdXNlCkkgc21va2UgZXZlcnlkYXkgTWFyaWh1YW5hCk1hcmlodWFuYSAtIEl0J3NhIG51bWJlciBvbm5hCkkgcGxheSBwbGF5c3RhdGlvbiBvbiBwbGFzbWEKaW4gbXkgZmxhdApUZWtrZW4gNiwKTW9ydGFsIEtvbWJhdCB2cy4gVW5pdmVyc2UKSSBwbGF5IGdhbWVzIHdpdGggbXkgZnJpZW5kcwpZZXMsIEkgbGlrZSBraWxsIHBvbGljZQpvbiBWaWNlIENpdHkgc3RyZWV0cwpKdXN0IGxvb2sgaW4gbXkgZXllcyBhbmQKeW91J2xsIHNlZSBydXNzaWFuIHBhcmFkaXNlCkp1c3QgbG9vayBpbiBteSBleWVzIGFuZAp5b3UnbGwgc2VlIHJ1c3NpYW4gcGFyYWRpc2UKSnVzdCBsb29rIGluIG15IGV5ZXMgYW5kCnlvdSdsbCBzZWUgcnVzc2lhbiBwYXJhZGlzZQpKdXN0IGxvb2sgaW4gbXkgZXllcyBhbmQKeW91J2xsIHNlZSBydXNzaWFuIHBhcmFkaXNlCkRlYXIgdW5jbGUsIEknbSB5b3VyIG5lcGhldywKU29uIG9mIHlvdXIgYnJvdGhlciwKR3JhbmRzb24gb2YgeW91ciBtb3RoZXIsCmFuZCB5b3VyIGRhdWdodGVyJ3MgY291c2luOwpBdW50IHNheXMgdGhhdAp5b3UgbGl2ZXMgaW4gdGhlIFVTQQpTb3JyeSBmb3IgbWlzdGFrZXMsCmdvb2dsZSB0cmFuc2xhdGU7Clllc3RlcmRheQpJIG9wZW5lZCBteSBiYW5rIGFjY291bnQKUGxlYXNlIHNlbmQgbWUgZG9sbGFycwppbiBhbnkgYW1vdW50ClZpc2EgYWxyZWFkeSBpbiBwYXNzcG9ydCwKSSdtIGdvaW5nIGZhc3QKWW91IGFuZCBBdW50LAp3aWxsIGJlIG15IG1vdGhlciBhbmQgZmF0aGVyCkxvbmcgdGltZSBhZ28sCndoZW4gSSB3YXMgYSBraWQKQmFkIGd1eXMgdGVhY2hlZCBtZQpob3cgdG8gc21va2Ugd2VlZDsKTm93IEkgaGF2ZSBubyBiYWQgaGFiaXRzLApzaWxlbnQgYmxhY2sgcmFiYml0cwpJIGNhbGwgaXQgRy10cmFpbmluZywKbWFkZSBtZSBoYXBweSBhbmQgZnJpZW5kbHk7CkkgaGF2ZSBhIGRyZWFtLApteSBkZWFyIHVuY2xlIFZvdmEKSSB3aWxsIGZseSB0byB5b3UgdmVyeSBzb29uLApVcmFsIHRvIElvd2EKQSBraXNzIHRvIHlvdXIgY2hpbGRyZW4sCm15IGxldHRlciBpcyBvdmVyCnkgVGU2UiBUYW0gUGFyYWRpc2UsCmEgVHlUIHh5ZUJv').split('\n');
  117. // change this to change advanced autochat type 1, make sure each line is or is below thirty characters long.
  118. var advAc2 = "Imagine having to cheat through the use of unfair advantages to beat others in a cow game. Whoever does is pathetic. Stop the cheaters. Get i30cpsmod - no unfair advantages. Bring more light into mooomoo.io. bit.ly/i30cpsmod";
  119. var advertisement = "Imagine having to cheat through the use of unfair advantages to beat others in a cow game. Whoever does is pathetic. Stop the cheaters. Get i30cpsmod - no unfair advantages. Bring more light into mooomoo.io. bit.ly/i30cpsmod";
  120. var rickroll = `We're no strangers to love; You know the rules and so do I (do I); A full commitment's what I'm thinking of; You wouldn't get this from any other guy; I just wanna tell you how I'm feeling; Gotta make you understand; Never gonna give you up; Never gonna let you down; Never gonna run around and desert you; Never gonna make you cry; Never gonna say goodbye; Never gonna tell a lie and hurt you; We've known each other for so long; Your heart's been aching, but you're too shy to say it (say it); Inside, we both know what's been going on (going on); We know the game and we're gonna play it; And if you ask me how I'm feeling; Don't tell me you're too blind to see; Never gonna give you up; Never gonna let you down; Never gonna run around and desert you; Never gonna make you cry; Never gonna say goodbye; Never gonna tell a lie and hurt you; Never gonna give you up; Never gonna let you down; Never gonna run around and desert you; Never gonna make you cry; Never gonna say goodbye; Never gonna tell a lie and hurt you; We've known each other for so long; Your heart's been aching, but you're too shy to say it (to say it); Inside, we both know what's been going on (going on); We know the game and we're gonna play it; I just wanna tell you how I'm feeling; Gotta make you understand; Never gonna give you up; Never gonna let you down; Never gonna run around and desert you; Never gonna make you cry; Never gonna say goodbye; Never gonna tell a lie and hurt you; Never gonna give you up; Never gonna let you down; Never gonna run around and desert you; Never gonna make you cry; Never gonna say goodbye; Never gonna tell a lie and hurt you; Never gonna give you up; Never gonna let you down; Never gonna run around and desert you; Never gonna make you cry; Never gonna say goodbye; Never gonna tell a lie and hurt you`
  121. function roll() {
  122. if (advAc2.substring(0, 1820) == rickroll) {advAc2 = advertisement}
  123. else {advAc2 = rickroll}
  124. }
  125. setInterval(() => { // if someone steals my advAc2 ill go find their house and rickroll them irl
  126. if(doAdvAc1) { // array autochat
  127. doNewSend(['ch', [advAc[advAc1pos++]]]);
  128. if (advAc1pos >= advAc.length) advAc1pos = 0;
  129. }
  130. else if(doAdvAc2) { // Long scroll autochat
  131. while (advAc2.length <= 30) {
  132. advAc2 += " || " + advAc2
  133. }
  134. if (advAc2.substring(advAc2.length - 30, advAc2.length) != advAc2.substring(0, 30)) {
  135. advAc2 += " || " + advAc2.substring(0, 30);
  136. }
  137. if (advAc2pos > advAc2.length - 30) {
  138. advAc2pos = 0;
  139. }
  140. doNewSend(['ch', [advAc2.substring(advAc2pos, advAc2pos + 30)]])
  141. advAc2pos += 2;
  142. } else {advAc2pos = 0}
  143. if(messageToggle == 1) { // default autochat
  144. doNewSend(["ch", [animate(true, localStorage.i30cps_ANIMATE=='1')]])
  145. }
  146. }, animateInterval);
  147.  
  148. setInterval(() => {
  149. // Fix advAc2
  150. while (advAc2.length <= 30) {
  151. advAc2 += " || " + advAc2
  152. }
  153. if (advAc2.substring(advAc2.length - 30, advAc2.length) != advAc2.substring(0, 30)) {
  154. advAc2 += " || " + advAc2.substring(0, 30);
  155. }
  156.  
  157. // CpsTalk
  158. if (cpsTalk) {
  159. doNewSend(['ch', ["Clicks/Sec. - " + cps + " - By i30cps"]])
  160. }
  161. }, 500)
  162.  
  163. function normal() {
  164. hat(normalHat);
  165. acc(normalAcc);
  166. }
  167.  
  168. function aim(x, y){
  169. var cvs = document.getElementById("gameCanvas");
  170. cvs.dispatchEvent(new MouseEvent("mousemove", {
  171. clientX: x,
  172. clientY: y
  173.  
  174. }));
  175. }
  176.  
  177. let coreURL = new URL(window.location.href);
  178. window.sessionStorage.force = coreURL.searchParams.get("fc");
  179.  
  180. //var holdingKeys = {w: false, a: false, s: false, d: false}
  181.  
  182. var cpsTalk = false;
  183. var nearestEnemy;
  184. var nearestEnemyAngle;
  185. var isEnemyNear;
  186. var primary;
  187. var instapike = true;
  188. var instaCHAT = true;
  189. var secondary;
  190. var foodType;
  191. var wallType;
  192. var spikeType;
  193. var millType;
  194. var mineType;
  195. var boostType;
  196. var fdng = true;
  197. var turretType;
  198. var spawnpadType = 20;
  199. var autoaim = false;
  200. var tick = 1;
  201. var oldHat;
  202. var oldAcc;
  203. var enemiesNear;
  204. var normalHat;
  205. var normalAcc;
  206. var ws;
  207. var searchp = true;
  208. let myPlayer = {
  209. id: null,
  210. x: null,
  211. y: null,
  212. dir: null,
  213. object: null,
  214. weapon: null,
  215. clan: null,
  216. isLeader: null,
  217. hat: null,
  218. accessory: null,
  219. isSkull: null
  220. };
  221.  
  222. let healSpeed = 100;
  223. var messageToggle = 0;
  224. let hatToggle = 1;
  225. var letChatToggle = 1;
  226. document.logPackets = false;
  227.  
  228. var interv = setInterval(() => {
  229. if(!(localStorage.i30cps_MENU==undefined)){document.querySelector("#menuchanger").innerText = "Menu Key: "+localStorage.i30cps_MENU+" - Click this text and press a key to change it!";}
  230. if (document.querySelector("#menuchanger").innerText == "Menu Key: "+localStorage.i30cps_MENU+" - Click this text and press a key to change it!") {
  231. clearInterval(interv);
  232. }
  233. }, 500);
  234.  
  235. if (localStorage.i30cps!='1') {
  236. // intialize localStorage i30Mod values
  237. localStorage.i30cps = '1';
  238. localStorage.i30cps_MENU = 'Escape';
  239. localStorage.i30cps_SPIKE = 'v';
  240. localStorage.i30cps_BOOST = 'f';
  241. localStorage.i30cps_MILL = 'z';
  242. localStorage.i30cps_TURRET = 'g';
  243. localStorage.i30cps_WALL = 't';
  244. localStorage.i30cps_SPAWNPAD = 'b';
  245. localStorage.i30cps_CUSTMAP = '1';
  246. localStorage.i30cps_ANIMATE = '1';
  247. localStorage.i30cps_CUSTOMC = '1';
  248. localStorage.i30cps_BIGSHOP = '0';
  249. localStorage.i30cps_BOTCUST = '0';
  250. localStorage.i30cps_BOTOPEN = '1';
  251. }
  252.  
  253. var nocommand = ["ach1", "spikechanger", "millchanger", "boostchanger", "turretchanger", "chatbox", "allianceinput"]
  254.  
  255. function decorate(message) {
  256. let result = ''
  257. for (let i = 0; i < message.length; i++) {
  258. Math.random() < 0.1 ? result += '~' : (Math.random() < 0.1 ? result += '-' : result += message[i]);
  259. }
  260. return result;
  261. }
  262.  
  263. let invChar = String.fromCharCode(30);
  264.  
  265. // curse word list - I used base64 to hide them because I do not want people to immediately see them while looking at the code
  266. let curses = ["Y3VudA==","d2hvcmU=","ZnVjaw==","c2hpdA==","ZmFnZ290","bmlnZ2Vy","bmlnZ2E=","ZGljaw==","dmFnaW5h","bWluZ2U=","Y29jaw==","cmFwZQ==","Y3Vt","c2V4","dGl0cw==","cGVuaXM=","Y2xpdA==","cHVzc3k=","bWVhdGN1cnRhaW4=","aml6eg==","cHJ1bmU=","ZG91Y2hl","d2Fua2Vy","ZGFtbg==","Yml0Y2g=","ZGljaw==","ZmFn","YmFzdGFyZA=="];
  267. let replacements = ["Yx51bnQ=","dx5ob3Jl","Zh51Y2s=","cx5oaXQ=","Zh5hZ2dvdA==","bh5pZ2dlcg==","bh5pZ2dh","ZB5pY2s=","dh5hZ2luYQ==","bR5pbmdl","Yx5vY2s=","ch5hcGU=","Yx51bQ==","cx5leA==","dB5pdHM=","cB5lbmlz","Yx5saXQ=","cB51c3N5","bR5lYXRjdXJ0YWlu","ah5peno=","cB5ydW5l","ZB5vdWNoZQ==","dx5hbmtlcg==","ZB5hbW4=","Yh5pdGNo","ZB5pY2s=","Zh5hZw==","Yh5hc3RhcmQ="];
  268. let defaults = [];
  269.  
  270. // change them to the actual curse word list
  271. let i = 0;
  272. curses.forEach((e) => {
  273. curses[i] = atob(e);
  274. defaults[i] = curses[i][0].toUpperCase() + curses[i].substring(1, curses[i].length);
  275. i++;
  276. });
  277. i=0;
  278. replacements.forEach((e) => {
  279. replacements[i] = atob(e);
  280. i++;
  281. });
  282.  
  283. function replaceWithLimit(string, arr1, arr2, arr3, limit) {
  284. for (let i = 0; i < arr1.length; i++) {
  285. while (string.includes(arr1[i])) {
  286. string = string.replace(arr1[i], (string.length < limit) ? arr2[i] : arr3[i]);
  287. }
  288. }
  289. return string;
  290. }
  291.  
  292. document.msgpack = msgpack;
  293.  
  294. WebSocket.prototype.oldSend = WebSocket.prototype.send;
  295. WebSocket.prototype.send = function(m){
  296. if (!ws) {
  297. document.ws = this;
  298.  
  299. ws = this;
  300. socketFound(this);
  301. }
  302. let packet = msgpack.decode(m);
  303. if (document.logPackets) { // intercept and log the packet
  304. if (!(document.doNotLog.includes(packet[0].toString()))) console.log(packet);
  305. }
  306. // anti chat filter
  307. if (packet[0] == 'ch') {
  308. packet[1][0] = replaceWithLimit(packet[1][0], curses, replacements, defaults, 30);
  309. doOldSend(packet);
  310. return;
  311. } else if (packet[0] == 'sp') { // force moofoll (start with 100 of all resources)
  312. packet[1].moofoll = '1';
  313. doOldSend(packet);
  314. return;
  315. } else if (packet[0] == 'c' && packet[1][0] == 1) { // count registered cps (the click packets you actually send per second)
  316. cps++;
  317. setTimeout(() => cps--, 950);
  318. }
  319. this.oldSend(m);
  320. };
  321.  
  322. document.doNotLog = ['2', 'pp', '33', 'ch']
  323.  
  324. function socketFound(socket){
  325. socket.addEventListener('message', function(message){
  326. handleMessage(message);
  327. });
  328. }
  329.  
  330. function handleMessage(m){
  331. let temp = msgpack.decode(new Uint8Array(m.data));
  332. let data;
  333. if(temp.length > 1) {
  334. data = [temp[0], ...temp[1]];
  335. } else {
  336. data = temp;
  337. }
  338. let item = data[0];
  339. if(!data) {return};
  340.  
  341. if(item === "io-init") {
  342. let cvs = document.getElementById("gameCanvas");
  343. width = cvs.clientWidth;
  344. height = cvs.clientHeight;
  345. $(window).resize(function() {
  346. width = cvs.clientWidth;
  347. height = cvs.clientHeight;
  348. });
  349. cvs.addEventListener("mousemove", e => {
  350. mouseX = e.clientX;
  351. mouseY = e.clientY;
  352. });
  353. }
  354. if (item == 'an') {
  355. if (tabs.includes(data[1][0])) {
  356. doNewSend(['11', [data[1], '1']])
  357. }
  358. }
  359. if (item == "1" && myPlayer.id == null){
  360. myPlayer.id = data[1];
  361. myID = data[1];
  362. if (!tabs.includes(myID)) {
  363. tabs.push(myID);
  364. }
  365. }
  366.  
  367. if (item == "33") {
  368. enemiesNear = [];
  369. for(let i = 0; i < data[1].length / 13; i++) {
  370. let playerInfo = data[1].slice(13*i, 13*i+13);
  371. if(playerInfo[0] == myPlayer.id) {
  372. myPlayer.x = playerInfo[1];
  373. myPlayer.y = playerInfo[2];
  374. myPlayer.dir = playerInfo[3];
  375. myPlayer.object = playerInfo[4];
  376. myPlayer.weapon = playerInfo[5];
  377. myPlayer.clan = playerInfo[7];
  378. myPlayer.isLeader = playerInfo[8];
  379. myPlayer.hat = playerInfo[9];
  380. myPlayer.accessory = playerInfo[10];
  381. myPlayer.isSkull = playerInfo[11];
  382. } else if(playerInfo[7] != myPlayer.clan || playerInfo[7] === null) {
  383. enemiesNear.push(playerInfo);
  384. }
  385. }
  386. }
  387.  
  388. isEnemyNear = false;
  389. if(enemiesNear) {
  390. nearestEnemy = enemiesNear.sort((a,b) => dist(a, myPlayer) - dist(b, myPlayer))[0];
  391. }
  392. if(nearestEnemy) {
  393. nearestEnemyAngle = Math.atan2(nearestEnemy[2]-myPlayer.y, nearestEnemy[1]-myPlayer.x);
  394. if(Math.sqrt(Math.pow((myPlayer.y-nearestEnemy[2]), 2) + Math.pow((myPlayer.x-nearestEnemy[1]), 2)) < 300) {
  395. isEnemyNear = true;
  396. if(autoaim == false && myPlayer.hat != 7 && myPlayer.hat != 53) {
  397. normalHat = 6;
  398. if(primary != 8) {
  399. normalAcc = 21;
  400. }
  401. };
  402. }
  403. }
  404. if(isEnemyNear == false && autoaim == false) {
  405. normalAcc = 11;
  406. if (myPlayer.y < 2400){
  407. normalHat = 15;
  408. } else if (myPlayer.y > 6850 && myPlayer.y < 7550){
  409. normalHat = 31;
  410. } else {
  411. normalHat = 12;
  412. }
  413. }
  414. if (!nearestEnemy) {
  415. nearestEnemyAngle = myPlayer.dir;
  416. }
  417. update();
  418. }
  419.  
  420.  
  421. function doNewSend(sender){
  422. ws.send(new Uint8Array(Array.from(msgpack.encode(sender))));
  423. }
  424.  
  425. function doOldSend(sender){
  426. ws.oldSend(new Uint8Array(Array.from(msgpack.encode(sender))));
  427. }
  428.  
  429. document.doNewSend = doNewSend;
  430.  
  431. let keysDown = {
  432. BOOST: false,
  433. SPIKE: false,
  434. MILL: false,
  435. PAD: false,
  436. WALL: false,
  437. TURRET: false
  438. };
  439. let toggledMods = {
  440. 1: false,
  441. 2: false,
  442. 3: false,
  443. 4: false,
  444. 5: false
  445. };
  446.  
  447. function slot(id) {
  448. doNewSend(["5", [id, null]])
  449. }
  450.  
  451. function katana() {
  452. doNewSend([6, [4]])
  453. }
  454.  
  455. document.addEventListener('keydown', (e)=>{
  456. if (updateMenuKey) {
  457. updateMenuKey = false;
  458. localStorage.i30cps_MENU = e.code;
  459. document.querySelector("#menuchanger").innerText = "Menu Key: "+e.code+" - Click this text and press a key to change it!";
  460. }
  461. if(document.activeElement == document.body) {
  462. let k = e.key.toLowerCase();
  463. if (e.key == "'") sb.style.display = sb.style.display != "block" ? "block" : "none";
  464. if (e.key == document.getElementById('sb-rngchanger').value.toLowerCase()) {
  465. let rng = Math.floor(Math.random() * 5) + 1;
  466. if (Math.random() < 0.5) {
  467. toggledMods[rng] = !toggledMods[rng];
  468. doNewSend(['ch', [document.getElementById("sb-mod_name").value + " | " + document.getElementById("sb-mod_" + rng).value + (toggledMods[rng] ? ": ON" : ": OFF")]]);
  469. } else {
  470. doNewSend(['ch', [document.getElementById('sb-msg_' + rng).value]]);
  471. }
  472. }
  473. if(k == 'l') {
  474. eval(prompt("Console Command: Available Commands: bot(), roll()"));
  475. } else if(k == '[') {
  476. doAdvAc2 = !doAdvAc2;
  477. } else if (k == '.') {
  478. messageToggle = !messageToggle;
  479. } else if (k == ']') {
  480. doAdvAc1 = !doAdvAc1;
  481. } else if (k == '\\') {
  482. advAc1pos = 0;
  483. }
  484. if(e.key == localStorage.i30cps_BOOST && !keysDown.BOOST) {
  485. slot(boostType);
  486. keysDown.BOOST = true;
  487. }
  488. if(e.key == localStorage.i30cps_MILL && !keysDown.MILL) {
  489. slot(millType);
  490. keysDown.MILL = true;
  491. }
  492. if(e.key == localStorage.i30cps_SPIKE && !keysDown.SPIKE) {
  493. slot(spikeType);
  494. keysDown.SPIKE = true;
  495. }
  496. if(e.key == localStorage.i30cps_TURRET && !keysDown.TURRET) {
  497. doNewSend(["5", [turretType, null]]);
  498. keysDown.TURRET = true;
  499. }
  500. if(e.key == localStorage.i30cps_WALL && !keysDown.WALL) {
  501. doNewSend(["5", [wallType, null]]);
  502. keysDown.WALL = true;
  503. }
  504. if(e.key == localStorage.i30cps_SPAWNPAD && !keysDown.PAD) {
  505. doNewSend(["5", [20, null]]);
  506. keysDown.PAD = true;
  507. }
  508. if(k == 'p') {
  509. let sendPrompt = prompt("Send (Type Help for Help):").split(", ");
  510. if (sendPrompt.length == 2) {
  511. eval("doNewSend(["+sendPrompt[0]+", ["+sendPrompt[1]+"]])");
  512. } else if (sendPrompt.length == 3) {
  513. eval("doNewSend(["+sendPrompt[0]+", ["+sendPrompt[1]+", "+sendPrompt[2]+"]])");
  514. } else if (sendPrompt.length == 1 && sendPrompt[0].toLowerCase() == "help") {
  515. alert("6, 25 = Spinning Spikes, 6, 28 = Power Mill. Use console and document.doNewSend or press L for live interactions.")
  516. } else {
  517. alert("Ws Sender Error. Use a, b, c option format. Do not use brackets ( (), [], {} ).")
  518. }
  519. }
  520. }
  521. });
  522.  
  523. document.addEventListener('keyup', (e) => {
  524. if (document.activeElement == document.body) {
  525. if(e.key == localStorage.i30cps_BOOST) {
  526. keysDown.BOOST = false;
  527. }
  528. if(e.key == localStorage.i30cps_MILL) {
  529. keysDown.MILL = false;
  530. }
  531. if(e.key == localStorage.i30cps_SPIKE) {
  532. keysDown.SPIKE = false;
  533. }
  534. if(e.key == localStorage.i30cps_TURRET) {
  535. keysDown.TURRET = false;
  536. }
  537. if(e.key == localStorage.i30cps_WALL) {
  538. keysDown.WALL = false;
  539. }
  540. if(e.key == localStorage.i30cps_SPAWNPAD) {
  541. keysDown.PAD = false;
  542. }
  543. }
  544. });
  545.  
  546. function isElementVisible(e) {
  547. return (e.offsetParent !== null);
  548. }
  549.  
  550.  
  551. function toRad(angle) {
  552. return angle * 0.01745329251;
  553. }
  554.  
  555. function dist(a, b){
  556. return Math.sqrt( Math.pow((b.y-a[2]), 2) + Math.pow((b.x-a[1]), 2) );
  557. }
  558.  
  559. var updateMenuKey = false;
  560.  
  561. document.title = "Utility Mod by i30cps"
  562.  
  563. function update() {
  564. // find the slots for everything
  565. for (let i=0;i<9;i++){
  566. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  567. primary = i;
  568. }
  569. }
  570.  
  571. for (let i=9;i<16;i++){
  572. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  573. secondary = i;
  574. }
  575. }
  576.  
  577. for (let i=16;i<19;i++){
  578. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  579. foodType = i - 16;
  580. }
  581. }
  582.  
  583. for (let i=19;i<22;i++){
  584. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  585. wallType = i - 16;
  586. }
  587. }
  588.  
  589. for (let i=22;i<26;i++){
  590. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  591. spikeType = i - 16;
  592. }
  593. }
  594.  
  595. for (let i=26;i<29;i++){
  596. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  597. millType = i - 16;
  598. }
  599. }
  600.  
  601. for (let i=29;i<31;i++){
  602. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  603. mineType = i - 16;
  604. }
  605. }
  606.  
  607. for (let i=31;i<33;i++){
  608. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  609. boostType = i - 16;
  610. }
  611. }
  612.  
  613. for (let i=33;i<39;i++){
  614. if (isElementVisible(document.getElementById("actionBarItem" + i.toString())) && i != 36){
  615. turretType = i - 16;
  616. }
  617. }
  618.  
  619. spawnpadType = 20;
  620. }
  621.  
  622. /*try {
  623. document.getElementById("moomooio_728x90_home").style.display = "none";
  624. $("moomooio728x90_home").parent().css({display: "none"});
  625. } catch (e) {
  626. console.log("There was an error removing the ads.");
  627. }*/
  628.  
  629.  
  630. var menuChange = document.createElement("div");
  631. menuChange.className = "menuCard";
  632. menuChange.id = "mainSettings";
  633. menuChange.innerHTML = `
  634. <div id="simpleModal" class="modal">
  635. <div class="modal-content">
  636. <div class="modal-header">
  637. <span class="closeBtn">&times;</span>
  638. <h2 style="font-size: 17px;">Settings</h2>
  639. </div>
  640. <div class="modal-body" style="font-size: 17px;">
  641. <div class="modal-content" style="font-size:14px">
  642. <p>This mod does not give any unfair advantages. ESC = Open Menu, P = WS Sender L = Console Command, Up Arrow=Autochat, Dash (-) = Power Mill, Backslash (\\) = Katana. To spawn a bot: Press L and type bot(). To find bot's owner: say owner.</p>
  643. </div>
  644. <div class="flexControl">
  645. <a id="menuchanger">Menu Key: Escape - Click this text and press a key to change it!</a>
  646. <h3 style="font-size: 17px;"> Settings </h3>
  647. <label class="container">Show biomes on the map?
  648. <input type="checkbox" id="myCheck" checked="true">
  649. <span class="checkmark"></span>
  650. </label>
  651. <label class="container">Bigger shop?
  652. <input type="checkbox" id="bigShop">
  653. <span class="checkmark"></span>
  654. </label>
  655. <label class="container">Aim Cursor?
  656. <input type="checkbox" id="myCheck3" checked="true">
  657. <span class="checkmark"></span>
  658. </label>
  659. <label class="container">Advertisement bots join your clan?
  660. <input type="checkbox" id="customBotClan">
  661. <span class="checkmark"></span>
  662. </label>
  663. <label class="container">Advertisement bots let everyone join their clan?
  664. <input type="checkbox" id="botClanOpen" checked="true">
  665. <span class="checkmark"></span>
  666. </label>
  667. <label for="wallchanger" class="container">Wall Key:</label><input type="text" id="wallchanger" value="t"><label for="spikechanger" class="container">Spike Key:</label>
  668. <input type="text" id="spikechanger" value="v"><label for="millchanger" class="container">Windmill Key:
  669. </label><input type="text" id="millchanger" value="z"><label for="boostchanger" class="container">Boost/Trap Key:</label>
  670. <input type="text" id="boostchanger" value="f"><label for="turretchanger" class="container">Turret/Teleporter/Other Key:</label>
  671. <input type="text" id="turretchanger" value="g"><label for="spawnpadchanger" class="container">Spawn Pad Key:</label><input type="text" id="spawnpadchanger" value="b">
  672. <h3 style="font-size: 17px;"> Autochat settings </h3>
  673. <label class="container">AutoChat Animation?
  674. <input type="checkbox" checked="true" id="myCheck2">
  675. <span class="checkmark"></span>
  676. </label>
  677. <br>AutoChat:<input type="text" value="bit.ly/i30cpsmod not unfair" id="ach1" width="100" height="50"/><br>
  678. </div>
  679. </div>
  680. </div>
  681. </div>`
  682. document.body.appendChild(menuChange)
  683.  
  684. // TODO: Replace with element.onload()
  685. setTimeout(() => { // buffer for modal to load
  686. document.getElementById("spikechanger").value = localStorage.i30cps_SPIKE;
  687. document.getElementById("millchanger").value = localStorage.i30cps_MILL;
  688. document.getElementById("boostchanger").value = localStorage.i30cps_BOOST;
  689. document.getElementById("turretchanger").value = localStorage.i30cps_TURRET;
  690. document.getElementById("wallchanger").value = localStorage.i30cps_WALL;
  691. document.getElementById("spawnpadchanger").value = localStorage.i30cps_SPAWNPAD;
  692. document.getElementById("myCheck").checked = localStorage.i30cps_CUSTMAP == '1';
  693. document.getElementById("myCheck2").checked = localStorage.i30cps_ANIMATE == '1';
  694. document.getElementById("myCheck3").checked = localStorage.i30cps_CUSTOMC == '1';
  695. document.getElementById("bigShop").checked = localStorage.i30cps_BIGSHOP == '1';
  696. document.getElementById("customBotClan").checked = localStorage.i30cps_BOTCUST == '1';
  697. document.getElementById("botClanOpen").checked = localStorage.i30cps_BOTOPEN == '1';
  698. setTimeout(() => { // buffer for modal to update
  699. setInterval(() => {
  700. localStorage.i30cps_SPIKE = document.getElementById("spikechanger").value.toLowerCase();
  701. localStorage.i30cps_MILL = document.getElementById("millchanger").value.toLowerCase();
  702. localStorage.i30cps_BOOST = document.getElementById("boostchanger").value.toLowerCase();
  703. localStorage.i30cps_TURRET = document.getElementById("turretchanger").value.toLowerCase();
  704. localStorage.i30cps_WALL = document.getElementById("wallchanger").value.toLowerCase();
  705. localStorage.i30cps_SPAWNPAD = document.getElementById("spawnpadchanger").value.toLowerCase();
  706. }, 500);
  707. }, 1000);
  708. }, 500);
  709.  
  710. var styleItem = document.createElement("style");
  711. styleItem.type = "text/css";
  712. styleItem.appendChild(document.createTextNode(`
  713. .keyPressLow {
  714. margin-left: 8px;
  715. font-size: 16px;
  716. margin-right: 8px;
  717. height: 25px;
  718. width: 50px;
  719. background-color: #fcfcfc;
  720. border-radius: 3.5px;
  721. border: none;
  722. text-align: center;
  723. color: #4A4A4A;
  724. border: 0.5px solid #f2f2f2;
  725. }
  726. .menuPrompt {
  727. font-size: 17px;
  728. font-family: 'Hammersmith One';
  729. color: #4A4A4A;
  730. flex: 0.2;
  731. text-align: center;
  732. margin-top: 10px;
  733. display: inline-block;
  734. }
  735.  
  736. .modal {
  737. display: none;
  738. position: fixed;
  739. z-index: 1;
  740. left: 0;
  741. top: 0;
  742. overflow: auto;
  743. height: 100%;
  744. width: 100%;
  745. }
  746.  
  747. .modal-content {
  748. margin: 10% auto;
  749. width: 40%;
  750. box-shadow: 0 5px 8px 0 rgba(0, 0, 0, 0.2), 0 7px 20px 0 rgba(0, 0, 0, 0.17);
  751. font-size: 14px;
  752. line-height: 1.6;
  753. }
  754.  
  755. .modal-header h2,
  756. .modal-footer h3 {
  757. margin: 0;
  758. }
  759.  
  760. .modal-header {
  761. background: #4287f5;
  762. padding: 15px;
  763. color: #fff;
  764. border-top-left-radius: 5px;
  765. border-top-right-radius: 5px;
  766. }
  767.  
  768. .modal-body {
  769. padding: 10px 20px;
  770. background: #fff;
  771. }
  772.  
  773. .modal-footer {
  774. background: #cf2727;
  775. padding: 10px;
  776. color: #fff;
  777. text-align: center;
  778. border-bottom-left-radius: 5px;
  779. border-bottom-right-radius: 5px;
  780. }
  781.  
  782. .closeBtn {
  783. color: #ccc;
  784. float: right;
  785. font-size: 30px;
  786. color: #fff;
  787. }
  788.  
  789. .closeBtn:hover,
  790. .closeBtn:focus {
  791. color: #000;
  792. text-decoration: none;
  793. cursor: pointer;
  794. }
  795.  
  796. /* Customize the label (the container) */
  797. .container {
  798. display: block;
  799. position: relative;
  800. padding-left: 35px;
  801. margin-bottom: 12px;
  802. cursor: pointer;
  803. font-size: 16px;
  804. -webkit-user-select: none;
  805. -moz-user-select: none;
  806. -ms-user-select: none;
  807. user-select: none;
  808. }
  809.  
  810. /* Hide the browser's default checkbox */
  811. .container input {
  812. position: absolute;
  813. opacity: 0;
  814. cursor: pointer;
  815. height: 0;
  816. width: 0;
  817. }
  818.  
  819. /* Create a custom checkbox */
  820. .checkmark {
  821. position: absolute;
  822. top: 0;
  823. left: 0;
  824. height: 25px;
  825. width: 25px;
  826. background-color: #eee;
  827. }
  828.  
  829. /* On mouse-over, add a grey background color */
  830. .container:hover input ~ .checkmark {
  831. background-color: #ccc;
  832. }
  833.  
  834. /* When the checkbox is checked, add a red background */
  835. .container input:checked ~ .checkmark {
  836. background-color: #cf2727;
  837. }
  838.  
  839. /* Create the checkmark/indicator (hidden when not checked) */
  840. .checkmark:after {
  841. content: "";
  842. position: absolute;
  843. display: none;
  844. }
  845.  
  846. /* Show the checkmark when checked */
  847. .container input:checked ~ .checkmark:after {
  848. display: block;
  849. }
  850.  
  851. /* Style the checkmark/indicator */
  852. .container .checkmark:after {
  853. left: 9px;
  854. top: 5px;
  855. width: 5px;
  856. height: 10px;
  857. border: solid white;
  858. border-width: 0 3px 3px 0;
  859. -webkit-transform: rotate(45deg);
  860. -ms-transform: rotate(45deg);
  861. transform: rotate(45deg);
  862. }
  863.  
  864. `))
  865. document.head.appendChild(styleItem);
  866.  
  867.  
  868. $("#adCard").css({display: "none"});
  869.  
  870.  
  871. window.addEventListener('keydown', function(e) {
  872. if (e.code == localStorage.i30cps_MENU){
  873. if (modal.style.display != "block") {
  874. modal.style.display = "block";
  875. } else {
  876. modal.style.display = "none";
  877. }
  878. }
  879. })
  880.  
  881. // Get modal element
  882. var modal = document.getElementById("simpleModal");
  883. // Get close button
  884. var closeBtn = document.getElementsByClassName('closeBtn')[0];
  885.  
  886. // Events
  887. closeBtn.addEventListener('click', closeModal);
  888. window.addEventListener('click', outsideClick);
  889.  
  890. // Close
  891. function closeModal() {
  892. modal.style.display = 'none';
  893. }
  894.  
  895. // Close If Outside Click
  896. function outsideClick(e) {
  897. if (e.target == modal) {
  898. modal.style.display = 'none';
  899. }
  900. }
  901.  
  902. // Menu Key Changer
  903. document.querySelector("#menuchanger").onclick = (e) => {updateMenuKey = true;}
  904.  
  905. document.querySelector("#myCheck").addEventListener('change', function() {
  906. if (this.checked) {
  907. localStorage.i30cps_CUSTMAP = '1';
  908. $("#mapDisplay").css({background: `url('https://i.imgur.com/fgFsQJp.png')`});
  909. } else {
  910. localStorage.i30cps_CUSTMAP = '0';
  911. $("#mapDisplay").css({background: `rgba(0, 0, 0, 0.25)`})
  912. }
  913. });
  914.  
  915. document.querySelector("#myCheck2").addEventListener('change', function() {
  916. if (this.checked) {
  917. localStorage.i30cps_ANIMATE = '1';
  918. } else {
  919. localStorage.i30cps_ANIMATE = '0';
  920. }
  921. });
  922.  
  923. document.querySelector("#myCheck3").addEventListener('change', function() {
  924. if (this.checked) {
  925. localStorage.i30cps_CUSTOMC = '1';
  926. $("#gameCanvas").css('cursor', 'url(http://cur.cursors-4u.net/user/use-1/use153.cur), default');
  927. } else {
  928. localStorage.i30cps_CUSTOMC = '0';
  929. document.getElementById("gameCanvas").style.cursor = 'default';
  930. }
  931. });
  932.  
  933. document.querySelector("#bigShop").addEventListener('change', function() {
  934. if (this.checked) {
  935. localStorage.i30cps_BIGSHOP = '1';
  936. document.getElementById('storeHolder').style = 'height: 1500px; width: 450px';
  937. } else {
  938. localStorage.i30cps_BIGSHOP = '0';
  939. document.getElementById('storeHolder').style = '';
  940. }
  941. });
  942.  
  943. document.querySelector('#customBotClan').addEventListener('change', function() {
  944. if (this.checked) {
  945. localStorage.i30cps_BOTCUST = '1';
  946. } else {
  947. localStorage.i30cps_BOTCUST = '0';
  948. }
  949. });
  950.  
  951. document.querySelector('#botClanOpen').addEventListener('change', function() {
  952. if (this.checked) localStorage.i30cps_BOTOPEN = true;
  953. else localStorage.i30cps_BOTOPEN = false;
  954. });
  955.  
  956. function animate(space, animateyn) {
  957. let result = '';
  958. if (space) {
  959. result = document.getElementById("ach1").value;
  960. } else {
  961. result = "i30cps"
  962. }
  963. if (animateyn) {
  964. let place = Math.floor(Math.random()*result.length);
  965. result = result.substring(0, place) + "_" + result.substring(place+1, result.length);
  966. }
  967. return result;
  968. }
  969.  
  970. unsafeWindow.admob = {
  971. requestInterstitialAd: ()=>{},
  972. showInterstitialAd: ()=>{}
  973. }
  974.  
  975. var cps = 0;
  976. var CpsMenu = document.createElement("div");
  977. CpsMenu.style.padding = "5px";
  978. CpsMenu.id = "CpsDiv";
  979. CpsMenu.style.font = "40px Arial";
  980. CpsMenu.style.display = "block";
  981. CpsMenu.style.position = "fixed";
  982. CpsMenu.style.top = "3%";
  983. CpsMenu.style.left = "0%";
  984. CpsMenu.textContent = "Cps: ";
  985. document.body.appendChild(CpsMenu);
  986. setInterval(()=>{
  987. CpsMenu.textContent = "Cps: "+cps;
  988. }, 5);
  989.  
  990.  
  991. document.donotrespondtothis = ['33', 'h', '5', '7', 'a', 'ch', 'mm'];
  992.  
  993. document.dnpush = (e) => {
  994. document.donotrespondtothis.push(e);
  995. }
  996.  
  997. var tabs = [];
  998. var myID;
  999. document.botDebug = false;
  1000. var botClan;
  1001. var usedBot = false;
  1002.  
  1003. const captcha = '6LevKusUAAAAAAFknhlV8sPtXAk5Z5dGP5T2FYIZ';
  1004. const generateToken = () => unsafeWindow.grecaptcha.execute(captcha, { action : 'homepage' });
  1005. let botcount = (window.location.hostname == "sandbox.moomoo.io") ? 1 : 2;
  1006. const wait = async ms => new Promise(done => setTimeout(done, ms));
  1007. const connectBot = captcha => {
  1008. let advertpos = 0;
  1009. let nearestenemy;
  1010. let enemyIsNear;
  1011. let enemiesnear = [];
  1012. let thingToSay = '';
  1013. let token = encodeURIComponent(captcha);
  1014. let advertBot = new WebSocket(document.ws.url.split("&")[0] + "&token=" + token);
  1015. advertBot.binaryType = 'arraybuffer';
  1016. advertBot.message = (data) => {
  1017. advertBot.oldSend(msgpack.encode(data));
  1018. };
  1019. if (!usedBot) {
  1020. advertBot.isFirstBot = true;
  1021. usedBot = true;
  1022. } else {
  1023. advertBot.isFirstBot = false;
  1024. }
  1025.  
  1026. let randAngle=0;
  1027. let nearAngle = 0;
  1028. advertBot.onopen = async () => {
  1029. await wait(100);
  1030. advertBot.message(['sp', [{name: 'i30cps bot', moofoll: '1', skin: Math.floor(Math.random()*4)}]]);
  1031. setInterval(() => {
  1032. if (sayDiff) {
  1033. advertBot.message(['ch', [thingToSay]])
  1034. }
  1035. advertpos += 3;
  1036. if (advertpos > advAc2.length - 30) {
  1037. advertpos = 0;
  1038. }
  1039. advertBot.message(['ch', [advAc2.substring(advertpos, advertpos + 30)]]);
  1040. }, 500)
  1041. setInterval(()=>{
  1042. advertBot.message([2, [90**100]])
  1043. if (!enemyIsNear) {
  1044. advertBot.message(['33', [nearAngle]])
  1045. } else {
  1046. advertBot.message(['33', []])
  1047. }
  1048. }, 100);
  1049. setInterval(() => {
  1050. enemyIsNear = false;
  1051. }, 15000)
  1052. setInterval(() => {
  1053. randAngle = Math.random() * 6.283185307179586;
  1054. advertBot.message([5, [10, null]]);
  1055. advertBot.message(['c', [1, 0]]);
  1056. advertBot.message(['c', [0, 0]]);
  1057. if (document.botDebug) console.log(advertBot.clan + ' :: ' + advertBot.x + ', ' + advertBot.y);
  1058. setTimeout(() => {
  1059. advertBot.message([5, [11, null]]);
  1060. advertBot.message(['c', [1, 0]]);
  1061. advertBot.message(['c', [0, 0]]);
  1062. setTimeout(() => {
  1063. advertBot.message([5, [12, null]]);
  1064. advertBot.message(['c', [1, 0]]);
  1065. advertBot.message(['c', [0, 0]]);
  1066. setTimeout(() => {
  1067. advertBot.message(['c', [1, 0]]);
  1068. advertBot.message(['c', [0, 0]]);
  1069. }, 100);
  1070. }, 100);
  1071. }, 100);
  1072. }, 5000);
  1073. };
  1074. let sayDiff = false;
  1075. let nearbyPlayers = [];
  1076. let nearbyEnemies = [];
  1077. advertBot.chat = (message, duration) => {
  1078. thingToSay = message;
  1079. sayDiff = true;
  1080. setTimeout(() => {
  1081. sayDiff = false;
  1082. }, duration)
  1083. }
  1084. advertBot.reClan = () => {
  1085. if (advertBot.clan == null) {
  1086. setTimeout(() => {
  1087. if(advertBot.clan == null) {
  1088. doNewSend(['8', [decorate(String.fromCharCode(Math.floor(Math.random()*26)+65)+String.fromCharCode(Math.floor(Math.random()*26)+65)+String.fromCharCode(Math.floor(Math.random()*26)+65)+String.fromCharCode(Math.floor(Math.random()*26)+65)+String.fromCharCode(Math.floor(Math.random()*26)+65)+String.fromCharCode(Math.floor(Math.random()*26)+65)+String.fromCharCode(Math.floor(Math.random()*26)+65))]])
  1089. setTimeout(() => {
  1090. if (advertBot.clan == null) advertBot.reClan()
  1091. else {advertBot.message(['9', [null]])}
  1092. }, 500);
  1093. }
  1094. }, 5000);
  1095. }
  1096. }
  1097. advertBot.clanUpdate = (joinSelfClan) => {
  1098. if (joinSelfClan && myPlayer.clan && botClan && (myPlayer.clan!=botClan)) {
  1099. advertBot.message(['9', [null]])
  1100. botClan = false;
  1101. }
  1102. if (advertBot.clan == null) {
  1103. if (myPlayer.clan && joinSelfClan) {
  1104. advertBot.message(['10', [myPlayer.clan]]);
  1105. botClan = false;
  1106. } else if (advertBot.isFirstBot) {
  1107. botClan = decorate('i30cps');
  1108. advertBot.message(['8', [botClan]]);
  1109. } else {
  1110. advertBot.message(['10', [botClan]]);
  1111. }
  1112. } else if (!botClan) {
  1113. botClan = advertBot.clan;
  1114. }
  1115. }
  1116. advertBot.onmessage = message => {
  1117. let temp = msgpack.decode(new Uint8Array(message.data));
  1118. let data;
  1119. if(temp.length > 1) {
  1120. data = [temp[0], ...temp[1]];
  1121. } else {
  1122. data = temp;
  1123. }
  1124. let item = data[0];
  1125. if(!data) {return};
  1126. //if(!document.donotrespondtothis.includes(item)){console.log(data)}
  1127. if (item == 'an') {
  1128. if (tabs.includes(data[1]) || (localStorage.i30cps_BOTOPEN == '1')) {
  1129. advertBot.message(['11', [data[1], 1]])
  1130. } else {
  1131. advertBot.message(['11', [data[1], 0]])
  1132. }
  1133. }
  1134. if (item == "h") {
  1135. advertBot.message(['c', [1, 0]])
  1136. advertBot.message(['c', [0, 0]])
  1137. setTimeout(()=>{
  1138. advertBot.message(["5", [0, null]]);
  1139. advertBot.message(["c", [1, 0]]);
  1140. advertBot.message(["c", [0, 0]]);
  1141. advertBot.message(["5", [0, null]]);
  1142. advertBot.message(["c", [1, 0]]);
  1143. advertBot.message(["c", [0, 0]]);
  1144. }, 100);
  1145. } else if (item == '11') {
  1146. advertBot.message(['sp', [{ name: 'i30cps bot', moofoll: '1', skin: Math.floor(Math.random() * 8)}]]);
  1147. } else if (item === '1') {
  1148. enemyIsNear = false;
  1149. advertBot.id = data[1];
  1150. if (!tabs.includes(advertBot.id)) {
  1151. tabs.push(advertBot.id);
  1152. }
  1153. advertBot.clanUpdate(localStorage.i30cps_BOTCUST == '1');
  1154. } else if (item === '33') {
  1155. nearbyEnemies = [];
  1156. for(let i = 0; i < data[1].length / 13; i++) {
  1157. let playerInfo = data[1].slice(13*i, 13*i+13);
  1158. if(playerInfo[0] == advertBot.id) {
  1159. advertBot.id = playerInfo[0];
  1160. advertBot.x = playerInfo[1];
  1161. advertBot.y = playerInfo[2];
  1162. advertBot.dir = playerInfo[3];
  1163. advertBot.object = playerInfo[4];
  1164. advertBot.weapon = playerInfo[5];
  1165. advertBot.clan = playerInfo[7];
  1166. advertBot.isLeader = playerInfo[8];
  1167. advertBot.hat = playerInfo[9];
  1168. advertBot.accessory = playerInfo[10];
  1169. advertBot.isSkull = playerInfo[11];
  1170. } else {
  1171. nearbyPlayers.push(data[1].slice(13*i, 13*i+13))
  1172. if((playerInfo[7] != advertBot.clan || playerInfo[7] === null) && !(tabs.includes(playerInfo[0]))) {
  1173. nearbyEnemies.push(playerInfo);
  1174. }
  1175. };
  1176. };
  1177. advertBot.clanUpdate('1' == localStorage.i30cps_BOTCUST);
  1178. } else if (item == 'ch') {
  1179. let isOwner = data[1] == myID;
  1180. if ((!(data[1] == advertBot.id)) && (data[2].includes(document.querySelector("#nameInput").value))) {console.log(data[2]);}
  1181. if (isOwner) {
  1182. if (data[2].substring(0, 2) == 'i:') {
  1183. let datas = data[2].substring(0, 2).split(' ');
  1184. advertBot.message([datas[0]==undefined?null:datas[0], [datas[1]==undefined?null:datas[1], datas[2]==undefined?null:datas[2]]])
  1185. }// no eval because dangerous. i am stupid for including that earlier
  1186. }
  1187. if (data[2].substring(0, 2) == 'i.') { // commands
  1188. if (isOwner) { // admin commands
  1189. if ((data[2] == 'i.dc') || (data[2] == 'i.disconnect')) for (let i = 0; i < 20; i++) advertBot.message(['sp', {name: "i30cps bot", skin: 1, moofoll: 1}]); // moomoo kicks after this
  1190. else if (data[2].substring(0, 4).toLowerCase() == 'i.ch') {
  1191. thingToSay = data[2].substring(5, 30);
  1192. sayDiff = true;
  1193. }
  1194. }
  1195. }
  1196. if (data[2].includes('owner')) {
  1197. advertBot.chat("[" + myPlayer.clan + "] " + document.querySelector("#nameInput").value + " {" + myPlayer.id + "}", 1000);
  1198. }
  1199. }
  1200.  
  1201. if(nearbyEnemies) {
  1202. nearestenemy = nearbyEnemies.sort((a,b) => dist(a, advertBot) - dist(b, advertBot))[0];
  1203. }
  1204.  
  1205. if(nearestenemy) {
  1206. nearAngle = Math.atan2(nearestenemy[2]-advertBot.y, nearestenemy[1]-advertBot.x);
  1207. let nearDist = Math.sqrt(Math.pow((advertBot.y-nearestenemy[2]), 2) + Math.pow((advertBot.x-nearestenemy[1]), 2));
  1208. if(nearDist < 250) {
  1209. enemyIsNear = false;
  1210. nearAngle += 3.141592653;
  1211. } else if (nearDist < 400) {
  1212. enemyIsNear = true;
  1213. } else {
  1214. enemyIsNear = false;
  1215. }
  1216. } else {nearAngle = randAngle}
  1217. };
  1218. };
  1219.  
  1220. function bot(notifi=true) {
  1221. Promise.all([generateToken()]).then(t => {
  1222. console.log('generated ', t);
  1223. if (notifi) alert('generated an i30cps bot that uses your advAc2, to change it press L and type the text surrounded in double quotes: "advAc2 = \'<your message here> (but if you\'re using this message or using quotes here you\'re dumb)\';"');
  1224. connectBot(t[0]);
  1225. });
  1226. }
  1227.  
  1228.  
  1229. var soundboard = document.createElement("div");
  1230. soundboard.className = "menuCard";
  1231. soundboard.id = "soundboard";
  1232. soundboard.innerHTML = `
  1233. <div id="simpleSoundboard" class="modal">
  1234. <div class="modal-content">
  1235. <div class="modal-header">
  1236. <span class="closeBtn">&times;</span>
  1237. <h2 style="font-size: 17px;">Soundboard for i30Mod (fake hacks)</h2>
  1238. </div>
  1239. <div class="modal-body" style="font-size: 17px;">
  1240. <div class="modal-content" style="font-size:14px">
  1241. </div>
  1242. <div class="flexControl">
  1243. <h3 style="font-size: 17px;"> Main Settings </h3>
  1244. <label class="container">Mod name
  1245. </label>
  1246. <input type="text" id="sb-mod_name" value="BeanMod">
  1247. <label class="container">Hack 1
  1248. <button id=sb-md-btn-1 style="height: 20px; width: 70px;">Say it!</button>
  1249. </label>
  1250. <input type="text" id="sb-mod_1" value="Auto Macro">
  1251. <label class="container">Hack 2
  1252. <button id=sb-md-btn-2 style="height: 20px; width: 70px;">Say it!</button>
  1253. </label>
  1254. <input type="text" id="sb-mod_2" value="Dash">
  1255. <label class="container">Hack 3
  1256. <button id=sb-md-btn-3 style="height: 20px; width: 70px;">Say it!</button>
  1257. </label>
  1258. <input type="text" id="sb-mod_3" value="AutoPlay-Bot">
  1259. <label class="container">Hack 4
  1260. <button id=sb-md-btn-4 style="height: 20px; width: 70px;">Say it!</button>
  1261. </label>
  1262. <input type="text" id="sb-mod_4" value="Pathfinder">
  1263. <label class="container">Hack 5
  1264. <button id=sb-md-btn-5 style="height: 20px; width: 70px;">Say it!</button>
  1265. </label>
  1266. <input type="text" id="sb-mod_5" value="AntiBoost">
  1267. <br><br>
  1268. <label for="sb-rngchanger" class="container">RandomToggle Key:</label><input type="text" id="sb-rngchanger" value="J">
  1269. <br><br>
  1270. <label class="container">Message 1
  1271. <button id=sb-msg-btn-1 style="height: 20px; width: 70px;">Say it!</button>
  1272. </label>
  1273. <input type="text" id="sb-msg_1" value="!get-ip $\{nearestEnemy}">
  1274. <label class="container">Message 2
  1275. <button id=sb-msg-btn-2 style="height: 20px; width: 70px;">Say it!</button>
  1276. </label>
  1277. <input type="text" id="sb-msg_2" value="!set-target $\{nearestEnemy}">
  1278. <label class="container">Message 3
  1279. <button id=sb-msg-btn-3 style="height: 20px; width: 70px;">Say it!</button>
  1280. </label>
  1281. <input type="text" id="sb-msg_3" value="!normalize $\{BeanMod.lag()}">
  1282. <label class="container">Message 4
  1283. <button id=sb-msg-btn-4 style="height: 20px; width: 70px;">Say it!</button>
  1284. </label>
  1285. <input type="text" id="sb-msg_4" value="[ERROR] Cannot predict noobs!">
  1286. <label class="container">Message 5
  1287. <button id=sb-msg-btn-5 style="height: 20px; width: 70px;">Say it!</button>
  1288. </label>
  1289. <input type="text" id="sb-msg_5" value="[WARN] QHeal Too Fast! (t:31)">
  1290.  
  1291. </div>
  1292. </div>
  1293. </div>
  1294. </div>`
  1295.  
  1296. document.body.appendChild(soundboard);
  1297.  
  1298. var sb = document.getElementById("simpleSoundboard");
  1299. window.addEventListener('click', (e) => {
  1300. if ((e.target == sb) || (e.target.className == 'closeBtn')) {
  1301. sb.style.display = 'none';
  1302. }
  1303. });
  1304. for (let i = 1; i <= 5; i++) {
  1305. document.getElementById('sb-md-btn-' + i).addEventListener('click', (e) => {
  1306. toggledMods[i] = !toggledMods[i];
  1307. doNewSend(['ch', [document.getElementById("sb-mod_name").value + " | " + document.getElementById("sb-mod_" + i).value + (toggledMods[i] ? ": ON" : ": OFF")]]);
  1308. });
  1309. document.getElementById('sb-msg-btn-' + i).addEventListener('click', (e) => {
  1310. doNewSend(['ch', [document.getElementById('sb-msg_' + i).value]]);
  1311. });
  1312. }

QingJ © 2025

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