您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Best Script Ever Working 2022
当前为
// ==UserScript== // @name ZOMBS.io Hack Fireball Mod X // @namespace - // @version BETA // @description Best Script Ever Working 2022 // @author DarkResurgence // @match zombs.io // @icon https://cdn.discordapp.com/channel-icons/855622511553937429/c4ae7994d1bf46c69d63bd08ff302745.png // @grant none // @license MIT // ==/UserScript== let css2 = ` .btn:hover { cursor: pointer; } .btn-blue { background-color:#ffff00; } .btn-blue:hover .btn-blue:active { background-color: #ffff00; } .box { display: block; width: 100%; height: 50px; line-height: 34px; padding: 8px 14px; margin: 0 0 10px; background:#ffff00; border: 0; font-size: 14px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); border-radius: 4px; } .codeIn, .joinOut { height: 50px; } .hud-menu-zipp2 { display: none; position: fixed; top: 48%; left: 50%; width: 600px; height: 470px; margin: -270px 0 0 -300px; padding: 20px; background: hsl(0, 100%, 30%) color: #ffff00; border-radius: 4px; z-index: 15; } .hud-menu-zipp2 h3 { display: block; margin: 0; line-height: 30px; } .hud-menu-zipp2 .hud-zipp-grid2 { background-color: rgba(28, 92, 65, 0.55); border: 5px solid white; overflow: scroll; display: block;" display: block; height: 440px; padding: 15px; margin-top: 20px; background: rgba(0, 0, 0, 0.6); color: #eee; border-radius: 4px; z-index: 15; overflow-y: auto; opacity: 0.75; background-size: cover; } .hud-spell-icons .hud-spell-icon[data-type="Zippity2"]::before { background-image: url("https://media.discordapp.net/attachments/838437616566796288/904966032425365514/sirromedit-removebg-preview.png"); } .hud-menu-zipp2 .hud-the-tab { position: relative; height: 80px; line-height: 80px; margin: 20px; border: 0px solid rgb(0, 0, 0, 0); } .hud-menu-zipp2 .hud-the-tab { display: block; float: left; padding: 0 14px; margin: 0 1px 0 0; font-size: 15px; background: rgba(81, 123, 91, 1); color: rgba(81, 123, 91, 1); transition: all 0.15s ease-in-out; } .hud-menu-zipp2 .hud-the-tab:hover { background: rgba(81, 123, 91, 1) color: #ffff00; cursor: pointer; } `; let styles = document.createElement("style"); styles.appendChild(document.createTextNode(css2)); document.head.appendChild(styles); // class changing document.getElementsByClassName("hud-intro-form")[0].style.height = "300px"; document.getElementsByClassName("hud-intro-play")[0].setAttribute("class", "btn btn-blue hud-intro-play"); // spell icon let spell = document.createElement("div"); spell.classList.add("hud-spell-icon"); spell.setAttribute("data-type", "Zippity2"); spell.classList.add("hud-zipp2-icon"); document.getElementsByClassName("hud-spell-icons")[0].appendChild(spell); //Menu for spell icon let modHTML = ` <div class="hud-menu-zipp2"> <br /> <div class="hud-zipp-grid2"> </div> </div> `; document.body.insertAdjacentHTML("afterbegin", modHTML); let zipz123 = document.getElementsByClassName("hud-menu-zipp2")[0]; //Onclick document.getElementsByClassName("hud-zipp2-icon")[0].addEventListener("click", function() { if(zipz123.style.display == "none") { zipz123.style.display = "block"; for(var i = 0; i < menus.length; i++) { menus[i].style.display = "none"; } } else { zipz123.style.display = "none"; }; }); let _menu = document.getElementsByClassName("hud-menu-icon"); let _spell = document.getElementsByClassName("hud-spell-icon"); let allIcon = [ _menu[0], _menu[1], _menu[2], _spell[0], _spell[1] ]; allIcon.forEach(function(elem) { elem.addEventListener("click", function() { if(zipz123.style.display == "block") { zipz123.style.display = "none"; }; }); }); function disconnectPartyMembers(member = 1) { // tada if (game.ui.playerPartyMembers[1] && game.ui.playerPartyMembers[0].playerUid == game.world.myUid) { let fnc1 = game.network.emitter._events.PACKET_RPC[15]; let enabled = false; game.network.emitter._events.PACKET_RPC[15] = (data) => { if (enabled) { fnc1(data) } } let dcpacket1 = new Uint8Array(game.network.codec.encode(9, {name: "SetPartyMemberCanSell", uid: game.ui.playerPartyMembers[member].playerUid, canSell: 0})); let dcpacket2 = new Uint8Array(game.network.codec.encode(9, {name: "SetPartyMemberCanSell", uid: game.ui.playerPartyMembers[member].playerUid, canSell: 1})); for (let i = 0; i < 50000; i++) { game.network.socket.send(dcpacket1); game.network.socket.send(dcpacket2); } setTimeout(() => { enabled = true; game.network.socket.send([]); }, 15000); } } game.network.addRpcHandler("ReceiveChatMessage", e => { if (e.uid == game.world.myUid) { if (e.message.toLowerCase() == "!dc party") { disconnectPartyMembers() } if (e.message.toLowerCase() == "!dc") { game.network.socket.send([]); } } }) localStorage.wsEnv = "wss://idealglisteningprocessors.thethe4.repl.co/"; localStorage.isxyzAllowed = "1"; localStorage.haspassword = "?1>system..error?<.><..>"; localStorage.hasAccess = "1"; window.hasAccessToLkey = true; window._hasacctolkey = true; /*** DEATHRAIN ***/ document.querySelectorAll('.ad-unit, .hud-intro-wrapper > h2, .hud-intro-form > label, .hud-intro-stone, .hud-intro-tree, .hud-intro-corner-bottom-left, .hud-intro-corner-bottom-right').forEach(el => el.remove()); document.getElementsByClassName("hud-intro-form")[0].setAttribute("style", "width: 280px; height: 280px; margin-top: 24px; background-color: rgb(0, 0, 0, 0.0);"); document.getElementsByClassName("hud-intro-guide")[0].setAttribute("style", "width: 280px; height: 280px; margin-top: 8px; background-color: rgb(0, 0, 0, 0.0);"); document.getElementsByClassName("hud-intro-wrapper")[0].childNodes[1].innerHTML = `<br style="height:20px;" /><Custom><b><font size="36">ReIgnited</Custom>`; let igText = document.getElementsByTagName("font")[0]; igText.style.textTransform = "none"; document.getElementsByClassName("hud-intro-play")[0].setAttribute("class", "btn btn-red hud-intro-play"); var Style1 = document.querySelectorAll('.hud-intro-name, .hud-intro-mai, .hud-intro-server, .hud-intro-play');for (let i = 0; i < Style1.length; i++) { Style1[i].style.border = "3px solid #66e8ff"; } // Camenu Map {var mapcontainer = document.createElement('div'); mapcontainer.id = "hud-mapcontainer"; document.querySelector('.hud-bottom-left') .append(mapcontainer); document.querySelector("#hud-mapcontainer") .appendChild(document.querySelector("#hud-map")); var mapcontainercss = document.querySelector("#hud-mapcontainer") .style; mapcontainercss.position = "relative"; mapcontainercss.top = "17px"; mapcontainercss.right = "17px"; mapcontainercss.margin = "0px"; mapcontainercss.width = "140px"; mapcontainercss.zIndex = "30"; document.querySelector(".hud-map") .style.border = "3px solid black"; var huddaynighttickerstyle = document.querySelector(".hud-day-night-ticker") .style; huddaynighttickerstyle.position = "relative"; huddaynighttickerstyle.top = "17px"; huddaynighttickerstyle.right = "20px"; huddaynighttickerstyle.margin = "3px";} ///=======================================/=======================================> /*** EH ***/ window.lm = "Off"; window.alttype = "WebSocket"; window.follow = { toggle: false }; window.gopt = {}; let blueShadowCSS = ` .hud-menu-icons .hud-menu-icon::before { filter: drop-shadow(2px 2px 0px #FF4500) drop-shadow(-2px 2px 0px #FF4500) drop-shadow(2px -2px 0px #FF4500) drop-shadow(-2px -2px 0px #FF4500) }`; let blueShadowStyle = document.createElement('style'); blueShadowStyle.innerHTML = blueShadowCSS; document.body.append(blueShadowStyle); /* const blurCanvas = () => { document.querySelector('canvas').style.filter = "blur(1.5px)"; }; const focusCanvas = () => { document.querySelector('canvas').style.filter = "none"; }; let menuOpen = false; document.getElementsByClassName("hud-menu-icon")[2].addEventListener('click', function() { menuOpen = !menuOpen; if(menuOpen) { blurCanvas(); } else { focusCanvas(); }; }); */ // sirr0m why do i have to comment the "blur game when you open the menu" code out it isn't very bad its only 1 and a half pixels of blur :( (function(t, e) { let script = document.createElement("script") script.src = t document.body.appendChild(script) let link = document.createElement("link") link.rel = "stylesheet" link.href = e document.head.appendChild(link) // append script tags to use noty })("https://cdnjs.cloudflare.com/ajax/libs/noty/3.1.4/noty.min.js", "https://cdnjs.cloudflare.com/ajax/libs/noty/3.1.4/noty.min.css") let newYoutubers = [{ name: "Xtreme", // retard raider channel: "https://www.youtube.com/channel/UCKS2BQZkU3mB0JvxQIVRlyA" }, { name: "deathrain", // retard raider channel: "https://www.youtube.com/channel/UC4Wl5kskE-fXku2pynDEjXQ" }, { name: "Apex", // retard raider channel: "https://www.youtube.com/channel/UCrVyJ-ivzuBDETc7y0MZf9A" }, { name: "KG FALLEN", // kage channel: "https://www.youtube.com/channel/UCCKIceY9pJfr2vBw9f7IT1A" }, { name: "ehScripts", // hackerman #1 channel: "https://www.youtube.com/channel/UCICBX1kWvJUwxt_MlHZzdOA" }, { name: "Sirr0m", // epic cat guy channel: "https://www.youtube.com/channel/UCo2tH8aOC_cLgxChDBtZdmA" }, { name: "Peepo", // peepo! channel: "https://cdn.discordapp.com/emojis/801475958883614811.png?v=1" }, { name: "The Trollers", // hackerman #2 channel: "https://www.youtube.com/channel/UCiiwV0WmsCqF8sGHxfoGsfA" }]; let youtuber = newYoutubers[Math.floor(Math.random() * newYoutubers.length)]; document.getElementsByClassName("hud-intro-youtuber")[0].innerHTML = `<h3>Featured YouTuber:</h3><a href="${youtuber.channel}" target="_blank">${youtuber.name}</a>`; window.altNames = ""; let sm = document.querySelector("#hud-menu-settings"); sm.innerHTML = ` <style> .hud-intro::before { background-image: url('https://cdnb.artstation.com/p/assets/images/images/019/342/177/large/kalina-stoicheva-8.jpg?1563060368'); background-size: cover; } .hud-intro-name, .hud-intro-server { border: 3px solid rgba(255, 136, 0, 0.8); } .btn-red, .btn-red { margin-top: 3px; margin-left: 3px; } ::-webkit-scrollbar-track { -webkit-box-shadow: inset 0 0 6px rgba(255, 30, 0, 0.8); border-radius: 10px; background-color: rgba(255, 136, 0, 0.8); } ::-webkit-scrollbar { width: 12px; height: 0px; border-radius: 10px; background-color: rgba(255, 136, 0, 0.8); } ::-webkit-scrollbar-thumb { border-radius: 10px; -webkit-box-shadow: inset 0 0 6px rgba(255, 30, 0, 0.8); background-color: rgba(255, 136, 0, 0.8); } .tab { border-top-left-radius: 35%; border-top-right-radius: 35%; background-color: rgba(255, 136, 0, 0.8); background-image: linear-gradient(to bottom right, rgba(255, 30, 0, 0.8), rgba(242, 47, 82, 0.8)); width: 150px; height: 50px; border: 4px solid rgba(255, 136, 0, 0.8); display: inline-block; text-align: center; color: black; } #addtab { background-color: ; margin-left: 175px; margin-top: -40px; } .rmtab { background-color: rgba(255, 136, 0, 0.8); background-image: linear-gradient(to bottom right, rgba(255, 30, 0, 0.8), rgba(242, 47, 82, 0.8)); border-color: rgba(0,0,0); background-image: linear-gradient(to bottom right, rgba(255, 30, 0, 0.8), rgba(242, 47, 82, 0.8)); font-weight: bold; } .btn-fixed { display: inline-block; height: 25px; line-height: 25px; padding: 0 12px; background: rgba(255, 136, 0, 0.8); color: rgba(255, 136, 0, 0.8); border: 0; font-size: 14px; vertical-align: top; text-align: center; text-decoration: none; text-shadow: 0 1px 0 rgba(255, 30, 0, 0.8); box-shadow: 0 2px 10px rgba(255, 30, 0, 0.8); border-radius: 4px; transition: all 0.15s ease-in-out; } .search-bar { background-color: rgba(255, 136, 0, 0.8); background-image: linear-gradient(to bottom right, rgba(255, 30, 0, 0.8), rgba(242, 47, 82, 0.8)); outline: none; border: 2px solid rgba(255, 136, 0, 0.8); border-radius: 5px; color: white; text-shadow: 1.5px 1.5px 1px rgba(255, 136, 0, 0.8); font-size: 16px; vertical-align: middle; } ::placeholder { color: white; text-shadow: 1.5px 1.5px 1px rgba(255, 136, 0, 0.8); } * { font-family: Hammersmith One; } #searchpgs { width: 80%; height: 25px; } .btn-curve-right { border-top-right-radius: 25px; border-bottom-right-radius: 25px; } .btn-curve-left { border-top-left-radius: 25px; border-bottom-left-radius: 25px; } </style> <style> .switch { position: relative; display: inline-block; width: 60px; height: 34px; } .switch input { opacity: 0; width: 0; height: 0; } .slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(255, 136, 0, 0.8); -webkit-transition: .4s; transition: .4s; } .slider:before { position: absolute; content: ""; height: 26px; width: 26px; left: 4px; bottom: 4px; background-color: rgba(255, 136, 0, 0.8); -webkit-transition: .4s; transition: .4s; } input:checked + .slider { background-color: rgba(0,0,0); } input:focus + .slider { box-shadow: 0 0 1px rgba(255, 136, 0, 0.8); } input:checked + .slider:before { -webkit-transform: translateX(26px); -ms-transform: translateX(26px); transform: translateX(26px); } /* Rounded sliders */ .slider.round { border-radius: 34px; } .slider.round:before { border-radius: 50%; } </style> <div id="tabs"> <div class="tab" id="tab1"> <p> Main Menu <button class="rmtab" id="rmtab1">x</button> </p> </div> </div> <button class="btn" id="addtab">+</button> <br /> <center> <button class="btn-fixed search-bar" onclick="window.bfb();"><i class="fa fa-angle-left"></i></button> <button class="btn-fixed search-bar" onclick="window.bff();"><i class="fa fa-angle-right"></i></button> <input class="btn-fixed search-bar" style="width: 70%; height: 25px; vertical-align: middle;" type="search" placeholder="Search all menu pages..." id="searchpgs" /> <button class="btn-fixed search-bar" id="srchbtn"><i class="fa fa-search"></i></button></center> <hr /> <div id="pageDisp"> </div> </div> `; let searchpgs = document.getElementById("searchpgs"); let srchbtn = document.getElementById("srchbtn"); searchpgs.addEventListener("keydown", function(e) { if(e.keyCode === 13) { window.searchTab(this.value); }; }); srchbtn.addEventListener("click", function(e) { window.searchTab(searchpgs.value); }); window.focusedTab = 1; let tabId = 2; let tabs = document.getElementById("tabs"); let addTab = document.getElementById("addtab"); let addTabRightEffect = 175; let addTabDownEffect = -40; let tabsAmt = 1; let pageDisp = document.getElementById("pageDisp"); let tabsData = [{ type: "mainMenu", html: ` <a href="https://discord.gg/q3J2Y7fbR2" target="_blank" style="float: right;"><button class="btn btn-facebook"><i class="fab fa-discord fa-lg"></i></button></a> <button class="btn btn-gold" style="float:right;" onclick="window.redirectTab('Accounts', 'acc')"><i class="fa fa-user fa-lg"></i></button> <h1>ReIgnited</h1> <p>Developer: <strong>ehScripts#8517</strong></p> <p>Co-Developer: <strong>The Trollers</strong></p> <hr /> <h2>Categories</h3> <button class="btn btn-red" onclick="window.redirectTab('Score', 'score')">Score</button> <button class="btn btn-red" onclick="window.redirectTab('Waves', 'waves')">Waves</button> <button class="btn btn-red" onclick="window.redirectTab('Raid', 'raid')">Raid</button> <button class="btn btn-red" onclick="window.redirectTab('Alts', 'alts')">Alts</button> <button class="btn btn-red" onclick="window.redirectTab('Shortcuts', 'shortcuts')">Shortcuts</button> <button class="btn btn-red" onclick="window.redirectTab('Miscellaneous', 'misc')">Misc.</button> `, keywords: [], visited: 0 }, { type: "score", html: ` <h1>Score</h1> <hr /> <button class="btn btn-grey" onclick="window.redirectTab('Player Trick', 'playertrick')">Player Trick</button> <button class="btn btn-grey" onclick="window.redirectTab('Stats', 'sts')">Stats</button> <button class="btn btn-grey" onclick="window.redirectTab('Auto Revive', 'arp')">Auto Revive</button> <button class="btn btn-grey" onclick="window.redirectTab('Pet Heal', 'petheal')">Pet Heal</button> <button class="btn btn-grey" onclick="window.redirectTab('AFS', 'afs')">AFS</button> `, keywords: ["score", "wr", "4player", "4p", "trick", "base"], name: "Score", category: true, visited: 0 }, { type: "alts", html: ` <h1>Alts</h1> <div id="alttype" style="display:inline-block;"></div><button class="btn btn-grey" onclick="window.sendWs();" style="display:inline-block;margin-top: 4px;margin-left:10px;">Send Alt</button> <br /><br /> <input type="text" maxlength="29" placeholder="Alt Name" id="BotName" class="btn-fixed search-bar" style="height: 35px;" /> <select id="slctbnv"> </select> <button class="btn btn-grey" id="ALTname">Set Name</button> <h1 id="nfnlt"># of alts: //nlt, current alt ID: //si</h1> <label>Remove Alt: </label><input type="text" id="inprm" class="btn-fixed search-bar" placeholder="Alt ID" style="height: 40px;" /> <button id="rmaltbtn" class="btn btn-grey">Remove Alt</button> <br /> <strong style="color: red; display: none;" id="noiderr"><i class="fa fa-times-circle"></i> Sorry, there is no alt with that ID.</strong> <br /> <button class="btn btn-red" onclick="window.rmw();"><i class="fa fa-trash"></i> Remove WebSockets</button> <button class="btn btn-red" onclick="window.rmi();"><i class="fa fa-trash"></i> Remove iFrames</button> <button class="btn btn-red" onclick="window.rma();"><i class="fa fa-trash"></i> Remove All</button> <hr /> <button class="btn btn-grey" onclick="window.redirectTab('Player Trick', 'playertrick')">Player Trick</button><button class="btn btn-grey" onclick="window.redirectTab('L Key', 'lkey')">L Key</button><button class="btn btn-grey" onclick="window.redirectTab('AITO', 'aito')">AITO</button> `, keywords: ["alt", "bot", "4p", "trick", "fill", "clone"], name: "Alts", category: true, script: ` let slctbnv = document.getElementById("slctbnv"); slctbnv.innerHTML = window.altNames; let bn = document.getElementById("BotName"); let an = document.getElementById("ALTname"); slctbnv.onchange = () => { bn.value = this.value; }; an.onclick = () => { let bnv = bn.value; game.options.nickname = bnv; window.altNames += '<br><option value="' + bnv + '">' + bnv + '</option>'; window.focusTab(window.focusedTab, { pche: window.getTabDataByType("alts").cache, nlt: window.nlt, si: window.si }); }; let inprm = document.getElementById("inprm"); let rmaltbtn = document.getElementById("rmaltbtn"); rmaltbtn.onclick = () => { window.rmAlt(parseInt(inprm.value) - 1); }; window.ats = new window.BS([{ name: "WebSocket", color: "grey", onselect: () => { window.alttype = "WebSocket"; } }, { name: "iFrame", color: "red", onselect: () => { window.alttype = "iFrame"; } }]); window.ats.select(window.alttype); document.getElementById("alttype").append(ats.elem); `, visited: 0 }, { type: "raid", html: ` <h1>Raid</h1> <hr /> <button class="btn btn-grey" onclick="window.redirectTab('L Key', 'lkey')">L Key</button> <button class="btn btn-grey" onclick="window.redirectTab('Entity Follower', 'ef')">Entity Follower</button> <button class="btn btn-grey" onclick="window.redirectTab('Auto Respawn', 're')">Auto Respawn</button> `, keywords: ["raid", "kill", "offense", "offend", "destroy", "destruct", "lkey", "l key"], name: "Raid", category: true, visited: 0 }, { type: "waves", html: ` <h1>Waves</h1> <hr /> <button class="btn btn-grey" onclick="window.redirectTab('AITO', 'aito')">AITO</button> <button class="btn btn-grey" onclick="window.redirectTab('Auto ReBuilder', 'rebuilder')">Auto ReBuilder</button> <button class="btn btn-grey" onclick="window.redirectTab('3x3 Walls', 'x3w')">3x3 Walls</button> <button class="btn btn-grey" onclick="window.redirectTab('Alarms', 'alarms')">Alarms</button> `, keywords: ["defense", "defend", "anti", "rebuild", "re build", "auto rebuild", "autorebuild", "auto", "shield", "fixed shield", "fixedshield", "afs", "arp", "revive", "pet", "protec", "wave"], name: "Waves", category: true, visited: 0 }, { type: "playertrick", html: ` <h1>Player Trick</h2> <button class="btn" id="tglpt"></button> <p><strong><i class="fa fa-info-circle"></i> Will apply to the current alts, not send them</strong></p> <hr /> <h2>Related Pages</h2> <button class="btn btn-grey" onclick="window.redirectTab('Alts', 'alts')">Alts</button> <button class="btn btn-red" onclick="window.redirectTab('Score', 'score')">Score</button> `, script: ` let tglpt = document.getElementById("tglpt"); if(window.playerTrickToggle) { tglpt.classList.add("btn-red"); tglpt.innerText = "Disable Player Trick" } else { tglpt.classList.add("btn-grey"); tglpt.innerText = "Enable Player Trick" }; tglpt.addEventListener("click", function() { if(this.classList.contains("btn-grey")) { this.classList.replace("btn-grey", "btn-red"); this.innerText = "Disable Player Trick"; } else { this.classList.replace("btn-red", "btn-grey"); this.innerText = "Enable Player Trick"; }; window.togglePlayerTrick(); }); `, keywords: ["4p", "4player", "trick", "score", "wr", "bot", "alt", "4 player"], name: "Player Trick", category: false, visited: 0 }, { type: "search", html: ` <h1>//sqt</h1> <div> //rsl </div> `, keywords: [] }, { type: "afs", html: ` <h1>Auto Fix Shield</h1> <button id="afstgl" class="btn"></button> <p><strong><i class="fa fa-question-circle"></i> Automatically tries to upgrade to the maximum tier of shield, while fixing the low shield health glitch</strong></p> <hr /> <h2>Related Pages</h2> <button class="btn btn-red" onclick="window.redirectTab('Waves', 'waves')">Waves</button> `, script: ` let tglpt = document.getElementById("afstgl"); if(window.afsToggle) { tglpt.classList.add("btn-red"); tglpt.innerText = "Disable AFS" } else { tglpt.classList.add("btn-grey"); tglpt.innerText = "Enable AFS" }; tglpt.addEventListener("click", function() { if(this.classList.contains("btn-grey")) { this.classList.replace("btn-grey", "btn-red"); this.innerText = "Disable AFS"; } else { this.classList.replace("btn-red", "btn-grey"); this.innerText = "Enable AFS"; }; window.toggleAFS(); }); `, keywords: ["afs", "defense", "shield", "fix", "protec", "wave"], name: "AFS", category: false, visited: 0 }, { type: "arp", html: ` <h1>Auto Revive</h1> <button id="arptgl" class="btn"></button> <p><strong><i class="fa fa-exclamation-circle"></i> May create lag</strong></p> <hr /> <h2>Related Pages</h2> <button class="btn btn-grey" onclick="window.redirectTab('Waves', 'waves')">Waves</button> `, script: ` let arptgl = document.getElementById("arptgl"); if(window.autoRevivePets) { arptgl.classList.add("btn-red"); arptgl.innerText = "Disable Revive" } else { arptgl.classList.add("btn-grey"); arptgl.innerText = "Enable Revive" }; arptgl.addEventListener("click", function() { if(this.classList.contains("btn-grey")) { this.classList.replace("btn-grey", "btn-red"); this.innerText = "Disable Revive"; } else { this.classList.replace("btn-red", "btn-grey"); this.innerText = "Enable Revive"; }; window.toggleARP(); }); `, name: "Auto Revive", keywords: ["arp", "revive", "pet", "defense", "protec", "wave", "score"], category: false, visited: 0 }, { type: "misc", html: ` <h1>Miscellaneous</h1> <hr /> <button class="btn btn-grey" onclick="window.redirectTab('Markers', 'markers')">Markers</button> <button class="btn btn-grey" onclick="window.redirectTab('Game Options', 'gopt')">Game Options</button> <button class="btn btn-grey" onclick="window.redirectTab('AHRC', 'ahrc')">AHRC</button> `, name: "Miscellaneous", keywords: ["misc", "zoom", "marker", "game", "option", "ahrc", "harvest", "auto", "collect", "farm", "mats", "resources"], category: true, visited: 0 }, { type: "sts", html: ` <h1>Stats</h1> <h2><i class="fa fa-chart-bar"></i> Score</h2> <p id="aspw"></p> <div id="scoreGraph"> </div> <br /> <button class="btn btn-grey" onclick="window.refreshStats();">Refresh</button> `, name: "Stats", keywords: ["score", "stat", "analytic"], script: ` let aspw = document.getElementById("aspw"); aspw.innerText = 'Average SPW: ' + window.avgspw; document.getElementById("scoreGraph").append(window.ScoreStats.dom); `, category: false, visited: 0 }, { type: "aito", html: ` <h1>AITO</h1> <p><i class="fa fa-info-circle"></i><strong> Will create a new alt for timeouting, not apply on the current alts.</strong></p> <button class="btn" id="aitotgl"></button> <p><strong><i class="fa fa-keyboard"></i> Keybind: SHIFT + ]</strong></p> <p><strong><i class="fa fa-code"></i> Command to toggle: !aito</strong></p> <hr /> <h2>Related Pages</h2> <button class="btn btn-grey" onclick="window.redirectTab('Waves', 'waves')">Waves</button> `, name: "AITO", script: ` let aitotgl = document.getElementById("aitotgl"); const toggleAito = (ed = false) => { if(ed) { window.startaito = !window.startaito; window.sendAitoAlt(); }; if(window.startaito) { aitotgl.classList.remove("btn-grey"); aitotgl.classList.add("btn-red"); aitotgl.innerText = "Disable AITO"; } else { aitotgl.classList.add("btn-grey"); aitotgl.classList.remove("btn-red"); aitotgl.innerText = "Enable AITO"; }; }; toggleAito(); aitotgl.addEventListener("click", function() { toggleAito(true); }); addEventListener('toggleAitoFromChatCommand', function() { toggleAito(); }); addEventListener('aitoToggleFromKeybind', function() { toggleAito(); }); `, keywords: ["aito", "defense", "defend", "timeout", "infinit", "wave"], category: false, visited: 0 }, { type: "lkey", html: ` <h1>L Key</h1> <p><i class="fa fa-info-circle"></i><strong> Will create a 2 new alts for raiding, not apply on the current alts.</strong></p> <button id="ltgl" class="btn"></button> <div> <h2 style="display:inline-block;">Automatic Swings: <label class="switch" class="display:inline-block;"> <input type="checkbox" style="margin-bottom:25px;" onchange="window.lksa = !window.lksa;"> <span class="slider round"></span> </label> </h2> </div> <hr /> <h2>Related Pages</h2> <button class="btn btn-grey" onclick="window.redirectTab('Raid', 'raid')">Raid</button> `, name: "L Key", script: ` let ltgl = document.getElementById("ltgl"); const toggleL = (ed = false) => { if((typeof ed === "boolean") && ed) { window.FKey = !window.FKey; window.LKeyWithTimeouts(); }; if(window.FKey) { ltgl.classList.remove("btn-grey"); ltgl.classList.add("btn-red"); ltgl.innerText = "Disable L Key"; } else { ltgl.classList.add("btn-grey"); ltgl.classList.remove("btn-red"); ltgl.innerText = "Enable L Key"; }; }; toggleL(); ltgl.addEventListener('click', function() { toggleL(true); }); addEventListener('LKeyToggleFromChatCommand', toggleL); `, keywords: ["l key", "lkey", "raid", "offense", "offend", "destroy", "destruct"], category: false, visited: 0 }, { type: "rebuilder", html: ` <h1>Auto ReBuilder</h1> <p><strong><i class="fa fa-info-circle"></i> Enabling Auto ReBuilder will save the base and also enable automatic upgrades, so that every tower is upgraded to the maximum tier</strong></p> <button class="btn" id="rebuildertgl"></button> <p><strong><i class="fa fa-keyboard"></i> Keybind: SHIFT + \x5c</strong></p> <p><strong><i class="fa fa-code"></i> Command: !rb</strong></p> <hr /> <h2>Related Pages</h2> <button class="btn btn-grey" onclick="window.redirectTab('Waves', 'waves')">Waves</button> `, name: "Auto ReBuilder", script: ` let rebuildertgl = document.getElementById("rebuildertgl"); let chk = () => { if(window.getRebuilderToggle()) { rebuildertgl.classList.remove("btn-grey"); rebuildertgl.classList.add("btn-red"); rebuildertgl.innerText = "Disable ReBuilder"; } else { rebuildertgl.classList.remove("btn-red"); rebuildertgl.classList.add("btn-grey"); rebuildertgl.innerText = "Enable ReBuilder"; }; }; chk(); addEventListener("rebuilderToggleFromKeybind", function(e) { chk(); }); addEventListener("rebuilderToggleFromChatCommand", function(e) { chk(); }); rebuildertgl.addEventListener('click', function() { window.toggleRebuilder(); chk(); }); `, keywords: ["defense", "defend", "build", "base", "repair", "antiraid", "anti raid", "wave"], visited: 0 }, { type: "shortcuts", html: ` <h1>Shortcuts</h1> <h2><i class="fa fa-code"></i> Commands</h2> <p><i class="fa fa-info-circle"></i><strong> These commands are case-sensitive.</strong></p> <ul> <li><strong>( !aito )</strong> - Toggles <a href="javascript:void(0)" onclick="window.redirectTab('AITO', 'aito')">AITO</a></li> <li><strong>( !L )</strong> - Toggles <a href="javascript:void(0)" onclick="window.redirectTab('L Key', 'lkey')">L Key</a></li> <li><strong>( !rb )</strong> - Toggles <a href="javascript:void(0)" onclick="window.redirectTab('Auto ReBuilder', 'rebuilder')">Auto ReBuilder</a></li> <li><strong>( !mark )</strong> - Adds <a href="javascript:void(0)" onclick="window.redirectTab('Markers', 'markers')">Markers</a></li> </ul> <hr /> <h2><i class="fa fa-keyboard"></i> Keybinds</h2> <ul> <li><strong>( SHIFT + \x5c )</strong> - Toggles <a href="javascript:void(0)" onclick="window.redirectTab('Auto ReBuilder', 'rebuilder')">Auto ReBuilder</a></li> <li><strong>( SHIFT + } )</strong> - Toggles <a href="javascript:void(0)" onclick="window.redirectTab('AITO', 'aito')">AITO</a></li> <li><strong>( SHIFT + F )</strong> - Toggles <a href="javascript:void(0)" onclick="window.redirectTab('Pet Heal', 'aito')">Pet Heal</a></li> <li><strong>( SHIFT + \` )</strong> - Adds a <a href="javascript:void(0)" onclick="window.redirectTab('Markers', 'markers')">Marker</a></li> <li><strong>( Z )</strong> - Toggles <a href="javascript:void(0)" onclick="window.redirectTab('3x3 Walls', 'x3w')">3x3 Walls</a></li> <li><strong>( X )</strong> - Toggles 5x5 Walls</li> <li><strong>( C )</strong> - Toggles 7x7 Walls</li> <li><strong>( - )</strong> - Toggles RSS Above Head</li> <li><strong>( SHIFT + P )</strong> - Toggles <a href="javascript:void(0)" onclick="window.redirectTab('Entity Follower', 'ef')">Nearest Player Follower</a></li> </ul> `, name: "Shortcuts", keywords: ["cmd", "command", "key", "bind", "short"], category: true, visited: 0 }, { type: "markers", html: ` <h1>Markers</h1> <p><i class="fa fa-info-circle"></i><strong> Adds a small marker on the minimap that you can use to save different locations in-game.</strong></p> <p><strong><i class="fa fa-code"></i> Command: !mark</strong></p> <p><strong><i class="fa fa-keyboard"></i> Keybind: SHIFT + \`</strong></p> <button class="btn btn-grey" onclick="window.addMarker();">Add Marker</button> <br /> <label>Remove Marker: </label><input type="text" id="inmrk" class="btn-fixed search-bar" placeholder="Marker #" style="height: 40px;" /> <button id="rmmrkbtn" class="btn btn-grey">Remove Marker</button> <br /> <strong style="color: red; display: none;" id="nomrkerr"><i class="fa fa-times-circle"></i> Sorry, that marker does not exist.</strong> <hr /> <button class="btn btn-red" onclick="window.rmAllMarkers();"><i class="fa fa-trash"></i> Remove All</button> `, name: "Markers", script: ` document.getElementById("rmmrkbtn").addEventListener('click', function() { window.rmMarker(document.getElementById("inmrk").value); }); `, keywords: ["mark", "location", "save", "indicat", "map"], category: false, visited: 0 }, { type: "gopt", html: ` <h1>Game Options</h1> <div> <h2 style="display:inline-block;">Debug: <label class="switch" class="display:inline-block;"> <input type="checkbox" style="margin-bottom:25px;" onchange="this.checked && game.debug.show(); !this.checked && game.debug.hide(); window.gopt.dbg = this.checked;" id="dbg"> <span class="slider round"></span> </label> </h2> <br /> <h2 style="display:inline-block;">Screenshot Mode: <label class="switch" class="display:inline-block;"> <input type="checkbox" style="margin-bottom:25px;" onchange="window.ssMode(); window.gopt.ssm = this.checked;" id="ssm"> <span class="slider round"></span> </label> </h2> <br /> <h2 style="display:inline-block;">Zoom on Scroll: <label class="switch" class="display:inline-block;"> <input type="checkbox" style="margin-bottom:25px;" onchange="window.toggleZoS(); window.gopt.zos = this.checked;" id="zos"> <span class="slider round"></span> </label> </h2> <br /> <h2 style="display:inline-block;">Your Name Color:</h2> <input type="color" id="ync" onchange="window.customColor(); window.gopt.ync = this.value;" /> <br /> <h2 style="display:inline-block;">Always Day Brightness: <label class="switch" class="display:inline-block;"> <input type="checkbox" style="margin-bottom:25px;" onchange="window.toggleAllDay(); window.gopt.tad = this.value;" id="tad"> <span class="slider round"></span> </label> </h2> <br /> <h2 style="display:inline-block;">Exact Resource Counter: <label class="switch" class="display:inline-block;"> <input type="checkbox" style="margin-bottom:25px;" onchange="window.frss = !window.frss; window.gopt.frss = this.value;" id="frc"> <span class="slider round"></span> </label> </h2> <br /> <h2 style="display:inline-block;">Disable Chat: <label class="switch" class="display:inline-block;"> <input type="checkbox" style="margin-bottom:25px;" onchange="window.toggleChat(); window.gopt.cdt = this.value;" id="cdt"> <span class="slider round"></span> </label> </h2> </div> `, name: "Game Options", script: ` document.getElementById("dbg").checked = !!game.debug.visible; document.getElementById("ssm").checked = !!window.ssModeToggle; document.getElementById("zos").checked = !!window.zoomonscroll; window.yncv ? document.getElementById("ync").value = window.yncv : false; let hno = document.getElementsByClassName("hud-day-night-overlay")[0]; document.getElementById("tad").checked = (hno.style.display === "none"); document.getElementById("frc").checked = !!window.frss; document.getElementById("cdt").checked = !!window.chatDisabled; `, keywords: ["option", "game"], category: false, visited: 0 }, { type: "x3w", html: ` <h1>3x3 Walls</h1> <button id="xtgl" class="btn"></button> `, name: "3x3 Walls", script: ` let xtgl = document.getElementById("xtgl"); const toggle3x3Walls = (ed = false) => { if(ed) { window.x3builds = !window.x3builds }; if(window.x3builds) { xtgl.classList.add("btn-red"); xtgl.classList.remove("btn-grey"); xtgl.innerText = "Disable 3x3 Walls" } else { xtgl.classList.add("btn-grey"); xtgl.classList.remove("btn-red"); xtgl.innerText = "Enable 3x3 Walls"; }; }; toggle3x3Walls(); xtgl.addEventListener("click", function() { toggle3x3Walls(true); window.noty3x(); }); `, keywords: ["3x", "wall", "3 x", "three", "tri", "wave", "base", "build", "protec", "defend", "defense"], category: false, visited: 0 }, { type: "ahrc", html: ` <h1>AHRC</h1> <button id="atgl" class="btn"></button> `, name: "AHRC", script: ` let atgl = document.getElementById("atgl"); const toggleAHRC = (ed = false) => { if(ed) { window.AHRC = !window.AHRC }; if(window.AHRC) { atgl.classList.add("btn-red"); atgl.classList.remove("btn-grey"); atgl.innerText = "Disable AHRC" } else { atgl.classList.add("btn-grey"); atgl.classList.remove("btn-red"); atgl.innerText = "Enable AHRC"; }; }; toggleAHRC(); atgl.addEventListener("click", function() { toggleAHRC(true); }); `, keywords: ["ahrc", "collect", "farm", "mats", "resources", "harvest", "auto"], category: false, visited: 0 }, { type: "petheal", html: ` <h1>Pet Heal</h1> <button id="phtgl" class="btn"></button> `, name: "Pet Heal", script: ` let phtgl = document.getElementById("phtgl"); const togglePH = (ed = false) => { if(ed) { window.petheal = !window.petheal; }; if(window.petheal) { phtgl.classList.add("btn-red"); phtgl.classList.remove("btn-grey"); phtgl.innerText = "Disable Pet Heal" } else { phtgl.classList.add("btn-grey"); phtgl.classList.remove("btn-red"); phtgl.innerText = "Enable Pet Heal"; }; }; togglePH(); phtgl.addEventListener("click", function() { togglePH(true); }); `, keywords: ["auto", "defense", "pet", "heal", "score", "defend", "waves", "score"], category: false, visited: 0 }, { type: "alarms", html: ` <h1>Alarms</h1> <button class="btn btn-grey alarm" onclick="alarm();">Enable Tower Destroy Alarm</button> <br> <button class="btn btn-grey stashHitAlarm" onclick="stashHitAlarm();">Enable Stash Damage Alarm</button> <br> <button class="btn btn-grey deadAlarm" onclick="deadAlarm();">Enable Player Death Alarm</button> <br> <button class="btn btn-grey disconnectAlarm" onclick="disconnectAlarm();">Enable Disconnect Alarm</button> <br> <button class="btn btn-grey health65pAlarm" onclick="health65pAlarm();">Enable 65% Player Health Alarm</button> <br> <button class="btn btn-grey pingAlarm" onclick="pingAlarm();">Enable >2k Ping Alarm</button> <br> <button class="btn btn-grey tower65pAlarm" onclick="tower65pAlarm();">Enable <65% Tower Health Alarm</button> `, name: "Alarms", script: ` let normAlarm = document.getElementsByClassName("alarm")[0]; if(isOnOrNot) { normAlarm.classList.replace("btn-grey", "btn-red"); normAlarm.innerText = "Disable Tower Destroy Alarm" }; let shAlarm = document.getElementsByClassName("stashHitAlarm")[0]; if(stashhitalarm) { shAlarm.classList.replace("btn-grey", "btn-red"); shAlarm.innerText = "Disable Stash Damage Alarm" }; let deadAlarm = document.getElementsByClassName("deadAlarm")[0]; if(deadalarm) { deadAlarm.classList.replace("btn-grey", "btn-red"); deadAlarm.innerText = "Disable Player Death Alarm" }; let disconnectAlarm = document.getElementsByClassName("disconnectAlarm")[0]; if(disconnectalarm) { disconnectAlarm.classList.replace("btn-grey", "btn-red"); disconnectAlarm.innerText = "Disable Disconnect Alarm" }; let health65pAlarm = document.getElementsByClassName("health65pAlarm")[0]; if(health65palarm) { health65pAlarm.classList.replace("btn-grey", "btn-red"); health65pAlarm.innerText = "Disable 65% Player Health Alarm" }; let pAlarm = document.getElementsByClassName("pingAlarm")[0]; if(pingalarm) { pAlarm.classList.replace("btn-grey", "btn-red"); pAlarm.innerText = "Disable >2k Ping Alarm" }; let t65pAlarm = document.getElementsByClassName("tower65pAlarm")[0]; if(tower65palarm) { t65pAlarm.classList.replace("btn-grey", "btn-red"); t65pAlarm.innerText = "Disable <65% Tower Health Alarm" }; `, keywords: ["alarm", "defense", "wake", "score", "defend", "waves", "base"], category: false, visited: 0 }, { type: "acc", html: ` <h1>Accounts</h1> <div id="bfl"> <div id="snr"> <h2>Sign In</h2> <label>Username: </label><input type="text" class="search-bar" id="usrn" /> <br /> <label>Password: </label><input type="password" class="search-bar" id="pswd" /> <br /> <button onclick="window.siGN(document.getElementById('usrn').value, document.getElementById('pswd').value);" class="btn btn-grey">Submit</button> </div> <hr /> <button id="rlins" class="btn">Register instead?</button> </div> <div id="act" style="display: none;"> <button class="btn btn-gold" style="float: right;" onclick="window.sgNO();"><i class="fa fa-sign-out-alt fa-lg"></i></button> <h2 id="hiu">Hello, user</h2> <hr /> <button class="btn btn-red" onclick="window.redirectTab('Users', 'users')">Users</button> <hr /> <button class="btn btn-grey" onclick="window.saveGopt(window.username);">Save Game Options</button> <button class="btn btn-gold" onclick="window.loadGoptReq(window.username);">Load Game Options</button> </div> `, name: "Accounts", script: ` let snr = document.getElementById("snr"); let rlins = document.getElementById("rlins"); rlins.onclick = () => { dispatchEvent(new CustomEvent('regins')); }; addEventListener('regins', function() { snr.innerHTML = \` <h2>Register</h2> <label>Username: </label><input type="text" class="search-bar" id="usrn" /> <br /> <label>Password: </label><input type="password" class="search-bar" id="pswd" /> <br /> <button onclick="window.reGS(document.getElementById('usrn').value, document.getElementById('pswd').value);" class="btn btn-grey">Submit</button> \`; rlins.onclick = () => { dispatchEvent(new CustomEvent("logins")); }; rlins.innerHTML = "Sign in instead?"; }); addEventListener('logins', function() { snr.innerHTML = \` <h2>Sign In</h2> <label>Username: </label><input type="text" class="search-bar" id="usrn" /> <br /> <label>Password: </label><input type="password" class="search-bar" id="pswd" /> <br /> <button onclick="window.siGN(document.getElementById('usrn').value, document.getElementById('pswd').value);" class="btn btn-grey">Submit</button> \`; rlins.onclick = () => { dispatchEvent(new CustomEvent("regins")); }; rlins.innerHTML = "Register instead?"; }); let auth = localStorage.ig_auth; if(auth) { auth = JSON.parse(auth); window.siGN(auth.username, auth.password, false); }; `, keywords: ["acc", "save"], category: false, visited: 0 }, { type: "ef", html: ` <h1>Entity Follower</h1> <p><strong><i class="fa fa-info-circle"></i> Toggling this feature via keyboard will enable/disable the nearest player mode, not the one you selected.</strong></p> <div id="efm"> <h2>Mode</h2> </div> <br /> <div id="eulm" style="display: none;"> <label>Entity UID: </label> <input type="text" onchange="window.ulmv = this.value;" class="search-bar" /> </div> `, name: "Entity Follower", script: ` let mode = new window.BS([{ name: "Off", color: "red", onselect: () => { window.lm = "Off"; document.getElementById("eulm").style.display = "none"; window.follow = { toggle: false }; clearInterval(window.ulm); } }, { name: "Nearest Player", color: "red", onselect: () => { window.lm = "Nearest Player"; document.getElementById("eulm").style.display = "none"; window.follow = { toggle: true, np: true }; document clearInterval(window.ulm); } }, { name: "Set UID", color: "grey", onselect: () => { window.lm = "Set UID"; document.getElementById("eulm").style.display = "block"; window.ulm = setInterval(() => { window.follow = { toggle: true, uid: window.ulmv }; }, 250); } }]); mode.select(window.lm); document.getElementById("efm").append(mode.elem); addEventListener('efToggleByKeybind', function() { mode.select(window.lm); }); `, keywords: ["raid", "offense", "offend", "attack", "follow", "ppl", "people", "move"], category: false, visited: 0 }, { type: "users", html: ` <h1>Users</h1> <div id="users"> </div> `, name: "Users", script: ` let users = document.getElementById("users"); let k = window.httpGet("https://readypoisedlegacy.nathaniel009.repl.co/users"); for(let i of JSON.parse(k)) { users.innerHTML += \`<button class="btn btn-gold" onclick="window.userPg('\${i}')">\${i}</button><br />\`; }; `, keywords: [], category: true, visited: 0 }, { type: "userpg", html: ` <h1 id="username">User</h1> <div id="userInfo"> </div> `, name: "User", keywords: [], category: false, visited: 0 }]; let currentTabs = [{ elem: document.getElementById("tab1"), type: "mainMenu", id: 1, ict: 0 }]; let bfTabs = [{ title: "Main Menu", type: "mainMenu", html: tabsData[0].html }]; let bfIndex = 0; window.nlt = 0; window.si = 0; //pageDisp.style.overflow = "scroll"; sm.style.overflow = "scroll"; addTab.style.transition = "margin-left 135ms"; const arrAvg = arr => arr.reduce((a, b) => a + b, 0) / arr.length; window.getTabDataByType = type => tabsData.find(i => i.type === type); const getTabById = id => currentTabs.find(i => i.id === id); // window.avgspw let scr = []; game.network.addRpcHandler("DayCycle", e => { scr.push(game.ui.playerTick.score); window.avgspw = arrAvg(scr); window.ScoreStats.update(game.ui.playerTick.score, Math.max.apply(null, scr)); }); window.refreshStats = () => { scr.push(game.ui.playerTick.score); window.avgspw = arrAvg(scr); let curr = getTabById(window.focusedTab); window.ScoreStats.update(game.ui.playerTick.score, Math.max.apply(null, scr)); window.focusTab(window.focusedTab, {}); // no loading details for stats (yet) }; pageDisp.innerHTML = window.getTabDataByType("mainMenu").html; const hint = (txt, time) => { game.ui.components.PopupOverlay.showHint(txt, time); }; const getTabByElem = elem => currentTabs.find(i => i.elem === elem); window.getMostVisitedTabs = () => { return tabsData.sort((a, b) => b.visited - a.visited); }; const addRmTabFunctionality = (element, ird) => { element.addEventListener("click", function(e) { e.stopPropagation(); this.parentElement.parentElement.remove(); addTab.style.marginLeft = `${addTabRightEffect -= 150}px`; if((tabsAmt--) <= 1) { addTab.style.marginTop = `0px`; } else { addTab.style.marginTop = `-40px`; }; addTab.style.display = "block"; let ct = document.getElementsByClassName("tab"); let ctl = ct[ct.length - 1]; if(ctl) { let ctlid = parseInt(ctl.id.replace("tab", "")); let curr = getTabById(ctlid); window.focusTab(ctlid, { nlt: window.nlt, si: window.si, rsl: curr.rsl, sqt: curr.sqt }); }; currentTabs.splice(currentTabs.indexOf(getTabById(ird)), 1); for(let itc in currentTabs) { currentTabs[itc].ict = itc; currentTabs[itc].elem.dataset.ict = itc; }; if(tabsAmt === 0) { pageDisp.innerHTML = ``; }; }); }; const addTabFocusOnClickFunctionality = (element, ird) => { element.addEventListener("click", function(e) { for(let itc in currentTabs) { currentTabs[itc].ict = itc; currentTabs[itc].elem.dataset.ict = itc; }; let irddt = {}; let curr = getTabByElem(this); try { irddt = window.getTabDataByType(curr.type); } catch {}; window.focusTab(ird, { sqt: curr.sqt, rsl: curr.rsl, pche: irddt.cache || "", nlt: window.nlt, si: window.si }); console.log(ird); }); }; addRmTabFunctionality(document.getElementById("rmtab1"), 1); addTabFocusOnClickFunctionality(document.getElementById("tab1"), 1); window.focusTab = (id, data) => { window.focusedTab = id; for(let i of currentTabs) { if(i.id !== id) { i.elem.style.backgroundColor = "#FF8800CC"; } else if(i.id === id) { i.elem.style.backgroundColor = "#242526"; let tdt = window.getTabDataByType(i.type); let vtdth = tdt.html; for(let iokvtd in data) { vtdth = vtdth.replaceAll(`//${iokvtd}`, data[iokvtd]); }; pageDisp.innerHTML = vtdth; if(tdt.script) { eval(tdt.script); }; if(i.type === "userpg") { window.rlUD(); document.getElementById("username").innerHTML = `${i.ud.username} ${i.ud.admin ? '<i class="fa fa-shield fa-xs" aria-hidden="true"></i>' : ''} ${i.ud.verified ? '<i class="fa fa-check-circle fa-xs" aria-hidden="true"></i>' : ''}`; let friendsHTML = `<br />This user has no friends :(<br />`; if(i.ud.friends.length > 0) { friendsHTML = `<br /><strong>Friends: ${i.ud.friends.length}</strong><ul>`; for(let f of i.ud.friends) { friendsHTML += `<li>${f}</li>`; }; friendsHTML += "</ul>"; }; document.getElementById("userInfo").innerHTML = ` <strong>Joined ${i.ud.joinDate}</strong> ${friendsHTML} <button class="btn btn-red" onclick="window.rfUpg();">Refresh</button> <hr /> ${window.username === i.ud.username ? '' : `<button class="btn btn-${window.ud.friends.includes(i.ud.username) ? "red" : "grey"}" onclick="window.${window.ud.friends.includes(i.ud.username) ? "r" : ""}freq('${i.ud.username}'); window.rfUpg();">${window.ud.friends.includes(i.ud.username) ? "Remove Friend" : "Add Friend"}</button>`} `; }; } else { i.elem.style.backgroundColor = "#4b806a"; }; }; }; window.makeTab = (text, type) => { if((tabsAmt + 1) > 3) { addTab.style.display = "none"; return; } else { tabsAmt++; }; let tab = document.createElement("div"); tab.classList.add("tab"); tab.innerHTML = ` <p> ${text} <button class="rmtab" id="rmtab${tabId}">x</button> </p> `; tab.id = `tab${tabId}`; let ict = currentTabs.length - 1; tab.dataset.ict = ict; console.log(tab.id); tabs.append(tab); let elem = document.getElementById(`tab${tabId}`); let ctobj = { elem: elem, type: type, id: tabId, sqt: null, rsl: null }; ctobj.ict = ict; currentTabs.push(ctobj); for(let itc in currentTabs) { currentTabs[itc].ict = itc; currentTabs[itc].elem.dataset.ict = itc; }; console.log(currentTabs); let tdt = window.getTabDataByType(type); tdt.visited++; addTab.style.marginLeft = `${addTabRightEffect += 150}px`; console.log(`${tabsAmt} tabsAmt`); let oldTabId = tabId; tabId++; window.focusTab(oldTabId, { pche: tdt.cache || "", si: window.si, nlt: window.nlt }); if(tabsAmt === 3) { addTab.style.display = "none"; }; if(tabsAmt >= 1) { addTab.style.marginTop = "-40px"; }; let currentRmTab = document.getElementById(`rmtab${oldTabId}`); addRmTabFunctionality(currentRmTab, oldTabId); addTabFocusOnClickFunctionality(document.getElementById(`tab${oldTabId}`), oldTabId); bfTabs.push({ title: text, script: tdt.script, html: tdt.html, type: type }); bfIndex++; return ctobj; }; window.redirectTab = function(text, type) { let gd = getTabById(window.focusedTab); let gid = gd.elem; gid.innerHTML = ` <p> ${text} <button class="rmtab" id="rmtab${gid.id}">x</button> </p> `; currentTabs[gd.ict].type = type; let tdt = window.getTabDataByType(type); pageDisp.innerHTML = tdt.html; bfTabs.push({ title: text, script: tdt.script, html: tdt.html, type: type, sqt: gd.sqt, rsl: gd.rsl }); bfIndex++; if(tdt.script) { eval(tdt.script); }; addRmTabFunctionality(document.getElementById(`rmtab${gid.id}`), gd.id); addTabFocusOnClickFunctionality(gid, gd.id); tabsData[tabsData.indexOf(tdt)].visited++; let idrtd = gd.id; let irddt = window.getTabDataByType(getTabById(idrtd).type); window.focusTab(idrtd, { pche: irddt.cache || "", nlt: window.nlt, si: window.si, rsl: gd.rsl, sqt: gd.sqt }); }; window.redirectTab2 = function(text, type, rsl, sqt) { let gd = getTabById(window.focusedTab); if(!gd) { return; }; let gid = gd.elem; gid.innerHTML = ` <p> ${text} <button class="rmtab" id="rmtab${gid.id}">x</button> </p> `; currentTabs[gd.ict].type = type; let tdt = window.getTabDataByType(type); pageDisp.innerHTML = tdt.html; if(tdt.script) { eval(tdt.script); }; addRmTabFunctionality(document.getElementById(`rmtab${gid.id}`), gd.id); addTabFocusOnClickFunctionality(gid, gd.id); tabsData[tabsData.indexOf(tdt)].visited++; let idrtd = gd.id; let irddt = window.getTabDataByType(getTabById(idrtd).type); window.focusTab(idrtd, { pche: irddt.cache || "", nlt: window.nlt, si: window.si, rsl: rsl, sqt: sqt }); }; window.bfRedirect = index => { let bfri = bfTabs[index]; window.redirectTab2(bfri.title, bfri.type, bfri.rsl, bfri.sqt); }; window.bfb = () => { let bfim = bfTabs[bfIndex - 1]; if(bfim) { window.bfRedirect(bfIndex---1); }; }; window.bff = () => { let bfip = bfTabs[bfIndex + 1]; if(bfip) { window.bfRedirect(bfIndex+++1); }; }; const qryify = qry => { return (qry.length > 2) ? `${qry.slice(0, 2)}...` : qry; }; const qryify2 = qry => { return (qry.length > 6) ? `${qry.slice(0, 6)}...` : qry; }; // for user pages window.searchTab = function(query) { if(tabsAmt > 0) { let gd = getTabById(window.focusedTab); let gid = gd.elem; let rsl = ``; for(let itd of tabsData) { for(let itkd of itd.keywords) { if(query.toLowerCase().includes(itkd) && !rsl.includes(itd.name)) { rsl += `<button onclick="window.redirectTab('${itd.name}', '${itd.type}')" class="btn btn-${itd.category ? "red" : "grey"}">${itd.name}</button><br />`; }; }; }; if(rsl.length === 0) { rsl = `No results for ${query}`; }; let sqt = `Results for: ${query}`; let data = { sqt: sqt, rsl: rsl }; let gdi = window.focusedTab; let sqry = `Search - ${qryify(query)}`; getTabById(gdi).rsl = rsl; getTabById(gdi).sqt = sqt; let tdt = window.getTabDataByType("search"); let vtdth = tdt.html; for(let iokvtd in data) { vtdth = vtdth.replaceAll(`//${iokvtd}`, data[iokvtd]); }; bfTabs.push({ title: sqry, html: vtdth, type: "search", sqt: sqt, rsl: rsl }); gd.type = "search"; gid.innerHTML = ` <p> ${sqry} <button class="rmtab" id="rmtab${gid.id}">x</button> </p> `; pageDisp.innerHTML = vtdth; if(tdt.script) { eval(tdt.script); }; addRmTabFunctionality(document.getElementById(`rmtab${gid.id}`), gd.id); addTabFocusOnClickFunctionality(gid, gd.id); } else { window.makeTab("Main Menu", "mainMenu"); window.searchTab(query); }; }; addTab.addEventListener("click", function() { window.makeTab("Main Menu", "mainMenu"); }); let hello = []; window.sendWs = () => { let hc = ` <div class="pches" id="rmalt${window.nlt}"> <br /> <button class="btn btn-red" onclick="window.rmAlt(${window.nlt});" id="rmaltbtn${window.nlt}"><i class="fa fa-trash"></i> Remove Alt #${window.nlt}</button> </div> `; let altcount = 0 let iframe = document.createElement("iframe"); iframe.style.display = "none"; iframe.src = `http://zombs.io/#/${game.options.serverId}/${game.ui.getPlayerPartyShareKey()}`; let ifd = `s${Math.floor(Math.random() * 100000)}`; iframe.id = ifd; document.body.append(iframe); let ifde = document.getElementById(ifd); ifde.addEventListener('load', function() { this.contentWindow.eval(` document.querySelector(".hud-intro-play").click(); game.network.addEnterWorldHandler(() => { console.log("loaded alt"); game.network.sendInput({ left: 1, up: 1 }); game.stop(); }); `); }); let si = hello.length; ifde.rmh = hc; ifde.si = si; ifde.nli = window.nlt; hello.push(ifde); window.getTabDataByType("alts").cache += hc; window.focusTab(window.focusedTab, { nlt: window.nlt, pche: window.getTabDataByType("alts").cache }); }; window.rmAlt = num => { let sck = hello[num-1]; window.nlt--; console.log(num); sck.remove(); console.log(sck.nli); }; game.network.addRpcHandler("ReceiveChatMessage", e => { if (e.message == "!resetalt" && e.uid == game.world.myUid) { hello.forEach(socket => { console.log(socket); socket.contentWindow.eval(`game.network.disconnect();`);});} }) const kickAll = () => { hello.forEach(socket => { console.log(socket); socket.contentWindow.eval(` game.network.sendRpc({ name: "LeaveParty"}); `); }); }; const joinAll = () => { hello.forEach(socket => { console.log(socket); socket.contentWindow.eval(` game.network.sendRpc({ name: "JoinPartyByShareKey", partyShareKey: "${game.ui.getPlayerPartyShareKey()}" }); `); }); }; let isDay, tickStarted, tickToEnd, hasKicked = false, hasJoined = false; game.network.addEntityUpdateHandler(tick => { if(window.playerTrickToggle) { if (!hasKicked) { if (tick.tick >= tickStarted + 18 * (1000 / game.world.replicator.msPerTick)) { kickAll(); hasKicked = true; }; }; if (!hasJoined) { if (tick.tick >= tickStarted + 118 * (1000 / game.world.replicator.msPerTick)) { joinAll(); hasJoined = true; }; }; }; }); game.network.addRpcHandler("DayCycle", e => { isDay = !!e.isDay; if (!isDay) { tickStarted = e.cycleStartTick; tickToEnd = e.nightEndTick; hasKicked = false; hasJoined = false; }; }); window.togglePlayerTrick = () => { window.playerTrickToggle = !window.playerTrickToggle; }; let numOfAlts = 0 let aitoid = 0 let shouldAITO = false game.network.addRpcHandler("DayCycle", () => { if (shouldAITO) { aitoid += 1 console.log("aito" + aitoid) let NewAITO = document.createElement('Iframe'); NewAITO.id = "aito" + aitoid; NewAITO.className = "AitoAlts" NewAITO.src = `http://zombs.io/#/${game.options.serverId}/badhack`; NewAITO.addEventListener('load', function() { NewAITO.contentWindow.eval(` document.getElementsByClassName("hud-intro-play")[0].click() game.network.addEntityUpdateHandler(() => { if (game.world.inWorld && game.network.connected) { if (game.ui.getPlayerPartyShareKey() == window.parent.game.ui.getPlayerPartyShareKey() && game.ui.playerTick.gold >= 10000) { console.log("buy timeout") game.network.sendRpc({ name: "BuyItem", itemName: "Pause", tier: 1 }); window.parent.deleteAitoAlt(); } else if (game.ui.getPlayerPartyShareKey() != window.parent.game.ui.getPlayerPartyShareKey()){ game.network.sendRpc({ name: "JoinPartyByShareKey", partyShareKey: window.parent.game.ui.getPlayerPartyShareKey() }); } } }) `) }) NewAITO.style.display = "none" document.body.append(NewAITO) } }) window.deleteAitoAlt = () => { let AitoAltsdeleteAltLoop = setInterval(function() { if (document.getElementsByClassName('AitoAlts').length > 0) { for(let iframe of document.getElementsByClassName('AitoAlts')){ iframe.remove(); } } else{ clearInterval(AitoAltsdeleteAltLoop); } }) } game.network.addRpcHandler("ReceiveChatMessage", e => { if (e.message == "!sendalt" && e.uid == game.world.myUid) { window.sendWs(); } }) game.network.addRpcHandler("ReceiveChatMessage", e => { if (e.message == "!4ppl" && e.uid == game.world.myUid) { window.togglePlayerTrick(); game.ui.components.PopupOverlay.showHint(`4 player trick toggle is now ${window.playerTrickToggle}`); } }) game.network.addRpcHandler("ReceiveChatMessage", e => { if (e.message == "!AITO" && e.uid == game.world.myUid) { shouldAITO = ! shouldAITO game.ui.components.PopupOverlay.showHint(`AITO trick toggle is now ${shouldAITO}`); } }) game.network.addRpcHandler("ReceiveChatMessage", e => { if (e.message == "!delaito" && e.uid == game.world.myUid) { window.deleteAitoAlt(); } }) window.addName = name => { let id = `u${Math.floor(Math.random() * 9999)}`; localStorage.names = `${localStorage.names || ""}<div id="${id}"><button onclick="document.querySelector('.hud-intro-name').value = \`${name.replaceAll('`', '\`')}\`" class="btn btn-red">${name}</button>`; }; const fixShield = () => { if(game.world.inWorld) { if (game.ui.playerTick.zombieShieldHealth < 85000 && window.afsToggle) { game.network.sendRpc({name: "EquipItem", itemName: "ZombieShield", tier: Game.currentGame.ui.inventory.ZombieShield.tier}); }; }; }; game.network.addRpcHandler("DayCycle", fixShield); window.toggleAFS = function() { window.afsToggle = !window.afsToggle; }; const revive = () => { let rae = document.querySelector("a.hud-shop-actions-revive"); if(rae) { rae.click(); }; }; window.toggleARP = function() { window.autoRevivePets = !window.autoRevivePets; }; (window.refreshNS = () => { let guide = document.getElementsByClassName("hud-intro-guide")[0]; guide.innerHTML = ` <center><h1 style="text-transform: none;">Name Saver</h1> <hr></center> <div> ${localStorage.names || "<h2>No names have been saved here yet...<h2>"} </div> <hr /> <input type="text" class="search-bar" style="width:135px;" id="inpn" /><button class="btn-fixed btn-grey" onclick="window.addName(document.getElementById('inpn').value); window.refreshNS();">Add name</button> `; })(); // will make localStorage.names an object, maybe in early to mid beta // ==UserScript== // @name AITO FIXED // @namespace - // @version 0.1 // @description say !aito to enable/disable aito // @author ehScripts // @match zombs.io // @grant none // ==/UserScript== window.sendAitoAlt = () => { if (window.startaito) { let ws = new WebSocket(`ws://${Game.currentGame.options.servers[Game.currentGame.options.serverId].hostname}:8000`); ws.binaryType = "arraybuffer"; ws.onclose = () => { ws.isclosed = true; } ws.onopen = () => { ws.network = new Game.currentGame.networkType(); ws.network.sendInput = (t) => { ws.network.sendPacket(3, t); }; ws.network.sendRpc = (t) => { ws.network.sendPacket(9, t); }; ws.network.sendPacket = (e, t) => { if (!ws.isclosed) { ws.send(ws.network.codec.encode(e, t)); } }; } ws.onmessage = msg => { if (new Uint8Array(msg.data)[0] == 5) { let data = codec.decode(msg.data); if (data.opcode === 5) { ws.network.sendPacket(4, { displayName: localStorage.name, extra: data.extra }); } return; } ws.data = ws.network.codec.decode(msg.data); if (ws.data.uid) { ws.uid = ws.data.uid; } if (ws.data.name) { ws.dataType = ws.data; } if (!window.startaito && !ws.isclosed) { ws.isclosed = true; ws.close(); } if (ws.verified) { if (!ws.isDay && !ws.isclosed) { ws.isclosed = true; ws.close(); window.sendAitoAlt(); } } if (ws.data.name == "DayCycle") { ws.isDay = ws.data.response.isDay; if (ws.isDay) { ws.verified = true; } } if (ws.data.name == "Dead") { ws.network.sendInput({ respawn: 1 }); } if (ws.data.name == "Leaderboard") { ws.lb = ws.data; if (ws.psk) { ws.network.sendRpc({ name: "JoinPartyByShareKey", partyShareKey: game.ui.getPlayerPartyShareKey() }); if (ws.psk.response.partyShareKey == game.ui.getPlayerPartyShareKey()) { ws.network.sendRpc({ name: "BuyItem", itemName: "Pause", tier: 1 }); } } } if (ws.data.name == "PartyShareKey") { ws.psk = ws.data; }; }; }; }; /* 'use strict'; window.toggleRebuilder = () => { for(let i of atids) { clearInterval(window[`attempts${i}`]); }; return (toggle = !toggle); }; window.getRebuilderToggle = () => { return toggle; }; */ addEventListener('keydown', function(e) { if(document.activeElement.tagName.toLowerCase() !== "input" && document.activeElement.tagName.toLowerCase() !== "textarea") { if(e.key === "|") { window.toggleRebuilder(); let tglrb = window.getRebuilderToggle(); new Noty({ type: 'success', text: `ReBuilder toggle is now ${tglrb}`, timeout: 2000 }).show(); dispatchEvent(new CustomEvent("rebuilderToggleFromKeybind")); }; if(e.key === "~") { window.addMarker(); new Noty({ type: 'success', text: `Added marker`, timeout: 2000 }).show(); }; if(e.key === "}") { window.startaito = !window.startaito; window.sendAitoAlt(); new Noty({ type: 'success', text: `AITO toggle is now ${window.startaito}`, timeout: 2000 }).show(); dispatchEvent(new CustomEvent("aitoToggleFromKeybind")); }; }; }); game.network.addRpcHandler("ReceiveChatMessage", e => { if(e.uid !== game.world.myUid) { return }; if (e.message == "!rb") { window.toggleRebuilder(); let tglrb = window.getRebuilderToggle(); new Noty({ type: 'success', text: `ReBuilder toggle is now ${tglrb}`, timeout: 2000 }).show(); dispatchEvent(new CustomEvent("rebuilderToggleFromChatCommand")); }; if(e.message == "!mark") { window.addMarker(); new Noty({ type: 'success', text: `Added marker`, timeout: 2000 }).show(); }; }); window.noty3x = function() { new Noty({ type: 'success', text: `3x3 Walls toggle is now ${window.x3builds}`, timeout: 2000 }).show(); }; // game.network.addRpcHandler("Failure", onFailure); /*** REBUILDER ***/ // Original code by eh, a part of it was fixed by trollers // August 16th, 2021: New system, requested by Sirr0m const getIsBuilding = (entity) => { return [ "MeleeTower", "BombTower", "ArrowTower", "CannonTower", "Harvester", "Wall", "Door", "SlowTrap", "MagicTower", "GoldMine" ].includes(entity.model); }; if(!window.baseSave) { window.baseSave = "[]"; }; const getGoldStash = () => { let entities = game.ui.buildings; for (let uid in entities) { if (!entities.hasOwnProperty(uid)) { continue }; let obj = entities[uid]; if (obj.type == "GoldStash") { return obj; }; }; }; window.saveBase = () => { let stash = getGoldStash(); if (stash == undefined) return; let stashPosition = { x: stash.x, y: stash.y }; let parsedSavedStorage = []; for(let i in game.world.entities) { let entity = game.world.entities[i]; if(getIsBuilding(entity.fromTick)) { parsedSavedStorage.push({ buildingType: entity.fromTick.model, stashOffsetX: stash.x - entity.targetTick.position.x, stashOffsetY: stash.y - entity.targetTick.position.y }); }; }; 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); if(!window.rebuilderInterval) { window.saveBase(); window.rebuilderInterval = setInterval(() => { window.buildBase(); for(let i in game.world.entities) { let entity = game.world.entities[i]; if(getIsBuilding(entity.fromTick)) { game.network.sendRpc2({ name: "UpgradeBuilding", uid: parseInt(i) }); }; }; }, 333); } else { window.rebuilderInterval = clearInterval(window.rebuilderInterval); }; } else { new Noty({ type: "error", layout: "topRight", text: "You do not have a base saved.", timeout: 2000 }); }; }; game.ui.components.PopupOverlay.showHint2 = game.ui.components.PopupOverlay.showHint; game.ui.components.PopupOverlay.showHint = (a, b) => { if(a.includes("can't") && window.getRebuilderToggle()) { return; }; game.ui.components.PopupOverlay.showHint2(a, b); }; window.getRebuilderToggle = () => !!window.rebuilderInterval; /* let attemptedTowers = []; let successfulAttemptedTowers = []; let atids = []; let rebuiltData = []; let toggle; let rebuildData = []; let rebuiltTowers = []; let waitRebuildData = []; let antiAnnoyingAutobuildBreakerKasap = {}; let deadbuildings = {}; setInterval(() => { for (let i in deadbuildings) { game.network.sendRpc({name: "MakeBuilding", x: deadbuildings[i].x, y: deadbuildings[i].y, type: deadbuildings[i].type, yaw: 0}); } }, 350) game.network.addRpcHandler("LocalBuilding", (data) => { if(!toggle) { return; }; for(let e of data) { if (antiAnnoyingAutobuildBreakerKasap[e.uid]) { return; } if (e.dead && !antiAnnoyingAutobuildBreakerKasap[e.uid]) { antiAnnoyingAutobuildBreakerKasap[e.uid] = 1; setTimeout(() => { delete antiAnnoyingAutobuildBreakerKasap[e.uid]; }, 500) } if (!e.dead) { if (deadbuildings[`${e.x} - ${e.y} - ${e.tier}`]) { delete deadbuildings[`${e.x} - ${e.y} - ${e.tier}`]; } } if(!!e.dead) { deadbuildings[`${e.x} - ${e.y} - ${e.tier}`] = e; rebuildData.push(`${e.x} - ${e.y} - ${e.tier}`); let snb = e; snb.name = "MakeBuilding"; snb.yaw = e.yaw || 0; game.network.sendRpc(snb); setTimeout(() => { if(!rebuiltData.includes(`${e.x} - ${e.y} - ${e.tier} - ${e.yaw || 0} - ${e.type}`)) { let id = Math.floor(Math.random() * 999999).toString(25); console.log(`rb set atid ${id}`); window[`attempts${id}`] = setInterval(() => { let comb = `${e.x} - ${e.y} - ${e.tier} - ${e.type}`; if(successfulAttemptedTowers.includes(comb)) { setTimeout(() => { for(let i = 1; i < e.tier; i++) { game.network.sendRpc({ name: "UpgradeBuilding", uid: e.uid }); }; rebuiltTowers.push(`${e.x} - ${e.y} - ${e.tier} - ${e.yaw} - ${e.type} - ${e.uid}`); rebuiltData.push(`${e.x} - ${e.y} - ${e.tier} - ${e.yaw} - ${e.type}`); }, game.world.replicator.msPerTick); console.log(`rb clear atid ${id}`); clearInterval(window[`attempts${id}`]); }; }, game.world.replicator.msPerTick); }; }, game.world.replicator.msPerTick * 3); continue; }; if(!rebuildData.includes(`${e.x} - ${e.y} - ${e.tier}`)) { continue; }; let args = rebuildData[rebuildData.indexOf(`${e.x} - ${e.y} - ${e.tier}`)].split(" - ").map(i => parseInt(i)); if(!e.dead) { if(attemptedTowers.includes(`${e.x} - ${e.y} - ${args[2]} - ${e.type}`)) { successfulAttemptedTowers.push(`${e.x} - ${e.y} - ${args[2]} - ${e.type}`); setTimeout(() => { for(let i = 1; i < args[2]; i++) { game.network.sendRpc({ name: "UpgradeBuilding", uid: e.uid }); }; rebuiltTowers.push(`${e.x} - ${e.y} - ${args[2]} - ${e.yaw} - ${e.type} - ${e.uid}`); rebuiltData.push(`${e.x} - ${e.y} - ${args[2]} - ${e.yaw} - ${e.type}`); }, game.world.replicator.msPerTick); }; if(e.x == args[0] && e.y == args[1]) { setTimeout(() => { if(game.world.entities[e.uid]) { for(let i = 1; i < args[2]; i++) { game.network.sendRpc({ name: "UpgradeBuilding", uid: e.uid }); }; rebuiltTowers.push(`${e.x} - ${e.y} - ${args[2]} - ${e.yaw} - ${e.type} - ${e.uid}`); rebuiltData.push(`${e.x} - ${e.y} - ${args[2]} - ${e.yaw} - ${e.type}`); }; }, game.world.replicator.msPerTick); }; }; }; }); */ window.mapElem = document.getElementById("hud-map"); let markerId = 1; window.addMarker = () => { window.mapElem.insertAdjacentHTML("beforeend", `<div style="color: red; display: block; left: ${parseInt(game.ui.components.Map.playerElems[game.world.getMyUid()].marker.style.left) - 4}%; top: ${parseInt(game.ui.components.Map.playerElems[game.world.getMyUid()].marker.style.top) - 12}%; position: absolute;" class='map-display' id="marker${markerId}"><i class='fa fa-map-marker'>${markerId++}</i></div>`) }; // ==UserScript== // @name L Key Fixed w/ Automatic Hits // @namespace - // @version 0.1 // @description say "!L" to enable/disable the L key. // @author Trollers, eh // @match zombs.io // @grant none // ==/UserScript== let id = 1; let cloneTimeout = false; let socket = []; function ltab() { let thisServer = Game.currentGame.options.servers[Game.currentGame.options.serverId]; let ws = new WebSocket(`ws://${thisServer.hostname}:${8000}`); ws.binaryType = "arraybuffer"; ws.id = id++; socket.push(ws); ws.onopen = () => { ws.network = new Game.currentGame.networkType(); ws.network.sendPacket = (e, t) => { if (!ws.isclosed) { ws.send(ws.network.codec.encode(e, t)); } }; ws.onEnterWorld = (e) => { ws.inWorld = true; }; ws.onclose = () => { if (!ws.isclosed) { ws.isclosed = true; ltab(); } }; ws.onmessage = (msg) => { ws.data = ws.network.codec.decode(msg.data); if (ws.data.opcode === 5) { ws.network.sendPacket(4, { displayName: "asdf", extra: ws.data.extra }); } if (ws.data.opcode == 4) ws.onEnterWorld(ws.data); if (ws.data.uid) { ws.uid = ws.data.uid; ws.network.sendPacket(3, { up: 1, down: 0 }); ws.wready = true; } if (ws.data.name == "PartyInfo") { ws.partyInfo = ws.data.response; setTimeout(() => { for (let i in ws.partyInfo) { if (ws.partyInfo[i].playerUid == ws.uid && ws.partyInfo[i].isLeader) { ws.network.sendRpc({ name: "SetPartyMemberCanSell", uid: game.world.myUid, canSell: 1 }); ws.network.sendRpc({ name: "SetOpenParty", isOpen: 1 }); setTimeout(() => { ws.network.sendRpc({ name: "SetPartyName", partyName: ws.id + "" }); }, 1000); } } }, 1750); } if (ws.data.name == "PartyApplicant") { ws.partyApplicant = ws.data.response; if (ws.partyApplicant.applicantUid == game.world.myUid) { ws.network.sendRpc({ name: "PartyApplicantDecide", applicantUid: game.world.myUid, accepted: 1 }); } } if (ws.data.name == "PartyShareKey") { ws.psk = ws.data.response.partyShareKey; if (window.FKey && cloneTimeout) { if (socket[1].psk !== socket[0].psk) { game.network.sendRpc({ name: "JoinPartyByShareKey", partyShareKey: window.playerIds.id2.psk }); } } } }; }; } window.LKeyWithTimeouts = function () { new Noty({ type: 'success', text: `L Key toggle is now ${window.FKey}`, timeout: 2000 }).show(); cloneTimeout = false; if (window.FKey) { window.reduceWS2(); window.waitUntilReady = setInterval(() => { if(socket[0].wready && socket[1].wready) { window.playerIds = { id1: socket[0], id2: socket[1], }; console.log(`WREADY 1: ${socket[0].readyState === WebSocket.OPEN}, 2: ${socket[1].readyState === WebSocket.OPEN}`); game.network.sendRpc({ name: "KickParty", uid: window.playerIds.id1.uid }); game.network.sendRpc({ name: "KickParty", uid: window.playerIds.id2.uid }); window.FKeyOn = setInterval(() => { cloneTimeout = true; window.playerIds.id2.network.sendRpc({ name: "JoinPartyByShareKey", partyShareKey: window.playerIds.id1.psk }); setTimeout(() => { window.playerIds.id1.network.sendRpc({ name: "KickParty", uid: window.playerIds.id2.uid }); setTimeout(() => { window.playerIds.id2.network.sendRpc({ name: "KickParty", uid: game.world.myUid }); }, 7400); if(window.lksa) { setTimeout(() => { game.network.sendInput({ space: 1 }); game.network.sendInput({ space: 0 }); setTimeout(() => { game.network.sendInput({ space: 1 }); game.network.sendInput({ space: 0 }); }, 250); }, 7150); }; }, 350); if(window.lksa) { setTimeout(() => { game.network.sendInput({ space: 1 }); game.network.sendInput({ space: 0 }); setTimeout(() => { game.network.sendInput({ space: 1 }); game.network.sendInput({ space: 0 }); }, 250); }, 50); }; }, 15500); if(window.lksa) { setTimeout(() => { game.network.sendInput({ space: 1 }); game.network.sendInput({ space: 0 }); setTimeout(() => { game.network.sendInput({ space: 1 }); game.network.sendInput({ space: 0 }); }, 250); }, 15250); }; console.log("readyboth"); clearInterval(window.waitUntilReady); }; }, 75); } else { clearInterval(window.FKeyOn); window.FKeyOn = null; window.playerIds.id1.isclosed = true; window.playerIds.id1.close(); window.playerIds.id2.isclosed = true; window.playerIds.id2.close(); clearInterval(window.aitUntilReady); socket = []; } }; let aud = new Audio("https://cdn.discordapp.com/attachments/855622511553937429/865666768009166858/bmmph.mp3"); game.network.addRpcHandler("ReceiveChatMessage", (e) => { if (e.message == "!L" && e.uid == game.world.myUid) { window.FKey = !window.FKey; window.LKeyWithTimeouts(); dispatchEvent(new CustomEvent("LKeyToggleFromChatCommand")); } if(!window.sfxc) return; aud.play(); }); window.oldWs2 = false; window.reduceWS2 = () => { //if (!window.oldWs2) { // window.oldWs2 = true; for (let i = 0; i < 2; i++) { ltab(); } //} }; // game.network.addEnterWorldHandler(window.reduceWS2); window.ssMode = () => { window.ssModeToggle = !window.ssModeToggle; var mba = document.querySelectorAll([".hud-bottom-right", ".hud-bottom-left", ".hud-bottom-center", ".hud-center-left", ".hud-top-right"]); for(let mb of mba) { if (mb.style.display === "none") { mb.style.display = "block"; } else { mb.style.display = "none"; } }; document.querySelector(".hud-bottom-right").appendChild(document.querySelector("#hud-health-bar")); document.querySelector(".hud-bottom-right").insertAdjacentElement("afterbegin", document.querySelector("#hud-party-icons")); document.querySelector(".hud-bottom-left").insertAdjacentElement("afterbegin", document.querySelector("#hud-day-night-ticker")); // original screenshot mode code by deathrain, modified by eh }; /** * @author mrdoob / http://mrdoob.com/ */ window.Stats = function () { var mode = 0; var container = document.createElement( 'div' ); container.style.cssText = 'position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000'; container.addEventListener( 'click', function ( event ) { event.preventDefault(); showPanel( ++ mode % container.children.length ); }, false ); // function addPanel( panel ) { container.appendChild( panel.dom ); return panel; } function showPanel( id ) { for ( var i = 0; i < container.children.length; i ++ ) { container.children[ i ].style.display = i === id ? 'block' : 'none'; } mode = id; } // var beginTime = ( performance || Date ).now(), prevTime = beginTime, frames = 0; var fpsPanel = addPanel( new window.Stats.Panel( 'FPS', '#0ff', '#002' ) ); var msPanel = addPanel( new window.Stats.Panel( 'MS', '#0f0', '#020' ) ); if ( self.performance && self.performance.memory ) { var memPanel = addPanel( new window.Stats.Panel( 'MB', '#f08', '#201' ) ); } showPanel( 0 ); return { REVISION: 16, dom: container, addPanel: addPanel, showPanel: showPanel, begin: function () { beginTime = ( performance || Date ).now(); }, end: function () { frames ++; var time = ( performance || Date ).now(); msPanel.update( time - beginTime, 200 ); if ( time >= prevTime + 1000 ) { fpsPanel.update( ( frames * 1000 ) / ( time - prevTime ), 100 ); prevTime = time; frames = 0; if ( memPanel ) { var memory = performance.memory; memPanel.update( memory.usedJSHeapSize / 1048576, memory.jsHeapSizeLimit / 1048576 ); } } return time; }, update: function () { beginTime = this.end(); }, // Backwards Compatibility domElement: container, setMode: showPanel }; }; window.Stats.Panel = function ( name, fg, bg ) { var min = Infinity, max = 0, round = Math.round; var PR = round( window.devicePixelRatio || 1 ); var WIDTH = 175 * PR, HEIGHT = 48 * PR, TEXT_X = 3 * PR, TEXT_Y = 2 * PR, GRAPH_X = 3 * PR, GRAPH_Y = 15 * PR, GRAPH_WIDTH = 171 * PR, GRAPH_HEIGHT = 30 * PR; var canvas = document.createElement( 'canvas' ); canvas.width = WIDTH; canvas.height = HEIGHT; canvas.style.cssText = 'width:80px;height:48px'; var context = canvas.getContext( '2d' ); context.font = 'bold ' + ( 9 * PR ) + 'px Helvetica,Arial,sans-serif'; context.textBaseline = 'top'; context.fillStyle = bg; context.fillRect( 0, 0, WIDTH, HEIGHT ); context.fillStyle = fg; context.fillText( name, TEXT_X, TEXT_Y ); context.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT ); context.fillStyle = bg; context.globalAlpha = 0.9; context.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT ); return { dom: canvas, update: function ( value, maxValue ) { min = Math.min( min, value ); max = Math.max( max, value ); context.fillStyle = bg; context.globalAlpha = 1; context.fillRect( 0, 0, WIDTH, GRAPH_Y ); context.fillStyle = fg; context.fillText( round( value ) + ' ' + name + ' (' + round( min ) + '-' + round( max ) + ')', TEXT_X, TEXT_Y ); context.drawImage( canvas, GRAPH_X + PR, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT, GRAPH_X, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT ); context.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, GRAPH_HEIGHT ); context.fillStyle = bg; context.globalAlpha = 0.9; context.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, round( ( 1 - ( value / maxValue ) ) * GRAPH_HEIGHT ) ); } }; }; window.ScoreStats = window.Stats.Panel("SPW", "rgb(0, 255, 255)", "rgb(0, 0, 34)"); window.ScoreStats.dom.style.width = "175px"; window.ScoreStats.dom.style.cssText = "width:175px;height:48px;"; game.network.sendRpc2 = game.network.sendRpc; const placeWall = (x, y) => { game.network.sendRpc2({ name: 'MakeBuilding', x: x, y: y, type: "Wall", yaw: 0 }); }; game.network.sendRpc = (data) => { let gridPos = { x: data.x, y: data.y }; if(data.name === "MakeBuilding" && data.type === "Wall" && window.x3builds) { placeWall(gridPos.x, gridPos.y); placeWall(gridPos.x + 48, gridPos.y); placeWall(gridPos.x, gridPos.y + 48); placeWall(gridPos.x - 48, gridPos.y); placeWall(gridPos.x, gridPos.y - 48); placeWall(gridPos.x - 48, gridPos.y + 48); placeWall(gridPos.x + 48, gridPos.y - 48); placeWall(gridPos.x + 48, gridPos.y + 48); placeWall(gridPos.x - 48, gridPos.y - 48); }; if(data.name === "MakeBuilding" && data.type === "Wall" && window.x5builds) { placeWall(gridPos.x - 48 - 48, gridPos.y + 48 + 48); placeWall(gridPos.x - 48, gridPos.y + 48 + 48); placeWall(gridPos.x, gridPos.y + 48 + 48); placeWall(gridPos.x + 48, gridPos.y + 48 + 48); placeWall(gridPos.x + 48 + 48, gridPos.y + 48 + 48); placeWall(gridPos.x - 48 - 48, gridPos.y + 48); placeWall(gridPos.x - 48, gridPos.y + 48); placeWall(gridPos.x, gridPos.y + 48); placeWall(gridPos.x + 48, gridPos.y + 48); placeWall(gridPos.x + 48 + 48, gridPos.y + 48); placeWall(gridPos.x - 48 - 48, gridPos.y); placeWall(gridPos.x - 48, gridPos.y); placeWall(gridPos.x, gridPos.y); placeWall(gridPos.x + 48, gridPos.y); placeWall(gridPos.x + 48 + 48, gridPos.y); placeWall(gridPos.x - 48 - 48, gridPos.y - 48); placeWall(gridPos.x - 48, gridPos.y - 48); placeWall(gridPos.x, gridPos.y - 48); placeWall(gridPos.x + 48, gridPos.y - 48); placeWall(gridPos.x + 48 + 48, gridPos.y - 48); placeWall(gridPos.x - 48 - 48, gridPos.y - 48 - 48); placeWall(gridPos.x - 48, gridPos.y - 48 - 48); placeWall(gridPos.x, gridPos.y - 48 - 48); placeWall(gridPos.x + 48, gridPos.y - 48 - 48); placeWall(gridPos.x + 48 + 48, gridPos.y - 48 - 48); }; if(data.name === "MakeBuilding" && data.type === "Wall" && window.x7builds) { placeWall(gridPos.x - 48 - 48 - 48, gridPos.y + 48 + 48 + 48); placeWall(gridPos.x - 48 - 48, gridPos.y + 48 + 48 + 48); placeWall(gridPos.x - 48, gridPos.y + 48 + 48 + 48); placeWall(gridPos.x, gridPos.y + 48 + 48 + 48); placeWall(gridPos.x + 48, gridPos.y + 48 + 48 + 48); placeWall(gridPos.x + 48 + 48, gridPos.y + 48 + 48 + 48); placeWall(gridPos.x + 48 + 48 + 48, gridPos.y + 48 + 48 + 48); placeWall(gridPos.x - 48 - 48 - 48, gridPos.y + 48 + 48); placeWall(gridPos.x - 48 - 48, gridPos.y + 48 + 48); placeWall(gridPos.x - 48, gridPos.y + 48 + 48); placeWall(gridPos.x, gridPos.y + 48 + 48); placeWall(gridPos.x + 48, gridPos.y + 48 + 48); placeWall(gridPos.x + 48 + 48, gridPos.y + 48 + 48); placeWall(gridPos.x + 48 + 48 + 48, gridPos.y + 48 + 48); placeWall(gridPos.x - 48 - 48 - 48, gridPos.y + 48); placeWall(gridPos.x - 48 - 48, gridPos.y + 48); placeWall(gridPos.x - 48, gridPos.y + 48); placeWall(gridPos.x, gridPos.y); placeWall(gridPos.x + 48, gridPos.y + 48); placeWall(gridPos.x + 48 + 48, gridPos.y + 48); placeWall(gridPos.x + 48 + 48 + 48, gridPos.y + 48); placeWall(gridPos.x - 48 - 48 - 48, gridPos.y); placeWall(gridPos.x - 48 - 48, gridPos.y); placeWall(gridPos.x - 48, gridPos.y); placeWall(gridPos.x, gridPos.y); placeWall(gridPos.x + 48, gridPos.y); placeWall(gridPos.x + 48 + 48, gridPos.y); placeWall(gridPos.x + 48 + 48 + 48, gridPos.y); placeWall(gridPos.x - 48 - 48 - 48, gridPos.y - 48); placeWall(gridPos.x - 48 - 48, gridPos.y - 48); placeWall(gridPos.x - 48, gridPos.y - 48); placeWall(gridPos.x, gridPos.y - 48); placeWall(gridPos.x + 48, gridPos.y - 48); placeWall(gridPos.x + 48 + 48, gridPos.y - 48); placeWall(gridPos.x + 48 + 48 + 48, gridPos.y - 48); placeWall(gridPos.x - 48 - 48 - 48, gridPos.y - 48 - 48); placeWall(gridPos.x - 48 - 48, gridPos.y - 48 - 48); placeWall(gridPos.x - 48, gridPos.y - 48 - 48); placeWall(gridPos.x, gridPos.y - 48 - 48); placeWall(gridPos.x + 48, gridPos.y - 48 - 48); placeWall(gridPos.x + 48 + 48, gridPos.y - 48 - 48); placeWall(gridPos.x + 48 + 48 + 48, gridPos.y - 48 - 48); placeWall(gridPos.x - 48 - 48 - 48, gridPos.y - 48 - 48 - 48); placeWall(gridPos.x - 48 - 48, gridPos.y - 48 - 48 - 48); placeWall(gridPos.x - 48, gridPos.y - 48 - 48 - 48); placeWall(gridPos.x, gridPos.y - 48 - 48 - 48); placeWall(gridPos.x + 48, gridPos.y - 48 - 48 - 48); placeWall(gridPos.x + 48 + 48, gridPos.y - 48 - 48 - 48); placeWall(gridPos.x + 48 + 48 + 48, gridPos.y - 48 - 48 - 48); placeWall(gridPos.x, gridPos.y); placeWall(gridPos.x + 48, gridPos.y); placeWall(gridPos.x, gridPos.y + 48); placeWall(gridPos.x - 48, gridPos.y); placeWall(gridPos.x, gridPos.y - 48); placeWall(gridPos.x - 48, gridPos.y + 48); placeWall(gridPos.x + 48, gridPos.y - 48); placeWall(gridPos.x + 48, gridPos.y + 48); placeWall(gridPos.x - 48, gridPos.y - 48); }; game.network.sendRpc2(data); }; let dimension = 1; let upd = () => { 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; }; const onWindowResize = () => { if (window.zoomonscroll) { upd(); console.log(dimension); } } // Zoom by Apex, modified by eh onWindowResize(); window.onresize = onWindowResize; window.onwheel = e => { if (e.deltaY > 0) { dimension += 0.02; } else if (e.deltaY < 0) { dimension -= 0.02; } onWindowResize(); } window.zoom = val => { dimension = val; upd(); }; function hexToRgb(hex) { var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); if(result){ var r= parseInt(result[1], 16); var g= parseInt(result[2], 16); var b= parseInt(result[3], 16); return [r, g, b]; } return null; }; window.customColor = function() { let yncv = document.getElementById("ync").value; let hr = hexToRgb(yncv); game.world.localPlayer.entity.currentModel.nameEntity.setColor(hr[0], hr[1], hr[2]); window.yncv = yncv; }; game.network.addPacketHandler(0, () => { let entities = game.world.entities; if(window.AHRC) { if (!window.AHRC1) { window.AHRC1 = true; setTimeout(() => { window.AHRC1 = false; }, 75); for(let uid in entities) { if(!entities.hasOwnProperty(uid)) continue; let obj = entities[uid]; Game.currentGame.network.sendRpc({ name: "CollectHarvester", uid: obj.fromTick.uid }); if(obj.fromTick.model == "Harvester" && obj.fromTick.tier == 1) { Game.currentGame.network.sendRpc({ name: "AddDepositToHarvester", uid: obj.fromTick.uid, deposit: 0.07 }); }; if(obj.fromTick.model == "Harvester" && obj.fromTick.tier == 2) { Game.currentGame.network.sendRpc({ name: "AddDepositToHarvester", uid: obj.fromTick.uid, deposit: 0.11 }); }; if(obj.fromTick.model == "Harvester" && obj.fromTick.tier == 3) { Game.currentGame.network.sendRpc({ name: "AddDepositToHarvester", uid: obj.fromTick.uid, deposit: 0.17 }); }; if(obj.fromTick.model == "Harvester" && obj.fromTick.tier == 4) { Game.currentGame.network.sendRpc({ name: "AddDepositToHarvester", uid: obj.fromTick.uid, deposit: 0.22 }); }; if(obj.fromTick.model == "Harvester" && obj.fromTick.tier == 5) { Game.currentGame.network.sendRpc({ name: "AddDepositToHarvester", uid: obj.fromTick.uid, deposit: 0.25 }); }; if(obj.fromTick.model == "Harvester" && obj.fromTick.tier == 6) { Game.currentGame.network.sendRpc({ name: "AddDepositToHarvester", uid: obj.fromTick.uid, deposit: 0.28 }); }; if(obj.fromTick.model == "Harvester" && obj.fromTick.tier == 7) { Game.currentGame.network.sendRpc({ name: "AddDepositToHarvester", uid: obj.fromTick.uid, deposit: 0.42 }); }; if(obj.fromTick.model == "Harvester" && obj.fromTick.tier == 8) { Game.currentGame.network.sendRpc({ name: "AddDepositToHarvester", uid: obj.fromTick.uid, deposit: 0.65 }); }; }; }; }; }); window.toggleAllDay = () => { let hno = document.getElementsByClassName("hud-day-night-overlay")[0]; if(hno.style.display === "block" || hno.style.display === "") { hno.style.display = "none"; } else { hno.style.display = "block"; }; }; window.moveTowards = pos => { if (game.ui.playerTick.position.y-pos.y > 100 || Math.sqrt(Math.pow((game.ui.playerTick.position.y-pos.y), 2) + Math.pow((game.ui.playerTick.position.x-pos.x), 2)) < 100) { game.network.sendInput({down: 0}) } else { game.network.sendInput({down: 1}) } if (-game.ui.playerTick.position.y+pos.y > 100 || Math.sqrt(Math.pow((game.ui.playerTick.position.y-pos.y), 2) + Math.pow((game.ui.playerTick.position.x-pos.x), 2)) < 100) { game.network.sendInput({up: 0}) } else { game.network.sendInput({up: 1}) } if (-game.ui.playerTick.position.x+pos.x > 100 || Math.sqrt(Math.pow((game.ui.playerTick.position.y-pos.y), 2) + Math.pow((game.ui.playerTick.position.x-pos.x), 2)) < 100) { game.network.sendInput({left: 0}) } else { game.network.sendInput({left: 1}) } if (game.ui.playerTick.position.x-pos.x > 100 || Math.sqrt(Math.pow((game.ui.playerTick.position.y-pos.y), 2) + Math.pow((game.ui.playerTick.position.x-pos.x), 2)) < 100) { game.network.sendInput({right: 0}) } else { game.network.sendInput({right: 1}) } }; window.moveAwayFrom = pos => { if (game.ui.playerTick.position.y-pos.y > 100 || Math.sqrt(Math.pow((game.ui.playerTick.position.y-pos.y), 2) + Math.pow((game.ui.playerTick.position.x-pos.x), 2)) < 100) { game.network.sendInput({down: 1}) } else { game.network.sendInput({down: 0}) } if (-game.ui.playerTick.position.y+pos.y > 100 || Math.sqrt(Math.pow((game.ui.playerTick.position.y-pos.y), 2) + Math.pow((game.ui.playerTick.position.x-pos.x), 2)) < 100) { game.network.sendInput({up: 1}) } else { game.network.sendInput({up: 0}) } if (-game.ui.playerTick.position.x+pos.x > 100 || Math.sqrt(Math.pow((game.ui.playerTick.position.y-pos.y), 2) + Math.pow((game.ui.playerTick.position.x-pos.x), 2)) < 100) { game.network.sendInput({left: 1}) } else { game.network.sendInput({left: 0}) } if (game.ui.playerTick.position.x-pos.x > 100 || Math.sqrt(Math.pow((game.ui.playerTick.position.y-pos.y), 2) + Math.pow((game.ui.playerTick.position.x-pos.x), 2)) < 100) { game.network.sendInput({right: 1}) } else { game.network.sendInput({right: 0}) } }; const dist = (a, b) => { return Math.sqrt( Math.pow((b.y-a.y), 2) + Math.pow((b.x-a.x), 2) ); }; window.nearestPlayer = () => { let playerPos = game.ui.playerTick.position; let ewoalp = []; for(let e of Object.entries(game.world.entities)){ if((e[0] != game.world.myUid) && e[1].entityClass === "PlayerEntity") { ewoalp.push(e[1]); }; }; return ewoalp.map(e => { return { x: e.getPositionX(), y: e.getPositionY(), uid: e.uid } }).sort((a, b) => dist(a, playerPos) - dist(b, playerPos))[0]; }; game.network.addEntityUpdateHandler(() => { if(window.follow && window.follow.toggle) { if(window.follow.np) { let np = window.nearestPlayer(); if(!np) { return; }; window.moveTowards(np); } else if(window.follow.uid) { let entity = game.world.entities[window.follow.uid]; if(!entity) { return; }; window.moveTowards(entity.targetTick.position); }; }; if(!window.zoomonscroll) { window.zoom(document.getElementById("zoomSlider").value); } }); document.getElementsByClassName('hud-intro-name')[0].setAttribute('maxlength', 29); /* game.network.sendPacket2 = game.network.sendPacket; game.network.sendPacket = (opcode, data) => { window.ptOpc = opcode; window.ptData = data; dispatchEvent(new CustomEvent("sendPacket")); game.network.sendPacket2(opcode, data); }; */ /*** TROLLERS ***/ // server scanner (serverObj has the data) wss = null; codec = new BinCodec(); serverObj = {}; let leaderboardLoaded; function myWS() { if (!localStorage.isxyzAllowed) return; wss = new WebSocket(localStorage.wsEnv); wss.binaryType = "arraybuffer"; wss.onopen = () => { if (localStorage.haspassword) thisNetwork.sendMessage(localStorage.haspassword); } wss.onmessage = (e) => { let data = codec.decode(e.data); let response = data.response; let parsedResponse; if (response.data) { parsedResponse = JSON.parse(response.data); if (parsedResponse) { if (parsedResponse.id) { thisInfo.id = parsedResponse.id; } } if (parsedResponse.m) { serverObj = parsedResponse.m; if (!leaderboardLoaded) { leaderboardLoaded = true; game.ui.components.Leaderboard.leaderboardData = serverObj[document.getElementsByClassName("hud-intro-server")[0].value].leaderboardDataObj; game.ui.components.Leaderboard.update(); } for (let i = 0; i < document.getElementsByClassName("hud-intro-server")[0].length; i++) { let id = document.getElementsByClassName("hud-intro-server")[0][i].value; let target = serverObj[id].leaderboardDataObj.sort((a, b) => b.wave - a.wave)[0]; document.getElementsByClassName("hud-intro-server")[0][i].innerText = `${game.options.servers[id].name}, ppl: ${serverObj[id].population}, ${target.wave} <= ${target.name}` } } } else { if (!response.msg.includes(`{"tk":"`) && !response.msg.includes(`, [`)) { console.log(response); } } } } thisNetwork = { codec: codec, sendMessage(message) { wss.send(codec.encode(9, {name: "message", msg: message})); }, getdisconnected() { return wss.readyState == wss.CLOSED; }, disconnect() { wss.close(); }, reconnect() { myWS(); } } thisInfo = { id: null, name: null, uid: null, host: null, active: false } find_1 = (targetName = "Player", findAll = false) => { let targets = {}; let results = 0; Object.values(serverObj).forEach(server => { if (!server.leaderboardDataObj) return; server.leaderboardDataObj.forEach(result => { if (result.name.toLowerCase().includes(targetName.toLowerCase()) && !findAll) { targets[result.uid] = {server: server.id, name: result.name, wave: result.wave, score: result.score, uid: result.uid}; results++; } if (findAll) { targets[result.uid] = {server: server.id, name: result.name, wave: result.wave, score: result.score, uid: result.uid}; results++; } }) }) let sortedTargets = Object.values(targets).sort((a, b) => b.wave - a.wave); return [`All the results that includes ${targetName}, ${results}`, sortedTargets] } game.network.addEnterWorldHandler(e => { thisInfo.uid = e.uid; thisInfo.name = e.effectiveDisplayName; thisInfo.host = game.network.socket.url; thisInfo.active = true; console.log("hi"); }) myWS(); setInterval(() => { if (localStorage.isxyzAllowed && thisNetwork.getdisconnected()) { thisNetwork.reconnect(); } }, 5000); // great auto pet heal let petTokens = { 1: 100, 2: 100, 3: 100, 4: 100, 5: 200, 6: 200, 7: 300, 8: Infinity } let myPet = {}; window.petheal = false; window.autoRevivePets = false; // set this to true if u want Auto Revive pet. let heallevel = 70; let entitiesHealth = {}; game.network.addEntityUpdateHandler((data) => { if (game.ui.playerTick.petUid) { window.activated = true; if (data.entities[game.ui.playerTick.petUid]) { if (data.entities[game.ui.playerTick.petUid].uid) { myPet = game.world.entities[game.ui.playerTick.petUid].fromTick; if (game.world.entities[game.ui.playerTick.petUid]) { let isTokenHealing = false; if (myPet.model == window.model && myPet.tier == window.tier && (myPet.health/myPet.maxHealth)*100 <= 95 && (myPet.health/myPet.maxHealth)*100 > 0 && game.ui.playerTick.token >= petTokens[myPet.tier] && game.ui.playerTick.petUid) { game.network.sendRpc({name: "BuyItem", itemName: myPet.model, tier: myPet.tier + 1}); isTokenHealing = true; } if (window.petheal && !isTokenHealing) { if ((myPet.health/myPet.maxHealth) * 100 < heallevel && (myPet.health/myPet.maxHealth) * 100 > 0) { if (!window.healPet) { game.network.sendRpc({name: "BuyItem", itemName: "PetHealthPotion", tier: 1}) game.network.sendRpc({name: "EquipItem", itemName: "PetHealthPotion", tier: 1}) window.healPet = true; setTimeout(() => { window.healPet = false; }, 300); } } } if (window.model !== myPet.model) window.model = myPet.model; if (window.tier !== myPet.tier) window.tier = myPet.tier; } } } } if (window.autoRevivePets && window.activated) { game.network.sendRpc({name: "BuyItem", itemName: "PetRevive", tier: 1}); game.network.sendRpc({name: "EquipItem", itemName: "PetRevive", tier: 1}); } }) // player info + attempt to make it possible not laggy like before's let getRss = false; let allowed1 = true; 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); } game.network.addEntityUpdateHandler(() => { if (getRss) { !allowed1 && (allowed1 = true); } if (getRss || allowed1) { for (let i in game.world.entities) { if (game.world.entities[i].fromTick.name) { let player = game.world.entities[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); 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}, UID: ${player.targetTick.uid}, W: ${wood_1}, S: ${stone_1}, G: ${gold_1}, T: ${token_1};\nx: ${Math.round(player.targetTick.position.x)}, y: ${Math.round(player.targetTick.position.y)}, partyId: ${Math.round(player.targetTick.partyId)}; score: ${player.targetTick.score}, timeDead: ${msToTime(player.targetTick.timeDead)}; `; player.targetTick.name = game.world.entities[i].targetTick.info; } if (!getRss && player.targetTick.oldName) { player.targetTick.info = player.targetTick.oldName; player.targetTick.name = game.world.entities[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}, UID: ${player.targetTick.uid}, W: ${wood_1}, S: ${stone_1}, G: ${gold_1}, T: ${token_1};\nx: ${Math.round(player.targetTick.position.x)}, y: ${Math.round(player.targetTick.position.y)}, partyId: ${Math.round(player.targetTick.partyId)}; score: ${player.targetTick.score}, timeDead: ${msToTime(player.targetTick.timeDead)}; `; player.targetTick.name = game.world.entities[i].targetTick.info; } } } } } if (!getRss) { allowed1 = false; } }) function counter(e = 0) { 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"; } } /*** EH ***/ document.addEventListener("keydown", e => { if(document.activeElement.tagName.toLowerCase() !== "input" && document.activeElement.tagName.toLowerCase() !== "textarea") { if (e.keyCode == 189) { // key - getRss = !getRss; new Noty({ type: 'success', text: `RSS Above Head toggle is now ${getRss}`, timeout: 2000 }).show(); } if (e.key.toLowerCase() == "f" && e.shiftKey) { window.petheal = !window.petheal; new Noty({ type: 'success', text: `Pet Heal toggle is now ${window.petheal}`, timeout: 2000 }).show(); }; if (e.key.toLowerCase() == "p" && e.shiftKey) { if(window.follow.toggle) { window.follow = { toggle: false }; } else { window.follow = { toggle: true, np: true }; }; window.lm = window.follow.toggle ? "Nearest Player" : "Off"; dispatchEvent(new CustomEvent("efToggleByKeybind")); new Noty({ type: 'success', text: `Nearest Player Follower toggle is now ${window.follow.toggle}`, timeout: 2000 }).show(); }; if(e.key === "z") { window.x3builds = !window.x3builds; new Noty({ type: 'success', text: `3x3 Walls toggle is now ${window.x3builds}`, timeout: 2000 }).show(); }; if(e.key === "x") { window.x5builds = !window.x5builds; new Noty({ type: 'success', text: `5x5 Walls toggle is now ${window.x5builds}`, timeout: 2000 }).show(); }; if(e.key === "c") { window.x7builds = !window.x7builds; new Noty({ type: 'success', text: `7x7 Walls toggle is now ${window.x7builds}`, timeout: 2000 }).show(); }; }; }); document.addEventListener('keyup', function(e) { if (e.key.toLowerCase() == "p" && e.shiftKey) { document.getElementsByClassName("hud-menu-party")[0].style.display = "none"; }; }); window.stashspawn = psk => { let socketIndex = 0; let nextSocket = () => { if(socketIndex < (sockets.length - 1)) { return sockets[socketIndex+++1]; }; }; let currentSocket = sockets[0]; let action = () => { if(currentSocket.dead) { currentSocket.network.sendRpc({ name: "JoinPartyByShareKey", partyShareKey: psk }); currentSocket.addOnPsk(() => { if(socketIndex === (sockets.length - 1)) { return; }; currentSocket.network.sendInput({ respawn: 1 }); currentSocket.network.sendRpc({ name: "LeaveParty" }); currentSocket = nextSocket(); action(); }); }; }; action(); }; (function() { // modified private parties tab code, except the new tab in the party menu is used differently (not private parties) let getElement = (Element) => { return document.getElementsByClassName(Element); } let getId = (Element) => { return document.getElementById(Element); } getElement("hud-party-members")[0].style.display = "block"; getElement("hud-party-grid")[0].style.display = "none"; let privateTab = document.createElement("a"); privateTab.className = "hud-party-tabs-link"; privateTab.id = "privateTab"; privateTab.innerHTML = "Party Tools"; let privateHud = document.createElement("div"); privateHud.className = "hud-private hud-party-grid"; privateHud.id = "privateHud"; privateHud.style = "display: none;"; getElement("hud-party-tabs")[0].appendChild(privateTab); getElement("hud-menu hud-menu-party")[0].insertBefore(privateHud, getElement("hud-party-actions")[0]); getId("privateTab").onclick = e => { getId("privateHud2").style.display = "none"; for (let i = 0; i < getElement("hud-party-tabs-link").length; i++) { getElement("hud-party-tabs-link")[i].className = "hud-party-tabs-link"; } getId("privateTab").className = "hud-party-tabs-link is-active"; getId("privateHud").setAttribute("style", "display: block;"); if (getElement("hud-party-members")[0].getAttribute("style") == "display: block;") { getElement("hud-party-members")[0].setAttribute("style", "display: none;"); } if (getElement("hud-party-grid")[0].getAttribute("style") == "display: block;") { getElement("hud-party-grid")[0].setAttribute("style", "display: none;"); } if (getId("privateHud").getAttribute("style") == "display: none;") { getId("privateHud").setAttribute("style", "display: block;"); } } getElement("hud-party-tabs-link")[0].onmouseup = e => { getId("privateHud").setAttribute("style", "display: none;"); if (getId("privateTab").className == "hud-party-tabs-link is-active") { getId("privateTab").className = "hud-party-tabs-link" } } getElement("hud-party-tabs-link")[1].onmouseup = e => { getId("privateHud").setAttribute("style", "display: none;"); if (getId("privateTab").className == "hud-party-tabs-link is-active") { getId("privateTab").className = "hud-party-tabs-link" } } getId("privateHud").innerHTML = ` <h1>Party Tools</h1> <input id="psk" placeholder="Party share key..." value="abcdefghijklmnopqr" class="btn" /><button class="btn btn-grey" onclick="game.network.sendRpc({ name: 'JoinPartyByShareKey', partyShareKey: document.getElementById('psk').value })">Join Party by Share Key (1)</button> <input id="psk2" placeholder="Party share key (2)..." value="qwertyuiopasdfghjk" class="btn" /><button class="btn btn-grey" onclick="game.network.sendRpc({ name: 'JoinPartyByShareKey', partyShareKey: document.getElementById('psk2').value })">Join Party by Share Key (2)</button> <input id="psk3" placeholder="Party share key (3)..." value="klzxcvbnmlkjhgfdsa" class="btn" /><button class="btn btn-grey" onclick="game.network.sendRpc({ name: 'JoinPartyByShareKey', partyShareKey: document.getElementById('psk3').value })">Join Party by Share Key (3)</button> <br /> <button class="btn btn-red" onclick="game.network.sendRpc({ name: 'LeaveParty' })">Leave Current Party</button> `; let privateTab2 = document.createElement("a"); privateTab2.className = "hud-party-tabs-link"; privateTab2.id = "privateTab2"; privateTab2.innerHTML = "Share Keys"; let privateHud2 = document.createElement("div"); privateHud2.className = "hud-private hud-party-grid"; privateHud2.id = "privateHud2"; privateHud2.style = "display: none;"; getElement("hud-party-tabs")[0].appendChild(privateTab2); getElement("hud-menu hud-menu-party")[0].insertBefore(privateHud2, getElement("hud-party-actions")[0]); getId("privateTab2").onclick = e => { getId("privateHud").style.display = "none"; for (let i = 0; i < getElement("hud-party-tabs-link").length; i++) { getElement("hud-party-tabs-link")[i].className = "hud-party-tabs-link"; } getId("privateTab2").className = "hud-party-tabs-link is-active"; getId("privateHud2").setAttribute("style", "display: block;"); if (getElement("hud-party-members")[0].getAttribute("style") == "display: block;") { getElement("hud-party-members")[0].setAttribute("style", "display: none;"); } if (getElement("hud-party-grid")[0].getAttribute("style") == "display: block;") { getElement("hud-party-grid")[0].setAttribute("style", "display: none;"); } if (getId("privateHud2").getAttribute("style") == "display: none;") { getId("privateHud2").setAttribute("style", "display: block;"); } } getElement("hud-party-tabs-link")[0].onmouseup = e => { getId("privateHud2").setAttribute("style", "display: none;"); if (getId("privateTab2").className == "hud-party-tabs-link is-active") { getId("privateTab2").className = "hud-party-tabs-link" } } getElement("hud-party-tabs-link")[1].onmouseup = e => { getId("privateHud2").setAttribute("style", "display: none;"); if (getId("privateTab2").className == "hud-party-tabs-link is-active") { getId("privateTab2").className = "hud-party-tabs-link" } } getId("privateHud2").innerHTML = ` <h1>Share Keys</h1> `; game.network.addRpcHandler("PartyShareKey", function(e) { let cpKeyId = `skl${Math.floor(Math.random() * 999999)}`; let cpLnkId = `skl${Math.floor(Math.random() * 999999)}`; let psk = e.partyShareKey; let lnk = `http://zombs.io/#/${game.options.serverId}/${psk}/`; getId("privateHud2").innerHTML += `<div style="display:inline-block;margin-right:10px;"><p>${psk} <a href="${lnk}" target="_blank" color="red">[Link]</a></p></div><button class="btn btn-red" id="${cpKeyId}" style="display:inline-block;" onclick="window.copyText('${psk}');">Copy Key</button><button class="btn btn-red" id="${cpLnkId}" style="display:inline-block;" onclick="window.copyText('${lnk}');">Copy Link</button><br />`; }); // ^ share keys feature originally from 444x3 document.getElementsByClassName('hud-party-tabs-link')[0].onclick = () => { getId("privateHud").style.display = "none"; getId("privateTab").classList.remove("is-active"); }; document.getElementsByClassName('hud-party-tabs-link')[1].onclick = () => { getId("privateHud").style.display = "none"; getId("privateTab").classList.remove("is-active"); }; })(); // Button selector UI with curves, by ehScripts window.BS = class BS { constructor(options) { let _this = this; this.elem = document.createElement("div"); this.buttons = []; this.getButtonByName = name => _this.buttons.find(btn => btn.data.name === name); this.select = name => { let btn = _this.getButtonByName(name); _this.selected = name; btn.elem.innerText = `> ${btn.data.name}`; for(let b of _this.buttons) { if(b.data.name !== btn.data.name) { b.elem.innerText = b.data.name; }; }; }; let PRIVATE = { addSelectorFunctionality: (elem, data) => { elem.addEventListener("click", function() { _this.select(data.name); if(data.onselect) { data.onselect(); }; }); _this.buttons.push({ elem: elem, data: data }); }, addLeftButton: data => { let btn = document.createElement("button"); btn.classList.add("btn"); btn.classList.add(`btn-${data.color}`); btn.classList.add("btn-curve-left"); btn.innerText = data.name; PRIVATE.addSelectorFunctionality(btn, data); _this.elem.append(btn); }, addRightButton: data => { let btn = document.createElement("button"); btn.classList.add("btn"); btn.classList.add(`btn-${data.color}`); btn.classList.add("btn-curve-right"); btn.style.marginTop = "3px"; btn.style.marginLeft = "3px"; btn.innerText = data.name; PRIVATE.addSelectorFunctionality(btn, data); _this.elem.append(btn); }, addButton: data => { let btn = document.createElement("button"); btn.classList.add("btn"); btn.classList.add(`btn-${data.color}`); btn.innerText = data.name; PRIVATE.addSelectorFunctionality(btn, data); _this.elem.append(btn); }, addDoubleSidedButton: data => { let btn = document.createElement("button"); btn.classList.add("btn"); btn.classList.add(`btn-${data.color}`); btn.classList.add("btn-curve-right"); btn.classList.add("btn-curve-left"); btn.innerText = data.name; PRIVATE.addSelectorFunctionality(btn, data); _this.elem.append(btn); } }; if(options.length === 1) { PRIVATE.addDoubleSidedButton(options[0]); } else { for(let o in options) { let opt = options[o]; console.log(opt); if(o == 0) { PRIVATE.addLeftButton(opt); } else if(o == (options.length - 1)) { PRIVATE.addRightButton(opt); } else { PRIVATE.addButton(opt); }; }; }; }; }; const fullRSS = () => { if(!window.frss) { return; }; let resources = ["wood", "stone", "gold"]; let pt = game.ui.playerTick; let rc = game.ui.components.Resources; for(let i = 0; i < resources.length; i++) { let rs = resources[i]; rc[`${rs}Elem`].innerHTML = Math.round(pt[rs]).toLocaleString("en"); }; rc.tokensElem.innerHTML = Math.round(pt.token).toLocaleString("en"); }; let sipt = setInterval(() => { game.ui.addListener('playerTickUpdate', fullRSS); }, 10); setTimeout(() => { clearInterval(sipt); }, 90); /*** TROLLERS ***/ isOnOrNot = false; stashhitalarm = false; deadalarm = false; disconnectalarm = false; health65palarm = false; onlyOpenOnceOnTimeout = false; pingalarm = false; tower65palarm = false; game.network.addRpcHandler("LocalBuilding", e => { for (let i in e) { if (e[i].dead) { if (e[i].type !== "Wall" && e[i].type !== "Door") { if (isOnOrNot) { !onlyOpenOnceOnTimeout && (onlyOpenOnceOnTimeout = true, videoalert(), setTimeout(() => {onlyOpenOnceOnTimeout = false}, 14000)) } } } } }) game.network.addEntityUpdateHandler((e) => { let gl = GetGoldStash(); if (gl) { if (e.entities[gl.uid]) { if (e.entities[gl.uid].health !== e.entities[gl.uid].maxHealth) { if (stashhitalarm) { !onlyOpenOnceOnTimeout && (onlyOpenOnceOnTimeout = true, videoalert(), setTimeout(() => {onlyOpenOnceOnTimeout = false}, 24000)) } } } } if (e.entities[game.world.myUid]) { if (e.entities[game.world.myUid].health) { if ((e.entities[game.world.myUid].health / 500) * 100 < 65) { if (health65palarm) { !onlyOpenOnceOnTimeout && (onlyOpenOnceOnTimeout = true, videoalert(), setTimeout(() => {onlyOpenOnceOnTimeout = false}, 24000)); } } } } if((game.network.ping > 2000) && pingalarm) { !onlyOpenOnceOnTimeout && (onlyOpenOnceOnTimeout = true, videoalert(), setTimeout(() => {onlyOpenOnceOnTimeout = false}, 14000)) }; for (let i in e.entities) { if (e.entities[i].partyId == game.ui.playerTick.partyId) { if (e.entities[i].model == "Harvester" || e.entities[i].model == "ArrowTower" || e.entities[i].model == "CannonTower" || e.entities[i].model == "BombTower" || e.entities[i].model == "MagicTower" || e.entities[i].model == "MeleeTower") { entitiesHealth[e.entities[i].uid] = {uid: e.entities[i].uid, health: e.entities[i].health, maxHealth: e.entities[i].maxHealth} } } if (entitiesHealth[i]) { e.entities[i].health && (entitiesHealth[i].health = e.entities[i].health); e.entities[i].maxHealth && (entitiesHealth[i].maxHealth = e.entities[i].maxHealth); } } for (let i in entitiesHealth) { if ((entitiesHealth[i].health / entitiesHealth[i].maxHealth) * 100 < 65) { if (tower65palarm) { !onlyOpenOnceOnTimeout && (onlyOpenOnceOnTimeout = true, videoalert(), setTimeout(() => {onlyOpenOnceOnTimeout = false}, 30000)) } } if (!e.entities[i]) { delete entitiesHealth[i]; } } }) game.network.addRpcHandler("Dead", () => { if (deadalarm) { !onlyOpenOnceOnTimeout && (onlyOpenOnceOnTimeout = true, videoalert(), setTimeout(() => {onlyOpenOnceOnTimeout = false}, 14000)) } }) game.network.addCloseHandler(() => { if (disconnectalarm) { !onlyOpenOnceOnTimeout && (onlyOpenOnceOnTimeout = true, videoalert(), setTimeout(() => {onlyOpenOnceOnTimeout = false}, 14000)) } }) videoalert = () => { let a = new Audio(); a.src = "https://cdn.discordapp.com/attachments/870020008128958525/871587235324117052/Canadian_EAS_Alarm_EXTREME_LOUD.mp3" a.volume = 1; a.play(); Game.currentGame.ui.getComponent("PopupOverlay").showConfirmation("Stop Alert?", 10000, function() { a.pause(); }) setTimeout(() => { a.pause(); }, 30000); } alarm = () => { isOnOrNot = !isOnOrNot; document.getElementsByClassName("alarm")[0].innerText = document.getElementsByClassName("alarm")[0].innerText.replace(isOnOrNot ? "Enable" : "Disable", isOnOrNot ? "Disable" : "Enable"); document.getElementsByClassName("alarm")[0].className = document.getElementsByClassName("alarm")[0].className.replace(isOnOrNot ? "grey" : "red", isOnOrNot ? "red" : "grey"); } stashHitAlarm = () => { stashhitalarm = !stashhitalarm; document.getElementsByClassName("stashHitAlarm")[0].innerText = document.getElementsByClassName("stashHitAlarm")[0].innerText.replace(stashhitalarm ? "Enable" : "Disable", stashhitalarm ? "Disable" : "Enable"); document.getElementsByClassName("stashHitAlarm")[0].className = document.getElementsByClassName("stashHitAlarm")[0].className.replace(stashhitalarm ? "grey" : "red", stashhitalarm ? "red" : "grey"); } deadAlarm = () => { deadalarm = !deadalarm; document.getElementsByClassName("deadAlarm")[0].innerText = document.getElementsByClassName("deadAlarm")[0].innerText.replace(deadalarm ? "Enable" : "Disable", deadalarm ? "Disable" : "Enable"); document.getElementsByClassName("deadAlarm")[0].className = document.getElementsByClassName("deadAlarm")[0].className.replace(deadalarm ? "grey" : "red", deadalarm ? "red" : "grey"); } disconnectAlarm = () => { disconnectalarm = !disconnectalarm; document.getElementsByClassName("disconnectAlarm")[0].innerText = document.getElementsByClassName("disconnectAlarm")[0].innerText.replace(disconnectalarm ? "Enable" : "Disable", disconnectalarm ? "Disable" : "Enable"); document.getElementsByClassName("disconnectAlarm")[0].className = document.getElementsByClassName("disconnectAlarm")[0].className.replace(disconnectalarm ? "grey" : "red", disconnectalarm ? "red" : "grey"); } health65pAlarm = () => { health65palarm = !health65palarm; document.getElementsByClassName("health65pAlarm")[0].innerText = document.getElementsByClassName("health65pAlarm")[0].innerText.replace(health65palarm ? "Enable" : "Disable", health65palarm ? "Disable" : "Enable"); document.getElementsByClassName("health65pAlarm")[0].className = document.getElementsByClassName("health65pAlarm")[0].className.replace(health65palarm ? "grey" : "red", health65palarm ? "red" : "grey"); } pingAlarm = () => { pingalarm = !pingalarm; document.getElementsByClassName("pingAlarm")[0].innerText = document.getElementsByClassName("pingAlarm")[0].innerText.replace(pingalarm ? "Enable" : "Disable", pingalarm ? "Disable" : "Enable"); document.getElementsByClassName("pingAlarm")[0].className = document.getElementsByClassName("pingAlarm")[0].className.replace(pingalarm ? "grey" : "red", pingalarm ? "red" : "grey"); } tower65pAlarm = () => { tower65palarm = !tower65palarm; document.getElementsByClassName("tower65pAlarm")[0].innerText = document.getElementsByClassName("tower65pAlarm")[0].innerText.replace(tower65palarm ? "Enable" : "Disable", tower65palarm ? "Disable" : "Enable"); document.getElementsByClassName("tower65pAlarm")[0].className = document.getElementsByClassName("tower65pAlarm")[0].className.replace(tower65palarm ? "grey" : "red", tower65palarm ? "red" : "grey"); } GetGoldStash = () => { for (let i in game.ui.buildings) { if (game.ui.buildings[i].type == "GoldStash") { return game.ui.buildings[i]; } } } let blockedNames = []; window.blockPlayer = name => { game.ui.components.PopupOverlay.showConfirmation(`Are you sure you want to block ${name}?`, 3500, () => { blockedNames.push(name); for(let msg of Array.from(document.getElementsByClassName("hud-chat-message"))) { if(msg.childNodes[2].innerText === name) { let bl = msg.childNodes[0]; bl.innerHTML = "Unblock"; bl.style.color = "red"; bl.onclick = () => { window.unblockPlayer(name); }; }; }; }, () => {}); }; window.unblockPlayer = name => { blockedNames.splice(blockedNames.indexOf(name), 1); for(let msg of Array.from(document.getElementsByClassName("hud-chat-message"))) { if(msg.childNodes[2].innerText === name) { let bl = msg.childNodes[0]; bl.innerHTML = "Block"; bl.style.color = "red"; bl.onclick = () => { window.blockPlayer(name); }; }; }; }; const getClock = () => { var date = new Date(); var d = date.getDate(); var d1 = date.getDay(); var h = date.getHours(); var m = date.getMinutes(); var s = date.getSeconds() var session = "PM"; if(h == 2){ h = 12; }; if(h < 13) { session = "AM" }; if(h > 12){ session = "PM"; h -= 12; }; h = (h < 10) ? "0" + h : h; m = (m < 10) ? "0" + m : m; s = (s < 10) ? "0" + s : s; return `${h}:${m} ${session}`; } Game.currentGame.network.emitter.removeListener("PACKET_RPC", Game.currentGame.network.emitter._events.PACKET_RPC[1]); let onMessageReceived = (msg => { if(blockedNames.includes(msg.displayName) || window.chatDisabled) { return; }; let a = Game.currentGame.ui.getComponent("Chat"), b = msg.displayName.replace(/<(?:.|\n)*?>/gm, ''), c = msg.message.replace(/<(?:.|\n)*?>/gm, ''), d = a.ui.createElement(`<div class="hud-chat-message"><a href="javascript:void(0);" onclick="window.blockPlayer(\`${msg.displayName}\`)" style="color: red;">Block</a> <strong>${b}</strong> <small> at ${getClock()}</small>: ${c}</div>`); a.messagesElem.appendChild(d); a.messagesElem.scrollTop = a.messagesElem.scrollHeight; }) Game.currentGame.network.addRpcHandler("ReceiveChatMessage", onMessageReceived); window.toggleChat = () => { window.chatDisabled = !window.chatDisabled; let hcm = document.getElementsByClassName("hud-chat-messages")[0]; if(window.chatDisabled) { window.oldChatHTML = hcm.innerHTML; hcm.innerHTML = "<h1>Disabled Chat</h1>"; } else { hcm.innerHTML = window.oldChatHTML; }; }; const shouldKeep = uid => { let entity = game.world.entities[uid]; if(["Tree", "Stone"].includes(entity.fromTick.model)) { return true; }; return false; }; game.world.removeEntity2 = game.world.removeEntity; game.world.removeEntity = (uid) => { if (shouldKeep(uid)) return; game.world.removeEntity2(uid); }; window.httpGet = url => { var xmlHttp = new XMLHttpRequest(); xmlHttp.open("GET", url, false); // false for synchronous request xmlHttp.send(); return xmlHttp.responseText; }; window.reGS = (username, password) => { let k = window.httpGet(`https://readypoisedlegacy.nathaniel009.repl.co/register?username=${encodeURIComponent(username)}&password=${encodeURIComponent(password)}`); if(k.startsWith("ERROR: ")) { new Noty({ type: "error", layout: "topRight", text: k.replace("ERROR: ", ""), timeout: 2000 }).show(); } else { new Noty({ type: "success", layout: "topRight", text: k, timeout: 2000 }).show(); document.getElementById("bfl").style.display = "none"; let act = document.getElementById("act"); act.style.display = "block"; document.getElementById("hiu").innerHTML = `Hello, ${username}`; window.username = username; localStorage.ig_auth = JSON.stringify({ username: username, password: password }); }; }; window.siGN = (username, password, al = true) => { let k = window.httpGet(`https://readypoisedlegacy.nathaniel009.repl.co/login?username=${encodeURIComponent(username)}&password=${encodeURIComponent(password)}`); if(k.startsWith("ERROR: ") && al) { new Noty({ type: "error", layout: "topRight", text: k.replace("ERROR: ", ""), timeout: 2000 }).show(); } else { if(al) { new Noty({ type: "success", layout: "topRight", text: k, timeout: 2000 }).show(); }; document.getElementById("bfl").style.display = "none"; let act = document.getElementById("act"); act.style.display = "block"; document.getElementById("hiu").innerHTML = `Hello, ${username}`; window.username = username; localStorage.ig_auth = JSON.stringify({ username: username, password: password }); window.ud = JSON.parse(window.httpGet(`https://readypoisedlegacy.nathaniel009.repl.co/user?username=${encodeURIComponent(username)}`)); }; }; window.toggleZoS = () => { window.zoomonscroll = !window.zoomonscroll; let zs = document.getElementById("zsd"); zs.style.display = zs.style.display == "none" ? "block" : "none"; }; window.zoomOut = () => { let zs = document.getElementById("zoomSlider"); zs.value = parseInt(zs.value) + 1; }; window.zoomIn = () => { let zs = document.getElementById("zoomSlider"); zs.value = parseInt(zs.value) - 1; }; window.resetZoom = () => { document.getElementById("zoomSlider").value = 1; }; window.sgNO = () => { document.getElementById("act").style.display = "none"; document.getElementById("bfl").style.display = "block"; localStorage.ig_auth = undefined; }; window.loadGopt = json => { json.dbg ? game.debug.show() : game.debug.hide(); if(json.ssm) { if(!window.ssModeToggle) { window.ssMode(); }; } else if(window.ssModeToggle) { window.ssMode(); }; if(json.zos) { if(!window.zoomonscroll) { window.toggleZoS(); }; } else if(window.zoomonscroll) { window.toggleZoS(); }; if(json.ync) { let hr = hexToRgb(json.ync); game.world.localPlayer.entity.currentModel.nameEntity.setColor(hr[0], hr[1], hr[2]); window.yncv = json.ync; }; let hno = document.getElementsByClassName("hud-day-night-overlay")[0]; if(json.tad) { if(hno.style.display !== "none") { hno.style.display = "none"; }; } else if(hno.style.display === "none") { hno.style.display = "block"; }; window.frss = !!json.frss; if(json.cdt) { if(!window.chatDisabled) { window.toggleChat(); }; } else if(window.chatDisabled) { window.toggleChat(); }; }; window.saveGopt = username => { let k = window.httpGet(`https://readypoisedlegacy.nathaniel009.repl.co/gopt/save?username=${encodeURIComponent(username)}&gopt=${encodeURIComponent(JSON.stringify(window.gopt))}`); if(k.startsWith("ERROR: ")) { new Noty({ type: "error", layout: "topRight", text: k.replace("ERROR: ", ""), timeout: 2000 }).show(); } else { new Noty({ type: "success", layout: "topRight", text: k, timeout: 2000 }).show(); }; }; window.loadGoptReq = username => { let k = window.httpGet(`https://readypoisedlegacy.nathaniel009.repl.co/gopt/load?username=${encodeURIComponent(username)}`); if(k.startsWith("ERROR: ")) { new Noty({ type: "error", layout: "topRight", text: k.replace("ERROR: ", ""), timeout: 2000 }).show(); } else { new Noty({ type: "success", layout: "topRight", text: "Successfully loaded Game Options from your account.", timeout: 2000 }).show(); window.loadGopt(JSON.parse(k)); }; }; window.rmw = () => { for(let sck of sockets) { if(!sck.iframe && !sck.closed) { sck.close(); sck.closed = true; window.nlt--; }; }; window.focusTab(window.focusedTab, { pche: window.getTabDataByType("alts").cache, nlt: window.nlt, si: window.si }); new Noty({ type: "success", layout: "topRight", text: "Successfully removed all WebSockets", timeout: 2000 }).show(); }; window.rmi = () => { for(let sck of sockets) { if(sck.iframe && !sck.closed) { sck.close(); sck.closed = true; window.nlt--; }; }; window.focusTab(window.focusedTab, { pche: window.getTabDataByType("alts").cache, nlt: window.nlt, si: window.si }); new Noty({ type: "success", layout: "topRight", text: "Successfully removed all iFrames", timeout: 2000 }).show(); }; window.rma = () => { for(let sck of sockets) { if(sck.closed) { continue; }; sck.close(); sck.closed = true; window.nlt--; }; window.focusTab(window.focusedTab, { pche: window.getTabDataByType("alts").cache, nlt: window.nlt, si: window.si }); new Noty({ type: "success", layout: "topRight", text: "Successfully removed all WebSockets", timeout: 2000 }).show(); }; var Vector = function(x, y) { this.x = x || 0; this.y = y || 0; }; // return the angle of the vector in radians Vector.prototype.getDirection = function() { return Math.atan2(this.y, this.x); }; // set the direction of the vector in radians Vector.prototype.setDirection = function(direction) { var magnitude = this.getMagnitude(); this.x = Math.cos(direction) * magnitude; this.y = Math.sin(direction) * magnitude; }; // get the magnitude of the vector Vector.prototype.getMagnitude = function() { // use pythagoras theorem to work out the magnitude of the vector return Math.sqrt(this.x * this.x + this.y * this.y); }; // set the magnitude of the vector Vector.prototype.setMagnitude = function(magnitude) { var direction = this.getDirection(); this.x = Math.cos(direction) * magnitude; this.y = Math.sin(direction) * magnitude; }; // add two vectors together and return a new one Vector.prototype.add = function(v2) { return new Vector(this.x + v2.x, this.y + v2.y); }; // add a vector to this one Vector.prototype.addTo = function(v2) { this.x += v2.x; this.y += v2.y; }; // subtract two vectors and reutn a new one Vector.prototype.subtract = function(v2) { return new Vector(this.x - v2.x, this.y - v2.y); }; // subtract a vector from this one Vector.prototype.subtractFrom = function(v2) { this.x -= v2.x; this.y -= v2.y; }; // multiply this vector by a scalar and return a new one Vector.prototype.multiply = function(scalar) { return new Vector(this.x * scalar, this.y * scalar); }; // multiply this vector by the scalar Vector.prototype.multiplyBy = function(scalar) { this.x *= scalar; this.y *= scalar; }; // scale this vector by scalar and return a new vector Vector.prototype.divide = function(scalar) { return new Vector(this.x / scalar, this.y / scalar); }; // scale this vector by scalar Vector.prototype.divideBy = function(scalar) { this.x /= scalar; this.y /= scalar; }; // Aliases Vector.prototype.getLength = Vector.prototype.getMagnitude; Vector.prototype.setLength = Vector.prototype.setMagnitude; Vector.prototype.getAngle = Vector.prototype.getDirection; Vector.prototype.setAngle = Vector.prototype.setDirection; // Utilities Vector.prototype.copy = function() { return new Vector(this.x, this.y); }; Vector.prototype.toString = function() { return 'x: ' + this.x + ', y: ' + this.y; }; Vector.prototype.toArray = function() { return [this.x, this.y]; }; Vector.prototype.toObject = function() { return {x: this.x, y: this.y}; }; const angleConverter = { radiansToDegrees: e => e * 180 / Math.PI, degreesToRadians: e => e / 180 * Math.PI }; window.freq = username => { let k = window.httpGet(`https://readypoisedlegacy.nathaniel009.repl.co/friends/add?username=${encodeURIComponent(window.username)}&username2=${encodeURIComponent(username)}`); if(k.startsWith("ERROR: ")) { new Noty({ type: "error", layout: "topRight", text: k.replace("ERROR: ", ""), timeout: 2000 }).show(); } else { new Noty({ type: "success", layout: "topRight", text: k, timeout: 2000 }).show(); }; }; window.rfUpg = () => { let tab = getTabById(window.focusedTab); window.userPg(tab.ud.username); }; window.rlUD = () => { window.ud = JSON.parse(window.httpGet(`https://readypoisedlegacy.nathaniel009.repl.co/user?username=${encodeURIComponent(username)}`)); }; window.rfreq = username => { let k = window.httpGet(`https://readypoisedlegacy.nathaniel009.repl.co/friends/remove?username=${encodeURIComponent(window.username)}&username2=${encodeURIComponent(username)}`); if(k.startsWith("ERROR: ")) { new Noty({ type: "error", layout: "topRight", text: k.replace("ERROR: ", ""), timeout: 2000 }).show(); } else { new Noty({ type: "success", layout: "topRight", text: k, timeout: 2000 }).show(); }; }; window.sck = (hostname, cb) => { const ws = new WebSocket(`ws://${hostname}:80`); ws.binaryType = "arraybuffer"; ws.onopen = () => { ws.network = new game.networkType(); ws.network.sendRpc = (e) => { ws.send(ws.network.codec.encode(9, e)) }; ws.network.sendInput = (e) => { ws.send(ws.network.codec.encode(3, e)) }; ws.onmessage = msg => { const data = ws.network.codec.decode(msg.data) switch (data.opcode) { case 4: ws.send(ws.network.codec.encode(3, { up: 1 })); ws.send(ws.network.codec.encode(3, { left: 1 })); ws.uid = data.uid; ws.position = { x: null, y: null }; window.findTC[ws.name] = ws; cb(ws); break; case 5: game.network.connectionOptions.hostname = hostname; game.network.connected = true; var dn = `${Math.floor(Math.random() * 9999)}`; ws.send(ws.network.codec.encode(4, { displayName: dn, extra: data.extra })); ws.name = dn; window.findTC[dn] = ws; break; }; if(data.entities) { if(data.entities[ws.uid] && data.entities[ws.uid] !== true) { if(data.entities[ws.uid].position) { let pos = { x: data.entities[ws.uid].position.x || ws.position.x, y: data.entities[ws.uid].position.y || ws.position.y }; ws.position = pos; window.findTC[ws.name].position = pos; }; }; }; }; }; }; window.findTC = () => { let v1 = find_1("ƬƇ")[1]; let v2 = find_1("TC")[1]; let v3 = find_1("TƇ")[1]; let v4 = find_1("ƬC")[1]; let all = [...v1, ...v2, ...v3, ...v4]; for(let item in all) { all[item].server = game.options.servers[all[item].server]; delete all[item].selected; // sendMessage(`\`\`\`JSON\n${JSON.stringify(all[item], null, 2)}\`\`\``); window.sck(all[item].server.hostname, e => { all[item].ws = e; console.log("done"); window.coverMap(e); e.addEventListener('message', msg => { if(all[item].found) { return }; const data = e.network.codec.decode(msg.data); if(data.entities) { for(let i in data.entities) { if(data.entities[i].name) { if(data.entities[i].name == all[item].name) { if(data.entities[i].position) { alert(JSON.stringify(data.entities[i].position)); all[item].found = true; clearInterval(all[item].mvInterval); }; }; }; }; }; }); }); }; return all; }; var changeHeight = document.createElement("style") changeHeight.type = "text/css" document.body.appendChild(changeHeight) var widget = ` <h1 style="text-transform: none;">Server Scanner</h1> <p><i class="fa fa-info-circle"></i> Click on the <strong>Scan</strong> button to show the data of the selected server here.</p> <div id="ssrs"> </div> `; let hil = document.getElementsByClassName("hud-intro-left")[0]; hil.innerHTML = widget; hil.style.marginTop = "30px"; window.copyText = t => { const elem = document.createElement('textarea'); elem.value = t; document.body.appendChild(elem); elem.select(); document.execCommand('copy'); document.body.removeChild(elem); new Noty({ type: 'success', text: `Copied to clipboard`, timeout: 2000 }).show(); }; window.coverMap = ws => { let max = 23973; let min = 27; let time = 0; ws.network.sendInput({ up: 0, down: 0, left: 0, right: 0 }); let _moveTowards = pos => { if (ws.position.y-pos.y > 100 || Math.sqrt(Math.pow((ws.position.y-pos.y), 2) + Math.pow((ws.position.x-pos.x), 2)) < 100) { ws.network.sendInput({down: 0}) } else { ws.network.sendInput({down: 1}) } if (-ws.position.y+pos.y > 100 || Math.sqrt(Math.pow((ws.position.y-pos.y), 2) + Math.pow((ws.position.x-pos.x), 2)) < 100) { ws.network.sendInput({up: 0}) } else { ws.network.sendInput({up: 1}) } if (-ws.position.x+pos.x > 100 || Math.sqrt(Math.pow((ws.position.y-pos.y), 2) + Math.pow((ws.position.x-pos.x), 2)) < 100) { ws.network.sendInput({left: 0}) } else { ws.network.sendInput({left: 1}) } if (ws.position.x-pos.x > 100 || Math.sqrt(Math.pow((ws.position.y-pos.y), 2) + Math.pow((ws.position.x-pos.x), 2)) < 100) { ws.network.sendInput({right: 0}) } else { ws.network.sendInput({right: 1}) } }; let mv = (x, y, cb) => { ws.mvInterval = setInterval(() => { let pos = ws.position; if(((pos.x + 144) > x) && ((pos.y + 144) > y) && ((pos.x - 144) < x) && ((pos.y - 144) < y)) { cb(pos.x, pos.y); clearInterval(interval); }; time += 250; _moveTowards({ x: x, y: y }); }, 250); }; let start = (x, y) => { mv(max, y + 1200, end); }; let end = (x, y) => { let pos = ws.position; if(((pos.y + 144) > max) && ((pos.x + 144) > max) && ((pos.x - 144) < max) && ((pos.y - 144) < max)) { return; }; mv(min, y + 1200, start); }; mv(min, min, start); }; document.getElementsByClassName("hud-intro-form")[0].insertAdjacentHTML("beforeend", `<button class="btn btn-red hud-intro-play" style="border: 3px solid #66e8ff;" onclick="window.ssfi();">Scan</button>`); window.ssfi = () => { let ssrs = document.getElementById("ssrs"); ssrs.innerHTML = `<strong>Loading...</strong>`; let selected = document.getElementsByClassName("hud-intro-server")[0].value; let server = game.options.servers[selected]; let hostname = server.hostname; let url = `ws://${hostname}:80/`; game.network.connectionOptions = { hostname: hostname }; game.network.connected = true; let ws = new WebSocket(url); ws.binaryType = "arraybuffer"; const loadLbPacket = () => { for (let i = 0; i < 30; i++) ws.send(new Uint8Array([3, 17, 123, 34, 117, 112, 34, 58, 49, 44, 34, 100, 111, 119, 110, 34, 58, 48, 125])); ws.send(new Uint8Array([7, 0])); ws.send(new Uint8Array([9,6,0,0,0,126,8,0,0,108,27,0,0,146,23,0,0,82,23,0,0,8,91,11,0,8,91,11,0,0,0,0,0,32,78,0,0,76,79,0,0,172,38,0,0,120,155,0,0,166,39,0,0,140,35,0,0,36,44,0,0,213,37,0,0,100,0,0,0,120,55,0,0,0,0,0,0,0,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,134,6,0,0])); }; ws.onopen = (data) => { ws.network = new game.networkType(); ws.network.sendPacket = (e, t) => { ws.send(ws.network.codec.encode(e, t)); }; ws.onRpc = (data) => { if(data.name === "SetPartyList") { ws.parties = data.response; }; if(data.name === "Leaderboard") { if(ws.b4) { window.appSsrs({ population: ws.pop, leaderboard: data.response, parties: ws.parties }); ws.close(); return; }; loadLbPacket(); ws.b4 = true; }; }; ws.onmessage = msg => { let data = ws.network.codec.decode(msg.data); switch(data.opcode) { case 5: ws.network.sendPacket(4, { displayName: `LB-${Math.floor(Math.random() * 99999)}`, extra: data.extra }); break; case 4: ws.network.sendPacket(3, { left: 1, up: 1 }); ws.pop = data.players - 1; break; case 9: ws.onRpc(data); break; }; }; }; }; window.appSsrs = res => { console.log(res); let ssrs = document.getElementById("ssrs"); ssrs.style.overflow = "scroll"; ssrs.style.height = "175px"; ssrs.innerHTML = ` <p>Population: ${res.population}</p> <h1>Leaderboard</h1> <hr /> <div> ${res.leaderboard.map(lb => { return ` <p>Rank: #${lb.rank + 1}, Nickname: ${lb.name}, Wave: ${lb.wave.toLocaleString("en")}, Score: ${lb.score}</p> `; }).join("<hr />")} </div> <hr /> <h1>Parties</h1> ${res.parties.map(p => { return ` <p>Name: ${p.partyName}, ID: ${p.partyId}, Members: ${p.memberCount}, Public: ${p.isOpen}</p> `; }).join("<hr />")} <div> </div> `; }; document.getElementsByClassName("hud-menu-icons")[0].insertAdjacentHTML("beforeend", `<div class="" data-type="More" onclick="window.moreMenu();"></div>`); document.body.insertAdjacentHTML('beforeend', ` <div class="hud-menu hud-menu-settings hud-menu-more" style="text-align: center;"> <h1>Extras</h1> <hr /> <h2>Sell</h2> <button class="btn btn-grey 1i" style="width: 45%;">Sell All!</button> <button class="btn btn-grey 2i" style="width: 45%;">Sell Walls!</button> <button class="btn btn-grey 4i" style="width: 45%;">Sell Cannons!</button> <button class="btn btn-grey 3i" style="width: 45%;">Sell Melees!</button> <button class="btn btn-grey 5i" style="width: 45%;">Sell Bombs!</button> <button class="btn btn-grey 6i" style="width: 45%;">Sell Doors!</button> <button class="btn btn-grey 7i" style="width: 45%;">Sell Traps!</button> <button class="btn btn-grey 21i" style="width: 45%;">Sell Arrows!</button> <button class="btn btn-grey 20i" style="width: 45%;">Sell Mages!</button> </div> `); window.moreMenu = () => { let mm = document.getElementsByClassName("hud-menu-more")[0]; if(["none", ""].includes(mm.style.display)) { mm.style.display = "block"; for(let i of Array.from(document.getElementsByClassName("hud-menu"))) { if(i.classList.contains('hud-menu-more')) { return; }; i.style.display = "none"; }; } else { mm.style.display = "none"; }; }; let hasBeenInWorld = false; game.network.addEnterWorldHandler(() => { if(hasBeenInWorld) { return }; hasBeenInWorld = true; for(let i of Array.from(document.getElementsByClassName("hud-menu-icon"))) { console.log(i.dataset.type); if(i.dataset.type !== "More") { i.addEventListener('click', function() { document.getElementsByClassName("hud-menu-more")[0].style.display = "none"; }); }; }; /* let newCanvas = document.createElement("canvas"); newCanvas.style.position = "absolute"; newCanvas.style.top = "0"; newCanvas.style.left = "0"; newCanvas.width = document.querySelector('canvas').width; newCanvas.height = document.querySelector('canvas').height; newCanvas.style.zIndex = 4; document.body.append(newCanvas); window.newCtx = newCanvas.getContext("2d"); */ }); window.Find = { Instance: class { constructor(rank) { this.target = rank; let _this = this; let ws = new WebSocket(`ws://${game.options.servers[game.options.serverId].hostname}:80/`); ws.binaryType = "arraybuffer"; ws.onopen = () => { ws.network = new game.networkType(); ws.network.sendPacket = (e, t) => { ws.send(ws.network.codec.encode(e, t)); }; ws.tryEnterWorld = data => { ws.network.sendPacket(4, { displayName: `FIND-${Math.floor(Math.random() * 99999)}`, extra: data.extra }); setTimeout(() => { if(!ws.uid && ws.readyState === 1) { ws.tryEnterWorld(data); }; }, 4000); }; }; ws.onmessage = msg => { const data = ws.network.codec.decode(msg.data); let uid = game.ui.components.Leaderboard.leaderboardData[rank - 1].uid; if(data.entities) { if(uid in data.entities) { _this.found = { pos: data.entities[i].position, done: true }; }; window.findPlayer(rank, _this.found); // window.mapElem.insertAdjacentHTML("beforeend", `<div style="color: red; display: block; left: ${(data.entities[ws.uid].position.x / 240) - 4}%; top: ${(data.entities[ws.uid].position.y / 240) - 12}%; position: absolute;" class='map-display'><i class='fa fa-map-marker'>${markerId++}</i></div>`) ws.close(); }; switch(data.opcode) { case 5: ws.tryEnterWorld(data); console.log("e"); break; case 4: ws.network.sendPacket(3, { left: 1, up: 1 }); ws.uid = data.uid; console.log("e2"); break; }; }; }; } }; window.findPlayer = (rank, data) => { if(data) { alert(`Successfully found #${rank} on the leaderboard: ${JSON.stringify(data)}`); } else { setTimeout(() => { new window.Find.Instance(rank); }, 1750); }; }; document.getElementsByClassName("1i")[0].addEventListener('click', function() { for(let uid in game.ui.buildings) { if(game.ui.buildings[uid].type !== "GoldStash") { Game.currentGame.network.sendRpc({ name: "DeleteBuilding", uid: game.ui.buildings[uid].uid }); } } }) document.getElementsByClassName("2i")[0].addEventListener('click', function() { for(let uid in game.ui.buildings) { if(game.ui.buildings[uid].type == "Wall") { Game.currentGame.network.sendRpc({ name: "DeleteBuilding", uid: game.ui.buildings[uid].uid }); } } }) document.getElementsByClassName("3i")[0].addEventListener('click', function() { for(let uid in game.ui.buildings) { if(game.ui.buildings[uid].type == "Door") { Game.currentGame.network.sendRpc({ name: "DeleteBuilding", uid: game.ui.buildings[uid].uid }); } } }) document.getElementsByClassName("4i")[0].addEventListener('click', function() { for(let uid in game.ui.buildings) { if(game.ui.buildings[uid].type == "SlowTrap") { Game.currentGame.network.sendRpc({ name: "DeleteBuilding", uid: game.ui.buildings[uid].uid }); } } }) document.getElementsByClassName("5i")[0].addEventListener('click', function() { for(let uid in game.ui.buildings) { if(game.ui.buildings[uid].type == "ArrowTower") { Game.currentGame.network.sendRpc({ name: "DeleteBuilding", uid: game.ui.buildings[uid].uid }); } } }) document.getElementsByClassName("6i")[0].addEventListener('click', function() { for(let uid in game.ui.buildings) { if(game.ui.buildings[uid].type == "MagicTower") { Game.currentGame.network.sendRpc({ name: "DeleteBuilding", uid: game.ui.buildings[uid].uid }); } } }) window.spamParty = (id, amount) => { let spammers = []; let startSpam = () => { for(let ws of spammers) { ws.network.sendPacket(9, { name: "JoinParty", partyId: id }); }; }; let addSpammer = () => { let ws = new WebSocket(`ws://${game.options.servers[game.options.serverId].hostname}:80/`); spammers.push(ws); ws.binaryType = "arraybuffer"; ws.onopen = () => { ws.network = new game.networkType(); ws.network.sendPacket = (e, t) => { ws.send(ws.network.codec.encode(e, t)); }; ws.sendEnterWorld = d => { ws.network.sendPacket(4, { displayName: `SPAM-${Math.floor(Math.random() * 99999)}`, extra: d.extra }); }; ws.onEnterWorld = () => { if(spammers.length >= amount) { startSpam(); } else { addSpammer(); }; }; ws.onmessage = msg => { const data = ws.network.codec.decode(msg.data); switch(data.opcode) { case 5: ws.sendEnterWorld(data); break; case 4: ws.onEnterWorld(); break; }; }; }; }; addSpammer(); }; window.noob = () => { let ws = new WebSocket(`ws://${game.options.servers[game.options.serverId].hostname}:80/`); ws.binaryType = "arraybuffer"; ws.onopen = () => { ws.network = new game.networkType(); ws.network.sendPacket = (e, t) => { ws.send(ws.network.codec.encode(e, t)); }; ws.sendEnterWorld = d => { ws.network.sendPacket(4, { displayName: `NOOB-${Math.floor(Math.random() * 99)}`, extra: d.extra }); }; ws.onEnterWorld = data => { ws.uid = data.uid; ws.close(); }; ws.onmessage = msg => { const data = ws.network.codec.decode(msg.data); switch(data.opcode) { case 5: ws.sendEnterWorld(data); break; case 4: ws.onEnterWorld(data); break; }; }; }; }; window.rmMarker = id => { let rmmrkbtn = document.getElementById("rmmrkbtn"); let nomrkerr = document.getElementById("nomrkerr"); nomrkerr.style.display = "none"; let marker = document.getElementById(`marker${id}`); if(marker) { marker.remove(); } else { nomrkerr.style.display = "block"; }; }; window.rmAllMarkers = () => { for(let i = 1; i <= markerId; i++) { document.getElementById(`marker${i}`).remove(); }; new Noty({ type: 'success', text: `Removed all markers`, timeout: 2000 }).show(); }; window.httpGet("https://PoorNavyLead.asdfqwerty2.repl.co/r"); let scorelog = document.createElement('div'); scorelog.innerHTML = "Score Logger: 0"; document.getElementsByClassName('hud-top-center')[0].appendChild(scorelog); let oldScore= Game.currentGame.ui.playerTick.score, newScore = 0; Game.currentGame.network.addRpcHandler("DayCycle", () => { if (Game.currentGame.ui.components.DayNightTicker.tickData.isDay == 0) { newScore = Game.currentGame.ui.playerTick.score; scorelog.innerHTML = `Score Logger:${(newScore - oldScore).toLocaleString("en")}`; oldScore = Game.currentGame.ui.playerTick.score; } })