Sleazy Fork is available in English.

head.js_2

use head.js

This script should not be not be installed directly. It is a library for other scripts to include with the meta directive // @require https://update.sleazyfork.org/scripts/400105/789842/headjs_2.js

  1. document.addEventListener('keydown', function(e){
  2. if (e.keyCode == 71){
  3. if (document.activeElement.id == 'chatBox') return;
  4. if (document.activeElement.id == 'allianceInput') return;
  5. let Storekey = document.getElementById('storeMenu');
  6. if (Storekey.style.display == "none")
  7. {
  8. Storekey.style.display = "block"
  9. }
  10. else if (Storekey.style.display == "block")
  11. {
  12. Storekey.style.display = "none"
  13. }
  14. }
  15. })
  16. $("#consentBlock").css({display: "none"});
  17. //$("#youtuberOf").css({display: "none"});
  18. document.getElementById("moomooio_728x90_home").style.display = "none";
  19. $("#moomooio_728x90_home").parent().css({display: "none"});
  20.  
  21. window.onbeforeunload = null;
  22. let mouseX;
  23. let mouseY;
  24.  
  25. let width;
  26. let height;
  27. function normal() {
  28. hat(normalHat);
  29. acc(normalAcc);
  30. }
  31.  
  32. function aim(x, y){
  33. var cvs = document.getElementById("gameCanvas");
  34. cvs.dispatchEvent(new MouseEvent("mousemove", {
  35. clientX: x,
  36. clientY: y
  37.  
  38. }));
  39. }
  40.  
  41. let coreURL = new URL(window.location.href);
  42. window.sessionStorage.force = coreURL.searchParams.get("fc");
  43.  
  44.  
  45. if (window.sessionStorage.force != "false" && window.sessionStorage.force && window.sessionStorage.force.toString() != "null"){
  46. document.getElementsByClassName("menuHeader")[0].innerHTML = `Servers <span style="color: red;">Force (${window.sessionStorage.force})</span>`;
  47. }
  48.  
  49.  
  50. class ForceSocket extends WebSocket {
  51. constructor(...args){
  52. if (window.sessionStorage.force != "false" && window.sessionStorage.force && window.sessionStorage.force.toString() != "null"){
  53. let server = window.sessionStorage.force;
  54. let sip = "";
  55. for (let gameServer of window.vultr.servers){
  56. if (`${gameServer.region}:${gameServer.index}:0` == server){
  57. sip = gameServer.ip;
  58. }
  59. }
  60. args[0] = `wss://ip_${sip}.moomoo.io:8008/?gameIndex=0`;
  61. delete window.sessionStorage.force;
  62. }
  63.  
  64. super(...args);
  65.  
  66. }
  67.  
  68.  
  69. }
  70.  
  71. WebSocket = ForceSocket;
  72.  
  73.  
  74. var nearestEnemy;
  75. var nearestEnemyAngle;
  76. var isEnemyNear;
  77. var instaSpeed = 230;
  78. var primary;
  79. var secondary;
  80. var foodType;
  81. var wallType;
  82. var spikeType;
  83. var millType;
  84. var mineType;
  85. var boostType;
  86. var turretType;
  87. var spawnpadType;
  88. var autoaim = false;
  89. var tick = 0;
  90. var oldHat;
  91. var oldAcc;
  92. var enemiesNear;
  93. var normalHat;
  94. var normalAcc;
  95. var ws;
  96. var msgpack5 = msgpack;
  97. let myPlayer = {
  98. id: null,
  99. x: null,
  100. y: null,
  101. dir: null,
  102. object: null,
  103. weapon: null,
  104. clan: null,
  105. isLeader: null,
  106. hat: null,
  107. accessory: null,
  108. isSkull: null
  109. };
  110.  
  111. let healSpeed = 100;
  112. var messageToggle = 0;
  113. var clanToggle = 0;
  114. let healToggle = 0;
  115. let hatToggle = 0;
  116.  
  117. document.msgpack = msgpack;
  118. function n(){
  119. this.buffer = new Uint8Array([0]);
  120. this.buffer.__proto__ = new Uint8Array;
  121. this.type = 0;
  122. }
  123.  
  124. WebSocket.prototype.oldSend = WebSocket.prototype.send;
  125. WebSocket.prototype.send = function(m){
  126. if (!ws){
  127. document.ws = this;
  128.  
  129. ws = this;
  130. socketFound(this);
  131. }
  132. this.oldSend(m);
  133. };
  134.  
  135.  
  136. function socketFound(socket){
  137. socket.addEventListener('message', function(message){
  138. handleMessage(message);
  139. });
  140. }
  141.  
  142. function handleMessage(m){
  143. let temp = msgpack5.decode(new Uint8Array(m.data));
  144. let data;
  145. if(temp.length > 1) {
  146. data = [temp[0], ...temp[1]];
  147. if (data[1] instanceof Array){
  148. data = data;
  149. }
  150. } else {
  151. data = temp;
  152. }
  153. let item = data[0];
  154. if(!data) {return};
  155.  
  156. if(item === "io-init") {
  157. let cvs = document.getElementById("gameCanvas");
  158. width = cvs.clientWidth;
  159. height = cvs.clientHeight;
  160. $(window).resize(function() {
  161. width = cvs.clientWidth;
  162. height = cvs.clientHeight;
  163. });
  164. cvs.addEventListener("mousemove", e => {
  165. mouseX = e.clientX;
  166. mouseY = e.clientY;
  167. });
  168. }
  169.  
  170. if (item == "1" && myPlayer.id == null){
  171. myPlayer.id = data[1];
  172. }
  173.  
  174. if (item == "33") {
  175. enemiesNear = [];
  176. for(let i = 0; i < data[1].length / 13; i++) {
  177. let playerInfo = data[1].slice(13*i, 13*i+13);
  178. if(playerInfo[0] == myPlayer.id) {
  179. myPlayer.x = playerInfo[1];
  180. myPlayer.y = playerInfo[2];
  181. myPlayer.dir = playerInfo[3];
  182. myPlayer.object = playerInfo[4];
  183. myPlayer.weapon = playerInfo[5];
  184. myPlayer.clan = playerInfo[7];
  185. myPlayer.isLeader = playerInfo[8];
  186. myPlayer.hat = playerInfo[9];
  187. myPlayer.accessory = playerInfo[10];
  188. myPlayer.isSkull = playerInfo[11];
  189. } else if(playerInfo[7] != myPlayer.clan || playerInfo[7] === null) {
  190. enemiesNear.push(playerInfo);
  191. }
  192. }
  193. }
  194.  
  195. isEnemyNear = false;
  196. if(enemiesNear) {
  197. nearestEnemy = enemiesNear.sort((a,b) => dist(a, myPlayer) - dist(b, myPlayer))[0];
  198. }
  199.  
  200.  
  201. if(nearestEnemy) {
  202. nearestEnemyAngle = Math.atan2(nearestEnemy[2]-myPlayer.y, nearestEnemy[1]-myPlayer.x);
  203. if(Math.sqrt(Math.pow((myPlayer.y-nearestEnemy[2]), 2) + Math.pow((myPlayer.x-nearestEnemy[1]), 2)) < 300) {
  204. isEnemyNear = true;
  205. if(autoaim == false && myPlayer.hat != 7 && myPlayer.hat != 53) {
  206. normalHat = 6;
  207. if(primary != 8) {
  208. normalAcc = 19
  209. }
  210. };
  211. }
  212. }
  213.  
  214. if(isEnemyNear == false && autoaim == false) {
  215. normalAcc = 11;
  216. if (myPlayer.y < 2400){
  217. normalHat = 15;
  218. } else if (myPlayer.y > 6850 && myPlayer.y < 7550){
  219. normalHat = 31;
  220. } else {
  221. normalHat = 12;
  222. }
  223. }
  224. if (!nearestEnemy) {
  225. nearestEnemyAngle = myPlayer.dir;
  226. }
  227. if(item == "h" && data[1] == myPlayer.id) {
  228. if(data[2] < 100 && data[2] > 0 && healToggle == 1) {
  229. setTimeout( () => {
  230. place(foodType, null);
  231. }, healSpeed);
  232.  
  233. }
  234. }
  235. update();
  236. }
  237.  
  238.  
  239. function doNewSend(sender){
  240. ws.send(new Uint8Array(Array.from(msgpack5.encode(sender))));
  241. }
  242.  
  243. function acc(id) {
  244. doNewSend(["13c", [0, 0, 1]]);
  245. doNewSend(["13c", [0, id, 1]]);
  246. }
  247.  
  248. function hat(id) {
  249. doNewSend(["13c", [0, id, 0]]);
  250. }
  251.  
  252.  
  253. function place(id, angle = Math.atan2(mouseY - height / 2, mouseX - width / 2)) {
  254. doNewSend(["5", [id, null]]);
  255. doNewSend(["c", [1, angle]]);
  256. doNewSend(["c", [0, angle]]);
  257. doNewSend(["5", [myPlayer.weapon, true]]);
  258. }
  259. var repeater = function(key, action, interval) {
  260. let _isKeyDown = false;
  261. let _intervalId = undefined;
  262.  
  263. return {
  264. start(keycode) {
  265. if(keycode == key && document.activeElement.id.toLowerCase() !== 'chatbox') {
  266. _isKeyDown = true;
  267. if(_intervalId === undefined) {
  268. _intervalId = setInterval(() => {
  269. action();
  270. if(!_isKeyDown){
  271. clearInterval(_intervalId);
  272. _intervalId = undefined;
  273. console.log("claered");
  274. }
  275. }, interval);
  276. }
  277. }
  278. },
  279.  
  280. stop(keycode) {
  281. if(keycode == key && document.activeElement.id.toLowerCase() !== 'chatbox') {
  282. _isKeyDown = false;
  283. }
  284. }
  285. };
  286.  
  287.  
  288. }
  289.  
  290. const healer = repeater(81, () => {place(foodType)}, 80);
  291. const heal = repeater(81, () => {place(foodType)}, 90);
  292. const boostPlacer = repeater(70, () => {place(boostType)}, 0);
  293. const spikePlacer = repeater(86, () => {place(spikeType)}, 0);
  294. const millPlacer = repeater(78, () => {place(millType)}, 0);
  295. const turretPlacer = repeater(56, () => {place(turretType)}, 0);
  296. const wallPlacer = repeater(52, () => {place(wallType)}, 0);
  297.  
  298.  
  299. document.addEventListener('keydown', (e)=>{
  300. spikePlacer.start(e.keyCode);
  301. healer.start(e.keyCode);
  302. heal.start(e.keyCode);
  303. boostPlacer.start(e.keyCode);
  304. millPlacer.start(e.keyCode);
  305. wallPlacer.start(e.keyCode);
  306. turretPlacer.start(e.keyCode);
  307. if (e.keyCode == 84 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  308. hat(7);
  309. }
  310. if (e.keyCode == 16 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  311. hat(12);
  312. }
  313. if (e.keyCode == 32 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  314. hat(7);
  315. }
  316. if (e.keyCode == 89 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  317. hat(6);
  318. }
  319. if (e.keyCode == 67 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  320. hat(40);
  321. }
  322. if (e.keyCode == 75 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  323. hat(20);
  324. }
  325. if (e.keyCode == 90 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  326. hat(53);
  327. }
  328. if (e.keyCode == 192 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  329. hat(0);
  330. }
  331. if(e.keyCode == 82 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  332. autoaim = false;
  333. doNewSend(["5", [primary, true]]);
  334. doNewSend(["c", [1]]);
  335. setTimeout( () => {
  336. doNewSend(["13c", [0, 53, 0]]);
  337. doNewSend(["5", [secondary, true]]);
  338. }, instaSpeed - 105);
  339.  
  340. setTimeout( () => {
  341. doNewSend(["5", [primary, true]]);
  342. doNewSend(["c", [0, null]]);
  343. autoaim = false;
  344. }, instaSpeed);
  345. }
  346. if(e.keyCode == 97 && document.activeElement.id.toLowerCase() !== 'chatbox') { ///num1 katana [age 8]
  347. doNewSend(["6", [4]]);
  348. }
  349. if(e.keyCode == 98 && document.activeElement.id.toLowerCase() !== 'chatbox') { ///num2 musket [age 9]
  350. doNewSend(["6", [15]]);
  351. }
  352. if(e.keyCode == 105 && document.activeElement.id.toLowerCase() !== 'chatbox') { ///num9 max mill [age 8]
  353. doNewSend(["6", [28]]);
  354. }
  355. })
  356.  
  357. document.addEventListener('keyup', (e)=>{
  358. spikePlacer.stop(e.keyCode);
  359. boostPlacer.stop(e.keyCode);
  360. millPlacer.stop(e.keyCode);
  361. turretPlacer.stop(e.keyCode);
  362. wallPlacer.stop(e.keyCode);
  363. healer.stop(e.keyCode);
  364. heal.stop(e.keyCode);
  365.  
  366. })
  367. function isElementVisible(e) {
  368. return (e.offsetParent !== null);
  369. }
  370.  
  371.  
  372. function toRad(angle) {
  373. return angle * 0.01745329251;
  374. }
  375.  
  376. function dist(a, b){
  377. return Math.sqrt( Math.pow((b.y-a[2]), 2) + Math.pow((b.x-a[1]), 2) );
  378. }
  379. function update() {
  380. for (let i=0;i<9;i++){
  381. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  382. primary = i;
  383. }
  384. }
  385.  
  386. for (let i=9;i<16;i++){
  387. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  388. secondary = i;
  389. }
  390. }
  391.  
  392. for (let i=16;i<19;i++){
  393. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  394. foodType = i - 16;
  395. }
  396. }
  397.  
  398. for (let i=19;i<22;i++){
  399. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  400. wallType = i - 16;
  401. }
  402. }
  403.  
  404. for (let i=22;i<26;i++){
  405. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  406. spikeType = i - 16;
  407. }
  408. }
  409.  
  410. for (let i=26;i<29;i++){
  411. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  412. millType = i - 16;
  413. }
  414. }
  415.  
  416. for (let i=29;i<31;i++){
  417. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  418. mineType = i - 16;
  419. }
  420. }
  421.  
  422. for (let i=31;i<33;i++){
  423. if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){
  424. boostType = i - 16;
  425. }
  426. }
  427.  
  428. for (let i=33;i<39;i++){
  429. if (isElementVisible(document.getElementById("actionBarItem" + i.toString())) && i != 36){
  430. turretType = i - 16;
  431. }
  432. }
  433.  
  434. spawnpadType = 36;
  435. }
  436.  
  437. function createTribe(name) {
  438. leaveTribe();
  439. doNewSend(["8", [name]]);
  440. }
  441.  
  442. function leaveTribe() {
  443. doNewSend(["9", [null]]);
  444. }
  445.  
  446.  
  447. var _msgs = ["Hack_Load.", "Hack_Load..", "Hack_Load...", "Hack_Load...."];
  448. var msgs = _msgs;
  449. var msgCycleSwitch = false;
  450. var shift = false;
  451. var minus = false;
  452. var home = false;
  453. var chat;
  454. var msgNum = 0;
  455.  
  456. var socket = null;
  457.  
  458. var scriptSetup = false;
  459.  
  460. WebSocket = class extends WebSocket {
  461. constructor(...arg) {
  462. super(...arg);
  463. if (!scriptSetup){
  464. scriptSetup = true;
  465. styleInit();
  466. ren_overlay();
  467. window.onbeforeunload = function (){
  468. return 'Are you sure you want to leave?';
  469. };
  470. }
  471. socket = this;
  472. }
  473. };
  474.  
  475. if (storageAvailable('localStorage')){
  476. if (!localStorage.getItem("msgs")){
  477. localStorage.setItem("msgs", JSON.stringify(msgs));
  478. }else{
  479. let temp;
  480. try{
  481. temp = JSON.parse(localStorage.getItem("msgs"));
  482. }
  483. catch (e){
  484. alert("Invalid Array! Setting default...");
  485. saveData();
  486. temp = "";
  487. }
  488. if (temp !== ""){
  489. msgs = temp;
  490. }
  491. }
  492. }
  493.  
  494. const overlay = {};
  495. overlay.keyCode = 36;
  496. overlay.toggle = false;
  497. overlay.inputString = msgs.join("\n");
  498. overlay.tempMsgs = _msgs;
  499.  
  500. function styleInit() {
  501. addGlobalStyle(`#chatCyclerUI{padding: 0.2em; margin:0.2em; position: absolute;top: 0;left: 0;width: 30%;
  502. background-color: rgba(255, 255, 255, 0.35);display:none;}`);
  503. addGlobalStyle(".table{ display: table; text-align: center; width: 100%; height: 80%;}");
  504. addGlobalStyle(".row{ display: table-row; }");
  505. addGlobalStyle(`.cell{ display: table-cell; padding: 0px 0.3em;border: 1px solid rgba(0, 0, 0, 0.5);}`);
  506. addGlobalStyle(`.backRed{background-color:#f14e54}`);
  507. function addGlobalStyle(css) {
  508. var head, style;
  509. head = document.getElementsByTagName('head')[0];
  510. if (!head) {
  511. return;
  512. }
  513. style = document.createElement('style');
  514. style.type = 'text/css';
  515. style.innerHTML = css;
  516. head.appendChild(style);
  517. }
  518. }
  519.  
  520. function toggleOverlay(tf){
  521. if (tf){
  522. document.querySelector('#chatCyclerUI').style.display = "block";
  523. }else{
  524. document.querySelector('#chatCyclerUI').style.display = "none";
  525. }
  526. };
  527.  
  528. function ren_overlay(){
  529. const title = `<div style="font-size:32px;color:rgba(0, 0, 0, 0.75)">Menu</div>`;
  530. const descr = `<div>Press HOME to repeat this menu.</div>`;
  531. const body = `
  532. <div class="table">
  533. <div class="row">Message Settings
  534. </div>
  535. <div class="row">
  536. <div class="cell" style="vertical-align:middle">Messages</div>
  537. <div class="cell" style="vertical-align:middle"><textarea name="overlay_messages" rows=4 cols=32 style="background-color:rgba(255, 255, 255, 0.35);resize:none; rgba(255, 255, 255, 0.75) padding-left: 0px;border-left-width: 0px;border-top-width: 0px;padding-top: 0px;padding-right: 0px;border-right-width: 0px;padding-bottom: 0px;border-bottom-width: 0px;"></textarea></div>
  538. </div>
  539. <div class="row">
  540. <div class="cell" style="vertical-align:middle">Save Message </div>
  541. <div class="cell" style="vertical-align:middle"><input type="button" name="overlay_update_cycle" value="Save" style="border-right-width: 0px;border-left-width: 0px;border-top-width: 0px;padding-left: 6px;border-bottom-width: 0px;"></div>
  542. </div>
  543. <br>
  544. <div class="row">Message Repeat
  545. </div>
  546. <div class="row">
  547. <div class="cell" style="vertical-align:middle">Repeat<br><span class="overlay_cycle_toggle_value"><span style="font-size:24px;color:rgba(0, 0, 0, 0.75)";>Off</span></span></div>
  548. <div class="cell" style="vertical-align:middle"><input type="button" name="overlay_cycle_toggle" value="Repeat"></div>
  549. </div>
  550. </div>`;
  551. const footer = `<div style="font-size:24px;color:rgba(0, 0, 0, 0.75)">AutoChat</div>`;
  552. const temp = `${title} ${body} ${descr} ${footer}`;
  553. const d = document.createElement("div")
  554. d.id = "chatCyclerUI";
  555. d.innerHTML = temp;
  556. d.style.zIndex = 999999;
  557. document.body.appendChild(d);
  558. const val = document.querySelector('textarea[name="overlay_messages"]');
  559. val.value = overlay.inputString;
  560. val.addEventListener('input', function(e) {
  561. overlay.inputString = e.target.value;
  562. });
  563. document.querySelector('input[name="overlay_update_cycle"]').addEventListener('click', function() {
  564. if (!overlay.inputString){
  565. overlay.tempMsgs = _msgs;
  566. }else{
  567. overlay.tempMsgs = overlay.inputString.split(/\r?\n/);
  568. }
  569. msgNum = 99;
  570. msgs = overlay.tempMsgs;
  571. saveData();
  572. });
  573. document.querySelector('input[name="overlay_cycle_toggle"]').addEventListener('click', function(e) {
  574. msgCycleSwitch = !msgCycleSwitch;
  575. if (msgCycleSwitch){
  576. chat = setInterval(autoChat, 1);
  577. document.querySelector('.overlay_cycle_toggle_value').innerHTML = `<span style="font-size:24px;color:rgba(0, 0, 0, 0.75)";>On</span>`;
  578. }else{
  579. document.querySelector('.overlay_cycle_toggle_value').innerHTML = `<span style="font-size:24px;color:rgba(0, 0, 0, 0.75)";>Off</span>`;
  580. clearInterval(chat);
  581. msgNum = 0;
  582. }
  583. });
  584. }
  585.  
  586. function concatBuffers(buffer1, buffer2){
  587. var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);
  588. tmp.set(new Uint8Array(buffer1), 0);
  589. tmp.set(new Uint8Array(buffer2), buffer1.byteLength);
  590. return tmp.buffer;
  591. }
  592.  
  593. const four = Uint8Array.from([4]).buffer;
  594.  
  595. function autoChat(){
  596. socket && socket.send(msgpack.encode(["ch", [msgs[msgNum]]]));
  597. msgNum++;
  598. if (msgNum >= msgs.length) msgNum = 0;
  599. }
  600.  
  601. function storageAvailable(type){
  602. try{
  603. var storage = window[type],
  604. x = '__storage_test__';
  605. storage.setItem(x, x);
  606. storage.removeItem(x);
  607. return true;
  608. }
  609. catch(e){
  610. return false;
  611. }
  612. }
  613.  
  614. function saveData(){
  615. if (storageAvailable('localStorage')){
  616. localStorage.setItem("msgs", JSON.stringify(msgs));
  617. }
  618. }
  619.  
  620. window.addEventListener('keydown', function (event){
  621. if (overlay.toggle) event.stopImmediatePropagation();
  622. if (!minus && event.keyCode === 19){ //L
  623. msgCycleSwitch = !msgCycleSwitch;
  624. if (msgCycleSwitch){
  625. chat = setInterval(autoChat, 0);
  626. }else{
  627. clearInterval(chat);
  628. msgNum =0;
  629. }
  630. minus = true;
  631. }
  632. if (!home && event.keyCode === overlay.keyCode){ //HOME
  633. overlay.toggle = !overlay.toggle;
  634. toggleOverlay(overlay.toggle);
  635. home = true;
  636. }
  637. });
  638.  
  639. window.addEventListener('keypress', function (event){
  640. if (overlay.toggle) event.stopImmediatePropagation();
  641. });
  642.  
  643. window.addEventListener('keyup', function (event){
  644. if (overlay.toggle) event.stopImmediatePropagation();
  645. if (event.keyCode == 19){
  646. minus = true;
  647. }else if (event.keyCode == 36){
  648. home = true;
  649. }
  650. });