Advertisement
Guest User

Untitled

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