您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
The best defensive script (probably)
// ==UserScript== // @name Zombs.io bad(?) Hack newest // @namespace https://tampermonkey.net/ // @version v7.5 // @description The best defensive script (probably) // @author ( o=^•ェ•) // @match *://zombs.io/* // @require https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js // @grant none // ==/UserScript== /* Everyone who has helped: AstralCat (many important functions) Alex (send alt) Vn Havy (for original bad hack) Sirr0m (bomber X rebuilder) eh (bomber X rebuilder) JaYT (some minor stuff) Ayubloom (sun:raise for low health upgrading all towers code) YT er pro th er (for low health upgrade harvesters code) chatgpt (wrote the whole code 100% no cap :D) */ /* Should add a change log so here: v7.1: version uploaded to greasyfork, changes made to bad hack's original function: rebuilder records tier of towers, auto aim became prioritising either players or zombies to target, map move now checks for stucks (buggy like hell), added a lot of new functions v7.1.1: removed disconnection v7.2: added send alt and aito that doesnt care about full servers v7.3(latest): debugged aito, added new song, decreased lag */ /* global game */ /* global Game */ /* global PIXI */ if (location.hash.split('/')[4] == 'noscript') { return } let cssMain = ` .bad-btn { border: none; color: white; padding: 10px 20px; text-align: center; font-size: 14px; margin: 2px 0px; opacity: 0.9; transition: transform 0.3s ease-in-out, background-color 0.3s ease-in-out, box-shadow 0.3s ease-in-out; /* Added transitions */ display: inline-block; border-radius: 15px; cursor: pointer; text-shadow: -1px 1px 1.5px #242526; } /* Blue Button */ .bad-blue { background-color: #5463FF; --btn-color: #5463FF; } .bad-blue:hover { opacity: 1; transform: scale(1.1); /* Improved hover animation */ box-shadow: 0 0 20px var(--btn-color); /* Use button color for glow on hover */ } .bad-blue:active { background-color: #333; /* Change background color on click */ } /* Magenta Button */ .bad-magenta { background-color: #E900FF; --btn-color: #E900FF; } .bad-magenta:hover { opacity: 1; transform: scale(1.1); box-shadow: 0 0 20px var(--btn-color); } .bad-magenta:active { background-color: #333; } /* Gray Button */ .bad-gray { background-color: #606060; --btn-color: #606060; } .bad-gray:hover { opacity: 1; transform: scale(1.1); box-shadow: 0 0 20px var(--btn-color); } .bad-gray:active { background-color: #333; } /* Yellow Button */ .bad-yellow { background-color: #FFC600; --btn-color: #FFC600; } .bad-yellow:hover { opacity: 1; transform: scale(1.1); box-shadow: 0 0 20px var(--btn-color); } .bad-yellow:active { background-color: #333; } /* Red Button */ .bad-red { background-color: #FF1818; --btn-color: #FF1818; } .bad-red:hover { opacity: 1; transform: scale(1.1); box-shadow: 0 0 20px var(--btn-color); } .bad-red:active { background-color: #333; } /* Green Button */ .bad-green { background-color: #06FF00; --btn-color: #06FF00; } .bad-green:hover { opacity: 1; transform: scale(1.1); box-shadow: 0 0 20px var(--btn-color); } .bad-green:active { background-color: #333; } /* Pink Button */ .bad-pink { background-color: #FF6B6B; --btn-color: #FF6B6B; } .bad-pink:hover { opacity: 1; transform: scale(1.1); box-shadow: 0 0 20px var(--btn-color); } .bad-pink:active { background-color: #333; } /* Cyan Button */ .bad-cyan { background-color: #39AEA9; --btn-color: #39AEA9; } .bad-cyan:hover { opacity: 1; transform: scale(1.1); box-shadow: 0 0 20px var(--btn-color); } .bad-cyan:active { background-color: #333; } /* Orange Button */ .bad-orange { background-color: #FF5F00; --btn-color: #FF5F00; } .bad-orange:hover { opacity: 1; transform: scale(1.1); box-shadow: 0 0 20px var(--btn-color); } .bad-orange:active { background-color: #333; } .bad-textbox { border: none; color: white; padding: 10px 10px; text-align: center; font-size: 14px; margin: 2px 0px; opacity: 0.9; transition: transform 0.3s ease-in-out, background-color 0.3s ease-in-out, box-shadow 0.3s ease-in-out; display: inline-block; border-radius: 15px; background-color: #606060; text-shadow: -1px 1px 1.5px #242526; } .bad-textbox:hover { opacity: 1; transform: scale(1.1); box-shadow: 0 0 20px var(--btn-color); } .bad-textbox:active { background-color: #333; } .hud-toolbar .hud-toolbar-inventory .hud-toolbar-item.is-empty { pointer-events: auto; } #hud-menu-shop { top: 45%; left: 50%; width: 690px; height: 450px; margin: 0; transform: translate(-50%, -50%); padding: 20px; background-size: cover; box-shadow: 0 8px 12px rgba(0, 0, 0, 0.2); /* Added subtle shadow */ } .hud-menu-shop:hover { opacity: 1; } .hud-menu-shop .hud-shop-grid { height: 330px; } #hud-menu-settings { top: 45%; left: 50%; width: 780px; height: 500px; margin: 0; transform: translate(-50%, -50%); padding: 20px; background: url('https://i.pinimg.com/originals/de/e3/b6/dee3b69d434789662bdf3f54ed3a8a7d.gif'); background-size: cover; } .hud-menu-settings .hud-settings-grid { width: 750px; height: 420px; } .hud-menu-shop .hud-shop-tabs a[data-type=Pet]::after { content: none; } .hud-intro::after { background: url(\'https://cutewallpaper.org/21/wallpaper-gif-1920x1080/Gif-Background-Space-1920x1080-Backgrounds-For-Html-Gif-.gif\'); background-size: cover; } .hud-menu-icons .hud-menu-icon[data-type=Iframe]::before { background-image: url("https://media.discordapp.net/attachments/870020008128958525/876133010360107048/unknown.png"); background-size: 30px; } [data-item=PetGhost][data-tier='1']::after { background-image: url('/asset/image/ui/inventory/inventory-pet-ghost-t1.svg'); } `; let stylesMain = document.createElement("style"); stylesMain.appendChild(document.createTextNode(cssMain)); document.head.appendChild(stylesMain); stylesMain.type = "text/css"; 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-respawn-share, .hud-party-joining, .hud-respawn-corner-bottom-left, #hud-menu-shop > div.hud-shop-grid > a:nth-child(10)').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 = "1800px"; let addZombieShield = document.createElement("a"); addZombieShield.classList.add("hud-toolbar-item"); addZombieShield.setAttribute("data-item", "ZombieShield"); addZombieShield.setAttribute("data-tier", "1"); document.getElementsByClassName("hud-toolbar-inventory")[0].appendChild(addZombieShield); let addWoody = document.createElement("a"); addWoody.classList.add("hud-toolbar-item"); addWoody.setAttribute("data-item", "PetMiner"); addWoody.setAttribute("data-tier", "1"); document.getElementsByClassName("hud-toolbar-inventory")[0].appendChild(addWoody); let addCARL = document.createElement("a"); addCARL.classList.add("hud-toolbar-item"); addCARL.setAttribute("data-item", "PetCARL"); addCARL.setAttribute("data-tier", "1"); document.getElementsByClassName("hud-toolbar-inventory")[0].appendChild(addCARL); let addSellPet = document.createElement("a"); addSellPet.classList.add("hud-toolbar-item"); addSellPet.setAttribute("data-item", "PetGhost"); addSellPet.setAttribute("data-tier", "1"); document.getElementsByClassName("hud-toolbar-inventory")[0].appendChild(addSellPet); document.querySelector("#hud-toolbar > div.hud-toolbar-inventory").addEventListener('contextmenu', handleContextMenu); function handleContextMenu(event) { const targetIndex = Array.from(event.target.parentNode.children).indexOf(event.target); switch (targetIndex) { case 0: buyPickaxe(); break; case 1: buySpear(); break; case 2: buyBow(); break; case 3: buyBomb(); break; case 4: shopShortcut("HealthPotion", 1); break; case 5: shopShortcut("PetHealthPotion", 1); break; case 7: buyZombieShield(); break; case 8: buyPet("PetMiner", getPetTier(6)); break; case 9: buyPet("PetCARL", getPetTier(5)); break; case 10: Game.currentGame.network.sendRpc({ name: "DeleteBuilding", uid: game.ui.getPlayerPetUid() }); break; } } function buyPet(item, tier) { if (game.ui.getPlayerPetName() == item) { shopShortcut("PetRevive", 1) } else { let i = 0 let j = setInterval(() => { 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 cost = [0, 1000, 3000, 6000, 8000, 24000, 80000]; if (game.ui.playerTick.gold >= cost[game.ui.inventory.Pickaxe.tier]) { shopShortcut("Pickaxe", game.ui.inventory.Pickaxe.tier + 1) } } function buySpear() { let tier = game.ui.inventory.Spear ? game.ui.inventory.Spear.tier : 0; let cost = [1400, 2800, 5600, 11200, 22500, 45000, 90000]; if (game.ui.playerTick.gold >= cost[tier]) { shopShortcut("Spear", tier + 1) } } function buyBow() { let tier = game.ui.inventory.Bow ? game.ui.inventory.Bow.tier : 0; let cost = [100, 400, 2000, 7000, 24000, 30000, 90000]; if (game.ui.playerTick.gold >= cost[tier]) { shopShortcut("Bow", tier + 1) } } function buyBomb() { let tier = game.ui.inventory.Bomb ? game.ui.inventory.Bomb.tier : 0; let cost = [100, 400, 3000, 5000, 24000, 50000, 90000]; if (game.ui.playerTick.gold >= cost[tier]) { shopShortcut("Bomb", tier + 1) } } function buyZombieShield() { let tier = game.ui.inventory.ZombieShield ? game.ui.inventory.ZombieShield.tier : 0; let cost = [1000, 3000, 7000, 14000, 18000, 22000, 24000, 30000, 45000, 70000]; if (game.ui.playerTick.gold >= cost[tier]) { shopShortcut("ZombieShield", tier + 1) document.querySelector("#hud-toolbar > div.hud-toolbar-inventory > a:nth-child(8)").setAttribute("data-tier", tier + 1); } } //x,y function createCoordinates() { let x = document.createElement('div'); x.style = 'position: relative; margin: 0;'; x.innerHTML = `<h3 id="coords"; style="margin: 0;"></h3>`; x.style.textAlign = "left"; document.querySelector("#hud > div.hud-bottom-left").append(x); } let hasBeenInWorld = false; let currentCoords = { x: 0, y: 0 }; let coordinateHistory = []; game.network.addEnterWorldHandler(() => { if (!hasBeenInWorld) { hasBeenInWorld = true; // Update currentCoords every 16ms setInterval(() => { const timestamp = Date.now(); currentCoords = { x: game.ui.playerTick?.position?.x || 0, y: game.ui.playerTick?.position?.y || 0 }; // Store the current coordinates with a timestamp coordinateHistory.push({ timestamp, coords: { ...currentCoords } }); // Clean up older coordinates (older than 1 second) const oneSecondAgo = timestamp - 1000; coordinateHistory = coordinateHistory.filter(coord => coord.timestamp >= oneSecondAgo); document.querySelector("#coords").innerText = `X: ${currentCoords.x}\n Y: ${currentCoords.y}`; }, 16); createCoordinates(); } game.ui.components.MenuShop.onTwitterFollow(); game.ui.components.MenuShop.onTwitterShare(); game.ui.components.MenuShop.onFacebookLike(); game.ui.components.MenuShop.onFacebookShare(); game.ui.components.MenuShop.onYouTubeSubscribe(); }); // Function to get coordinates from exactly 1 second ago function getCoordinatesOneSecondAgo() { const oneSecondAgo = Date.now() - 1000; const closestCoord = coordinateHistory.reduce((prev, curr) => { return Math.abs(curr.timestamp - oneSecondAgo) < Math.abs(prev.timestamp - oneSecondAgo) ? curr : prev; }, coordinateHistory[0]); return closestCoord.coords; } var isSpamming = 0; function pauseChatSpam(e) { if (!isSpamming) { window.spammer = setInterval(() => { game.network.sendRpc({ name: "SendChatMessage", channel: "Local", message: e }) }, 1050) } else if (isSpamming) { clearInterval(window.spammer) } isSpamming = !isSpamming } let friendcontrol = 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" }); }, 1050); }; if (e.message === "!marker") { var map = document.getElementById("hud-map"); // Add a specific class to markers created by !marker map.insertAdjacentHTML("beforeend", `<div style="color: red; display: block; left: ${parseInt(game.ui.components.Map.playerElems[game.world.getMyUid()].marker.style.left)}%; top: ${parseInt(game.ui.components.Map.playerElems[game.world.getMyUid()].marker.style.top)}%; position: absolute;" class='hud-map-player marker-placed-by-command'></div>`) game.ui.getComponent('PopupOverlay').showHint(`Added Marker`, 1500); } else if (e.message === "!delmarkers") { // Get all marker elements with the class 'marker-placed-by-command' const markers = document.querySelectorAll('.marker-placed-by-command'); // Loop through and remove only markers created by !marker markers.forEach(marker => { marker.remove(); }); // Show a hint that markers were deleted game.ui.getComponent('PopupOverlay').showHint('Deleted Markers', 1500); } if (e.message == "!pop") { game.ui.components.PopupOverlay.showHint(`Players in server: ${pop}/32`, 3000); } if (e.message === "!scanposition") { // Handle the "scanposition" command handleScanPosition(); } if (e.message === "!markers") { addMarker(game.ui.playerTick.position.x, game.ui.playerTick.position.y); } if (e.message === "!delmarkers") { // Get all marker elements with the class 'marker-placed-by-command' const markerElements = document.querySelectorAll('.marker-placed-by-command'); // Loop through and remove only markers created by ! markerElements.forEach(markerElement => { // Check if the marker element has a data-marker-id attribute const markerId = markerElement.getAttribute("data-marker-id"); if (markerId) { // Remove the marker only if its ID matches a marker in the array const idToRemove = parseInt(markerId); const indexToRemove = markers.findIndex(m => m.id === idToRemove); if (indexToRemove !== -1) { markers.splice(indexToRemove, 1); markerElement.remove(); } } }); // Show a hint that markers were deleted game.ui.getComponent('PopupOverlay').showHint('Deleted Markers', 1500); // Reset marker IDs resetMarkerIds(); } if (e.message === "!markermove") { // Handle the "markermove" command handleMarkerMove(); } else if (e.message === "!stop") { // Stop repeating move stopRepeatingMove(); } }; if (friendcontrol) { if (e.uid == document.getElementById("friend1").value || e.uid == document.getElementById("friend2").value || e.uid == document.getElementById("friend3").value || e.uid == document.getElementById("friend4").value || e.uid == document.getElementById("friend5").value || e.uid == document.getElementById("friend6").value || e.uid == document.getElementById("friend7").value || e.uid == document.getElementById("friend8").value || e.uid == document.getElementById("friend9").value || e.uid == document.getElementById("friend10").value || e.displayName == document.getElementById("friend1").value || e.displayName == document.getElementById("friend2").value || e.displayName == document.getElementById("friend3").value || e.displayName == document.getElementById("friend4").value || e.displayName == document.getElementById("friend5").value || e.displayName == document.getElementById("friend6").value || e.displayName == document.getElementById("friend7").value || e.displayName == document.getElementById("friend8").value || e.displayName == document.getElementById("friend9").value || e.displayName == document.getElementById("friend10").value) { if (e.message == "!ahrc") { shouldAHRC = true document.getElementById("toggleahrc").innerHTML = "AHRC On"; } if (e.message == "!!ahrc") { shouldAHRC = false document.getElementById("toggleahrc").innerHTML = "AHRC Off"; } if (e.message == "!rebuild") { toggleRebuild() } if (e.message == "!clear") { shouldClearChat = true document.getElementById("clearchat-btn").innerHTML = "Clear Chat On"; } if (e.message == "!!clear") { shouldClearChat = false document.getElementById("clearchat-btn").innerHTML = "Clear Chat Off"; } if (e.message.startsWith("!move")) { const match = e.message.match(/x: (\d+), y: (\d+)/); if (match) { const x = parseInt(match[1]); const y = parseInt(match[2]); goToPos(x, y); } } if (e.message == "!stop") { clearInterval(goToPosInterval); clearTimeout(moveTimeout); game.network.sendInput({ left: 0, right: 0, up: 0, down: 0 }); } if (e.message == "!upstash") { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "GoldStash") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } } if (e.message == "!up0") { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "Harvester") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } } if (e.message == "!up1") { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "Wall") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } } if (e.message == "!up2") { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "Door") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } } if (e.message == "!up3") { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "SlowTrap") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } } if (e.message == "!up4") { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "ArrowTower") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } } if (e.message == "!up5") { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "CannonTower") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } } if (e.message == "!up6") { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "MeleeTower") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } } if (e.message == "!up7") { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "BombTower") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } } if (e.message == "!up8") { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "MagicTower") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } } if (e.message == "!up9") { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "GoldMine") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } } if (e.message == "!upall") { autoUpgradeAllbtn() autoUpgradeAll() } if (e.message.startsWith("!join psk")) { const match = e.message.match(/psk (\w+)/); if (match) { const partyShareKey = match[1]; // Send the RPC with the extracted partyShareKey Game.currentGame.network.sendRpc({ name: "JoinPartyByShareKey", partyShareKey: partyShareKey }); } } if (e.message == "!leave") { Game.currentGame.network.sendRpc({ name: "LeaveParty" }) } } } }) function checkStatus(party) { if (party.isOpen === 1) { return '<a style="color: #00e700; opacity: 0.9;">[Open]</a>'; } else if (party.isOpen !== 1) { return '<a style="color: red; opacity: 0.9;">[Private]</a>'; } } const partyCheck = (all_parties) => { const hudPartyGrid = document.getElementsByClassName('hud-party-grid')[0]; hudPartyGrid.innerHTML = ''; for (const parties of all_parties) { const tab = document.createElement('div'); tab.classList.add('hud-party-link', 'custom-party'); tab.id = parties.partyId; tab.isPublic = parties.isOpen; tab.name = window.filterXSS(parties.partyName); tab.members = parties.memberCount; tab.innerHTML = ` <strong>${tab.name} ${checkStatus(parties)}</strong> <small>id: ${tab.id}</small> <span>${tab.members}/4</span> `; if (parties.memberCount === 4) { tab.classList.add('is-disabled'); } else { tab.style.display = 'block'; } if (parties.partyId === game.ui.playerPartyId) { tab.classList.add('is-active'); } if (parties.isOpen !== 1) { tab.classList.add('is-disabled'); } tab.addEventListener('click', () => { if (tab.isPublic === 1 && tab.members < 4) { game.network.sendRpc({ name: 'JoinParty', partyId: Math.floor(tab.id), }); } else if (tab.isPublic !== 1) { game.ui.getComponent('PopupOverlay').showHint("You can't request private parties!", 800); } }); hudPartyGrid.appendChild(tab); } }; let pop = 0 game.network.addRpcHandler('SetPartyList', (e) => { partyCheck(e); pop = 0; Object.keys(game.ui.parties).forEach(e => (pop = pop + game.ui.parties[e].memberCount)); game.ui.components.PopupOverlay.showHint(`Players in server: ${pop}/32`, 3000); }); const song1 = new Audio("https://cdn.discordapp.com/attachments/967213871267971072/1027416621318414406/8mb.video-Vf9-wfenD0dA.m4a"); const song2 = new Audio("https://cdn.discordapp.com/attachments/1084113357591822467/1100413815545405543/Rick_Astley_-_Never_Gonna_Give_You_Up_Official_Music_Video.mp3"); const song3 = new Audio("https://cdn.discordapp.com/attachments/929143814487146547/1170910219623219312/Everybody_Wants_To_Rule_The_World.m4a?ex=655ac21e&is=65484d1e&hm=afbef8c516f441ab71a96faae36482c690513acf80e5a712b12c8c7859b2e910&"); const song4 = new Audio("https://cdn.discordapp.com/attachments/1086262250647584800/1094139045547876402/Initial_D_-_Deja_Vu_1-1.mp3"); const song5 = new Audio("https://cdn.discordapp.com/attachments/929143814487146547/1176755590752632852/Down_like_that.m4a?ex=6570060b&is=655d910b&hm=9f14afa65b345c52bbeb98c3a57fbe4b268dc33140707f6b86277ec92bc0c8e0&") const song6 = new Audio("https://cdn.discordapp.com/attachments/929143814487146547/1179244082753716254/105.m4a?ex=657913a2&is=65669ea2&hm=0e595bfd19859977c5ffbd12720e489bf7cd0d861dd31d4fdccc25189fd04936&") const song7 = new Audio("https://cdn.discordapp.com/attachments/1179255422411096127/1181871036942274560/For_the_night.m4a?ex=6582a22d&is=65702d2d&hm=5ee7404afdbb22008dde1a7675188cfe0afb5d54818ba418589be41d36b8ddd8&") const song8 = new Audio("https://cdn.discordapp.com/attachments/929143814487146547/1184394881158893599/CocoNUT.m4a?ex=658bd0b0&is=65795bb0&hm=1df78be04fd0cd41de67a6fe4bcd83294d47349523b716e369deee62eccb8bd9&") const song9 = new Audio("https://cdn.discordapp.com/attachments/929143814487146547/1186591003902230609/Rap_god.m4a?ex=6593cdfd&is=658158fd&hm=e01fbea879530d5e8bdb216f7ab894d3e906eb1615b3d2b59757c13f83dd6b58&") let settingsHTML = ` <div style="text-align: center"> <button class="bad-btn bad-magenta" id="lagspam-btn">Lag Spam Off</button> <button class="bad-btn bad-magenta" id="togglespmch">Chat Spam Off</button> <input type="text" id="spamchat" placeholder="Message" class="bad-textbox" style="width: 40%"> <br> <select id="lyricSongs" class="bad-textbox"> <option value="song1" selected>League Of Legends - Take Over</option> <option value="song2">Rick Astley - Never Gonna Give You Up</option> <option value="song3">Tears For Fears - Everybody Wants To Rule The World</option> <option value="song4">Initial D - Deja Vu</option> <option value="song5">KSI - Down Like That</option> <option value="song6">阿肆 - 热爱105°C的你</option> <option value="song7">Pop Smoke - For The Night</option> <option value="song8">The Coconut Song (Da coconut)</option> <option value="song9">Eminem - Rap God</option> </select> <button class="bad-btn bad-magenta" id="pauseSong">Stop Singing</button> <hr> <button id="sellall" class="bad-btn bad-red">Sell All</button> <button id="sellwall" class="bad-btn bad-red">Start Selling Walls</button> <button id="selldoor" class="bad-btn bad-red">Start Selling Doors</button> <button id="selltrap" class="bad-btn bad-red">Start Selling Traps</button> <button id="sellharvester" class="bad-btn bad-red">Start Selling Harvesters</button> <br> <button id="sellarrow" class="bad-btn bad-red">Start Selling Arrows</button> <button id="sellcannon" class="bad-btn bad-red">Start Selling Cannons</button> <button id="sellmelee" class="bad-btn bad-red">Start Selling Melees</button> <button id="sellbomb" class="bad-btn bad-red">Start Selling Bombs</button> <button id="sellmagic" class="bad-btn bad-red">Start Selling Mages</button> <button id="sellminer" class="bad-btn bad-red">Start Selling Gold Mines</button> <hr> <button class="bad-btn bad-yellow" id="menu-leaveparty-btn" onclick ='Game.currentGame.network.sendRpc({name: "LeaveParty"})'>Leave Party</button> <button class="bad-btn bad-yellow" id="menu-jpbsk-btn" onclick='Game.currentGame.network.sendRpc({name:"JoinPartyByShareKey", partyShareKey: document.querySelector("#menu-jpbsk-input").value})'>Join Party</button> <input type="text" class="bad-textbox" id="menu-jpbsk-input" style="width: 40%" placeholder="Share Key"> <button class="bad-btn bad-yellow" id="autoaccept-btn">Accepter Off</button> <button class="bad-btn bad-yellow" id="autosell">Auto Give Sell Off</button> <br> <button class="bad-btn bad-yellow" id="spamallparty-btn">Spam All Party Off</button> <button class="bad-btn bad-yellow" id="spampartybyid-btn">Spam Party By ID Off</button> <input type="text" class="bad-textbox" id="party-id-input" style="width: 20%" placeholder="Party ID"> <button class="bad-btn bad-yellow" id="newtab">New Party Tab</button> <hr> <button id="healplayer" class="bad-btn bad-green">Heal PLayer On</button> <input type="text" class="bad-textbox" value="20" id="healplayerinput" style="width: 8%"> <button id="healpet" class="bad-btn bad-green">Heal Pet On</button> <input type="text" class="bad-textbox" value="30" id="healpetinput" style="width: 8%"> <button id="revivepet" class="bad-btn bad-green">Revive On</button> <button id="evolvepet" class="bad-btn bad-green">Evolve On</button> <hr> <button class="bad-btn bad-blue" id="clearchat-btn">Clear Chat Off</button> <button class="bad-btn bad-blue" id="autoupgradeall-btn">Upgrade Off</button> <button class="bad-btn bad-blue" id="togglespinner">Spinner Off</button> <button class="bad-btn bad-blue" id="toggleaim">Aim Off</button> <select id="aimOptions" class="bad-textbox"> <option value="pl" selected>Players</option> <option value="zo">Zombies</option> </select> <br> <button class="bad-btn bad-blue" id="toggleahrc">AHRC Off</button> <button class="bad-btn bad-blue" id="toggleresp">Respawn On</button> <button class="bad-btn bad-blue" id="togglebot">Bot Off</button> <button class="bad-btn bad-blue" id="toggleswing">Swing Off</button> <button class="bad-btn bad-blue" id="togglerb">Rebuild Off</button> <button class="bad-btn bad-blue" id="togglehealthup">Low Health Upgrade Off</button> <button class="bad-btn bad-blue" id="stashleave">Auto Leave Off</button> <button class="bad-btn bad-blue" id="towerheal">Heal Towers Off</button> <hr> <button id="upstash" class="bad-btn bad-red">Up Stash Off</button> <button id="upmines" class="bad-btn bad-red">Up Mines Off</button> <button id="uparrow" class="bad-btn bad-red">Up Arrows Off</button> <button id="upcannon" class="bad-btn bad-red">Up Cannons Off</button> <button id="upmage" class="bad-btn bad-red">Up Mages Off</button> <button id="upmelee" class="bad-btn bad-red">Up Melees Off</button> <button id="upbomb" class="bad-btn bad-red">Up Bombs Off</button> <button id="upharvester" class="bad-btn bad-red">Up Harvesters Off</button> <button id="uptrap" class="bad-btn bad-red">Up Slow Traps Off</button> <button id="upwall" class="bad-btn bad-red">Up Walls Off</button> <button id="updoor" class="bad-btn bad-red">Up Doors Off</button> <hr> <button class="bad-btn bad-blue" id="toggleabpk">Enable Auto Buy Pickaxe</button> <button class="bad-btn bad-blue" id="toggleabsp">Enable Auto Buy Spear</button> <button class="bad-btn bad-blue" id="toggleabbw">Enable Auto Buy Bow</button> <button class="bad-btn bad-blue" id="toggleabbm">Enable Auto Buy Bomb</button> <button class="bad-btn bad-blue" id="toggleabsh">Enable Auto Buy Sheild</button> <hr> <button id="hidechat" class="bad-btn bad-pink">Hide Chat</button> <button id="hidepop" class="bad-btn bad-pink">Hide Popup</button> <button id="hideldb" class="bad-btn bad-pink">Hide Leaderboard</button> <button id="hidemap" class="bad-btn bad-pink">Hide Map</button> <button id="hidepip" class="bad-btn bad-pink">Hide PIP</button> <button id="mapenv" class="bad-btn bad-pink">Toggle Map Env</button> <button id="daybright" class="bad-btn bad-pink">Enable Always Day</button> <hr> <button id="hideground" class="bad-btn bad-cyan">Hide Ground</button> <button id="hidenpcs" class="bad-btn bad-cyan">Hide NPCs</button> <button id="hideenv" class="bad-btn bad-cyan">Hide Env</button> <button id="hideproj" class="bad-btn bad-cyan">Hide Proj</button> <button id="hideall" class="bad-btn bad-cyan">Hide All</button> <button id="freezegame" class="bad-btn bad-cyan">Stop Game</button> <button id="biggrid" class="bad-btn bad-cyan">Show Big Grids</button> <button id="smolgrid" class="bad-btn bad-cyan">Show Small Grids</button> <button id="border" class="bad-btn bad-cyan">Show Border</button> <button id="range" class="bad-btn bad-cyan">Show Range</button> <button id="tracer" class="bad-btn bad-cyan">Show Tracer</button> <hr> <button id="battle" class="bad-btn bad-gray">Enable Fighting Mode</button> <button id="trap" class="bad-btn bad-gray">Enable Auto Trapper</button> <button id="switch" class="bad-btn bad-gray">Enable Afk Switch</button> <button id="move" class="bad-btn bad-gray">Enable Player Follower</button> <button id="rev4" class="bad-btn bad-gray">Enable Rev Player Trick</button> <button id="bowfollow" class="bad-btn bad-gray">Enable Bow Follow</button> <button id="zoom" class="bad-btn bad-gray">Enable Combat Zoom</button> <br> <button id="cornerfarm" class="bad-btn bad-gray">Corner Farm Base</button> <hr> <button id="allowfriend" class="bad-btn bad-gray">Allow Friends Control</button> <hr> <p>Enter friend name or id below</p> <input type="text" class="bad-textbox" id="friend1" style="width: 20%" placeholder="Friend"> <input type="text" class="bad-textbox" id="friend2" style="width: 20%" placeholder="Friend"> <input type="text" class="bad-textbox" id="friend3" style="width: 20%" placeholder="Friend"> <input type="text" class="bad-textbox" id="friend4" style="width: 20%" placeholder="Friend"> <input type="text" class="bad-textbox" id="friend5" style="width: 20%" placeholder="Friend"> <input type="text" class="bad-textbox" id="friend6" style="width: 20%" placeholder="Friend"> <input type="text" class="bad-textbox" id="friend7" style="width: 20%" placeholder="Friend"> <input type="text" class="bad-textbox" id="friend8" style="width: 20%" placeholder="Friend"> <input type="text" class="bad-textbox" id="friend9" style="width: 20%" placeholder="Friend"> <input type="text" class="bad-textbox" id="friend10" style="width: 20%" placeholder="Friend"> <br> <p>Offset:</p><input type="text" class="bad-textbox" value="69" id="offset" style="width: 8%"> </div> ` document.getElementById("hud-menu-settings").childNodes[3].innerHTML = "( o=^•ェ•)" document.getElementsByClassName("hud-settings-grid")[0].innerHTML = settingsHTML; document.getElementById('lagspam-btn').addEventListener('click', lagSpam) document.getElementById('lagspam-btn').addEventListener('click', lagSpambtn) document.getElementById("pauseSong").addEventListener('click', pauseAndResetAllSongs) document.getElementById("spamallparty-btn").addEventListener("click", spamAllParty) document.getElementById("autosell").addEventListener("click", giveSell); 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("uparrow").addEventListener("click", autouparrow); document.getElementById("uparrow").addEventListener("click", autouparrowbtn); document.getElementById("upstash").addEventListener("click", autoupstash); document.getElementById("upstash").addEventListener("click", autoupstashbtn); document.getElementById("upmage").addEventListener("click", autoupmage); document.getElementById("upmage").addEventListener("click", autoupmagebtn); document.getElementById("upmines").addEventListener("click", autoupmines); document.getElementById("upmines").addEventListener("click", autoupminesbtn); document.getElementById("upwall").addEventListener("click", autoupwall); document.getElementById("upwall").addEventListener("click", autoupwallbtn); document.getElementById("updoor").addEventListener("click", autoupdoor); document.getElementById("updoor").addEventListener("click", autoupdoorbtn); document.getElementById("uptrap").addEventListener("click", autouptrap); document.getElementById("uptrap").addEventListener("click", autouptrapbtn); document.getElementById("upcannon").addEventListener("click", autoupcannon); document.getElementById("upcannon").addEventListener("click", autoupcannonbtn); document.getElementById("upmelee").addEventListener("click", autoupmelee); document.getElementById("upmelee").addEventListener("click", autoupmeleebtn); document.getElementById("upbomb").addEventListener("click", autoupbomb); document.getElementById("upbomb").addEventListener("click", autoupbombbtn); document.getElementById("upharvester").addEventListener("click", autoupharvester); document.getElementById("upharvester").addEventListener("click", autoupharvesterbtn); document.getElementById("sellwall").addEventListener('click', toggleSellingWalls); document.getElementById("selldoor").addEventListener('click', toggleSellingDoors); document.getElementById("selltrap").addEventListener('click', toggleSellingTraps); document.getElementById("sellharvester").addEventListener('click', toggleSellingHarvs); document.getElementById("sellarrow").addEventListener('click', toggleSellingArrows); document.getElementById("sellcannon").addEventListener('click', toggleSellingCannons); document.getElementById("sellmagic").addEventListener('click', toggleSellingMages); document.getElementById("sellmelee").addEventListener('click', toggleSellingMelees); document.getElementById("sellbomb").addEventListener('click', toggleSellingBombs); document.getElementById("sellminer").addEventListener('click', toggleSellingMines); document.getElementById("spampartybyid-btn").addEventListener("click", spamPartyByID); 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("toggleresp").addEventListener('click', toggleRespawn) document.getElementById("toggleaim").addEventListener("click", toggleAim) document.getElementById("togglerb").addEventListener("click", toggleRebuild) document.getElementById("togglehealthup").addEventListener("click", toggleHealthUp) document.getElementById("towerheal").addEventListener("click", toggleHealSpell) document.getElementById("stashleave").addEventListener("click", autoleave); document.getElementById("toggleabpk").addEventListener("click", abpk); document.getElementById("toggleabsp").addEventListener("click", absp); document.getElementById("toggleabbw").addEventListener("click", abbw); document.getElementById("toggleabbm").addEventListener("click", abbm); document.getElementById("toggleabsh").addEventListener("click", absh); document.getElementById("togglespinner").addEventListener("click", spinnerbtn); 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("hidechat").addEventListener("click", hideChat) document.getElementById("hidepop").addEventListener("click", hidePopupOverlay); document.getElementById("hideldb").addEventListener("click", hideLeaderboard); document.getElementById("hidemap").addEventListener("click", hideMap); document.getElementById("hidepip").addEventListener("click", hidePIP); document.getElementById("mapenv").addEventListener("click", toggleEnvironmentVisibility); document.getElementById("daybright").addEventListener("click", toggleday); 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("biggrid").addEventListener("click", showGrid); document.getElementById("smolgrid").addEventListener("click", showGrids); document.getElementById('clearchat-btn').addEventListener('click', clearChatbtn) document.getElementById("battle").addEventListener('click', FIGHT); document.getElementById("trap").addEventListener('click', trapon); document.getElementById("switch").addEventListener('click', afkswitches); document.getElementById("move").addEventListener('click', togglemove); document.getElementById("border").addEventListener('click', showborder) document.getElementById("range").addEventListener('click', showRange) document.getElementById("tracer").addEventListener('click', showTracer) document.getElementById("rev4").addEventListener('click', togglerev4) document.getElementById("bowfollow").addEventListener('click', togglebowfollow) document.getElementById("zoom").addEventListener('click', toggleCombatZoom) document.getElementById("cornerfarm").addEventListener('click', buildcornerfarm) document.getElementById("allowfriend").addEventListener('click', togglefriend) function msToTime(s) { // Pad to 2 or 3 digits, default is 2 function pad(n, z) { z = z || 2; return ('00' + n).slice(-z); } var ms = s % 1000; s = (s - ms) / 1000; var secs = s % 60; s = (s - secs) / 60; var mins = s % 60; var hrs = (s - mins) / 60; return pad(hrs) + ':' + pad(mins) + ':' + pad(secs) + '.' + pad(ms, 3); } function counter(e = 0) { if (e <= -0.99949999999999999e24) { return Math.round(e / -1e23) / -10 + "TT"; } if (e <= -0.99949999999999999e21) { return Math.round(e / -1e20) / -10 + "TB"; } if (e <= -0.99949999999999999e18) { return Math.round(e / -1e17) / -10 + "TM"; } if (e <= -0.99949999999999999e15) { return Math.round(e / -1e14) / -10 + "TK"; } if (e <= -0.99949999999999999e12) { return Math.round(e / -1e11) / -10 + "T"; } if (e <= -0.99949999999999999e9) { return Math.round(e / -1e8) / -10 + "B"; } if (e <= -0.99949999999999999e6) { return Math.round(e / -1e5) / -10 + "M"; } if (e <= -0.99949999999999999e3) { return Math.round(e / -1e2) / -10 + "K"; } if (e <= 0.99949999999999999e3) { return Math.round(e) + ""; } if (e <= 0.99949999999999999e6) { return Math.round(e / 1e2) / 10 + "K"; } if (e <= 0.99949999999999999e9) { return Math.round(e / 1e5) / 10 + "M"; } if (e <= 0.99949999999999999e12) { return Math.round(e / 1e8) / 10 + "B"; } if (e <= 0.99949999999999999e15) { return Math.round(e / 1e11) / 10 + "T"; } if (e <= 0.99949999999999999e18) { return Math.round(e / 1e14) / 10 + "TK"; } if (e <= 0.99949999999999999e21) { return Math.round(e / 1e17) / 10 + "TM"; } if (e <= 0.99949999999999999e24) { return Math.round(e / 1e20) / 10 + "TB"; } if (e <= 0.99949999999999999e27) { return Math.round(e / 1e+23) / 10 + "TT"; } if (e >= 0.99949999999999999e27) { return Math.round(e / 1e+23) / 10 + "TT"; } } let TakingOver = [{ say: "We at the top again, now what?", time: 17000 }, { say: "Heavy lay the crown, but", time: 18050 }, { say: "Count Us", time: 20100 }, { say: "Higher than the mountain", time: 21150 }, { say: "And we be up here", time: 23200 }, { say: "for the long run", time: 24250 }, { say: "Strap in for a long one", time: 25300 }, { say: "We got everybody on one", time: 27350 }, { say: "Now you're coming at the king", time: 29400 }, { say: "so you better not miss", time: 31450 }, { say: "And we only get stronger", time: 33500 }, { say: "With everything I carry", time: 36550 }, { say: "up on my back", time: 37600 }, { say: "you should paint it up", time: 39650 }, { say: "with a target", time: 41700 }, { say: "Why would you dare me to", time: 46850 }, { say: "do it again?", time: 47900 }, { say: "Come get your spoiler up ahead", time: 50050 }, { say: "We're taking over,", time: 53100 }, { say: "We're taking over", time: 56150 }, { say: "Look at you come at my name,", time: 61100 }, { say: "you 'oughta know by now,", time: 63150 }, { say: "That We're Taking Over,", time: 66200 }, { say: "We're Taking Over", time: 69350 }, { say: "Maybe you wonder what", time: 74300 }, { say: "you're futures gonna be, but", time: 75350 }, { say: "I got it all locked up", time: 77400 }, { say: "Take a lap, now", time: 93450 }, { say: "Don't be mad, now", time: 95500 }, { say: "Run it back, run it back,", time: 97550 }, { say: "run it back, now", time: 98600 }, { say: "I got bodies lining up,", time: 100150 }, { say: "think you're dreaming", time: 101200 }, { say: "Of Greatness", time: 102250 }, { say: "Send you back home,", time: 103300 }, { say: "let you wake up", time: 105400 }, { say: "Why would you dare me to", time: 110550 }, { say: "do it again?", time: 111600 }, { say: "Come get your spoiler up ahead", time: 114700 }, { say: "We're taking over,", time: 117800 }, { say: "We're taking over", time: 120900 }, { say: "Look at you come at my name,", time: 126050 }, { say: "you 'oughta know by now,", time: 128150 }, { say: "That We're Taking Over,", time: 131200 }, { say: "We're Taking Over", time: 134300 }, { say: "Maybe you wonder what", time: 138450 }, { say: "you're futures gonna be, but", time: 139500 }, { say: "I got it all locked up", time: 140600 }, { say: "再以后,", time: 158050 }, { say: "除了厮杀,这还有其他么???", time: 159100 }, { say: "我左右,", time: 161200 }, { say: "键盘噼啪着,", time: 162250 }, { say: "时间滴答着", time: 163300 }, { say: "还不够,", time: 164350 }, { say: "你的固执,让我来守候", time: 165400 }, { say: "哪怕太迟,", time: 166450 }, { say: "也不想以后", time: 167500 }, { say: "就在这时,", time: 168550 }, { say: "放肆的打斗", time: 169600 }, { say: "I got the heart of a lion", time: 170650 }, { say: "I know the higher you climb", time: 171700 }, { say: "the harder you fall", time: 172750 }, { say: "I'm at the top of the mountain", time: 173800 }, { say: "Too many bodies to count", time: 174850 }, { say: "I've been through it all", time: 175900 }, { say: "I had to weather the storm", time: 176950 }, { say: "to get to the level I'm on", time: 178000 }, { say: "That's how the legend was born", time: 179050 }, { say: "All of my enemies already dead", time: 180100 }, { say: "I'm bored, I'm ready for more", time: 181200 }, { say: "They know I'm ready for war", time: 182250 }, { say: "I told 'em", time: 183300 }, { say: "We're taking over,", time: 184350 }, { say: "We're taking over", time: 187400 }, { say: "Look at you come at my name,", time: 192550 }, { say: "you 'oughta know by now,", time: 194650 }, { say: "That We're Taking Over,", time: 197700 }, { say: "We're Taking Over", time: 200800 }, { say: "Maybe you wonder what", time: 205950 }, { say: "you're futures gonna be, but", time: 207000 }, { say: "I got it all locked up", time: 208050 } ]; let NeverGonna = [{ say: "We're no strangers to Love", time: 19000 }, { say: "You know the rules", time: 23000 }, { say: "And so do I", time: 24050 }, { say: "A full commitment's what", time: 27000 }, { say: "I'm thinking of", time: 28500 }, { say: "You wouldn't get this", time: 31000 }, { say: "From any other guy", time: 33000 }, { say: "I", time: 35000 }, { say: "Just wanna tell you how im feeling", time: 36050 }, { say: "Gotta make you understand", time: 40500 }, { say: "Never gonna give you up", time: 43050 }, { say: "Never gonna let you down", time: 45000 }, { say: "Never gonna run around", time: 47000 }, { say: "And desert you", time: 49000 }, { say: "Never gonna make you cry", time: 52000 }, { say: "Never gonna say goodbye", time: 53050 }, { say: "Never gonna tell a lie", time: 56000 }, { say: "And hurt you", time: 58000 }, { say: "We've known each other", time: 61000 }, { say: "For so long", time: 63000 }, { say: "Your heart's been aching,", time: 64050 }, { say: "But", time: 66000 }, { say: "You're too shy to say it", time: 67050 }, { say: "Inside, we both know what's been going on", time: 69696 }, { say: "We know the game", time: 74000 }, { say: "And we're gonna play it", time: 75050 }, { say: "Aaaaaaaand", time: 77000 }, { say: "If you ask me how I'm feeling", time: 78500 }, { say: "Dont tell me you're too blind to see", time: 82000 }, { say: "Never gonna give you up", time: 85000 }, { say: "Never gonna let you down", time: 88000 }, { say: "Never gonna run around", time: 90000 }, { say: "And desert you", time: 91500 }, { say: "Never gonna make you cry", time: 94000 }, { say: "Never gonna say goodbye", time: 96000 }, { say: "Never gonna tell a lie", time: 98000 }, { say: "And hurt you", time: 100000 }, { say: "Never gonna give you up", time: 102500 }, { say: "Never gonna let you down", time: 104000 }, { say: "Never gonna run around", time: 106000 }, { say: "And desert you", time: 108000 }, { say: "Never gonna make you cry", time: 110000 }, { say: "Never gonna say goodbye", time: 112000 }, { say: "Never gonna tell a lie", time: 115000 }, { say: "And hurt you", time: 117000 }, { say: "(Ooh, give you up),", time: 120000 }, { say: "(Ooh, give you up)", time: 123500 }, { say: "Never gonna give,", time: 127500 }, { say: "Never gonna give", time: 128550 }, { say: "(Give you up)", time: 130000 }, { say: "Never gonna give,", time: 132500 }, { say: "Never gonna give", time: 133550 }, { say: "(Give you up)", time: 135050 }, { say: "We've known each other", time: 137000 }, { say: "For so long", time: 138050 }, { say: "Your heart's been aching,", time: 141000 }, { say: "But", time: 142050 }, { say: "You're too shy to say it", time: 143500 }, { say: "Inside, we both know what's been", time: 145000 }, { say: "Going on", time: 147500 }, { say: "We know the game and we're", time: 149500 }, { say: "Gonna play it", time: 151700 }, { say: "I", time: 153500 }, { say: "Just wanna tell you how I'm feeling", time: 155000 }, { say: "Gotta make you understand", time: 159000 }, { say: "Never gonna give you up", time: 161500 }, { say: "Never gonna let you down", time: 163500 }, { say: "Never gonna run around", time: 165500 }, { say: "And desert you", time: 167000 }, { say: "Never gonna make you cry", time: 170000 }, { say: "Never gonna say goodbye", time: 172000 }, { say: "Never gonna tell a lie", time: 174000 }, { say: "And hurt you", time: 176000 }, { say: "Never gonna give you up", time: 178500 }, { say: "Never gonna let you down", time: 180500 }, { say: "Never gonna run around", time: 182500 }, { say: "And desert you", time: 184500 }, { say: "Never gonna make you cry", time: 187000 }, { say: "Never gonna say goodbye", time: 189000 }, { say: "Never gonna tell a lie", time: 191000 }, { say: "And hurt you", time: 193000 }, { say: "Never gonna give you up", time: 195000 }, { say: "Never gonna let you down", time: 197000 }, { say: "Never gonna run around", time: 199000 }, { say: "And desert you", time: 201000 }, { say: "Never gonna make you cry", time: 203000 }, { say: "Never gonna say goodbye", time: 205000 }, { say: "Never gonna tell a lie", time: 207000 }, { say: "And hurt you", time: 209000 }, ] let RuleTheWorld = [{ say: "Welcome to your life", time: 29000 }, { say: "There's no turning back", time: 33000 }, { say: "Even while we sleep", time: 37000 }, { say: "We will find you", time: 42000 }, { say: "Acting on your", time: 44000 }, { say: "Best behaviour", time: 46200 }, { say: "Turn your back", time: 48400 }, { say: "On mother nature", time: 50700 }, { say: "Everybody", time: 52300 }, { say: "Wants to rule the world", time: 54900 }, { say: "It's my own design", time: 67700 }, { say: "It's my own remorse", time: 72000 }, { say: "Help me to decide", time: 76000 }, { say: "Help me make the", time: 80000 }, { say: "Most of freedom", time: 83000 }, { say: "And of pleasure", time: 84500 }, { say: "Nothing ever", time: 87000 }, { say: "Lasts forever", time: 89000 }, { say: "Everybody", time: 91000 }, { say: "Wants to rule the world", time: 93500 }, { say: "There's a room where", time: 96000 }, { say: "The light won't find you", time: 97800 }, { say: "Holding hands while the walls", time: 100000 }, { say: "Come tumbling down", time: 102600 }, { say: "When they do", time: 104550 }, { say: "I'll be right behind you", time: 105600 }, { say: "So glad we've almost made it", time: 109000 }, { say: "So sad they had to fade it", time: 113000 }, { say: "Everybody", time: 117000 }, { say: "Wants to rule the world", time: 119000 }, { say: "I can't stand this indecision", time: 168500 }, { say: "Married with a lack of vision", time: 172700 }, { say: "Everybody", time: 177000 }, { say: "Wants to rule the", time: 179000 }, { say: "Say that you'll", time: 182000 }, { say: "Never, never,", time: 183550 }, { say: "Never need it", time: 184800 }, { say: "One headline", time: 186000 }, { say: "Why beileve it?", time: 187800 }, { say: "Everybody", time: 190000 }, { say: "Wants to rule the world", time: 192000 }, { say: "All for freedom", time: 203000 }, { say: "And for pleasure", time: 205000 }, { say: "Nothing ever", time: 207000 }, { say: "Lasts forever", time: 209000 }, { say: "Everybody", time: 211000 }, { say: "Wants to rule the world", time: 213500 } ] const DejaVu = [{ say: 'See your body', time: 39750 }, { say: 'Into the moonlight', time: 41300 }, { say: 'Even if I try to cancel', time: 42850 }, { say: 'All the pictures', time: 46000 }, { say: 'Into the mind', time: 47600 }, { say: "There's a flashing in my eyes", time: 49000 }, { say: 'Don\'t you see my condition', time: 51250 }, { say: 'The fiction', time: 53000 }, { say: 'Is gonna run it again', time: 54750 }, { say: "Can't you see now illusions", time: 56500 }, { say: 'Right into your mind', time: 58150 }, { say: 'Deja vu', time: 60000 }, { say: 'I\'ve just been', time: 61250 }, { say: 'In this place before', time: 62850 }, { say: 'Higher on the street', time: 64500 }, { say: 'And I know it\'s my time to go', time: 66150 }, { say: 'Calling you', time: 67750 }, { say: 'And the search is a mystery', time: 69600 }, { say: 'Standing on my feet', time: 71450 }, { say: 'It\'s so hard when', time: 73300 }, { say: 'I try to be me', time: 75000 }, { say: 'Uoooh!', time: 77000 }, { say: 'Deja vu', time: 78500 }, { say: 'I\'ve just been', time: 80000 }, { say: 'In this time before', time: 81550 }, { say: 'Higher on the beat', time: 83000 }, { say: 'And I know it\'s a place to go', time: 84550 }, { say: 'Calling you', time: 86100 }, { say: 'And the search is a mystery', time: 87850 }, { say: 'Standing on my feet', time: 89550 }, { say: 'It\'s so hard when', time: 91250 }, { say: 'I try to be me', time: 93000 }, { say: 'Yeah!', time: 94550 }, { say: 'See the future', time: 105100 }, { say: 'Into the present', time: 106750 }, { say: 'See my past lives', time: 108250 }, { say: 'In the distance', time: 110000 }, { say: 'Try to guess now', time: 111500 }, { say: "What's going on", time: 113000 }, { say: 'And the band begins to play...', time: 114500 }, { say: 'Don\'t you see my condition', time: 116000 }, { say: 'The fiction', time: 117750 }, { say: 'Is gonna run it again', time: 119250 }, { say: "Can't you see now illusions", time: 121000 }, { say: 'Right into your mind', time: 123000 }, { say: 'Deja vu', time: 125000 }, { say: 'I\'ve just been', time: 126500 }, { say: 'In this place before', time: 128000 }, { say: 'Higher on the street', time: 130000 }, { say: 'And I know it\'s my time to go', time: 131500 }, { say: 'Calling you', time: 133000 }, { say: 'And the search is a mystery', time: 134750 }, { say: 'Standing on my feet', time: 136500 }, { say: 'It\'s so hard when', time: 138250 }, { say: 'I try to be me', time: 140000 }, { say: 'Uoooh!', time: 141750 }, { say: 'Deja vu', time: 143500 }, { say: 'I\'ve just been', time: 145250 }, { say: 'In this time before', time: 146750 }, { say: 'Higher on the beat', time: 148500 }, { say: 'And I know it\'s a place to go', time: 150000 }, { say: 'Calling you', time: 151500 }, { say: 'And the search is a mystery', time: 152750 }, { say: 'Standing on my feet', time: 154500 }, { say: 'It\'s so hard when', time: 156000 }, { say: 'I try to be me', time: 157500 }, { say: 'Yeah!', time: 159250 }, { say: 'See your body', time: 170600 }, { say: 'Into the moonlight', time: 172250 }, { say: 'Even if I try to cancel', time: 173750 }, { say: 'All the pictures', time: 175500 }, { say: 'Into the mind', time: 176750 }, { say: "There's a flashing in my eyes", time: 179300 }, { say: 'Don\'t you see my condition', time: 182100 }, { say: 'The fiction', time: 184000 }, { say: 'Is gonna run it again', time: 185500 }, { say: "Can't you see now illusions", time: 187350 }, { say: 'Right into your mind', time: 189250 }, { say: 'Deja vu', time: 191000 }, { say: 'I\'ve just been', time: 192000 }, { say: 'In this place before', time: 193500 }, { say: 'Higher on the street', time: 195000 }, { say: 'And I know it\'s my time to go', time: 196500 }, { say: 'Calling you', time: 198000 }, { say: 'And the search is a mystery', time: 199750 }, { say: 'Standing on my feet', time: 201500 }, { say: 'It\'s so hard when', time: 203000 }, { say: 'I try to be me', time: 204500 }, { say: 'Uoooh!', time: 206250 }, { say: 'Deja vu', time: 208000 }, { say: 'I\'ve just been', time: 209750 }, { say: 'In this time before', time: 211250 }, { say: 'Higher on the beat', time: 213000 }, { say: 'And I know it\'s a place to go', time: 214500 }, { say: 'Calling you', time: 216000 }, { say: 'And the search is a mystery', time: 217250 }, { say: 'Standing on my feet', time: 219000 }, { say: 'It\'s so hard when', time: 220250 }, { say: 'I try to be me', time: 221750 }, { say: 'Yeah!', time: 222000 }, ]; let DownLikeThat = [{ say: "Why you gotta go,", time: 7000 }, { say: "Go and let me down", time: 9500 }, { say: "Like that, ayy", time: 11000 }, { say: "Down like that", time: 12500 }, { say: "Oh why,", time: 13550 }, { say: "Why you go", time: 15500 }, { say: "And let me", time: 16550 }, { say: "Down like that", time: 17600 }, { say: "Ayy, Down like?", time: 18700 }, { say: "I was nothin but loyal to you from the start", time: 20000 }, { say: "You changed up on me as soon as things start gettin hard", time: 23000 }, { say: "I've only then the light despite us being in the dark", time: 26500 }, { say: "And you let me down like that,", time: 30000 }, { say: "Yeah", time: 32000 }, { say: "Down like that", time: 33050 }, { say: "(Oh why)", time: 34100 }, { say: "Yeah, Yeah", time: 35200 }, { say: "I want that knockdown", time: 36300 }, { say: "Fuck up the system", time: 38200 }, { say: "Make it shut down", time: 40000 }, { say: "I'm cold with this,", time: 42000 }, { say: "Slow man down the freezer", time: 43600 }, { say: "Wanna backstab like frieza", time: 45000 }, { say: "Dictate death like caesar", time: 47000 }, { say: "Always come through with a bee", time: 49000 }, { say: "Got to do a lot to trouble me", time: 50050 }, { say: "Visionary still won't tunnel me", time: 51700 }, { say: "Me to you, now that will chuckle me", time: 53000 }, { say: "Devilish views when they're aiming at the profit", time: 55000 }, { say: "Emitting pain till you're nothing", time: 56500 }, { say: "Remember what I said when that pussy tried moving with the opps", time: 58000 }, { say: "Now he back with the blocks nigga", time: 60000 }, { say: "Why you gotta go,", time: 62000 }, { say: "Go and let me down", time: 64500 }, { say: "Like that, ayy,", time: 66000 }, { say: "Down like that?", time: 67400 }, { say: "Oh why,", time: 68450 }, { say: "Why you go", time: 70000 }, { say: "And let me down like that", time: 71050 }, { say: "Ayy, down like", time: 73300 }, { say: "I was nothin but loyal to you from the start", time: 74900 }, { say: "You changed up on me as soon as things start gettin hard", time: 78000 }, { say: "I've only then the light despite us being in the dark", time: 81500 }, { say: "And you let me down like that,", time: 85000 }, { say: "Yeah,", time: 87000 }, { say: "Down like that", time: 88050 }, { say: "(Oh why)", time: 89100 }, { say: "Phantoms in my yard so ring around the rolls", time: 90400 }, { say: "(SKRR)", time: 92400 }, { say: "Hardest on the block the biggest one, da boss", time: 93650 }, { say: "Helicopter pad the home os sammy sosa", time: 97000 }, { say: "(Biggest)", time: 98800 }, { say: "Stealing all the bases I'm the ladies token", time: 100000 }, { say: "(WOOO)", time: 102000 }, { say: "Bitches always bad,", time: 104300 }, { say: "I'm known to blow the budgets", time: 105350 }, { say: "Meek was at the crib so double M the subject", time: 107000 }, { say: "(AHHH)", time: 110000 }, { say: "Condo got three levels,", time: 111100 }, { say: "Postmate all the lunches", time: 112200 }, { say: "Flippin all the kilos", time: 114200 }, { say: "Keepin all the grudges", time: 115250 }, { say: "(BOSS)", time: 117000 }, { say: "Ain't no more let downs unless the top is getting dropped", time: 118050 }, { say: "I love it at the top my concierge don't ever stop me", time: 120990 }, { say: "You know I fuck with ross I even went and bought da block", time: 124000 }, { say: "A hundred million dollars strong I really came from sellin rocks", time: 127000 }, { say: "Championship belt them vvs they spark", time: 130000 }, { say: "Steal it hit the gas and get out on the narcs", time: 133400 }, { say: "Killas move for free I just can't pick a cost", time: 135900 }, { say: "Put the drip on market took it to the charts", time: 138700 }, { say: "Now I'm rocking with the biggest", time: 141000 }, { say: "And I'm fucking with the boss", time: 142700 }, { say: "Why you gotta go,", time: 144000 }, { say: "Go and let me down", time: 146800 }, { say: "Like that, ayy", time: 148000 }, { say: "Down like that", time: 149700 }, { say: "Oh why,", time: 150800 }, { say: "Why you go", time: 152900 }, { say: "And let me down like that", time: 154000 }, { say: "Ayy, down like", time: 155250 }, { say: "I was nothin but loyal to you from the start", time: 157350 }, { say: "You changed up on me as soon as things start gettin hard", time: 160000 }, { say: "I've only then the light despite us being in the dark", time: 164000 }, { say: "And you let me down like that,", time: 167700 }, { say: "Yeah,", time: 169400 }, { say: "Down like that", time: 170450 }, { say: "(Oh why)", time: 171500 } ] let superidol = [{ say: "Super idol 的笑容", time: 300 }, { say: "都没你的甜", time: 2300 }, { say: "八月正午的阳光", time: 4000 }, { say: "都没你耀眼", time: 5500 }, { say: "热爱105度的你", time: 7800 }, { say: "滴滴青纯的蒸馏水", time: 10100 }, { say: "你不知道你有多可爱", time: 16000 }, { say: "跌倒后会傻笑着再站起来", time: 18400 }, { say: "你从来都不轻言失败", time: 22600 }, { say: "对梦想的执着一直不曾更改", time: 25400 }, { say: "很安心", time: 29000 }, { say: "当你对我说", time: 30700 }, { say: "不怕有我在", time: 32100 }, { say: "放着让我来", time: 34300 }, { say: "勇敢追自己的梦想", time: 36800 }, { say: "那坚定的模样", time: 38700 }, { say: "Super idol 的笑容", time: 42700 }, { say: "都没你的甜", time: 44500 }, { say: "八月正午的阳光", time: 46000 }, { say: "都没你耀眼", time: 48000 }, { say: "热爱105度的你", time: 49800 }, { say: "滴滴清纯的蒸馏水", time: 52500 }, { say: "在这独一无二", time: 56800 }, { say: "属于我的时代", time: 58000 }, { say: "不怕失败来一场", time: 60000 }, { say: "痛快的热爱", time: 62000 }, { say: "热爱105度的你", time: 63800 }, { say: "滴滴清纯的蒸馏水", time: 66300 }, { say: "在这独一无二", time: 70700 }, { say: "属于我的时代", time: 72000 }, { say: "莫忘了初心常在", time: 74000 }, { say: "痛快去热爱", time: 76000 }, { say: "热爱105度的你", time: 77700 }, { say: "滴滴青纯的蒸馏水", time: 80400 }, { say: "喝一,口又,", time: 83000 }, { say: "活力,全开~", time: 84500 }, { say: "再次,回到,", time: 90000 }, { say: "最佳,状态~", time: 91700 }, { say: "喝一口哟~", time: 97000 }, { say: "喔你不知道你有多可爱", time: 99300 }, { say: "跌倒后会傻笑着再站起来", time: 102500 }, { say: "你从来都不轻言失败", time: 106900 }, { say: "对梦想的执着一直不曾更改", time: 109600 }, { say: "很安心", time: 113000 }, { say: "当你对我说", time: 114500 }, { say: "不怕有我在", time: 116000 }, { say: "放着让我来", time: 117900 }, { say: "勇敢追自己梦想", time: 120700 }, { say: "那坚定的模样", time: 123000 }, { say: "Super idol 的笑容", time: 126800 }, { say: "都没你的甜", time: 128200 }, { say: "八月正午的阳光", time: 130300 }, { say: "都没你耀眼", time: 132000 }, { say: "热爱105度的你", time: 133700 }, { say: "滴滴青纯的蒸馏水", time: 136200 }, { say: "在这独一无二", time: 140900 }, { say: "属于我的时代", time: 142000 }, { say: "不怕失败来一场", time: 144100 }, { say: "痛快的热爱", time: 146000 }, { say: "热爱105度的你", time: 147800 }, { say: "滴滴清纯的蒸馏水", time: 150500 }, { say: "在这独一无二", time: 154900 }, { say: "属于我的时代", time: 156000 }, { say: "莫忘了初心常在", time: 158500 }, { say: "痛快去热爱", time: 160000 }, { say: "热爱105度的你", time: 161900 }, { say: "滴滴青纯的蒸馏水", time: 164200 }, { say: "喝一,口又,", time: 167000 }, { say: "活力,全开~", time: 168700 }, { say: "再次,回到,", time: 174000 }, { say: "最佳,状态~", time: 175900 }, { say: "喝一,口又,", time: 181000 }, { say: "活力,全开~", time: 182800 } ] let ForTheNight = [ { say: "CashMoneyAP", time: 1700 }, { say: "Get 'em, get 'em, get 'em, oh", time: 4500 }, { say: "Oh (I'm tryna fuckin' get 'em),", time: 6900 }, { say: "Oh (I'm tryna fuckin' get 'em)", time: 9000 }, { say: "Oh, oh (Get 'em), oh", time: 10050 }, { say: "Oh (Gettin big on this), oh, oh, oh", time: 12300 }, { say: "Oh, oh, oh, oh", time: 15500 }, { say: "What do you want?", time: 22000 }, { say: "Won't tell you twice, yeah", time: 24000 }, { say: "I'm a thief in the night", time: 25800 }, { say: "(Thief in the night), oh", time: 27000 }, { say: "I did some wrong (Oh, oh),", time: 29300 }, { say: "But I'm always right (Oh, oh)", time: 31700 }, { say: "Said I know how to shoot", time: 33333 }, { say: "(Oh, oh)", time: 34373 }, { say: "And I know how to fight", time: 35500 }, { say: "If I tell you once,", time: 37000 }, { say: "Won't tell you twice", time: 38900 }, { say: "I'm real discreet", time: 41000 }, { say: "Like a thief in the night", time: 42900 }, { say: "(Look)", time: 44000 }, { say: "If I call you bae,", time: 45050 }, { say: "You bae for the day", time: 46300 }, { say: "Or a bae for the night,", time: 48800 }, { say: "You not my wife", time: 50000 }, { say: "She want a killer", time: 52400 }, { say: "To fuck all night", time: 54400 }, { say: "I wanna fuck on a thot,", time: 56300 }, { say: "Gimme head all night", time: 58000 }, { say: "AP, big rocks,", time: 60000 }, { say: "In the hood with the 'rillas", time: 63000 }, { say: "5k on the dinner,", time: 64900 }, { say: "Bring three hundered thou' to the dealer", time: 66666 }, { say: "I did some wrong (Oh, oh),", time: 67800 }, { say: "But I'm always right (Oh, oh)", time: 69966 }, { say: "Said I know how to shoot", time: 71700 }, { say: "(Oh, oh)", time: 72750 }, { say: "And I know how to fight", time: 73800 }, { say: "If I tell you once,", time: 75000 }, { say: "Won't tell you twice", time: 77000 }, { say: "I'm real discreet,", time: 79000 }, { say: "Like a thief in the night", time: 80900 }, { say: "(Baby)", time: 82900 }, { say: "I'm rich but I'm ridin',", time: 83950 }, { say: "I'm low on exotic,", time: 85000 }, { say: "I'm 'bout to fly out and go get me some", time: 86050 }, { say: "Nothin' ain't seen, all this money on me,", time: 88000 }, { say: "Hunnid racks in the bad, thats honey bun", time: 89400 }, { say: "Baby og, I been runnin' these streets,", time: 91500 }, { say: "Got the game from lashawn, I'm my mama's son", time: 93500 }, { say: "Learned 'bout the triple cross when I was young", time: 95900 }, { say: "And I know I ain't goin' so I keep a gun", time: 97200 }, { say: "I flew to Paris just to buy some dior", time: 99100 }, { say: "She beggin' for attention, I don't see her", time: 100969 }, { say: "C. I. P. Pop,", time: 102600 }, { say: "I wish that you could see us", time: 103650 }, { say: "Million cash plus whenever I go re-up", time: 104700 }, { say: "I got some niggas in the street, won't beat me", time: 106400 }, { say: "I got the iindustry tryna be me", time: 108400 }, { say: "I just go Ray Charles, they can't see me", time: 110500 }, { say: "I'm in a Rolls-Royce with a RiRi", time: 112500 }, { say: "I did some wrong (Oh, oh),", time: 113700 }, { say: "But I'm always right (Oh, oh)", time: 115500 }, { say: "Said I know how to shoot", time: 117200 }, { say: "(Oh, oh)", time: 118250 }, { say: "And I know how to fight", time: 119300 }, { say: "If I tell you once,", time: 121000 }, { say: "Won't tell you twice", time: 123000 }, { say: "I'm real discreet,", time: 124900 }, { say: "Like a thief in the night", time: 125950 }, { say: "(Yeah)", time: 128500 }, { say: "Like a thief in the night", time: 129550 }, { say: "(Thief)", time: 130600 }, { say: "I pull up, give her D for the night (Uh-huh)", time: 131650 }, { say: "Tryna fuck in the V, it's aight (Let's fuck)", time: 133000 }, { say: "We can't fuck up my seats 'cause they white", time: 134900 }, { say: "(That's my seats, watch my motherfuckin' seats)", time: 136000 }, { say: "I'm livin' like \"Thriller\",", time: 137200 }, { say: "I only come out at the night time", time: 138300 }, { say: "She don't fuck with liquor", time: 139800 }, { say: "Don't like bein' tipsy", time: 140850 }, { say: "She don't do the Henny,", time: 141900 }, { say: "Just white wine (What she do?)", time: 142950 }, { say: "Pop the cork on some new Pinot Grigio (Yeah)", time: 144000 }, { say: "I pull up in the Porsche wit' a freaky hoe (Zoom)", time: 145900 }, { say: "Park the porsche and pull up in a Lambo' (Hmph)", time: 147000 }, { say: "I hop out, Major Payne, rockin' camo (Yessir)", time: 149000 }, { say: "Think she cute, make her fuck,", time: 151000 }, { say: "Watch her man go (She cute)", time: 152050 }, { say: "Like to shoot, light you up,", time: 153100 }, { say: "Bitch, I'm Rambo", time: 154150 }, { say: "Cuban link full of rocks,", time: 155200 }, { say: "It's a choker (Oh)", time: 156250 }, { say: "Rest in peace to the Pop,", time: 157300 }, { say: "Make me smoke ya", time: 158350 }, { say: "I did some wrong (Oh, oh),", time: 159400 }, { say: "But I'm always right (Oh, oh)", time: 161000 }, { say: "Said I know how to shoot", time: 162900 }, { say: "(Oh, oh)", time: 163950 }, { say: "And I know how to fight", time: 165000 }, { say: "If I tell you once,", time: 166900 }, { say: "Won't tell you twice", time: 168800 }, { say: "I'm real discreet,", time: 169900 }, { say: "Like a thief in the night", time: 171000 } ] let CocoNut = [ { say: "La la la, la la la, la la la la la la", time: 100 }, { say: "La la la, la la la, la la la la la la", time: 4000 }, { say: "La la la, la la la, la la la la la la", time: 7500 }, { say: "La la la, la la la, la la la la la la", time: 11000 }, { say: "KO KO NUT", time: 15000 }, { say: "KO KO KO KO NUT", time: 16400 }, { say: "(kokonut)", time: 17450 }, { say: "KO KO NUT", time: 18500 }, { say: "KO KO KO KO KO NUT", time: 19900 }, { say: "(kokonut)", time: 21400 }, { say: "KO KO NUT", time: 22450 }, { say: "KO KO KO KO KO NUT", time: 23500 }, { say: "(kokonut)", time: 24700 }, { say: "KO KO NUT", time: 25750 }, { say: "KO KO KO KO KO NUT", time: 26900 }, { say: "The kokonut nut", time: 28900 }, { say: "Is a giant nut", time: 30000 }, { say: "If you eat too much...", time: 31050 }, { say: "You'll get VERY fat!!!", time: 33400 }, { say: "Now", time: 35000 }, { say: "The kokonut nut", time: 36050 }, { say: "Is a big big nut", time: 37400 }, { say: "But this delicious nut...", time: 39000 }, { say: "Is NOT a nut!!!", time: 41000 }, { say: "It's a koko fruit", time: 42900 }, { say: "(It's a koko fruit)", time: 44500 }, { say: "Of the koko tree", time: 46800 }, { say: "(Of the koko tree)", time: 48000 }, { say: "From the koko palm family", time: 50000 }, { say: "La la la la la", time: 52000 }, { say: "There are so many uses", time: 54000 }, { say: "Of the kokonut tree", time: 55200 }, { say: "You can build a bigger", time: 57450 }, { say: "House for the family", time: 58500 }, { say: "All you need is to", time: 61000 }, { say: "Find the kokonut man", time: 62500 }, { say: "If he cuts the tree...", time: 65000 }, { say: "I get the fruits free!!!", time: 66690 }, { say: "It's a koko fruit", time: 68100 }, { say: "(It's a koko fruit)", time: 70000 }, { say: "Of the koko tree", time: 71900 }, { say: "(Of the koko tree)", time: 73900 }, { say: "From the koko palm family", time: 75400 }, { say: "La la la la la", time: 78000 }, { say: "KO KO NUT", time: 80000 }, { say: "KO KO KO KO KO NUT", time: 81050 }, { say: "(kokonut)", time: 82900 }, { say: "KO KO NUT", time: 83950 }, { say: "KO KO KO KO KO NUT", time: 85000 }, { say: "The kokonut bark for the kitchen floor", time: 86300 }, { say: "If you save some of it...", time: 89700 }, { say: "You can build a door", time: 91900 }, { say: "Now", time: 92950 }, { say: "The kokonut trunk", time: 94000 }, { say: "Do not throw this junk", time: 95050 }, { say: "If you save some of it...", time: 97000 }, { say: "You'll have a second floor!!!", time: 98600 }, { say: "The kokonut wood", time: 101500 }, { say: "Is very good", time: 103000 }, { say: "It can stand 20 years...", time: 104600 }, { say: "If you pray it wood!!! :D", time: 106000 }, { say: "Now", time: 107500 }, { say: "The kokonut root", time: 108550 }, { say: "To tell you the truth", time: 109800 }, { say: "You can throw it...", time: 111800 }, { say: "Or use it as firewood!!!", time: 112850 }, { say: "The kokonut leaves", time: 115900 }, { say: "Good shade it gives", time: 117400 }, { say: "For the roof...", time: 119000 }, { say: "For the walls up against the theives!!!", time: 120050 }, { say: "Now", time: 121950 }, { say: "The kokonut fruit", time: 123000 }, { say: "Says my relatives", time: 124300 }, { say: "Makes good cannon balls...", time: 126400 }, { say: "Up against the thieves!!!", time: 128000 }, { say: "It's a kokofruit", time: 130000 }, { say: "(It's a koko fruit)", time: 131950 }, { say: "Of the koko tree", time: 133000 }, { say: "(Of the koko tree)", time: 135000 }, { say: "From the koko palm family", time: 137000 }, { say: "La la la la la", time: 140000 }, { say: "The kokonut nut", time: 141300 }, { say: "Is a giant nut", time: 143000 }, { say: "If you eat too much...", time: 144100 }, { say: "You'll get very fat!!!", time: 146000 }, { say: "Now", time: 147300 }, { say: "The kokonut nut", time: 148350 }, { say: "Is a big big nut", time: 149900 }, { say: "But this delicious nut...", time: 151200 }, { say: "Is not a nut!!!", time: 152900 }, { say: "The kokonut nut", time: 155000 }, { say: "Is a giant nut", time: 157000 }, { say: "If you eat too much...", time: 158850 }, { say: "You'll get very fat!!!", time: 160400 }, { say: "Now", time: 161450 }, { say: "The kokonut nut", time: 162500 }, { say: "Is a big big nut", time: 164000 }, { say: "But this delicious nut...", time: 165300 }, { say: "Is not a nut!!!", time: 167700 }, { say: "It's a koko fruit", time: 169000 }, { say: "(It's a koko fruit)", time: 170900 }, { say: "Of the koko tree", time: 171950 }, { say: "(Of the koko tree)", time: 174400 }, { say: "From the koko palm family", time: 176500 }, { say: "La la la la la", time: 179000 }, { say: "It's a koko fruit", time: 180000 }, { say: "(It's a koko fruit)", time: 181900 }, { say: "Of the koko tree", time: 182900 }, { say: "(Of the koko tree)", time: 185900 }, { say: "From the koko palm family", time: 187000 }, { say: "La la la la la la", time: 190000 }, { say: "It's a koko fruit", time: 191050 }, { say: "(It's a koko fruit", time: 192900 }, { say: "Of the koko tree", time: 194300 }, { say: "(Of the koko tree)", time: 196100 }, { say: "From the COCO palm familyyyyyyyyyyyyyy", time: 198000 }, { say: "(La la la la la la la la la la la la la la la la la la la la la)", time: 202700 }, { say: "Hooray", time: 209000 } ] let RapGod = [ { say: "Look,", time: 1200 }, { say: "I was gonna go easy on you and not to hurt your feelings", time: 2400 }, { say: "But I'm only going to get this one chance", time: 5000 }, { say: "Something's wrong, I can feel it", time: 10000 }, { say: "Just a feeling I've got", time: 12000 }, { say: "Like something's about to happen,", time: 14700 }, { say: "But I don't know what", time: 16700 }, { say: "If that mean what I think it means,", time: 18000 }, { say: "We're in trouble, big trouble", time: 19500 }, { say: "And if he is as bananas as you say", time: 21000 }, { say: "I'm not taking any chances", time: 23400 }, { say: "You were just what the doctor ordered", time: 24700 }, { say: "I'm beginning to feel like a rap god, rap god", time: 26100 }, { say: "All my people from the front to the back nod, back nod", time: 29500 }, { say: "Now who thinks their arms are long enough to slap box, slap box?", time: 32600 }, { say: "They said I rap like a robot, so call me rapbot", time: 35900 }, { say: "But for me to rap like a computer must be in my genes", time: 38200 }, { say: "I got a laptop in my back pocket", time: 40700 }, { say: "My pen'll go off when I half-cock it", time: 42600 }, { say: "Got a fat knot from that rap profit", time: 44000 }, { say: "Made a living and a killing off it", time: 45600 }, { say: "Ever since bill Clinton was still in office", time: 46700 }, { say: "With Monica Lewinsky feeling on his nut-sack", time: 48200 }, { say: "I'm an MC still as honest", time: 50400 }, { say: "But as rude and indecent as all hell syllables", time: 51700 }, { say: "Skill-a-holic (Kill 'em all with)", time: 53800 }, { say: "This slickety, gibbedy, hibbedy hip hop", time: 55000 }, { say: "You don't really wanna get", time: 56050 }, { say: "Into a pissing match with this rappioy brat", time: 57100 }, { say: "Packing a mac in the back of the AC,", time: 59000 }, { say: "Backpack rap crap, yep, yackioy-yac", time: 60050 }, { say: "And at the exact same time I attempt these lyrical", time: 61800 }, { say: "Acrobat stunts while I'm practicing", time: 63300 }, { say: "That I'll still be able to break a motherfuckin' table", time: 65000 }, { say: "Over the back of a couple of faggots", time: 66100 }, { say: "And crack it in half", time: 67300 }, { say: "Only realised it was ironic", time: 68350 }, { say: "I was signed to aftermath after the fact", time: 69900 }, { say: "How could I not blow? All I do is drop F-bombs", time: 71800 }, { say: "Feel my wrath of attack", time: 73850 }, { say: "Rappers are having a rough time period", time: 74900 }, { say: "Here's a maxipad", time: 76250 }, { say: "It's actually disastrously bad", time: 77300 }, { say: "For the wack while", time: 78800 }, { say: "I'm masterfully constructing this masterpiece as", time: 79850 }, { say: "I'm beginning to feel like a rap god, rap god", time: 81700 }, { say: "All my people from the front to the back nod, back nod", time: 84600 }, { say: "Now who thinks their arms are long enough to slap box, slap box", time: 87900 }, { say: "Let me show you maintaining", time: 90800 }, { say: "This shit ain't that hard, that hard", time: 92000 }, { say: "Everybody want the key and", time: 94000 }, { say: "The secret to rap immortality like I have got", time: 95050 }, { say: "Well, to be truthful the blueprint's simply rage", time: 97400 }, { say: "And youthful exuberance", time: 98900 }, { say: "Everybody loves to root for a nuisance", time: 100000 }, { say: "Hit the earth like an asteroid, did nothing but", time: 101700 }, { say: "Shoot for the moon since (pew)", time: 103400 }, { say: "MC's get taken to school with this music", time: 104900 }, { say: "'Cause I use it as a vehicle to bus the rhyme", time: 106700 }, { say: "Now I lead a new school full of students", time: 108500 }, { say: "Me? I'm a product of rakim, kaim shabazz, 2 pac", time: 110000 }, { say: "NWA, cube, hey, doc, ren, yella, eazy", time: 112300 }, { say: "Thank you, they got slim", time: 114400 }, { say: "Inspired enough to one day grow up", time: 116600 }, { say: "Blow up and be in a position", time: 118000 }, { say: "To meet run DMC, induct them into the", time: 119400 }, { say: "Motherfuckin' rock n'", time: 121000 }, { say: "Roll hall of fame", time: 123000 }, { say: "Even though I walk in the church and", time: 124050 }, { say: "Burst in a ball of flames", time: 125100 }, { say: "Only hall of fame", time: 126150 }, { say: "I be inducted in is the alcohol of fame", time: 127200 }, { say: "On the wall of shame", time: 129000 }, { say: "You fags think it's all a game 'til", time: 130050 }, { say: "I walk a flock of flames, off of planking,", time: 132000 }, { say: "Tell me what in the fuck are you thinking?", time: 134800 }, { say: "Little gay looking boy", time: 123456 }, { say: "So gay I can barely say it", time: 123456 }, { say: "With a straight face looking boy", time: 123456 }, { say: "You witnessing a mass occur", time: 123456 }, { say: "Like you watching", time: 123456 }, { say: "A church gathering take place looking boy", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, { say: "sdjfskdljfl", time: 123456 }, ] let timeout1 = [] let timeout2 = [] let timeout3 = [] let timeout4 = [] let timeout5 = [] let timeout6 = [] let timeout7 = [] let timeout8 = [] let timeout9 = [] function sendSongLyrics(song, audio, timeout) { let currentLine = 0; let accumulatedDelay = 0; function sendMessage() { if (currentLine < song.length) { const message = song[currentLine].say; const delay = song[currentLine].time - accumulatedDelay; timeout.push(setTimeout(() => { game.network.sendRpc({ name: "SendChatMessage", message: message, channel: "Local" }); accumulatedDelay += delay; currentLine++; sendMessage(); }, delay)); } } sendMessage(); } function playAudio(audio) { audio.play(); } function playSong(song, audio, timeouts) { pauseAndResetAllSongs(); sendSongLyrics(song, audio, timeouts); playAudio(audio); } function pauseAndResetAllSongs() { song1.pause(); song1.currentTime = 0; song2.pause(); song2.currentTime = 0; song3.pause(); song3.currentTime = 0; song4.pause(); song4.currentTime = 0; song5.pause(); song5.currentTime = 0; song6.pause(); song6.currentTime = 0; song7.pause(); song7.currentTime = 0; song8.pause(); song8.currentTime = 0; song9.pause(); song9.currentTime = 0; // Clear timeouts for lyrics timeout1.forEach(clearTimeout); timeout2.forEach(clearTimeout); timeout3.forEach(clearTimeout); timeout4.forEach(clearTimeout); timeout5.forEach(clearTimeout); timeout6.forEach(clearTimeout); timeout7.forEach(clearTimeout); timeout8.forEach(clearTimeout); timeout9.forEach(clearTimeout); } document.getElementById("sellall").addEventListener('click', function() { Game.currentGame.ui.getComponent("PopupOverlay").showConfirmation("Are you sure you want to delete all towers?", 8000, function() { for (let i of Object.values(game.ui.buildings)) { if (Object.values(i)[2] != "GoldStash") { sellUid.push(Object.values(i)[4]) } } uniqueSellUid = [...new Set([...uniqueSellUid, ...sellUid])] sellUid = [] let sellInterval = setInterval(() => { if (uniqueSellUid.length > 0 && game.ui.playerPartyCanSell) { game.network.sendRpc({ name: "DeleteBuilding", uid: parseInt(uniqueSellUid[Math.floor(Math.random() * uniqueSellUid.length)]) }) } else { clearInterval(sellInterval) } }, 50); }) }) 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() } } function showGrid() { if (document.getElementById("biggrid").innerHTML == "Show Big Grids") { document.getElementById("biggrid").innerHTML = "Hide Big Grids" game.renderer.ground.attachments[0].attachments[1].setAlpha(0.625); game.renderer.ground.attachments[0].attachments[1].setScale(1200 / 48); game.renderer.ground.attachments[0].attachments[1].sprite.width /= 1200 / 48; game.renderer.ground.attachments[0].attachments[1].sprite.height /= 1200 / 48; } else { document.getElementById("biggrid").innerHTML = "Show Big Grids" game.renderer.ground.attachments[0].attachments[1].setAlpha(1); game.renderer.ground.attachments[0].attachments[1].setScale(1); game.renderer.ground.attachments[0].attachments[1].sprite.width *= 1200 / 48; game.renderer.ground.attachments[0].attachments[1].sprite.height *= 1200 / 48; } } function showGrids() { if (document.getElementById("smolgrid").innerHTML == "Show Small Grids") { document.getElementById("smolgrid").innerHTML = "Hide Small Grids" game.renderer.ground.attachments[0].attachments[1].setAlpha(0.625); game.renderer.ground.attachments[0].attachments[1].setScale(200 / 48); game.renderer.ground.attachments[0].attachments[1].sprite.width /= 200 / 48; game.renderer.ground.attachments[0].attachments[1].sprite.height /= 200 / 48; } else { document.getElementById("smolgrid").innerHTML = "Show Small Grids" game.renderer.ground.attachments[0].attachments[1].setAlpha(1); game.renderer.ground.attachments[0].attachments[1].setScale(1); game.renderer.ground.attachments[0].attachments[1].sprite.width *= 200 / 48; game.renderer.ground.attachments[0].attachments[1].sprite.height *= 200 / 48; } } let Auto = {} function getGoldStash() { var entities = Game.currentGame.world.entities for (var uid in entities) { if (!entities.hasOwnProperty(uid)) continue var obj = entities[uid] if (obj.fromTick.model == "GoldStash") { return obj } } } function GetGoldStash() { for (let i in game.ui.buildings) { if (game.ui.buildings[i].type == "GoldStash") { return game.ui.buildings[i]; }; }; }; Auto.PlaceBuilding = function(x, y, building, yaw) { Game.currentGame.network.sendRpc({ name: "MakeBuilding", x: x, y: y, type: building, yaw: yaw }) } function buildcornerfarm() { var waitForGoldStash = setInterval(function() { if (document.querySelectorAll("[data-building]")[10].classList[1] == "is-disabled") { var stash = getGoldStash(); if (stash == undefined) return var stashPosition = { x: stash.fromTick.position.x, y: stash.fromTick.position.y } clearInterval(waitForGoldStash) Auto.PlaceBuilding(stashPosition.x + 0, stashPosition.y + 0, 'GoldStash', 180); Auto.PlaceBuilding(stashPosition.x + 0, stashPosition.y + 96, 'ArrowTower', 180); Auto.PlaceBuilding(stashPosition.x + 96, stashPosition.y + 0, 'ArrowTower', 180); Auto.PlaceBuilding(stashPosition.x + 0, stashPosition.y + 192, 'CannonTower', 180); Auto.PlaceBuilding(stashPosition.x + 192, stashPosition.y + 0, 'CannonTower', 180); Auto.PlaceBuilding(stashPosition.x + 192, stashPosition.y + 288, 'CannonTower', 180); Auto.PlaceBuilding(stashPosition.x + 0, stashPosition.y + 288, 'MagicTower', 180); Auto.PlaceBuilding(stashPosition.x + 96, stashPosition.y + 336, 'MagicTower', 180); Auto.PlaceBuilding(stashPosition.x + 192, stashPosition.y + 384, 'MagicTower', 180); Auto.PlaceBuilding(stashPosition.x + 240, stashPosition.y + 96, 'CannonTower', 180); Auto.PlaceBuilding(stashPosition.x + 288, stashPosition.y + 192, 'CannonTower', 180); Auto.PlaceBuilding(stashPosition.x + 168, stashPosition.y + 72, 'SlowTrap', 180); Auto.PlaceBuilding(stashPosition.x + 168, stashPosition.y + 120, 'SlowTrap', 180); Auto.PlaceBuilding(stashPosition.x + 288, stashPosition.y + 0, 'MagicTower', 180); Auto.PlaceBuilding(stashPosition.x + 336, stashPosition.y + 96, 'MagicTower', 180); Auto.PlaceBuilding(stashPosition.x + 384, stashPosition.y + 192, 'MagicTower', 180); Auto.PlaceBuilding(stashPosition.x + 264, stashPosition.y + 264, 'Door', 180); Auto.PlaceBuilding(stashPosition.x + 312, stashPosition.y + 264, 'Door', 180); Auto.PlaceBuilding(stashPosition.x + 360, stashPosition.y + 264, 'Door', 180); Auto.PlaceBuilding(stashPosition.x + 264, stashPosition.y + 312, 'Door', 180); Auto.PlaceBuilding(stashPosition.x + 312, stashPosition.y + 312, 'Door', 180); Auto.PlaceBuilding(stashPosition.x + 264, stashPosition.y + 360, 'Door', 180); Auto.PlaceBuilding(stashPosition.x + 0, stashPosition.y + 384, 'GoldMine', 180); Auto.PlaceBuilding(stashPosition.x + 96, stashPosition.y + 432, 'GoldMine', 180); Auto.PlaceBuilding(stashPosition.x + 192, stashPosition.y + 480, 'GoldMine', 180); Auto.PlaceBuilding(stashPosition.x + 384, stashPosition.y + 0, 'GoldMine', 180); Auto.PlaceBuilding(stashPosition.x + 432, stashPosition.y + 96, 'GoldMine', 180); Auto.PlaceBuilding(stashPosition.x + 480, stashPosition.y + 192, 'GoldMine', 180); Auto.PlaceBuilding(stashPosition.x + 288, stashPosition.y + 432, 'GoldMine', 180); Auto.PlaceBuilding(stashPosition.x + 432, stashPosition.y + 288, 'GoldMine', 180); Auto.PlaceBuilding(stashPosition.x + 96, stashPosition.y + 240, 'CannonTower', 180); Auto.PlaceBuilding(stashPosition.x + 72, stashPosition.y + 168, 'SlowTrap', 180); Auto.PlaceBuilding(stashPosition.x + 120, stashPosition.y + 168, 'SlowTrap', 180); Auto.PlaceBuilding(stashPosition.x + 192, stashPosition.y + 192, 'BombTower', 180); Auto.PlaceBuilding(stashPosition.x + 96, stashPosition.y + 96, 'ArrowTower', 180); clearInterval(waitForGoldStash) } }, 150) } game.network.addRpcHandler("LocalBuilding", (data) => { for (let e of data) { if (!!e.dead) { for (let i of uniqueSellUid) { if (e.uid == i) { uniqueSellUid.splice(uniqueSellUid.indexOf(i, 0), 1); } } } } }); let sellUid = []; let uniqueSellUid = []; function toggleSellingWalls() { if (!isSellingWalls) { isSellingWalls = true; document.getElementById("sellwall").innerHTML = "Stop Selling Walls"; } else { isSellingWalls = false; document.getElementById("sellwall").innerHTML = "Start Selling Walls"; } } function toggleSellingDoors() { if (!isSellingDoors) { isSellingDoors = true; document.getElementById("selldoor").innerHTML = "Stop Selling Doors"; } else { isSellingDoors = false; document.getElementById("selldoor").innerHTML = "Start Selling Doors"; } } function toggleSellingTraps() { if (!isSellingTraps) { isSellingTraps = true; document.getElementById("selltrap").innerHTML = "Stop Selling Traps"; } else { isSellingTraps = false; document.getElementById("selltrap").innerHTML = "Start Selling Traps"; } } function toggleSellingHarvs() { if (!isSellingHarvs) { isSellingHarvs = true; document.getElementById("sellharvester").innerHTML = "Stop Selling Harvesters"; } else { isSellingHarvs = false; document.getElementById("sellharvester").innerHTML = "Start Selling Harvesters"; } } function toggleSellingArrows() { if (!isSellingArrows) { isSellingArrows = true; document.getElementById("sellarrow").innerHTML = "Stop Selling Arrows"; } else { isSellingArrows = false; document.getElementById("sellarrow").innerHTML = "Start Selling Arrows"; } } function toggleSellingCannons() { if (!isSellingCannons) { isSellingCannons = true; document.getElementById("sellcannon").innerHTML = "Stop Selling Cannon"; } else { isSellingCannons = false; document.getElementById("sellcannon").innerHTML = "Start Selling Cannon"; } } function toggleSellingMages() { if (!isSellingMages) { isSellingMages = true; document.getElementById("sellmagic").innerHTML = "Stop Selling Mages"; } else { isSellingMages = false; document.getElementById("sellmagic").innerHTML = "Start Selling Mages"; } } function toggleSellingMelees() { if (!isSellingMelees) { isSellingMelees = true; document.getElementById("sellmelee").innerHTML = "Stop Selling Melees"; } else { isSellingMelees = false; document.getElementById("sellmelee").innerHTML = "Start Selling Melees"; } } function toggleSellingBombs() { if (!isSellingBombs) { isSellingBombs = true; document.getElementById("sellbomb").innerHTML = "Stop Selling Bombs"; } else { isSellingBombs = false; document.getElementById("sellbomb").innerHTML = "Start Selling Bombs"; } } function toggleSellingMines() { if (!isSellingMines) { isSellingMines = true; document.getElementById("sellminer").innerHTML = "Stop Selling Gold Mines"; } else { isSellingMines = false; document.getElementById("sellminer").innerHTML = "Start Selling Gold Mines"; } } let shouldAutoRespawn = true game.network.addRpcHandler("Dead", () => { if (shouldAutoRespawn) { game.network.sendPacket(3, { respawn: 1 }) document.getElementById('hud-respawn').style.display = "none" } }) function giveSell() { if (!autogivesell) { autogivesell = true; document.getElementById("autosell").innerHTML = "Auto Give Sell On"; } else { autogivesell = false; document.getElementById("autosell").innerHTML = "Auto Give Sell Off"; } } let autogivesell = false; 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 hidePIP() { if (document.getElementsByClassName("hud-pip-overlay")[0].style.display === "block" || document.getElementsByClassName("hud-pip-overlay")[0].style.display === "") { document.getElementsByClassName("hud-pip-overlay")[0].style.display = "none"; document.getElementById("hidepip").innerHTML = "Show PIP"; } else { document.getElementsByClassName("hud-pip-overlay")[0].style.display = "block"; document.getElementById("hidepip").innerHTML = "Hide PIP"; } } function toggleday() { let hno = document.getElementsByClassName("hud-day-night-overlay")[0]; if (hno.style.display === "block" || hno.style.display === "") { document.getElementById("daybright").innerHTML = "Disable Always Day"; hno.style.display = "none"; } else { document.getElementById("daybright").innerHTML = "Enable Always Day"; hno.style.display = "block"; }; } function calculateDistance(x1, y1, x2, y2) { return Math.sqrt(Math.pow((x2 - x1), 2) + Math.pow((y2 - y1), 2)); } const borders = [new PIXI.Graphics(), new PIXI.Graphics(), new PIXI.Graphics(), new PIXI.Graphics(), new PIXI.Graphics()]; const colors = [0xFFFFFF, 0xFF0000, 0xFFFF00, 0x00FF00, 0x0000FF]; const sizes = [48, 864, 1680, 2544, 5040]; // Calculate the circle's radius to touch the corners of the rectangle const circleRadius = Math.sqrt(Math.pow(864, 2) + Math.pow(864, 2)) + 48 + 24; // Create a circle with the calculated radius const circle = new PIXI.Graphics(); circle.lineStyle(3, 0xFF00FF); // You can set the color as desired circle.drawCircle(0, 0, circleRadius); circle.visible = false; // Initially set the circle to be invisible // Create two rectangles for the plus sign with a thickness of 3 const plusRectangles = [new PIXI.Graphics(), new PIXI.Graphics()]; const plusSize = 6969; // Size of the plus sign rectangles // Set the line style for the plus rectangles plusRectangles[0].lineStyle(3, 0x00FF00); // Set the color and thickness for the lines plusRectangles[0].moveTo(-plusSize / 2, -3); // Adjust the position to center the line plusRectangles[0].lineTo(plusSize / 2, -3); // Adjust the position to center the line plusRectangles[0].moveTo(0, -plusSize / 2); // Adjust the position to center the line plusRectangles[0].lineTo(0, plusSize / 2); // Adjust the position to center the line plusRectangles[0].visible = false; // Initially set the plus sign rectangles to be invisible plusRectangles[1].lineStyle(3, 0x00FF00); // Set the color and thickness for the lines plusRectangles[1].moveTo(-3, -sizes[1] / 2); // Adjust the position to center the line plusRectangles[1].lineTo(3, -sizes[1] / 2); // Adjust the position to center the line plusRectangles[1].moveTo(-3, sizes[1] / 2); // Adjust the position to center the line plusRectangles[1].lineTo(3, sizes[1] / 2); // Adjust the position to center the line plusRectangles[1].visible = false; // Initially set the plus sign rectangles to be invisible borders.forEach((item, i) => { item.lineStyle(3, colors[i]); item.drawRect(-sizes[i], -sizes[i], 2 * sizes[i], 2 * sizes[i]); item.visible = false; // Initially set rectangles to be invisible }); const rangeIndicators = {}; const tracers = {}; let angles = [335, 200, 320, 225]; let xys = []; angles.forEach((item, i) => { angles[i] = item * Math.PI / 180; }); xys[0] = Math.cos(angles[0]) * 100; xys[1] = Math.sin(angles[0]) * 100; xys[2] = Math.cos(angles[2]) * 100; xys[3] = Math.sin(angles[2]) * 100; const playerIsInRange = (p1, p2) => { const deltaX = ~~(p2.x / 200) - ~~(p1.x / 200); const deltaY = ~~(p2.y / 200) - (~~((p1.y + 100) / 200) - 0.5); return -6 <= deltaX && -4.5 <= deltaY && deltaX <= 6 && deltaY <= 4.5; }; game.network.sendPacket2 = game.network.sendPacket; game.network.sendPacket = (opcode, input) => { if (opcode == 3) { if (input.mouseMoved || input.mouseMovedWhileDown) { rangeIndicators[game.world.myUid].rotation = (input.mouseMoved || input.mouseMovedWhileDown) * Math.PI / 180; } } game.network.sendPacket2(opcode, input); } const update = () => { const myPlayerEntity = game.world.entities[game.world.myUid]; if (myPlayerEntity) { for (const i in tracers) { if (!game.world.entities[i]) { tracers[i].destroy(); delete tracers[i]; } } for (const i in rangeIndicators) { if (!game.world.entities[i]) { rangeIndicators[i].destroy(); delete rangeIndicators[i]; } } game.world.renderer.npcs.attachments.forEach(entity => { if (entity.entityClass == "PlayerEntity") { if (!rangeIndicators[entity.uid]) { rangeIndicators[entity.uid] = new PIXI.Graphics(); game.world.renderer.entities.node.addChild(rangeIndicators[entity.uid]); } if (!tracers[entity.uid]) { tracers[entity.uid] = new PIXI.Graphics(); game.world.renderer.entities.node.addChild(tracers[entity.uid]); } rangeIndicators[entity.uid].clear(); tracers[entity.uid].clear(); const p = entity.node.position; rangeIndicators[entity.uid].position = p; if (entity.uid != game.world.myUid) rangeIndicators[entity.uid].rotation = entity.targetTick.aimingYaw * Math.PI / 180; const color = (entity.uid == game.world.myUid) ? 0xFFD700 : (entity.targetTick.partyId == game.ui.playerPartyId) ? 0x0000FF : 0xFFFFFF; if (renderTracer && entity.targetTick.dead == 0) { if (entity.targetTick.partyId == game.ui.playerPartyId || playerIsInRange(myPlayerEntity.targetTick.position, entity.targetTick.position)) { const p1 = myPlayerEntity.node.position; const p2 = entity.node.position; tracers[entity.uid].lineStyle(3, (entity.targetTick.partyId == game.ui.playerPartyId) ? 0x0000FF : 0xFFFFFF); tracers[entity.uid].moveTo(p1.x, p1.y); tracers[entity.uid].lineTo(p2.x, p2.y); } } if (renderRange && entity.targetTick.dead == 0) { if (entity.targetTick.partyId == game.ui.playerPartyId || playerIsInRange(myPlayerEntity.targetTick.position, entity.targetTick.position)) { switch (entity.targetTick.weaponName) { case 'Pickaxe': rangeIndicators[entity.uid].beginFill(color, 0.3); rangeIndicators[entity.uid].moveTo(0, 0).lineTo(xys[0], xys[1]); rangeIndicators[entity.uid].arc(0, 0, 100, angles[0], angles[1], true); rangeIndicators[entity.uid].endFill(); break; case 'Spear': rangeIndicators[entity.uid].beginFill(color, 0.3); rangeIndicators[entity.uid].moveTo(0, 0).lineTo(xys[2], xys[3]); rangeIndicators[entity.uid].arc(0, 0, 100, angles[2], angles[3], true); rangeIndicators[entity.uid].endFill(); break; case 'Bow': rangeIndicators[entity.uid].lineStyle(7, color, 0.3); // Set initial alpha value rangeIndicators[entity.uid].moveTo(0, 0); rangeIndicators[entity.uid].lineTo(0, -550); rangeIndicators[entity.uid].lineStyle(); // Reset lineStyle rangeIndicators[entity.uid].beginFill(color, 0.3); // Set initial alpha value break; case 'Bomb': rangeIndicators[entity.uid].lineStyle(7, color, 0.3); // Set initial alpha value rangeIndicators[entity.uid].moveTo(0, 0); rangeIndicators[entity.uid].lineTo(0, -280); rangeIndicators[entity.uid].lineStyle(); // Reset lineStyle rangeIndicators[entity.uid].beginFill(color, 0.3); // Set initial alpha value break; } } } } }); } } game.renderer.addTickCallback(update); function showborder() { if (!renderborder) { renderborder = true; document.getElementById("border").innerHTML = "Hide Border"; } else { renderborder = false; document.getElementById("border").innerHTML = "Show Border"; } } function showRange() { if (!renderRange) { renderRange = true document.getElementById("range").innerHTML = "Hide Range" } else { renderRange = false document.getElementById("range").innerHTML = "Show Range" } } function showTracer() { if (!renderTracer) { renderTracer = true document.getElementById("tracer").innerHTML = "Hide Tracer" } else { renderTracer = false document.getElementById("tracer").innerHTML = "Show Tracer" } } 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 togglerev4() { if (!shouldrev4) { shouldrev4 = true document.getElementById("rev4").innerHTML = "Disable Rev Player Trick" } else { shouldrev4 = false document.getElementById("rev4").innerHTML = "Enable Rev Player Trick" } } let shouldrev4 = false; let hasLeftParty = false; // Flag to track if we have already left the party. let hasJoinedParty = false; // Flag to track if we have already joined the party. game.network.addRpcHandler("DayCycle", (e) => { let shareKey = {} if (e.isDay && shouldrev4 && !hasLeftParty) { // Daytime: Wait 50 seconds, then leave the party once. setTimeout(() => { shareKey = game.ui.playerPartyShareKey }, 50000); setTimeout(() => { Game.currentGame.network.sendRpc({ name: "LeaveParty" }); hasLeftParty = true; }, 55000) } if (!e.isDay && shouldrev4 && !hasJoinedParty) { // Nighttime: Wait 10 seconds, then join the party once. setTimeout(() => { if (shareKey) { Game.currentGame.network.sendRpc({ name: "JoinPartyByShareKey", partyShareKey: shareKey }); hasJoinedParty = true; // Set the flag to true to indicate that we've joined the party. } }, 10000); } // Reset the flags at the beginning of each day/night cycle. if (!e.isDay) { hasLeftParty = false; } else { hasJoinedParty = false; } if (!aitoEnabled) return; // Check if there are already 4 players in the party if (game.ui.playerPartyMembers.length >= 4) { return; } if (!e.isDay) { // It's night if (canPerformNightActions) { // Find the first WebSocket that has not joined in the last 4 minutes const selectedWebSocketId = findNextWebSocketId(); if (selectedWebSocketId) { selectedWebSocket = webSockets[selectedWebSocketId]; // Join the party and mark the WebSocket as joined selectedWebSocket.network.sendRpc({ name: "JoinPartyByShareKey", partyShareKey: shareKey }); selectedWebSocket.hasJoinedParty = true; // Set up a periodic check for the WebSocket's gold goldCheckInterval = setInterval(() => { if (selectedWebSocket.playerTick.gold >= 10000) { // Buy Pause selectedWebSocket.network.sendRpc({ name: "BuyItem", itemName: "Pause", tier: 1 }); // Leave the party selectedWebSocket.network.sendPacket(9, { name: "LeaveParty" }); // Clear the gold check interval clearInterval(goldCheckInterval); // Set the flag to prevent further night actions until the day is over canPerformNightActions = false; // Set a timeout to reset the flag after 30 seconds setTimeout(() => { canPerformNightActions = true; }, 30000); } }, 2000); } } } else { // It's daytime, clear the gold-checking interval and leave the party after 55 seconds setTimeout(() => { clearInterval(goldCheckInterval); if (selectedWebSocket) { selectedWebSocket.network.sendPacket(9, { name: "LeaveParty" }); } }, 55000); } }); function spamAllParty() { if (document.getElementById("spamallparty-btn").innerHTML == "Spam All Party On") { document.getElementById("spamallparty-btn").innerHTML = "Spam All Party Off"; shouldSpamAllParty = false } else { document.getElementById("spamallparty-btn").innerHTML = "Spam All Party On"; shouldSpamAllParty = true } } 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(); } }, 100); } } 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"; } } function autouparrowbtn() { if (document.getElementById("uparrow").innerHTML == "Up Arrows On") { document.getElementById("uparrow").innerHTML = "Up Arrows Off"; } else { document.getElementById("uparrow").innerHTML = "Up Arrows On"; } } function autoupstashbtn() { if (document.getElementById("upstash").innerHTML == "Up Stash On") { document.getElementById("upstash").innerHTML = "Up Stash Off"; } else { document.getElementById("upstash").innerHTML = "Up Stash On"; } } function autoupmagebtn() { if (document.getElementById("upmage").innerHTML == "Up Mages On") { document.getElementById("upmage").innerHTML = "Up Mages Off"; } else { document.getElementById("upmage").innerHTML = "Up Mages On"; } } function autoupminesbtn() { if (document.getElementById("upmines").innerHTML == "Up Mines On") { document.getElementById("upmines").innerHTML = "Up Mines Off"; } else { document.getElementById("upmines").innerHTML = "Up Mines On"; } } function autoupwallbtn() { if (document.getElementById("upwall").innerHTML == "Up Walls On") { document.getElementById("upwall").innerHTML = "Up Walls Off"; } else { document.getElementById("upwall").innerHTML = "Up Walls On"; } } function autoupdoorbtn() { if (document.getElementById("updoor").innerHTML == "Up Doors On") { document.getElementById("updoor").innerHTML = "Up Doors Off"; } else { document.getElementById("updoor").innerHTML = "Up Doors On"; } } function autouptrapbtn() { if (document.getElementById("uptrap").innerHTML == "Up Slow Traps On") { document.getElementById("uptrap").innerHTML = "Up Slow Traps Off"; } else { document.getElementById("uptrap").innerHTML = "Up Slow Traps On"; } } function autoupmeleebtn() { if (document.getElementById("upmelee").innerHTML == "Up Melees On") { document.getElementById("upmelee").innerHTML = "Up Melees Off"; } else { document.getElementById("upmelee").innerHTML = "Up Melees On"; } } function autoupbombbtn() { if (document.getElementById("upbomb").innerHTML == "Up Bombs On") { document.getElementById("upbomb").innerHTML = "Up Bombs Off"; } else { document.getElementById("upbomb").innerHTML = "Up Bombs On"; } } function autoupharvesterbtn() { if (document.getElementById("upharvester").innerHTML == "Up Harvesters On") { document.getElementById("upharvester").innerHTML = "Up Harvesters Off"; } else { document.getElementById("upharvester").innerHTML = "Up Harvesters On"; } } function autoupcannonbtn() { if (document.getElementById("upcannon").innerHTML == "Up Cannons On") { document.getElementById("upcannon").innerHTML = "Up Cannons Off"; } else { document.getElementById("upcannon").innerHTML = "Up Cannons 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 }) } }, 750) } } var autoUpgradeArrowTowers = null; function autouparrow() { clearInterval(autoUpgradeArrowTowers); if (autoUpgradeArrowTowers !== null) { autoUpgradeArrowTowers = null; } else { autoUpgradeArrowTowers = setInterval(function() { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "ArrowTower") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } }, 750); } } var autoUpgradeStash = null; function autoupstash() { clearInterval(autoUpgradeStash); if (autoUpgradeStash !== null) { autoUpgradeStash = null; } else { autoUpgradeStash = setInterval(function() { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "GoldStash") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } }, 750); } } var autoUpgradeMage = null; function autoupmage() { clearInterval(autoUpgradeMage); if (autoUpgradeMage !== null) { autoUpgradeMage = null; } else { autoUpgradeMage = setInterval(function() { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "MagicTower") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } }, 700); } } var autoUpgradeMines = null; function autoupmines() { clearInterval(autoUpgradeMines); if (autoUpgradeMines !== null) { autoUpgradeMines = null; } else { autoUpgradeMines = setInterval(function() { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "GoldMine") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } }, 600); } } var autoUpgradeWalls = null; function autoupwall() { clearInterval(autoUpgradeWalls); if (autoUpgradeWalls !== null) { autoUpgradeWalls = null; } else { autoUpgradeWalls = setInterval(function() { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "Wall") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } }, 750); } } var autoUpgradeDoors = null; function autoupdoor() { clearInterval(autoUpgradeDoors); if (autoUpgradeDoors !== null) { autoUpgradeDoors = null; } else { autoUpgradeDoors = setInterval(function() { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "Door") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } }, 750); } } var autoUpgradeTraps = null; function autouptrap() { clearInterval(autoUpgradeTraps); if (autoUpgradeTraps !== null) { autoUpgradeTraps = null; } else { autoUpgradeTraps = setInterval(function() { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "SlowTrap") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } }, 750); } } var autoUpgradeCannon = null; function autoupcannon() { clearInterval(autoUpgradeCannon); if (autoUpgradeCannon !== null) { autoUpgradeCannon = null; } else { autoUpgradeCannon = setInterval(function() { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "CannonTower") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } }, 750); } } var autoUpgradeMelee = null; function autoupmelee() { clearInterval(autoUpgradeMelee); if (autoUpgradeMelee !== null) { autoUpgradeMelee = null; } else { autoUpgradeMelee = setInterval(function() { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "MeleeTower") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } }, 750); } } var autoUpgradeBomb = null; function autoupbomb() { clearInterval(autoUpgradeBomb); if (autoUpgradeBomb !== null) { autoUpgradeBomb = null; } else { autoUpgradeBomb = setInterval(function() { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "BombTower") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } }, 750); } } var autoUpgradeHarvester = null; function autoupharvester() { clearInterval(autoUpgradeHarvester); if (autoUpgradeHarvester !== null) { autoUpgradeHarvester = null; } else { autoUpgradeHarvester = setInterval(function() { for (let uid in game.ui.buildings) { if (game.ui.buildings[uid].type == "Harvester") { Game.currentGame.network.sendRpc({ name: "UpgradeBuilding", uid: game.ui.buildings[uid].uid }); } } }, 750); } } function spamPartyByID() { if (document.getElementById("spampartybyid-btn").innerHTML == "Spam Party By ID On") { shouldSpamIdParty = false document.getElementById("spampartybyid-btn").innerHTML = "Spam Party By ID Off"; } else { shouldSpamIdParty = true document.getElementById("spampartybyid-btn").innerHTML = "Spam Party By ID On"; } } function clearChatbtn() { if (document.getElementById("clearchat-btn").innerHTML == "Clear Chat On") { document.getElementById("clearchat-btn").innerHTML = "Clear Chat Off"; shouldClearChat = false } else { document.getElementById("clearchat-btn").innerHTML = "Clear Chat On"; shouldClearChat = true } } function spinnerbtn() { if (document.getElementById("togglespinner").innerHTML == "Spinner On") { document.getElementById("togglespinner").innerHTML = "Spinner Off"; shouldSpin = false yaw = game.ui.playerTick.aimingYaw } else { document.getElementById("togglespinner").innerHTML = "Spinner On"; shouldSpin = true yaw = game.ui.playerTick.aimingYaw } } function toggleRebuild() { window.rebuilderOn = !window.rebuilderOn; window.toggleRebuilder() document.getElementById("togglerb").innerText = window.rebuilderOn ? "Rebuild On" : "Rebuild Off"; window.rebuilderOn ? (() => { game.ui.components.PopupOverlay.showHint2 = game.ui.components.PopupOverlay.showHint; game.ui.components.PopupOverlay.showHint = (popup, ms) => { if ((popup == "You can't place buildings that far away from your position.") || (popup == "You can't place buildings in occupied cells.")) return; game.ui.components.PopupOverlay.showHint2(popup, ms); }; })() : (() => { if (game.ui.components.PopupOverlay.showHint2) { game.ui.components.PopupOverlay.showHint = game.ui.components.PopupOverlay.showHint2; }; })(); }; function toggleHealthUp() { if (!shouldhealthup) { shouldhealthup = true document.getElementById("togglehealthup").innerHTML = "Low Health Upgrade On" } else { shouldhealthup = false document.getElementById("togglehealthup").innerHTML = "Low Health Upgrade Off" } } function toggleHealSpell() { if (!shouldhealtowers) { shouldhealtowers = true document.getElementById("towerheal").innerHTML = "Heal Towers On" } else { shouldhealtowers = false document.getElementById("towerheal").innerHTML = "Heal Towers Off" } } function autoleave() { if (!stash10leave) { stash10leave = true document.getElementById("stashleave").innerHTML = "Auto Leave On" game.ui.getComponent("PopupOverlay").showHint('Auto Leave Party When Stash Health Falls Below 10% Enabled', 3000) } else { stash10leave = false document.getElementById("stashleave").innerHTML = "Auto Leave Off" } } function togglefriend() { if (!friendcontrol) { friendcontrol = true document.getElementById("allowfriend").innerHTML = "Disallow Friend Control" } else { friendcontrol = false document.getElementById("allowfriend").innerHTML = "Allow Friend Control" } } function abpk() { if (!shouldabpk) { shouldabpk = true; document.getElementById("toggleabpk").innerHTML = "Disable Auto Buy Pickaxe"; } else { shouldabpk = false; document.getElementById("toggleabpk").innerHTML = "Enable Auto Buy Pickaxe"; } } function absp() { if (!shouldabsp) { shouldabsp = true; document.getElementById("toggleabsp").innerHTML = "Disable Auto Buy Spear"; } else { shouldabsp = false; document.getElementById("toggleabsp").innerHTML = "Enable Auto Buy Spear"; } } function abbw() { if (!shouldabbw) { shouldabbw = true; document.getElementById("toggleabbw").innerHTML = "Disable Auto Buy Bow"; } else { shouldabbw = false; document.getElementById("toggleabbw").innerHTML = "Enable Auto Buy Bow"; } } function abbm() { if (!shouldabbm) { shouldabbm = true; document.getElementById("toggleabbm").innerHTML = "Disable Auto Buy Bomb"; } else { shouldabbm = false; document.getElementById("toggleabbm").innerHTML = "Enable Auto Buy Bomb"; } } function absh() { if (!shouldabsh) { shouldabsh = true; document.getElementById("toggleabsh").innerHTML = "Disable Auto Buy Sheild"; } else { shouldabsh = false; document.getElementById("toggleabsh").innerHTML = "Enable Auto Buy Sheild"; } } let shouldabpk = false let shouldabsp = false let shouldabbw = false let shouldabbm = false let shouldabsh = false function toggleSwing() { if (!autoSwing) { autoSwing = true; document.getElementById("toggleswing").innerHTML = "Swing On"; } else { autoSwing = false; document.getElementById("toggleswing").innerHTML = "Swing Off"; } } function FIGHT() { if (!fighting) { fighting = true document.getElementById("battle").innerHTML = "Disable Fighting Mode"; } else { fighting = false document.getElementById("battle").innerHTML = "Enable Fighting Mode"; bowAttacked = true; bombAttacked = true; spearAttacked = true; } } function trapon() { if (!trappingEnabled) { trappingEnabled = true document.getElementById("trap").innerHTML = "Disable Auto Trapper"; } else { trappingEnabled = false document.getElementById("trap").innerHTML = "Enable Auto Trapper"; } } function afkswitches() { if (!switching) { switching = true document.getElementById("switch").innerHTML = "Disable Afk Switch"; } else { switching = false document.getElementById("switch").innerHTML = "Enable Afk Switch"; } } function togglemove() { if (!moving) { moving = true document.getElementById("move").innerHTML = "Disable Player Follower"; } else { moving = false document.getElementById("move").innerHTML = "Enable Player Follower"; clearInterval(goToPosInterval); clearTimeout(moveTimeout); game.network.sendInput({ left: 0, right: 0, up: 0, down: 0 }); } } function togglebowfollow() { if (!shouldBowFollow) { shouldBowFollow = true document.getElementById("bowfollow").innerHTML = "Disable Bow Follow" } else { shouldBowFollow = false document.getElementById("bowfollow").innerHTML = "Enable Bow Follow" clearInterval(maintainDistanceInterval) game.network.sendInput({ left: 0, right: 0, up: 0, down: 0 }); } } function toggleCombatZoom() { if(!shouldCombatZoom) { shouldCombatZoom = true document.getElementById("zoom").innerHTML = "Disable Combat Zoom" } else { shouldCombatZoom = false document.getElementById("zoom").innerHTML = "Enable Combat Zoom" } } // Variable to keep track of whether you are in fighting mode let fighting = false; // Variable to store the last time each weapon was equipped const lastEquipTimes = { Bow: 0, Bomb: 0, Spear: 0 }; // Variables to control the cooldown after equipping each weapon const cooldowns = { Bow: 500, Bomb: 500, Spear: 250 }; // Variables to control whether each weapon is available for equipping let bowAttacked = true; let bombAttacked = true; let spearAttacked = true; // Wrapper function for shopShortcut to include wait times function enhancedShopShortcut(item, tier) { const currentTime = Date.now(); // Check the item and apply the appropriate wait time when in fighting mode switch (item) { case "Bow": if (fighting) { if (bombAttacked || spearAttacked) { bombAttacked = false; spearAttacked = false; // Set a timeout to turn bowAttacked to true after the cooldown period setTimeout(() => { bowAttacked = true; }, cooldowns.Bow); shopShortcut(item, tier); lastEquipTimes.Bow = currentTime; } } break; case "Bomb": if (fighting) { if (bowAttacked || spearAttacked) { bowAttacked = false; spearAttacked = false; // Set a timeout to turn bombAttacked to true after the cooldown period setTimeout(() => { bombAttacked = true; }, cooldowns.Bomb); shopShortcut(item, tier); lastEquipTimes.Bomb = currentTime; } } break; case "Spear": if (fighting) { if (bowAttacked || bombAttacked) { bowAttacked = false; bombAttacked = false; // Set a timeout to turn spearAttacked to true after the cooldown period setTimeout(() => { spearAttacked = true; }, cooldowns.Spear); shopShortcut(item, tier); lastEquipTimes.Spear = currentTime; } } break; default: shopShortcut(item, tier); } } let lastRandomGenerationTime = 0 // Function to equip bomb with a 40% chance function equipBombWithChance(currentTime) { // Check if at least one second has passed since the last random number generation if (currentTime - lastRandomGenerationTime >= 1000) { // Generate a random number between 0 and 1 const randomChance = Math.random(); // 40% chance of equipping a bomb if (randomChance <= 0.4) { enhancedShopShortcut("Bomb", game.ui.inventory.Bomb.tier); lastRandomGenerationTime = currentTime; } else { enhancedShopShortcut("Bow", game.ui.inventory.Bow.tier); lastRandomGenerationTime = currentTime; } } } // Function to perform actions based on distance function performActions(distance) { const currentTime = Date.now(); if (distance > 100 && distance <= 150) { // If the distance is between 100 and 150, equip bomb with a 40% chance equipBombWithChance(currentTime); } else if (distance > 150 && distance < Infinity) { // If the distance is greater than 150, perform this action enhancedShopShortcut("Bow", game.ui.inventory.Bow.tier); } else if (distance <= 100) { // If the distance is less than or equal to 100, perform this action enhancedShopShortcut("Spear", game.ui.inventory.Spear.tier); } } // Function to find the closest enemy player and calculate the distance function findClosestEnemyPlayerDistance() { if (fighting) { // Get your player's party ID const myPartyId = game.ui.playerPartyId; // Get your player's position const myX = game.ui.playerTick.position.x; const myY = game.ui.playerTick.position.y; // Initialize variables to keep track of the closest enemy player and distance let closestEnemyPlayer = null; let closestDistance = Infinity; // Iterate through all players for (let i in game.renderer.npcs.attachments) { if (game.renderer.npcs.attachments[i].fromTick.name) { const player = game.renderer.npcs.attachments[i]; const playerX = player.targetTick.position.x; const playerY = player.targetTick.position.y; const playerPartyId = player.targetTick.partyId; // Check if this player is not in your party if (playerPartyId !== myPartyId && player.targetTick.health > 0) { // Calculate the distance between your player and this player const distance = calculateDistance(myX, myY, playerX, playerY); // Check if this player is closer than the current closest enemy player and the distance is greater than 20 if (distance < closestDistance && distance > 20) { closestEnemyPlayer = player; closestDistance = distance; } } } } // Check if there are any enemy players in range before performing actions if (closestEnemyPlayer !== null) { // Now, closestEnemyPlayer contains the closest enemy player, and closestDistance contains the distance // Perform actions based on the distance performActions(closestDistance); } } } let trappingEnabled = false; // Function to round a number to the nearest multiple of a given factor and adjust by 24 function roundToNearest48Adjusted(number) { const rounded = Math.round(number / 48) * 48; return rounded + (number > rounded ? 24 : -24); } // Function to place 7x7 walls around a given position function place7x7Walls(x, y) { // Calculate the nearest multiple of 48 for the rounded position with adjustment const roundedX = roundToNearest48Adjusted(x); const roundedY = roundToNearest48Adjusted(y); // Layer 1 placeWall(roundedX - 48 - 48 - 48, roundedY + 48 + 48 + 48); placeWall(roundedX - 48 - 48, roundedY + 48 + 48 + 48); placeWall(roundedX - 48, roundedY + 48 + 48 + 48); placeWall(roundedX, roundedY + 48 + 48 + 48); placeWall(roundedX + 48, roundedY + 48 + 48 + 48); placeWall(roundedX + 48 + 48, roundedY + 48 + 48 + 48); placeWall(roundedX + 48 + 48 + 48, roundedY + 48 + 48 + 48); // Layer 2 placeWall(roundedX - 48 - 48 - 48, roundedY + 48 + 48); placeWall(roundedX + 48 + 48 + 48, roundedY + 48 + 48); // Layer 3 placeWall(roundedX - 48 - 48 - 48, roundedY + 48); placeWall(roundedX + 48 + 48 + 48, roundedY + 48); // Layer 4 placeWall(roundedX - 48 - 48 - 48, roundedY); placeWall(roundedX + 48 + 48 + 48, roundedY); // Layer 5 placeWall(roundedX - 48 - 48 - 48, roundedY - 48); placeWall(roundedX + 48 + 48 + 48, roundedY - 48); // Layer 6 placeWall(roundedX - 48 - 48 - 48, roundedY - 48 - 48); placeWall(roundedX + 48 + 48 + 48, roundedY - 48 - 48); // Layer 7 placeWall(roundedX - 48 - 48 - 48, roundedY - 48 - 48 - 48); placeWall(roundedX - 48 - 48, roundedY - 48 - 48 - 48); placeWall(roundedX - 48, roundedY - 48 - 48 - 48); placeWall(roundedX, roundedY - 48 - 48 - 48); placeWall(roundedX + 48, roundedY - 48 - 48 - 48); placeWall(roundedX + 48 + 48, roundedY - 48 - 48 - 48); placeWall(roundedX + 48 + 48 + 48, roundedY - 48 - 48 - 48); } function findPlayersInRangeToTrap() { if (trappingEnabled) { const myPartyId = game.ui.playerPartyId; // Get your player's position const myX = game.ui.playerTick.position.x; const myY = game.ui.playerTick.position.y; // Iterate through all players for (let i in game.renderer.npcs.attachments) { if (game.renderer.npcs.attachments[i].fromTick.name) { const player = game.renderer.npcs.attachments[i]; const playerX = player.targetTick.position.x; const playerY = player.targetTick.position.y; const playerPartyId = player.targetTick.partyId; const stash = getGoldStash() const stashPosition = { x: stash.fromTick.position.x, y: stash.fromTick.position.y } if (playerPartyId !== myPartyId && calculateDistance(myX, myY, playerX, playerY) < 420 && calculateDistance(stashPosition.x, stashPosition.y, playerX, playerY) < 700 && player.targetTick.health > 0) { // Get the position of the enemy player const enemyX = playerX; const enemyY = playerY; // Place 7x7 walls around the enemy player's position place7x7Walls(enemyX, enemyY); } } } } } // Variable to keep track of whether you are in fighting mode let switching = false; // Function to perform actions based on distance function changeWeapon(distance) { if (distance <= 100 && distance > 0) { equipItem("Spear", game.ui.inventory.Spear.tier); } else if (distance > 100 && distance <= 300) { equipItem("Bomb", game.ui.inventory.Bomb.tier); } else if (distance > 300 && distance < Infinity) { equipItem("Bow", game.ui.inventory.Bow.tier); } } // Function to find the closest enemy player and calculate the distance function FindClosestPlayer() { if (switching) { // Get your player's party ID const myPartyId = game.ui.playerPartyId; // Get your player's position const myX = game.ui.playerTick.position.x; const myY = game.ui.playerTick.position.y; // Initialize variables to keep track of the closest enemy player and distance let closestEnemyPlayer = null; let closestDistance = Infinity; // Iterate through all players for (let i in game.renderer.npcs.attachments) { if (game.renderer.npcs.attachments[i].fromTick.name) { const player = game.renderer.npcs.attachments[i]; const playerX = player.targetTick.position.x; const playerY = player.targetTick.position.y; const playerPartyId = player.targetTick.partyId; // Check if this player is not in your party if (playerPartyId !== myPartyId && player.targetTick.health > 0) { // Calculate the distance between your player and this player const distance = calculateDistance(myX, myY, playerX, playerY); // Check if this player is closer than the current closest enemy player and the distance is greater than 20 if (distance < closestDistance && distance > 20) { closestEnemyPlayer = player; closestDistance = distance; } } } } // Check if there are any enemy players in range before performing actions if (closestEnemyPlayer !== null) { // Now, closestEnemyPlayer contains the closest enemy player, and closestDistance contains the distance // Perform actions based on the distance changeWeapon(closestDistance); } } } // Variable to keep track of whether you are in moving mode let moving = false; // Declare closestEnemyPlayer outside of the functions let closestEnemyPlayer = null; // Function to perform actions based on distance function followPlayer(distance) { if (distance < 300) { // If the distance is less than 300, lock your position to the player lockposition(closestEnemyPlayer.targetTick.position.x, closestEnemyPlayer.targetTick.position.y); } } // Function to find the closest enemy player and calculate the distance function findClosestPlayerToFollow() { if (moving) { // Get your player's party ID const myPartyId = game.ui.playerPartyId; // Get your player's position const myX = game.ui.playerTick.position.x; const myY = game.ui.playerTick.position.y; // Initialize variables to keep track of the closest enemy player and distance closestEnemyPlayer = null; // Reset closestEnemyPlayer let closestDistance = Infinity; // Iterate through all players for (let i in game.renderer.npcs.attachments) { if (game.renderer.npcs.attachments[i].fromTick.name) { const player = game.renderer.npcs.attachments[i]; const playerX = player.targetTick.position.x; const playerY = player.targetTick.position.y; const playerPartyId = player.targetTick.partyId; // Check if this player is not in your party if (playerPartyId !== myPartyId && player.targetTick.health > 0) { // Calculate the distance between your player and this player const distance = calculateDistance(myX, myY, playerX, playerY); // Check if this player is closer than the current closest enemy player and the distance is greater than 20 if (distance < closestDistance && distance > 20) { closestEnemyPlayer = player; closestDistance = distance; } } } } // Check if there are any enemy players in range before performing actions if (closestEnemyPlayer !== null) { // Now, closestEnemyPlayer contains the closest enemy player, and closestDistance contains the distance // Perform actions based on the distance followPlayer(closestDistance); } } } let shouldBowFollow = false; // Declare closestEnemyPlayer outside of the functions let closestEnemy = null; // Function to perform actions based on distance function bowFollowPlayer(distance) { if (distance < Infinity) { maintainDistanceFromPos(closestEnemy.targetTick.position.x, closestEnemy.targetTick.position.y); } } // Function to find the closest enemy player and calculate the distance function findClosestPlayerToBow() { if (shouldBowFollow) { // Get your player's party ID const myPartyId = game.ui.playerPartyId; // Get your player's position const myX = game.ui.playerTick.position.x; const myY = game.ui.playerTick.position.y; // Initialize variables to keep track of the closest enemy player and distance closestEnemy = null; // Reset closestEnemy let closestDistance = Infinity; // Iterate through all players for (let i in game.renderer.npcs.attachments) { if (game.renderer.npcs.attachments[i].fromTick.name) { const player = game.renderer.npcs.attachments[i]; const playerX = player.targetTick.position.x; const playerY = player.targetTick.position.y; const playerPartyId = player.targetTick.partyId; // Check if this player is not in your party if (playerPartyId !== myPartyId && player.targetTick.health > 0) { // Calculate the distance between your player and this player const distance = calculateDistance(myX, myY, playerX, playerY); // Check if this player is closer than the current closest enemy player and the distance is greater than 20 if (distance < closestDistance && distance > 20) { closestEnemy = player; closestDistance = distance; } } } } // Check if there are any enemy players in range before performing actions if (closestEnemy !== null) { // Now, closestEnemyPlayer contains the closest enemy player, and closestDistance contains the distance // Perform actions based on the distance bowFollowPlayer(closestDistance); } } } let shouldCombatZoom = false; function changeZoom(distance) { if (distance <= 175) { dimension = 0.6 onWindowResize() } if (distance > 250 && distance < 475) { dimension = 1 onWindowResize() } if (distance > 550) { dimension = 1.5 onWindowResize() } } function getClosestPlayer() { if (shouldCombatZoom) { // Get your player's party ID const myPartyId = game.ui.playerPartyId; // Get your player's position const myX = game.ui.playerTick.position.x; const myY = game.ui.playerTick.position.y; // Initialize variables to keep track of the closest enemy player and distance let closestEnemyPlayer = null; let closestDistance = Infinity; // Iterate through all players for (let i in game.renderer.npcs.attachments) { if (game.renderer.npcs.attachments[i].fromTick.name) { const player = game.renderer.npcs.attachments[i]; const playerX = player.targetTick.position.x; const playerY = player.targetTick.position.y; const playerPartyId = player.targetTick.partyId; // Check if this player is not in your party if (playerPartyId !== myPartyId && player.targetTick.health > 0) { // Calculate the distance between your player and this player const distance = calculateDistance(myX, myY, playerX, playerY); // Check if this player is closer than the current closest enemy player and the distance is greater than 20 if (distance < closestDistance && distance > 20) { closestEnemyPlayer = player; closestDistance = distance; } } } } // Check if there are any enemy players in range before performing actions if (closestEnemyPlayer !== null) { changeZoom(closestDistance); } else { dimension = 1.5 onWindowResize() } } } function toggleAHRC() { if (!shouldAHRC) { shouldAHRC = true; document.getElementById("toggleahrc").innerHTML = "AHRC On"; } else { shouldAHRC = false; document.getElementById("toggleahrc").innerHTML = "AHRC Off"; } } function toggleRespawn() { if (!shouldAutoRespawn) { shouldAutoRespawn = true; document.getElementById("toggleresp").innerHTML = "Respawn On"; } else { shouldAutoRespawn = false; document.getElementById("toggleresp").innerHTML = "Respawn 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" } } function move(direction) { switch (direction) { case 'Up': { game.inputPacketScheduler.scheduleInput({ up: 1, down: 0, left: 0, right: 0 }) break } case 'Down': { game.inputPacketScheduler.scheduleInput({ up: 0, down: 1, left: 0, right: 0 }) break } case 'Left': { game.inputPacketScheduler.scheduleInput({ up: 0, down: 0, left: 1, right: 0 }) break } case 'Right': { game.inputPacketScheduler.scheduleInput({ up: 0, down: 0, left: 0, right: 1 }) break } case 'UpRight': { game.inputPacketScheduler.scheduleInput({ up: 1, down: 0, left: 0, right: 1 }) break } case 'UpLeft': { game.inputPacketScheduler.scheduleInput({ up: 1, down: 0, left: 1, right: 0 }) break } case 'DownRight': { game.inputPacketScheduler.scheduleInput({ up: 0, down: 1, left: 0, right: 1 }) break } case 'DownLeft': { game.inputPacketScheduler.scheduleInput({ up: 0, down: 1, left: 1, right: 0 }) break } } } let yaw let lockedYaw let shouldSpin = false let shouldClearChat = false let shouldSpamIdParty = false let shouldSpamAllParty = false let shouldLockYaw = false let autoSwing = false let shouldBotMode = false let botTimeout = false let shouldAHRC = false let shouldAutoAim = false let stash10leave = false let shouldAutoHealPet = true let healPetTimeout = false let shouldAutoRevivePet = true let shouldAutoEvolvePet = true let shouldAutoHealPlayer = true let playerHealTimeout = false let petSpawned = false let isSellingWalls = false let isSellingDoors = false let isSellingHarvs = false let isSellingTraps = false let isSellingArrows = false let isSellingCannons = false let isSellingMelees = false let isSellingMages = false let isSellingBombs = false let isSellingMines = false let shouldhealthup = false let shouldhealtowers = false let renderborder = false let renderRange = false let renderTracer = false let getRss = false let allowed1 = false const getDOMValue = (id) => document.getElementById(id).value; let healthpotion = [] game.network.sendRpc2 = game.network.sendRpc; if (!window.baseSave) { window.baseSave = '[]'; }; let buildingsByPos = new Map(); window.saveBase = () => { let stash = GetGoldStash(); if (stash == undefined) return;; let stashPosition = { x: stash.x, y: stash.y }; let parsedSavedStorage = []; for (let i in game.ui.buildings) { let building = game.ui.buildings[i]; parsedSavedStorage.push({ buildingType: building.type, stashOffsetX: stash.x - building.x, stashOffsetY: stash.y - building.y, lastTier: building.tier }); }; window.baseSave = JSON.stringify(parsedSavedStorage); }; window.buildBase = () => { let stash = GetGoldStash(); if (stash == undefined) return;; let stashPosition = { x: stash.x, y: stash.y }; let parsedSavedStorage = window.baseSave; if (parsedSavedStorage) { parsedSavedStorage = JSON.parse(window.baseSave); for (let i of parsedSavedStorage) { game.network.sendRpc2({ name: "MakeBuilding", type: i.buildingType, x: Math.round(parseInt(stash.x) - i.stashOffsetX), y: Math.round(parseInt(stash.y) - i.stashOffsetY), yaw: 0 }); }; }; }; window.toggleRebuilder = () => { let parsedSavedStorage = window.baseSave; if (parsedSavedStorage) { parsedSavedStorage = JSON.parse(window.baseSave); buildingsByPos = new Map(); for (let i of parsedSavedStorage) { buildingsByPos.set(`${i.stashOffsetX}, ${i.stashOffsetY}`, i); }; if (!window.rebuilderInterval) { window.saveBase(); window.rebuilderInterval = setInterval(() => { window.buildBase(); let buildingsArr = Object.values(game.ui.buildings); let stash = buildingsArr[0]; stash && buildingsArr.forEach(e => { let building = buildingsByPos.get(`${stash.x - e.x}, ${stash.y - e.y}`); if (building && e.tier < building.lastTier) { game.network.sendRpc2({ name: "UpgradeBuilding", uid: e.uid }); }; }); }, 350); } else { window.rebuilderInterval = clearInterval(window.rebuilderInterval); }; } else return; }; game.network.addEntityUpdateHandler((data = {}) => { if (!game.world.inWorld || !game.network.connected) return; const healPetInputValue = getDOMValue("healpetinput"); const healPlayerInputValue = getDOMValue("healplayerinput"); const myPet = game.world.entities[game.ui.playerTick?.petUid]?.fromTick; const petHealth = (myPet?.health / myPet?.maxHealth) * 100; const myPlayer = game.world.entities[game.ui.playerTick?.uid]?.fromTick; const playerHealth = (myPlayer?.health / myPlayer?.maxHealth) * 100; healthpotion = game.ui.inventory.HealthPotion if (game.ui.playerTick?.petUid != 0 && game.ui.playerTick?.petUid != undefined) petSpawned = true; if (shouldAutoHealPet && petHealth < document.getElementById("healpetinput").value && petHealth > 0 && game.ui.playerTick.gold >= 100 && !healPetTimeout) { shopShortcut("PetHealthPotion", 1) healPetTimeout = true; setTimeout(() => { healPetTimeout = 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] && playerHealth > 0) { shopShortcut("PetRevive", 1); } if (playerHealth > 0 && !healthpotion && game.ui.playerTick.gold >= 100 && shouldAutoHealPlayer) { buyItem("HealthPotion", 1); } if (playerHealth <= healPlayerInputValue && healthpotion && playerHealth > 0 && game.ui.playerTick.gold >= 100 && shouldAutoHealPlayer && !playerHealTimeout) { equipItem("HealthPotion", 1); playerHealTimeout = true; setTimeout(() => { playerHealTimeout = false; }, 300); } Object.values(data.entities).forEach(data => { if (data.model === "GoldStash") { borders.forEach(item => { item.position = data.position; }); circle.position = data.position; plusRectangles[0].position = data.position; plusRectangles[1].position = data.position; if (!game.world.renderer.entities.node.children.includes(circle)) { game.world.renderer.entities.node.addChild(circle); } borders.forEach(item => { if (!game.world.renderer.entities.node.children.includes(item)) { game.world.renderer.entities.node.addChild(item); } }); plusRectangles.forEach(item => { if (!game.world.renderer.entities.node.children.includes(item)) { game.world.renderer.entities.node.addChild(item); } }); } }); 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.07 - 0.02; game.network.sendRpc({ name: "AddDepositToHarvester", uid: obj.fromTick.uid, deposit: amount }); game.network.sendRpc({ name: "CollectHarvester", uid: obj.fromTick.uid }); } } } if (fighting) { findClosestEnemyPlayerDistance(); } if (trappingEnabled) { findPlayersInRangeToTrap(); } if (switching) { FindClosestPlayer(); } if (moving) { findClosestPlayerToFollow(); } if (shouldBowFollow) { findClosestPlayerToBow(); } if (shouldCombatZoom) { getClosestPlayer(); } if (shouldabpk) { if (game.ui.components.MenuShop.shopItems.Pickaxe.nextTier === 1 && game.ui.playerTick.gold >= undefined) { game.ui.components.MenuShop.shopItems.Pickaxe.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Pickaxe.nextTier === 2 && game.ui.playerTick.gold >= 1000) { game.ui.components.MenuShop.shopItems.Pickaxe.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Pickaxe.nextTier === 3 && game.ui.playerTick.gold >= 3000) { game.ui.components.MenuShop.shopItems.Pickaxe.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Pickaxe.nextTier === 4 && game.ui.playerTick.gold >= 5000) { game.ui.components.MenuShop.shopItems.Pickaxe.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Pickaxe.nextTier === 5 && game.ui.playerTick.gold >= 8000) { game.ui.components.MenuShop.shopItems.Pickaxe.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Pickaxe.nextTier === 6 && game.ui.playerTick.gold >= 24000) { game.ui.components.MenuShop.shopItems.Pickaxe.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Pickaxe.nextTier === 7 && game.ui.playerTick.gold >= 90000) { game.ui.components.MenuShop.shopItems.Pickaxe.componentElem.click(); }; } if (shouldabsp) { if (game.ui.components.MenuShop.shopItems.Spear.nextTier === 1 && game.ui.playerTick.gold >= 1400) { game.ui.components.MenuShop.shopItems.Spear.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Spear.nextTier === 2 && game.ui.playerTick.gold >= 2800) { game.ui.components.MenuShop.shopItems.Spear.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Spear.nextTier === 3 && game.ui.playerTick.gold >= 5600) { game.ui.components.MenuShop.shopItems.Spear.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Spear.nextTier === 4 && game.ui.playerTick.gold >= 11200) { game.ui.components.MenuShop.shopItems.Spear.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Spear.nextTier === 5 && game.ui.playerTick.gold >= 22500) { game.ui.components.MenuShop.shopItems.Spear.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Spear.nextTier === 6 && game.ui.playerTick.gold >= 45000) { game.ui.components.MenuShop.shopItems.Spear.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Spear.nextTier === 7 && game.ui.playerTick.gold >= 90000) { game.ui.components.MenuShop.shopItems.Spear.componentElem.click(); } } if (shouldabbw) { if (game.ui.components.MenuShop.shopItems.Bow.nextTier === 1 && game.ui.playerTick.gold >= 100) { game.ui.components.MenuShop.shopItems.Bow.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Bow.nextTier === 2 && game.ui.playerTick.gold >= 400) { game.ui.components.MenuShop.shopItems.Bow.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Bow.nextTier === 3 && game.ui.playerTick.gold >= 2000) { game.ui.components.MenuShop.shopItems.Bow.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Bow.nextTier === 4 && game.ui.playerTick.gold >= 7000) { game.ui.components.MenuShop.shopItems.Bow.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Bow.nextTier === 5 && game.ui.playerTick.gold >= 24000) { game.ui.components.MenuShop.shopItems.Bow.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Bow.nextTier === 6 && game.ui.playerTick.gold >= 30000) { game.ui.components.MenuShop.shopItems.Bow.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Bow.nextTier === 7 && game.ui.playerTick.gold >= 90000) { game.ui.components.MenuShop.shopItems.Bow.componentElem.click(); } } if (shouldabbm) { if (game.ui.components.MenuShop.shopItems.Bomb.nextTier === 1 && game.ui.playerTick.gold >= 100) { game.ui.components.MenuShop.shopItems.Bomb.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Bomb.nextTier === 2 && game.ui.playerTick.gold >= 400) { game.ui.components.MenuShop.shopItems.Bomb.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Bomb.nextTier === 3 && game.ui.playerTick.gold >= 3000) { game.ui.components.MenuShop.shopItems.Bomb.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Bomb.nextTier === 4 && game.ui.playerTick.gold >= 5000) { game.ui.components.MenuShop.shopItems.Bomb.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Bomb.nextTier === 5 && game.ui.playerTick.gold >= 24000) { game.ui.components.MenuShop.shopItems.Bomb.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Bomb.nextTier === 6 && game.ui.playerTick.gold >= 50000) { game.ui.components.MenuShop.shopItems.Bomb.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.Bomb.nextTier === 7 && game.ui.playerTick.gold >= 90000) { game.ui.components.MenuShop.shopItems.Bomb.componentElem.click(); } } if (shouldabsh) { if (game.ui.components.MenuShop.shopItems.ZombieShield.nextTier === 1 && game.ui.playerTick.gold >= 1000) { game.ui.components.MenuShop.shopItems.ZombieShield.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.ZombieShield.nextTier === 2 && game.ui.playerTick.gold >= 3000) { game.ui.components.MenuShop.shopItems.ZombieShield.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.ZombieShield.nextTier === 3 && game.ui.playerTick.gold >= 7000) { game.ui.components.MenuShop.shopItems.ZombieShield.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.ZombieShield.nextTier === 4 && game.ui.playerTick.gold >= 14000) { game.ui.components.MenuShop.shopItems.ZombieShield.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.ZombieShield.nextTier === 5 && game.ui.playerTick.gold >= 18000) { game.ui.components.MenuShop.shopItems.ZombieShield.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.ZombieShield.nextTier === 6 && game.ui.playerTick.gold >= 22000) { game.ui.components.MenuShop.shopItems.ZombieShield.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.ZombieShield.nextTier === 7 && game.ui.playerTick.gold >= 24000) { game.ui.components.MenuShop.shopItems.ZombieShield.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.ZombieShield.nextTier === 8 && game.ui.playerTick.gold >= 30000) { game.ui.components.MenuShop.shopItems.ZombieShield.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.ZombieShield.nextTier === 9 && game.ui.playerTick.gold >= 45000) { game.ui.components.MenuShop.shopItems.ZombieShield.componentElem.click(); }; if (game.ui.components.MenuShop.shopItems.ZombieShield.nextTier === 10 && game.ui.playerTick.gold >= 70000) { game.ui.components.MenuShop.shopItems.ZombieShield.componentElem.click(); }; } if (shouldAutoAim) { window.targets = []; let entities = game.renderer.npcs.attachments; let aimOptions = document.getElementById('aimOptions').value; let players = []; let zombies = []; for (let i in entities) { if (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) { players.push(entities[i].fromTick); } else if (entities[i].fromTick.model !== "GamePlayer" && entities[i].entityClass !== "Projectile") { zombies.push(entities[i].fromTick); } } if (aimOptions === 'pl') { window.targets = players.length > 0 ? players : zombies; } else if (aimOptions === 'zo') { window.targets = zombies.length > 0 ? zombies : players; } 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 }); } isSellingWalls ? Object.values(game.ui.buildings).forEach(i => i.type == "Wall" ? game.network.sendPacket(9, { name: "DeleteBuilding", uid: i.uid }) : 0) : 0; isSellingDoors ? Object.values(game.ui.buildings).forEach(i => i.type == "Door" ? game.network.sendPacket(9, { name: "DeleteBuilding", uid: i.uid }) : 0) : 0; isSellingTraps ? Object.values(game.ui.buildings).forEach(i => i.type == "SlowTrap" ? game.network.sendPacket(9, { name: "DeleteBuilding", uid: i.uid }) : 0) : 0; isSellingArrows ? Object.values(game.ui.buildings).forEach(i => i.type == "ArrowTower" ? game.network.sendPacket(9, { name: "DeleteBuilding", uid: i.uid }) : 0) : 0; isSellingCannons ? Object.values(game.ui.buildings).forEach(i => i.type == "CannonTower" ? game.network.sendPacket(9, { name: "DeleteBuilding", uid: i.uid }) : 0) : 0; isSellingMelees ? Object.values(game.ui.buildings).forEach(i => i.type == "MeleeTower" ? game.network.sendPacket(9, { name: "DeleteBuilding", uid: i.uid }) : 0) : 0; isSellingBombs ? Object.values(game.ui.buildings).forEach(i => i.type == "BombTower" ? game.network.sendPacket(9, { name: "DeleteBuilding", uid: i.uid }) : 0) : 0; isSellingMages ? Object.values(game.ui.buildings).forEach(i => i.type == "MagicTower" ? game.network.sendPacket(9, { name: "DeleteBuilding", uid: i.uid }) : 0) : 0; isSellingMines ? Object.values(game.ui.buildings).forEach(i => i.type == "GoldMine" ? game.network.sendPacket(9, { name: "DeleteBuilding", uid: i.uid }) : 0) : 0; isSellingHarvs ? Object.values(game.ui.builddings).forEach(i => i.type == "Harvester" ? game.network.sendPacket(9, { name: "DeleteBuilding", uid: i.uid }) : 0) : 0; if (stash10leave) { let stash = getGoldStash() if (stash) { let stashhealth = (stash.fromTick.health / stash.fromTick.maxHealth) * 100; if (stashhealth <= 10) { Game.currentGame.network.sendRpc({ name: "LeaveParty" }) } } } if (renderborder) { borders.forEach(item => { item.visible = true }); circle.visible = true; plusRectangles[0].visible = true; plusRectangles[1].visible = true; } else { borders.forEach(item => { item.visible = false }); circle.visible = false; plusRectangles[0].visible = false; plusRectangles[1].visible = false; } if (shouldBotMode && botTimeout == false) { botTimeout = true move(['Up', 'Down', 'Left', 'Right', 'UpRight', 'UpLeft', 'DownRight', 'DownLeft'][Math.floor(Math.random() * 8)]) setTimeout(() => { botTimeout = false }, 1000); } if (shouldSpamAllParty) { let joinablePartyId = [] let allparty = Object.values(game.ui.getParties()) for (let party of allparty) { if (party.isOpen == 1 && party.memberCount < 4 && party.partyId != game.ui.getPlayerPartyId()) joinablePartyId.push(party.partyId) } if (joinablePartyId.length > 0) game.network.sendRpc({ name: 'JoinParty', partyId: joinablePartyId[Math.floor(Math.random() * joinablePartyId.length)] }) } if (shouldSpin) { game.inputPacketCreator.lastAnyYaw = yaw; game.network.sendPacket(3, { mouseMoved: yaw }); yaw += 10 if (yaw >= 360) yaw -= 360 } if (shouldSpamIdParty && document.querySelector("#party-id-input").value != '') { game.network.sendRpc({ name: "JoinParty", partyId: parseInt(document.querySelector("#party-id-input").value) }) } if (shouldClearChat) { for (let i = 0; i < document.getElementsByClassName('hud-chat-message').length; i++) { document.getElementsByClassName('hud-chat-message')[i].remove(); }; } if (autogivesell && game.ui.playerPartyMembers[0].playerUid == game.world.myUid) { if (game.ui.playerPartyMembers[1]) { let sell1 = new Uint8Array(game.network.codec.encode(9, { name: "SetPartyMemberCanSell", uid: game.ui.playerPartyMembers[1].playerUid, canSell: 1 })); setTimeout(() => { game.network.socket.send(sell1); }, 3839); } if (game.ui.playerPartyMembers[2]) { let sell2 = new Uint8Array(game.network.codec.encode(9, { name: "SetPartyMemberCanSell", uid: game.ui.playerPartyMembers[2].playerUid, canSell: 1 })); setTimeout(() => { game.network.socket.send(sell2); }, 2361); } if (game.ui.playerPartyMembers[3]) { let sell3 = new Uint8Array(game.network.codec.encode(9, { name: "SetPartyMemberCanSell", uid: game.ui.playerPartyMembers[3].playerUid, canSell: 1 })); setTimeout(() => { game.network.socket.send(sell3); }, 1274); } } if (shouldhealthup) { for (let uid in data.entities) { const currentEntity = data.entities[uid]; const worldEntity = game.world.entities[uid]; if (uid in game.ui.buildings && typeof currentEntity.health == 'number') { const buildingHealth = (currentEntity?.health / worldEntity.targetTick.maxHealth) * 100; if (buildingHealth <= 20) { game.network.sendRpc({ name: "UpgradeBuilding", uid: parseInt(uid) }); } } } } if (shouldhealtowers) { for (let uid in data.entities) { const currentEntity = data.entities[uid]; const worldEntity = game.world.entities[uid]; if (uid in game.ui.buildings && typeof currentEntity.health == 'number') { const buildingHealth = (currentEntity?.health / worldEntity.targetTick.maxHealth) * 100; if (buildingHealth <= 50 && game.ui.playerTick.gold >= 1000 && !isNonTowerBuilding(game.ui.buildings[uid].type)) { const buildingX = worldEntity.targetTick.position.x; const buildingY = worldEntity.targetTick.position.y; game.network.sendPacket(9, { name: "CastSpell", spell: "HealTowersSpell", x: Math.round(buildingX), y: Math.round(buildingY), tier: 1 }); } } } } if (getRss) { !allowed1 && (allowed1 = true); } if (getRss || allowed1) { for (let i in game.renderer.npcs.attachments) { if (game.renderer.npcs.attachments[i].fromTick.name) { let player = game.renderer.npcs.attachments[i]; let wood_1 = counter(player.targetTick.wood); let stone_1 = counter(player.targetTick.stone); let gold_1 = counter(player.targetTick.gold); let token_1 = counter(player.targetTick.token); let px_1 = counter(player.targetTick.position.x); let py_1 = counter(player.targetTick.position.y); let timeout_1 = ""; if (getRss && !player.targetTick.oldName) { player.targetTick.oldName = player.targetTick.name; player.targetTick.oldWood = wood_1; player.targetTick.oldStone = stone_1; player.targetTick.oldGold = gold_1; player.targetTick.oldToken = token_1; player.targetTick.oldPX = px_1; player.targetTick.oldPY = py_1; player.targetTick.info = ` ${player.targetTick.oldName}; score: ${player.targetTick.score.toLocaleString()} UID: ${player.targetTick.uid} W: ${wood_1}, S: ${stone_1}, G: ${gold_1}, T: ${token_1} x: ${Math.round(player.targetTick.position.x)}, y: ${Math.round(player.targetTick.position.y)} partyId: ${Math.round(player.targetTick.partyId)} timeDead: ${msToTime(player.targetTick.timeDead)} ${player.targetTick.isPaused ? "On Timeout" : ""} `; player.targetTick.name = game.renderer.npcs.attachments[i].targetTick.info; } if (!getRss && player.targetTick.oldName) { player.targetTick.info = player.targetTick.oldName; player.targetTick.name = game.renderer.npcs.attachments[i].targetTick.info; player.targetTick.oldName = null; } if (getRss) { if (player.targetTick.oldGold !== gold_1 || player.targetTick.oldWood !== wood_1 || player.targetTick.oldStone !== stone_1 || player.targetTick.oldToken !== token_1 || player.targetTick.oldPX !== px_1 || player.targetTick.oldPY !== py_1) { player.targetTick.oldWood = wood_1; player.targetTick.oldStone = stone_1; player.targetTick.oldGold = gold_1; player.targetTick.oldToken = token_1; player.targetTick.oldPX = px_1; player.targetTick.oldPY = py_1; player.targetTick.info = ` ${player.targetTick.oldName}; score: ${player.targetTick.score.toLocaleString()} UID: ${player.targetTick.uid} W: ${wood_1}, S: ${stone_1}, G: ${gold_1}, T: ${token_1} x: ${Math.round(player.targetTick.position.x)}, y: ${Math.round(player.targetTick.position.y)} partyId: ${Math.round(player.targetTick.partyId)} timeDead: ${msToTime(player.targetTick.timeDead)} ${player.targetTick.isPaused ? "On Timeout" : ""} `; player.targetTick.name = game.renderer.npcs.attachments[i].targetTick.info; } } } } } if (!getRss) { allowed1 = false; } for (const uid in data.entities) { if (game.world.entities[uid] && game.world.replicator.currentTick && game.world.replicator.currentTick.entities[uid]) { if (game.world.entities[uid].node.alpha != 1) game.world.entities[uid].setAlpha(1); } } if (data.entities[game.world.myUid].dead !== undefined) { lastPlayerTickDead = data.entities[game.world.myUid].dead; } for (let id in wsPosElems) { const ws = webSockets[id]; if (!ws) { wsPosElems[id].remove(); delete wsPosElems[id]; continue; }; wsPosElems[id].style.top = `${((ws.playerTick.position.y / game.world.height) * 100) - 20}%`; wsPosElems[id].style.left = `${((ws.playerTick.position.x / game.world.width) * 100) - 2}%`; }; for (let id in webSockets) { if (wsPosElems[id]) { continue; }; const ws = webSockets[id]; const newPosElem = document.createElement("p"); newPosElem.style.top = `${((ws.playerTick.position.y / game.world.height) * 100) - 20}%` newPosElem.style.left = `${((ws.playerTick.position.x / game.world.width) * 100) - 2}%` newPosElem.style.color = "white"; newPosElem.style.position = "absolute"; newPosElem.style.zIndex = "9" newPosElem.innerText = "•"; document.getElementsByClassName("hud-map")[0].appendChild(newPosElem); wsPosElems[id] = newPosElem; }; }) let mousePs = {} let should3x3Walls = false; let should5x5Walls = false; let should7x7Walls = false; let should9x9Walls = false; addEventListener('keyup', function(e) { if (document.activeElement.tagName.toLowerCase() !== "input" && document.activeElement.tagName.toLowerCase() !== "textarea") { if (e.key == "-") { getRss = !getRss } if (e.key == "g") { game.ui.components.PlacementOverlay.startPlacing("GoldStash"); } if (e.key == "z") { should3x3Walls = !should3x3Walls; should5x5Walls = false should7x7Walls = false should9x9Walls = false if (should3x3Walls) { game.ui.getComponent("PopupOverlay").showHint('3x3 Walls On', 2000); } else { game.ui.getComponent("PopupOverlay").showHint('3x3 Walls Off', 2000); } } if (e.key == "x") { should5x5Walls = !should5x5Walls should3x3Walls = false should7x7Walls = false should9x9Walls = false if (should5x5Walls) { game.ui.getComponent("PopupOverlay").showHint('5x5 Walls On', 2000); } else { game.ui.getComponent("PopupOverlay").showHint('5x5 Walls Off', 2000); } } if (e.key == "c") { should7x7Walls = !should7x7Walls should3x3Walls = false should5x5Walls = false should9x9Walls = false if (should7x7Walls) { game.ui.getComponent("PopupOverlay").showHint('7x7 Walls On', 2000); } else { game.ui.getComponent("PopupOverlay").showHint('7x7 Walls Off', 2000); } } if (e.key == "v") { should9x9Walls = !should9x9Walls should3x3Walls = false should5x5Walls = false should7x7Walls = false if (should9x9Walls) { game.ui.getComponent("PopupOverlay").showHint('9x9 Walls On', 2000); } else { game.ui.getComponent("PopupOverlay").showHint('9x9 Walls Off', 2000); } } if (e.key == "C") { const selectedSong = document.getElementById('lyricSongs').value; switch (selectedSong) { case 'song1': playSong(TakingOver, song1, timeout1); break; case 'song2': playSong(NeverGonna, song2, timeout2); break; case 'song3': playSong(RuleTheWorld, song3, timeout3); break; case 'song4': playSong(DejaVu, song4, timeout4); break; case 'song5': playSong(DownLikeThat, song5, timeout5); break; case 'song6': playSong(superidol, song6, timeout6); break; case 'song7': playSong(ForTheNight, song7, timeout7); break; case 'song8': playSong(CocoNut, song8, timeout8); break; case 'song9': playSong(RapGod, song9, timeout9); } } if (e.key == "=") { game.ui.getComponent("PopupOverlay").showHint( 'Do u think I have time to make this???', 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) } } } }) function placeWall(x, y) { game.network.sendRpc({ name: 'MakeBuilding', x: x, y: y, type: "Wall", yaw: 0 }); } function isEven(number) { return number % 2 === 0; } function placeWalls(length, height, centerX, centerY) { for (let x = -((length - (isEven(length) ? 0 : 1)) / 2) * 48; x <= (length - (isEven(length) ? 0 : 1)) / 2 * 48; x += 48) { for (let y = -((height - (isEven(height) ? 0 : 1)) / 2) * 48; y <= (height - (isEven(height) ? 0 : 1)) / 2 * 48; y += 48) { const posX = centerX + x, posY = centerY + y; placeWall(posX, posY); } } } 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) { placeWalls(3, 3, gridPos.x, gridPos.y); } if (should5x5Walls) { placeWalls(5, 5, gridPos.x, gridPos.y); } if (should7x7Walls) { placeWalls(7, 7, gridPos.x, gridPos.y); } if (should9x9Walls) { placeWalls(9, 9, gridPos.x, gridPos.y); } } }); let dimension = 1; const onWindowResize = () => { if (document.querySelector("#hud-menu-settings").style.display == "none") { 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(); window.onresize = onWindowResize; window.onwheel = e => { if (e.deltaY > 0) { dimension += 0.09; onWindowResize(); } else if (e.deltaY < 0) { dimension -= 0.09; onWindowResize(); } } 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)); }; document.querySelector('#togglebot').addEventListener('click', function() { shouldBotMode = !shouldBotMode this.innerText = shouldBotMode ? "Bot On" : "Bot Off" }) document.querySelector('#togglespmch').addEventListener('click', function() { pauseChatSpam(document.querySelector('#spamchat').value) this.innerText = isSpamming ? "Spam Chat On" : "Spam Chat Off" }) let blockedNames = []; function blockPlayer(name) { blockedNames.push(name); for (let msg of Array.from(document.getElementsByClassName("hud-chat-message"))) { if (msg.childNodes[0].childNodes[1].textContent == name) { let bl = msg.childNodes[0].childNodes[0]; bl.innerHTML = "🔴 "; bl.onclick = () => { unblockPlayer(name); }; }; }; } function unblockPlayer(name) { blockedNames.splice(blockedNames.indexOf(name), 1); for (let msg of Array.from(document.getElementsByClassName("hud-chat-message"))) { if (msg.childNodes[0].childNodes[1].textContent == name) { let bl = msg.childNodes[0].childNodes[0]; bl.innerHTML = "🟢 "; bl.onclick = () => { blockPlayer(name); }; }; }; }; const getClock = () => { var date = new Date(); var day = date.getDate(); var month = date.getMonth(); var hour = date.getHours(); var minute = date.getMinutes() var second = date.getSeconds(); hour = (hour < 10) ? "0" + hour : hour; minute = (minute < 10) ? "0" + minute : minute; second = (second < 10) ? "0" + second : second; return `${day}/${month} ${hour}:${minute}:${second}`; } Game.currentGame.network.emitter.removeListener("PACKET_RPC", Game.currentGame.network.emitter._events.PACKET_RPC[1]); let onMessageReceived = msg => { let a = Game.currentGame.ui.getComponent("Chat"), b = window.filterXSS(msg.displayName), c = window.filterXSS(msg.message) if (blockedNames.includes(b) || window.chatDisabled) { return; }; let d = a.ui.createElement(`<div class="hud-chat-message"><strong><a>🟢 </a>${b}</strong><small> at ${getClock()}</small>: ${c}</div>`); a.messagesElem.appendChild(d); a.messagesElem.scrollTop = a.messagesElem.scrollHeight; a.messagesElem.lastChild.childNodes[0].childNodes[0].onclick = () => { blockPlayer(b) } } Game.currentGame.network.addRpcHandler("ReceiveChatMessage", onMessageReceived); let goToPosInterval; let moveTimeout; let canMoveRandomly = true; let triedDirections = []; // Keep track of attempted directions function calculateDirection(x, y) { const myX = Math.round(game.ui.playerTick.position.x); const myY = Math.round(game.ui.playerTick.position.y); // Calculate the difference between current position and destination const xDiff = x - myX; const yDiff = y - myY; // Determine the direction based on the coordinate differences if (xDiff === 0 && yDiff === 0) { return -1; // No movement needed } else if (xDiff > 0 && yDiff === 0) { return 1; // Right } else if (xDiff < 0 && yDiff === 0) { return 0; // Left } else if (xDiff === 0 && yDiff > 0) { return 3; // Down } else if (xDiff === 0 && yDiff < 0) { return 2; // Up } else if (xDiff > 0 && yDiff > 0) { return 7; // Down-right } else if (xDiff > 0 && yDiff < 0) { return 6; // Up-right } else if (xDiff < 0 && yDiff > 0) { return 5; // Down-left } else if (xDiff < 0 && yDiff < 0) { return 4; // Up-left } else { return -1; // Unknown direction } } function goToPos(x, y) { clearInterval(goToPosInterval); goToPosInterval = setInterval(() => { const myX = Math.round(game.ui.playerTick.position.x); const myY = Math.round(game.ui.playerTick.position.y); const offset = document.getElementById("offset").value; if (-myX + x > offset) game.network.sendInput({ left: 0 }); else game.network.sendInput({ left: 1 }); if (myX - x > offset) game.network.sendInput({ right: 0 }); else game.network.sendInput({ right: 1 }); if (-myY + y > offset) game.network.sendInput({ up: 0 }); else game.network.sendInput({ up: 1 }); if (myY - y > offset) game.network.sendInput({ down: 0 }); else game.network.sendInput({ down: 1 }); if (-myX + x < offset && myX - x < offset && -myY + y < offset && myY - y < offset) { game.ui.getComponent('PopupOverlay').showHint('Finished moving!', 10000); clearInterval(goToPosInterval); clearTimeout(moveTimeout); } }); moveTimeout = setTimeout(() => { clearInterval(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.', 8000); game.network.sendInput({ left: 0, right: 0, up: 0, down: 0 }); }, 240000); } function lockposition(x, y) { clearInterval(goToPosInterval); goToPosInterval = setInterval(() => { let myX = Math.round(game.ui.playerTick.position.x); let myY = Math.round(game.ui.playerTick.position.y); let offset = document.getElementById("offset").value; if (-myX + x > offset) game.network.sendInput({ left: 0 }); else game.network.sendInput({ left: 1 }); if (myX - x > offset) game.network.sendInput({ right: 0 }); else game.network.sendInput({ right: 1 }); if (-myY + y > offset) game.network.sendInput({ up: 0 }); else game.network.sendInput({ up: 1 }); if (myY - y > offset) game.network.sendInput({ down: 0 }); else game.network.sendInput({ down: 1 }); if (-myX + x < offset && myX - x < offset && -myY + y < offset && myY - y < offset) { game.ui.getComponent('PopupOverlay').showHint('Locked position', 1e4); } }) } let maintainDistanceInterval; function maintainDistanceFromPos(x, y) { clearInterval(maintainDistanceInterval); maintainDistanceInterval = setInterval(() => { const myX = Math.round(game.ui.playerTick.position.x); const myY = Math.round(game.ui.playerTick.position.y); const offset = document.getElementById("offset").value; let distance = calculateDistance(myX, myY, x, y); if (distance > 550 + offset/2) { if (-myX + x > offset) game.network.sendInput({ left: 0 }); else game.network.sendInput({ left: 1 }); if (myX - x > offset) game.network.sendInput({ right: 0 }); else game.network.sendInput({ right: 1 }); if (-myY + y > offset) game.network.sendInput({ up: 0 }); else game.network.sendInput({ up: 1 }); if (myY - y > offset) game.network.sendInput({ down: 0 }); else game.network.sendInput({ down: 1 }); } else if (distance < 550 - offset/2) { // Move away from the target if (-myX + x > offset) game.network.sendInput({ left: 1 }); else game.network.sendInput({ left: 0 }); if (myX - x > offset) game.network.sendInput({ right: 1 }); else game.network.sendInput({ right: 0 }); if (-myY + y > offset) game.network.sendInput({ up: 1 }); else game.network.sendInput({ up: 0 }); if (myY - y > offset) game.network.sendInput({ down: 1 }); else game.network.sendInput({ down: 0 }); } else { // Stop moving game.network.sendInput({ left: 0, right: 0, up: 0, down: 0 }); } }); } 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('click', (e) => { let offset = $('#hud-map-container').offset(); let mapMouseX = e.pageX - offset.left; let mapMouseY = e.pageY - offset.top; game.ui.getComponent('PopupOverlay').showConfirmation(`Are you sure you want to move to X: ${Math.round(mapMouseX * 171.42857142857)}, Y: ${Math.round(mapMouseY * 171.42857142857)}? You can right-click the minimap to cancel.`, 7500, () => { game.ui.getComponent('PopupOverlay').showHint('Starting MapMove...', 4000); goToPos(mapMouseX * 171.42857142857, mapMouseY * 171.42857142857); }, () => { game.ui.getComponent('PopupOverlay').showHint('OK, did not start MapMove', 4000); }); }); document.querySelector('#hud-map-container').addEventListener('contextmenu', () => { game.ui.getComponent('PopupOverlay').showConfirmation('Are you sure you want to cancel the current MapMove process?', 7500, () => { clearInterval(goToPosInterval); clearTimeout(moveTimeout); game.network.sendInput({ left: 0, right: 0, up: 0, down: 0 }); game.ui.getComponent('PopupOverlay').showHint('Successfully stopped MapMover.', 4000); }, () => { game.ui.getComponent('PopupOverlay').showHint('OK, did not stop MapMover.', 4000); }); }); document.querySelector("#hud-map-container").addEventListener('mousedown', (e) => { if (e.button === 1) { lockposition(Math.round(game.ui.playerTick.position.x), Math.round(game.ui.playerTick.position.y)) } }); let markerIds = 0; // Initialize marker IDs let maxMarkers = 69420; // Maximum number of markers let markers = []; // Array to store marker positions and IDs let goToMarkerInterval; let repeatingMoveInterval; let currentIndex = 0; // Initialize current marker index let markermoveTimeout; function addMarker(x, y) { if (markerIds >= maxMarkers) { // Max number of markers reached, show a pop-up game.ui.getComponent('PopupOverlay').showHint('Max number of markers reached.', 1500); } else { markerIds++; // Add marker to the array with its position and ID markers.push({ id: markerIds, x, y }); var map = document.getElementById("hud-map"); // Add a specific class to markers created by !marker and include their IDs map.insertAdjacentHTML("beforeend", `<div data-marker-id="${markerIds}" style="color: red; display: block; left: ${x}px; top: ${y}px; position: absolute;" class='hud-map-player marker-placed-by-command'></div>`); game.ui.getComponent('PopupOverlay').showHint(`Added Marker ${markerIds}`, 1500); } } function resetMarkerIds() { markerIds = 0; markers = []; // Show a hint that marker IDs were reset game.ui.getComponent('PopupOverlay').showHint('Marker IDs reset.', 1500); } function moveToNextMarker() { if (markers.length === 0) { game.ui.getComponent('PopupOverlay').showHint('No markers placed.', 1500); return; } // Move to the next marker in a circular manner currentIndex = (currentIndex + 1) % markers.length; const marker = markers[currentIndex]; if (marker) { goToMarkerPos(marker.x, marker.y); } } function startRepeatingMove() { if (markers.length === 0) { game.ui.getComponent('PopupOverlay').showHint('No markers placed.', 1500); return; } repeatingMoveInterval = setInterval(() => { moveToNextMarker(); }, 100); } function stopRepeatingMove() { clearInterval(goToMarkerInterval); clearTimeout(markermoveTimeout); game.network.sendInput({ left: 0, right: 0, up: 0, down: 0 }); game.ui.getComponent('PopupOverlay').showHint('Successfully stopped MapMover.', 4000); } // Handle the "markermove" command function handleMarkerMove() { // Stop any ongoing repeating move process stopRepeatingMove(); // Move to the first marker immediately currentIndex = 0; moveToNextMarker(); } function goToMarkerPos(x, y) { clearInterval(goToMarkerInterval); goToMarkerInterval = setInterval(() => { let myX = Math.round(game.ui.playerTick.position.x); let myY = Math.round(game.ui.playerTick.position.y); let offset = document.getElementById("offset").value; if (-myX + x > offset) game.network.sendInput({ left: 0 }); else game.network.sendInput({ left: 1 }); if (myX - x > offset) game.network.sendInput({ right: 0 }); else game.network.sendInput({ right: 1 }); if (-myY + y > offset) game.network.sendInput({ up: 0 }); else game.network.sendInput({ up: 1 }); if (myY - y > offset) game.network.sendInput({ down: 0 }); else game.network.sendInput({ down: 1 }); if (-myX + x < offset && myX - x < offset && -myY + y < offset && myY - y < offset) { game.ui.getComponent('PopupOverlay').showHint('Finished moving!', 1e4); clearInterval(goToMarkerInterval); // Wait for 1 second before moving to the next marker markermoveTimeout = setTimeout(() => { moveToNextMarker(); }, 100); } }); } let movePositions = [{ x: 1200, y: 1200 }, { x: 22800, y: 1200 }, { x: 22800, y: 2400 }, { x: 1200, y: 2400 }, { x: 1200, y: 3600 }, { x: 22800, y: 3600 }, { x: 22800, y: 4800 }, { x: 1200, y: 4800 }, { x: 1200, y: 6000 }, { x: 22800, y: 6000 }, { x: 22800, y: 7200 }, { x: 1200, y: 7200 }, { x: 1200, y: 8400 }, { x: 22800, y: 8400 }, { x: 22800, y: 9600 }, { x: 1200, y: 9600 }, { x: 1200, y: 10800 }, { x: 22800, y: 10800 }, { x: 22800, y: 12000 }, { x: 1200, y: 12000 }, { x: 1200, y: 13200 }, { x: 22800, y: 13200 }, { x: 22800, y: 14400 }, { x: 1200, y: 14400 }, { x: 1200, y: 15600 }, { x: 22800, y: 15600 }, { x: 22800, y: 16800 }, { x: 1200, y: 16800 }, { x: 1200, y: 18000 }, { x: 22800, y: 18000 }, { x: 22800, y: 19200 }, { x: 1200, y: 19200 }, { x: 1200, y: 20400 }, { x: 22800, y: 20400 }, { x: 22800, y: 21600 }, { x: 1200, y: 21600 }, { x: 1200, y: 22800 }, { x: 22800, y: 22800 } ]; let currentPositionIndex = 0; // Handle the "scanposition" command function handleScanPosition() { // Stop any ongoing repeating move process stopRepeatingMove(); // Move to the first position immediately currentPositionIndex = 0; moveToNextPosition(); } function moveToNextPosition() { if (currentPositionIndex >= movePositions.length) { game.ui.getComponent('PopupOverlay').showHint('Scanning positions completed.', 1500); return; } const position = movePositions[currentPositionIndex]; goToPosition(position.x, position.y); currentPositionIndex++; } function goToPosition(x, y) { clearInterval(goToMarkerInterval); goToMarkerInterval = setInterval(() => { const myX = Math.round(game.ui.playerTick.position.x); const myY = Math.round(game.ui.playerTick.position.y); const offset = document.getElementById("offset").value; const coords1secondago = getCoordinatesOneSecondAgo() const distanceDifference = Math.round(calculateDistance(myX, myY, coords1secondago.x, coords1secondago.y)); if (distanceDifference < 30) { // If the distance is not changing, move in a random direction (if allowed) if (canMoveRandomly) { canMoveRandomly = false; // Prevent further random movement until timer expires // Get the direction based on the current position and destination const destinationDirection = calculateDirection(x, y); const oppdestinationDirection = -calculateDirection(x, y); // Define all possible directions const allDirections = [0, 1, 2, 3, 4, 5, 6, 7]; // Filter out directions that have already been tried or are the same as the destination direction const availableDirections = allDirections.filter( dir => !triedDirections.includes(dir) && dir !== destinationDirection && dir !== oppdestinationDirection ); let randomDirection; if (availableDirections.length === 0) { // All directions have been tried, reset and try again triedDirections = []; randomDirection = Math.floor(Math.random() * 8); // Random direction } else { // Choose a random direction from the available directions randomDirection = availableDirections[Math.floor(Math.random() * availableDirections.length)]; } // Store the selected direction in the list of tried directions triedDirections.push(randomDirection); // Clear all inputs first game.network.sendInput({ left: 0, right: 0, up: 0, down: 0 }); // Translate the random direction to input values if (randomDirection === 0) { game.network.sendInput({ left: 1 }); } else if (randomDirection === 1) { game.network.sendInput({ right: 1 }); } else if (randomDirection === 2) { game.network.sendInput({ up: 1 }); } else if (randomDirection === 3) { game.network.sendInput({ down: 1 }); } else if (randomDirection === 4) { game.network.sendInput({ left: 1, up: 1 }); } else if (randomDirection === 5) { game.network.sendInput({ left: 1, down: 1 }); } else if (randomDirection === 6) { game.network.sendInput({ right: 1, up: 1 }); } else if (randomDirection === 7) { game.network.sendInput({ right: 1, down: 1 }); } // After 5 seconds, stop the random movement and reset the flag setTimeout(() => { game.network.sendInput({ left: 0, right: 0, up: 0, down: 0 }); canMoveRandomly = true; }, 5000); } } if (canMoveRandomly) { // Continue with the original movement logic if (-myX + x > offset) game.network.sendInput({ left: 0 }); else game.network.sendInput({ left: 1 }); if (myX - x > offset) game.network.sendInput({ right: 0 }); else game.network.sendInput({ right: 1 }); if (-myY + y > offset) game.network.sendInput({ up: 0 }); else game.network.sendInput({ up: 1 }); if (myY - y > offset) game.network.sendInput({ down: 0 }); else game.network.sendInput({ down: 1 }); } if (distanceDifference < 30) { game.ui.getComponent('PopupOverlay').showHint('Stuck, taking a random step!', 5000); } if (-myX + x < offset && myX - x < offset && -myY + y < offset && myY - y < offset) { game.ui.getComponent('PopupOverlay').showHint('Reached destination!', 1000); clearInterval(goToMarkerInterval); // Wait for 1 second before moving to the next position setTimeout(() => { moveToNextPosition(); }, 100); } }, 10); } const minimap = document.getElementById("hud-map"); let lastPlayerTickDead = 0; let showBuildings = true; const isBuildingOffset = offset => (offset % 48) ? ~~(0 <= (offset % 200) && (offset % 200) <= 16) : ~~(0 <= (offset % 200) && (offset % 200) <= 40); const isInRange = (p1, p2) => { const deltaX = ~~(p2.x / 200) - ~~(p1.x / 200); const deltaY = ~~(p2.y / 200) - (~~((p1.y + 100) / 200) - 0.5); return -5 <= deltaX && -3.5 <= deltaY && deltaX <= 5 + isBuildingOffset(p2.x) && deltaY <= 3.5 + isBuildingOffset(p2.y); }; game.world.removeEntity2 = game.world.removeEntity; game.world.removeEntity = uid => { if (!game.world.entities[uid]) return; const model = game.world.entities[uid].targetTick.model; const pp = game.ui.playerTick.position; const ep = game.world.entities[uid].targetTick.position; if (["Tree", "Stone", "NeutralCamp"].includes(model) && !game.world.replicator.currentTick.entities[uid]) { if (game.world.entities[uid].node.alpha != 0.5) game.world.entities[uid].setAlpha(0.5); return; }; if (["Wall", "Door", "SlowTrap", "ArrowTower", "BombTower", "MagicTower", "ResourceHarvester", "CannonTower", "MeleeTower", "GoldMine", "Harvester"].includes(model)) { if (!isInRange(pp, ep) && !game.world.replicator.currentTick.entities[uid]) { if (game.world.entities[uid].node.alpha != 0.5) game.world.entities[uid].setAlpha(0.5); return; } }; game.world.removeEntity2(uid); }; game.world.createEntity2 = game.world.createEntity; game.world.createEntity = entity => { if (["Tree", "Stone", "NeutralCamp"].includes(entity.model)) { const entityDiv = document.createElement("div"); entityDiv.classList.add("hud-map-building"); // Common class for styling if (entity.model === "Tree" || entity.model === "Stone" || entity.model === "NeutralCamp") { entityDiv.classList.add("colorful-dot"); // Separate class for deleting } entityDiv.style.background = ({ Tree: "green", Stone: "grey", NeutralCamp: "red" })[entity.model]; entityDiv.style.left = `${entity.position.x / 24000 * 100}%`; entityDiv.style.top = `${entity.position.y / 24000 * 100}%`; entityDiv.style.display = showBuildings ? "block" : "none"; // Set initial visibility minimap.appendChild(entityDiv); } game.world.createEntity2(entity); }; function toggleEnvironmentVisibility() { showBuildings = !showBuildings; const colorfulDotElements = document.querySelectorAll(".colorful-dot"); colorfulDotElements.forEach((element) => { element.style.display = showBuildings ? "block" : "none"; }); }; game.network.sendRpc = (e) => { if (e.name === "SendChatMessage") { e.message = evadeFilter(e.message); } game.network.sendRpc2(e); }; let filterTargets = [ /m[o0u]th(?:er|a)f+u+c+k+[e3]r/gi, /m[o0u]th(?:er|a)f+u+c+k+/gi, /f+[\s\d_\^\+\=\*\.\-,:"'>|\/\\]{0,42}u+[\s\d_\^\+\=\*\.\-,:"'>|\/\\]{0,42}c+[\s\d_\^\+\=\*\.\-,:"'>|\/\\]{0,42}k+/gi, /c+[o0]+c+k+s+u+c+k+[e3]+r+/gi, /c+[o0]+c+k+s+u+c+k+/gi, /[a@][s\$][s\$]h[o0]l[e3][s\$]/gi, /[a@][s\$][s\$]h[o0]+l[e3]/gi, /(\b|^|[^glmp])[a@][s\$][s\$][e3][s\$](?:\b|$)/gi, /\b(dumb)[a@][s\$][s\$]+/gi, /(\b|^|\s|[^bcglmprstvu])[a@][\s\d_\^\+\=\*\.\-,:"'>|\/\\]{0,42}[s\$][\s\d_\^\+\=\*\.\-,:"'>|\/\\]{0,42}[s\$]+(?:\b|$)/gi, /\bt[i1]tt[i1]e[s\$]/gi, /\bt[i1]tt[i1]e/gi, /\bt[i1]tty/gi, /\bt+[\s_\^\+\=\*\.\-,:"'>|\/\\]{0,42}[i1]+[\s_\^\+\=\*\.\-,:"'>|\/\\]{0,42}t+[\s_\^\+\=\*\.\-,:"'>|\/\\]{0,42}[s\$]+/gi, /\bt+[i1]+t([^ahilmrtu])/gi, /p[i1]+ss+(?!ant)/gi, /d[i1]+c+k+(?!e|i)/gi, /(\b|[^s])c+[\s_\^\+\=\*\.\-,:"'>|\/\\]{0,42}u+[\s_\^\+\=\*\.\-,:"'>|\/\\]{0,42}n+[\s_\^\+\=\*\.\-,:"'>|\/\\]{0,42}t/gi, /\bb[a@]+st[a@]+r+d(?!ise|ize)/gi, /b+[\s_\^\+\=\*\.\-,:"'>|\/\\]{0,42}[i1]+[\s_\^\+\=\*\.\-,:"'>|\/\\]{0,42}t[\s_\^\+\=\*\.\-,:"'>|\/\\]{0,42}c[\s_\^\+\=\*\.\-,:"'>|\/\\]{0,42}h/gi, /n+[i1]+gg+[a@]+[s\$z]+/gi, /n+[i1]+gg+e+r+[s\$z]+/gi, /n+[\W023456789_]{0,42}[i1]+[\W023456789_]{0,42}g[\W\d_]{0,42}g+[\W\d_]{0,42}[a@]+(?!rd)/gi, /(\b|^|[^s])n+[\W02-9_]{0,42}[i1]+[\W02-9_]{0,42}g[\W\d_]{0,42}g+[\W0-24-9_]{0,42}[e3]+[\W0-24-9_]{0,42}r+/gi, /m+[i1]+gg+[e3]+r+/gi, /y+[i1]+gg+[e3]+r+/gi, /d+[a@]+r+k+[i1]+[e3]+s+/gi, /d+[\W\d_]{0,42}[a@]+[\W\d_]{0,42}r+[\W\d_]{0,42}k+[\W02-9_]{0,42}[i1]+[\W024-9_]{0,42}[e3]+/gi, /[s$z]+h+v+[a@]+t+[s$z]+[a@]+[s$z]+/gi, /[s$z]+h+v+[a@]+t+[s$z]+[a@]+/gi, /(\b|^)[s$]+p+[i1]+c+k{0,32}[s$]+/gi, /(\b|^)[s$]+[\W\d_]{0,42}p+[\W02-9_]{0,42}[i1]+[\W02-9_]{0,42}c+(\b|$)/gi, /w+[e3]+t+b+[a@]+c+k+[s$z]+/gi, /w+[e3]+t+b+[a@]+c+k+/gi, /k+[i1]+k+[e3]+[s$z]+/gi, /k+[\W02-9_]{0,42}[i1]+[\W02-9_]{0,42}k+[\W0124-9_]{0,42}[e3]+(\b|$)/gi, /g+[\W1-9_]{0,42}[o0][\W1-9_]{0,42}[o0]+[\W1-9_]{0,42}k+[\W\d_]{0,42}[s$]+/gi, /(\b|^)g+[\W1-9_]{0,42}[o0][\W1-9_]{0,42}[o0]+[\W1-9_]{0,42}k+(?!y)/gi, /r+[a@]+g+[\W\d_]{0,42}h+[e3]+[a@]+d+[s$]+/gi, /r+[\W\d_]{0,42}[a@]+[\W\d_]{0,42}g+[\W\d_]{0,42}h+[\W0-24-9_]{0,42}[e3]+[\W0-24-9_]{0,42}[a@]+[\W\d_]{0,42}d+/gi, /t+[o0]+w+[e3]+[l1]+[\W02-9_]{0,42}h+[e3]+[a@]+d+[s$]+/gi, /t+[\W1-9_]{0,42}[o0]+[\W1-9_]{0,42}w+[\W0-24-9_]{0,42}[e3]+[\W024-9_]{0,42}[l1]+[\W02-9_]{0,42}h+[\W0-24-9_]{0,42}[e3]+[\W0-24-9_]{0,42}[a@]+[\W\d_]{0,42}d+/gi, /[i1]+n+j+u+n+[s$]+/gi, /[i1]+[\W02-9_]{0,42}n+[\W\d_]{0,42}j+[\W\d_]{0,42}u+[\W\d_]{0,42}n+(\b|$)/gi, /(\b|^)[s$]+q+u+[a@]+w+s+/gi, /(\b|^)[s$]+q+u+[a@]+w+(\b|$)/gi, /g[o0][l1][l1][i1y]w[o0]g+[s$]/gi, /g[o0][l1][l1][i1y]w[o0]g+/gi, /w+[\W1-9_]{0,42}[o0]+[\W1-9_]{0,42}g+[\W\d_]{0,42}[s$]+/gi, /(\b|^)w+[\W1-9_]{0,42}[o0]+[\W1-9_]{0,42}g+(\b|$)/gi, /[ck][a@]ffr[e3][s$z]/gi, /[ck][\W\d_]{0,42}[a@][\W\d_]{0,42}f[\W\d_]{0,42}f[\W\d_]{0,42}r[\W0-24-9_]{0,42}[e3]/gi, /[ck][a@]ff[ie3]r[s$z]/gi, /[ck]+[\W\d_]{0,42}[a@]+[\W\d_]{0,42}(?:f[\W024-9_]{0,42})+[i1e3]+[\W024-9_]{0,42}r+/gi, /[s$]h[i1]t[s$]k[i1]n[s$]/gi, /[s$]h[i1]t[s$]k[i1]n/gi, /[s$]+[\s\d_\^\+\=\*\.\-,:"'>|\/\\]{0,42}h+[\s\d_\^\+\=\*\.\-,:"'>|\/\\]{0,42}[i1]+[\s023456789_\^\+\=\*\.\-,:"'>|\/\\]{0,42}t+(?!ake)/gi, /[l1][a@]tr[i1]n[o0][s$z]/gi, /[l1][a@]tr[i1]n[o0]/gi, /ch[i1]nk[e3]rb[e3][l1][l1]+/gi, /[s$]hv[o0][o0]g[a@][s$]/gi, /[s$]hv[o0][o0]g[a@]/gi, /n[e3]gr[e3][s$z][s$z]+/gi, /[s$][a@]mb[o0][e3]*[s$]/gi, /[s$][\W\d_]{0,42}[a@][\W\d_]{0,42}m[\W\d_]{0,42}b[\W1-9_]{0,42}[o0]/gi, ]; const insert = (string, index, replacement) => { return string.substring(0, index) + replacement + string.substring(index + 1); }; const replace = (string, index, replacement) => { return string.substring(0, index) + replacement; }; const evadeFilter = str => { let newStr = str; let shouldCheck = true; while (shouldCheck) { filterTargets.forEach(target => { let array; let indices = []; while ((array = target.exec(newStr)) !== null) { indices.unshift(array.index); }; indices.forEach((index, i) => { let subStr = newStr.substring(index); for (let j = 0; j < subStr.length; j++) { if (subStr[j].search(/[a-zA-Z@$]/) != -1) { let attempt = insert(subStr, j, '&#' + `${subStr.charCodeAt(j)}` + ((j < subStr.length - 1) ? (!isNaN(subStr[j + 1]) ? ';' : '') : '')); if (attempt.search(target) == -1) { newStr = replace(newStr, index, attempt); break; }; }; if (j == subStr.length - 1) { let replacement = subStr; for (let k = target.exec(subStr)[0].length - 1; k >= 0; k--) { if (subStr[k].search(/[a-zA-Z@$]/) != -1) { replacement = insert(replacement, k, '&#' + `${subStr.charCodeAt(k)}` + ((k < subStr.length - 1) ? (!isNaN(subStr[k + 1]) ? ';' : '') : '')); if (replacement.search(target) == -1) { newStr = replace(newStr, index, replacement); break; }; }; }; break; }; }; }); }); for (let i in filterTargets) { if (newStr.search(filterTargets[i]) != -1) break; else if (i == filterTargets.length - 1) shouldCheck = false; }; }; return newStr; } const styles = ` #custom-sidebar { width: 500px; /* Set the width as per your requirement */ height: 500px; /* Set the height as per your requirement */ background-color: rgba(17, 17, 17, 0.7); /* 70% transparent black */ position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); display: none; padding: 25px; text-align: center; border-radius: inherit; overflow: auto; z-index: 999; /* Ensure it's above other elements */ } #custom-content { color: whitesmoke; height: 100%; width: 100%; border-radius: inherit; overflow: auto; } button { cursor: pointer; } `; document.body.insertAdjacentHTML("beforeend", `<style>${styles}</style>`); const customSidebar = document.createElement("div"); customSidebar.id = "custom-sidebar"; const customContent = document.createElement("div"); customContent.id = "custom-content"; document.body.appendChild(customSidebar); customSidebar.appendChild(customContent); // Buttons at the start const initialHTML = ` <h1>WebSockets</h1> <input class="btn" type="text" id="wsName" placeholder="WebSocket name..." maxlength=29 /> <button class="btn" onclick="window.sendWS();">Send WS</button> <hr /> <button class="btn btn-red" onclick="window.rmWS();">Remove Last WS</button> <button class="btn btn-red" onclick="window.rmAllWS();">Remove All WS</button> <br> <input class="btn" type="text" id="lockedx" placeholder="x" maxlength=5/> <input class="btn" type="text" id="lockedy" placeholder="y" maxlength=5/> <button class="btn btn-red" id="locktoggle" onclick="window.toggleLockAlts();">Lock Alts</button> <button class="btn btn-red" onclick="window.joinParty();">Alts Join</button> <button class="btn btn-red" onclick="window.leaveParty();">Alts Leave</button> <button class="btn btn-red" id="aitotoggle" onclick="window.toggleAito();">Start Aito</button> `; customContent.innerHTML = initialHTML; customSidebar.style.display = "none" // Function to toggle visibility and position of the custom sidebar function toggleCustomSidebar() { customSidebar.style.display = (customSidebar.style.display === "none") ? "block" : "none"; } // Event listener to toggle the custom sidebar on backslash key press document.addEventListener("keyup", e => { if (e.key === "\\") { toggleCustomSidebar(); } }); const webSockets = {}; let wsId = 0; let wsIndex = 0; window.sendWS = () => { let iframe = document.createElement('iframe'); iframe.src = 'https://zombs.io'; iframe.style.display = 'none'; document.body.append(iframe); let iframeWindow = iframe.contentWindow; iframe.addEventListener("load", () => { let connectionOptions = game.network.connectionOptions ?? game.options.servers[document.getElementsByClassName('hud-intro-server')[0].value]; iframeWindow.game.network.connectionOptions = connectionOptions; iframeWindow.game.network.connected = true; let ws = new WebSocket(`wss://${connectionOptions.hostname}:${connectionOptions.port}`); ws.binaryType = 'arraybuffer'; ws.onopen = (data) => { ws.network = new game.networkType(); ws.network.sendPacket = (_event, _data) => { ws.send(ws.network.codec.encode(_event, _data)); }; ws.playerTick = {}; ws.onRpc = (data) => { switch(data.name){ case 'Dead': ws.network.sendPacket(3, { respawn: 1 }); break; case 'ReceiveChatMessage': if(data.response.uid == game.world.myUid) { if(data.response.message.toLowerCase() == `!${ws.wsId}`) { ws.hit = 0; }; if(data.response.message.toLowerCase() == `${ws.wsId}`) { ws.space = 0; }; }; break; }; }; ws.gameUpdate = () => { if(ws.hit < 12) { ws.hit++; }; if([3, 9].includes(ws.hit)) { ws.network.sendPacket(3, { space: 1 }); } else if([6, 12].includes(ws.hit)) { ws.network.sendPacket(3, { space: 0 }); }; if(ws.space < 6) { ws.space++; }; if(ws.space == 3) { ws.network.sendPacket(3, { space: 1 }); }; if(ws.space == 6) { ws.network.sendPacket(3, { space: 0 }); }; ws.moveToward = (x, y) => { let roundedX = Math.round(x); let roundedY = Math.round(y) let myX = Math.round(ws.playerTick.position.x); let myY = Math.round(ws.playerTick.position.y); let offset = 10; if (-myX + roundedX > offset) ws.network.sendInput({ left: 0 }); else ws.network.sendInput({ left: 1 }); if (myX - roundedX > offset) ws.network.sendInput({ right: 0 }); else ws.network.sendInput({ right: 1 }); if (-myY + roundedY > offset) ws.network.sendInput({ up: 0 }); else ws.network.sendInput({ up: 1 }); if (myY - roundedY > offset) ws.network.sendInput({ down: 0 }); else ws.network.sendInput({ down: 1 }); }; if (!altsLocked) { var mousePos = game.renderer.screenToWorld(game.inputManager.mousePosition.x, game.inputManager.mousePosition.y) ws.moveToward(mousePos.x, mousePos.y); } if (altsLocked) { ws.moveToward(document.getElementById("lockedx").value, document.getElementById("lockedy").value); } }; ws.onmessage = msg => { if (new Uint8Array(msg.data)[0] == 5){ game.network.codec.decodePreEnterWorldResponse = buffer => buffer; let data = iframeWindow.game.network.codec.decodePreEnterWorldResponse(game.network.codec.decode(msg.data)); ws.send(ws.network.codec.encode(4, { displayName: document.getElementById("wsName").value, extra: data.extra})); ws.followMouse && ws.network.sendPacket(3, game.network.lastPacketInput); return; }; ws.data = ws.network.codec.decode(msg.data); switch(ws.data.opcode) { case 0: for(let i in ws.data.entities[ws.playerTick.uid]) { ws.playerTick[i] = ws.data.entities[ws.playerTick.uid][i]; }; ws.gameUpdate(); break; case 4: ws.send(iframeWindow.game.network.codec.encode(6, {})); iframe.remove(); ws.playerTick.uid = ws.data.uid; ws.network.sendRpc({name: "JoinPartyByShareKey", partyShareKey: game.ui.playerPartyShareKey}); wsId++; wsIndex = wsId; webSockets[wsId] = ws; ws.wsId = wsId; ws.followMouse = true; break; case 9: ws.onRpc(ws.data); break; } } ws.onclose = e => { iframe.remove(); delete webSockets[ws.wsId]; }; }; }); }; const checkWS = () => { if(Object.keys(webSockets).length < 1) { wsId = 0; wsIndex = 0; }; }; window.rmWS = () => { let deletionId = wsIndex; if(!webSockets[wsIndex]) { deletionId = Math.max([ wsIndex, ...Object.keys(webSockets).map(parseInt) ]); }; webSockets[deletionId].close(); delete webSockets[deletionId]; wsIndex--; checkWS(); }; window.rmAllWS = () => { for(let id in webSockets) { webSockets[id].close(); }; webSockets = {}; checkWS(); }; let wsPosElems = {}; game.network.oldSendRpc = game.network.sendRpc; game.network.sendRpc = m => { if(m.name == "EquipItem") { for(let id in webSockets) { const ws = webSockets[id]; ws.network.sendPacket(9, { name: "BuyItem", itemName: m.itemName, tier: m.tier }); ws.network.sendPacket(9, m); }; }; game.network.oldSendRpc(m); }; game.network.oldSendInput = game.network.sendInput; game.network.sendInput = m => { for(let id in webSockets) { const ws = webSockets[id]; ws.network.sendPacket(3, m); }; game.network.oldSendInput(m); }; window.leaveParty = () => { for (let id in webSockets) { webSockets[id].network.sendPacket(9, { name: "LeaveParty" }); } } window.joinParty = () => { for (let id in webSockets) { webSockets[id].network.sendRpc({ name: "JoinPartyByShareKey", partyShareKey: game.ui.playerPartyShareKey }); } } let aitoEnabled = false; let currentWebSocketIndex = 0; let canPerformNightActions = true; let goldCheckInterval; // Declare the variable for the gold-checking interval let selectedWebSocket; // Declare the variable for the selected WebSocket // Function to find the next WebSocket id in order function findNextWebSocketId() { const webSocketIds = Object.keys(webSockets); const numWebSockets = webSocketIds.length; if (numWebSockets === 0) { return null; // No websockets available } // Get the next WebSocket id in order const selectedWebSocketId = webSocketIds[currentWebSocketIndex]; // Update the current index for the next night currentWebSocketIndex = (currentWebSocketIndex + 1) % numWebSockets; return selectedWebSocketId; } window.toggleAito = () => { aitoEnabled = !aitoEnabled; // Clear the gold-checking interval when Aito is disabled if (!aitoEnabled) { clearInterval(goldCheckInterval); } if (Object.keys(webSockets).length >= 3) { // All websockets leave the party for (let id in webSockets) { webSockets[id].network.sendPacket(9, { name: "LeaveParty" }); } } if (aitoEnabled) { // Aito is enabled if (Object.keys(webSockets).length < 3) { // Show a popup if there are fewer than 3 websockets game.ui.getComponent("PopupOverlay").showHint('Not enough alts, get 3 of them at least', 5000); aitoEnabled = false; // Disable Aito } } // Update the button text based on Aito's status document.getElementById("aitotoggle").innerHTML = aitoEnabled ? "Stop Aito" : "Start Aito"; }; let altsLocked = false window.toggleLockAlts = () => { altsLocked = !altsLocked; document.getElementById("locktoggle").innerHTML = altsLocked ? "Unlock Alts" : "Lock Alts"; }; // Variable to track the last time a health potion was bought let lastHealthPotionBuyTime = 0; // Override the sendRpc function game.network.sendRpc = (input) => { // Check if the RPC is for buying a health potion and if the cooldown has passed if (input.name === "BuyItem" && input.itemName === "HealthPotion") { const currentTime = Date.now(); // Check if enough time has passed since the last health potion buy const timeSinceLastBuy = currentTime - lastHealthPotionBuyTime; const cooldownDuration = 15000; // Cooldown duration in milliseconds (15 seconds) if (timeSinceLastBuy >= cooldownDuration) { // Update the last health potion buy time lastHealthPotionBuyTime = currentTime; // Create a div element for the timer const timerElement = document.createElement('div'); timerElement.style.color = 'red'; // Set the text color to red timerElement.style.position = 'absolute'; // Find the health potion button in the toolbar const healthPotionButton = document.querySelector("#hud-toolbar > div.hud-toolbar-inventory > a:nth-child(5)") // Check if the health potion button is found if (healthPotionButton) { // Calculate the position below the health potion button const healthPotionButtonRect = healthPotionButton.getBoundingClientRect(); const timerTop = healthPotionButtonRect.bottom; // Adjust as needed timerElement.style.left = `${healthPotionButtonRect.left}px`; // X-coordinate timerElement.style.top = `${timerTop}px`; // Y-coordinate // Append the timer element to the game's UI document.body.appendChild(timerElement); // Function to update and display the timer const updateTimer = () => { const timeRemaining = cooldownDuration - (Date.now() - lastHealthPotionBuyTime); const currentTimerValue = Math.max(0, Math.ceil(timeRemaining / 1000)); const milliseconds = Math.max(0, timeRemaining % 1000); // Format the timer to include milliseconds timerElement.textContent = `${currentTimerValue}.${milliseconds < 100 ? '0' : ''}${milliseconds}`; if (timeRemaining <= 0) { // Add any additional actions you want to perform when the timer expires clearInterval(timerInterval); document.body.removeChild(timerElement); // Remove the timer element from the UI } }; // Update the timer immediately updateTimer(); // Update the timer every 100 milliseconds const timerInterval = setInterval(updateTimer, 100); } } } // Call the original sendRpc function game.network.sendRpc2(input); }; (function(){if(document.querySelector("#customAudioPlayer"))return; var audioFiles=[{url:"https://cdn.discordapp.com/attachments/1062441866416619653/1069324203297362040/Barren_Gates_-_Obey_NCS_Release.mp3",title:"Obey NCS"}, {url:"https://cdn.discordapp.com/attachments/1062441866416619653/1069323837608570941/Clarx_-_Zig_Zag_NCS_Release.mp3",title:"Zig Zag NCS"}, {url:"https://cdn.discordapp.com/attachments/1062441866416619653/1069300879708135524/Anixto_-_Ride_Or_Die_NCS_Release.mp3",title:"Ride Or Die NCS"}, {url:"https://cdn.discordapp.com/attachments/1062441866416619653/1069324799903531128/MP3DL.CC_Rival_-_Throne_-_ft._Neoni_NCS_Release-256k.mp3",title:"Throne NCS"}, {url:"https://cdn.discordapp.com/attachments/905994516719345664/918544988965568562/Dirty_Palm_-_Ropes_feat._Chandler_Jewels_NCS10_Release.mp3",title:"Ropes NCS"}, {url:"https://cdn.discordapp.com/attachments/905994516719345664/918546211584213023/Jonth_Tom_Wilson_Facading_MAGNUS_Jagsy_Vosai_RudeLies__Domastic_-_Heartless_NCS10_Release.mp3",title:"Heartless NCS"}, {url:"https://cdn.discordapp.com/attachments/905873563490328626/920005714481672212/Anikdote_-_Turn_It_Up_NCS_Release.mp3",title:"Turn It Up NCS"}, {url:"https://cdn.discordapp.com/attachments/905873563490328626/920006439999778856/Unknown_Brain_-_MATAFAKA_feat._Marvin_Divine_NCS_Release.mp3",title:"MATAFKA NCS"}, {url:"https://cdn.discordapp.com/attachments/905994516719345664/918910823290769458/koven_never_have_i_felt_this_ncs_release_gqEQ_nIByoK-gucZcxBO.mp3",title:"Never Have I Felt This NCS"}, {url:"https://cdn.discordapp.com/attachments/905994516719345664/925144953611505714/Rebel_Scum__Dani_King__Centrix_-_Calm_Before_The_Storm_NCS_Release.mp3",title:"Calm Before The Storm NCS"}]; var currentIndex=0; var audio=new Audio(audioFiles[currentIndex].url); audio.preload="auto"; audio.volume=0.1; var repeat=false; var shuffled=false; function playNext() {if(shuffled){currentIndex=Math.floor(Math.random()*audioFiles.length); }else if(!repeat) {currentIndex=(currentIndex+1)%audioFiles.length; }audio.src=audioFiles[currentIndex].url;audio.play();label.textContent=audioFiles[currentIndex].title;playButton.textContent='Pause';playButton.style.background='red';var trackButtons=document.querySelectorAll(".track-button");trackButtons.forEach(function(trackButton,index){if(index===currentIndex){trackButton.classList.add("active");}else{trackButton.classList.remove("active");}});}function formatDuration(duration){var minutes=Math.floor(duration/60);var seconds=Math.floor(duration%60);return minutes+':'+(seconds<10?'0':'')+seconds;}audio.addEventListener('ended',playNext);audio.addEventListener('timeupdate',function(){durationDisplay.textContent=formatDuration(audio.currentTime)+'/'+formatDuration(audio.duration);});var player=document.createElement('div');player.id="customAudioPlayer";player.style='position:fixed;top:10px;left:10px;z-index:10001;background:#282828;border:1px solid black;padding:20px;border-radius:10px;width:300px;color:#fff;box-shadow:0px 0px 20px 5px rgba(0,0,0,0.75);display:none;flex-direction:column;align-items:center;'; var profilePicture=document.createElement('img'); profilePicture.src='https://yt3.ggpht.com/jI1t37BCsCD_jMVBEqQPUghbRmz3KMny540V-r5iYAHaJeGolUYdUE8o1QCok7HMxEzZHZGS9Q=s600-c-k-c0x00ffffff-no-rj-rp-mo'; profilePicture.style='width:60px;height:60px;border-radius:50%;cursor:pointer;'; profilePicture.onclick=function(){window.location.href='https://www.youtube.com/channel/UCub84Dy0SSA0NgCqeUdjpsA';}; player.appendChild(profilePicture); var label=document.createElement('div'); label.textContent=audioFiles[currentIndex].title; label.style='margin-top:10px;text-align:center;'; player.appendChild(label); var playButton=document.createElement('button'); playButton.textContent='Play';playButton.style='margin-top:10px;width:100%;padding:10px;border:none;border-radius:5px;background-color:green;color:white;cursor:pointer;';playButton.onclick=function(){if(audio.paused){audio.play();this.textContent='Pause';this.style.background='red';}else{audio.pause();this.textContent='Play';this.style.background='green';}};player.appendChild(playButton);var nextButton=document.createElement('button');nextButton.textContent='Next';nextButton.style='margin-top:10px;width:100%;padding:10px;border:none;border-radius:5px;background-color:white;color:black;cursor:pointer;';nextButton.onclick=playNext;player.appendChild(nextButton);var shuffleRepeatContainer=document.createElement('div');shuffleRepeatContainer.style='display:flex;justify-content:space-between;width:100%;margin-top:10px;';player.appendChild(shuffleRepeatContainer);var shuffleButton=document.createElement('button');shuffleButton.textContent='Shuffle: Off';shuffleButton.style='padding:10px;border:none;border-radius:5px;background-color:black;color:white;cursor:pointer;width:48%;';shuffleButton.onclick=function(){shuffled=!shuffled;this.textContent=shuffled?'Shuffle: On':'Shuffle: Off';};shuffleRepeatContainer.appendChild(shuffleButton);var repeatButton=document.createElement('button');repeatButton.textContent='Repeat: Off';repeatButton.style='padding:10px;border:none;border-radius:5px;background-color:black;color:white;cursor:pointer;width:48%;';repeatButton.onclick=function(){repeat=!repeat;this.textContent=repeat?'Repeat: On':'Repeat: Off';};shuffleRepeatContainer.appendChild(repeatButton);var durationDisplay=document.createElement('div');durationDisplay.style='margin-top:10px;text-align:center;';player.appendChild(durationDisplay);var trackList=document.createElement('div');trackList.style='overflow:auto;max-height:150px;margin-top:20px;border:1px solid #fff;border-radius:10px;padding:5px;';audioFiles.forEach(function(track,index){var trackButton=document.createElement('button');trackButton.textContent=track.title;trackButton.classList.add("track-button");trackButton.style='padding:5px;border:none;border-radius:5px;background-color:black;color:white;cursor:pointer;width:100%;text-align:left;margin-top:5px;';trackButton.onclick=function(){currentIndex=index;audio.src=track.url;audio.play();label.textContent=track.title;playButton.textContent='Pause';playButton.style.background='red';trackButtons.forEach(function(trackButton,i){if(i===currentIndex){trackButton.classList.add("active");}else{trackButton.classList.remove("active");}});};trackList.appendChild(trackButton);});player.appendChild(trackList);var activeButtonStyle=document.createElement("style");activeButtonStyle.innerHTML='.track-button.active{background-color:green;}';document.head.appendChild(activeButtonStyle);var madeByLabel=document.createElement('div');madeByLabel.textContent='Made by Zod324myers';madeByLabel.style='margin-top:auto;text-align:center;';player.appendChild(madeByLabel);document.body.appendChild(player);document.addEventListener('keydown',function(e){if(e.key==='m'){player.style.display=player.style.display==='none'?'flex':'none';}});})();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址