Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.40 KB | None | 0 0
  1. // ==UserScript==
  2. // @name !PR?J?CT PH??ÏIX
  3. // @namespace -
  4. // @version 99999
  5. // @description
  6. // @author
  7. // @match *://moomoo.io/*
  8. // @match *://dev.moomoo.io/*
  9. // @match *://sandbox.moomoo.io/*
  10. // @grant none
  11. // @require https://greasyfork.org/scripts/368273-msgpack/code/msgpack.js?version=598723
  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.  
  16. // @downloadURL none
  17. // ==/UserScript==
  18.  
  19. $("#consentBlock").css({display: "none"});
  20. //$("#youtuberOf").css({display: "none"});
  21. $("#mapDisplay").css({background: `url('https://i.imgur.com/fgFsQJp.png')`});
  22.  
  23. document.getElementById("moomooio_728x90_home").style.display = "none";
  24. $("#moomooio_728x90_home").parent().css({display: "none"});
  25.  
  26. window.onbeforeunload = null;
  27.  
  28. let mouseX;
  29. let mouseY;
  30.  
  31. let width;
  32. let height;
  33.  
  34. setInterval(() => {
  35. if(clanToggle == 1) {
  36. doNewSend(["9", [null]]);
  37. doNewSend(["8", [animate(false, 5)]])
  38. }
  39. doNewSend(["testing", [6]]);
  40. }, 200);
  41.  
  42. setInterval(() => {
  43. if(messageToggle == 1) {
  44. doNewSend(["ch", [animate(true, 5)]])
  45. }
  46. }, 200);
  47.  
  48. setInterval(() => {
  49. if(autoaim == true) {
  50. doNewSend(["2", [nearestEnemyAngle]]);
  51. }
  52. }, 0);
  53.  
  54. setInterval(() => {
  55. if(hatToggle == 1) {
  56. if(oldHat != normalHat) {
  57. hat(normalHat);
  58. console.log("Tried. - Hat")
  59. }
  60. if(oldAcc != normalAcc) {
  61. acc(normalAcc);
  62. console.log("Tried. - Acc")
  63. }
  64. oldHat = normalHat;
  65. oldAcc = normalAcc
  66. }
  67. }, 25);
  68.  
  69. function normal() {
  70. hat(normalHat);
  71. acc(normalAcc);
  72. }
  73.  
  74. function aim(x, y){
  75. var cvs = document.getElementById("gameCanvas");
  76. cvs.dispatchEvent(new MouseEvent("mousemove", {
  77. clientX: x,
  78. clientY: y
  79.  
  80. }));
  81. }
  82.  
  83. let coreURL = new URL(window.location.href);
  84. window.sessionStorage.force = coreURL.searchParams.get("fc");
  85.  
  86.  
  87. if (window.sessionStorage.force != "false" && window.sessionStorage.force && window.sessionStorage.force.toString() != "null"){
  88. document.getElementsByClassName("menuHeader")[0].innerHTML = `Servers <span style="color: red;">Force (${window.sessionStorage.force})</span>`;
  89. }
  90.  
  91.  
  92. var oldAlert = alert;
  93. alert = function(){
  94. $.alert({title: "Full Server!",
  95. content: "This server is full! Would you like to force connect?",
  96. useBootstrap: false,
  97. buttons: {
  98. Back: () => { window.onbeforeunload = null; window.location = "http://moomoo.io"; },
  99. Yes: () => {
  100. let coreURL = new URL(window.location.href);
  101. let server = coreURL.searchParams.get("server");
  102. window.sessionStorage.force = server;
  103. window.sessionStorage.dog = server;
  104. setTimeout(() => {
  105. window.location = `http://moomoo.io?fc=${server}`;
  106. }, 500);
  107. },
  108. }
  109. });
  110. }
  111.  
  112.  
  113. class ForceSocket extends WebSocket {
  114. constructor(...args){
  115. if (window.sessionStorage.force != "false" && window.sessionStorage.force && window.sessionStorage.force.toString() != "null"){
  116. let server = window.sessionStorage.force;
  117. let sip = "";
  118. for (let gameServer of window.vultr.servers){
  119. if (`${gameServer.region}:${gameServer.index}:0` == server){
  120. sip = gameServer.ip;
  121. }
  122. }
  123. args[0] = `wss://ip_${sip}.moomoo.io:8008/?gameIndex=0`;
  124. delete window.sessionStorage.force;
  125. }
  126.  
  127. super(...args);
  128.  
  129. }
  130.  
  131.  
  132. }
  133.  
  134. WebSocket = ForceSocket;
  135.  
  136.  
  137. var nearestEnemy;
  138. var nearestEnemyAngle;
  139. var isEnemyNear;
  140. var instaSpeed = 258;
  141. var primary;
  142. var secondary;
  143. var foodType;
  144. var wallType;
  145. var spikeType;
  146. var millType;
  147. var mineType;
  148. var boostType;
  149. var turretType;
  150. var spawnpadType;
  151. var autoaim = false;
  152. var tick = 1;
  153. var oldHat;
  154. var oldAcc;
  155. var enemiesNear;
  156. var normalHat;
  157. var normalAcc;
  158. var ws;
  159. var msgpack5 = msgpack;
  160. var boostDir;
  161. let myPlayer = {
  162. id: null,
  163. x: null,
  164. y: null,
  165. dir: null,
  166. object: null,
  167. weapon: null,
  168. clan: null,
  169. isLeader: null,
  170. hat: null,
  171. accessory: null,
  172. isSkull: null
  173. };
  174.  
  175. let healSpeed = 30;
  176. var messageToggle = 0;
  177. var clanToggle = 0;
  178. let healToggle = 1;
  179. let hatToggle = 0;
  180.  
  181. document.msgpack = msgpack;
  182. function n(){
  183. this.buffer = new Uint8Array([0]);
  184. this.buffer.__proto__ = new Uint8Array;
  185. this.type = 0;
  186. }
  187.  
  188. WebSocket.prototype.oldSend = WebSocket.prototype.send;
  189. WebSocket.prototype.send = function(m){
  190. if (!ws){
  191. document.ws = this;
  192.  
  193. ws = this;
  194. socketFound(this);
  195. }
  196. this.oldSend(m);
  197. };
  198.  
  199.  
  200. function socketFound(socket){
  201. socket.addEventListener('message', function(message){
  202. handleMessage(message);
  203. });
  204. }
  205.  
  206. function handleMessage(m){
  207. let temp = msgpack5.decode(new Uint8Array(m.data));
  208. let data;
  209. if(temp.length > 1) {
  210. data = [temp[0], ...temp[1]];
  211. if (data[1] instanceof Array){
  212. data = data;
  213. }
  214. } else {
  215. data = temp;
  216. }
  217. let item = data[0];
  218. if(!data) {return};
  219.  
  220. if(item === "io-init") {
  221. let cvs = document.getElementById("gameCanvas");
  222. width = cvs.clientWidth;
  223. height = cvs.clientHeight;
  224. $(window).resize(function() {
  225. width = cvs.clientWidth;
  226. height = cvs.clientHeight;
  227. });
  228. cvs.addEventListener("mousemove", e => {
  229. mouseX = e.clientX;
  230. mouseY = e.clientY;
  231. });
  232. }
  233.  
  234. if (item == "1" && myPlayer.id == null){
  235. myPlayer.id = data[1];
  236. }
  237.  
  238. if (item == "33") {
  239. enemiesNear = [];
  240. for(let i = 0; i < data[1].length / 13; i++) {
  241. let playerInfo = data[1].slice(13*i, 13*i+13);
  242. if(playerInfo[0] == myPlayer.id) {
  243. myPlayer.x = playerInfo[1];
  244. myPlayer.y = playerInfo[2];
  245. myPlayer.dir = playerInfo[3];
  246. myPlayer.object = playerInfo[4];
  247. myPlayer.weapon = playerInfo[5];
  248. myPlayer.clan = playerInfo[7];
  249. myPlayer.isLeader = playerInfo[8];
  250. myPlayer.hat = playerInfo[9];
  251. myPlayer.accessory = playerInfo[10];
  252. myPlayer.isSkull = playerInfo[11];
  253. } else if(playerInfo[7] != myPlayer.clan || playerInfo[7] === null) {
  254. enemiesNear.push(playerInfo);
  255. }
  256. }
  257. }
  258.  
  259. isEnemyNear = false;
  260. if(enemiesNear) {
  261. nearestEnemy = enemiesNear.sort((a,b) => dist(a, myPlayer) - dist(b, myPlayer))[0];
  262. }
  263.  
  264. if(nearestEnemy) {
  265. nearestEnemyAngle = Math.atan2(nearestEnemy[2]-myPlayer.y, nearestEnemy[1]-myPlayer.x);
  266. if(Math.sqrt(Math.pow((myPlayer.y-nearestEnemy[2]), 2) + Math.pow((myPlayer.x-nearestEnemy[1]), 2)) < 300) {
  267. isEnemyNear = true;
  268. if(autoaim == false && myPlayer.hat != 7 && myPlayer.hat != 53) {
  269. normalHat = 6;
  270. if(primary != 8) {
  271. normalAcc = 19
  272. }
  273. };
  274. }
  275. }
  276. if(isEnemyNear == false && autoaim == false) {
  277. normalAcc = 11;
  278. if (myPlayer.y < 2400){
  279. normalHat = 15;
  280. } else if (myPlayer.y > 6850 && myPlayer.y < 7550){
  281. normalHat = 31;
  282. } else {
  283. normalHat = 12;
  284. }
  285. }
  286. if (!nearestEnemy) {
  287. nearestEnemyAngle = myPlayer.dir;
  288. }
  289. if(item == "h" && data[1] == myPlayer.id) {
  290. if(data[2] < 100 && data[2] > 0 && healToggle == 1) {
  291. setTimeout( () => {
  292. place(foodType, null);
  293. }, healSpeed);
  294.  
  295. }
  296. }
  297. update();
  298. }
  299.  
  300.  
  301. function doNewSend(sender){
  302. ws.send(new Uint8Array(Array.from(msgpack5.encode(sender))));
  303. }
  304.  
  305. function acc(id) {
  306. doNewSend(["13c", [0, 0, 1]]);
  307. doNewSend(["13c", [0, id, 1]]);
  308. }
  309.  
  310. function hat(id) {
  311. doNewSend(["13c", [0, id, 0]]);
  312. }
  313.  
  314.  
  315. function place(id, angle = Math.atan2(mouseY - height / 2, mouseX - width / 2)) {
  316. doNewSend(["5", [id, null]]);
  317. doNewSend(["c", [1, angle]]);
  318. doNewSend(["c", [0, angle]]);
  319. doNewSend(["5", [myPlayer.weapon, true]]);
  320. }
  321.  
  322. function boostSpike() {
  323. if(boostDir == null) {
  324. boostDir = nearestEnemyAngle;
  325. }
  326. place(spikeType, boostDir + toRad(90));
  327. place(spikeType, boostDir - toRad(90));
  328. place(boostType, boostDir);
  329. doNewSend(["33", [boostDir]]);
  330. }
  331.  
  332.  
  333. var repeater = function(key, action, interval) {
  334. let _isKeyDown = false;
  335. let _intervalId = undefined;
  336.  
  337. return {
  338. start(keycode) {
  339. if(keycode == key && document.activeElement.id.toLowerCase() !== 'chatbox') {
  340. _isKeyDown = true;
  341. if(_intervalId === undefined) {
  342. _intervalId = setInterval(() => {
  343. action();
  344. if(!_isKeyDown){
  345. clearInterval(_intervalId);
  346. _intervalId = undefined;
  347. console.log("claered");
  348. }
  349. }, interval);
  350. }
  351. }
  352. },
  353.  
  354. stop(keycode) {
  355. if(keycode == key && document.activeElement.id.toLowerCase() !== 'chatbox') {
  356. _isKeyDown = false;
  357. }
  358. }
  359. };
  360.  
  361.  
  362. }
  363.  
  364. const healer = repeater(81, () => {place(foodType)}, 0);
  365. const boostPlacer = repeater(70, () => {place(boostType)}, 0);
  366. const spikePlacer = repeater(86, () => {place(spikeType)}, 0);
  367. const millPlacer = repeater(67, () => {place(millType)}, 0);
  368. const turretPlacer = repeater(72, () => {place(turretType)}, 0);
  369. const boostSpiker = repeater(71, boostSpike, 0);
  370.  
  371. document.addEventListener('keydown', (e)=>{
  372. spikePlacer.start(e.keyCode);
  373. healer.start(e.keyCode);
  374. boostPlacer.start(e.keyCode);
  375. boostSpiker.start(e.keyCode);
  376. millPlacer.start(e.keyCode);
  377. turretPlacer.start(e.keyCode);
  378.  
  379. if (e.keyCode == 79 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  380. for (let i=0;i<5;i++){
  381. let angle = myPlayer.dir + toRad(i * 72);
  382. place(millType, angle)
  383. }
  384. }
  385. if (e.keyCode == 80 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  386. for (let i=0;i<4;i++){
  387. let angle = myPlayer.dir + toRad(i * 90);
  388. place(wallType, angle)
  389. }
  390. }
  391. if (e.keyCode == 73 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  392. for (let i=0;i<4;i++){
  393. let angle = myPlayer.dir + toRad(i * 90);
  394. place(boostType, angle)
  395. }
  396. }
  397. if (e.keyCode == 89 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  398. for (let i=0;i<4;i++){
  399. let angle = myPlayer.dir + toRad(i * 90);
  400. place(spikeType, angle)
  401. }
  402. }
  403. if (e.keyCode == 66 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  404. place(turretType, myPlayer.dir + toRad(45));
  405. place(turretType, myPlayer.dir - toRad(45));
  406. }
  407.  
  408. if (e.keyCode == 77 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  409. if (myPlayer.y < 2400){
  410. hat(15);
  411. } else if (myPlayer.y > 6850 && myPlayer.y < 7550){
  412. hat(31);
  413. } else {
  414. hat(12);
  415. }
  416. acc(11);
  417. }
  418. if (e.keyCode == 85 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  419. hat(20);
  420. }
  421.  
  422. if(e.keyCode == 82 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  423. autoaim = true;
  424. doNewSend(["5", [primary, true]]);
  425. doNewSend(["13c", [0, 7, 0]]);
  426. doNewSend(["13c", [0, 0, 1]]);
  427. doNewSend(["13c", [0, 19, 1]]);
  428. doNewSend(["c", [1]]);
  429. setTimeout( () => {
  430. doNewSend(["13c", [0, 53, 0]]);
  431. doNewSend(["5", [secondary, true]]);
  432. }, instaSpeed - 130);
  433.  
  434. setTimeout( () => {
  435. doNewSend(["5", [primary, true]]);
  436. doNewSend(["c", [0, null]]);
  437. doNewSend(["13c", [0, 6, 0]]);
  438. autoaim = false;
  439. }, instaSpeed);
  440. }
  441.  
  442.  
  443. if(e.keyCode == 84 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  444. autoaim = true;
  445. doNewSend(["5", [secondary, true]]);
  446. doNewSend(["13c", [0, 53, 0]]);
  447. doNewSend(["13c", [0, 0, 1]]);
  448. doNewSend(["13c", [0, 19, 1]]);
  449. doNewSend(["c", [1]]);
  450.  
  451. setTimeout( () => {
  452. doNewSend(["13c", [0, 7, 0]]);
  453. doNewSend(["5", [primary, true]]);
  454. }, 100);
  455.  
  456. setTimeout( () => {
  457. doNewSend(["c", [0, null]]);
  458. doNewSend(["13c", [0, 6, 0]]);
  459. autoaim = false;
  460. }, 200);
  461. }
  462.  
  463. if(e.keyCode == 32 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  464. autoaim = true;
  465. doNewSend(["5", [primary, true]]);
  466. doNewSend(["13c", [0, 7, 0]]);
  467. doNewSend(["13c", [0, 0, 1]]);
  468. doNewSend(["13c", [0, 19, 1]]);
  469. place(spikeType);
  470. doNewSend(["c", [1]]);
  471.  
  472. setTimeout( () => {
  473. doNewSend(["13c", [0, 53, 0]]);
  474. }, 100);
  475.  
  476. setTimeout( () => {
  477. doNewSend(["c", [0, null]]);
  478. doNewSend(["13c", [0, 6, 0]]);
  479. autoaim = false;
  480. }, 200);
  481. }
  482.  
  483. if(e.keyCode == 38 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  484. messageToggle = (messageToggle + 1) % 2;
  485. }
  486.  
  487. if(e.keyCode == 40 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  488. clanToggle = (clanToggle + 1) % 2;
  489. }
  490.  
  491. if(e.keyCode == 106 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  492. healToggle = (healToggle + 1) % 2;
  493. if(healToggle == 0) {
  494. if(hatToggle == 0) {
  495. document.title = "Heal: OFF | Hat: OFF"
  496. } else {
  497. document.title = "Heal: OFF | Hat: ON"
  498. }
  499. } else {
  500. if(hatToggle == 0) {
  501. document.title = "Heal: ON | Hat: OFF"
  502. } else {
  503. document.title = "Heal: ON | Hat: ON"
  504. }
  505. }
  506. }
  507. if(e.keyCode == 76 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  508. autoaim = true;
  509. doNewSend(["5", [secondary, true]]);
  510. doNewSend(["13c", [0, 53, 0]]);
  511. doNewSend(["c", [1]]);
  512.  
  513. setTimeout( () => {
  514. doNewSend(["6", [12]]);
  515. }, 100);
  516.  
  517. setTimeout( () => {
  518. doNewSend(["6", [15]]);
  519. }, 200);
  520.  
  521. setTimeout( () => {
  522. doNewSend(["c", [0]]);
  523. doNewSend(["13c", [0, 6, 0]]);
  524. doNewSend(["5", [primary, true]]);
  525. autoaim = false;
  526. }, 300);
  527. }
  528.  
  529. if(e.keyCode == 97 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  530. doNewSend(["6", [4]]);
  531. }
  532.  
  533. if(e.keyCode == 98 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  534. doNewSend(["6", [15]]);
  535. }
  536.  
  537. if(e.keyCode == 105 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  538. doNewSend(["6", [28]]);
  539. doNewSend(["6", [25]]);
  540. }
  541. if (e.key == "3" && document.activeElement.id.toLowerCase() !== 'chatbox') {
  542. doNewSend(["6", [2]]);
  543. }
  544. if(e.keyCode == 111 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  545. hatToggle = (hatToggle + 1) % 2;
  546. if(healToggle == 0) {
  547. if(hatToggle == 0) {
  548. document.title = "Heal: OFF | Hat: OFF"
  549. } else {
  550. document.title = "Heal: OFF | Hat: ON"
  551. }
  552. } else {
  553. if(hatToggle == 0) {
  554. document.title = "Heal: ON | Hat: OFF"
  555. } else {
  556. document.title = "Heal: ON | Hat: ON"
  557. }
  558. }
  559. }
  560. })
  561.  
  562. document.addEventListener('keyup', (e)=>{
  563. spikePlacer.stop(e.keyCode);
  564. boostPlacer.stop(e.keyCode);
  565. boostSpiker.stop(e.keyCode);
  566. millPlacer.stop(e.keyCode);
  567. turretPlacer.stop(e.keyCode);
  568. healer.stop(e.keyCode);
  569. if(e.keyCode == 71 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  570. setTimeout( () => {
  571. doNewSend(["33", [null]]);
  572. boostDir = null;
  573. }, 10);
  574. }
  575. })
  576.  
  577.  
  578. function isElementVisible(e) {
  579. return (e.offsetParent !== null);
  580. }
  581.  
  582.  
  583. function toRad(angle) {
  584. return angle * 0.01745329251;
  585. }
  586.  
  587. function dist(a, b){
  588. return Math.sqrt( Math.pow((b.y-a[2]), 2) + Math.pow((b.x-a[1]), 2) );
  589. }
  590.  
  591. function animate(space, chance) {
  592. let result = '';
  593. let characters;
  594. if(space) {
  595. characters = 'Murgasione';
  596. } else {
  597. characters = 'mkTop';
  598. }
  599. if(space) {
  600. characters = characters.padStart((30 - characters.length) / 2 + characters.length)
  601. characters = characters.padEnd(30);
  602. }
  603. let count = 0;
  604. for (let i = 0; i < characters.length; i++ ) {
  605. if(Math.floor(Math.random() * chance) == 1 && characters.charAt(i) != "-" && count < 2 && characters.charAt(i) != " ") {
  606. result += "_";
  607. count++
  608. } else {
  609. result += characters.charAt(i);
  610. }
  611. }
  612. return result;
  613. }
  614.  
  615. document.title = "Heal: ON | Hat: ON"
  616.  
  617. function update() {
  618. for (let i=0;i<9;i++){
  619. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  620. primary = i;
  621. }
  622. }
  623.  
  624. for (let i=9;i<16;i++){
  625. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  626. secondary = i;
  627. }
  628. }
  629.  
  630. for (let i=16;i<19;i++){
  631. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  632. foodType = i - 16;
  633. }
  634. }
  635.  
  636. for (let i=19;i<22;i++){
  637. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  638. wallType = i - 16;
  639. }
  640. }
  641.  
  642. for (let i=22;i<26;i++){
  643. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  644. spikeType = i - 16;
  645. }
  646. }
  647.  
  648. for (let i=26;i<29;i++){
  649. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  650. millType = i - 16;
  651. }
  652. }
  653.  
  654. for (let i=29;i<31;i++){
  655. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  656. mineType = i - 16;
  657. }
  658. }
  659.  
  660. for (let i=31;i<33;i++){
  661. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  662. boostType = i - 16;
  663. }
  664. }
  665.  
  666. for (let i=33;i<39;i++){
  667. if (isElementVisible(document.getElementById("actionBarItem" + i.toString())) && i != 36){
  668. turretType = i - 16;
  669. }
  670. }
  671.  
  672. spawnpadType = 36;
  673. }
  674.  
  675. function createTribe(name) {
  676. leaveTribe();
  677. doNewSend(["8", [name]]);
  678. }
  679.  
  680. function leaveTribe() {
  681. doNewSend(["9", [null]]);
  682. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement