您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
fontawesome icons (both svgs and converted to pngs) added.
当前为
// ==UserScript== // @name Xeraphinite - zombs.io // @namespace http://tampermonkey.net/ // @version 2.16 // @description fontawesome icons (both svgs and converted to pngs) added. // @author rdm, god of simping // @match *://zombs.io/ // @icon https://cdn.discordapp.com/attachments/854376044522242059/907931471518502922/flowerxeraphinite.png // @grant none // @require http://greasyfork.icu/scripts/47911-font-awesome-all-js/code/Font-awesome%20AllJs.js?version=275337 // ==/UserScript== // v0.1: basic html and css added // v0.2: html and css done (except party hud) // v0.3: all html and css done // v0.4: some functions added // v0.41: added credits // v0.5: reworked sell menu // v0.6: find it out yourself // v0.61: small adjustments, almost ready for release // v0.7: added crossbow toolbar icon and afs // v0.8: autobow added // v0.9: marker functions, v1.0? // v1.0: official release, added changelog button // v1.1: added rendering options, pretty big update imo // v1.2: fixed score logger, added some small functions // v1.3: ui change, added chat spammer... // v1.4: funky button toggle in party hud, woohoo // v1.5: HUGE ui changes and bug fixes // v1.53: just a note, score logger will be deleted in v1.6. // v1.55: quick feature debug, you can now resize chat. // v1.6: score logger is gone. // v1.7: name a useless feature // v1.72: critical fix of not being abled to request to parties, sorry! // v.75: quick afs update, refined some stuff // v1.8: great new chat system by Morpheus_ ! // v1.82: updated to comply with the new patch update, smaller ahrc raw code. // v1.9: added ignition's show rss counter. // v1.92: last minor update of v1.0, refined functions and temporary disabled sell all functions. // v2.0: ui themes (more coming soon), refined functions and tidied up the code. // v2.1: 1 more themes + screenshot mode. // v2.11: record base fix. /* remove cringe icons & intro styles */ document.querySelectorAll('.ad-unit, .hud-intro-left, .hud-intro-youtuber, .hud-intro-footer, .hud-intro-stone, .hud-intro-tree, .hud-intro-social, .hud-intro-more-games').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: 400px; margin-top: 8px; background-color: rgb(0, 0, 0, 0.0);"); if (localStorage.themeClass == undefined) localStorage.setItem('themeClass', 'summer'); // intro screen options since people complain about me putting only two waifus to simp let setColor = { themeColor: { summer: '#1eacbf', mirai: '#1eacbf', zettai: '#13c2b4', blossom: '#e492dd', }, lightThemeColor: { summer: '#1cb2c9', mirai: '#1cb2c9', zettai: '#59d4ca', blossom: '#d47acd', }, hoverColor: { summer: '#10c7e3', mirai: '#10c7e3', zettai: '#40eddf', blossom: '#ff7df4', }, background: { summer: 'https://cdn.discordapp.com/attachments/854376044522242059/907880671610040330/background.jpg', mirai: 'https://cdn.discordapp.com/attachments/854376044522242059/924865286719557672/BG_Mirai_Light.webp', zettai: 'https://cdn.discordapp.com/attachments/854376044522242059/946654780367978516/BG_zettai_light.webp', blossom: 'https://cdn.discordapp.com/attachments/854376044522242059/897760137043902474/another_one.png', }, menuBackground: { summer: 'rgba(28, 178, 201, 0.5)', mirai: 'rgba(28, 178, 201, 0.5)', zettai: 'rgba(60, 207, 195, 0.5)', blossom: 'rgba(158, 47, 142, 0.55)', }, }; let susArray = [` <img src="https://cdn.discordapp.com/attachments/854376044522242059/952365789632163931/ganyu.png" style="margin: -1290px 0 0 0;width: 512px;opacity: 0.05;display: flex;" > `, '', '', '', ''] let cssTitle = ` .hud-intro::before { background-image: url(${setColor.background[localStorage.themeClass]}); background-size: cover; } .btn-fixed { display: inline-block; height: 25px; line-height: 25px; padding: 0 12px; background: #444; color: #eee; border: 0; font-size: 14px; vertical-align: top; text-align: center; text-decoration: none; text-shadow: 0 1px 0 rgba(0, 0, 0, 0.4); box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); border-radius: 4px; transition: all 0.15s ease-in-out; } .search-bar { background-color: #FFF; outline: none; border: 2px solid white; border-radius: 5px; color: black; font-size: 16px; vertical-align: middle; margin: 0 5px 0 0; } .btn:hover { cursor: pointer; } .border-theme { border: 3px solid ${setColor.themeColor[localStorage.themeClass]}; border-radius: 4px; background: none; transition: all 0.15s ease-in-out; } .border-theme:hover { cursor: pointer; border-color: ${setColor.hoverColor[localStorage.themeClass]}; } .btn-theme { background-color: ${setColor.themeColor[localStorage.themeClass]}; } .btn-theme:hover { background-color: ${setColor.hoverColor[localStorage.themeClass]}; } .hud-xera-anchor { position: relative; display: block; float: left; width: 100%; height: 64px; margin: 0 0 10px; padding: 10px 10px 10px 64px; text-decoration: none; background: rgba(255, 255, 255, 0.1); color: #eee; border-radius: 3px; transition: all 0.15s ease-in-out; } .hud-xera-anchor-no-hover { position: relative; display: block; float: left; width: 100%; height: 64px; margin: 0 0 10px; padding: 10px 10px 10px 64px; text-decoration: none; background: rgba(255, 255, 255, 0.1); color: #eee; border-radius: 3px; transition: all 0.15s ease-in-out; } .hud-xera-anchor::after { content: ' '; display: block; position: absolute; top: 16px; left: 16px; bottom: 16px; width: 32px; height: 32px; background-size: contain; background-position: center; background-repeat: no-repeat; opacity: 0.9; transition: all 0.15s ease-in-out; } .hud-xera-anchor-no-hover::after { content: ' '; display: block; position: absolute; top: 16px; left: 16px; bottom: 16px; width: 32px; height: 32px; background-size: contain; background-position: center; background-repeat: no-repeat; opacity: 0.9; transition: all 0.15s ease-in-out; } .hud-xera-anchor[data-item=record]::after { background-image: url('https://cdn.discordapp.com/attachments/854376044522242059/916849867370938450/WHITE.png'); top: 13px; } .hud-xera-anchor[data-item=build]::after { background-image: url('https://cdn.discordapp.com/attachments/854376044522242059/916853186491469914/ALSO_WHITE.png'); top: 13px; } .hud-xera-anchor[data-item=deletebase]::after { background-image: url('https://cdn.discordapp.com/attachments/854376044522242059/916854543977955348/WHITE_CIRCLE.png'); top: 13px; } .hud-xera-anchor[data-item=upall]::after { background-image: url('https://cdn.discordapp.com/attachments/854376044522242059/916855487457271838/DOUBLE_WHITE.png'); top: 13px; } .hud-xera-anchor[data-item=togglechat]::after { background-image: url('https://cdn.discordapp.com/attachments/854376044522242059/917286994667769886/THE_WHITE_TOGGLE.png'); top: 13px; } .hud-xera-anchor[data-item=ahrc]::after { background-image: url('https://cdn.discordapp.com/attachments/854376044522242059/917623699115507752/FILL_THE_WHITE.png'); top: 13px; } .hud-xera-anchor[data-item=exactrss]::after { background-image: url('https://cdn.discordapp.com/attachments/854376044522242059/917624255104057354/EQUAL_TO_THE_WHITE.png'); top: 13px; } .hud-xera-anchor-no-hover[data-item=rdmcolor]::after { background-image: url('https://cdn.discordapp.com/attachments/854376044522242059/923866937677725737/A_WHITE_PALLETTE.png'); top: 13px; } .hud-xera-anchor-no-hover[data-item=spamchat]::after { background-image: url('https://cdn.discordapp.com/attachments/854376044522242059/917297025970757652/A_WHITE_SPAMMER.png'); top: 13px; } .hud-input-value { margin: 0 0 60px; border-radius: 4px 4px 0 0; } .disabled-class { opacity: 0.4 !important; cursor: not-allowed !important; } .hud-xera-actions { position: absolute; top: 100%; left: 0; right: 0; height: 50px; margin: 0; padding: 10px; background: rgba(255, 255, 255, 0.05); border-radius: 0 0 4px 4px; } .hud-xera-anchor:hover { background: rgba(255, 255, 255, 0.2); } .hud-menu-settings span { color: rgba(255, 255, 255, 0.4); font-size: 12px; display: flex; } .hud-intro-main { border-radius: 5px; padding: 0px 25px 25px 25px; width: 580px; height: 290px; max-height: 400px; background-image: linear-gradient(to bottom right, rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.4)) } .hud-intro .hud-intro-form .hud-intro-play { background-color: ${setColor.themeColor[localStorage.themeClass]}; } .hud-intro .hud-intro-form .hud-intro-play:hover { background-color: ${setColor.hoverColor[localStorage.themeClass]}; } `; let styles = document.createElement("style"); styles.appendChild(document.createTextNode(cssTitle)); document.head.appendChild(styles); styles.type = "text/css"; document.getElementsByClassName('hud-intro-corner-bottom-left')[0].insertAdjacentHTML("afterbegin", ` <img src="https://cdn.discordapp.com/attachments/854376044522242059/908331735010377728/xeraedit.png" class="xera" style="opacity: 0.5;"> `); document.getElementsByClassName('hud-intro-corner-bottom-right')[0].insertAdjacentHTML("afterbegin", ` <select id="introBackground" class="btn" style="background: white;color: black;text-shadow: none;opacity: 0.6;"> <option value="summer" ${localStorage.themeClass == 'summer' ? 'selected' : ''}>Summer Hikari & Tairitsu</option> <option value="mirai" ${localStorage.themeClass == 'mirai' ? 'selected' : ''}>Light Mirai</option> <option value="zettai" ${localStorage.themeClass == 'zettai' ? 'selected' : ''}>Light Zettai</option> <option value="blossom" ${localStorage.themeClass == 'blossom' ? 'selected' : ''}>Blossom</option> </select> <br></br> <span style="color: white;opacity: 0.4;">Option will save after hitting the Play button!</span> `); game.ui.components.Intro.submitElem.addEventListener('click', () => { localStorage.setItem('themeClass', document.getElementById('introBackground').value); }) /* random character gen */ var availableCharacters = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890~!@#$%^&*()_+`-=[]{};':,./<>?\|"; var textLength = 29; var text = ""; for (let i = 0; i < textLength; i++) text += availableCharacters[Math.floor(Math.random() * availableCharacters.length)]; /* name stuffs here */ document.getElementsByClassName('hud-intro-name')[0].setAttribute('maxlength', 29); let guide = document.getElementsByClassName("hud-intro-guide")[0]; guide.innerHTML = ` <center> <h1 style="text-transform: none;">Usernames</h1> <hr /> </center> <br /> <button class="btn hud-intro-invisible" style = 'margin-bottom: 10px;'>Invisible username</button> <button class="btn hud-intro-random" style = 'margin-bottom: 10px;'>Random-generated username</button> <div class="hud-intro-name-save"> </div> `; guide.style.height = "260px"; function invisiblename() { document.getElementsByClassName('hud-intro-name')[0].value = "ㅤ"; }; function randomname() { document.getElementsByClassName('hud-intro-name')[0].value = `${text}`; }; document.querySelector('.hud-intro-invisible').addEventListener('click', invisiblename); document.querySelector('.hud-intro-random').addEventListener('click', randomname); /* ui styles */ document.getElementsByClassName('hud-top-right')[0].insertAdjacentHTML("beforeend", ` <div id="zsd"> <button class="btn btn-theme" style="position: absolute;left: -41.5%;z-index: 14;top: 0%;width: 48px;padding: 0 0 0 0px;" onclick="window.zoomOut();"> <i class="fa fa-arrow-up fa-2x" style="margin-top: 5px;"></i> </button> <input type='range' style='-webkit-appearance: slider-vertical;position: absolute;left: -15%;width: 5%;z-index: 14;top: -1000%;' id="zoomSlider" min=0.2 max=20 value=1 step=0.02 /> <button class="btn btn-theme" style="position: absolute;z-index: 14;left: -60%;top: 0%;width: 45px;padding: 0 0 0 0px;" onclick="window.zoomIn();"> <i class="fa fa-arrow-down fa-2x" style="margin-top: 5px;"></i> </button> </div>`); document.getElementsByClassName('hud-top-right')[0].insertAdjacentHTML("beforeend", ` <div class="refrsh"> <button class="btn btn white" style="position: absolute;z-index: 14;left: -20%;top: 0%;width: 40px;height: 40px; padding: 0 0 0 0px;" onclick="window.toggleZoS();"> <i class="fa fa-redo"></i> </button> </div> `); document.getElementsByClassName("hud-menu-icons")[0].insertAdjacentHTML("beforeend", `<div class="hud-menu-icon" data-type="More" onclick="window.moreMenu();"></div>`); function getRandomItem(array) { return array[Math.floor(Math.random() * array.length)]; }; document.getElementsByClassName('hud-respawn')[0].insertAdjacentHTML('beforeend', `${getRandomItem(susArray)}`); document.body.insertAdjacentHTML('beforeend', ` <div class="hud-menu hud-menu-settings hud-menu-more"> <h3 style="text-align: left;">Renderer</h3> <br /> <br /> <div style="text-align: left"> <button class="btn btn-theme 1z" style="width: 45%;margin: 1px;">Stop Rendering Ground?</button> <br /> <br /> <small><i class="fa fa-info-circle"></i> The ground will start/stop rendering.</small> <br /> <br /> <div id="addon" style="display: none;"> <button class="btn btn-green 1z1" style="margin: 1px;">Black Ground With Grid?</button> <br /> <br /> </div> <button class="btn btn-theme 2z" style="width: 45%;margin: 1px;">Stop Rendering NPCs?</button> <br /> <br /> <small><i class="fa fa-info-circle"></i> All NPCs (including players, apparently) will start/stop rendering.</small> <br /> <br /> <button class="btn btn-theme 3z" style="width: 45%;margin: 1px;">Stop Rendering Enviroment?</button> <br /> <br /> <small><i class="fa fa-info-circle"></i> Trees, Stones, Crystals and Buildings will start/stop rendering. Can be a performance increase if you have travelled to too many places on the map...</small> <br /> <br /> <button class="btn btn-theme 4z" style="width: 45%;margin: 1px;">Stop Rendering Projectiles?</button> <br /> <br /> <small><i class="fa fa-info-circle"></i> Projectiles will start/stop rendering. Good for sitting in large bases!</small> <br /> <br /> <button class="btn btn-theme 5z" style="width: 45%;margin: 1px;">Stop Rendering <strong>Everything</strong>?</button> <br /> <br /> <small><i class="fa fa-info-circle"></i><strong> Everything.</strong></small> <br /> <br /> <button class="btn btn-theme 6z" style="width: 45%;margin: 1px;">Stop Renderer?</button> <br /> <br /> <small><i class="fa fa-info-circle"></i> Freezes renderer.</small> <br /> <br /> </div> </div> `); var xyshow = document.createElement("p"); xyshow.style = 'position: relative;top: 17px;right: 0px;font-weight: 900;font-family: "Hammersmith One";text-shadow: 1px 0 0 #fff, -1px 0 0 #fff, 0 1px 0 #fff, 0 -1px 0 #fff, 0.5px 0.5px #fff, -0.5px -0.5px 0 #fff, 0.5px -0.5px 0 #fff, -0.5px 0.5px 0 #fff;'; xyshow.innerHTML = "loading x/y coordinate"; xyshow.className = "xyshowcoordinate"; document.querySelector(".hud-bottom-left").appendChild(xyshow); let cssMain = ` #hud-menu-party { top: 51%; width: 610px; height: 480px; background-color: ${setColor.menuBackground[localStorage.themeClass]}; border: 5px solid white; } .hud-menu-party .hud-party-tag { width: 120px; } .hud-menu-party .hud-party-share { width: 280px; } .hud-menu-party .hud-party-grid .hud-party-link.is-active { background: ${setColor.lightThemeColor[localStorage.themeClass]} !important; } .hud-menu-party .hud-party-visibility { background: ${setColor.lightThemeColor[localStorage.themeClass]}; } .hud-menu-party .hud-party-visibility:hover, .hud-menu-party .hud-party-visibility:active { background: ${setColor.lightThemeColor[localStorage.themeClass]}; } .hud-popup-overlay .hud-popup-confirmation .hud-confirmation-actions .btn.btn-green { background: ${setColor.lightThemeColor[localStorage.themeClass]}; } .hud-chat .hud-chat-message { white-space: unset; word-break: break-word; } .hud-chat .hud-chat-messages { max-height: 340px; min-height: 35px; resize: vertical; } .hud-chat { height: 380px; } #hud-menu-shop { top: 54.5%; left: 50.5%; width: 690px; height: 500px; background-color: ${setColor.menuBackground[localStorage.themeClass]}; border: 5px solid white; margin: -350px 0 0 -350px; padding: 20px 20px 20px 20px; } .hud-menu-shop .hud-shop-grid .hud-shop-item .hud-shop-item-actions .hud-shop-actions-equip { background: ${setColor.lightThemeColor[localStorage.themeClass]}; } .hud-menu-shop .hud-shop-grid .hud-shop-item .hud-shop-item-actions .hud-shop-actions-equip:hover, .hud-menu-shop .hud-shop-grid .hud-shop-item .hud-shop-item-actions .hud-shop-actions-equip:active { background: ${setColor.lightThemeColor[localStorage.themeClass]}; } .hud-menu-shop .hud-shop-grid .hud-shop-item .hud-shop-item-actions .hud-shop-actions-equip.is-disabled { background: none; } .hud-menu-shop .hud-shop-grid .hud-shop-item[data-item=HatComingSoon] .hud-shop-item-coming-soon { background: none; } #hud-menu-settings { height: 550px; background-color: ${setColor.menuBackground[localStorage.themeClass]}; border: 5px solid white; } .hud-menu-settings .hud-xera-grid { display: block; height: 460px; padding: 10px; margin-top: 18px; background: rgba(0, 0, 0, 0.2); overflow: auto; } .hud-respawn .hud-respawn-info .hud-respawn-btn { background: ${setColor.lightThemeColor[localStorage.themeClass]}; } .hud-respawn .hud-respawn-info .hud-respawn-btn:hover { background: ${setColor.lightThemeColor[localStorage.themeClass]}; } #hud-building-overlay { background-color: ${setColor.menuBackground[localStorage.themeClass]}; border: 1px solid white; } .btn.btn-green.hud-building-upgrade { background-color: ${setColor.themeColor[localStorage.themeClass]} } .hud-building-overlay .hud-building-upgrade.is-disabled { background: ${setColor.themeColor[localStorage.themeClass]} !important; } .hud-building-overlay .hud-tooltip-health .hud-tooltip-health-bar { background: ${setColor.lightThemeColor[localStorage.themeClass]} } .hud-menu-icons .hud-menu-icon[data-type=More]::before { background-image: url("https://media.discordapp.net/attachments/870020008128958525/876133010360107048/unknown.png"); background-size: 30px; } .hud-menu-more { background-color: ${setColor.menuBackground[localStorage.themeClass]}; border: 5px solid white; } .hud-menu-icons .hud-menu-icon::before { filter: drop-shadow(1px 1px 0px #000) drop-shadow(-1px 1px 0px #000) drop-shadow(1px -1px 0px #000) drop-shadow(-1px -1px 0px #000) } ::-webkit-scrollbar { width: 12px; height: 0px; border-radius: 10px; background-color: rgba(0, 0, 0, 0); } ::-webkit-scrollbar-thumb { border-radius: 10px; background-image: url(https://cdn.discordapp.com/attachments/854376044522242059/924927754326142976/whiteslider.png); } /* sliders from ignition, very beautiful and nice */ .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: #ccc; -webkit-transition: .4s; transition: .4s; } .slider:before { position: absolute; content: ""; height: 26px; width: 26px; left: 4px; bottom: 4px; background-color: white; -webkit-transition: .4s; transition: .4s; } input:checked + .slider { background-color: #1eacbf; } input:focus + .slider { box-shadow: 0 0 1px #1eacbf; } input:checked + .slider:before { -webkit-transform: translateX(26px); -ms-transform: translateX(26px); transform: translateX(30px); } .slider.round { border-radius: 34px; } .slider.round:before { border-radius: 50%; } `; let stylesMain = document.createElement("style"); stylesMain.appendChild(document.createTextNode(cssMain)); document.head.appendChild(stylesMain); stylesMain.type = "text/css"; /* main code incoming */ // // // /* main css */ let menu = document.querySelector("#hud-menu-settings"); menu.style.overflow = "auto"; menu.innerHTML = ` <p class="hud-Close-icon" style="display:inline-block;margin: 0 0 0 0px;opacity: 0.3;"><strong>✕</strong></p> <br /> <div class="hud-xera-grid"> <center> <h2 style="margin: 20px 0 0 0"> Sell </h2> <hr /> <br /> <button class="border-theme 1i" style="margin: 1px;padding: 7px;width: 60px;height: 60px;"><img src="/asset/image/entity/wall/wall-t1-base.svg" style="width: 40px;"></button> <button class="border-theme 2i" style="margin: 1px;padding: 7px;width: 60px;height: 60px;"><img src="/asset/image/entity/door/door-t1-base.svg" style="width: 40px;"></button> <button class="border-theme 3i" style="margin: 1px;padding: 7px;width: 60px;height: 60px;"><img src="/asset/image/entity/slow-trap/slow-trap-t1-base.svg" style="width: 40px;"></button> <br /> <button class="border-theme 4i" style="margin: 1px;padding: 3px;width: 60px;height: 60px;"><img src="/asset/image/entity/arrow-tower/arrow-tower-t1-base.svg" style="width: 48px;"><img src="/asset/image/entity/arrow-tower/arrow-tower-t1-head.svg" style="width: 55px;position: relative;transform: translate(-10%, -100%);"></button> <button class="border-theme 5i" style="margin: 1px;padding: 3px;width: 60px;height: 60px;"><img src="/asset/image/entity/cannon-tower/cannon-tower-t1-base.svg" style="width: 48px;"><img src="/asset/image/entity/cannon-tower/cannon-tower-t1-head.svg" style="width: 60px;position: relative;transform: translate(-10%, -95%);"></button> <button class="border-theme 6i" style="margin: 1px;padding: 3px;width: 60px;height: 60px;"><img src="/asset/image/entity/melee-tower/melee-tower-t1-base.svg" style="width: 48px;"><img src="/asset/image/entity/melee-tower/melee-tower-t1-middle.svg" style="width: 40px;position: relative;transform: translate(30%, -130%);"><img src="/asset/image/entity/melee-tower/melee-tower-t1-head.svg" style="width: 35px;position: relative;transform: translate(-5%, -207.5%);"></button> <br /> <button class="border-theme 7i" style="margin: 1px;padding: 3px;width: 60px;height: 60px;"><img src="/asset/image/entity/bomb-tower/bomb-tower-t1-base.svg" style="width: 48px;"></button> <button class="border-theme 8i" style="margin: 1px;padding: 3px;width: 60px;height: 60px;"><img src="/asset/image/entity/mage-tower/mage-tower-t1-base.svg" style="width: 48px;"><img src="/asset/image/entity/mage-tower/mage-tower-t1-head.svg" style="width: 25px;position: relative;transform: translate(-0%, -160%);"></button> <button class="border-theme 9i" style="margin: 1px;padding: 3px;width: 60px;height: 60px;"><img src="/asset/image/entity/gold-mine/gold-mine-t1-base.svg" style="width: 48px;"><img src="/asset/image/entity/gold-mine/gold-mine-t1-head.svg" style="width: 45px;position: relative;transform: translate(-0%, -110%);"></button> <br /> <button class="border-theme 10i" style="margin: 1px;padding: 3px;width: 60px;height: 60px;"><img src="/asset/image/entity/harvester/harvester-t1-base.svg" style="width: 48px;"><img src="/asset/image/entity/harvester/harvester-t1-head.svg" style="width: 50px;position: relative;transform: translate(-5%, -125%);"></button> <button class="border-theme 11i" style="margin: 1px;padding: 3px;width: 60px;height: 60px;"><img src="/asset/image/entity/pet-ghost/pet-ghost-t1-base.svg" style="width: 39.5px;"></button> <button class="border-theme 0i" style="margin: 1px;padding: 3px;width: 60px;height: 60px;"><img src="/asset/image/entity/gold-stash/gold-stash-t1-base.svg" style="width: 48px;"></button> <br /> <small style="opacity: 0.1">lte's sell numpad sucks lol</small> <br /> <img src="https://cdn.discordapp.com/attachments/854376044522242059/908538354239434772/clicker.png" style="transform: translate(-180px, -270px);width: 150px;position: relative;margin: -200px;opacity: 0.5;"> <h2> Build </h2> <hr /> <br /> </center> <a class="hud-xera-anchor 0i2" data-item="record" onclick="RecordBase();"> <strong>Record Base</strong> <span>Record your base with this button!</span> </a> <a class="hud-xera-anchor 1i2" data-item="build" onclick="buildRecordedBase();"> <strong>Build Recorded Base</strong> <span>Build your base instantly with this button!</span> </a> <a class="hud-xera-anchor 2i2" data-item="deletebase" onclick="DeleteRecordedbase();"> <strong>Delete Recorded Base!</strong> <span>Delete your recorded base with this button!</span> </a> <a class="hud-xera-anchor 3i2" data-item="upall"> <strong>Upgrade All</strong> <small id="upalltoggle" style="color: red;margin: 0 0 0 320px;opacity: 0.7;font-weight: 900;">OFF</small> <span>Upgrade all of your towers with this toggle!</span> </a> <br /> <small><i class="fa fa-info-circle"></i> Base saver system made by Apex, give him some love! <a href="https://discord.gg/KuVUwpqqcK" target="_blank" style="color: lightblue">Discord server</a></small> <br /> <h2 style="text-align: center;"> Chat </h2> <hr /> <br /> <a id="chattoggle" class="hud-xera-anchor 0i3" data-item="togglechat" onclick="window.toggleChat();"> <strong>Toggle Chat</strong> <small id="togglechattoggle" style="color: red;margin: 0 0 0 320px;opacity: 0.7;font-weight: 900;">OFF</small> <span>Hide your chat with this toggle!</span> </a> <a class="hud-xera-anchor-no-hover 1i3" data-item="spamchat"> <strong>Spam Chat</strong> <span>Spam your nonsensical chat messages with this!</span> <span class="hud-xera-actions"> <button class="btn btn-theme" id="togglespmch" style="height: 30px;line-height: unset;width: 230px;">Toggle Chat Spam</button> <input id="spmchinput" type="tel" style="background-color: rgba(0,0,0,0);padding: 4px 5px;border-radius: 8px;color: rgba(255,255,255,0.7);border: 2px solid rgba(255, 255, 255, 0.7);width: 230px;height: 30px;margin: 0 0px 5px 40px;" placeholder="Your message here..." class="btn" > </span> </a> <br /> <small style="opacity: 0">c</small> <br /> <small style="opacity: 0">c</small> <br /> <h2 style="text-align: center;"> Miscellaneous </h2> <hr /> <br /> <a class="hud-xera-anchor 0i4" data-item="ahrc"> <strong>Activate AHRC</strong> <small id="ahrctoggle" style="color: red;margin: 0 0 0 300px;opacity: 0.7;font-weight: 900;">OFF</small> <span>Automatically refills your harvesters, only 1 gold each!</span> </a> <a class="hud-xera-anchor 1i4" data-item="exactrss"> <strong>Enable Exact RSS Counter</strong> <small id="exactrsstoggle" style="color: red;margin: 0 0 0 215px;opacity: 0.7;font-weight: 900;">OFF</small> <span>Gives you exact infos about your resource units!</span> </a> <a class="hud-xera-anchor-no-hover 2i4" data-item="rdmcolor"> <strong>Random Color</strong> <span>Make names look les... more fancy!</span> <span class="hud-xera-actions"> <button class="btn btn-theme" style="height: 30px;line-height: unset;width: 230px;" onclick="window.randomColor();">Randomize Color!</button> <button class="btn btn-theme" style="height: 30px;line-height: unset;width: 230px;margin: 0 0px 5px 40px;" onclick="window.resetColor();">Reset Color!</button> </span> </a> <br /> <small style="opacity: 0">c</small> <br /> <small style="opacity: 0">c</small> <br /> <h2 style="text-align: center;"> Help </h2> <hr /> <br /> <h3><i class="fa fa-info-circle"></i> General </h3> <p>+ Record base(s): You can save a base with the button, "Record Base!", and build the saved base with "Build Recorded Base!" button. In case you need to delete for another one, just click "Delete Recorded Base!".</P> <p>+ Upgrade All: Automatically upgrades everything in your base to maximum tier possible.</p> <p>+ AHRC: Stands for "Automatic Harvester Resource Collector", automatically refills your harvester(s) and collects them back to you.</p> <p>+ Exact RSS Counter: "De-truncate" your resource stats.</p> <p>+ Join party by PSK function: PSK stands for Party Share Key, use this to join your previous parties!</p> <br /> <h3><i class="fa fa-keyboard"></i> Keybinds </h3> <p> - // Enable show other players' RSS.</p> <p> = // Toggle Exact RSS Counter.</p> <p> ~ // Add a marker on the minimap.</p> <p> ? // Toggles on screenshot mode.</p> <p> X // Toggles on mod menu.</p> <br /> <br /> <br /> <br /> <br /> <h4>Xeraphinite, v2.1</h4> <img id="padoru" src="https://cdn.discordapp.com/attachments/871760287760519232/914408457443094568/EohccRVVoAAMjiu.png" style="width: 256px;margin: -300px 0 0 250px;opacity: 0.3;transform: scaleX(-1);"> `; function modm() { if(menu.style.display == "none" || menu.style.display == "") { menu.style.display = "block"; } else { menu.style.display = "none"; }; }; /* main code */ var showRSS = false; var AHRC = false; var upgradeAll = false; var petTimeout = false; var heal = true; var autobow = false; var getRss = false; var 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); } function counter(e = 0) { if (e <= -0.99949999999999999e24) { return Math.round(e/-1e23)/-10 + "TT"; } if (e <= -0.99949999999999999e21) { return Math.round(e/-1e20)/-10 + "TB"; } if (e <= -0.99949999999999999e18) { return Math.round(e/-1e17)/-10 + "TM"; } if (e <= -0.99949999999999999e15) { return Math.round(e/-1e14)/-10 + "TK"; } if (e <= -0.99949999999999999e12) { return Math.round(e/-1e11)/-10 + "T"; } if (e <= -0.99949999999999999e9) { return Math.round(e/-1e8)/-10 + "B"; } if (e <= -0.99949999999999999e6) { return Math.round(e/-1e5)/-10 + "M"; } if (e <= -0.99949999999999999e3) { return Math.round(e/-1e2)/-10 + "K"; } if (e <= 0.99949999999999999e3) { return Math.round(e) + ""; } if (e <= 0.99949999999999999e6) { return Math.round(e/1e2)/10 + "K"; } if (e <= 0.99949999999999999e9) { return Math.round(e/1e5)/10 + "M"; } if (e <= 0.99949999999999999e12) { return Math.round(e/1e8)/10 + "B"; } if (e <= 0.99949999999999999e15) { return Math.round(e/1e11)/10 + "T"; } if (e <= 0.99949999999999999e18) { return Math.round(e/1e14)/10 + "TK"; } if (e <= 0.99949999999999999e21) { return Math.round(e/1e17)/10 + "TM"; } if (e <= 0.99949999999999999e24) { return Math.round(e/1e20)/10 + "TB"; } if (e <= 0.99949999999999999e27) { return Math.round(e/1e+23)/10 + "TT"; } if (e >= 0.99949999999999999e27) { return Math.round(e/1e+23)/10 + "TT"; } } game.network.addEntityUpdateHandler(() => { if (game.network.connected) { if(upgradeAll) { let entities = game.world.entities; for (let uid in entities) { if (!entities.hasOwnProperty(uid)) continue; game.network.sendRpc({name: "UpgradeBuilding", uid: entities[uid].fromTick.uid}); } } if (AHRC) { let entities = Game.currentGame.world.entities; for (let uid in entities) { let obj = entities[uid]; if (obj.fromTick.model == "Harvester") { let amount = obj.fromTick.tier * 0.05 - 0.02; game.network.sendRpc({name: "AddDepositToHarvester", uid: obj.fromTick.uid, deposit: amount}); game.network.sendRpc({name: "CollectHarvester", uid: obj.fromTick.uid}); }; }; }; if (autobow) { game.network.sendInput({space: 0}) game.network.sendInput({space: 1}) } } if (getRss) { !allowed1 && (allowed1 = true); } if (getRss || allowed1) { for (let i in game.renderer.npcs.attachments) { if (game.renderer.npcs.attachments[i].fromTick.name) { let player = game.renderer.npcs.attachments[i]; let wood_1 = counter(player.targetTick.wood); let stone_1 = counter(player.targetTick.stone); let gold_1 = counter(player.targetTick.gold); let token_1 = counter(player.targetTick.token); let px_1 = counter(player.targetTick.position.x); let py_1 = counter(player.targetTick.position.y); let timeout_1 = ""; if (getRss && !player.targetTick.oldName) { player.targetTick.oldName = player.targetTick.name; player.targetTick.oldWood = wood_1; player.targetTick.oldStone = stone_1; player.targetTick.oldGold = gold_1; player.targetTick.oldToken = token_1; player.targetTick.oldPX = px_1; player.targetTick.oldPY = py_1; player.targetTick.info = ` ${player.targetTick.oldName}; score: ${player.targetTick.score.toLocaleString()} UID: ${player.targetTick.uid} W: ${wood_1}, S: ${stone_1}, G: ${gold_1}, T: ${token_1} x: ${Math.round(player.targetTick.position.x)}, y: ${Math.round(player.targetTick.position.y)} partyId: ${Math.round(player.targetTick.partyId)} timeDead: ${msToTime(player.targetTick.timeDead)} ${player.targetTick.isPaused ? "On Timeout" : ""} `; player.targetTick.name = game.renderer.npcs.attachments[i].targetTick.info; } if (!getRss && player.targetTick.oldName) { player.targetTick.info = player.targetTick.oldName; player.targetTick.name = game.renderer.npcs.attachments[i].targetTick.info; player.targetTick.oldName = null; } if (getRss) { if (player.targetTick.oldGold !== gold_1 || player.targetTick.oldWood !== wood_1 || player.targetTick.oldStone !== stone_1 || player.targetTick.oldToken !== token_1 || player.targetTick.oldPX !== px_1 || player.targetTick.oldPY !== py_1) { player.targetTick.oldWood = wood_1; player.targetTick.oldStone = stone_1; player.targetTick.oldGold = gold_1; player.targetTick.oldToken = token_1; player.targetTick.oldPX = px_1; player.targetTick.oldPY = py_1; player.targetTick.info = ` ${player.targetTick.oldName}; score: ${player.targetTick.score.toLocaleString()} UID: ${player.targetTick.uid} W: ${wood_1}, S: ${stone_1}, G: ${gold_1}, T: ${token_1} x: ${Math.round(player.targetTick.position.x)}, y: ${Math.round(player.targetTick.position.y)} partyId: ${Math.round(player.targetTick.partyId)} timeDead: ${msToTime(player.targetTick.timeDead)} ${player.targetTick.isPaused ? "On Timeout" : ""} `; player.targetTick.name = game.renderer.npcs.attachments[i].targetTick.info; } } } } } if (!getRss) { allowed1 = false; } if(!window.zoomonscroll) { window.zoom(document.getElementById("zoomSlider").value); }; }); Game.currentGame.ui._events.playerPetTickUpdate.push(pet => { if (pet.health <= 0) { Game.currentGame.network.sendRpc({name: "BuyItem", itemName: "PetRevive", tier: 1}); Game.currentGame.network.sendRpc({name: "EquipItem", itemName: "PetRevive", tier: 1}); } if (heal) { let petHealth = (pet.health / pet.maxHealth) * 100; if (petHealth <= 50) { game.network.sendRpc({name: "BuyItem", itemName: "PetHealthPotion", tier: 1}); game.network.sendRpc({name: "EquipItem", itemName: "PetHealthPotion", tier: 1}); }; }; }); game.ui._events.playerTickUpdate.push(player => { if (heal) { let playerHealth = (player.health / player.maxHealth) * 100; if (playerHealth <= 50) healPlayer(); } xyshow.innerHTML = `X: ${Math.round(player.position.x - 13)}, Y: ${Math.round(player.position.y) - 13}`; }); function healPlayer() { Game.currentGame.network.sendRpc({ "name": "EquipItem", "itemName": "HealthPotion", "tier": 1 }) Game.currentGame.network.sendRpc({ "name": "BuyItem", "itemName": "HealthPotion", "tier": 1 }) } function sellAllByType(type) { if (!game.ui.playerPartyCanSell) return; let sellInterval = () => { let target = Object.values(game.ui.buildings).find(e => e.type == type); if (target !== undefined) { Game.currentGame.network.sendRpc({name: "DeleteBuilding", uid: target.uid}); setTimeout(() => { sellInterval(); }, 100); } } sellInterval(); }; document.getElementsByClassName("0i")[0].addEventListener('click', function() { Game.currentGame.ui.getComponent("PopupOverlay").showConfirmation("Are you sure you want to delete all towers?", 1e4, function() { let sellInterval = () => { if (Object.keys(game.ui.buildings).length > 1 && game.ui.playerPartyCanSell) { Game.currentGame.network.sendRpc({name: "DeleteBuilding", uid: parseInt(Object.keys(game.ui.buildings)[1])}); setTimeout(() => { sellInterval(); }, 100); } } sellInterval(); }) }) document.getElementsByClassName("1i")[0].addEventListener('click', () => { sellAllByType("Wall") }); document.getElementsByClassName("2i")[0].addEventListener('click', () => { sellAllByType("Door") }); document.getElementsByClassName("3i")[0].addEventListener('click', () => { sellAllByType("SlowTrap") }); document.getElementsByClassName("4i")[0].addEventListener('click', () => { sellAllByType("ArrowTower") }); document.getElementsByClassName("5i")[0].addEventListener('click', () => { sellAllByType("CannonTower") }); document.getElementsByClassName("6i")[0].addEventListener('click', () => { sellAllByType("MeleeTower") }); document.getElementsByClassName("7i")[0].addEventListener('click', () => { sellAllByType("BombTower") }); document.getElementsByClassName("8i")[0].addEventListener('click', () => { sellAllByType("MagicTower") }); document.getElementsByClassName("9i")[0].addEventListener('click', () => { sellAllByType("GoldMine") }); document.getElementsByClassName("10i")[0].addEventListener('click', () => { sellAllByType("Harvester") }); document.getElementsByClassName("11i")[0].addEventListener('click', () => { Game.currentGame.network.sendRpc({name: "DeleteBuilding", uid: game.ui.getPlayerPetUid()}); }); document.getElementsByClassName("3i2")[0].addEventListener('click', function() { upgradeAll = !upgradeAll; let upalltoggle = document.getElementById('upalltoggle'); if (upgradeAll) { upalltoggle.style.color = "green"; upalltoggle.innerText = "ON"; } else { upalltoggle.style.color = "red"; upalltoggle.innerText = "OFF"; } }) document.getElementsByClassName("0i4")[0].addEventListener('click', function() { AHRC = !AHRC; let ahrctoggle = document.getElementById('ahrctoggle'); if (AHRC) { ahrctoggle.style.color = "green"; ahrctoggle.innerText = "ON"; } else { ahrctoggle.style.color = "red"; ahrctoggle.innerText = "OFF"; } }) document.getElementsByClassName("1i4")[0].addEventListener('click', function() { window.frss = !window.frss; let rsstoggle = document.getElementById('exactrsstoggle'); if (window.frss) { rsstoggle.style.color = "green"; rsstoggle.innerText = "ON"; } else { rsstoggle.style.color = "red"; rsstoggle.innerText = "OFF"; } }) document.getElementsByClassName("hud-Close-icon")[0].addEventListener("click", function () { menu.style.display = "none"; }); var towerCodes = ["Wall", "Door", "SlowTrap", "ArrowTower", "CannonTower", "MeleeTower", "BombTower", "MagicTower", "GoldMine", "Harvester"]; function getGoldStash() { return Object.values(Game.currentGame.ui.buildings).find(building => building.type == "GoldStash"); } window.RecordBase = function() { let baseStr = ""; for (let i in game.ui.buildings) { const building = game.ui.buildings[i]; if (towerCodes.indexOf(building.type) < 0) continue; let yaw = 0; if (["Harvester", "MeleeTower"].includes(building.type)) { if (game.world.entities[building.uid] !== undefined) yaw = game.world.entities[building.uid].targetTick.yaw; } baseStr += `${towerCodes.indexOf(building.type)},${getGoldStash().x - building.x},${getGoldStash().y - building.y},${yaw};`; } localStorage.savedBase = baseStr; console.log(baseStr); } window.buildRecordedBase = function() { function BuildBase(design) { if (typeof design !== "string") throw new Error("Argument must be given as a string."); if (getGoldStash() === undefined) throw new Error("You must have a gold stash to be able to use this."); const towers = design.split(";"); for (let towerStr of towers) { const tower = towerStr.split(","); if (tower[0] === "") continue; if (tower.length < 4) throw new Error(`${JSON.stringify(tower)} contains an issue that must be fixed before this design can be replicated.`); Game.currentGame.network.sendRpc({ name: "MakeBuilding", type: towerCodes[parseInt(tower[0])], x: getGoldStash().x - parseInt(tower[1]), y: getGoldStash().y - parseInt(tower[2]), yaw: parseInt(tower[3]) }); } } BuildBase(localStorage.savedBase); } window.DeleteRecordedbase = function() { Game.currentGame.ui.getComponent("PopupOverlay").showConfirmation("Are you sure you want to delete the recorded base?", 1e4, function() { game.ui.components.PopupOverlay.showHint("Recorded base has been successfully deleted!"); localStorage.savedBase = null; }) } 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); }; 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(); }; window.toggleZoS = () => { dimension -= 0.02; 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; }; // cutdown version of ignition's zoom // Zombs.io Emoji System + Chat Blocker // Morpheus_ , ehScripts const blockedUids = []; window.blockPlayer = (name, uid) => { game.ui.components.PopupOverlay.showConfirmation(`Are you sure you want to block ${window.filterXSS(name)} (${uid})?`, 3500, () => { blockedUids.push(uid); for (let bl of Array.from(document.getElementsByClassName(`uid${uid}`))) { bl.innerHTML = "Unblock"; bl.style.color = "blue"; bl.onclick = () => window.unblockPlayer(name, uid); }; }, () => {}); }; window.unblockPlayer = (name, uid) => { this.blockedUids.splice(blockedUids.indexOf(uid), 1); for (let bl of Array.from(document.getElementsByClassName(`uid${uid}`))) { bl.innerHTML = "Block"; bl.style.color = "red"; bl.onclick = () => window.blockPlayer(name, uid); }; }; 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}`; } var emojiList = { hmm: "https://cdn.discordapp.com/emojis/724365641963929611.png?size=48", pog: "https://cdn.discordapp.com/emojis/721070353337811026.png?size=48", pepehands: "https://cdn.discordapp.com/emojis/733406770139103293.png?size=48", pepeEyes: "https://cdn.discordapp.com/emojis/869573233794486323.gif?size=48", pepeHappy: "https://cdn.discordapp.com/emojis/801475958883614811.png?size=48", sadge: "https://cdn.discordapp.com/emojis/826530556974989344.png?size=48", ha: "https://cdn.discordapp.com/emojis/782756472886525953.png?size=48", kekw: "https://cdn.discordapp.com/emojis/748511358076846183.png?size=48", pogEyes: "https://cdn.discordapp.com/emojis/786979080406564885.png?size=48", appalled: "https://cdn.discordapp.com/emojis/830880294881853530.png?size=48", pogYou: "https://cdn.discordapp.com/emojis/790293794716516430.png?size=48", pogChag: "https://cdn.discordapp.com/emojis/831156303497134090.png?size=48", pogey: "https://cdn.discordapp.com/emojis/790293759861719050.png?size=48", weirdChamp: "https://cdn.discordapp.com/emojis/757553915389673502.png?size=48", monkaS: "https://cdn.discordapp.com/emojis/757179783573405766.png?size=48", yep: "https://cdn.discordapp.com/emojis/758356179477987339.png?size=48", whale: "https://media.discordapp.net/attachments/876015747204268033/950597451897770064/1f433.png?width=48&height=48", weirdButOkay: "https://cdn.discordapp.com/emojis/831156194247966782.gif?size=48", pogpogpogpog: "https://cdn.discordapp.com/emojis/869580566096379974.gif?size=48", wooyeah: "https://cdn.discordapp.com/emojis/791008461420888084.gif?size=48", idk: "https://cdn.discordapp.com/emojis/882513306164805642.gif?size=48", WYSI: "https://cdn.discordapp.com/emojis/816356638767972402.gif?size=48", } Game.currentGame.network.emitter.removeListener("PACKET_RPC", Game.currentGame.network.emitter._events.PACKET_RPC[1]); const onMessageReceived = function(e) { if (blockedUids.includes(e.uid) || window.chatDisabled) return; let a = Game.currentGame.ui.getComponent("Chat"), b = window.filterXSS(e.displayName), c = window.filterXSS(e.message) .replace(/(?:f|F)uck/gi, `<img src="https://cdn.discordapp.com/emojis/907625398832070667.png?size=80" height="16" width="18" style="margin: 1px 0 0 0;"></img>`) .replace(/s[3e]x+/gi, `<img src="https://cdn.discordapp.com/emojis/953759638350872666.gif?size=80&quality=lossless" height="16" width="18" style="margin: 1px 0 0 0;"></img>`) .replace(/n+[i1]+gg+[a@]+/i, `<img src="https://cdn.discordapp.com/emojis/902742239996936226.webp?size=80" height="16" width="17" style="margin: 1px 0 0 0;"></img>`); let arr = c.split(':'); for (let i = 1; i < arr.length; i += 2) { if (!emojiList[arr[i]]) arr = [c]; else arr[i] = `<img src="${emojiList[arr[i]]}" height="16" width="18" style="margin: 1px 0 0 0;"></img>`; } let d = a.ui.createElement(`<div class="hud-chat-message"><a href="javascript:void(0);" style="color: red;margin: 0 5px 0 0;display: inline-block;" class="uid${e.uid}">Block</a><strong> ${b}</strong>: ${arr.join(" ")}<small>${getClock()}</small></div>`); d.children[0].onclick = () => window.blockPlayer(b, e.uid); a.messagesElem.appendChild(d); a.messagesElem.scrollTop = a.messagesElem.scrollHeight; }; Game.currentGame.network.addRpcHandler("ReceiveChatMessage", onMessageReceived); let chattoggle = document.getElementById("togglechattoggle"); window.toggleChat = () => { window.chatDisabled = !window.chatDisabled; let chat = document.getElementsByClassName("hud-chat")[0]; if (window.chatDisabled) { chat.style.display = "none"; chattoggle.style.color = "green"; chattoggle.innerText = "ON"; } else { chat.style.display = "block"; chattoggle.style.color = "red"; chattoggle.innerText = "OFF"; }; }; // toggle chat, from ignition (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 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 => { 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 psk = e.partyShareKey; let lnk = `http://zombs.io/#/${game.options.serverId}/${psk}/`; getId("privateHud2").innerHTML += `<div style="display:inline-block;margin-right:10px;"><p style="user-select: text;">${psk} <a href="${lnk}" target="_blank" color="purple">[Link]</a></p></div>` }); document.getElementsByClassName("hud-party-actions")[0].insertAdjacentHTML("afterend", ` <button class="btn btn-theme" style="width: 120px;margin: 10px 0 0 0;" onclick="game.network.sendRpc({ name: 'JoinPartyByShareKey', partyShareKey: document.getElementById('psk').value })">Join Party</button> <input id="psk" style="margin: 10px 15px 0 15px;width: 280px;" placeholder="Party share key... (not link!)" value="" class="btn" /> <button class="btn btn-red" style="width: 120px;margin: 10px 0 0 0;box-shadow: none;" onclick="Game.currentGame.network.sendRpc({name: 'LeaveParty'});">Leave</button> `); })(); // modified party tools from ignition let showpriv = true; document.getElementsByClassName('hud-party-tabs')[0].insertAdjacentHTML("beforeend", ` <label class="switch thelabel" class="display:inline-block;" style="width: fit-content;"> <input type="checkbox" onchange="window.showpriv = !window.showpriv"> <span class="slider round" style="margin: 0 -70px 0 185px;"></span> <small style="margin: 0 0 0 100px">Only Public</small> </label> `); function checkStatus(party) { if (showpriv == true) { if(party.isOpen == 1) { return '<a style = "color: #00e700;opacity: 0.4;">[Open]<a/>'; } else if(!party.isOpen == 1) { return '<a style = "color:red;opacity: 0.4;">[Private]<a/>'; } } else { return ''; } }; // let partyCheck = (all_parties) => { document.getElementsByClassName('hud-party-grid')[0].innerHTML = ''; for (let i in all_parties) { let parties = all_parties[i]; let tab = document.createElement('div'); tab.classList.add('hud-party-link'); tab.classList.add('custom-party'); tab.id = parties.partyId; tab.isPublic = parties.isOpen; tab.name = parties.partyName; tab.members = parties.memberCount; tab.innerHTML = ` <strong>${parties.partyName} ${checkStatus(parties)}<strong/> <small>id: ${parties.partyId}</small> <span>${parties.memberCount}/4<span/> `; if(parties.memberCount == 4) { tab.classList.add('is-disabled'); } else { tab.style.display = 'block'; } setTimeout(() => { if (parties.partyId == game.ui.playerPartyId) tab.classList.add('is-active'); }, 1000); if (parties.isOpen !== 1 && showpriv == false) { tab.style.display = 'none'; } tab.addEventListener('click', function() { let isJoining = true; if(tab.isPublic == 1 && tab.members < 4) { isJoining = true; game.network.sendRpc({ name: 'JoinParty', partyId: Math.floor(tab.id) }); if(isJoining == true) { document.getElementsByClassName('hud-party-grid')[0].classList.add('is-disabled'); document.getElementsByClassName('hud-party-link')[0].classList.add('is-disabled'); setTimeout(() => { document.getElementsByClassName('hud-party-grid')[0].classList.remove('is-disabled'); document.getElementsByClassName('hud-party-link')[0].classList.remove('is-disabled'); }, 27500); } } else if(!tab.isPublic == 1) { isJoining = false; game.ui.components.PopupOverlay.showHint("You can't request private parties!"); } }); document.getElementsByClassName('hud-party-grid')[0].appendChild(tab); }; }; game.network.addRpcHandler("SetPartyList", (e) => { partyCheck(e) }); // const entirePop = document.getElementsByClassName("hud-intro-wrapper")[0].children[1]; const request = new XMLHttpRequest(); request.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { let data = JSON.parse(request.responseText); entirePop.innerHTML = `People in game now: ${data.players} - ${(data.players / data.capacity * 100).toFixed(2)}% / ${data.capacity}`; let servers = ["US East", "US West", "Europe", "Asia", "Australia", "South America"]; for (let i in servers) { game.ui.components.Intro.serverElem.children[i].setAttribute("label", `${servers[i]}: Population: ${data.regions[servers[i]].players}`); } } }; request.open("GET", "http://zombs.io/capacity", true); request.send(); // server pop by apex 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); }, 50); setTimeout(() => { clearInterval(sipt); }, 50); // full RSS from ignition, modified to refresh slower 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.randomColor = function() { for (let i in game.world.entities) { if (game.world.entities[i].entityClass === "PlayerEntity") { var hexValue = "1234567890abcdef"; var hexLength = 6; var hex = ""; for (let i = 0; i < hexLength; i++) hex += hexValue[Math.floor(Math.random() * hexValue.length)]; let hr = hexToRgb(hex); game.world.entities[i].currentModel.nameEntity.setColor(hr[0], hr[1], hr[2]); }; }; }; window.resetColor = function() { for (let i in game.world.entities) { if (game.world.entities[i].entityClass === "PlayerEntity") { game.world.entities[i].currentModel.nameEntity.setColor(220, 220, 220); }; }; }; var isSpamming = 0; function pauseChatSpam(e) { if (!isSpamming) { if (e !== "") { window.spammer = setInterval(() => { game.network.sendRpc({name: "SendChatMessage", channel: "Local", message: e}); }, 1500); } else { game.ui.components.PopupOverlay.showHint(`Please enter your message!`); }; } else if (isSpamming) { clearInterval(window.spammer); }; isSpamming = !isSpamming; }; document.querySelector('#togglespmch').addEventListener('click', function () { pauseChatSpam(document.querySelector('#spmchinput').value) let spamtoggle = document.querySelector('#spamtoggle') this.innerText = isSpamming ? "Disable Spam Chat" : "Enable Spam Chat" if (isSpamming) { this.classList.add("btn-red"); this.classList.remove("btn-theme"); } else { this.classList.add("btn-theme"); this.classList.remove("btn-red"); }; }); !game.world.removeEntity2 && (game.world.removeEntity2 = game.world.removeEntity); game.world.removeEntity = (uid) => { if (game.world.entities[uid].fromTick.model == "Tree" || game.world.entities[uid].fromTick.model == "Stone" || game.world.entities[uid].fromTick.model == "NeutralCamp") return; game.world.removeEntity2(uid); } var map = document.getElementById("hud-map"); let markerId = 1; window.addMarker = () => { map.insertAdjacentHTML("beforeend", `<div style="color: red; display: block; left: ${parseInt(game.ui.components.Map.playerElems[game.world.getMyUid()].marker.style.left)}%; top: ${parseInt(game.ui.components.Map.playerElems[game.world.getMyUid()].marker.style.top)}%; position: absolute;" class='hud-map-player'></div>`) markerId++; }; let smm = document.getElementsByClassName("hud-menu-more")[0]; smm.style.overflow = "auto"; 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"; }; }; var hasBeenInWorld = false; game.network.addEnterWorldHandler(() => { if(hasBeenInWorld) { return }; hasBeenInWorld = true; for(let i of Array.from(document.getElementsByClassName("hud-menu-icon"))) { if(i.dataset.type !== "More") { i.addEventListener('click', function() { document.getElementsByClassName("hud-menu-more")[0].style.display = "none"; }); }; }; }); document.getElementsByClassName("1z")[0].addEventListener('click', function() { window.ground(); this.className = "btn btn-theme 1z"; this.innerText = "Stop Rendering Ground?"; if (window.groundtoggle) { this.className = "btn btn-red 1z"; this.innerText = "Start Rendering Ground?"; } }) document.getElementsByClassName("1z1")[0].addEventListener('click', function() { window.grid(); this.className = "btn btn-green 1z1"; this.innerText = "Black Ground With Grid?"; if (window.gridtoggle) { this.className = "btn btn-red 1z1"; } }) document.getElementsByClassName("2z")[0].addEventListener('click', function() { window.npc(); this.className = "btn btn-theme 2z"; this.innerText = "Stop Rendering NPCs?"; if (window.npctoggle) { this.className = "btn btn-red 2z"; this.innerText = "Start Rendering NPCs?"; } }) document.getElementsByClassName("3z")[0].addEventListener('click', function() { window.env(); this.className = "btn btn-theme 3z"; this.innerText = "Stop Rendering Environment?"; if (window.envtoggle) { this.className = "btn btn-red 3z"; this.innerText = "Start Rendering Enviroment?"; } }) document.getElementsByClassName("4z")[0].addEventListener('click', function() { window.pjt(); this.className = "btn btn-theme 4z"; this.innerText = "Stop Rendering Projectiles?"; if (window.pjttoggle) { this.className = "btn btn-red 4z"; this.innerText = "Start Rendering Projectiles?"; } }) document.getElementsByClassName("5z")[0].addEventListener('click', function() { window.everything(); this.className = "btn btn-theme 5z"; this.innerText = `Stop Rendering Everything?`; if (window.everythingtoggle) { this.className = "btn btn-red 5z"; this.innerText = `Start Rendering Everything?`; } }) document.getElementsByClassName("6z")[0].addEventListener('click', function() { window.rndr(); this.className = "btn btn-theme 6z"; this.innerText = `Stop Renderer?`; if (window.rndrtoggle) { this.className = "btn btn-red 6z"; this.innerText = `Start Renderer?`; } }) window.ground = () => { window.groundtoggle = !window.groundtoggle; let z1 = document.getElementById('addon') let z1button = document.getElementsByClassName("1z1")[0] if (window.groundtoggle) { game.renderer.ground.setVisible(false) z1.style.display = "block"; } else { game.renderer.ground.setVisible(true) game.renderer.ground.setAlpha(1) z1.style.display = "none"; } if (z1button.classList.contains('btn-red') && z1.style.display === "block") { game.renderer.ground.setVisible(true) game.renderer.ground.setAlpha(0.25) } } window.grid = () => { window.gridtoggle = !window.gridtoggle; if (window.gridtoggle) { game.renderer.ground.setVisible(true) game.renderer.ground.setAlpha(0.25) } else { game.renderer.ground.setVisible(false) } } window.npc = () => { window.npctoggle = !window.npctoggle; if (window.npctoggle) { game.renderer.npcs.setVisible(false) } else { game.renderer.npcs.setVisible(true) } } window.env = () => { window.envtoggle = !window.envtoggle; if (window.envtoggle) { game.renderer.scenery.setVisible(false) } else { game.renderer.scenery.setVisible(true) } } window.pjt = () => { window.pjttoggle = !window.pjttoggle; if (window.pjttoggle) { game.renderer.projectiles.setVisible(false) } else { game.renderer.projectiles.setVisible(true) } } window.everything = () => { window.everythingtoggle = !window.everythingtoggle; if (window.everythingtoggle) { game.renderer.scene.setVisible(false) } else { game.renderer.scene.setVisible(true) } } window.rndr = () => { window.rndrtoggle = !window.rndrtoggle; if (window.rndrtoggle) { game.stop(); } else { game.start(); } } document.getElementsByClassName('hud')[0].addEventListener('mousedown', e => { if (!e.button) { game.network.sendPacket(3, { mouseDown: game.inputPacketCreator.screenToYaw(e.clientX, e.clientY) }) } smm.style.display = "none"; }) window.addName = name => { let id = `username${Math.floor(Math.random() * 9999)}`; localStorage.usernames = `${localStorage.usernames || ""}<div id="${id}"><button onclick="document.querySelector('.hud-intro-name').value = \`${name.replaceAll('`', '\`')}\`" class="btn btn-theme">${name}</button>`; }; (window.refreshNS = () => { let guide2 = document.getElementsByClassName("hud-intro-name-save")[0]; guide2.innerHTML = ` <div> ${localStorage.usernames || "<h2>No saved names... sad.<h2>"} <br /> </div> <hr /> <input type="text" class="search-bar" style="width:135px;" id="inpn" /><button class="btn-fixed btn-theme" onclick="window.addName(document.getElementById('inpn').value); window.refreshNS();">Add name</button> `; })(); window.ssMode = () => { window.ssModeToggle = !window.ssModeToggle; var mba = document.querySelectorAll([".hud-bottom-right", ".hud-bottom-left", ".hud-bottom-center", ".hud-center-left", ".hud-center-right", ".hud-chat", ".hud-chat-messages", ".hud-top-right", ".refrsh"]); 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-shield-bar")); 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")); document.querySelector(".hud-bottom-left").insertAdjacentElement("afterbegin", xyshow); // original screenshot mode code by deathrain, modified by eh }; /* keybinds */ document.addEventListener('keyup', function (e) { if (e.key === "Enter" && game.ui.playerTick.dead === 1) { game.ui.components.Chat.startTyping(); }; if (e.key === "`") { window.addMarker(); game.ui.components.PopupOverlay.showHint(`Added Marker #${markerId-1}`); }; }); document.addEventListener("keydown", e => { if (document.activeElement.tagName.toLowerCase() !== "input" && document.activeElement.tagName.toLowerCase() !== "textarea") { if (e.keyCode == 189) { // key - getRss = !getRss; }; if (e.key === "!") { window.x3builds = !window.x3builds; game.ui.components.PopupOverlay.showHint("Toggled 3x3 Block."); }; if (e.key === "=") { document.getElementsByClassName("1i4")[0].click(); game.ui.components.PopupOverlay.showHint("Toggled Full RSS."); }; if (e.key === "g") { document.getElementsByClassName("0i3")[0].click(); game.ui.components.PopupOverlay.showHint("Toggled Chat."); }; if (e.key === " " && game.ui.playerTick.weaponName === 'Bow') { autobow = true; }; if (game.ui.playerTick.weaponName !== 'Bow') { autobow = false; }; if (e.key === "x") { modm(); }; if (e.key === "?") { window.ssMode(); }; }; });