// ==UserScript== // @name Clap mod // @version v2 // @description I hate seeing people killing me with my mod // @match http*://*.moomoo.io/* // @icon https://www.google.com/s2/favicons?sz=64&domain=moomoo.io // @require https://update.greasyfork.icu/scripts/423602/1005014/msgpack.js // @license MIT // @grant none // @namespace Good Guy // @downloadURL https://update.greasyfork.icu/scripts/530079/Clap%20mod.user.js // @updateURL https://update.greasyfork.icu/scripts/530079/Clap%20mod.meta.js // ==/UserScript== /** VARIABLES **/ let spike = 0; let weapongrind = false; let { msgpack, config, jQuery: $ } = window; let leaderboard = document.getElementById('leaderboard') let gameCanvas = document.getElementById("gameCanvas"); let mainContext = gameCanvas.getContext("2d"); let storeMenu = document.getElementById("storeMenu"); let allianceMenu = document.getElementById("allianceMenu"); let chatHolder = document.getElementById("chatHolder"); let altchaCheckbox = document.getElementById('altcha_checkbox'); let altcha = document.getElementById('altcha'); let menuOpened = false; let mouseX, mouseY, width = innerWidth, height = innerHeight; let moveKeys = { w: false, a: false, s: false, d: false }; let myPlayer = { id: null, x: null, y: null, dir: null, object: null, weapon: null, clan: null, isLeader: null, maxXP: 300, XP: 0, age: 1, hat: null, accessory: null, isSkull: null, maxHealth: 100 }; let locked = false, gameTick = 0, enemy = [], ws = null; let tPing = 90; let players = [], nearestEnemy = {}, enemyAngle, isEnemyNear; let primary, secondary, foodType, wallType, spikeType, millType, mineType, boostType, spawnpadType, turretType, haveMine; let SaVeGe = { tick: 0, tickQueue: [], manage: [], tickRate: 1000 / 9, tickSpeed: 0, lastTick: performance.now(), tickBase(set, tick) { const targetTick = this.tick + tick; this.tickQueue[targetTick] = this.tickQueue[targetTick] ?? []; this.tickQueue[targetTick].push(set); } }; document.getElementById("gameName").innerHTML = "Clap mod"; document.querySelector("#pre-content-container").remove(); //ANTI AD /** SOCKET **/ WebSocket.prototype.oldSend = WebSocket.prototype.send; WebSocket.prototype.send = function (m) { if (!ws) { document.websocket = this; ws = this; socketFound(this); } this.oldSend(m); }; /** FPS BOOSTER **/ let { maxScreenWidth, maxScreenHeight } = config; let FPSBooster; let { moveTo, lineTo } = CanvasRenderingContext2D.prototype; CanvasRenderingContext2D.prototype.moveTo = function(x, y) { if (!FPSBooster || this.globalAlpha !== 0.06) { return moveTo.call(this, x, y); } }; CanvasRenderingContext2D.prototype.lineTo = function(x, y) { if (!FPSBooster || this.globalAlpha !== 0.06) { return lineTo.call(this, x, y); } }; class Checker { check(callback) { return (event) => { if (event instanceof Event && (event.isTrusted ?? true)) { callback(event); } }; } } let checker = new Checker(); let updateScreen = () => { let currentWidth = window.innerWidth; let currentHeight = window.innerHeight; if (FPSBooster) { } else { } }; /** LOCKERS **/ let lockers = { attacker: false, breaker: false, storeOpened: false, } /** WS SEND PACKET **/ let sendPacket = (packet, ...data) => { ws.send(new Uint8Array(msgpack.encode([packet, data]))); }; /** FOR STORE FUNCTIONS **/ let goldCount = () => { let scoreCount = document.getElementById("scoreDisplay"); return scoreCount ? parseInt(scoreCount.innerText) : 0; }; let hatPrice = (hatId) => { let hatPrice = { 45: 0, 51: 0, 50: 0, 28: 0, 29: 0, 30: 0, 36: 0, 37: 0, 38: 0, 44: 0, 35: 0, 42: 0, 43: 0, 49: 0, 57: 50, 8: 100, 2: 500, 15: 600, 5: 1000, 4: 2000, 18: 2000, 31: 2500, 1: 3000, 10: 3000, 48: 3000, 6: 4000, 23: 4000, 13: 5000, 9: 5000, 32: 5000, 7: 6000, 22: 6000, 12: 6000, 26: 8000, 21: 10000, 46: 10000, 14: 10000, 11: 10000, 53: 10000, 20: 12000, 58: 12000, 27: 15000, 40: 15000, 52: 15000, 55: 20000, 56: 20000 }; return hatPrice[hatId] || 0; }; let accPrice = (accessoryId) => { let accPrice = { 12: 1000, 9: 1000, 10: 1000, 3: 1500, 8: 2000, 11: 2000, 17: 3000, 6: 3000, 4: 4000, 5: 5000, 2: 6000, 1: 8000, 7: 8000, 14: 10000, 15: 10000, 20: 10000, 16: 12000, 13: 15000, 19: 15000, 18: 20000, 21: 20000 }; return accPrice[accessoryId] || 0; }; let purchased = []; let isPurchased = (id) => { return purchased.includes(id); }; /** STORE **/ let storeBuy = (id, index) => { if (isPurchased(id)) { return; } let gold = goldCount(); let cost = 0; if (index === 0) { cost = hatPrice(id); } else if (index === 1) { cost = accPrice(id); } if (gold >= cost) { sendPacket('c', 1, id, index); purchased.push(id); } }; let storeEquip = (id, index) => sendPacket('c', 0, id, index); /** EQUIP WEAPONS **/ let equipWeapon = (weapon) => sendPacket('z', weapon, true); /** SEND CHAT **/ let sendChat = message => sendPacket('6', message); /** AUTO GATHER **/ let autoGather = () => sendPacket('K', 1, 1); /** REQUEST ANIMATION FRAME **/ let requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || (callback => setTimeout(callback, 1000 / 60)); /** HANDLE MESSAGE **/ let handleMessage = (message) => { let decodeData = msgpack.decode(new Uint8Array(message.data)); let data = Array.isArray(decodeData) && decodeData.length > 1 ? [decodeData[0], ...decodeData[1]] : decodeData; if (!data) return; let dataType = data[0]; if (dataType === "C" && myPlayer.id == null) { myPlayer.id = data[1]; } if (dataType == "D" && data[2]) { secondary = null; primary = 0; foodType = 0; wallType = 3; spikeType = 6; millType = 10; spawnpadType = 36; } if (dataType == "V") { if (data[2] == 1) { primary = data[1][0]; secondary = data[1][1] ?? null; } else { foodType = data[1][0]; wallType = data[1][1]; spikeType = data[1][2]; millType = data[1][3]; boostType = data[1][4] ?? -1; haveMine = data[1][5] == 13 || data[1][4] == 14; if (haveMine) { mineType = data[1][5]; } turretType = data[1][5 + (haveMine ? 1 : 0)]; } } if (dataType == "a") updatePlayers(data); if (dataType === "T") updateAge(data[1], data[2], data[3]); if (dataType == "O" && data[1] == myPlayer.id) { let playerID = data[1]; let health = data[2]; updateHealth(health, playerID); } }; /** DISTANCE CALCULATE **/ let distance = (a, b) => { return Math.sqrt(Math.pow(b.y - a[2], 2) + Math.pow(b.x - a[1], 2)); }; /** ANTI ALTCHA **/ document.getElementById('altcha').style.display = 'none'; document.getElementById('altcha_checkbox').click(); /** UPDATE XP/MAXXP/AGE **/ let updateAge = (xp, maxXp, age) => { if (xp != undefined) { myPlayer.XP = xp; } if (maxXp != undefined) { myPlayer.maxXP = maxXp; } if (age != undefined) { myPlayer.age = age; } } /** PLACE **/ let place = (id, angle = Math.atan2(mouseY - height / 2, mouseX - width / 2)) => { if (typeof id !== "number" || id == -1) return; sendPacket("z", id, null); sendPacket("F", 1, angle); sendPacket("F", 0, angle); sendPacket("z", myPlayer.weapon, true); } //sendupgrade function sendUpgrade(index) { //myPlayer.reloads[index] = 0; sendPacket("H", index); } /** HOOK **/ let hook = (target, prop, setter, getter) => { let symbol = Symbol(prop); Object.defineProperty(target, prop, { get() { getter(this, this[symbol]); return this[symbol]; }, set(value) { setter(this, symbol, value); }, configurable: true }) } /** IS TEAM **/ let isTeam = (kaka) => { return kaka.clan == myPlayer.clan; }; /** OPEN/CLOSED **/ let checkMenu = () => { return (allianceMenu.style.display != "block" && chatHolder.style.display != "block" && storeMenu.style.display != "block" && !menuOpened); } /** RENDERING **/ let object = null; hook(Object.prototype, "isItem", function(that, symbol, value) { that[symbol] = value; }, function(that, value) { if (value === true) { object = that; } }); CanvasRenderingContext2D.prototype.restore = new Proxy(CanvasRenderingContext2D.prototype.restore, { apply(target, thisArg, args) { markObject(thisArg); return Reflect.apply(target, thisArg, args); } }); let markColor = (id) => { if (id === myPlayer.id) { return { color: "#00ff00", render: true }; } else { return { color: "#FF4D4D", render: false }; } }; // item.owner.sid let markObject = (ctx) => { if (!object || !object.owner || myPlayer.id === null) return; let distance = Math.sqrt(Math.pow(myPlayer.x - object.x, 2) + Math.pow(myPlayer.y - object.y, 2)); if (distance > 300) return; let type = markColor(object.owner.sid); if (!type.render) return; ctx.fillStyle = type.color; ctx.beginPath(); ctx.arc(0, 0, 10, 0, 2 * Math.PI); ctx.fill(); object = null; }; /** WEAPONS/NAMES/IDS **/ let weapon = { "tool_hammer": 0, "hand_axe": 1, "great_axe": 2, "short_sword": 3, "katana": 4, "polearm": 5, "bat": 6, "daggers": 7, "stick": 8, "hunting_bow": 9, "great_hammer": 10, "wooden_shield": 11, "crossbow": 12, "repeater_crossbow": 13, "mc_grabby": 14, "musket": 15 }; /** UPDATE PLAYERS **/ let updatePlayers = data => { SaVeGe.tick++ let enemies = []; let players = []; let cTickQ = SaVeGe.tickQueue[SaVeGe.tick]; if (Array.isArray(cTickQ)) { cTickQ.forEach((did) => did()); SaVeGe.tickQueue[SaVeGe.tick] = null; } for (let i = 0; i < data[1].length / 13; i++) { let playerInfo = data[1].slice(13 * i, 13 * i + 13); players.push(playerInfo); 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) { enemies.push({ id: playerInfo[0], x: playerInfo[1], y: playerInfo[2], dir: playerInfo[3], object: playerInfo[4], weapon: playerInfo[5], clan: playerInfo[7], isLeader: playerInfo[8], hat: playerInfo[9], accessory: playerInfo[10], isSkull: playerInfo[11] }); } } if (enemies) { nearestEnemy = enemies.sort((a, b) => distance(a, myPlayer) - distance(b, myPlayer))[0]; } let isEnemyNear = nearestEnemy ? (Math.sqrt(Math.pow(myPlayer.y - nearestEnemy.y, 2) + Math.pow(myPlayer.x - nearestEnemy.x, 2)) < 320) : true; enemyAngle = nearestEnemy ? Math.atan2(nearestEnemy.y - myPlayer.y, nearestEnemy.x - myPlayer.x) : (myPlayer?.dir ?? 0) }; /** PLACE REPEATER **/ let placeRepeater = (key, action) => { return { interval: null, action, key, }; } let grindInterval; let repeaters = [ placeRepeater("q", () => { place(foodType); }), placeRepeater("f", () => { place(boostType); }), placeRepeater("v", () => { place(spikeType); }), placeRepeater("F", () => { place(millType); }), placeRepeater("h", () => { place(turretType); }), placeRepeater("t", () => { place(wallType); }), placeRepeater("c",() => { // let c = myPlayer.dir; place(spikeType, myPlayer.dir + toRad(0)); place(spikeType, myPlayer.dir + toRad(120)); place(spikeType, myPlayer.dir - toRad(120)); }), placeRepeater("z",() => { let a = myPlayer.dir; place(boostType, myPlayer.dir + toRad(45)); place(boostType, myPlayer.dir - toRad(45)); place(boostType, myPlayer.dir + toRad(135)); place(boostType, myPlayer.dir - toRad(135)); place(boostType, myPlayer.dir + toRad(0)); place(boostType, myPlayer.dir - toRad(180)); place(boostType, myPlayer.dir + toRad(90)); place(boostType, myPlayer.dir - toRad(90)); place(boostType, a); }), placeRepeater("g", () => { place(spikeType, myPlayer.dir + toRad(90)); place(spikeType, myPlayer.dir - toRad(90)); place(boostType, myPlayer.dir); }), placeRepeater(" ", () => { }), ]; /** HIT **/ let hit = () => { sendPacket("F", 1, enemyAngle); sendPacket("F", 0); } /** SOCKET CONNECTION **/ let socketFound = stuff => { stuff.addEventListener("message", handleMessage); gameCanvas.addEventListener("mousemove", ({ x, y }) => { mouseX = x; mouseY = y; }); window.addEventListener("resize", () => { height = innerHeight; width = innerWidth; }); }; /** MOVEMENT **/ let moveEz = (key, isKeyDown) => { moveKeys[key] = isKeyDown; if ((moveKeys.w || moveKeys.a || moveKeys.s || moveKeys.d) && !locked) { // storeEquip(12, 0); locked = true; } if (!moveKeys.w && !moveKeys.a && !moveKeys.s && !moveKeys.d && locked) { // storeEquip(6, 0); locked = false; } }; let soike = 0; /** AUTO HEAL **/ let defHealSpeed = 120; let autoHeal = (health, damage) => { let cHealSpeed = defHealSpeed; if (health <= 50) { cHealSpeed = 100; place(foodType, null); place(foodType, null); place(foodType, null); place(foodType, null); place(foodType, null); storeEquip(21, 1); } else if (damage >= 30) { cHealSpeed = 110; place(foodType, null); place(foodType, null); place(foodType, null); place(foodType, null); storeBuy(21, 1); storeEquip(21, 1); } if (health < myPlayer.maxHealth) { let healing = setInterval(() => { if (myPlayer.health < myPlayer.maxHealth) { place(foodType, null); } else { clearInterval(healing); } }, cHealSpeed); } }; setInterval(function() { if (soike === 1 && myPlayer.age > 5){ soike = 0; place(spikeType, myPlayer.dir + toRad(45)); place(spikeType, myPlayer.dir - toRad(45)); place(spikeType, myPlayer.dir + toRad(135)); place(spikeType, myPlayer.dir - toRad(135)); place(spikeType, myPlayer.dir + toRad(0)); place(spikeType, myPlayer.dir - toRad(180)); place(spikeType, myPlayer.dir + toRad(90)); place(spikeType, myPlayer.dir - toRad(90)); soike = 0; } }, 100); setInterval(function() { if (myPlayer.hat === 45) { storeEquip(13, 1); } }, 100); /** UPDATE HEALTH **/ let lastHealth = 100; let updateHealth = (health, playerID) => { if (myPlayer.id === playerID) { let damage = Math.max(0, lastHealth - health); myPlayer.health = health; if (myPlayer.health > 0) { autoHeal(myPlayer.health, damage); } lastHealth = health; } else { enemy.health = health; } }; /** INSTA KILL **/ let instaKill = (...instaType) => { let type = instaType[0]; switch (type) { case "normal": sendChat(""); storeBuy(0, 1); storeEquip(0, 1); setTimeout(()=>{ storeBuy(7, 0); storeEquip(7, 0); equipWeapon(primary); hit(); setTimeout(()=>{ equipWeapon(secondary); hit(); storeBuy(53, 0); storeEquip(53, 0); setTimeout(() => { storeBuy(6, 0); storeEquip(6, 0); if (secondary == 15){ equipWeapon(secondary); setTimeout(()=>{ equipWeapon(primary); },1500); } else if (secondary == 12){ equipWeapon(secondary); setTimeout(()=>{ equipWeapon(primary); },1000); } else if (secondary == 13){ equipWeapon(secondary); setTimeout(()=>{ equipWeapon(primary); },400); } setTimeout(() => { storeBuy(11, 1); storeEquip(11, 1); equipWeapon(primary); equipWeapon(secondary); }, 170); }, 170); }, 120); }, 120); break; case "boostTick": sendChat(""); storeEquip(0, 1); place(boostType, null); setTimeout(()=>{ equipWeapon(secondary); storeBuy(53, 0); storeEquip(53, 0); hit(); setTimeout(()=>{ equipWeapon(primary); storeBuy(7, 0); storeEquip(7, 0); if (enemy.health > 0){ place(spikeType, null); } else{ place(foodType, null); } hit(); setTimeout(() => { storeBuy(6, 0); storeEquip(6, 0); setTimeout(() => { storeBuy(11, 1); storeEquip(11, 1); if (secondary == 15){ equipWeapon(secondary); setTimeout(()=>{ equipWeapon(primary); },1500); } else if (secondary == 12){ equipWeapon(secondary); setTimeout(()=>{ equipWeapon(primary); },1000); } else if (secondary == 13){ equipWeapon(secondary); setTimeout(()=>{ equipWeapon(primary); },400); } equipWeapon(primary); equipWeapon(secondary); }, 170); }, 170); }, 110); }, 100); break; case "reverseInsta": sendChat(""); storeEquip(0, 1); setTimeout(()=>{ equipWeapon(secondary); storeBuy(53, 0); storeEquip(53, 0); hit(); setTimeout(()=>{ storeBuy(7, 0); storeEquip(7, 0); hit(); equipWeapon(primary); setTimeout(() => { storeBuy(6, 0); storeEquip(6, 0); setTimeout(() => { storeBuy(11, 1); storeEquip(11, 1); if (secondary == 15){ equipWeapon(secondary); setTimeout(()=>{ equipWeapon(primary); },1500); } else if (secondary == 12){ equipWeapon(secondary); setTimeout(()=>{ equipWeapon(primary); },1000); } else if (secondary == 13){ equipWeapon(secondary); setTimeout(()=>{ equipWeapon(primary); },400); } equipWeapon(primary); equipWeapon(secondary); }, 170); }, 170); }, 100); }, 100); break; case "oneTick": sendChat(""); storeEquip(0, 1); setTimeout(()=>{ equipWeapon(primary); storeBuy(7, 0); storeEquip(7, 0); hit(); setTimeout(()=>{ equipWeapon(secondary); place(spikeType, null); hit(); storeEquip(53, 0); setTimeout(() => { storeBuy(6, 0); storeEquip(6, 0); equipWeapon(primary); setTimeout(() => { storeBuy(11, 1); storeEquip(11, 1); equipWeapon(secondary); }, 800); }, 170); }, 105); }, 100); break; default: sendChat(""); break; } }; let instaKillMode = 0; let isInstaKillModeEnabled = false; let humanBasedInsta = () => { if (!isInstaKillModeEnabled) return; switch (instaKillMode) { case 0: equipWeapon(primary); storeBuy(7, 0); storeEquip(7, 0); hit(); break; case 1: equipWeapon(secondary); storeBuy(53, 0); storeEquip(53, 0); hit(); break; case 2: equipWeapon(primary); storeBuy(6, 0); storeEquip(6, 0); break; case 3: sendChat(""); break; default: sendChat(""); break; } instaKillMode = (instaKillMode + 1) % 4; }; let movementdir; document.addEventListener("keydown", (event) => { if (event.key === "w") { movementdir = -1.57; } }); document.addEventListener("keydown", (event) => { if (event.key === "d") { movementdir = 0; } }); document.addEventListener("keydown", (event) => { if (event.key === "s") { movementdir = 1.57; } }); document.addEventListener("keydown", (event) => { if (event.key === "a") { movementdir = -3.14 } }); document.addEventListener("keydown", (event) => { if (event.key === ",") { storeBuy(31, 0); storeEquip(31, 0); } }); document.addEventListener("keydown", (event) => { if (event.key === ",") { storeBuy(15, 0); storeEquip(15, 0); } }); document.addEventListener("keydown", (event) => { if (event.key === "e") { storeEquip(20, 0); } }); let autoa = false; let aInterval; document.addEventListener("keydown", (event) => { if (event.key === "/") { autoa = !autoa; sendChat(autoa ? "" : ""); if (autoa) { aInterval = setInterval(() => { setTimeout(() => { storeBuy(8, 0); storeEquip(8, 0); setTimeout(() => { storeBuy(15, 0); storeEquip(15, 0); }, 150); }, 150); }, 300); } else { clearInterval(aInterval); } } }); document.addEventListener("keydown", (event) => { if (event.key === "`") { weapongrind = !weapongrind; sendChat(weapongrind ? "ON" : "OFF"); } }); let keys = {}; document.addEventListener("keydown", (event) => { keys[event.code] = true; if (window.location.hostname === "sandbox.moomoo.io") { // Check if both keys are pressed if (keys["KeyW"] && keys["KeyD"]) { movementdir = -0.785; } if (keys["KeyD"] && keys["KeyS"]) { movementdir = 0.785; } if (keys["KeyS"] && keys["KeyA"]) { movementdir = 2.355; } if (keys["KeyA"] && keys["KeyW"]) { movementdir = -2.355; } } }); document.addEventListener("keyup", (event) => { keys[event.code] = false; }); //autospike /** KEY EVENTS **/ document.addEventListener('keydown', ({ key }) => { if (key == 'Escape') { let menu = document.getElementById('modMenu'); if (menu) { if (menu.style.visibility === 'hidden') { menu.style.visibility = 'visible'; menu.style.opacity = '1'; menu.style.transform = 'translate(-50%, -50%) scale(1)'; menuOpened = true; } else { menu.style.opacity = '0'; menu.style.transform = 'translate(-50%, -50%) scale(0.95)'; menuOpened = false; menu.style.visibility = 'hidden'; } } } if (!checkMenu()) return; for (let repeater of repeaters) { if (repeater.key === key && repeater.interval === null) { repeater.interval = setInterval( repeater.action, 100 ); } } // if (key in moveKeys) moveEz(key, true); if (key == "r") { let instaTypes = document.getElementById('instaKillType'); let instaType = instaTypes.value; instaKill(instaType); } }); document.addEventListener('keyup', ({ key }) => { if (!checkMenu()) return; for (let repeater of repeaters) { if (repeater.key === key && repeater.interval !== null) { clearInterval(repeater.interval); repeater.interval = null; } } // if (key in moveKeys) moveEz(key, false); }); function toRad(angle) { return angle * 0.01745329251; } let automill = false; let millInterval; if (window.location.hostname === "sandbox.moomoo.io") { document.addEventListener("keydown", (event) => { if (event.key === "=") { automill = !automill; if (automill) { millInterval = setInterval(() => { place(millType, movementdir - 1.90); place(millType, movementdir - 3.14); place(millType, movementdir + 1.90); }, 135); } else { clearInterval(millInterval); }; } }); }; /** MOUSE EVENTS **/ document.addEventListener('mousedown', (mouse) => { if (!checkMenu()) return; if (mouse.button === 0 && !lockers.attacker) { humanBasedInsta(); if (!isInstaKillModeEnabled) { storeBuy(11, 1); storeEquip(0, 1); equipWeapon(primary); setTimeout(()=>{ storeBuy(7, 0); storeEquip(7, 0); autoGather(); }, 100); lockers.attacker = true; } } if (mouse.button === 2 && !lockers.breaker) { if (!isInstaKillModeEnabled) { sendChat(""); storeBuy(40, 0); storeEquip(40, 0); autoGather(); lockers.breaker = true; } if (secondary == 10 && weapongrind == false) { equipWeapon(secondary); } } }); document.addEventListener('mouseup', (mouse) => { if (!checkMenu()) return; if (mouse.button === 0 && lockers.attacker) { if (!isInstaKillModeEnabled) { storeBuy(11, 1); storeEquip(11, 1); autoGather(); setTimeout(()=>{ storeBuy(6, 0); storeEquip(6, 0); }, 200); lockers.attacker = false; } } if (mouse.button === 2 && lockers.breaker) { if (!isInstaKillModeEnabled) { storeBuy(6, 0); storeEquip(6, 0); autoGather(); lockers.breaker = false; } } }); let prevCount = 0; const handleMutations = (mutationsList) => { for (const mutation of mutationsList) { if (mutation.target.id === "killCounter") { const count = parseInt(mutation.target.innerText, 10) || 0; if (count > prevCount) { sendChat("Pls, say hi to Good Guy,"); setTimeout(()=>{ sendChat("When you meet him :D"); },650); prevCount = count; } } } }; const observer = new MutationObserver(handleMutations); observer.observe(document, { subtree: true, childList: true, }); setInterval(function() { if (myPlayer.y > 6830 && myPlayer.y < 7600) { storeBuy(31, 0); storeEquip(31, 0); } }, 130); setInterval(function() { if (myPlayer.y < 2400) { storeEquip(15, 0); storeEquip(15, 0); } }, 900); setInterval(function() { storeBuy(11, 1); }, 100); setInterval(function() { storeBuy(6, 0); }, 100); setInterval(function() { storeBuy(7, 0); }, 100); setInterval(function() { storeBuy(40, 0); }, 100); /* STYLING AND MOD MENUS UNDER */ /** MOD MENU **/ let createModMenu = () => { let menuContainer = document.createElement('div'); menuContainer.id = 'modMenu'; menuContainer.innerHTML = `