4 bots damian

For more info about 4x multibox go my channel https://youtube.com/CyRuler

  1. // ==UserScript==
  2. // @name 4 bots damian
  3. // @namespace -
  4. // @version 1.5
  5. // @description For more info about 4x multibox go my channel https://youtube.com/CyRuler
  6. // @author Discord : CyRuler#3691
  7. // @match *://moomoo.io/*
  8. // @match *://dev.moomoo.io/*
  9. // @match *://sandbox.moomoo.io/*
  10. // @icon https://cdn.discordapp.com/attachments/759868693840003072/762661498178109450/lightcg.jpg
  11. // @require https://greasyfork.org/scripts/368273-msgpack/code/msgpack.js?version=598723
  12. // ==/UserScript==
  13.  
  14. let healToggle = true;
  15. let hatToggle = true;
  16. let empToggle = false;
  17.  
  18. let ws;
  19. let cvs;
  20. let width;
  21. let height;
  22. let mouseX;
  23. let mouseY;
  24. let dir;
  25.  
  26. let primary;
  27. let secondary;
  28. let foodType;
  29. let wallType;
  30. let spikeType;
  31. let millType;
  32. let mineType;
  33. let boostType;
  34. let turretType;
  35. let spawnpadType;
  36.  
  37. let healer;
  38. let spiker;
  39. let trapper;
  40. let miller;
  41. let crashing;
  42. let playerFollowerGlobal;
  43. let ffs;
  44. let ffsps;
  45. sockets = {};
  46. let closed;
  47. let myPlayer = {};
  48. let pointer = true;
  49. let pointingOnPosition = {};
  50. let enemiesNear;
  51. let players = {};
  52. let isEnemyNear;
  53. let nearestEnemy;
  54. let nearestEnemyAngle;
  55. let autoaim = false;
  56. let autoAttackWithAim3 = false;
  57. let autoInsta;
  58. let JustDied;
  59. let normalHat;
  60. let normalAcc;
  61. let oldHat;
  62. let oldAcc;
  63.  
  64. let msgpack5 = msgpack;
  65. document.msgpack = msgpack;
  66.  
  67. let autoAttack;
  68. let freeze;
  69. function dist(a, b){
  70. return Math.sqrt( Math.pow((b.y-a[2]), 2) + Math.pow((b.x-a[1]), 2) );
  71. }
  72. function acc(id) {
  73. doNewSend(["13c", [1, id, 1]]);
  74. doNewSend(["13c", [0, 0, 1]]);
  75. doNewSend(["13c", [0, id, 1]]);
  76. }
  77.  
  78. function hat(id) {
  79. doNewSend(["13c", [1, id, 0]]);
  80. doNewSend(["13c", [0, id, 0]]);
  81. }
  82. let handleMessage = function(e) {
  83. let temp = msgpack5.decode(new Uint8Array(e.data));
  84. let data = null;
  85. if(temp.length > 1) {
  86. data = [temp[0], ...temp[1]];
  87. if (data[1] instanceof Array){
  88. data = data;
  89. }
  90. } else {
  91. data = temp;
  92. }
  93. let item = data[0];
  94. if(!data) {return};
  95. if (item == "io-init") {
  96. cvs = document.getElementById("gameCanvas");
  97. setTimeout(() => { if (document.getElementById("mainMenu")) { document.getElementById("mainMenu").remove(); } }, 5000);
  98. width = cvs.clientWidth;
  99. height = cvs.clientHeight;
  100. $(window).resize(function() {
  101. width = cvs.clientWidth;
  102. height = cvs.clientHeight;
  103. });
  104. let place = (e, t = dir) => {
  105. doNewSend(['5', [e, null]]);
  106. doNewSend(['c', [1, t]]);
  107. doNewSend(['c', [0, t]]);
  108. doNewSend(['5', [null]]);
  109. }
  110. let placeForAll = (e, t = dir) => {
  111. sendForAll(['5', [e, null]]);
  112. sendForAll(['c', [1, t]]);
  113. sendForAll(['c', [0, t]]);
  114. sendForAll(['5', [null]]);
  115. }
  116. cvs.addEventListener('mousemove', e => {
  117. mouseX = e.clientX;
  118. mouseY = e.clientY;
  119. dir = Math.atan2(event.clientY - height / 2, event.clientX - width / 2);
  120. if (!autoaim) {
  121. sendForAll(['2', [dir]]);
  122. }
  123. })
  124. document.key22 = 1;
  125. document.addEventListener('keydown', e => {
  126. if (document.key22 !== e.keyCode) {
  127. document.key22 = e.keyCode;
  128. if (document.activeElement.tagName.toLowerCase() !== "input" && document.activeElement.tagName.toLowerCase() !== "textarea" && !document.getElementById('chatHolder').offsetParent) {
  129. if (e.keyCode == 81) {
  130. healer = true;
  131. }
  132. if (e.keyCode == 86) {
  133. spiker = true;
  134. }
  135. if (e.keyCode == 70) {
  136. trapper = true;
  137. }
  138. if (e.keyCode == 54) {
  139. miller = true;
  140. }
  141. if (e.keyCode == 0) {
  142. healToggle = !healToggle;
  143. }
  144. if (e.keyCode == 39) {
  145. hatToggle = !hatToggle;
  146. }
  147. if (e.keyCode == 40) {
  148. empToggle = !empToggle;
  149. }
  150. if (e.keyCode == 80) {
  151. pointer = !pointer;
  152. }
  153. if (e.keyCode == 84) {
  154. autoaim = true;
  155. doNewSend(["13c", [1, 6, 0]]);
  156. doNewSend(["13c", [1, 7, 0]]);
  157. doNewSend(["13c", [1, 53, 0]]);
  158. autoAttackWithAim3 = true;
  159. doNewSend(['c', [1]])
  160. doNewSend(["6", [5]]);
  161. doNewSend(["6", [17]]);
  162. doNewSend(["6", [31]]);
  163. doNewSend(["6", [23]]);
  164. doNewSend(["6", [9]]);
  165. doNewSend(["6", [18]]);
  166. doNewSend(['5', [9, true]]);
  167. doNewSend(["13c", [0, 53, 0]]);
  168. setTimeout(() => {
  169. doNewSend(['6', [12]]);
  170. }, 130);
  171. setTimeout(() => {
  172. doNewSend(['6', [15]])
  173. doNewSend(['5', [secondary, true]]);
  174. setTimeout(() => {
  175. sendForAll(['5', [primary, true]])
  176. if (!empToggle) {
  177. doNewSend(["13c", [1, 6, 0]]);
  178. doNewSend(["13c", [0, 6, 0]]);
  179. }
  180. if (empToggle) {
  181. doNewSend(["13c", [1, 22, 0]]);
  182. doNewSend(["13c", [0, 22, 0]]);
  183. }
  184. autoaim = false;
  185. autoAttackWithAim3 = false;
  186. doNewSend(['c', [0]])
  187. doNewSend(["2", [dir]]);
  188. }, 270);
  189. }, 210);
  190. }
  191. if (e.keyCode == 0) {
  192. for (let i=0;i<180;i++) {
  193. let angle = toRad(i*2);
  194. place(boostType, angle);
  195. }
  196. }
  197. if (e.keyCode == 0) {
  198. for (let i=0;i<4;i++) {
  199. let angle = toRad(i * 90);
  200. place(spikeType, angle);
  201. }
  202. }
  203. if (e.keyCode == 77) {
  204. if (myPlayer.y < 2400) {
  205. doNewSend(["13c", [1, 15, 0]]);
  206. doNewSend(["13c", [0, 15, 0]]);
  207. } else if (myPlayer.y > 6850 && myPlayer.y < 7550) {
  208. doNewSend(["13c", [1, 31, 0]]);
  209. doNewSend(["13c", [0, 31, 0]]);
  210. } else {
  211. doNewSend(["13c", [1, 12, 0]]);
  212. doNewSend(["13c", [0, 12, 0]]);
  213. }
  214. doNewSend(["13c", [1, 0, 1]]);
  215. doNewSend(["13c", [0, 0, 1]]);
  216. }
  217. if (e.keyCode == 37) {
  218. sendForAll(["6", [8]]);
  219. sendForAll(["6", [3]]);
  220. sendForAll(["6", [5]]);
  221. }
  222. if(e.keyCode == 39) {
  223. sendForAll(["6", [8]]);
  224. sendForAll(["6", [4]]);
  225. sendForAll(["6", [5]]);
  226. sendForAll(["6", [10]]);
  227. sendForAll(["6", [28]]);
  228. sendForAll(["6", [10]]);
  229. }
  230. if(e.keyCode == 16) {
  231. sendForAll(["13c", [0, 0, 0]]);
  232. sendForAll(["13c", [0, 0, 1]]);
  233. }
  234. if (e.keyCode == 38) {
  235. sendForAll(["6", [5]]);
  236. sendForAll(["6", [17]]);
  237. sendForAll(["6", [31]]);
  238. sendForAll(["6", [23]]);
  239. sendForAll(["6", [13]]);
  240. sendForAll(["6", [18]]);
  241. sendForAll(["6", [28]]);
  242. }
  243. if (e.keyCode == 120) {
  244. sendForAll(["6", [4]]);
  245. sendForAll(["6", [15]]);
  246. }
  247. if (e.keyCode == 90) {
  248. sendForAll(["13c", [0, 0, 1]]);
  249. sendForAll(["13c", [1, 40, 0]]);
  250. sendForAll(["13c", [0, 40, 0]]);
  251. }
  252. if (e.keyCode == 32) {
  253. if (!empToggle) {
  254. sendForAll(["13c", [0, 0, 1]]);
  255. sendForAll(["13c", [1, 6, 0]]);
  256. sendForAll(["13c", [0, 6, 0]]);
  257. }
  258. if (empToggle) {
  259. sendForAll(["13c", [1, 22, 0]]);
  260. sendForAll(["13c", [0, 22, 0]]);
  261. }
  262. }
  263. if (e.keyCode == 66) {
  264. sendForAll(["13c", [0, 0, 1]]);
  265. sendForAll(["13c", [1, 7, 0]]);
  266. sendForAll(["13c", [0, 7, 0]]);
  267. }
  268. if (e.keyCode == 45) {
  269. doNewSend(["13c", [1, 6, 0]]);
  270. doNewSend(["13c", [1, 7, 0]]);
  271. doNewSend(["13c", [1, 53, 0]]);
  272. autoInsta = true;
  273. }
  274. if (e.keyCode == 46) {
  275. autoInsta = false;
  276. }
  277. if (e.keyCode == 85) {
  278. sendForAll(["13c", [1, 20, 0]]);
  279. sendForAll(["13c", [0, 20, 0]]);
  280. }
  281. if (e.keyCode == 114) {
  282. sendForAll(["6", [28]]);
  283. }
  284. if (e.keyCode == 115) {
  285. sendForAll(["6", [4]]);
  286. sendForAll(["6", [25]]);
  287. }
  288. }
  289. }
  290. })
  291. document.addEventListener('keyup', e => {
  292. document.key22 = null;
  293. if (e.keyCode == 81) {
  294. healer = false;
  295. }
  296. if (e.keyCode == 86) {
  297. spiker = false;
  298. }
  299. if (e.keyCode == 70) {
  300. trapper = false;
  301. }
  302. if (e.keyCode == 54) {
  303. miller = false;
  304. }
  305. })
  306. setInterval(() => {
  307. if (autoaim) {
  308. doNewSend(['2', [nearestEnemyAngle]]);
  309. }
  310. if (autoAttackWithAim3) {
  311. doNewSend(['c', [1]]);
  312. }
  313. if (crashing && !closed) {
  314. for (let e = 0; e < 1000; e++) {
  315. let result = new Uint8Array(Math.round(Math.random() * 18));for (let i = 0; i < result.length; i++) {if (i == 0) {result[i] = Math.round(Math.random() * 256);} else {if (i == 1) {result[i] = Math.round(Math.random() * 256);} else {if (i == 2) {result[i] = Math.round(Math.random() * 128);} else {if (i == 3) {result[i] = Math.round(Math.random() * 85);} else {if (i == 4) {result[i] = Math.round(Math.random() * 64);} else {if (i == 5) {result[i] = Math.round(Math.random() * 51);} else {if (i == 6) {result[i] = Math.round(Math.random() * 42);} else {if (i == 7) {result[i] = Math.round(Math.random() * 36);} else {if (i == 8) {result[i] = Math.round(Math.random() * 32);} else {if (i == 9) {result[i] = Math.round(Math.random() * 28);} else {if (i == 10) {result[i] = Math.round(Math.random() * 25);} else {if (i == 11) {result[i] = Math.round(Math.random() * 23);} else {if (i == 12) {result[i] = Math.round(Math.random() * 21);} else {if (i == 13) {result[i] = Math.round(Math.random() * 19);} else {if (i == 14) {result[i] = Math.round(Math.random() * 18);} else {if (i == 15) {result[i] = Math.round(Math.random() * 17);} else {if (i == 16) {result[i] = Math.round(Math.random() * 16);} else {if (i == 17) {result[i] = Math.round(Math.random() * 15);}}}}}}}}}}}}}}}}}}}ws.oldSend(result);
  316. }
  317. }
  318. if (healer) {
  319. place(foodType, null);
  320. }
  321. if (spiker) {
  322. place(spikeType, null);
  323. }
  324. if (trapper) {
  325. place(boostType, null);
  326. }
  327. if (miller) {
  328. place(millType, null);
  329. }
  330. })
  331. primary = 0;
  332. foodType = 0;
  333. wallType = 3;
  334. spikeType = 6;
  335. millType = 10;
  336. myPlayer.weapon = 0;
  337. doNewSend(['sp', [{name: localStorage.moo_name, moofoll: "1", skin: 1}]]);
  338. setTimeout(() => {
  339. document.gr = grecaptcha;
  340. let kk;
  341. let host = "127.0.0.1" !== location.hostname && !location.hostname.startsWith("192.168.");
  342. for (let i2 = 0; i2 < 4; i2++) {
  343. true && (kk = !0, host ? document.gr.execute("6LevKusUAAAAAAFknhlV8sPtXAk5Z5dGP5T2FYIZ", { action: "homepage" }).then((function(e) {
  344. wsType(`${document.ws.url.split("&")[0]}&token=${encodeURIComponent(e)}`);
  345. })) : null);
  346. }
  347. }, 100);
  348. }
  349. if (item == "1" && !myPlayer.id) {
  350. myPlayer.id = data[1];
  351. }
  352. if (item == "11") {
  353. primary = 0;
  354. foodType = 0;
  355. wallType = 3;
  356. spikeType = 6;
  357. millType = 10;
  358. if (!autoAttack && !freeze) {
  359. doNewSend(['sp', [{name: localStorage.moo_name, moofoll: "1", skin: 1}]]);
  360. } else {
  361. JustDied = true;
  362. }
  363. }
  364. if (JustDied) {
  365. if (!autoAttack && !freeze) {
  366. JustDied = false;
  367. doNewSend(['sp', [{name: localStorage.moo_name, moofoll: "1", skin: 1}]]);
  368. }
  369. }
  370. if (item == "33") {
  371. enemiesNear = [];
  372. players = {};
  373. for(let i = 0; i < data[1].length / 13; i++) {
  374. let playerInfo = data[1].slice(13*i, 13*i+13);
  375. if(playerInfo[0] == myPlayer.id) {
  376. myPlayer.x = playerInfo[1];
  377. myPlayer.y = playerInfo[2];
  378. myPlayer.dir = playerInfo[3];
  379. myPlayer.object = playerInfo[4];
  380. myPlayer.clan = playerInfo[7];
  381. myPlayer.isLeader = playerInfo[8];
  382. myPlayer.hat = playerInfo[9];
  383. myPlayer.accessory = playerInfo[10];
  384. myPlayer.isSkull = playerInfo[11];
  385. } else if(playerInfo[7] !== myPlayer.clan || playerInfo[7] === null) {
  386. enemiesNear.push(playerInfo);
  387. }
  388. players[playerInfo[0]] = {
  389. id: playerInfo[0],
  390. x: playerInfo[1],
  391. y: playerInfo[2],
  392. dir: playerInfo[3],
  393. object: playerInfo[4],
  394. weapon: playerInfo[5],
  395. clan: playerInfo[7],
  396. isLeader: playerInfo[8],
  397. hat: playerInfo[9],
  398. accessory: playerInfo[10],
  399. isSkull: playerInfo[11]
  400. };
  401. }
  402. }
  403. isEnemyNear = false;
  404. if(enemiesNear) {
  405. nearestEnemy = enemiesNear.sort((a,b) => dist(a, myPlayer) - dist(b, myPlayer))[0];
  406. }
  407. if(nearestEnemy) {
  408. nearestEnemyAngle = Math.atan2(nearestEnemy[2]-myPlayer.y, nearestEnemy[1]-myPlayer.x);
  409. if(Math.sqrt(Math.pow((myPlayer.y-nearestEnemy[2]), 2) + Math.pow((myPlayer.x-nearestEnemy[1]), 2)) < 500) {
  410. isEnemyNear = true;
  411. if(autoaim == false && myPlayer.hat != 7 && myPlayer.hat != 53) {
  412. normalHat = 6;
  413. if(primary != 8) {
  414. normalAcc = 19;
  415. }
  416. };
  417. }
  418. }
  419. if(isEnemyNear == false && autoaim == false) {
  420. normalAcc = 0;
  421. if (myPlayer.y < 2400){
  422. normalHat = 15;
  423. } else if (myPlayer.y > 6850 && myPlayer.y < 7550){
  424. normalHat = 31;
  425. } else {
  426. normalHat = 12;
  427. }
  428. }
  429. if(hatToggle) {
  430. if(oldHat != normalHat) {
  431. hat(normalHat);
  432. }
  433. if(oldAcc != normalAcc) {
  434. acc(normalAcc);
  435. }
  436. oldHat = normalHat;
  437. oldAcc = normalAcc
  438. }
  439. if (nearestEnemy && autoInsta) {
  440. if (Math.sqrt(Math.pow((myPlayer.y-nearestEnemy[2]), 2) + Math.pow((myPlayer.x-nearestEnemy[1]), 2)) < 215) {
  441. autoInsta = false;
  442. autoaim = true;
  443. doNewSend(['33', [nearestEnemyAngle]]);
  444. setTimeout(() => {
  445. doNewSend(['33', []]);
  446. doNewSend(['13c', [0, 11, 1]]);
  447. }, 300)
  448. doNewSend(['7', [1]]);
  449. if (myPlayer.weapon == 0) {
  450. doNewSend(["6", [5]]);
  451. doNewSend(["6", [17]]);
  452. doNewSend(["6", [31]]);
  453. doNewSend(["6", [23]]);
  454. doNewSend(["6", [10]]);
  455. doNewSend(["6", [18]]);
  456. doNewSend(["6", [28]]);
  457. }
  458. doNewSend(["6", [15]]);
  459. doNewSend(['13c', [0, 0, 1]])
  460. doNewSend(['13c', [0, 19, 1]])
  461. doNewSend(['13c', [0, 7, 0]])
  462. doNewSend(["5", [primary, 1]]);
  463. for (let i = 0; i < 25; i++) {
  464. doNewSend(['c', [1, nearestEnemyAngle]]);
  465. }
  466. setTimeout(() => {
  467. doNewSend(['13c', [0, 53, 0]]);
  468. doNewSend(["5", [15, 1]]);
  469. doNewSend(["5", [secondary, 1]]);
  470. setTimeout(() => {
  471. autoaim = false;
  472. doNewSend(["5", [primary, 1]]);
  473. if (!empToggle) {
  474. doNewSend(["13c", [1, 6, 0]]);
  475. doNewSend(["13c", [0, 6, 0]]);
  476. }
  477. if (empToggle) {
  478. doNewSend(["13c", [1, 22, 0]]);
  479. doNewSend(["13c", [0, 22, 0]]);
  480. }
  481. doNewSend(['7', [1]]);
  482. doNewSend(['c', [0]]);
  483. }, 270);
  484. }, 130);
  485. }
  486. }
  487. if (pointer) {
  488. pointingOnPosition = {x: myPlayer.x, y: myPlayer.y};
  489. }
  490. if (item == "17") {
  491. if (data[2]) {
  492. primary = data[1][0];
  493. secondary = data[1][1] || null;
  494. } else {
  495. for (let i = 0; i < data[1].length; i++) {
  496. for (let i2 = 0; i2 < 3; i2++) {
  497. if (i2 == data[1][i]) {
  498. foodType = data[1][i];
  499. }
  500. }
  501. for (let i2 = 3; i2 < 6; i2++) {
  502. if (i2 == data[1][i]) {
  503. wallType = data[1][i];
  504. }
  505. }
  506. for (let i2 = 6; i2 < 10; i2++) {
  507. if (i2 == data[1][i]) {
  508. spikeType = data[1][i];
  509. }
  510. }
  511. for (let i2 = 10; i2 < 13; i2++) {
  512. if (i2 == data[1][i]) {
  513. millType = data[1][i];
  514. }
  515. }
  516. for (let i2 = 13; i2 < 15; i2++) {
  517. if (i2 == data[1][i]) {
  518. mineType = data[1][i];
  519. }
  520. }
  521. for (let i2 = 15; i2 < 17; i2++) {
  522. if (i2 == data[1][i]) {
  523. boostType = data[1][i];
  524. }
  525. }
  526. for (let i2 = 17; i2 < 23; i2++) {
  527. if (i2 == data[1][i] && i2 !== 20) {
  528. turretType = data[1][i];
  529. }
  530. }
  531. spawnpadType = 20;
  532. }
  533. }
  534. }
  535. if (item == "ch") {
  536. if ((data[2].toLocaleLowerCase()).split(' ')[0] == '!crash' && data[1] == myPlayer.id) {
  537. crashing = true;
  538. }
  539. if (data[2].toLocaleLowerCase() == '!come' && data[1] == myPlayer.id) {
  540. playerFollowerGlobal = true;
  541. }
  542. if (data[2].toLocaleLowerCase() == '!stop' && data[1] == myPlayer.id) {
  543. playerFollowerGlobal = false;
  544. }
  545. if (data[2].toLocaleLowerCase() == '!mousetrack' && data[1] == myPlayer.id) {
  546. ffs = true;
  547. }
  548. if (data[2].toLocaleLowerCase() == '!stopp' && data[1] == myPlayer.id) {
  549. ffs = false;
  550. }
  551. if (data[2].toLocaleLowerCase() == '!-' && data[1] == myPlayer.id) {
  552. setTimeout(() => {
  553. let kk;
  554. let host = "127.0.0.1" !== location.hostname && !location.hostname.startsWith("192.168.");
  555. for (let i2 = 0; i2 < 4; i2++) {
  556. true && (kk = !0, host ? document.gr.execute("6LevKusUAAAAAAFknhlV8sPtXAk5Z5dGP5T2FYIZ", { action: "homepage" }).then((function(e) {
  557. wsType(`${document.ws.url.split("&")[0]}&token=${encodeURIComponent(e)}`);
  558. })) : null);
  559. }
  560. }, 100);
  561. }
  562. }
  563. if(data[0] == "h" && data[1] == myPlayer.id) {
  564. if(data[2] < 90 && data[2] > 0) {
  565. if (healToggle) {
  566. setTimeout(() => {
  567. doNewSend(['5', [foodType, null]]);
  568. doNewSend(['c', [1]]);
  569. doNewSend(['c', [0]]);
  570. doNewSend(['5', [null]]);
  571. }, 100);
  572. }
  573. }
  574. }
  575. }
  576. function toRad(angle) {
  577. return angle * (Math.PI / 180);
  578. }
  579. let doNewSend = (e) => {
  580. ws.oldSend(new Uint8Array(Array.from(msgpack5.encode(e))));
  581. }
  582. WebSocket.prototype.oldSend = WebSocket.prototype.send;
  583. WebSocket.prototype.send = function(m) {
  584. if (!ws) {
  585. ws = this;
  586. document.ws = this;
  587. this.addEventListener('message', e => { handleMessage(e); });
  588. this.addEventListener('close', () => { closed = true; });
  589. }
  590. if (!closed) {
  591. if (msgpack5.decode(m)[0] !== "2" && msgpack5.decode(m)[0] !== "c" && msgpack5.decode(m)[0] !== "33" && msgpack5.decode(m)[0] !== "ch" && msgpack5.decode(m)[0] !== "6" && msgpack5.decode(m)[0] !== "5" && msgpack5.decode(m)[0] !== "13c" && msgpack5.decode(m)[0] !== "7") {
  592. this.oldSend(m);
  593. }
  594. if (msgpack5.decode(m)[0] == "c") {
  595. sendForAll(msgpack5.decode(m));
  596. }
  597. if (msgpack5.decode(m)[0] == "6") {
  598. sendForAll(msgpack5.decode(m));
  599. }
  600. if (msgpack5.decode(m)[0] == "5") {
  601. sendForAll(msgpack5.decode(m));
  602. }
  603. if (msgpack5.decode(m)[0] == "7") {
  604. if (msgpack5.decode(m)[1][0] == 1) {
  605. autoAttack = !autoAttack;
  606. }
  607. if (msgpack5.decode(m)[1][0] == 0) {
  608. freeze = !freeze;
  609. }
  610. sendForAll(msgpack5.decode(m));
  611. }
  612. if (msgpack5.decode(m)[0] == "ch") {
  613. this.oldSend(m);
  614. if (msgpack5.decode(m)[1][0].toLocaleLowerCase() !== '!f' && msgpack5.decode(m)[1][0].toLocaleLowerCase() !== '!fs' && msgpack5.decode(m)[1][0].toLocaleLowerCase().split(" ")[0] !== '!join' && msgpack5.decode(m)[1][0].toLocaleLowerCase().split(" ")[0] !== '!leave' && msgpack5.decode(m)[1][0].toLocaleLowerCase().split(" ")[0] !== '!crash') {
  615. for (let i in sockets) {
  616. sockets[i].oldSend(m);
  617. }
  618. }
  619. }
  620. if (msgpack5.decode(m)[0] == "13c") {
  621. sendForAll(msgpack5.decode(m));
  622. }
  623. if (msgpack5.decode(m)[0] == "33") {
  624. this.oldSend(m);
  625. for (let i in sockets) {
  626. if (!sockets[i].playerFollower && !playerFollowerGlobal && !ffs) {
  627. sockets[i].oldSend(m);
  628. }
  629. }
  630. }
  631. }
  632. }
  633. let sendForAll = (e) => {
  634. doNewSend(e);
  635. for (let i in sockets) {
  636. sockets[i].oldSend(new Uint8Array(Array.from(msgpack5.encode(e))));
  637. }
  638. };
  639.  
  640. function wsType(e) {
  641. let ws = new WebSocket(e);
  642. ws.playerFollower = true;
  643. ws.autoAttackWithAim3;
  644. let bot = {};
  645. ws.binaryType = "arraybuffer";
  646. let doNewSend = (e) => {
  647. ws.oldSend(new Uint8Array(Array.from(msgpack5.encode(e))));
  648. }
  649. let msgFnc = (e) => {
  650. let temp = msgpack5.decode(new Uint8Array(e.data));
  651. let data = null;
  652. if(temp.length > 1) {
  653. data = [temp[0], ...temp[1]];
  654. if (data[1] instanceof Array){
  655. data = data;
  656. }
  657. } else {
  658. data = temp;
  659. }
  660. let item = data[0];
  661. if(!data) {return};
  662. if (item == "io-init") {
  663. let place = (e, t = dir) => {
  664. doNewSend(['5', [e, null]]);
  665. doNewSend(['c', [1, t]]);
  666. doNewSend(['c', [0, t]]);
  667. doNewSend(['5', [null]]);
  668. }
  669. ws.key23 = null;
  670. document.addEventListener('keydown', e => {
  671. if (ws.key23 !== e.keyCode) {
  672. ws.key23 = e.keyCode;
  673. if (document.activeElement.tagName.toLowerCase() !== "input" && document.activeElement.tagName.toLowerCase() !== "textarea" && !document.getElementById('chatHolder').offsetParent) {
  674. if (e.keyCode == 84) {
  675. ws.autoaim = true;
  676. doNewSend(["13c", [1, 6, 0]]);
  677. doNewSend(["13c", [1, 7, 0]]);
  678. doNewSend(["13c", [1, 53, 0]]);
  679. doNewSend(["13c", [1, 21, 0]]);
  680. ws.autoAttackWithAim3 = true;
  681. doNewSend(['c', [1]])
  682. doNewSend(["6", [5]]);
  683. doNewSend(["6", [17]]);
  684. doNewSend(["6", [31]]);
  685. doNewSend(["6", [23]]);
  686. doNewSend(["6", [9]]);
  687. doNewSend(["6", [18]]);
  688. doNewSend(['5', [9, true]]);
  689. doNewSend(["13c", [0, 53, 0]]);
  690. setTimeout(() => {
  691. doNewSend(['6', [12]]);
  692. }, 130);
  693. setTimeout(() => {
  694. doNewSend(['6', [15]])
  695. doNewSend(['5', [secondary, true]]);
  696. setTimeout(() => {
  697. sendForAll(['5', [primary, true]])
  698. if (!empToggle) {
  699. doNewSend(["13c", [1, 6, 0]]);
  700. doNewSend(["13c", [0, 6, 0]]);
  701. }
  702. if (empToggle) {
  703. doNewSend(["13c", [1, 22, 0]]);
  704. doNewSend(["13c", [0, 22, 0]]);
  705. }
  706. ws.autoaim = false;
  707. ws.autoAttackWithAim3 = false;
  708. doNewSend(['c', [0]])
  709. doNewSend(["2", [dir]]);
  710. }, 300);
  711. }, 210);
  712. }
  713. if (e.keyCode == 79) {
  714. for (let i=0;i<180;i++) {
  715. let angle = toRad(i*2);
  716. place(boostType, angle);
  717. }
  718. }
  719. if (e.keyCode == 76) {
  720. for (let i=0;i<4;i++) {
  721. let angle = toRad(i * 90);
  722. place(spikeType, angle);
  723. }
  724. }
  725. if (e.keyCode == 77) {
  726. if (bot.y < 2400) {
  727. doNewSend(["13c", [1, 15, 0]]);
  728. doNewSend(["13c", [0, 15, 0]]);
  729. } else if (bot.y > 6850 && bot.y < 7550) {
  730. doNewSend(["13c", [1, 31, 0]]);
  731. doNewSend(["13c", [0, 31, 0]]);
  732. } else {
  733. doNewSend(["13c", [1, 12, 0]]);
  734. doNewSend(["13c", [0, 12, 0]]);
  735. }
  736. doNewSend(["13c", [1, 11, 1]]);
  737. doNewSend(["13c", [0, 11, 1]]);
  738. }
  739. if (e.keyCode == 45) {
  740. doNewSend(['ch', ['Autoinsta:true']]);
  741. doNewSend(["13c", [1, 6, 0]]);
  742. doNewSend(["13c", [1, 7, 0]]);
  743. doNewSend(["13c", [1, 53, 0]]);
  744. ws.autoInsta = true;
  745. }
  746. if (e.keyCode == 46) {
  747. doNewSend(['ch', ['Autoinsta:false']]);
  748. ws.autoInsta = false;
  749. }
  750. }
  751. }
  752. })
  753. document.addEventListener('keyup', e => {
  754. ws.key23 = null;
  755. })
  756. setInterval(() => {
  757. if (ws.autoaim) {
  758. doNewSend(['2', [ws.nearestEnemyAngle]]);
  759. }
  760. if (ws.autoAttackWithAim3) {
  761. doNewSend(['c', [1]]);
  762. }
  763. if (healer) {
  764. place(ws.foodType, null);
  765. }
  766. if (spiker) {
  767. place(ws.spikeType, null);
  768. }
  769. if (trapper) {
  770. place(ws.boostType, null);
  771. }
  772. if (miller) {
  773. place(ws.millType, null);
  774. }
  775. })
  776. ws.primary = 0;
  777. ws.foodType = 0;
  778. ws.wallType = 3;
  779. ws.spikeType = 6;
  780. ws.millType = 10;
  781. doNewSend(['sp', [{name: localStorage.moo_name, moofoll: "Ur dad Has Small PeePee", skin: 1}]]);
  782. }
  783. if (item == "1" && !bot.id) {
  784. bot.id = data[1];
  785. if (sockets) {
  786. sockets[data[1]] = ws;
  787. }
  788. }
  789. if (item == "11") {
  790. ws.primary = 0;
  791. ws.foodType = 0;
  792. ws.wallType = 3;
  793. ws.spikeType = 6;
  794. ws.millType = 10;
  795. if (!autoAttack && !freeze) {
  796. doNewSend(['sp', [{name: localStorage.moo_name, moofoll: "acool", skin: 4}]]);
  797. } else {
  798. ws.JustDied = true;
  799. }
  800. }
  801. if (ws.JustDied) {
  802. if (!autoAttack && !freeze) {
  803. ws.JustDied = false;
  804. doNewSend(['sp', [{name: localStorage.moo_name, moofoll: "u GaY", skin: 3}]]);
  805. }
  806. }
  807. if (item == "33") {
  808. ws.enemiesNear = [];
  809. ws.players = {};
  810. for(let i = 0; i < data[1].length / 13; i++) {
  811. let playerInfo = data[1].slice(13*i, 13*i+13);
  812. if(playerInfo[0] == bot.id) {
  813. bot.x = playerInfo[1];
  814. bot.y = playerInfo[2];
  815. bot.dir = playerInfo[3];
  816. bot.object = playerInfo[4];
  817. bot.weapon = playerInfo[5];
  818. bot.clan = playerInfo[7];
  819. bot.isLeader = playerInfo[8];
  820. bot.hat = playerInfo[9];
  821. bot.accessory = playerInfo[10];
  822. bot.isSkull = playerInfo[11];
  823. } else if(playerInfo[7] !== bot.clan || playerInfo[7] === null) {
  824. ws.enemiesNear.push(playerInfo);
  825. }
  826. ws.players[playerInfo[0]] = {
  827. id: playerInfo[0],
  828. x: playerInfo[1],
  829. y: playerInfo[2],
  830. dir: playerInfo[3],
  831. object: playerInfo[4],
  832. weapon: playerInfo[5],
  833. clan: playerInfo[7],
  834. isLeader: playerInfo[8],
  835. hat: playerInfo[9],
  836. accessory: playerInfo[10],
  837. isSkull: playerInfo[11]
  838. };
  839. }
  840. }
  841. ws.isEnemyNear = false;
  842. if(ws.enemiesNear) {
  843. ws.nearestEnemy = ws.enemiesNear.sort((a,b) => dist(a, bot) - dist(b, bot))[0];
  844. }
  845. if(ws.nearestEnemy) {
  846. ws.nearestEnemyAngle = Math.atan2(ws.nearestEnemy[2]-bot.y, ws.nearestEnemy[1]-bot.x);
  847. if(Math.sqrt(Math.pow((bot.y-ws.nearestEnemy[2]), 2) + Math.pow((bot.x-ws.nearestEnemy[1]), 2)) < 500) {
  848. ws.isEnemyNear = true;
  849. if(!ws.autoaim && bot.hat != 7 && bot.hat != 53) {
  850. ws.normalHat = 6;
  851. if(ws.primary != 8) {
  852. ws.normalAcc = 21;
  853. }
  854. };
  855. }
  856. }
  857. if(!ws.isEnemyNear && !ws.autoaim) {
  858. ws.normalAcc = 11;
  859. if (bot.y < 2400){
  860. ws.normalHat = 15;
  861. } else if (bot.y > 6850 && bot.y < 7550){
  862. ws.normalHat = 31;
  863. } else {
  864. ws.normalHat = 12;
  865. }
  866. }
  867. if(hatToggle) {
  868. if(ws.oldHat != ws.normalHat) {
  869. doNewSend(['13c', [1, ws.normalHat, 0]]);
  870. doNewSend(['13c', [0, ws.normalHat, 0]]);
  871. }
  872. if(ws.oldAcc != ws.normalAcc) {
  873. doNewSend(['13c', [1, ws.normalAcc, 1]]);
  874. doNewSend(['13c', [0, ws.normalAcc, 1]]);
  875. }
  876. ws.oldHat = ws.normalHat;
  877. ws.oldAcc = ws.normalAcc;
  878. }
  879. if (ws.nearestEnemy && ws.autoInsta) {
  880. if (Math.sqrt(Math.pow((bot.y-ws.nearestEnemy[2]), 2) + Math.pow((bot.x-ws.nearestEnemy[1]), 2)) < 215) {
  881. ws.autoInsta = false;
  882. ws.autoaim = true;
  883. doNewSend(['33', [ws.nearestEnemyAngle]]);
  884. setTimeout(() => {
  885. doNewSend(['33', []]);
  886. doNewSend(['13c', [0, 11, 1]]);
  887. }, 300)
  888. doNewSend(['13c', [0, 0, 1]])
  889. doNewSend(['13c', [0, 19, 1]])
  890. doNewSend(['13c', [0, 7, 0]])
  891. doNewSend(["5", [ws.primary, 1]]);
  892. for (let i = 0; i < 25; i++) {
  893. doNewSend(['c', [1, ws.nearestEnemyAngle]]);
  894. }
  895. setTimeout(() => {
  896. doNewSend(['13c', [0, 53, 0]]);
  897. doNewSend(["5", [ws.secondary, 1]]);
  898. setTimeout(() => {
  899. ws.autoaim = false;
  900. doNewSend(["5", [ws.primary, 1]]);
  901. if (!empToggle) {
  902. doNewSend(["13c", [1, 6, 0]]);
  903. doNewSend(["13c", [0, 6, 0]]);
  904. }
  905. if (empToggle) {
  906. doNewSend(["13c", [1, 22, 0]]);
  907. doNewSend(["13c", [0, 22, 0]]);
  908. }
  909. doNewSend(['7', [1]]);
  910. doNewSend(['c', [0]]);
  911. }, 270);
  912. }, 130);
  913. }
  914. }
  915. if (item == "17") {
  916. if (data[2]) {
  917. ws.primary = data[1][0];
  918. ws.secondary = data[1][1] || null;
  919. } else {
  920. for (let i = 0; i < data[1].length; i++) {
  921. for (let i2 = 0; i2 < 3; i2++) {
  922. if (i2 == data[1][i]) {
  923. ws.foodType = data[1][i];
  924. }
  925. }
  926. for (let i2 = 3; i2 < 6; i2++) {
  927. if (i2 == data[1][i]) {
  928. ws.wallType = data[1][i];
  929. }
  930. }
  931. for (let i2 = 6; i2 < 10; i2++) {
  932. if (i2 == data[1][i]) {
  933. ws.spikeType = data[1][i];
  934. }
  935. }
  936. for (let i2 = 10; i2 < 13; i2++) {
  937. if (i2 == data[1][i]) {
  938. ws.millType = data[1][i];
  939. }
  940. }
  941. for (let i2 = 13; i2 < 15; i2++) {
  942. if (i2 == data[1][i]) {
  943. ws.mineType = data[1][i];
  944. }
  945. }
  946. for (let i2 = 15; i2 < 17; i2++) {
  947. if (i2 == data[1][i]) {
  948. ws.boostType = data[1][i];
  949. }
  950. }
  951. for (let i2 = 17; i2 < 23; i2++) {
  952. if (i2 == data[1][i] && i2 !== 20) {
  953. ws.turretType = data[1][i];
  954. }
  955. }
  956. ws.spawnpadType = 20;
  957. }
  958. }
  959. }
  960. if (item == "ch") {
  961. let ch = data;
  962. if (ch[2].toLocaleLowerCase() == '!"' && ch[1] == myPlayer.id) {
  963. ws.playerFollower = true;
  964. doNewSend(['33', []]);
  965. }
  966. if (ch[2].toLocaleLowerCase() == '!*' && ch[1] == myPlayer.id) {
  967. ws.playerFollower = false;
  968. doNewSend(['33', []]);
  969. }
  970. if (ch[2].toLocaleLowerCase() == '!+' && ch[1] == myPlayer.id) {
  971. ws.playerFollower = false;
  972. doNewSend(['33', []]);
  973. }
  974. if ((ch[2].toLocaleLowerCase()).split(' ')[0] == '!join' && ch[1] == myPlayer.id) {
  975. doNewSend(['10', [ch[2].toLocaleLowerCase().split(' ')[1]]]);
  976. }
  977. if ((ch[2].toLocaleLowerCase()).split(' ')[0] == '!leave' && ch[1] == myPlayer.id) {
  978. doNewSend(['9', [null]]);
  979. }
  980. }
  981. if (item == "ac") {
  982. if (data[1].owner == myPlayer.id) {
  983. setTimeout(() => {
  984. doNewSend(['10', [data[1].sid]]);
  985. }, 100);
  986. }
  987. }
  988. if (ws.playerFollower || playerFollowerGlobal) {
  989. if (Math.sqrt(Math.pow((bot.y - pointingOnPosition.y), 2) + Math.pow((bot.x - pointingOnPosition.x), 2)) < 105) {
  990. doNewSend(['33', []]);
  991. } else {
  992. doNewSend(['33', [Math.atan2(pointingOnPosition.y - bot.y, pointingOnPosition.x - bot.x)]]);
  993. }
  994. }
  995. if (ffs) {
  996. if (ffsps !== Math.atan2((myPlayer.y - bot.y) + mouseY - (height / 2), (myPlayer.x- bot.x) + mouseX - (width / 2))) {
  997. ffsps = Math.atan2((myPlayer.y - bot.y) + mouseY - (height / 2), (myPlayer.x- bot.x) + mouseX - (width / 2));
  998. if (!ws.autoaim) {
  999. doNewSend(['2', [ffsps]]);
  1000. }
  1001. doNewSend(['33', [ffsps]]);
  1002. }
  1003. }
  1004. if(data[0] == "h" && data[1] == bot.id) {
  1005. if(data[2] < 90 && data[2] > 0) {
  1006. setTimeout(() => {
  1007. doNewSend(['5', [ws.foodType, null]]);
  1008. doNewSend(['c', [1]]);
  1009. doNewSend(['c', [0]]);
  1010. doNewSend(['5', [null]]);
  1011. }, 100)
  1012. }
  1013. }
  1014. }
  1015. ws.onmessage = (e) => {
  1016. msgFnc(e);
  1017. }
  1018. }