您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
use head.js
此脚本不应直接安装,它是供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.sleazyfork.org/scripts/400105/789842/headjs_2.js
document.addEventListener('keydown', function(e){ if (e.keyCode == 71){ if (document.activeElement.id == 'chatBox') return; if (document.activeElement.id == 'allianceInput') return; let Storekey = document.getElementById('storeMenu'); if (Storekey.style.display == "none") { Storekey.style.display = "block" } else if (Storekey.style.display == "block") { Storekey.style.display = "none" } } }) $("#consentBlock").css({display: "none"}); //$("#youtuberOf").css({display: "none"}); document.getElementById("moomooio_728x90_home").style.display = "none"; $("#moomooio_728x90_home").parent().css({display: "none"}); window.onbeforeunload = null; let mouseX; let mouseY; let width; let height; function normal() { hat(normalHat); acc(normalAcc); } function aim(x, y){ var cvs = document.getElementById("gameCanvas"); cvs.dispatchEvent(new MouseEvent("mousemove", { clientX: x, clientY: y })); } let coreURL = new URL(window.location.href); window.sessionStorage.force = coreURL.searchParams.get("fc"); if (window.sessionStorage.force != "false" && window.sessionStorage.force && window.sessionStorage.force.toString() != "null"){ document.getElementsByClassName("menuHeader")[0].innerHTML = `Servers <span style="color: red;">Force (${window.sessionStorage.force})</span>`; } class ForceSocket extends WebSocket { constructor(...args){ if (window.sessionStorage.force != "false" && window.sessionStorage.force && window.sessionStorage.force.toString() != "null"){ let server = window.sessionStorage.force; let sip = ""; for (let gameServer of window.vultr.servers){ if (`${gameServer.region}:${gameServer.index}:0` == server){ sip = gameServer.ip; } } args[0] = `wss://ip_${sip}.moomoo.io:8008/?gameIndex=0`; delete window.sessionStorage.force; } super(...args); } } WebSocket = ForceSocket; var nearestEnemy; var nearestEnemyAngle; var isEnemyNear; var instaSpeed = 230; var primary; var secondary; var foodType; var wallType; var spikeType; var millType; var mineType; var boostType; var turretType; var spawnpadType; var autoaim = false; var tick = 0; var oldHat; var oldAcc; var enemiesNear; var normalHat; var normalAcc; var ws; var msgpack5 = msgpack; let myPlayer = { id: null, x: null, y: null, dir: null, object: null, weapon: null, clan: null, isLeader: null, hat: null, accessory: null, isSkull: null }; let healSpeed = 100; var messageToggle = 0; var clanToggle = 0; let healToggle = 0; let hatToggle = 0; document.msgpack = msgpack; function n(){ this.buffer = new Uint8Array([0]); this.buffer.__proto__ = new Uint8Array; this.type = 0; } WebSocket.prototype.oldSend = WebSocket.prototype.send; WebSocket.prototype.send = function(m){ if (!ws){ document.ws = this; ws = this; socketFound(this); } this.oldSend(m); }; function socketFound(socket){ socket.addEventListener('message', function(message){ handleMessage(message); }); } function handleMessage(m){ let temp = msgpack5.decode(new Uint8Array(m.data)); let data; if(temp.length > 1) { data = [temp[0], ...temp[1]]; if (data[1] instanceof Array){ data = data; } } else { data = temp; } let item = data[0]; if(!data) {return}; if(item === "io-init") { let cvs = document.getElementById("gameCanvas"); width = cvs.clientWidth; height = cvs.clientHeight; $(window).resize(function() { width = cvs.clientWidth; height = cvs.clientHeight; }); cvs.addEventListener("mousemove", e => { mouseX = e.clientX; mouseY = e.clientY; }); } if (item == "1" && myPlayer.id == null){ myPlayer.id = data[1]; } if (item == "33") { enemiesNear = []; for(let i = 0; i < data[1].length / 13; i++) { let playerInfo = data[1].slice(13*i, 13*i+13); if(playerInfo[0] == myPlayer.id) { myPlayer.x = playerInfo[1]; myPlayer.y = playerInfo[2]; myPlayer.dir = playerInfo[3]; myPlayer.object = playerInfo[4]; myPlayer.weapon = playerInfo[5]; myPlayer.clan = playerInfo[7]; myPlayer.isLeader = playerInfo[8]; myPlayer.hat = playerInfo[9]; myPlayer.accessory = playerInfo[10]; myPlayer.isSkull = playerInfo[11]; } else if(playerInfo[7] != myPlayer.clan || playerInfo[7] === null) { enemiesNear.push(playerInfo); } } } isEnemyNear = false; if(enemiesNear) { nearestEnemy = enemiesNear.sort((a,b) => dist(a, myPlayer) - dist(b, myPlayer))[0]; } if(nearestEnemy) { nearestEnemyAngle = Math.atan2(nearestEnemy[2]-myPlayer.y, nearestEnemy[1]-myPlayer.x); if(Math.sqrt(Math.pow((myPlayer.y-nearestEnemy[2]), 2) + Math.pow((myPlayer.x-nearestEnemy[1]), 2)) < 300) { isEnemyNear = true; if(autoaim == false && myPlayer.hat != 7 && myPlayer.hat != 53) { normalHat = 6; if(primary != 8) { normalAcc = 19 } }; } } if(isEnemyNear == false && autoaim == false) { normalAcc = 11; if (myPlayer.y < 2400){ normalHat = 15; } else if (myPlayer.y > 6850 && myPlayer.y < 7550){ normalHat = 31; } else { normalHat = 12; } } if (!nearestEnemy) { nearestEnemyAngle = myPlayer.dir; } if(item == "h" && data[1] == myPlayer.id) { if(data[2] < 100 && data[2] > 0 && healToggle == 1) { setTimeout( () => { place(foodType, null); }, healSpeed); } } update(); } function doNewSend(sender){ ws.send(new Uint8Array(Array.from(msgpack5.encode(sender)))); } function acc(id) { doNewSend(["13c", [0, 0, 1]]); doNewSend(["13c", [0, id, 1]]); } function hat(id) { doNewSend(["13c", [0, id, 0]]); } function place(id, angle = Math.atan2(mouseY - height / 2, mouseX - width / 2)) { doNewSend(["5", [id, null]]); doNewSend(["c", [1, angle]]); doNewSend(["c", [0, angle]]); doNewSend(["5", [myPlayer.weapon, true]]); } var repeater = function(key, action, interval) { let _isKeyDown = false; let _intervalId = undefined; return { start(keycode) { if(keycode == key && document.activeElement.id.toLowerCase() !== 'chatbox') { _isKeyDown = true; if(_intervalId === undefined) { _intervalId = setInterval(() => { action(); if(!_isKeyDown){ clearInterval(_intervalId); _intervalId = undefined; console.log("claered"); } }, interval); } } }, stop(keycode) { if(keycode == key && document.activeElement.id.toLowerCase() !== 'chatbox') { _isKeyDown = false; } } }; } const healer = repeater(81, () => {place(foodType)}, 80); const heal = repeater(81, () => {place(foodType)}, 90); const boostPlacer = repeater(70, () => {place(boostType)}, 0); const spikePlacer = repeater(86, () => {place(spikeType)}, 0); const millPlacer = repeater(78, () => {place(millType)}, 0); const turretPlacer = repeater(56, () => {place(turretType)}, 0); const wallPlacer = repeater(52, () => {place(wallType)}, 0); document.addEventListener('keydown', (e)=>{ spikePlacer.start(e.keyCode); healer.start(e.keyCode); heal.start(e.keyCode); boostPlacer.start(e.keyCode); millPlacer.start(e.keyCode); wallPlacer.start(e.keyCode); turretPlacer.start(e.keyCode); if (e.keyCode == 84 && document.activeElement.id.toLowerCase() !== 'chatbox') { hat(7); } if (e.keyCode == 16 && document.activeElement.id.toLowerCase() !== 'chatbox') { hat(12); } if (e.keyCode == 32 && document.activeElement.id.toLowerCase() !== 'chatbox') { hat(7); } if (e.keyCode == 89 && document.activeElement.id.toLowerCase() !== 'chatbox') { hat(6); } if (e.keyCode == 67 && document.activeElement.id.toLowerCase() !== 'chatbox') { hat(40); } if (e.keyCode == 75 && document.activeElement.id.toLowerCase() !== 'chatbox') { hat(20); } if (e.keyCode == 90 && document.activeElement.id.toLowerCase() !== 'chatbox') { hat(53); } if (e.keyCode == 192 && document.activeElement.id.toLowerCase() !== 'chatbox') { hat(0); } if(e.keyCode == 82 && document.activeElement.id.toLowerCase() !== 'chatbox') { autoaim = false; doNewSend(["5", [primary, true]]); doNewSend(["c", [1]]); setTimeout( () => { doNewSend(["13c", [0, 53, 0]]); doNewSend(["5", [secondary, true]]); }, instaSpeed - 105); setTimeout( () => { doNewSend(["5", [primary, true]]); doNewSend(["c", [0, null]]); autoaim = false; }, instaSpeed); } if(e.keyCode == 97 && document.activeElement.id.toLowerCase() !== 'chatbox') { ///num1 katana [age 8] doNewSend(["6", [4]]); } if(e.keyCode == 98 && document.activeElement.id.toLowerCase() !== 'chatbox') { ///num2 musket [age 9] doNewSend(["6", [15]]); } if(e.keyCode == 105 && document.activeElement.id.toLowerCase() !== 'chatbox') { ///num9 max mill [age 8] doNewSend(["6", [28]]); } }) document.addEventListener('keyup', (e)=>{ spikePlacer.stop(e.keyCode); boostPlacer.stop(e.keyCode); millPlacer.stop(e.keyCode); turretPlacer.stop(e.keyCode); wallPlacer.stop(e.keyCode); healer.stop(e.keyCode); heal.stop(e.keyCode); }) function isElementVisible(e) { return (e.offsetParent !== null); } function toRad(angle) { return angle * 0.01745329251; } function dist(a, b){ return Math.sqrt( Math.pow((b.y-a[2]), 2) + Math.pow((b.x-a[1]), 2) ); } function update() { for (let i=0;i<9;i++){ if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){ primary = i; } } for (let i=9;i<16;i++){ if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){ secondary = i; } } for (let i=16;i<19;i++){ if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){ foodType = i - 16; } } for (let i=19;i<22;i++){ if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){ wallType = i - 16; } } for (let i=22;i<26;i++){ if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){ spikeType = i - 16; } } for (let i=26;i<29;i++){ if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){ millType = i - 16; } } for (let i=29;i<31;i++){ if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){ mineType = i - 16; } } for (let i=31;i<33;i++){ if (isElementVisible(document.getElementById("actionBarItem" + i.toString()))){ boostType = i - 16; } } for (let i=33;i<39;i++){ if (isElementVisible(document.getElementById("actionBarItem" + i.toString())) && i != 36){ turretType = i - 16; } } spawnpadType = 36; } function createTribe(name) { leaveTribe(); doNewSend(["8", [name]]); } function leaveTribe() { doNewSend(["9", [null]]); } var _msgs = ["Hack_Load.", "Hack_Load..", "Hack_Load...", "Hack_Load...."]; var msgs = _msgs; var msgCycleSwitch = false; var shift = false; var minus = false; var home = false; var chat; var msgNum = 0; var socket = null; var scriptSetup = false; WebSocket = class extends WebSocket { constructor(...arg) { super(...arg); if (!scriptSetup){ scriptSetup = true; styleInit(); ren_overlay(); window.onbeforeunload = function (){ return 'Are you sure you want to leave?'; }; } socket = this; } }; if (storageAvailable('localStorage')){ if (!localStorage.getItem("msgs")){ localStorage.setItem("msgs", JSON.stringify(msgs)); }else{ let temp; try{ temp = JSON.parse(localStorage.getItem("msgs")); } catch (e){ alert("Invalid Array! Setting default..."); saveData(); temp = ""; } if (temp !== ""){ msgs = temp; } } } const overlay = {}; overlay.keyCode = 36; overlay.toggle = false; overlay.inputString = msgs.join("\n"); overlay.tempMsgs = _msgs; function styleInit() { addGlobalStyle(`#chatCyclerUI{padding: 0.2em; margin:0.2em; position: absolute;top: 0;left: 0;width: 30%; background-color: rgba(255, 255, 255, 0.35);display:none;}`); addGlobalStyle(".table{ display: table; text-align: center; width: 100%; height: 80%;}"); addGlobalStyle(".row{ display: table-row; }"); addGlobalStyle(`.cell{ display: table-cell; padding: 0px 0.3em;border: 1px solid rgba(0, 0, 0, 0.5);}`); addGlobalStyle(`.backRed{background-color:#f14e54}`); function addGlobalStyle(css) { var head, style; head = document.getElementsByTagName('head')[0]; if (!head) { return; } style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css; head.appendChild(style); } } function toggleOverlay(tf){ if (tf){ document.querySelector('#chatCyclerUI').style.display = "block"; }else{ document.querySelector('#chatCyclerUI').style.display = "none"; } }; function ren_overlay(){ const title = `<div style="font-size:32px;color:rgba(0, 0, 0, 0.75)">Menu</div>`; const descr = `<div>Press HOME to repeat this menu.</div>`; const body = ` <div class="table"> <div class="row">Message Settings </div> <div class="row"> <div class="cell" style="vertical-align:middle">Messages</div> <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> </div> <div class="row"> <div class="cell" style="vertical-align:middle">Save Message </div> <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> </div> <br> <div class="row">Message Repeat </div> <div class="row"> <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> <div class="cell" style="vertical-align:middle"><input type="button" name="overlay_cycle_toggle" value="Repeat"></div> </div> </div>`; const footer = `<div style="font-size:24px;color:rgba(0, 0, 0, 0.75)">AutoChat</div>`; const temp = `${title} ${body} ${descr} ${footer}`; const d = document.createElement("div") d.id = "chatCyclerUI"; d.innerHTML = temp; d.style.zIndex = 999999; document.body.appendChild(d); const val = document.querySelector('textarea[name="overlay_messages"]'); val.value = overlay.inputString; val.addEventListener('input', function(e) { overlay.inputString = e.target.value; }); document.querySelector('input[name="overlay_update_cycle"]').addEventListener('click', function() { if (!overlay.inputString){ overlay.tempMsgs = _msgs; }else{ overlay.tempMsgs = overlay.inputString.split(/\r?\n/); } msgNum = 99; msgs = overlay.tempMsgs; saveData(); }); document.querySelector('input[name="overlay_cycle_toggle"]').addEventListener('click', function(e) { msgCycleSwitch = !msgCycleSwitch; if (msgCycleSwitch){ chat = setInterval(autoChat, 1); document.querySelector('.overlay_cycle_toggle_value').innerHTML = `<span style="font-size:24px;color:rgba(0, 0, 0, 0.75)";>On</span>`; }else{ document.querySelector('.overlay_cycle_toggle_value').innerHTML = `<span style="font-size:24px;color:rgba(0, 0, 0, 0.75)";>Off</span>`; clearInterval(chat); msgNum = 0; } }); } function concatBuffers(buffer1, buffer2){ var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength); tmp.set(new Uint8Array(buffer1), 0); tmp.set(new Uint8Array(buffer2), buffer1.byteLength); return tmp.buffer; } const four = Uint8Array.from([4]).buffer; function autoChat(){ socket && socket.send(msgpack.encode(["ch", [msgs[msgNum]]])); msgNum++; if (msgNum >= msgs.length) msgNum = 0; } function storageAvailable(type){ try{ var storage = window[type], x = '__storage_test__'; storage.setItem(x, x); storage.removeItem(x); return true; } catch(e){ return false; } } function saveData(){ if (storageAvailable('localStorage')){ localStorage.setItem("msgs", JSON.stringify(msgs)); } } window.addEventListener('keydown', function (event){ if (overlay.toggle) event.stopImmediatePropagation(); if (!minus && event.keyCode === 19){ //L msgCycleSwitch = !msgCycleSwitch; if (msgCycleSwitch){ chat = setInterval(autoChat, 0); }else{ clearInterval(chat); msgNum =0; } minus = true; } if (!home && event.keyCode === overlay.keyCode){ //HOME overlay.toggle = !overlay.toggle; toggleOverlay(overlay.toggle); home = true; } }); window.addEventListener('keypress', function (event){ if (overlay.toggle) event.stopImmediatePropagation(); }); window.addEventListener('keyup', function (event){ if (overlay.toggle) event.stopImmediatePropagation(); if (event.keyCode == 19){ minus = true; }else if (event.keyCode == 36){ home = true; } });