// ==UserScript== // @name Zombs.io Bad Hack // @namespace https://tampermonkey.net/ // @version 4.3.3 // @description The best public script for zombs.io // @author vn_Havy // @match http://zombs.io/* // @require https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js // @downloadURL none // ==/UserScript== document.querySelectorAll('.ad-unit, .ad-unit-medrec, .hud-intro-guide-hints, .hud-intro-left, .hud-intro-youtuber, .hud-intro-footer, .hud-intro-stone, .hud-intro-tree, .hud-intro-social, .hud-intro-more-games, .hud-intro-guide, .hud-day-night-overlay, .hud-respawn-share, .hud-party-joining, .hud-respawn-corner-bottom-left').forEach(el => el.remove()); document.getElementsByClassName('hud-intro-name')[0].setAttribute('maxlength', 29); document.getElementsByClassName('hud-party-tag')[0].setAttribute('maxlength', 49); document.querySelector(".hud-chat-messages").style.width = "2000px"; document.getElementsByClassName("hud-top-center")[0].innerHTML = ` `; document.getElementById('shopshortcut1').addEventListener('click', buyPickaxe); document.getElementById('shopshortcut2').addEventListener('click', buySpear); document.getElementById('shopshortcut3').addEventListener('click', buyBow); document.getElementById('shopshortcut4').addEventListener('click', buyBomb); document.getElementById('shopshortcut5').addEventListener('click', () => {shopShortcut("HealthPotion", 1)}); document.getElementById('shopshortcut6').addEventListener('click', () => {shopShortcut("PetHealthPotion", 1)}); document.getElementById('shopshortcut7').addEventListener('click', buyZombieShield); document.getElementById('shopshortcut8').addEventListener('click', () => {Game.currentGame.network.sendRpc({name: "DeleteBuilding", uid: game.ui.getPlayerPetUid()})}); document.getElementById('shopshortcut9').addEventListener('click', () => {buyPet("PetMiner", getPetTier(6))}); document.getElementById('shopshortcut10').addEventListener('click', () => {buyPet("PetCARL", getPetTier(5))}); function buyPet(item, tier) { if (game.ui.getPlayerPetName() == item) { shopShortcut("PetRevive", 1) } else { let i = 0 let j = setInterval(function() { shopShortcut(item, tier) i++ if (i >= 25 || game.ui.getPlayerPetName() == item) { i = 0 clearInterval(j) } },250); } } function getPetTier(num) { if (document.querySelectorAll(".hud-shop-item-tier")[5].childNodes[0].textContent.match(/\d+/) != null) { let petLevel = document.querySelectorAll(".hud-shop-item-tier")[num].childNodes[0].textContent.match(/\d+/)[0] if (petLevel <= 8) return 1 if (petLevel <= 16) return 2 if (petLevel <= 24) return 3 if (petLevel <= 32) return 4 if (petLevel <= 48) return 5 if (petLevel <= 64) return 6 if (petLevel <= 96) return 7 if (petLevel > 96) return 8 } else return 8 } function equipItem(item, tier) { game.network.sendRpc({ name: "EquipItem", itemName: item, tier: tier }) }; function buyItem(item, tier) { game.network.sendRpc({ name: "BuyItem", itemName: item, tier: tier }) } function shopShortcut(item, tier) { buyItem(item, tier) if (game.ui.playerWeaponName !== item) { equipItem(item, tier) } } function buyPickaxe() { let gold = game.ui.playerTick.gold let pickaxe = game.ui.inventory.Pickaxe if (pickaxe.tier == 1 && gold >= 1000) { shopShortcut("Pickaxe", 2) return } if (pickaxe.tier == 2 && gold >= 3000) { shopShortcut("Pickaxe", 3); return } if (pickaxe.tier == 3 && gold >= 5000) { shopShortcut("Pickaxe", 4); return } if (pickaxe.tier == 4 && gold >= 8000) { shopShortcut("Pickaxe", 5); return } if (pickaxe.tier == 5 && gold >= 24000) { shopShortcut("Pickaxe", 6); return } if (pickaxe.tier == 6 && gold >= 90000) { shopShortcut("Pickaxe", 7); return } else if (game.ui.playerWeaponName !== "Pickaxe") { equipItem("Pickaxe", game.ui.inventory.Pickaxe.tier) } } function buySpear() { let gold = game.ui.playerTick.gold let spear = game.ui.inventory.Spear if (!spear && gold >= 1400) { shopShortcut("Spear", 1) return } if (spear.tier == 1 && gold >= 2800) { shopShortcut("Spear", 2) return } if (spear.tier == 2 && gold >= 5600) { shopShortcut("Spear", 3) return } if (spear.tier == 3 && gold >= 11200) { shopShortcut("Spear", 4) return } if (spear.tier == 4 && gold >= 22500) { shopShortcut("Spear", 5) return } if (spear.tier == 5 && gold >= 45000) { shopShortcut("Spear", 6) return } if (spear.tier == 6 && gold >= 90000) { shopShortcut("Spear", 7) return } else if (game.ui.playerWeaponName !== "Spear"){ equipItem("Spear", game.ui.inventory.Spear.tier) } } function buyBow() { let gold = game.ui.playerTick.gold let bow = game.ui.inventory.Bow if (!bow && gold >= 100) { shopShortcut("Bow", 1) return } if (bow.tier == 1 && gold >= 400) { shopShortcut("Bow", 2) return } if (bow.tier == 2 && gold >= 2000) { shopShortcut("Bow", 3) return } if (bow.tier == 3 && gold >= 7000) { shopShortcut("Bow", 4) return } if (bow.tier == 4 && gold >= 24000) { shopShortcut("Bow", 5) return } if (bow.tier == 5 && gold >= 30000) { shopShortcut("Bow", 6) return } if (bow.tier == 6 && gold >= 90000) { shopShortcut("Bow", 7) return } else if (game.ui.playerWeaponName !== "Bow"){ equipItem("Bow", game.ui.inventory.Bow.tier) } } function buyBomb() { let gold = game.ui.playerTick.gold let bomb = game.ui.inventory.Bomb if (!bomb && gold >= 100) { shopShortcut("Bomb", 1) return } if (bomb.tier == 1 && gold >= 400) { shopShortcut("Bomb", 2) return } if (bomb.tier == 2 && gold >= 3000) { shopShortcut("Bomb", 3) return } if (bomb.tier == 3 && gold >= 5000) { shopShortcut("Bomb", 4) return } if (bomb.tier == 4 && gold >= 24000) { shopShortcut("Bomb", 5) return } if (bomb.tier == 5 && gold >= 50000) { shopShortcut("Bomb", 6) return } if (bomb.tier == 6 && gold >= 90000) { shopShortcut("Bomb", 7) return } else if (game.ui.playerWeaponName !== "Bomb"){ equipItem("Bomb", game.ui.inventory.Bomb.tier) } } function buyZombieShield() { let gold = game.ui.playerTick.gold let shield = game.ui.inventory.ZombieShield if (!shield && gold >= 1000) { buyItem("ZombieShield", 1) return } if (shield.tier == 1 && gold >= 3000) { buyItem("ZombieShield", 2) return } if (shield.tier == 2 && gold >= 7000) { buyItem("ZombieShield", 3) return } if (shield.tier == 3 && gold >= 14000) { buyItem("ZombieShield", 4) return } if (shield.tier == 4 && gold >= 18000) { buyItem("ZombieShield", 5) return } if (shield.tier == 5 && gold >= 22000) { buyItem("ZombieShield", 6) return } if (shield.tier == 6 && gold >= 24000) { buyItem("ZombieShield", 7) return } if (shield.tier == 7 && gold >= 30000) { buyItem("ZombieShield", 8) return } if (shield.tier == 8 && gold >= 45000) { buyItem("ZombieShield", 9) return } if (shield.tier == 9 && gold >= 70000) { buyItem("ZombieShield", 10) return } } //Iframe start // menu stuff start document.querySelector('#hud').insertAdjacentHTML('beforeend', `
`) let mm = document.getElementsByClassName("hud-menu-more")[0]; function moreMenu() { if(["none", ""].includes(mm.style.display)) { mm.style.display = "block"; for(let i of Array.from(document.getElementsByClassName("hud-menu"))) { if(i.classList.contains('hud-menu-more')) { return; }; i.style.display = "none"; }; } else { mm.style.display = "none"; }; }; document.getElementsByClassName("hud-menu-icons")[0].insertAdjacentHTML("beforeend", `
`); document.querySelectorAll(".hud-menu-icon")[3].addEventListener("click", moreMenu) document.getElementsByClassName("hud-menu-more")[0].style.overflow = "auto"; for (let i of Array.from(document.querySelector("#hud").childNodes)) { if (i.className != "hud-menu-more" && i.className != "hud-center-right" && i.className != "hud-center-left") { i.addEventListener('click', function() { if (document.getElementsByClassName("hud-menu-more")[0].style.display == "block") { document.getElementsByClassName("hud-menu-more")[0].style.display = "none"; }; }); }; }; for (let i of Array.from(document.getElementsByClassName("hud-menu-icon"))) { if (i.dataset.type !== "Iframe") { i.addEventListener('click', function() { if (document.getElementsByClassName("hud-menu-more")[0].style.display == "block") { document.getElementsByClassName("hud-menu-more")[0].style.display = "none"; }; }); }; }; for (let i of Array.from(document.getElementsByClassName("hud-spell-icon"))) { if (i.dataset.type !== "HealTowersSpell" && i.dataset.type !== "TimeoutItem") { i.addEventListener('click', function() { if (document.getElementsByClassName("hud-menu-more")[0].style.display == "block") { document.getElementsByClassName("hud-menu-more")[0].style.display = "none"; }; }); }; }; document.addEventListener("keyup", e => { if (document.activeElement.tagName.toLowerCase() !== "input" && document.activeElement.tagName.toLowerCase() !== "textarea") { if (e.key === "o" || e.key === "p" || e.key === "b" || e.key === "/" || e.keyCode == 27) { if (mm.style.display == "block") { mm.style.display = "none"; } } } }) //menu stuff end let numOfAlts = 0 document.getElementById("newalt").addEventListener("click", function() { numOfAlts++; let newDiv = document.createElement('div'); newDiv.className = "frameholder"; newDiv.id = "frame" + numOfAlts; let newIframe = document.createElement('iFrame'); newIframe.className = "frames"; newIframe.src = `http://zombs.io/#/${game.options.serverId}/${game.ui.playerPartyShareKey}`; document.getElementsByClassName("hud-menu-more")[0].insertBefore(newDiv, null); newDiv.appendChild(newIframe); }); document.getElementById("delallalt").addEventListener("click", function F_deleteAllAlt() { for (let i = 1; i <= numOfAlts; i++) { document.getElementById("frame" + i).remove(); } numOfAlts = 0; }); document.getElementById("delalt").addEventListener("click", function F_deleteAlt() { let deletealtnum = parseInt(document.getElementById('delid').value); document.getElementById("frame" + deletealtnum).remove(); for (let i = 1; i <= (numOfAlts - deletealtnum); i++) { document.getElementById("frame" + (deletealtnum + i)).id = "frame" + (deletealtnum + i - 1); } numOfAlts--; }); //Iframe end let mapTimeouts = []; function createCoordinates() { let x = document.createElement('div') x.style = 'position: relative;top: 17px;right: 0px;font-weight: 600;font-family: "Hammersmith One";text-shadow: 1px 0 0 #fff, -1px 0 0 #fff, 0 1px 0 #fff, 0 -1px 0 #fff, 0.5px 0.5px #fff, -0.5px -0.5px 0 #fff, 0.5px -0.5px 0 #fff, -0.5px 0.5px 0 #fff;'; x.innerHTML = `

X: 0, Y: 0

` x.style.textAlign = "center" document.querySelector("#hud > div.hud-bottom-left").append(x) } let mapMouseX; let mapMouseY; let hasBeenInWorld = false; game.network.addEnterWorldHandler(function () { if(!hasBeenInWorld) { hasBeenInWorld = true setInterval(() => { document.querySelector("#coords") .innerText = `X: ${game.world.localPlayer.entity.targetTick.position.x}, Y: ${game.world.localPlayer.entity.targetTick.position.y}` }, 16) createCoordinates() } setTimeout(() => { document.querySelectorAll(".hud-shop-item-social")[0].childNodes[1].href = "javascript:void(0)" document.querySelectorAll(".hud-shop-item-social")[0].childNodes[1].removeAttribute('target') setTimeout(() => { document.querySelectorAll(".hud-shop-social-twitter.is-disabled")[0].click() },2000) }, 4000); }) var mousemove; addEventListener('mousemove', (e) => { mousemove = e; }) var isSpamming = 0; function pauseChatSpam(e) { if (!isSpamming) { window.spammer = setInterval(() => { game.network.sendRpc({ name: "SendChatMessage", channel: "Local", message: e }) }, 100) } else if (isSpamming) { clearInterval(window.spammer) } isSpamming = !isSpamming } var autoRespawn = false game.network.addRpcHandler('ReceiveChatMessage', function(e) { if(e.uid == game.ui.playerTick.uid) { if(e.message == "!boss") { setTimeout(() => { game.network.sendRpc({ name: "SendChatMessage", message: "9, 17, 25, 33, 41, 49, 57, 65, 73, 81, 89, 97, 105, 121", channel: "Local" }); }, 1000); }; if(e.message == "!marker") { var map = document.getElementById("hud-map"); map.insertAdjacentHTML("beforeend", `
`) game.ui.components.PopupOverlay.showHint(`Added Marker`); }; }; }); function getEntitiesByModel(type) { let entities = [] Object.entries(game.world.entities) .forEach((item => { if (item[1].targetTick.model == type) { entities.push(item) } })) return entities; } function moveUp() { game.inputPacketScheduler.scheduleInput({ down: 0, up: 1 }) } function moveDown() { game.inputPacketScheduler.scheduleInput({ up: 0, down: 1 }) } function moveLeft() { game.inputPacketScheduler.scheduleInput({ right: 0, left: 1 }) } function moveRight() { game.inputPacketScheduler.scheduleInput({ left: 0, right: 1 }) } var danceCounter = 0 var danceRandom = true var botMode = false var danceInterval = setInterval(() => { if (botMode) { if (danceCounter < moves.length) { moves[danceCounter]() if (danceRandom) { danceCounter = Math.floor(Math.random() * moves.length) } else { danceCounter++ } } else { danceCounter = 0; } } }, 500) var respawnInterval = setInterval(() => { if (document.querySelector('.hud-respawn').style.display == "block" && autoRespawn) { document.querySelector('.hud-respawn-btn').click() } }, 50) var moves = [moveUp, moveRight, moveDown, moveLeft] window.useSamePI = false window.showpriv = true if (game.world.inWorld === false) { game.network.addPreEnterWorldHandler(() => { setInterval(() => { document.getElementsByClassName('hud-party-grid')[0].innerHTML = ''; function checkStatus(party) { if (window.showpriv == true) { if(party.isOpen == 1) { return '[Open]'; } else if(!party.isOpen == 1) { return '[Private]'; } } else { return ''; } }; let all_parties = game.ui.parties; for(let i in all_parties) { let parties = all_parties[i]; let tab = document.createElement('div'); tab.classList.add('hud-party-link'); tab.classList.add('custom-party'); tab.id = parties.partyId; tab.isPublic = parties.isOpen; tab.name = parties.partyName; tab.members = parties.memberCount; tab.innerHTML = ` ${parties.partyName} ${checkStatus(parties)} id: ${parties.partyId} ${parties.memberCount}/4 `; if(parties.memberCount == 4) { tab.classList.add('is-disabled'); } else { tab.style.display = 'block'; } if(parties.partyName == document.getElementsByClassName('hud-party-tag')[0].value) { tab.classList.add('is-active'); } if (parties.isOpen !== 1 && window.showpriv == false) { tab.style.display = 'none'; } //function for requesting tab.addEventListener('click', function() { let isJoining = true; if(tab.isPublic == 1 && tab.members < 4) { isJoining = true; game.network.sendRpc({ name: 'JoinParty', partyId: Math.floor(tab.id) }); } else if(!tab.isPublic == 1) { isJoining = false; game.ui.components.PopupOverlay.showHint("You can't request private parties!"); } }); document.getElementsByClassName('hud-party-grid')[0].appendChild(tab); }; },5000); }); } window.isInMenu = false; function movePlayer(e) { if (!_isInChatbox) { switch (e.toLowerCase() .replaceAll(' ', '')) { case "a": Game.currentGame.network.sendInput({ left: 1 }) break; case "d": Game.currentGame.network.sendInput({ right: 1 }) break; case "w": Game.currentGame.network.sendInput({ up: 1 }) break; case "s": Game.currentGame.network.sendInput({ down: 1 }) break; } } } var lpinterval = setInterval(function () { // loaded player info, ahrc, isInMenu, noob = chatbot document.querySelector('#lpi') .innerText = "Loaded Player Info: " + JSON.stringify(window.loadedIDS()) window.isInMenu = document.querySelector('#hud-menu-settings') .style.display == "block" ? true : false }, 250) let settingsHTML = `

Normal Use













For iFrame Alts Only


Turn this on will auto leave party right after night and join back before night, dont enable this on your main tab!

Advanced Player Info?


Zoom On Scroll?


Loaded Player Info:

` document.getElementById("hud-menu-settings").childNodes[3].innerHTML = "Bad Hack by ︵ℌαʋү༉" document.getElementsByClassName("hud-settings-grid")[0].innerHTML = settingsHTML; let cssMain = ` #hud-menu-shop { top: 58%; left: 51%; width: 690px; height: 450px; margin: -350px 0 0 -350px; padding: 20px 20px 20px 20px; } .hud-menu-shop .hud-shop-grid { height: 330px; } #hud-menu-settings { top: 55%; left: 48%; width: 780px; height: 500px; margin: -350px 0 0 -350px; padding: 20px 20px 20px 20px; } .hud-menu-settings .hud-settings-grid { width: 750px; height: 420px; `; let stylesMain = document.createElement("style"); stylesMain.appendChild(document.createTextNode(cssMain)); document.head.appendChild(stylesMain); stylesMain.type = "text/css"; document.getElementById('lagspam-btn').addEventListener('click', lagSpam) document.getElementById('lagspam-btn').addEventListener('click', lagSpambtn) document.getElementById("spamallparty-btn").addEventListener("click", spamAllParty); document.getElementById("spamallparty-btn").addEventListener("click", spamAllPartybtn); document.getElementById("newtab").addEventListener("click", () => window.open(`http://zombs.io/#/${game.options.serverId}/${game.ui.getPlayerPartyShareKey()}`)); document.getElementById("autoupgradeall-btn").addEventListener("click", autoUpgradeAll); document.getElementById("autoupgradeall-btn").addEventListener("click", autoUpgradeAllbtn); document.getElementById("spampartybyid-btn").addEventListener("click", spamPartyByID); document.getElementById("spampartybyid-btn").addEventListener("click", spamPartyByIDbtn); document.getElementById("autoaccept-btn").addEventListener("click", autoAcceptParty); document.getElementById("autoaccept-btn").addEventListener("click", autoAcceptPartybtn); document.getElementById("toggleswing").addEventListener("click", toggleSwing) document.getElementById("toggleahrc").addEventListener("click", toggleAHRC) document.getElementById("toggleaim").addEventListener("click", toggleAim) document.getElementById("togglerb").addEventListener("click", toggleRebuild); document.getElementById("togglespinner").addEventListener("click", spinnerbtn); document.getElementById("togglespinner").addEventListener("click", F_spinner); document.getElementById("healplayer").addEventListener("click", toggleHealPlayer); document.getElementById("healpet").addEventListener("click", toggleHealPet); document.getElementById("revivepet").addEventListener("click", toggleRevivePet); document.getElementById("evolvepet").addEventListener("click", toggleEvolvePet); document.getElementById("sellwall").addEventListener('click', () => { sellAllByType("Wall") }); document.getElementById("selldoor").addEventListener('click', () => { sellAllByType("Door") }); document.getElementById("selltrap").addEventListener('click', () => { sellAllByType("SlowTrap") }); document.getElementById("sellarrow").addEventListener('click', () => { sellAllByType("ArrowTower") }); document.getElementById("sellcannon").addEventListener('click', () => { sellAllByType("CannonTower") }); document.getElementById("sellmelee").addEventListener('click', () => { sellAllByType("MeleeTower") }); document.getElementById("sellbomb").addEventListener('click', () => { sellAllByType("BombTower") }); document.getElementById("sellmagic").addEventListener('click', () => { sellAllByType("MagicTower") }); document.getElementById("sellminer").addEventListener('click', () => { sellAllByType("GoldMine") }); document.getElementById("sellharvester").addEventListener('click', () => { sellAllByType("Harvester") }); document.getElementById("hidechat").addEventListener("click", hideChat); document.getElementById("hidepop").addEventListener("click", hidePopupOverlay); document.getElementById("hideldb").addEventListener("click", hideLeaderboard); document.getElementById("hidemap").addEventListener("click", hideMap); document.getElementById("hidess").addEventListener("click", hideShopShortcut); document.getElementById("hideground").addEventListener("click", hideGround); document.getElementById("hidenpcs").addEventListener("click", hideNPCs); document.getElementById("hideenv").addEventListener("click", hideEnviroment); document.getElementById("hideproj").addEventListener("click", hideProjectiles); document.getElementById("hideall").addEventListener("click", hideAll); document.getElementById("freezegame").addEventListener("click", freezeGame); document.getElementById("alttrick").addEventListener("click", altTrick); document.querySelector('#clearchat-btn').addEventListener('click', clearChat) document.querySelector('#clearchat-btn').addEventListener('click', clearChatbtn) document.querySelector('#menu-leaveparty-btn').addEventListener('click', onLeaveParty) document.querySelector('#spamchatbtn').addEventListener('click', spamchatclick) function hideGround() { if (document.getElementById("hideground").innerHTML == "Show Ground") { document.getElementById("hideground").innerHTML = "Hide Ground" game.renderer.ground.setVisible(true) } else { document.getElementById("hideground").innerHTML = "Show Ground" game.renderer.ground.setVisible(false) } } function hideNPCs() { if (document.getElementById("hidenpcs").innerHTML == "Show NPCs") { document.getElementById("hidenpcs").innerHTML = "Hide NPCs" game.renderer.npcs.setVisible(true) } else { document.getElementById("hidenpcs").innerHTML = "Show NPCs" game.renderer.npcs.setVisible(false) } } function hideEnviroment() { if (document.getElementById("hideenv").innerHTML == "Show Env") { document.getElementById("hideenv").innerHTML = "Hide Env" game.renderer.scenery.setVisible(true) } else { document.getElementById("hideenv").innerHTML = "Show Env" game.renderer.scenery.setVisible(false) } } function hideProjectiles() { if (document.getElementById("hideproj").innerHTML == "Show Proj") { document.getElementById("hideproj").innerHTML = "Hide Proj" game.renderer.projectiles.setVisible(true) } else { document.getElementById("hideproj").innerHTML = "Show Proj" game.renderer.projectiles.setVisible(false) } } function hideAll() { if (document.getElementById("hideall").innerHTML == "Show All") { document.getElementById("hideall").innerHTML = "Hide All" game.renderer.scene.setVisible(true) } else { document.getElementById("hideall").innerHTML = "Show All" game.renderer.scene.setVisible(false) } } function freezeGame() { if (document.getElementById("freezegame").innerHTML == "Start Game") { document.getElementById("freezegame").innerHTML = "Stop Game" game.start() } else { document.getElementById("freezegame").innerHTML = "Start Game" game.stop() } } let sellUid = [] function sellAllByType(type) { let buildings = Object.values(game.ui.buildings) for (let i = 0; i < buildings.length; i++){ if (Object.values(Object.values(game.ui.buildings)[i])[2] == type){ sellUid.push(Object.values(Object.values(game.ui.buildings)[i])[4]) } } let sellInterval = setInterval(() => { if (sellUid.length > 0 && game.ui.playerPartyCanSell) { game.network.sendRpc({ name: "DeleteBuilding", uid: parseInt(sellUid.shift()) }) } else { clearInterval(sellInterval) } },document.getElementById("sell-input").value); } document.getElementById("sellall").addEventListener('click', function() { Game.currentGame.ui.getComponent("PopupOverlay").showConfirmation("Are you sure you want to delete all towers?", 1e4, function() { let buildings = Object.values(game.ui.buildings) for (let i = 0; i < buildings.length; i++){ if (Object.values(Object.values(game.ui.buildings)[i])[2] != "GoldStash"){ sellUid.push(Object.values(Object.values(game.ui.buildings)[i])[4]) } } let sellInterval = setInterval(() => { if (sellUid.length > 0 && game.ui.playerPartyCanSell) { game.network.sendRpc({ name: "DeleteBuilding", uid: parseInt(sellUid.shift()) }) } else { clearInterval(sellInterval) } },document.getElementById("sell-input").value); }) }) function onLeaveParty() { Game.currentGame.network.sendRpc({ name: "LeaveParty" }) } function hideChat() { if (document.getElementsByClassName("hud-top-left")[0].style.display === "none" && document.getElementById("hidechat").innerHTML == "Show Chat"){ document.getElementsByClassName("hud-top-left")[0].style.display = "block"; document.getElementById("hidechat").innerHTML = "Hide Chat"; } else { document.getElementsByClassName("hud-top-left")[0].style.display = "none"; document.getElementById("hidechat").innerHTML = "Show Chat"; } } function hidePopupOverlay() { if (document.getElementById("hud-popup-overlay").style.display === "none" && document.getElementById("hidepop").innerHTML == "Show Popup") { document.getElementById("hud-popup-overlay").style.display = "block"; document.getElementById("hidepop").innerHTML = "Hide Popup"; } else { document.getElementById("hud-popup-overlay").style.display = "none"; document.getElementById("hidepop").innerHTML = "Show Popup"; } } function hideLeaderboard() { if (document.getElementById("hud-leaderboard").style.display === "none" && document.getElementById("hideldb").innerHTML == "Show Leaderboard") { document.getElementById("hud-leaderboard").style.display = "block"; document.getElementById("hideldb").innerHTML = "Hide Leaderboard"; } else { document.getElementById("hud-leaderboard").style.display = "none"; document.getElementById("hideldb").innerHTML = "Show Leaderboard"; } } function hideMap() { if (document.getElementsByClassName("hud-bottom-left")[0].style.display === "none" && document.getElementById("hidemap").innerHTML == "Show Map") { document.getElementsByClassName("hud-bottom-left")[0].style.display = "block"; document.getElementById("hidemap").innerHTML = "Hide Map"; } else { document.getElementsByClassName("hud-bottom-left")[0].style.display = "none"; document.getElementById("hidemap").innerHTML = "Show Map"; } } function hideShopShortcut() { if (document.getElementsByClassName("hud-top-center")[0].style.display === "none" && document.getElementById("hidess").innerHTML == "Show Shop Shortcut"){ document.getElementsByClassName("hud-top-center")[0].style.display = "block"; document.getElementById("hidess").innerHTML = "Hide Shop Shortcut"; } else { document.getElementsByClassName("hud-top-center")[0].style.display = "none"; document.getElementById("hidess").innerHTML = "Show Shop Shortcut"; } } function lagSpambtn() { if (document.getElementById("lagspam-btn").innerHTML == "Lag Spam On") { document.getElementById("lagspam-btn").innerHTML = "Lag Spam Off"; } else { document.getElementById("lagspam-btn").innerHTML = "Lag Spam On"; } } let availableCharacters = "" let textLength = 70; fetch('https://raw.githubusercontent.com/bits/UTF-8-Unicode-Test-Documents/master/UTF-8_sequence_unseparated/utf8_sequence_0-0xffff_assigned_printable_unseparated.txt') .then(response => response.text()) .then(data => { availableCharacters = data; }); var chatSpam = null; function lagSpam() { clearInterval(chatSpam); if (chatSpam !== null) { chatSpam = null; } else { chatSpam = setInterval(function() { let text = "" for (let i = 0; i < textLength; i++) text += availableCharacters[Math.floor(Math.random() * availableCharacters.length)]; game.network.sendRpc({ name: "SendChatMessage", channel: "Local", message: text }); },1050); }; }; function spamAllPartybtn() { if (document.getElementById("spamallparty-btn").innerHTML == "Spam All Party On") { document.getElementById("spamallparty-btn").innerHTML = "Spam All Party Off"; } else { document.getElementById("spamallparty-btn").innerHTML = "Spam All Party On"; } } var partyspam = null; function spamAllParty() { clearInterval(partyspam); if (partyspam !== null) { partyspam = null; } else { partyspam = setInterval(function() { var party = document.getElementsByClassName('hud-party-link'); for (var i = 0; i < party.length; i++) { var link = party[i]; link.click(); } var confirm = document.getElementsByClassName("btn btn-green hud-confirmation-accept"); for (var j = 0; j < confirm.length; j++) { var accept = confirm[j]; accept.click(); } },10); } } function autoAcceptPartybtn() { if (document.getElementById("autoaccept-btn").innerHTML == "Accepter On") { document.getElementById("autoaccept-btn").innerHTML = "Accepter Off"; } else { document.getElementById("autoaccept-btn").innerHTML = "Accepter On"; } } var acceptparty = null; function autoAcceptParty() { clearInterval(acceptparty); if (acceptparty !== null) { acceptparty = null; } else { acceptparty = setInterval(function() { var confirm = document.getElementsByClassName("btn btn-green hud-confirmation-accept"); for (var j = 0; j < confirm.length; j++) { confirm[j].click(); } },10); } } function autoUpgradeAllbtn() { if (document.getElementById("autoupgradeall-btn").innerHTML == "Upgrade On") { document.getElementById("autoupgradeall-btn").innerHTML = "Upgrade Off"; } else { document.getElementById("autoupgradeall-btn").innerHTML = "Upgrade On"; } } var autoupgradeall = null; function autoUpgradeAll() { clearInterval(autoupgradeall); if (autoupgradeall !== null) { autoupgradeall = null; } else { autoupgradeall = setInterval(function() { var entities = Game.currentGame.world.entities; for (var uid in entities) { if (!entities.hasOwnProperty(uid)) continue; var obj = entities[uid]; Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: obj.fromTick.uid }) } },1000) } } function spamPartyByIDbtn() { if (document.getElementById("spampartybyid-btn").innerHTML == "Spam Party By ID On") { document.getElementById("spampartybyid-btn").innerHTML = "Spam Party By ID Off"; } else { document.getElementById("spampartybyid-btn").innerHTML = "Spam Party By ID On"; } } var spampartyid = null; function spamPartyByID() { clearInterval(spampartyid); if (spampartyid !== null) { spampartyid = null; } else { spampartyid = setInterval(function() { game.network.sendRpc({ name: "JoinParty", partyId: parseInt(document.querySelector("#party-id-input").value) }) },0) } } function clearChatbtn() { if (document.getElementById("clearchat-btn").innerHTML == "Clear Chat On") { document.getElementById("clearchat-btn").innerHTML = "Clear Chat Off"; } else { document.getElementById("clearchat-btn").innerHTML = "Clear Chat On"; } } var shouldClearChat = null; function clearChat() { clearInterval(shouldClearChat); if (shouldClearChat !== null) { shouldClearChat = null; } else { shouldClearChat = setInterval(function () { document.querySelector('.hud-chat-messages').innerHTML = "" },500) } } function spinnerbtn() { if (document.getElementById("togglespinner").innerHTML == "Spinner On") { document.getElementById("togglespinner").innerHTML = "Spinner Off"; } else { document.getElementById("togglespinner").innerHTML = "Spinner On"; } } var spinner = null; function F_spinner() { clearInterval(spinner); if (spinner !== null) { spinner = null; } else { let yaw = 0 spinner = setInterval(function () { game.inputPacketCreator.lastAnyYaw = yaw; game.network.sendPacket(3, {mouseMoved: yaw}); yaw += 60 if (yaw >= 359) yaw = 0 },40) } } function altTrick() { if (!shouldAltTrick) { shouldAltTrick = true document.getElementById("alttrick").innerHTML = "Player Trick On"; } else { shouldAltTrick = false document.getElementById("alttrick").innerHTML = "Player Trick Off"; } } function toggleRebuild() { if (!shouldAutoRebuild) { shouldAutoRebuild = true document.getElementById("togglerb").innerHTML = "Rebuild On"; } else { shouldAutoRebuild = false document.getElementById("togglerb").innerHTML = "Rebuild Off"; } } function toggleSwing () { if (!autoSwing) { autoSwing = true; document.getElementById("toggleswing").innerHTML = "Swing On"; } else { autoSwing = false; document.getElementById("toggleswing").innerHTML = "Swing Off"; } } function toggleAHRC () { if (!shouldAHRC) { shouldAHRC = true; document.getElementById("toggleahrc").innerHTML = "AHRC On"; } else { shouldAHRC = false; document.getElementById("toggleahrc").innerHTML = "AHRC Off"; } } function toggleAim () { if (!shouldAutoAim) { shouldAutoAim = true; document.getElementById("toggleaim").innerHTML = "Aim On"; } else { shouldAutoAim = false; document.getElementById("toggleaim").innerHTML = "Aim Off"; } } function toggleHealPet () { if (!shouldAutoHealPet) { shouldAutoHealPet = true; document.getElementById("healpet").innerHTML = "Heal Pet On"; } else { shouldAutoHealPet = false; document.getElementById("healpet").innerHTML = "Heal Pet Off"; } } function toggleRevivePet () { if (!shouldAutoRevivePet) { shouldAutoRevivePet = true document.getElementById("revivepet").innerHTML = "Revive On"; } else { shouldAutoRevivePet = false document.getElementById("revivepet").innerHTML = "Revive Off"; } } function toggleEvolvePet () { if (!shouldAutoEvolvePet) { shouldAutoEvolvePet = true document.getElementById("evolvepet").innerHTML = "Evolve On"; } else { shouldAutoEvolvePet = false document.getElementById("evolvepet").innerHTML = "Evolve Off"; } } function toggleHealPlayer () { if (!shouldAutoHealPlayer) { shouldAutoHealPlayer = true document.getElementById("healplayer").innerHTML = "Heal Player On" } else { shouldAutoHealPlayer = false document.getElementById("healplayer").innerHTML = "Heal Player Off" } } let lockedYaw let shouldAltTrick = false let shouldLockYaw = false let shouldAutoRebuild = false let autoSwing = false let shouldAHRC = false let shouldAutoAim = false let shouldAutoHealPet = true let shouldAutoRevivePet = true let shouldAutoEvolvePet = true let shouldAutoHealPlayer = true let petSpawned = false let myPet = {}; let myPlayer = {}; game.network.addEntityUpdateHandler((data) => { if (game.world.inWorld) { if (game.ui.playerTick.petUid !== 0) { petSpawned = true; if (game.world.entities[game.ui.playerTick.petUid]) { let petHealth = (myPet.health/myPet.maxHealth) * 100 myPet = game.world.entities[game.ui.playerTick.petUid].fromTick; if (shouldAutoHealPet && petHealth < document.getElementById("healpetinput").value && petHealth > 0 && game.ui.playerTick.gold >= 100 && shouldAutoHealPet) { if (!window.healPet) { shopShortcut("PetHealthPotion", 1) window.healPet = true; setTimeout(() => { window.healPet = false; }, 300); } } if (shouldAutoEvolvePet && petHealth > 0 && game.world.entities[game.ui.playerTick.uid].fromTick.health > 0) { let model = game.world.entities[game.ui.playerTick.petUid].fromTick.model let tokens = document.querySelectorAll(".hud-shop-item-tokens") let pToken = game.ui.playerTick.token let evolvebtn = document.querySelectorAll(".hud-shop-actions-evolve") if (!evolvebtn[0].classList[1] && pToken >= tokens[0].innerHTML && model == "PetCARL") { buyItem("PetCARL", getPetTier(5)) } if (!evolvebtn[1].classList[1] && pToken >= tokens[1].innerHTML && model == "PetMiner") { buyItem("PetMiner", getPetTier(6)) } } } } if (petSpawned && shouldAutoRevivePet && !game.world.entities[game.ui.playerTick.petUid] && myPlayer.health > 0) { shopShortcut("PetRevive", 1) } myPlayer = game.world.entities[game.ui.playerTick.uid].fromTick let playerHealth = (myPlayer.health/myPlayer.maxHealth) * 100; if (playerHealth <= document.getElementById("healplayerinput").value && playerHealth > 0 && game.ui.playerTick.gold >= 100 && shouldAutoHealPlayer) { if (!window.playerTimeout_1) { shopShortcut("HealthPotion", 1) window.playerTimeout_1 = true; setTimeout(() => { window.playerTimeout_1 = false; }, 300) } } if (shouldAHRC) { let entities = Game.currentGame.world.entities; for (let uid in entities) { let obj = entities[uid]; if (obj.fromTick.model == "Harvester") { let amount = obj.fromTick.tier * 0.05 - 0.02; game.network.sendRpc({name: "AddDepositToHarvester", uid: obj.fromTick.uid, deposit: amount}); game.network.sendRpc({name: "CollectHarvester", uid: obj.fromTick.uid}); }; }; }; if (shouldAutoAim) { window.targets = []; let entities = game.renderer.npcs.attachments; for (let i in entities) { if (document.getElementById('aimOptions').value == 'pl' ? (entities[i].fromTick.model == "GamePlayer" && entities[i].fromTick.uid !== game.ui.playerTick.uid && entities[i].targetTick.partyId !== game.ui.playerPartyId && entities[i].fromTick.dead == 0) : (entities[i].fromTick.model !== "GamePlayer" && entities[i].entityClass !== "Projectile" && entities[i].fromTick.model !== "NeutralTier1")) { window.targets.push(entities[i].fromTick); }; }; if (window.targets.length > 0) { const myPos = game.ui.playerTick.position; window.targets.sort((a, b) => { return measureDistance(myPos, a.position) - measureDistance(myPos, b.position); }); const target = window.targets[0]; let reversedAim = game.inputPacketCreator.screenToYaw((target.position.x - myPos.x) * 100, (target.position.y - myPos.y) * 100); game.inputPacketCreator.lastAnyYaw = reversedAim; game.network.sendPacket(3, {mouseMoved: reversedAim}); } }; if (autoSwing) { game.network.sendInput({space: 0}) game.network.sendInput({space: 1}) } if (shouldLockYaw && game.ui.playerTick.aimingYaw != lockedYaw) { game.inputPacketCreator.lastAnyYaw = lockedYaw; game.network.sendPacket(3, {mouseMoved: lockedYaw}); } if (shouldAutoRebuild && !window.autoBuildTimeout) { window.autoBuildTimeout = true for (let i of deadTowers) { game.network.sendRpc({ name: "MakeBuilding", type: i[0], x: i[1], y: i[2], yaw: i[3], }); }; setTimeout(() => { window.autoBuildTimeout = false; }, 1000) } if (shouldAltTrick && window.parent.game !== undefined) { if (joinOrLeave() == "join" && game.ui.getPlayerPartyShareKey() != window.parent.game.ui.getPlayerPartyShareKey()) { game.network.sendRpc({ name:"JoinPartyByShareKey", partyShareKey: window.parent.game.ui.getPlayerPartyShareKey(), }) } if (joinOrLeave() == "leave" && game.ui.getPlayerPartyShareKey() == window.parent.game.ui.getPlayerPartyShareKey()) { game.network.sendRpc({ name: "LeaveParty" }) } } } }) let deadTowers = [] game.network.addRpcHandler("LocalBuilding", (data) => { if (shouldAutoRebuild) { for(let e of data) { if(!!e.dead) { let yaw = 0; if (["Harvester", "MeleeTower"].includes(e.type)) { if (game.world.entities[e.uid] !== undefined) yaw = game.world.entities[e.uid].targetTick.yaw; } deadTowers.push([e.type, e.x, e.y, yaw, e.tier]) }; for (let i of deadTowers) { if (e.type == i[0] && e.x == i[1] && e.y == i[2] && e.dead == 0) { deadTowers.splice(i, 1) } }; if(e.type == "GoldStash") deadTowers = [] } }; }); let mousePs = {}; let should7x7Walls = false; let should5x5Walls = false; let should3x3Walls = false; addEventListener('keydown', function (e) { if(document.activeElement.tagName.toLowerCase() !== "input" && document.activeElement.tagName.toLowerCase() !== "textarea") { if (e.key == "c") { should3x3Walls = true; should5x5Walls = false; should7x7Walls = false; } if (e.key == "x") { should3x3Walls = false; should5x5Walls = true; should7x7Walls = false; } if (e.key == "z") { should3x3Walls = false; should5x5Walls = false; should7x7Walls = true; } } }) addEventListener('keyup', function (e) { if(document.activeElement.tagName.toLowerCase() !== "input" && document.activeElement.tagName.toLowerCase() !== "textarea") { if (e.key == "c") { should3x3Walls = false; } if (e.key == "x") { should5x5Walls = false; } if (e.key == "z") { should7x7Walls = false; } } }) function placeWall(x, y) { game.network.sendRpc({name: 'MakeBuilding', x: x, y: y, type: "Wall", yaw: 0}); } document.addEventListener('mousemove', e => { mousePs = {x: e.clientX, y: e.clientY}; if (game.inputManager.mouseDown && game.ui.components.PlacementOverlay.buildingId == "Wall") { var buildingSchema = game.ui.getBuildingSchema(); var schemaData = buildingSchema.Wall; var world = game.world; var worldPos = game.renderer.screenToWorld(mousePs.x, mousePs.y); var cellIndexes = world.entityGrid.getCellIndexes(worldPos.x, worldPos.y, {width: schemaData.gridWidth, height: schemaData.gridHeight}); var cellSize = world.entityGrid.getCellSize(); var cellAverages = { x: 0, y: 0 }; for (var i in cellIndexes) { if (!cellIndexes[i]) { return false; } var cellPos = world.entityGrid.getCellCoords(cellIndexes[i]); cellAverages.x += cellPos.x; cellAverages.y += cellPos.y; } cellAverages.x = cellAverages.x/cellIndexes.length; cellAverages.y = cellAverages.y/cellIndexes.length; var gridPos = { x: cellAverages.x * cellSize + cellSize/2, y: cellAverages.y * cellSize + cellSize/2 }; if (should3x3Walls) { //layer 1 placeWall(gridPos.x - 48, gridPos.y + 48); placeWall(gridPos.x, gridPos.y + 48); placeWall(gridPos.x + 48, gridPos.y + 48); //layer 2 placeWall(gridPos.x - 48, gridPos.y); placeWall(gridPos.x, gridPos.y); placeWall(gridPos.x + 48, gridPos.y); //layer 3 placeWall(gridPos.x - 48, gridPos.y - 48); placeWall(gridPos.x, gridPos.y - 48); placeWall(gridPos.x + 48, gridPos.y - 48); } if (should5x5Walls) { //layer 1 placeWall(gridPos.x - 48 - 48, gridPos.y + 48 + 48); placeWall(gridPos.x - 48, gridPos.y + 48 + 48); placeWall(gridPos.x, gridPos.y + 48 + 48); placeWall(gridPos.x + 48, gridPos.y + 48 + 48); placeWall(gridPos.x + 48 + 48, gridPos.y + 48 + 48); //layer 2 placeWall(gridPos.x - 48 - 48, gridPos.y + 48); placeWall(gridPos.x - 48, gridPos.y + 48); placeWall(gridPos.x, gridPos.y + 48); placeWall(gridPos.x + 48, gridPos.y + 48); placeWall(gridPos.x + 48 + 48, gridPos.y + 48); //layer 3 placeWall(gridPos.x - 48 - 48, gridPos.y); placeWall(gridPos.x - 48, gridPos.y); placeWall(gridPos.x, gridPos.y); placeWall(gridPos.x + 48, gridPos.y); placeWall(gridPos.x + 48 + 48, gridPos.y); //layer 4 placeWall(gridPos.x - 48 - 48, gridPos.y - 48); placeWall(gridPos.x - 48, gridPos.y - 48); placeWall(gridPos.x, gridPos.y - 48); placeWall(gridPos.x + 48, gridPos.y - 48); placeWall(gridPos.x + 48 + 48, gridPos.y - 48); //layer 5 placeWall(gridPos.x - 48 - 48, gridPos.y - 48 - 48); placeWall(gridPos.x - 48, gridPos.y - 48 - 48); placeWall(gridPos.x, gridPos.y - 48 - 48); placeWall(gridPos.x + 48, gridPos.y - 48 - 48); placeWall(gridPos.x + 48 + 48, gridPos.y - 48 - 48); } if (should7x7Walls) { //layer 1 placeWall(gridPos.x - 48 - 48 - 48, gridPos.y + 48 + 48 + 48); placeWall(gridPos.x - 48 - 48, gridPos.y + 48 + 48 + 48); placeWall(gridPos.x - 48, gridPos.y + 48 + 48 + 48); placeWall(gridPos.x, gridPos.y + 48 + 48 + 48); placeWall(gridPos.x + 48, gridPos.y + 48 + 48 + 48); placeWall(gridPos.x + 48 + 48, gridPos.y + 48 + 48 + 48); placeWall(gridPos.x + 48 + 48 + 48, gridPos.y + 48 + 48 + 48); //layer 2 placeWall(gridPos.x - 48 - 48 - 48, gridPos.y + 48 + 48); placeWall(gridPos.x - 48 - 48, gridPos.y + 48 + 48); placeWall(gridPos.x - 48, gridPos.y + 48 + 48); placeWall(gridPos.x, gridPos.y + 48 + 48); placeWall(gridPos.x + 48, gridPos.y + 48 + 48); placeWall(gridPos.x + 48 + 48, gridPos.y + 48 + 48); placeWall(gridPos.x + 48 + 48 + 48, gridPos.y + 48 + 48); //layer 3 placeWall(gridPos.x - 48 - 48 - 48, gridPos.y + 48); placeWall(gridPos.x - 48 - 48, gridPos.y + 48); placeWall(gridPos.x - 48, gridPos.y + 48); placeWall(gridPos.x, gridPos.y + 48); placeWall(gridPos.x + 48, gridPos.y + 48); placeWall(gridPos.x + 48 +48, gridPos.y + 48); placeWall(gridPos.x + 48 + 48 + 48, gridPos.y + 48); //layer 4 placeWall(gridPos.x - 48 - 48 - 48, gridPos.y); placeWall(gridPos.x - 48 - 48, gridPos.y); placeWall(gridPos.x - 48, gridPos.y); placeWall(gridPos.x, gridPos.y); placeWall(gridPos.x + 48, gridPos.y); placeWall(gridPos.x + 48 + 48, gridPos.y); placeWall(gridPos.x + 48 + 48 + 48, gridPos.y); //layer 5 placeWall(gridPos.x - 48 - 48 - 48, gridPos.y - 48); placeWall(gridPos.x - 48 - 48, gridPos.y - 48); placeWall(gridPos.x - 48, gridPos.y - 48); placeWall(gridPos.x, gridPos.y - 48); placeWall(gridPos.x + 48, gridPos.y - 48); placeWall(gridPos.x + 48 + 48, gridPos.y - 48); placeWall(gridPos.x + 48 + 48 + 48, gridPos.y - 48); //layer 6 placeWall(gridPos.x - 48 - 48 - 48, gridPos.y - 48 - 48); placeWall(gridPos.x - 48 - 48, gridPos.y - 48 - 48); placeWall(gridPos.x - 48, gridPos.y - 48 - 48); placeWall(gridPos.x, gridPos.y - 48 - 48); placeWall(gridPos.x + 48, gridPos.y - 48 - 48); placeWall(gridPos.x + 48 + 48, gridPos.y - 48 - 48); placeWall(gridPos.x + 48 + 48 + 48, gridPos.y - 48 - 48); //layer 7 placeWall(gridPos.x - 48 - 48 - 48, gridPos.y - 48 - 48 - 48); placeWall(gridPos.x - 48 - 48, gridPos.y - 48 - 48 - 48); placeWall(gridPos.x - 48, gridPos.y - 48 - 48 - 48); placeWall(gridPos.x, gridPos.y - 48 - 48 - 48); placeWall(gridPos.x + 48, gridPos.y - 48 - 48 - 48); placeWall(gridPos.x + 48 + 48, gridPos.y - 48 - 48 - 48); placeWall(gridPos.x + 48 + 48 + 48, gridPos.y - 48 - 48 - 48); } } }) function loadedPlayers() { // loaded player names var returns = [] Object.entries(Game.currentGame.world.entities) .forEach((stuff => { if (stuff[1].targetTick.entityClass == "PlayerEntity" && ((stuff[1].targetTick.uid !== Game.currentGame.world.entities[Game.currentGame.world.getMyUid()].targetTick.uid) || window.useSamePI)) { returns.push(stuff[1].targetTick.name) } })) return returns; } window.loadedIDS = function () { var returns = [] Object.entries(Game.currentGame.world.entities) .forEach((stuff => { if (stuff[1].targetTick.entityClass == "PlayerEntity" && ((stuff[1].targetTick.uid !== Game.currentGame.world.entities[Game.currentGame.world.getMyUid()].targetTick.uid) || window.useSamePI)) { var h = stuff[1].targetTick if (document.querySelector('#advancedlpi') .checked) { returns.push(JSON.stringify(h)) } else { returns.push(stuff[1].targetTick.name + " - Wood: " + Game.currentGame.world.entities[stuff[1].targetTick.uid].targetTick.wood + ", Stone: " + Game.currentGame.world.entities[stuff[1].targetTick.uid].targetTick.stone + ", Gold: " + Game.currentGame .world.entities[stuff[1].targetTick.uid].targetTick.gold) } } })) return returns; } function spamchatclick() { // used to be called spam chat, its split chat now var user = document.querySelector('#spamchat') .value splitChatLength(user) } let dimension = 1; const onWindowResize = () => { if (!window.isInMenu && window.zoomonscroll) { const renderer = Game.currentGame.renderer; let canvasWidth = window.innerWidth * window.devicePixelRatio; let canvasHeight = window.innerHeight * window.devicePixelRatio; let ratio = canvasHeight / (1080 * dimension); renderer.scale = ratio; renderer.entities.setScale(ratio); renderer.ui.setScale(ratio); renderer.renderer.resize(canvasWidth, canvasHeight); renderer.viewport.width = renderer.renderer.width / renderer.scale + 2 * renderer.viewportPadding; renderer.viewport.height = renderer.renderer.height / renderer.scale + 2 * renderer.viewportPadding; } } // Zoom by Apex, modified by eh onWindowResize(); var transparentMenu = false; window.onresize = onWindowResize; window.onwheel = e => { if (e.deltaY > 0) { dimension += 0.09; onWindowResize(); } else if (e.deltaY < 0) { dimension -= 0.09; onWindowResize(); } } var _isInChatbox = false; function doNewSend(sender) { if (sender[0] == "ch") { Game.currentGame.network.sendRpc({ name: "SendChatMessage", channel: "Local", message: sender[1][0] }) } } function measureDistance(obj1, obj2) { if (!(obj1.x && obj1.y && obj2.x && obj2.y)) return Infinity; let xDif = obj2.x - obj1.x; let yDif = obj2.y - obj1.y; return Math.abs((xDif**2) + (yDif**2)); }; function joinOrLeave() { let time = document.getElementsByClassName("hud-ticker-bar")[0].style.backgroundPositionX.split("px")[0] if (time <= 10 && time >= -10) return "join" else return "leave" } function splitChatLength(text) { let i = 0; window.chatSetInterval = setInterval(function () { if (i < text.length) { doNewSend(['ch', [text.slice(i, i + 45)]]) i += 45; } else { clearInterval(window.chatSetInterval) } }, 1050) } addEventListener('keyup', function (e) { if(document.activeElement.tagName.toLowerCase() !== "input" && document.activeElement.tagName.toLowerCase() !== "textarea") { if (e.key == "=") { game.ui.getComponent("PopupOverlay").showHint( 'Press [/] for menu, press [?] to lock angle, type !boss for boss wave, !marker to leave a mark on map, left click somewhere on the minimap to automatically move there, HOLD "c" for 3x3 wall, "x" for 5x5 and "z" for 7x7', 1.5e4 ) } if (e.key == "/") { document.querySelector("#hud-menu-settings") .style.display = document.querySelector("#hud-menu-settings") .style.display == "none" ? "block" : "none" document.querySelector("#hud-menu-shop") .style.display = "none" document.querySelector("#hud-menu-party") .style.display = "none" } if (e.key == "`") { game.inputManager.onKeyRelease({ keyCode: 117 }) } if (e.keyCode == 27) { let mb = document.getElementsByClassName("hud")[0]; if (mb.style.display === "none") { mb.style.display = "block"; } else { mb.style.display = "none"; }; } if (e.key == "?"){ if (!shouldLockYaw) { lockedYaw = game.ui.playerTick.aimingYaw shouldLockYaw = true game.ui.getComponent("PopupOverlay").showHint('Yaw locked, press [?] to unlock',1.5e4) } else { shouldLockYaw = false game.ui.getComponent("PopupOverlay").showHint('Yaw unlocked',1.5e4) } } } }) document.querySelector('#advancedlpi') .addEventListener('change', function (e) { var THIS_LPI_EVENT = this; }) document.querySelector('#zos') .addEventListener('change', function (e) { var THIS_ZOS_EVENT = this; window.zoomonscroll = THIS_ZOS_EVENT.checked }) document.querySelector('#togglebot') .addEventListener('click', function () { botMode = !botMode this.innerText = botMode ? "Bot On" : "Bot Off" }) document.querySelector('#toggleresp') .addEventListener('click', function () { autoRespawn = !autoRespawn this.innerText = autoRespawn ? "Respawn On" : "Respawn Off" }) document.querySelector('#togglespmch') .addEventListener('click', function () { pauseChatSpam(document.querySelector('#spamchat').value) this.innerText = isSpamming ? "Spam Chat On" : "Spam Chat Off" }) function moveNext(targetX, targetY) { let player = game.world.localPlayer.entity.targetTick.position if (player.x <= targetX && player.y <= targetY) { game.network.sendInput({ right: 1, left: 0, up: 0, down: 1 }) } else if (player.x >= targetX && player.y <= targetY) { game.network.sendInput({ right: 0, left: 1, up: 0, down: 1 }) } else if (player.x <= targetX && player.y >= targetY) { game.network.sendInput({ right: 1, left: 0, up: 1, down: 0 }) } else if (player.x >= targetX && player.y >= targetY) { game.network.sendInput({ right: 0, left: 1, up: 1, down: 0 }) } } function isXYCloseTo(x, y) { let playerTargetTick = game.world.localPlayer.entity.targetTick.position; const radius = 50; return ((x <= (playerTargetTick.x + radius) && x >= (playerTargetTick.x - radius)) && (y <= (playerTargetTick.y + radius) && y >= (playerTargetTick.y - radius))); } let moveIsActive = false; function goToPos(x, y) { moveIsActive = true; window.goToPosInterval = setInterval(() => { moveNext(x, y) }, 250) window.checkPosInterval = setInterval(() => { if (moveIsActive) { if (isXYCloseTo(x, y)) { game.network.sendInput({ left: 0, right: 0, up: 0, down: 0 }) game.ui.getComponent('PopupOverlay') .showHint('Finished moving!', 1e4) moveIsActive = false; mapTimeouts.forEach((item => { clearTimeout(item) })) clearInterval(window.goToPosInterval) clearInterval(window.checkPosInterval) } } else { game.network.sendInput({ left: 0, right: 0, up: 0, down: 0 }) doNewSend(['ch', ['MapMover: Unexpectedly shut down']]) mapTimeouts.forEach((item => { clearTimeout(item) })) game.ui.getComponent('PopupOverlay') .showHint('MapMover unexpectedly stopped', 1e4) clearInterval(window.checkPosInterval) } }, 10) let g = setTimeout(() => { clearInterval(window.goToPosInterval) game.ui.getComponent('PopupOverlay') .showHint('It has been 4 minutes to move to the position on the map, so it has automatically stopped to prevent infinite loops.', 1e4) moveIsActive = false; game.network.sendInput({ left: 0, right: 0, up: 0, down: 0 }) }, 240000) mapTimeouts.push(g) } let mapContainer = document.createElement('div') mapContainer.id = "hud-map-container" document.querySelector('.hud-bottom-left') .append(mapContainer) $('#hud-map') .appendTo(document.querySelector('#hud-map-container')) document.querySelector("#hud-map-container") .addEventListener('mousemove', function (e) { var offset = $('#hud-map-container') .offset(); // Then refer to mapMouseX = e.pageX - offset.left; mapMouseY = e.pageY - offset.top; }) document.querySelector("#hud-map-container") .addEventListener('click', function (e) { if (!moveIsActive) { mapTimeouts.forEach((item => { clearTimeout(item) })) let yn = "y" game.ui.getComponent('PopupOverlay').showConfirmation('Are you sure you want to move to X:' + (mapMouseX * 170.4390625) + ",Y:" + (mapMouseY * 171.9977142857143) + '? You can right click the minimap to cancel this at any time.', 5e3, function() { if (yn.toLowerCase() == "y") { game.ui.getComponent('PopupOverlay').showHint('Starting MapMove...', 3e3) let moveToMapX = (mapMouseX * 170.4390625) let moveToMapY = (mapMouseY * 171.9977142857143) goToPos(moveToMapX, moveToMapY) } }, function() { game.ui.getComponent('PopupOverlay').showHint('OK, did not start MapMove', 3e3) }) } else { moveIsActive = false; clearInterval(window.goToPosInterval) clearInterval(window.checkPosInterval) game.network.sendInput({ left: 0, right: 0, up: 0, down: 0 }) mapTimeouts.forEach((item => { clearTimeout(item) })) game.ui.getComponent('PopupOverlay').showHint('MapMove is already in process. Restarting and moving to X:' + (mapMouseX * 170.4390625) + ",Y:" + (mapMouseY * 171.9977142857143) + '. You can right click the minimap to cancel this at any time.', 5e3) let yn = "y" if (yn.toLowerCase() == "y") { let moveToMapX = (mapMouseX * 170.4390625) let moveToMapY = (mapMouseY * 171.9977142857143) goToPos(moveToMapX, moveToMapY) } } }) document.querySelector('#hud-map-container').addEventListener('contextmenu', function(ev) { ev.preventDefault(); if(moveIsActive) { game.ui.getComponent('PopupOverlay').showConfirmation('Are you sure you want to cancel the current MapMove process?', 5e3, function() { moveIsActive = false; clearInterval(window.goToPosInterval) clearInterval(window.checkPosInterval) game.network.sendInput({ left: 0, right: 0, up: 0, down: 0 }) game.ui.getComponent('PopupOverlay').showHint('Successfully stopped MapMover.', 3e3) mapTimeouts.forEach((item => { clearTimeout(item) })) }, function() { game.ui.getComponent('PopupOverlay').showHint('OK, did not stop MapMover.', 3e3) }) } else { game.ui.getComponent('PopupOverlay').showHint('You are not in a MapMover process right now. Left click somewhere on the minimap to start one.') } return false; }, false);