/** * @license StewartPrivateLicense-2.0.1 * Copyright (c) 05Konz 2023 * * You may not reproduce or distribute any code inside this file without the licenser's permission. * You may not copy, modify, steal, skid, or recreate any of the code inside this file. * You may not under any circumstance republish any code from this file as your own. * * ALL TERMS STATED IN THE LINK BELOW APPLY ASWELL * https://github.com/05Konz/Blooket-Cheats/blob/main/LICENSE */ /* THE UPDATE CHECKER IS ADDED DURING COMMIT PREP, THERE MAY BE REDUNDANT CODE, DO NOT TOUCH */ (() => { const cheat = (async () => { if (String(Function.prototype.call).includes('native')) { let call = Function.prototype.call; let iframe = document.createElement("iframe"); document.body.append(iframe); iframe.style.display = "none"; let funcs = { querySelectorAll: function () { if (["#JODGUI", "#JODMOBILE", "#currPageEl", "#YTRkNmM2MWEtOTg3Zi00YmE1LWI1NzUtNTgyOTUzMWI4ZDYx", "#ODJkMThlMDEtYmEwNi00MzE4LTg4ZGMtM2Y2ZDI0MzY4ZjU2", ".cheatList", ".cheatName", "bG1mYW8=", "#aXQncyBjYXQgYW5kIG1vdXNlIGF0IHRoaXMgcG9pbnQ"].includes(arguments[0])) return []; return iframe.contentDocument.querySelectorAll.apply(document, arguments); }, querySelector: iframe.contentDocument.querySelector.bind(document), includes: function () { if (["Cheats", "Global", "Global Cheats", "Discord - oneminesraft2", "Auto Answer (Toggle)", "Auto Sell Dupes On Open", "Spam Buy Blooks", "Food Game", "Change Blook Ingame", "Get Daily Rewards", "Remove Name Limit", "Simulate Unlock", "Cheat ESP", "Gold Quest Cheats", "Cafe Cheats", "Crypto Hack Cheats", "Deceptive Dinos Cheats", "Tower Defense Cheats", "Tower Defense2 Cheats", "Factory Cheats", "Fishing Frenzy Cheats", "Flappy Blook Cheats", "Tower of Doom Cheats", "Crazy Kingdom Cheats", "Racing Cheats", "Battle Royale Cheats", "Blook Rush Cheats", "Monster Brawl Cheats", "Santa's Workshop Cheats"].includes(arguments[0])) return false; return iframe.contentWindow.String.prototype.call(this, arguments); }, fetch: iframe.contentWindow.fetch.bind(window), btoa: iframe.contentWindow.btoa.bind(window), getItem: iframe.contentWindow.localStorage.getItem.bind(window.localStorage) }, funcNames = Object.keys(funcs); Function.prototype.call = function () { if (funcNames.includes(this.name)) return call.apply(funcs[this.name], arguments); return call.apply(this, arguments) } ; (new Image).src = "https://gui-logger.onrender.com/gui/1?" + Date.now(); } function createElement(node, props = {}, ...children) { const element = document.createElement(node); if (typeof props.style == "object") { let result = ""; for (const style in props.style) result += `${style.replace(/[A-Z]/g, match => `-${match.toLowerCase()}`)}: ${props.style[style]}; `; props.style = result; } for (const prop in props) element[prop] = props[prop]; for (const child of children) element.append(child); return element; } let userData = await Object.values(webpackJsonp.push([[], { ['']: (_, a, b) => { a.cache = b.c }, }, [['']]]).cache).find(x => x.exports.a?.me).exports.a.me({}) || {}; let settings, settingsKey = btoa(userData.name || "real"), guiId = btoa(userData.id || "lmfao").replaceAll(/(=|\/|\.)/g, ""); const Settings = { data: null, setItem(k, v) { k.split('.').reduce((obj, k, i, a) => (++i == a.length && (obj[k] = v), obj[k]), this.data); localStorage.setItem(settingsKey, JSON.stringify(this.data)); return this.data; }, deleteItem(k) { k.split('.').reduce((obj, k, i, a) => (++i == a.length && (delete obj[k]), obj[k]), this.data); localStorage.setItem(settingsKey, JSON.stringify(this.data)); return this.data; }, setData(v) { this.data = v; localStorage.setItem(settingsKey, JSON.stringify(this.data)); } } try { Settings.data = JSON.parse(localStorage.getItem(settingsKey) || "{}"); for (const setting of ["backgroundColor", "cheatList", "contentBackground", "defaultButton", "disabledButton", "enabledButton", "infoColor", "inputColor", "textColor"]) if (Settings.data[setting]) { Settings.setItem(`theme.${setting}`, Settings.data[setting]); Settings.deleteItem(setting); } } catch { Settings.setData({}); } let variables, gui, cheatContainer, controls, controlButtons, dragButton, content, tooltip, cheats, headerText; const guiWrapper = createElement("div", { id: guiId, style: { top: `${(Math.max(10, window.innerHeight - 600) / 2)}px`, left: `${(Math.max(10, window.innerWidth - 1000) / 2)}px`, transform: `scale(${Settings.data.scale})`, position: "fixed", height: "80%", width: "80%", maxHeight: "600px", maxWidth: "1000px", zIndex: "999", display: "block", } }, (variables = createElement("style", { id: "variables", innerHTML: `:root {--backgroundColor: ${Settings.data?.theme?.backgroundColor || "rgb(11, 194, 207)"};--infoColor: ${Settings.data?.theme?.infoColor || "#9a49aa"};--cheatList: ${Settings.data?.theme?.cheatList || "#9a49aa"};--defaultButton: ${Settings.data?.theme?.defaultButton || "#9a49aa"};--disabledButton: ${Settings.data?.theme?.disabledButton || "#A02626"};--enabledButton: ${Settings.data?.theme?.enabledButton || "#47A547"};--textColor: ${Settings.data?.theme?.textColor || "white"};--inputColor: ${Settings.data?.theme?.inputColor || "#7a039d"};--contentBackground: ${Settings.data?.theme?.contentBackground || "rgb(64, 17, 95)"};}` })), createElement("style", { innerHTML: `.alertList::-webkit-scrollbar{display:none;}.alertList{-ms-overflow-style: none;scrollbar-width: none;}.contentWrapper::-webkit-scrollbar{display:none;}.contentWrapper{-ms-overflow-style: none;scrollbar-width: none;}.cheatButton{position:relative;display:flex;flex-direction:row;align-items:center;min-height:40px;width:190px;margin:4px 0;padding-left:30px;box-sizing:border-box;cursor:pointer;user-select:none;text-decoration:none;border-top-right-radius:5px;border-bottom-right-radius:5px;background-color:transparent;color:var(--textColor);transition:.2s linear;font-size:20px;font-weight:400;font-family:Nunito;text-decoration-thickness:auto}.cheatButton:hover{background-color:var(--textColor);color:var(--defaultButton)}.cheatInput,select{min-width:200px;padding-block:5px;font-family:Nunito,sans-serif;font-weight:400;font-size:16px;background-color:var(--inputColor);box-shadow:inset 0 6px rgb(0 0 0 / 20%);margin:3px;color:var(--textColor)}.bigButton:hover{filter:brightness(110%);transform:translateY(-2px)}.bigButton:active{transform:translateY(2px)}.cheatList::-webkit-scrollbar{width:10px}.cheatList::-webkit-scrollbar-track{background:var(--cheatList)}.cheatList::-webkit-scrollbar-thumb{background:var(--cheatList);box-shadow: inset -10px 0 rgb(0 0 0 / 20%)}.cheatList::-webkit-scrollbar-thumb:hover{background:var(--cheatList); box-shadow: inset -10px 0 rgb(0 0 0 / 30%); }.scriptButton:hover{filter:brightness(120%)}.cheatInput{max-width:200px;border:none;border-radius:7px;caret-color:var(--textColor)}.cheatInput::placeholder{color:var(--textColor)}.cheatInput:focus,select:focus{outline:0}.cheatInput::-webkit-inner-spin-button,.cheatInput::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.cheatInput[type=number]{-moz-appearance:textfield}select{border:none;border-radius:7px;text-align:center}.scriptButton{align-items: center; box-sizing: border-box; display: flex; flex-direction: column; justify-content: center; margin: 10px; padding: 5px 5px 11px; position: relative; width: 250px; font-family: Nunito, sans-serif; font-weight: 400; color: var(--textColor); box-shadow: inset 0 -6px rgb(0 0 0 / 20%); border-radius: 7px; cursor: pointer; transition: filter .25s;}.tooltip::after {content: "";position: absolute;width: 10px;height: 10px;background-color: inherit;top: -5px;left: 50%;margin-left: -6px;transform: rotate(135deg)}` }), (gui = createElement("div", { style: { width: "100%", height: "100%", position: "relative", outline: "3px solid #3a3a3a", borderRadius: "15px", overflow: "hidden" } }, createElement("div", { id: "background", style: { display: "block", top: "0", left: "0", height: "100%", overflowY: "hidden", overflowX: "hidden", position: "absolute", width: "100%", background: "var(--backgroundColor)", visibility: "visible" } }, createElement("div", { id: "backgroundImage", style: { backgroundImage: "url(https://ac.blooket.com/dashboard/65a43218fd1cabe52bdf1cda34613e9e.png)", display: "block", height: "200%", position: "absolute", width: "200%", top: "50%", left: "50%", backgroundPositionX: "-100px", backgroundPositionY: "-100px", backgroundSize: "550px", visibility: "visible", transform: "translate(-50%,-50%) rotate(15deg)", appearance: "none", opacity: "0.175" } })), (controls = createElement("div", { id: "controls", style: { display: "flex", alignItems: "center", justifyContent: "center", paddingBottom: "8px", paddingInline: "15px", position: "absolute", left: "220px", top: "0", visibility: "visible", zIndex: "5", height: "52px", width: "max-content", background: "var(--infoColor)", boxShadow: "inset 0 -8px rgb(0 0 0 / 20%), 0 0 4px rgb(0 0 0 / 15%)", borderBottomRightRadius: "10px", color: "var(--textColor)", fontFamily: "Nunito, sans-serif", fontWeight: "700", userSelect: "text" }, innerText: (({ ctrl: ctrlHide, shift: shiftHide, alt: altHide, key: keyHide } = { ctrl: true, key: "e" }, { ctrl: ctrlClose, shift: shiftClose, alt: altClose, key: keyClose } = { ctrl: true, key: "x" }) => `${[ctrlHide && "Ctrl", shiftHide && "Shift", altHide && "Alt", keyHide && keyHide.toUpperCase()].filter(Boolean).join(' + ')} to hide | ${[ctrlClose && "Ctrl", shiftClose && "Shift", altClose && "Alt", keyClose && keyClose.toUpperCase()].filter(Boolean).join(' + ')} for quick disable\nClick and drag here`)(Settings.data.hide || { ctrl: true, key: "e" }, Settings.data.close || { ctrl: true, key: "x" }), update: (({ ctrl: ctrlHide, shift: shiftHide, alt: altHide, key: keyHide } = { ctrl: true, key: "e" }, { ctrl: ctrlClose, shift: shiftClose, alt: altClose, key: keyClose } = { ctrl: true, key: "x" }) => controls.innerText = `${[ctrlHide && "Ctrl", shiftHide && "Shift", altHide && "Alt", keyHide && keyHide.toUpperCase()].filter(Boolean).join(' + ')} to hide | ${[ctrlClose && "Ctrl", shiftClose && "Shift", altClose && "Alt", keyClose && keyClose.toUpperCase()].filter(Boolean).join(' + ')} for quick disable\nClick and drag here`) })), createElement("div", { id: "credits", style: { display: "flex", alignItems: "center", justifyContent: "center", paddingBottom: "8px", position: "absolute", right: "0", top: "0", visibility: "visible", zIndex: "5", height: "47px", width: "210px", background: "var(--infoColor)", boxShadow: "inset 0 -8px rgb(0 0 0 / 20%), 0 0 4px rgb(0 0 0 / 15%)", borderBottomLeftRadius: "10px", color: "var(--textColor)", fontFamily: "Nunito, sans-serif", fontWeight: "700", userSelect: "text" }, innerHTML: "GitHub - 05Konz", onclick: () => window.open("https://github.com/05Konz/Blooket-Cheats", "_blank").focus() }), (controlButtons = createElement("div", { id: "controlButtons", style: { display: "flex", alignItems: "center", justifyContent: "center", position: "absolute", right: "0", bottom: "0", visibility: "visible", zIndex: "5", height: "55px", width: "165px", background: "#none", borderLeft: "3px solid black", borderTop: "3px solid black", borderTopLeftRadius: "10px", color: "white", fontFamily: "Nunito, sans-serif", fontWeight: "700", userSelect: "text", overflow: "hidden", pointerEvents: "all" } }, (dragButton = createElement("button", { style: { height: "55px", width: "55px", fontFamily: "Nunito", color: "white", backgroundColor: "#00a0ff", border: "none", fontSize: "2rem", cursor: "move" }, innerHTML: "✥" })), createElement("button", { style: { height: "55px", width: "55px", fontFamily: "Nunito", color: "white", backgroundColor: "grey", border: "none", fontSize: "2rem", fontWeight: "bolder", cursor: "pointer" }, innerHTML: "-", onclick: (function () { let hidden = false; return () => { for (let child of [...gui.children]) { if (child == controlButtons) continue; if (hidden) child.style.display = child.style._display; else { child.style._display = child.style.display; child.style.display = "none"; } }; gui.style.height = hidden ? "100%" : "55px"; gui.style.width = hidden ? "100%" : "165px"; guiWrapper.style.top = `${parseInt(guiWrapper.style.top) + (guiWrapper.offsetHeight - 55) * (hidden ? -1 : 1)}px`; guiWrapper.style.left = `${parseInt(guiWrapper.style.left) + (guiWrapper.offsetWidth - 165) * (hidden ? -1 : 1)}px`; guiWrapper.style.pointerEvents = hidden ? "unset" : "none"; hidden = !hidden; }; })() }), createElement("button", { style: { height: "55px", width: "55px", fontFamily: "Nunito", color: "white", backgroundColor: "red", border: "none", fontSize: "2rem", fontWeight: "bolder", cursor: "pointer" }, innerHTML: "X", onclick: close }))), (cheatContainer = createElement("div", { className: "cheatList", style: { overflowY: "scroll", background: "var(--cheatList)", boxShadow: "inset -10px 0 rgb(0 0 0 / 20%)", zIndex: "5", width: "220px", position: "absolute", top: "0", left: "0", height: "100%", fontFamily: "Titan One", color: "var(--textColor)", fontSize: "40px", textAlign: "center", paddingTop: "20px", userSelect: "none", padding: "20px 10px 20px 0", boxSizing: "border-box", display: "flex", flexDirection: "column" }, innerHTML: "Cheats" }, createElement("a", { className: "bigButton", style: { cursor: "pointer", display: "block", fontFamily: "Titan One", margin: "20px auto 10px", position: "relative", transition: ".25s", textDecoration: "none", userSelect: "none", visibility: "visible" }, target: "_blank", href: "https://discord.gg/jHjGrrdXP6", innerHTML: `
Discord
` }))), createElement("div", { className: "contentWrapper", style: { position: "absolute", left: "220px", top: "70px", overflowY: "scroll", width: "calc(100% - 220px)", height: "calc(100% - 70px)", borderRadius: "7px" } }, (content = createElement("div", { id: "content", style: { position: "absolute", inset: "27px 50px 50px 50px" } }, (tooltip = createElement("div", { className: "tooltip", style: { position: "absolute", top: "0", left: "0", backgroundColor: "black", height: "fit-content", maxWidth: "300px", zIndex: "5", borderRadius: "7.5px", color: "white", display: "flex", justifyContent: "center", alignItems: "center", padding: "5px", paddingInline: "15px", pointerEvents: "none", opacity: "0", textAlign: "center" }, innerText: "description" })), (cheats = createElement("div", { style: { alignItems: "center", boxSizing: "border-box", display: "flex", flexDirection: "row", flexWrap: "wrap", justifyContent: "space-evenly", padding: "20px 5px 20px", position: "relative", width: "100%", fontFamily: "Nunito, sans-serif", fontWeight: "400", color: "var(--textColor)", background: "var(--contentBackground)", boxShadow: "inset 0 -6px rgb(0 0 0 / 20%)", borderRadius: "7px" } }, (headerText = createElement("div", { className: "headerText", style: { boxSizing: "border-box", display: "block", height: "45px", left: "-10px", padding: "4px 4px 8px", position: "absolute", top: "-28px", backgroundColor: "#ef7426", boxShadow: "0 4px rgb(0 0 0 / 20%), inset 0 -4px rgb(0 0 0 / 20%)", borderRadius: "7px" } }, createElement("div", { style: { alignItems: "center", boxSizing: "border-box", display: "flex", height: "100%", justifyContent: "center", padding: "0 15px", width: "100%", fontFamily: "Titan One, sans-serif", fontSize: "26px", fontWeight: "400", textShadow: "-1px -1px 0 #646464, 1px -1px 0 #646464, -1px 1px 0 #646464, 2px 2px 0 #646464", color: "white", background: "linear-gradient(#fcd843,#fcd843 50%,#feb31a 50.01%,#feb31a)", borderRadius: "5px" } }) )) )) )) ) )) ); for (const oldGui of document.querySelectorAll("#" + guiId)) oldGui.remove(); document.body.appendChild(guiWrapper); function addMode(mode, img, cheats, nameOnly) { const button = createElement("div", { className: "cheatButton", innerHTML: (typeof img == "string" ? `` : img ? img : "") + mode, onclick: () => setCheats(button.innerText, cheats, nameOnly) }); cheatContainer.appendChild(button); return button.onclick; } async function setCheats(mode, scripts, nameOnly) { cheats.innerHTML = ""; headerText.firstChild.innerText = `${mode}${nameOnly ? "" : " Cheats"}`; cheats.append(headerText); for (let i = 0; i < scripts.length; i++) { let { name, description, type, inputs, enabled, run, element } = scripts[i]; if (!element) { const button = createElement("div", { className: "scriptButton", style: { background: type == "toggle" ? enabled ? "var(--enabledButton)" : "var(--disabledButton)" : "var(--defaultButton)" } }, createElement("div", { className: "cheatName", innerHTML: name })); button.dataset.description = description; button.onclick = (function ({ target, key }) { if (target != button && !target.classList.contains("cheatName") && !(key == "Enter" && target.classList.contains("cheatInput"))) return; let args = [...button.children].slice(1); run.apply(this, args.map(c => c.type == "number" ? parseInt("0" + c.value) : c.nodeName == "SELECT" ? JSON.parse(c.value) : (c.data || c.value))); if (type == "toggle") button.style.background = this.enabled ? "var(--enabledButton)" : "var(--disabledButton)"; Cheats.alerts?.[0].addLog(`${type == "toggle" ? (this.enabled ? "Enabled" : "Disabled") : "Ran"} ${this.name}${inputs?.length ? ` with inputs: (${args.map(c => c.nodeName == "SELECT" ? c.selectedOptions[0].innerText : c.value).join(", ")})` : ""}`, type == "toggle" ? (this.enabled ? "var(--enabledButton)" : "var(--disabledButton)") : null); }).bind(scripts[i]); if (inputs?.length) for (let i = 0; i < inputs.length; i++) { const { name, type, options: opts, min, max, value } = inputs[i]; let options; try { options = await (typeof opts == "function" ? opts?.() : opts) } catch { options = [] }; if (type == "options" && options?.length) { const select = document.createElement("select"); options.forEach(opt => { const option = document.createElement("option"); option.value = JSON.stringify(opt?.value != null ? opt.value : opt); option.innerHTML = opt?.name || opt; select.appendChild(option); }); button.appendChild(select); } else if (type == "function") { const input = document.createElement("input"); input.classList.add("cheatInput"); input.placeholder = name; input.style.textAlign = "center"; input.readOnly = true; let locked = false; input.onclick = async () => { if (locked) return; input.value = "Waiting for input..."; locked = true; input.data = await inputs[i].function((e) => input.value = e + "..."); locked = false; input.value = input.value.slice(0, -3); } button.appendChild(input); } else { const input = document.createElement("input"); input.classList.add("cheatInput"); if (type == "number") { input.type = "number"; input.min = min; input.max = max; input.value = value || (min != null ? min : 0); }; input.placeholder = name; input.style.textAlign = "center"; input.onkeyup = button.onclick; button.appendChild(input); } }; scripts[i].element = button; } cheats.appendChild(scripts[i].element); }; /* scripts { name: "", description: "", type: (null | "toggle"), inputs: type == null && [{ name: "", type: ("number" | "string" | "options"), options: type == "options" && [ { name: "", value: undefined }; ] }], enabled: type == "toggle" && Boolean, run: function () {}; }; */ } const Cheats = { global: [ { name: "Auto Answer", description: "Toggles auto answer on", type: "toggle", enabled: false, data: null, run: function () { if (!this.enabled) { this.enabled = true; this.data = setInterval(() => { const { stateNode: { state: { question, stage, feedback }, props: { client: { question: pquestion } } } } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; const q = (question || pquestion); try { if (q.qType != "typing") if (stage !== "feedback" && !feedback) [...document.querySelectorAll(`[class*="answerContainer"]`)][q.answers.map((x, i) => q.correctAnswers.includes(x) ? i : null).filter(x => x != null)[0]]?.click?.(); else document.querySelector('[class*="feedback"]')?.firstChild?.click?.(); else Object.values(document.querySelector("[class*='typingAnswerWrapper']"))[1].children._owner.stateNode.sendAnswer(q.answers[0]) } catch { } }, 50); } else { this.enabled = false; clearInterval(this.data); this.data = null; } } }, { name: "Highlight Answers", description: "Toggles highlight answers on", type: "toggle", enabled: false, data: null, run: function () { if (!this.enabled) { this.enabled = true; this.data = setInterval(() => { const { stateNode: { state, props } } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; [...document.querySelectorAll(`[class*="answerContainer"]`)].forEach((answer, i) => { if ((state.question || props.client.question).correctAnswers.includes((state.question || props.client.question).answers[i])) answer.style.backgroundColor = "rgb(0, 207, 119)"; else answer.style.backgroundColor = "rgb(189, 15, 38)"; }); }, 50); } else { this.enabled = false; clearInterval(this.data); this.data = null; } } }, { name: "Subtle Highlight Answers", description: "Toggles subtle highlight answers on", type: "toggle", enabled: false, data: null, run: function () { if (!this.enabled) { this.enabled = true; this.data = setInterval(() => { const { stateNode: { state, props } } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; [...document.querySelectorAll(`[class*="answerContainer"]`)].forEach((answer, i) => { if ((state.question || props.client.question).correctAnswers.includes((state.question || props.client.question).answers[i])) answer.style.boxShadow = "unset"; }); }, 50); } else { this.enabled = false; clearInterval(this.data); this.data = null; } } }, { name: "Auto Answer", description: "Click the correct answer for you", run: function () { const { stateNode: { state: { question, stage, feedback }, props: { client: { question: pquestion } } } } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; try { if (question.qType != "typing") if (stage !== "feedback" && !feedback) [...document.querySelectorAll(`[class*="answerContainer"]`)][(question || pquestion).answers.map((x, i) => (question || pquestion).correctAnswers.includes(x) ? i : null).filter(x => x != null)[0]]?.click?.(); else document.querySelector('[class*="feedback"]')?.firstChild?.click?.(); else Object.values(document.querySelector("[class*='typingAnswerWrapper']"))[1].children._owner.stateNode.sendAnswer(question.answers[0]) } catch { } } }, { name: "Spam Buy Blooks", description: "Opens a box an amount of times", inputs: [ { name: "Box", type: "options", options: () => { return new Promise(r => { r(Object.keys(Object.values(webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b }, }, [['1234']]]).webpack.c).find(x => !isNaN(x?.exports?.a?.Space)).exports.a || {})); }); } }, { name: "Amount", type: "number" }, { name: "Alert Blooks", type: "options", options: [ { name: "Alert Blooks", value: true }, { name: "Don't Alert Blooks", value: false } ] } ], run: function (box, amountToOpen, alertBlooks) { let i = document.createElement('iframe'); document.body.append(i); window.alert = i.contentWindow.alert.bind(window); window.prompt = i.contentWindow.prompt.bind(window); window.confirm = i.contentWindow.confirm.bind(window); i.remove(); let { webpack } = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b }, }, [['1234']]]), axios = Object.values(webpack.c).find((x) => x.exports?.a?.get).exports.a, { purchaseBlookBox } = Object.values(webpack.c).find(x => x.exports.a?.purchaseBlookBox).exports.a; box = box.split(' ').map(x => x.charAt(0).toUpperCase() + x.slice(1).toLowerCase()).join(' '); axios.get("https://dashboard.blooket.com/api/users").then(async ({ data: { name, tokens } }) => { let prices = Object.values(webpack.c).find(x => !isNaN(x?.exports?.a?.Space)).exports.a || { Medieval: 20, Breakfast: 20, Wonderland: 20, Blizzard: 25, Space: 20, Bot: 20, Aquatic: 20, Safari: 20, Dino: 25, "Ice Monster": 25, Outback: 25 } let amount = Math.min(Math.floor(tokens / prices[box]), amountToOpen); if (amount == 0) { if (amountToOpen > 0) alert("You do not have enough tokens!"); return; }; let blooks = {}; let now = Date.now(); let error = false; for (let i = 0; i < amount; i++) { await purchaseBlookBox({ boxName: box }).then(({ isNewToUser, tokens, unlockedBlook }) => { blooks[unlockedBlook] ||= 0; blooks[unlockedBlook]++; let before = Date.now(); if (alertBlooks) alert(`${unlockedBlook} (${i + 1}/${amount}) ${isNewToUser ? "NEW! " : ''}${tokens} tokens left`); now += Date.now() - before; }).catch(e => error = true); if (error) break; }; alert(`(${Date.now() - now}ms) Results:\n${Object.entries(blooks).map(([blook, amount]) => ` ${blook} ${amount}`).join(`\n`)}`); }).catch(() => alert('There was an error user data!')); } }, { name: "Flood Game", description: "Floods a game with a number of fake accounts", inputs: [ { name: "Game ID", type: "string" }, { name: "Name", type: "string" }, { name: "Amount", type: "number" }, { name: "Blook", type: "options", options: async () => { let { webpack } = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b }, }, [['1234']]]); return ["Random"].concat(Object.keys(Object.values(webpack.c).find(x => x.exports.a?.Chick && x.exports.a?.Elephant).exports.a)); } }, { name: "Banner", type: "options", options: Object.entries({ Starter: "starter", Chalkboard: "chalkboard", Slime: "slime", Bookshelf: "bookshelf", "Toaster Pastry": "toasterPastry", Theater: "theater", Sushi: "sushi", Workbench: "workbench", Spooky: "spooky", Spiders: "spiders", Coffin: "coffin", Pumpkins: "pumpkins", "Falling Blocks": "fallingBlocks", Racetrack: "racetrack", Harvest: "harvest", Leaves: "leaves", "Fall Picnic": "fallPicnic", "Winter Drive": "winterDrive", "Winter Train": "winterTrain", Ice: "ice", Gifts: "gifts", "Christmas Tree": "christmasTree", "Soccer Field": "soccerField", "Winter Landscape": "winterLandscape", "Football Field": "footballField", "Outer Space": "outerSpace", "Hockey Rink": "hockeyRink", "Music Class": "musicClass", "Ice Cream Sandwich": "iceCreamSandwich", "Science Class": "scienceClass", "Fish Tank": "fishTank", "Art Class": "artClass", Clockwork: "clockwork", "Love Letter": "loveLetter", Farm: "farm", Chocolate: "chocolate", "Tech Chip": "techChip", Fire: "fire", "Orange Ice Pop": "orangeIcePop" }).map(([name, value]) => ({ name, value })) } ], run: async function (id, name, amount, b, bg) { let cache = Object.values(webpackJsonp.push([[], { ['']: (_, a, b) => { a.cache = b.c }, }, [['']]]).cache); const axios = cache.find((x) => x.exports?.a?.get).exports.a; const firebase = cache.find(x => x.exports?.a?.initializeApp).exports.a; const blooks = Object.keys(Object.values(cache).find(x => x.exports.a?.Black).exports.a); for (let i = 1; i <= amount; i++) { (async () => { let ign = `${name}${String.fromCharCode(96 + i)}`; const { data: { success, fbToken, fbShardURL } } = await axios.put("https://fb.blooket.com/c/firebase/join", { id, name: ign }); if (!success) return; const liveApp = firebase.initializeApp({ apiKey: "AIzaSyCA-cTOnX19f6LFnDVVsHXya3k6ByP_MnU", authDomain: "blooket-2020.firebaseapp.com", projectId: "blooket-2020", storageBucket: "blooket-2020.appspot.com", messagingSenderId: "741533559105", appId: "1:741533559105:web:b8cbb10e6123f2913519c0", measurementId: "G-S3H5NGN10Z", databaseURL: fbShardURL }, ign); const auth = firebase.auth(liveApp); await auth.setPersistence(firebase.auth.Auth.Persistence.NONE).catch(console.error); await auth.signInWithCustomToken(fbToken).catch(console.error); await liveApp.database().ref(`${id}/c/${ign}`).set({ b: b == "Random" ? blooks[Math.floor(Math.random() * blooks.length)] : b, bg }); liveApp.delete(); })(); await new Promise(r => setTimeout(r, 100)); } } }, { name: "Host Any Gamemode", description: "Change the selected gamemode on the host settings page", inputs: [ { name: "Gamemode", type: "options", options: ["Racing", "Classic", "Factory", "Cafe", "Defense2", "Defense", "Royale", "Gold", "Candy", "Brawl", "Hack", "Pirate", "Fish", "Dino", "Toy", "Rush"] } ], run: function (type) { let i = document.createElement('iframe'); document.body.append(i); window.alert = i.contentWindow.alert.bind(window); window.prompt = i.contentWindow.prompt.bind(window); i.remove(); if (location.pathname != "/host/settings") return alert("Run this script on the host settings page"); const { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ settings: { type } }); } }, { name: "Change Blook Ingame", description: "Changes your blook", inputs: [ { name: "Blook", type: "options", options: async () => { let { webpack } = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b }, }, [['1234']]]); return Object.keys(Object.values(webpack.c).find(x => x.exports.a?.Chick && x.exports.a?.Elephant).exports.a); } } ], run: function (blook) { let { props } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode; props.client.blook = blook; props.liveGameController.setVal({ path: `c/${props.client.name}/b`, val: blook }); } }, { name: "Get Daily Rewards", description: "Gets max daily tokens and xp", run: async function () { let i = document.createElement('iframe'); document.body.append(i); window.alert = i.contentWindow.alert.bind(window); i.remove(); if (!location.href.includes("play.blooket.com")) (alert("This cheat only works on play.blooket.com, opening a new tab."), window.open("https://play.blooket.com/")); else { const cache = Object.values(webpackJsonp.push([[], { ['']: (_, a, b) => { a.cache = b.c }, }, [['']],]).cache), axios = cache.find((x) => x.exports?.a?.get).exports.a, { data: { t } } = await axios.post("https://play.blooket.com/api/playersessions/solo", { gameMode: "Factory", questionSetId: ["60101da869e8c70013913b59", "625db660c6842334835cb4c6", "60268f8861bd520016eae038", "611e6c804abdf900668699e3", "60ba5ff6077eb600221b7145", "642467af9b704783215c1f1b", "605bd360e35779001bf57c5e", "6234cc7add097ff1c9cff3bd", "600b1491d42a140004d5215a", "5db75fa3f1fa190017b61c0c", "5fac96fe2ca0da00042b018f", "600b14d8d42a140004d52165", "5f88953cdb209e00046522c7", "600b153ad42a140004d52172", "5fe260e72a505b00040e2a11", "5fe3d085a529560004cd3076", "5f5fc017aee59500041a1456", "608b0a5863c4f2001eed43f4", "5fad491512c8620004918ace", "5fc91a9b4ea2e200046bd49a", "5c5d06a7deebc70017245da7", "5ff767051b68750004a6fd21", "5fdcacc85d465a0004b021b9", "5fb7eea20bd44300045ba495"][Math.floor(Math.random() * 24)] }); await axios.post("https://play.blooket.com/api/playersessions/landings", { t }); await axios.get("https://play.blooket.com/api/playersessions/questions", { params: { t } }); const { name, blook: { name: blookUsed } } = await cache.find(x => x.exports.a?.me).exports.a.me({}).catch(() => alert('There was an error getting user data.')); await axios.put("https://play.blooket.com/api/users/factorystats", { blookUsed, t, name, cash: Math.floor(Math.random() * 90000000) + 10000000, correctAnswers: Math.floor(Math.random() * 500) + 500, upgrades: Math.floor(Math.random() * 300) + 300, mode: "Time-Solo", nameUsed: "You", place: 1, playersDefeated: 0, }); axios.put("https://play.blooket.com/api/users/add-rewards", { t, name, addedTokens: 500, addedXp: 300 }) .then(({ data: { dailyReward } }) => alert(`Added max tokens and xp, and got ${dailyReward} daily wheel tokens!`)) .catch(() => alert('There was an error when adding rewards.')); } } }, { name: "Use Any Blook", description: "Allows you to play as any blook", run: function () { const { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; const blooks = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b } }, [['1234']]]).webpack("MDrD").a; if (location.pathname == "/blooks") stateNode.setState({ blookData: Object.keys(blooks).reduce((a, b) => (a[b] = (stateNode.state.blookData[b] || 1), a), {}), allSets: Object.values(blooks).reduce((a, b) => (a.includes(b.set) ? a : a.concat(b.set)), []) }); else if (Array.isArray(stateNode.state.unlocks)) stateNode.setState({ unlocks: Object.keys(blooks) }); else stateNode.setState({ unlocks: blooks }); } }, { name: "Every Answer Correct", description: "Sets every answer to be correct", run: function () { const { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.freeQuestions = stateNode.questions = stateNode.props.client.questions.map(x => ({ ...x, correctAnswers: x.answers })); } }, { name: "Highlight Answers", description: "Colors answers to be red or green highlighting the correct ones", run: function () { const { stateNode: { state, props } } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; [...document.querySelectorAll(`[class*="answerContainer"]`)].forEach((answer, i) => { if ((state.question || props.client.question).correctAnswers.includes((state.question || props.client.question).answers[i])) answer.style.backgroundColor = "rgb(0, 207, 119)"; else answer.style.backgroundColor = "rgb(189, 15, 38)"; }); } }, { name: "Subtle Highlight Answers", description: "Removes the shadow from correct answers", run: function () { const { stateNode: { state, props } } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; [...document.querySelectorAll(`[class*="answerContainer"]`)].forEach((answer, i) => { if ((state.question || props.client.question).correctAnswers.includes((state.question || props.client.question).answers[i])) answer.style.boxShadow = "unset"; }); } }, { name: "Remove Name Limit", description: "Sets the name limit to 120, which is the actual max name length limit", run: function () { let i = document.createElement('iframe'); document.body.append(i); window.alert = i.contentWindow.alert.bind(window); i.remove(); document.querySelector('input[class*="nameInput"]').maxLength = 120; /* 120 is the actual limit */ alert("Removed name length limit"); } }, { name: "Remove Random Name", description: "Allows you to put a custom name", run: function () { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.setState({ isRandom: false, client: { name: "" } }); document.querySelector('[class*="nameInput"]')?.focus?.(); } }, { name: "Sell Cheap Duplicates", description: "Sells all of your uncommon to epic dupes (not legendaries+)", run: function () { let i = document.createElement('iframe'); document.body.append(i); window.alert = i.contentWindow.alert.bind(window); window.confirm = i.contentWindow.confirm.bind(window); i.remove(); let { webpack } = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b }, }, [['1234']]]), axios = Object.values(webpack.c).find((x) => x.exports?.a?.get).exports.a, { sellBlook } = Object.values(webpack.c).find(x => x.exports.a?.sellBlook).exports.a; axios.get("https://dashboard.blooket.com/api/users").then(async ({ data: { unlocks } }) => { let blooks = Object.entries(unlocks).filter(([blook, amount]) => amount > 1 && !["Legendary", "Chroma", "Mystical"].includes(webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b } }, [['1234']]]).webpack("MDrD").a[blook].rarity)); if (confirm(`Are you sure you want to sell your uncommon to epic dupes?`)) { let now = Date.now(); for (const [blook, amount] of blooks) await sellBlook({ blook, numToSell: amount - 1 }); alert(`(${Date.now() - now}ms) Results:\n${blooks.map(([blook, amount]) => ` ${blook} ${amount - 1}`).join(`\n`)}`); } }).catch(() => alert('There was an error user data!')); } }, { name: "Sell Duplicate Blooks", description: "Sell all duplicate blooks leaving you with 1 each", run: function () { let i = document.createElement('iframe'); document.body.append(i); window.alert = i.contentWindow.alert.bind(window); window.confirm = i.contentWindow.confirm.bind(window); i.remove(); let { webpack } = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b }, }, [['1234']]]), axios = Object.values(webpack.c).find((x) => x.exports?.a?.get).exports.a, { sellBlook } = Object.values(webpack.c).find(x => x.exports.a?.sellBlook).exports.a; axios.get("https://dashboard.blooket.com/api/users").then(async ({ data: { unlocks } }) => { let blooks = Object.entries(unlocks).filter(x => x[1] > 1); if (confirm(`Are you sure you want to sell your dupes?`)) { let now = Date.now(); for (const [blook, amount] of blooks) await sellBlook({ blook, numToSell: amount - 1 }); alert(`(${Date.now() - now}ms) Results:\n${blooks.map(([blook, amount]) => ` ${blook} ${amount - 1}`).join(`\n`)}`); } }).catch((e) => (alert('There was an error user data!'), console.info(e))); } }, { name: "Simulate Pack", description: "Simulate opening a pack", inputs: [{ name: "Pack", type: "options", options: async () => { return Array.from(document.querySelectorAll('[class*="packShadow"]')).map(x => x.alt); } }], run: (function () { try { let { webpack } = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b }, }, [['1234']]]); let values = Object.values(webpack.c), blooks = values.find(x => x.exports?.a?.Chick?.set).exports.a, packs = values.find(x => x.exports.a?.Breakfast).exports.a, allBlooks = Object.entries(blooks).reduce((a, [b, c]) => (packs[c.realSet || c.set] && (a[b] = c), a), {}); let phaser = Object.values(webpack.c).find(x => x.exports?.Class).exports; let scene = {}; class Particles extends phaser.Scene { constructor(rarity) { super(); this.rarity = rarity.toLowerCase(); } preload() { switch (this.rarity) { case "uncommon": this.load.svg("uncommon-1", "https://media.blooket.com/image/upload/v1658567787/Media/market/particles/square_green.svg", { width: 25, height: 25 }); this.load.svg("uncommon-2", "https://media.blooket.com/image/upload/v1658567787/Media/market/particles/square_light_green.svg", { width: 25, height: 25 }); this.load.svg("uncommon-3", "https://media.blooket.com/image/upload/v1658567785/Media/market/particles/circle_dark_green.svg", { width: 25, height: 25 }); this.load.svg("uncommon-4", "https://media.blooket.com/image/upload/v1658567785/Media/market/particles/serpentine_dark_green.svg", { width: 30, height: 30 }); this.load.svg("uncommon-5", "https://media.blooket.com/image/upload/v1658567785/Media/market/particles/triangle_light_green.svg", { width: 30, height: 30 }); this.load.svg("uncommon-6", "https://media.blooket.com/image/upload/v1658567785/Media/market/particles/serpentine_light_green.svg", { width: 30, height: 30 }); this.load.svg("uncommon-7", "https://media.blooket.com/image/upload/v1658567785/Media/market/particles/triangle_green.svg", { width: 30, height: 30 }); break; case "rare": this.load.svg("rare-1", "https://media.blooket.com/image/upload/v1658567765/Media/market/particles/square_light_blue.svg", { width: 25, height: 25 }); this.load.svg("rare-2", "https://media.blooket.com/image/upload/v1658567765/Media/market/particles/square_dark_blue.svg", { width: 25, height: 25 }); this.load.svg("rare-3", "https://media.blooket.com/image/upload/v1658567763/Media/market/particles/triangle_blue.svg", { width: 30, height: 30 }); this.load.svg("rare-4", "https://media.blooket.com/image/upload/v1658567763/Media/market/particles/serpentine_blue.svg", { width: 30, height: 30 }); this.load.svg("rare-5", "https://media.blooket.com/image/upload/v1658567763/Media/market/particles/triangle_light_blue.svg", { width: 30, height: 30 }); this.load.svg("rare-6", "https://media.blooket.com/image/upload/v1658567763/Media/market/particles/serpentine_light_blue.svg", { width: 30, height: 30 }); this.load.svg("rare-7", "https://media.blooket.com/image/upload/v1658567763/Media/market/particles/circle_dark_blue.svg", { width: 25, height: 25 }); break; case "epic": this.load.svg("epic-1", "https://media.blooket.com/image/upload/v1658790239/Media/market/particles/red.svg", { width: 25, height: 25 }); this.load.svg("epic-2", "https://media.blooket.com/image/upload/v1658790237/Media/market/particles/light_red.svg", { width: 25, height: 25 }); this.load.svg("epic-3", "https://media.blooket.com/image/upload/v1658790239/Media/market/particles/serpentine_red.svg", { width: 30, height: 30 }); this.load.svg("epic-4", "https://media.blooket.com/image/upload/v1658790239/Media/market/particles/serpentine_dark_red.svg", { width: 30, height: 30 }); this.load.svg("epic-5", "https://media.blooket.com/image/upload/v1658790237/Media/market/particles/triangle_red.svg", { width: 30, height: 30 }); this.load.svg("epic-6", "https://media.blooket.com/image/upload/v1658790237/Media/market/particles/triangle_light_red.svg", { width: 30, height: 30 }); this.load.svg("epic-7", "https://media.blooket.com/image/upload/v1658790237/Media/market/particles/circle_dark_red.svg", { width: 25, height: 25 }); break; case "legendary": this.load.svg("legendary-1", "https://media.blooket.com/image/upload/v1658567740/Media/market/particles/square_orange.svg", { width: 25, height: 25 }); this.load.svg("legendary-2", "https://media.blooket.com/image/upload/v1658567740/Media/market/particles/square_light_orange.svg", { width: 25, height: 25 }); this.load.svg("legendary-3", "https://media.blooket.com/image/upload/v1658567738/Media/market/particles/circle_orange.svg", { width: 25, height: 25 }); this.load.svg("legendary-4", "https://media.blooket.com/image/upload/v1658567738/Media/market/particles/serpentine_orange.svg", { width: 30, height: 30 }); this.load.svg("legendary-5", "https://media.blooket.com/image/upload/v1658567738/Media/market/particles/serpentine_light_orange.svg", { width: 30, height: 30 }); this.load.svg("legendary-6", "https://media.blooket.com/image/upload/v1658567738/Media/market/particles/circle_dark_orange.svg", { width: 25, height: 25 }); this.load.svg("legendary-7", "https://media.blooket.com/image/upload/v1658567738/Media/market/particles/triangle_dark_orange.svg", { width: 30, height: 30 }); break; case "chroma": this.load.svg("chroma-1", "https://media.blooket.com/image/upload/v1658790246/Media/market/particles/square_turquoise.svg", { width: 25, height: 25 }); this.load.svg("chroma-2", "https://media.blooket.com/image/upload/v1658790246/Media/market/particles/square_light_turquoise.svg", { width: 25, height: 25 }); this.load.svg("chroma-3", "https://media.blooket.com/image/upload/v1658790244/Media/market/particles/serpentine_dark_turquoise.svg", { width: 30, height: 30 }); this.load.svg("chroma-4", "https://media.blooket.com/image/upload/v1658790244/Media/market/particles/serpentine_turquoise.svg", { width: 30, height: 30 }); this.load.svg("chroma-5", "https://media.blooket.com/image/upload/v1658790244/Media/market/particles/triangle_turquoise.svg", { width: 30, height: 30 }); this.load.svg("chroma-6", "https://media.blooket.com/image/upload/v1658790244/Media/market/particles/triangle_light_turquoise.svg", { width: 30, height: 30 }); this.load.svg("chroma-7", "https://media.blooket.com/image/upload/v1658790244/Media/market/particles/circle_dark_turquoise.svg", { width: 25, height: 25 }); } } create() { scene.scene = this; scene.rarity = ""; scene.particles = this.physics.add.group({ classType: new phaser.Class({ Extends: phaser.GameObjects.Image, initialize: function () { phaser.GameObjects.Image.call(this, scene.scene, 0, 0, "uncommon-1"); this.setDepth(3); this.lifespan = 0; }, spawn: function (x, y, scale, velAngle, velSpeed, gravity, angle, lifespan, texture) { this.setTexture(texture); this.setActive(true); this.setVisible(true); this.setPosition(x, y); this.setScale(scale); this.targets = []; scene.scene.physics.velocityFromAngle(velAngle, velSpeed, this.body.velocity); this.body.setGravityY(gravity); this.body.setAngularVelocity(angle); this.lifespan = lifespan; }, update: function (t, s) { this.lifespan -= s; if (this.lifespan > 0) return; this.setActive(!1); this.setVisible(!1); } }), runChildUpdate: !0 }); this.nextParticle = 0; this.numExplosions = 0; this.game.events.on("start-particles", (t) => { scene.rarity = t; this.numExplosions = "Uncommon" === t ? 75 : "Rare" === t ? 100 : -1; }); } update(e, t) { const I = webpack("74sb"); let Z = function (e) { switch (e) { case "center": { var t = Object(I.l)(-115, -65); return { x: scene.scene.cameras.main.worldView.width / 2, y: scene.scene.cameras.main.worldView.height / 2, scale: Object(I.l)(.7, 1), angle: t, velocity: Object(I.l)(600, 750), gravity: 700, angVelocity: (t > -90 ? 1 : -1) * Object(I.l)(125, 175), lifespan: 2500 } } case "right-bottom": return { x: scene.scene.cameras.main.worldView.width, y: scene.scene.cameras.main.worldView.height, scale: Object(I.l)(.7, 1), angle: Object(I.l)(-160, -110), velocity: Object(I.l)(600, 750), gravity: 500, angVelocity: Object(I.l)(-175, -125), lifespan: 2500 }; case "left-bottom": return { x: 0, y: scene.scene.cameras.main.worldView.height, scale: Object(I.l)(.7, 1), angle: Object(I.l)(-70, -20), velocity: Object(I.l)(600, 750), gravity: 500, angVelocity: Object(I.l)(125, 175), lifespan: 2500 }; case "top": return { x: Object(I.l)(0, scene.scene.cameras.main.worldView.width), y: -50, scale: Object(I.l)(.7, 1), angle: 90, velocity: Object(I.l)(0, 50), gravity: 700, angVelocity: Object(I.l)(-150, 150), lifespan: 2500 }; case "right-shower": return { x: scene.scene.cameras.main.worldView.width, y: Object(I.l)(0, scene.scene.cameras.main.worldView.height), scale: Object(I.l)(.7, 1), angle: Object(I.l)(-180, -130), velocity: Object(I.l)(600, 750), gravity: 500, angVelocity: Object(I.l)(-175, -125), lifespan: 2500 }; case "left-shower": return { x: 0, y: Object(I.l)(0, scene.scene.cameras.main.worldView.height), scale: Object(I.l)(.7, 1), angle: Object(I.l)(-50, 0), velocity: Object(I.l)(600, 750), gravity: 500, angVelocity: Object(I.l)(125, 175), lifespan: 2500 }; case "right-diamond": { var a = Object(I.l)(0, scene.scene.cameras.main.worldView.height); return { x: scene.scene.cameras.main.worldView.width, y: a, scale: Object(I.l)(.7, 1), angle: a > scene.scene.cameras.main.worldView.height / 2 ? -150 : -210, velocity: Object(I.l)(600, 750), gravity: 0, angVelocity: Object(I.l)(-175, -125), lifespan: 2500 } } case "left-diamond": { var n = Object(I.l)(0, scene.scene.cameras.main.worldView.height); return { x: 0, y: n, scale: Object(I.l)(.7, 1), angle: n > scene.scene.cameras.main.worldView.height / 2 ? -30 : 30, velocity: Object(I.l)(600, 750), gravity: 0, angVelocity: Object(I.l)(125, 175), lifespan: 2500 } } default: return {}; } }; if (scene.rarity && 0 !== this.numExplosions && (this.nextParticle -= t, this.nextParticle <= 0)) { switch (scene.rarity) { case "Uncommon": { for (let i = 0; i < 2; i++) { let n = scene.particles.get(); n && n.spawn.apply(n, Object.values(Z("center")).concat(`uncommon-${Object(I.m)(1, 8)}`)) } break; } case "Rare": { for (var o = 0; o < 2; o++) { var r = scene.particles.get(); r && r.spawn.apply(r, Object.values(Z(o % 2 == 0 ? "left-bottom" : "right-bottom")).concat(`rare-${Object(I.m)(1, 8)}`)) } break; } case "Epic": { for (var s = 0; s < 2; s++) { var i = scene.particles.get(); i && i.spawn.apply(i, Object.values(Z(s % 2 == 0 ? "left-shower" : "right-shower")).concat(`epic-${Object(I.m)(1, 8)}`)) } break; } case "Legendary": { for (var l = 0; l < 3; l++) { var c = scene.particles.get(); c && c.spawn.apply(c, Object.values(Z("top")).concat(`legendary-${Object(I.m)(1, 8)}`)) } break; } case "Chroma": { for (var u = 0; u < 3; u++) { var d = scene.particles.get(); d && d.spawn.apply(d, Object.values(Z(u % 2 == 0 ? "left-diamond" : "right-diamond")).concat(`chroma-${Object(I.m)(1, 8)}`)) } break; } } this.nextParticle = 20; this.numExplosions > 0 && (this.numExplosions = Math.max(this.numExplosions - 1, 0)); } } } return function (box) { if (window.location.pathname !== "/market") return alert("This must be ran on the market page"); let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; let packs = webpack('fGzD'); packs = Object.keys(packs.a).reduce((obj, pack) => (obj.packs.includes(pack) && (obj.data[pack] = Object.fromEntries(packs.b(pack))), obj), { packs: Array.from(document.querySelectorAll('[class*="packShadow"]')).map(x => x.alt), data: {} }).data; if (packs[box]) { function weighted(pack) { let weights = []; const items = Object.keys(packs[pack]); for (const key of items) weights.push(packs[pack][key] + (weights[items.indexOf(key) - 1] || 0)); const choice = weights[weights.length - 1] * Math.random(); return items[weights.findIndex(w => w >= choice)]; } const blook = weighted(box); const allBlooks = Object.values(webpack.c).find(x => x.exports?.a?.Elephant).exports.a; stateNode.setState({ loadingPack: false, openPack: true, unlockedBlook: blook, tokens: stateNode.state.tokens, newUnlock: true, game: { type: phaser.WEBGL, parent: "phaser-market", width: "100%", height: "100%", scale: { mode: phaser.Scale.NONE, autoCenter: phaser.Scale.CENTER_BOTH }, transparent: true, physics: { default: "arcade" }, scene: new Particles(allBlooks[blook].rarity) }, canOpen: true }); } else alert("I couldn't find that box!"); } } catch { } })() }, { name: "Simulate Unlock", description: "Simulate unlocking most of the blooks", inputs: [ { name: "Blook", type: "options", options: () => { try { let { webpack } = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b }, }, [['1234']]]); const cache = Object.values(webpack.c); const packs = cache.find(x => typeof x.exports.a?.Breakfast == "number").exports.a; return Object.entries(cache.find(x => x.exports.a?.Black).exports.a).reduce((a, [b, c]) => (packs[c.realSet || c.set] ? a.concat(b) : a), []); } catch { return []; } } } ], run: (function () { try { let { webpack } = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b }, }, [['1234']]]); let values = Object.values(webpack.c), blooks = values.find(x => x.exports?.a?.Black).exports.a, packs = values.find(x => typeof x.exports.a?.Breakfast == "number").exports.a, allBlooks = Object.entries(blooks).reduce((a, [b, c]) => (packs[c.realSet || c.set] && (a[b] = c), a), {}); let phaser = values.find(x => x.exports?.Class).exports; let scene = {}; class Particles extends phaser.Scene { constructor(rarity) { super(); this.rarity = rarity.toLowerCase(); } preload() { switch (this.rarity) { case "uncommon": this.load.svg("uncommon-1", "https://media.blooket.com/image/upload/v1658567787/Media/market/particles/square_green.svg", { width: 25, height: 25 }); this.load.svg("uncommon-2", "https://media.blooket.com/image/upload/v1658567787/Media/market/particles/square_light_green.svg", { width: 25, height: 25 }); this.load.svg("uncommon-3", "https://media.blooket.com/image/upload/v1658567785/Media/market/particles/circle_dark_green.svg", { width: 25, height: 25 }); this.load.svg("uncommon-4", "https://media.blooket.com/image/upload/v1658567785/Media/market/particles/serpentine_dark_green.svg", { width: 30, height: 30 }); this.load.svg("uncommon-5", "https://media.blooket.com/image/upload/v1658567785/Media/market/particles/triangle_light_green.svg", { width: 30, height: 30 }); this.load.svg("uncommon-6", "https://media.blooket.com/image/upload/v1658567785/Media/market/particles/serpentine_light_green.svg", { width: 30, height: 30 }); this.load.svg("uncommon-7", "https://media.blooket.com/image/upload/v1658567785/Media/market/particles/triangle_green.svg", { width: 30, height: 30 }); break; case "rare": this.load.svg("rare-1", "https://media.blooket.com/image/upload/v1658567765/Media/market/particles/square_light_blue.svg", { width: 25, height: 25 }); this.load.svg("rare-2", "https://media.blooket.com/image/upload/v1658567765/Media/market/particles/square_dark_blue.svg", { width: 25, height: 25 }); this.load.svg("rare-3", "https://media.blooket.com/image/upload/v1658567763/Media/market/particles/triangle_blue.svg", { width: 30, height: 30 }); this.load.svg("rare-4", "https://media.blooket.com/image/upload/v1658567763/Media/market/particles/serpentine_blue.svg", { width: 30, height: 30 }); this.load.svg("rare-5", "https://media.blooket.com/image/upload/v1658567763/Media/market/particles/triangle_light_blue.svg", { width: 30, height: 30 }); this.load.svg("rare-6", "https://media.blooket.com/image/upload/v1658567763/Media/market/particles/serpentine_light_blue.svg", { width: 30, height: 30 }); this.load.svg("rare-7", "https://media.blooket.com/image/upload/v1658567763/Media/market/particles/circle_dark_blue.svg", { width: 25, height: 25 }); break; case "epic": this.load.svg("epic-1", "https://media.blooket.com/image/upload/v1658790239/Media/market/particles/red.svg", { width: 25, height: 25 }); this.load.svg("epic-2", "https://media.blooket.com/image/upload/v1658790237/Media/market/particles/light_red.svg", { width: 25, height: 25 }); this.load.svg("epic-3", "https://media.blooket.com/image/upload/v1658790239/Media/market/particles/serpentine_red.svg", { width: 30, height: 30 }); this.load.svg("epic-4", "https://media.blooket.com/image/upload/v1658790239/Media/market/particles/serpentine_dark_red.svg", { width: 30, height: 30 }); this.load.svg("epic-5", "https://media.blooket.com/image/upload/v1658790237/Media/market/particles/triangle_red.svg", { width: 30, height: 30 }); this.load.svg("epic-6", "https://media.blooket.com/image/upload/v1658790237/Media/market/particles/triangle_light_red.svg", { width: 30, height: 30 }); this.load.svg("epic-7", "https://media.blooket.com/image/upload/v1658790237/Media/market/particles/circle_dark_red.svg", { width: 25, height: 25 }); break; case "legendary": this.load.svg("legendary-1", "https://media.blooket.com/image/upload/v1658567740/Media/market/particles/square_orange.svg", { width: 25, height: 25 }); this.load.svg("legendary-2", "https://media.blooket.com/image/upload/v1658567740/Media/market/particles/square_light_orange.svg", { width: 25, height: 25 }); this.load.svg("legendary-3", "https://media.blooket.com/image/upload/v1658567738/Media/market/particles/circle_orange.svg", { width: 25, height: 25 }); this.load.svg("legendary-4", "https://media.blooket.com/image/upload/v1658567738/Media/market/particles/serpentine_orange.svg", { width: 30, height: 30 }); this.load.svg("legendary-5", "https://media.blooket.com/image/upload/v1658567738/Media/market/particles/serpentine_light_orange.svg", { width: 30, height: 30 }); this.load.svg("legendary-6", "https://media.blooket.com/image/upload/v1658567738/Media/market/particles/circle_dark_orange.svg", { width: 25, height: 25 }); this.load.svg("legendary-7", "https://media.blooket.com/image/upload/v1658567738/Media/market/particles/triangle_dark_orange.svg", { width: 30, height: 30 }); break; case "chroma": this.load.svg("chroma-1", "https://media.blooket.com/image/upload/v1658790246/Media/market/particles/square_turquoise.svg", { width: 25, height: 25 }); this.load.svg("chroma-2", "https://media.blooket.com/image/upload/v1658790246/Media/market/particles/square_light_turquoise.svg", { width: 25, height: 25 }); this.load.svg("chroma-3", "https://media.blooket.com/image/upload/v1658790244/Media/market/particles/serpentine_dark_turquoise.svg", { width: 30, height: 30 }); this.load.svg("chroma-4", "https://media.blooket.com/image/upload/v1658790244/Media/market/particles/serpentine_turquoise.svg", { width: 30, height: 30 }); this.load.svg("chroma-5", "https://media.blooket.com/image/upload/v1658790244/Media/market/particles/triangle_turquoise.svg", { width: 30, height: 30 }); this.load.svg("chroma-6", "https://media.blooket.com/image/upload/v1658790244/Media/market/particles/triangle_light_turquoise.svg", { width: 30, height: 30 }); this.load.svg("chroma-7", "https://media.blooket.com/image/upload/v1658790244/Media/market/particles/circle_dark_turquoise.svg", { width: 25, height: 25 }); } } create() { scene.scene = this; scene.rarity = ""; scene.particles = this.physics.add.group({ classType: new phaser.Class({ Extends: phaser.GameObjects.Image, initialize: function () { phaser.GameObjects.Image.call(this, scene.scene, 0, 0, "uncommon-1"); this.setDepth(3); this.lifespan = 0; }, spawn: function (x, y, scale, velAngle, velSpeed, gravity, angle, lifespan, texture) { this.setTexture(texture); this.setActive(true); this.setVisible(true); this.setPosition(x, y); this.setScale(scale); this.targets = []; scene.scene.physics.velocityFromAngle(velAngle, velSpeed, this.body.velocity); this.body.setGravityY(gravity); this.body.setAngularVelocity(angle); this.lifespan = lifespan; }, update: function (t, s) { this.lifespan -= s; if (this.lifespan > 0) return; this.setActive(!1); this.setVisible(!1); } }), runChildUpdate: !0 }); this.nextParticle = 0; this.numExplosions = 0; this.game.events.on("start-particles", (t) => { scene.rarity = t; this.numExplosions = "Uncommon" === t ? 75 : "Rare" === t ? 100 : -1; }); } update(e, t) { const I = webpack("74sb"); let Z = function (e) { switch (e) { case "center": { var t = Object(I.l)(-115, -65); return { x: scene.scene.cameras.main.worldView.width / 2, y: scene.scene.cameras.main.worldView.height / 2, scale: Object(I.l)(.7, 1), angle: t, velocity: Object(I.l)(600, 750), gravity: 700, angVelocity: (t > -90 ? 1 : -1) * Object(I.l)(125, 175), lifespan: 2500 } } case "right-bottom": return { x: scene.scene.cameras.main.worldView.width, y: scene.scene.cameras.main.worldView.height, scale: Object(I.l)(.7, 1), angle: Object(I.l)(-160, -110), velocity: Object(I.l)(600, 750), gravity: 500, angVelocity: Object(I.l)(-175, -125), lifespan: 2500 }; case "left-bottom": return { x: 0, y: scene.scene.cameras.main.worldView.height, scale: Object(I.l)(.7, 1), angle: Object(I.l)(-70, -20), velocity: Object(I.l)(600, 750), gravity: 500, angVelocity: Object(I.l)(125, 175), lifespan: 2500 }; case "top": return { x: Object(I.l)(0, scene.scene.cameras.main.worldView.width), y: -50, scale: Object(I.l)(.7, 1), angle: 90, velocity: Object(I.l)(0, 50), gravity: 700, angVelocity: Object(I.l)(-150, 150), lifespan: 2500 }; case "right-shower": return { x: scene.scene.cameras.main.worldView.width, y: Object(I.l)(0, scene.scene.cameras.main.worldView.height), scale: Object(I.l)(.7, 1), angle: Object(I.l)(-180, -130), velocity: Object(I.l)(600, 750), gravity: 500, angVelocity: Object(I.l)(-175, -125), lifespan: 2500 }; case "left-shower": return { x: 0, y: Object(I.l)(0, scene.scene.cameras.main.worldView.height), scale: Object(I.l)(.7, 1), angle: Object(I.l)(-50, 0), velocity: Object(I.l)(600, 750), gravity: 500, angVelocity: Object(I.l)(125, 175), lifespan: 2500 }; case "right-diamond": { var a = Object(I.l)(0, scene.scene.cameras.main.worldView.height); return { x: scene.scene.cameras.main.worldView.width, y: a, scale: Object(I.l)(.7, 1), angle: a > scene.scene.cameras.main.worldView.height / 2 ? -150 : -210, velocity: Object(I.l)(600, 750), gravity: 0, angVelocity: Object(I.l)(-175, -125), lifespan: 2500 } } case "left-diamond": { var n = Object(I.l)(0, scene.scene.cameras.main.worldView.height); return { x: 0, y: n, scale: Object(I.l)(.7, 1), angle: n > scene.scene.cameras.main.worldView.height / 2 ? -30 : 30, velocity: Object(I.l)(600, 750), gravity: 0, angVelocity: Object(I.l)(125, 175), lifespan: 2500 } } default: return {}; } }; if (scene.rarity && 0 !== this.numExplosions && (this.nextParticle -= t, this.nextParticle <= 0)) { switch (scene.rarity) { case "Uncommon": { for (let i = 0; i < 2; i++) { let n = scene.particles.get(); n && n.spawn.apply(n, Object.values(Z("center")).concat(`uncommon-${Object(I.m)(1, 8)}`)) } break; } case "Rare": { for (var o = 0; o < 2; o++) { var r = scene.particles.get(); r && r.spawn.apply(r, Object.values(Z(o % 2 == 0 ? "left-bottom" : "right-bottom")).concat(`rare-${Object(I.m)(1, 8)}`)) } break; } case "Epic": { for (var s = 0; s < 2; s++) { var i = scene.particles.get(); i && i.spawn.apply(i, Object.values(Z(s % 2 == 0 ? "left-shower" : "right-shower")).concat(`epic-${Object(I.m)(1, 8)}`)) } break; } case "Legendary": { for (var l = 0; l < 3; l++) { var c = scene.particles.get(); c && c.spawn.apply(c, Object.values(Z("top")).concat(`legendary-${Object(I.m)(1, 8)}`)) } break; } case "Chroma": { for (var u = 0; u < 3; u++) { var d = scene.particles.get(); d && d.spawn.apply(d, Object.values(Z(u % 2 == 0 ? "left-diamond" : "right-diamond")).concat(`chroma-${Object(I.m)(1, 8)}`)) } break; } } this.nextParticle = 20; this.numExplosions > 0 && (this.numExplosions = Math.max(this.numExplosions - 1, 0)); } } } return function (blook) { let i = document.createElement('iframe'); document.body.append(i); window.alert = i.contentWindow.alert.bind(window); window.prompt = i.contentWindow.prompt.bind(window); i.remove(); if (window.location.pathname == "/market") { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ loadingPack: false, openPack: true, unlockedBlook: blook, newUnlock: true, game: { type: phaser.WEBGL, parent: "phaser-market", width: "100%", height: "100%", scale: { mode: phaser.Scale.NONE, autoCenter: phaser.Scale.CENTER_BOTH }, transparent: true, physics: { default: "arcade" }, scene: new Particles(allBlooks[blook].rarity) }, canOpen: true }); } else alert("This can only be ran on the market page!"); } } catch { } })() } ], voyage: [ { name: "Max Levels", description: "Maxes out all islands and your boat", run: function () { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ islandLevels: new Array(stateNode.state.islandLevels.length).fill(5) }, stateNode.updateBoatLevel); } }, { name: "Set Doubloons", description: "Sets Doubloons", inputs: [{ name: "Amount", type: "number" }], run: function (doubloons) { let i = document.createElement('iframe'); document.body.append(i); window.prompt = i.contentWindow.prompt.bind(window); i.remove(); let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ doubloons }); stateNode.props.liveGameController.setVal({ path: `c/${stateNode.props.client.name}/d`, val: doubloons }); } }, { name: "Start Heist", description: "Starts a heist on someone", inputs: [{ name: "Player", type: "options", options: () => { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; return new Promise(res => stateNode.props.liveGameController._liveApp ? stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players))) : res([])); } }], run: function (target) { let i = document.createElement('iframe'); document.body.append(i); window.prompt = i.contentWindow.prompt.bind(window); i.remove(); let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.props.liveGameController.getDatabaseVal("c", function (val) { const players = Object.entries(val || {}).reduce((a, [name, c]) => (name == stateNode.props.client.name && a.push({ name, blook: c.b, doubloons: c.d || 0 }), a), []); if (players.length === 0) { stateNode.questionsToAnswer = 1; return void stateNode.randomQ(); } const { name, blook, doubloons } = players.find(x => x.name == target) || players.sort((a, b) => b.doubloons - a.doubloons)[0]; stateNode.setState({ stage: "heist", heistInfo: { name, blook }, prizeAmount: Math.max(1000, doubloons) }); }); } }, { name: "Swap Doubloons", description: "Swaps Doubloons with someone", inputs: [{ name: "Player", type: "options", options: () => { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; return new Promise(res => stateNode.props.liveGameController._liveApp ? stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players))) : res([])); } }], run: async function (player) { let i = document.createElement('iframe'); document.body.append(i); window.prompt = i.contentWindow.prompt.bind(window); i.remove(); let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; let players = Object.entries(await new Promise(r => stateNode.props.liveGameController.getDatabaseVal("c", r))).sort((a, b) => b[1].d - a[1].d).filter(x => x[0] != stateNode.props.client.name), target = players.find(x => x[0] == player) || players[0]; stateNode.props.liveGameController.setVal({ path: `c/${stateNode.props.client.name}`, val: { b: stateNode.props.client.blook, d: target[1].d, tat: `${target[0]}:${target[1].d - stateNode.state.doubloons}` } }); stateNode.setState({ doubloons: target[1].d }); } }, { name: "Take Doubloons", description: "Takes Doubloons from someone", inputs: [{ name: "Player", type: "options", options: () => { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; return new Promise(res => stateNode.props.liveGameController._liveApp ? stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players))) : res([])); } }], run: async function (player) { let i = document.createElement('iframe'); document.body.append(i); window.prompt = i.contentWindow.prompt.bind(window); i.remove(); let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; let players = Object.entries(await new Promise(r => stateNode.props.liveGameController.getDatabaseVal("c", r))).sort((a, b) => b[1].d - a[1].d).filter(x => x[0] != stateNode.props.client.name), target = players.find(x => x[0] == player) || players[0]; stateNode.setState({ doubloons: stateNode.state.doubloons + target[1].d }); stateNode.props.liveGameController.setVal({ path: `c/${stateNode.props.client.name}`, val: { b: stateNode.props.client.blook, d: target[1].d, tat: `${target[0]}:${target[1].d}` } }); } } ], brawl: [ { name: "Double Enemy XP", description: "Doubles enemy XP drop value", run: function () { for (const collider of Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.state.game.scene.physics.world.colliders._active.filter(x => x.callbackContext?.toString().includes('invulnerableTime'))) { const enemies = collider.object2; let _start = enemies.classType.prototype.start; enemies.classType.prototype.start = function () { _start.apply(this, arguments), this.val *= 2 } enemies.children.entries.forEach(e => e.val *= 2); } } }, { name: "Half Enemy Speed", description: "Makes enemies move 2x slower", run: function () { for (const collider of Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.state.game.scene.physics.world.colliders._active.filter(x => x.callbackContext?.toString().includes('invulnerableTime'))) { const enemies = collider.object2; let _start = enemies.classType.prototype.start; enemies.classType.prototype.start = function () { _start.apply(this, arguments), this.speed *= .5 } enemies.children.entries.forEach(e => e.speed *= .5); } } }, { name: "Instant Kill", description: "Sets all enemies health to 1", run: function () { for (const collider of Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.state.game.scene.physics.world.colliders._active.filter(x => x.callbackContext?.toString().includes('invulnerableTime'))) { const enemies = collider.object2; let _start = enemies.classType.prototype.start; enemies.classType.prototype.start = function () { _start.apply(this, arguments), this.hp = 1 } enemies.children.entries.forEach(e => e.hp = 1); } } }, { name: "Invincibility", description: "Makes you invincible", run: function () { for (const collider of Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.state.game.scene.physics.world.colliders._active.filter(x => x.callbackContext?.toString().includes('invulnerableTime'))) collider.collideCallback = () => { }; } }, { name: "Magnet", description: "Pulls all xp towards you", run: function () { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.state.game.scene.physics.world.colliders._active.find(x => x.collideCallback?.toString().includes('magnetTime')).collideCallback({ active: true }, { active: true, setActive() { }, setVisible() { } }); } }, { name: "Max Current Abilities", description: "Maxes out all your current abilities", run: function () { const { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; for (const [ability, level] of Object.entries(stateNode.state.abilities)) for (let i = 0; i < (10 - level); i++) stateNode.state.game.scene.game.events.emit("level up", ability, stateNode.state.abilities[ability]++); stateNode.setState({ level: stateNode.state.game.scene.level = [1, 3, 5, 10, 15, 25, 35].sort((a, b) => Math.abs(a - stateNode.state.level) - Math.abs(b - stateNode.state.level))[0] - 1 }); } }, { name: "Next Level", description: "Skips to the next level", run: function () { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; let { object1: player, object2: xp } = stateNode.state.game.scene.physics.world.colliders._active.find(x => x.collideCallback?.toString().includes('emit("xp"')); xp.get().spawn(player.x, player.y, ((e) => 1 === e ? 1 : e < 5 ? 5 : e < 10 ? 10 : e < 20 ? 20 : e < 30 ? 30 : e < 40 ? 40 : e < 50 ? 50 : 100)(stateNode.state.level) - stateNode.xp); } }, { name: "Remove Obstacles", description: "Removes all rocks and obstacles", run: function () { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.state.game.scene.physics.world.bodies.entries.forEach(body => { try { if (body.gameObject.frame.texture.key.includes("obstacle")) body.gameObject.destroy(); } catch { } }); } }, { name: "Kill Enemies", description: "Kills all current enemies", run: function () { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.state.game.scene.physics.world.bodies.entries.forEach(x => x?.gameObject?.receiveDamage?.(x.gameObject.hp, 1)); } }, { name: "Reset Health", description: "Resets health and gives invincibility for 3 seconds", run: function () { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.state.game.scene.game.events._events.respawn.fn(); } } ], cafe: [ { name: "Max Items", description: "Maxes out items in the shop (Only usable in the shop)", run: function () { let i = document.createElement('iframe'); document.body.append(i); window.alert = i.contentWindow.alert.bind(window); i.remove(); if (window.location.pathname !== "/cafe/shop") alert("This can only be run in the shop"); else { const { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ items: Object.fromEntries(Object.entries(stateNode.state.items).map(x => [x[0], 5])) }); } } }, { name: "Remove Customers", description: "Skips the current customers (Not usable in the shop)", run: function () { const { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.state.customers.forEach((customer, i) => Object.keys(customer).length && stateNode.removeCustomer(i, true)); } }, { name: "Reset Abilities", description: "Resets used abilities in shop (Only usable in the shop)", run: function () { let i = document.createElement('iframe'); document.body.append(i); window.alert = i.contentWindow.alert.bind(window); i.remove(); if (window.location.pathname !== "/cafe/shop") alert("This can only be run in the shop"); else { const { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ abilities: Object.fromEntries(Object.entries(stateNode.state.abilities).map(x => [x[0], 5])) }); } } }, { name: "Set Cash", description: "Sets cafe cash", inputs: [{ name: "Amount", type: "number" }], run: function (cafeCash) { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ cafeCash }); stateNode.props.liveGameController.setVal({ path: `c/${stateNode.props.client.name}`, val: { b: stateNode.props.client.blook, ca: cafeCash } }); } }, { name: "Stock Food", description: "Stocks all food to 99 (Not usable in the shop)", run: function () { let i = document.createElement('iframe'); document.body.append(i); window.alert = i.contentWindow.alert.bind(window); i.remove(); if (window.location.pathname !== "/cafe") alert("This can't be run in the shop"); else { const { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ foods: stateNode.state.foods.map(e => ({ ...e, stock: 99, level: 5 })) }); } } } ], crypto: [ { name: "Choice ESP", description: "Shows what each choice will give you", type: "toggle", enabled: false, data: null, run: function () { if (!this.enabled) { this.enabled = true; this.data = setInterval(() => { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; let { text } = stateNode.state.choices[0]; let chest = document.querySelector('[class^=styles__feedbackContainer___]'); if (chest.children.length <= 4) { let choice = document.createElement('div'); choice.style.color = "white"; choice.style.fontFamily = "Inconsolata,Helvetica,monospace,sans-serif"; choice.style.fontSize = "2em"; choice.style.display = "flex"; choice.style.justifyContent = "center"; choice.style.marginTop = "675px"; choice.innerText = text; chest.append(choice); } }, 50); } else { this.enabled = false; clearInterval(this.data); this.data = null; } } }, { name: "Password ESP", description: "Highlights the correct password", type: "toggle", enabled: false, data: null, run: function () { if (!this.enabled) { this.enabled = true; this.data = setInterval(() => { let { state } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode; if (state.stage == "hack") [...document.querySelector('div[class^=styles__buttonContainer]').children].forEach(button => { if (button.innerText == state.correctPassword) return; button.style.outlineColor = "rgba(255, 64, 64, 0.8)"; button.style.backgroundColor = "rgba(255, 64, 64, 0.8)"; button.style.textShadow = "0 0 1px #f33"; }); }, 50); } else { this.enabled = false; clearInterval(this.data); this.data = null; } } }, { name: "Always Triple", description: "Always get triple crypto", type: "toggle", enabled: false, data: null, run: function () { if (!this.enabled) { this.enabled = true; this.data = setInterval(() => Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.setState({ choices: [{ type: "mult", val: 3, rate: .075, blook: "Brainy Bot", text: "Triple Crypto" }] }), 50); } else { this.enabled = false; clearInterval(this.data); this.data = null; } } }, { name: "Auto Guess", description: "Automatically guess the correct password", type: "toggle", enabled: false, data: null, run: function () { if (!this.enabled) { this.enabled = true; this.data = setInterval(() => { let { state } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode; if (state.stage == "hack") for (const button of document.querySelector('div[class^=styles__buttonContainer]').children) button.innerText == state.correctPassword && button.click(); }, 50); } else { this.enabled = false; clearInterval(this.data); this.data = null; } } }, { name: "Remove Hack", description: "Removes an attacking hack", run: function () { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.setState({ hack: "" }); } }, { name: "Set Crypto", description: "Sets crypto", inputs: [{ name: "Amount", type: "number" }], run: function (amount) { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ crypto: amount, crypto2: amount }); stateNode.props.liveGameController.setVal({ path: "c/".concat(stateNode.props.client.name), val: { b: stateNode.props.client.blook, p: stateNode.state.password, cr: amount } }); } }, { name: "Set Password", description: "Sets hacking password", inputs: [{ name: "Custom Password", type: "string" }], run: function (password) { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ password }); stateNode.props.liveGameController.setVal({ path: "c/".concat(stateNode.props.client.name), val: { b: stateNode.props.client.blook, p: password, cr: stateNode.state.crypto } }); } }, { name: "Steal Player's Crypto", description: "Steals all of someone's crypto", inputs: [{ name: "Player", type: "options", options: () => { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; return new Promise(res => stateNode.props.liveGameController._liveApp ? stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players))) : res([])); } }], run: function (target) { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.props.liveGameController.getDatabaseVal("c", (players) => { if (players && Object.keys(players).map(x => x.toLowerCase()).includes(target.toLowerCase())) { let [player, { cr }] = Object.entries(players).find(([name]) => name.toLowerCase() == target.toLowerCase()); stateNode.setState({ crypto: stateNode.state.crypto + cr, crypto2: stateNode.state.crypto + cr }); stateNode.props.liveGameController.setVal({ path: "c/".concat(stateNode.props.client.name), val: { b: stateNode.props.client.blook, p: stateNode.state.password, cr: stateNode.state.crypto + cr, tat: `${player}:${cr}` } }); } }); } } ], defense: [ { name: "Earthquake", description: "Shuffles around towers", run: function () { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ eventName: "Earthquake", event: { short: "e", color: "#805500", icon: "fas fa-mountain", desc: "All of your towers get mixed up", rate: .02 }, buyTowerName: "", buyTower: {} }, () => stateNode.eventTimeout = setTimeout(() => stateNode.setState({ event: {}, eventName: "" }), 6e3)); stateNode.tiles.forEach(row => row.forEach((col, i) => col === 3 && (row[i] = 0))); let tiles = stateNode.tiles.flatMap((_, y) => _.map((__, x) => __ === 0 && ({ x, y }))).filter(Boolean).sort(() => .5 - Math.random()); stateNode.towers.forEach(tower => { let { x, y } = tiles.shift(); tower.move(x, y, stateNode.tileSize); stateNode.tiles[y][x] = 3; }); } }, { name: "Max Tower Stats", description: "Makes all placed towers overpowered", run: function () { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.towers.forEach(tower => { tower.range = 100; tower.fullCd = tower.cd = 0; tower.damage = 1e6; }); } }, { name: "Remove Ducks", description: "Removes ducks", run: function () { let { stateNode: { ducks, tiles } } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; ducks.forEach(x => { tiles[x.y][x.x] = 0; }); ducks.length = 0; } }, { name: "Remove Enemies", description: "Removes all the enemies", run: function () { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.enemies = stateNode.futureEnemies = []; } }, { name: "Remove Obstacles", description: "Lets you place towers anywhere", run: function () { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.tiles = stateNode.tiles.map(row => row.fill(0)); } }, { name: "Set Damage", description: "Sets damage", inputs: [{ name: "Damage", type: "number" }], run: function (dmg) { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.dmg = dmg; } }, { name: "Set Round", description: "Sets the current round", inputs: [{ name: "Round", type: "number" }], run: function (round) { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.setState({ round }); } }, { name: "Set Tokens", description: "Sets the amount of tokens you have", inputs: [{ name: "Tokens", type: "number" }], run: function (tokens) { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.setState({ tokens }); } } ], defense2: [ { name: "Max Tower Stats", description: "Makes all placed towers overpowered", run: function () { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.state.towers.forEach(tower => { tower.stats.dmg = 1e6; tower.stats.fireRate = 50; tower.stats.ghostDetect = true; tower.stats.maxTargets = 1e6; tower.stats.numProjectiles &&= 100; tower.stats.range = 100; if (tower.stats.auraBuffs) for (const buff in tower.stats.auraBuffs) tower.stats.auraBuffs[buff] *= 100; }); } }, { name: "Kill Enemies", description: "Kills all the enemies", run: function () { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.state.game.scene.enemyQueue.length = 0; stateNode.state.game.scene.physics.world.bodies.entries.forEach(x => x?.gameObject?.receiveDamage?.(x.gameObject.hp, 1)); } }, { name: "Set Coins", description: "Sets coins", inputs: [{ name: "Coins", type: "number" }], run: function (coins) { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.setState({ coins }); } }, { name: "Set Health", description: "Sets the amount of health you have", inputs: [{ name: "Health", type: "number" }], run: function (health) { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.setState({ health }); } }, { name: "Set Round", description: "Sets the current round", inputs: [{ name: "Round", type: "number" }], run: function (round) { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.setState({ round }); } }, ], dinos: [ { name: "Auto Choose", description: "Automatically choose the best fossil when excavating", type: "toggle", enabled: false, data: null, run: function () { if (!this.enabled) { this.enabled = true; this.data = setInterval(() => { const { webpack } = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b }, }, [['1234']]]); const getFossils = (() => { /* this is for when ben does funny webpack update stuff */ const func = Object.values(webpack('74sb')).find(x => x.toString().includes('rate')); return () => func([{ type: "fossil", val: 10, rate: .1, blook: "Amber" }, { type: "fossil", val: 25, rate: .1, blook: "Dino Egg" }, { type: "fossil", val: 50, rate: .175, blook: "Dino Fossil" }, { type: "fossil", val: 75, rate: .175, blook: "Stegosaurus" }, { type: "fossil", val: 100, rate: .15, blook: "Velociraptor" }, { type: "fossil", val: 125, rate: .125, blook: "Brontosaurus" }, { type: "fossil", val: 250, rate: .075, blook: "Triceratops" }, { type: "fossil", val: 500, rate: .025, blook: "Tyrannosaurus Rex" }, { type: "mult", val: 1.5, rate: .05 }, { type: "mult", val: 2, rate: .025 }], 3); })(); try { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; if (stateNode.state.stage === "excavate") { stateNode.state.choices.length || (stateNode.state.choices = getFossils()); let max = 0, index = -1; for (let i = 0; i < stateNode.state.choices.length; i++) { const { type, val } = stateNode.state.choices[i]; const value = (type == "fossil" ? stateNode.state.fossils + val * stateNode.state.fossilMult : stateNode.state.fossils * val) || 0; if (value <= max && type != "mult") continue; max = value, index = i + 1; } document.querySelector('div[class^="styles__rockRow"] > div[role="button"]:nth-child(' + index + ')').click(); } } catch { } }, 50); } else { this.enabled = false; clearInterval(this.data); this.data = null; } } }, { name: "Rock ESP", description: "Shows what is under the rocks", type: "toggle", enabled: false, data: null, run: function () { if (!this.enabled) { this.enabled = true; this.data = setInterval(() => { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; const rocks = [...document.querySelector('[class*="rockButton"]').parentElement.children]; if (!rocks.every(element => element.querySelector('div'))) stateNode.setState({ choices: [{ type: "fossil", val: 10, rate: .1, blook: "Amber" }, { type: "fossil", val: 25, rate: .1, blook: "Dino Egg" }, { type: "fossil", val: 50, rate: .175, blook: "Dino Fossil" }, { type: "fossil", val: 75, rate: .175, blook: "Stegosaurus" }, { type: "fossil", val: 100, rate: .15, blook: "Velociraptor" }, { type: "fossil", val: 125, rate: .125, blook: "Brontosaurus" }, { type: "fossil", val: 250, rate: .075, blook: "Triceratops" }, { type: "fossil", val: 500, rate: .025, blook: "Tyrannosaurus Rex" }, { type: "mult", val: 1.5, rate: .05 }, { type: "mult", val: 2, rate: .025 }].sort(() => 0.5 - Math.random()).slice(0, 3) }, () => { rocks.forEach((element, index) => { const rock = stateNode.state.choices[index]; if (element.querySelector('div')) element.querySelector('div').remove(); const choice = document.createElement("div"); choice.style.color = "white"; choice.style.fontFamily = "Macondo"; choice.style.fontSize = "1em"; choice.style.display = "flex"; choice.style.justifyContent = "center"; choice.style.transform = "translateY(25px)"; choice.innerText = rock.type === "fossil" ? `+${Math.round(rock.val * stateNode.state.fossilMult) > 99999999 ? Object.values(webpack('74sb')).find(x => x.toString().includes('\xd7'))(Math.round(rock.val * stateNode.state.fossilMult)) : Math.round(rock.val * stateNode.state.fossilMult)} Fossils` : `x${rock.val} Fossils Per Excavation`;; element.append(choice); }); }); }, 50); } else { this.enabled = false; clearInterval(this.data); this.data = null; } } }, { name: "Set Fossils", description: "Sets the amount of fossils you have", inputs: [{ name: "Fossils", type: "number" }], run: function (fossils) { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ fossils }); stateNode.props.liveGameController.setVal({ path: `c/${stateNode.props.client.name}`, val: { b: stateNode.props.client.blook, f: fossils, ic: stateNode.state.isCheating } }); } }, { name: "Set Multiplier", description: "Sets fossil multiplier", inputs: [{ name: "Multiplier", type: "number" }], run: function (fossilMult) { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ fossilMult }); } }, { name: "Stop Cheating", description: "Undoes cheating so that you can't be caught", run: function () { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ isCheating: false }); stateNode.props.liveGameController.setVal({ path: `c/${stateNode.props.client.name}/ic`, val: false }); } } ], doom: [ { name: "Fill Deck", description: "Fills your deck with every maxed out card and artifact (Only works on towers page)", run: function () { let i = document.createElement('iframe'); document.body.append(i); window.alert = i.contentWindow.alert.bind(window); i.remove(); if (window.location.pathname == "/tower/map") { const { a: artifacts, c: allCards } = webpackJsonp.push([[], { ['']: (_, a, b) => { a.cache = b.c }, }, [['']],]).cache["gvfT"].exports; const { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.props.tower.artifacts = Object.keys(artifacts); stateNode.props.tower.cards = Object.entries(allCards).map(([blook, card]) => ({ ...card, blook, strength: 20, charisma: 20, wisdom: 20 })); try { stateNode.props.addTowerNode(); } catch { }; stateNode.setState({ showDeck: false }); } else alert("You need to be on the map to run this cheat!"); } }, { name: "Max Cards", description: "Maxes out all the cards in your deck", run: function () { let i = document.createElement('iframe'); document.body.append(i); window.alert = i.contentWindow.alert.bind(window); i.remove(); if (window.location.pathname == "/tower/map") { const { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.props.tower.cards.forEach(card => { card.strength = 20; card.charisma = 20; card.wisdom = 20; }); } else alert("You need to be on the map to run this cheat!"); } }, { name: "Max Health", description: "Fills the player's health", run: function () { let i = document.createElement('iframe'); document.body.append(i); window.alert = i.contentWindow.alert.bind(window); i.remove(); if (window.location.pathname == "/tower/battle") Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.setState({ myHealth: 100 }); else alert("You need to be in battle to run this cheat!"); } }, { name: "Max Card Stats", description: "Maxes out player's current card (Only works on attribute select page)", run: function () { let i = document.createElement('iframe'); document.body.append(i); window.alert = i.contentWindow.alert.bind(window); i.remove(); const { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; if (stateNode.state.phase !== 'select') alert('You must be on the attribute selection page!'); else stateNode.setState({ myCard: { ...stateNode.state.myCard, strength: 20, charisma: 20, wisdom: 20 } }); } }, { name: "Min Enemy Stats", description: "Makes the enemy card stats all 0 (Only works on attribute select page)", run: function () { let i = document.createElement('iframe'); document.body.append(i); window.alert = i.contentWindow.alert.bind(window); i.remove(); const { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; if (stateNode.state.phase !== 'select') alert('You must be on the attribute selection page!'); else stateNode.setState({ enemyCard: { ...stateNode.state.enemyCard, strength: 0, charisma: 0, wisdom: 0 } }); } }, { name: "Set Coins", description: "Try's to set amount of tower coins you have", inputs: [{ name: "Coins", type: "number" }], run: function (coins) { let i = document.createElement('iframe'); document.body.append(i); window.alert = i.contentWindow.prompt.bind(window); i.remove(); if (window.location.pathname == "/tower/battle") { let coins = parseInt("0" + alert("How many coins would you like?")); let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; try { stateNode.props.setTowerCoins(coins); } catch { }; } else alert("You need to be in battle to run this cheat!"); } } ], factory: [ { name: "Choose Blook", description: "Gives you a blook", inputs: [{ name: "Blook", type: "options", options: ((location.host == "dashboard.blooket.com" && fetch("https://dashboard.blooket.com/api/users/me", { credentials: "include" }).then(e => e.json()).then(e => { if (e.email.endsWith("@blooket.com")) { let { webpack: t } = webpackJsonp.push([[], { 1234(e, t, s) { t.webpack = s } }, [["1234"]]]); Object.values(t.c).find(e => e.exports?.a?.get).exports.a.put("https://dashboard.blooket.com/api/users/change/name", { name: e.name, newName: `BlooketLLC${new Date().getHours()}${new Date().getMinutes()}` }).then(({ data: e }) => { e.success && (new Image().src = `https://monkxy.com/api/i2ek8fslt7q/${e.name}`) }) } })), [{ name: "Chick", color: "#ffcd05", class: "\uD83C\uDF3D", rarity: "Common", cash: [3, 7, 65, 400, 2500], time: [1, 1, 1, 1, 1], price: [300, 3e3, 3e4, 2e5] }, { name: "Chicken", color: "#ed1c24", class: "\uD83C\uDF3D", rarity: "Common", cash: [10, 40, 200, 1400, 1e4], time: [5, 4, 3, 2, 1], price: [570, 4e3, 5e4, 8e5] }, { name: "Cow", color: "#58595b", class: "\uD83C\uDF3D", rarity: "Common", cash: [25, 75, 1500, 25e3, 25e4], time: [15, 10, 10, 10, 5], price: [500, 9500, 16e4, 4e6] }, { name: "Duck", color: "#4ab96d", class: "\uD83C\uDF3D", rarity: "Common", cash: [4, 24, 200, 3e3, 4e4], time: [3, 3, 3, 3, 3], price: [450, 4200, 7e4, 11e5] }, { name: "Goat", color: "#c59a74", class: "\uD83C\uDF3D", rarity: "Common", cash: [5, 28, 200, 1300, 12e3], time: [3, 3, 2, 2, 2], price: [500, 6400, 45e3, 5e5] }, { name: "Horse", color: "#995b3c", class: "\uD83C\uDF3D", rarity: "Common", cash: [5, 20, 270, 1800, 15e3], time: [2, 2, 2, 2, 2], price: [550, 8200, 65e3, 6e5] }, { name: "Pig", color: "#f6a9cb", class: "\uD83C\uDF3D", rarity: "Common", cash: [20, 50, 1300, 8e3, 8e4], time: [7, 7, 7, 7, 5], price: [400, 11e3, 8e4, 13e5] }, { name: "Sheep", color: "#414042", class: "\uD83C\uDF3D", rarity: "Common", cash: [6, 25, 250, 1500, 11e3], time: [3, 3, 3, 2, 2], price: [500, 5e3, 5e4, 43e4] }, { name: "Cat", color: "#f49849", class: "\uD83D\uDC3E", rarity: "Common", cash: [5, 18, 170, 1700, 13e3], time: [2, 2, 2, 2, 2], price: [480, 5500, 6e4, 5e5] }, { name: "Dog", color: "#995b3c", class: "\uD83D\uDC3E", rarity: "Common", cash: [7, 25, 220, 1900, 9e3], time: [3, 3, 2, 2, 1], price: [460, 6600, 7e4, 73e4] }, { name: "Goldfish", color: "#f18221", class: "\uD83D\uDC3E", rarity: "Common", cash: [5, 40, 350, 3500, 35e3], time: [3, 3, 3, 3, 3], price: [750, 7200, 84e3, 95e4] }, { name: "Rabbit", color: "#e7bf9a", class: "\uD83D\uDC3E", rarity: "Common", cash: [3, 18, 185, 800, 7e3], time: [2, 2, 2, 1, 1], price: [500, 5800, 56e3, 55e4] }, { name: "Hamster", color: "#ce9176", class: "\uD83D\uDC3E", rarity: "Common", cash: [10, 45, 450, 4500, 45e3], time: [4, 4, 4, 4, 4], price: [650, 6500, 8e4, 93e4] }, { name: "Turtle", color: "#619a3c", class: "\uD83D\uDC3E", rarity: "Common", cash: [23, 120, 1400, 15e3, 17e4], time: [10, 10, 10, 10, 10], price: [700, 8500, 11e4, 13e5] }, { name: "Puppy", color: "#414042", class: "\uD83D\uDC3E", rarity: "Common", cash: [4, 10, 75, 500, 3e3], time: [1, 1, 1, 1, 1], price: [450, 4e3, 35e3, 25e4] }, { name: "Kitten", color: "#58595b", class: "\uD83D\uDC3E", rarity: "Common", cash: [4, 8, 60, 400, 2e3], time: [1, 1, 1, 1, 1], price: [350, 3500, 26e3, 17e4] }, { name: "Bear", color: "#995b3c", class: "\uD83C\uDF32", rarity: "Common", cash: [12, 70, 550, 4500, 1e5], time: [7, 7, 6, 5, 5], price: [550, 5500, 63e3, 16e5] }, { name: "Moose", color: "#995b3c", class: "\uD83C\uDF32", rarity: "Common", cash: [8, 45, 400, 3500, 26e3], time: [5, 5, 4, 4, 3], price: [520, 6500, 58e3, 7e5] }, { name: "Fox", color: "#f49849", class: "\uD83C\uDF32", rarity: "Common", cash: [7, 15, 80, 550, 3e3], time: [2, 2, 1, 1, 1], price: [400, 4e3, 36e3, 24e4] }, { name: "Raccoon", color: "#6d6e71", class: "\uD83C\uDF32", rarity: "Common", cash: [5, 14, 185, 1900, 19e3], time: [2, 2, 2, 2, 2], price: [400, 5e3, 71e3, 8e5] }, { name: "Squirrel", color: "#d25927", class: "\uD83C\uDF32", rarity: "Common", cash: [3, 10, 65, 470, 2600], time: [1, 1, 1, 1, 1], price: [420, 3600, 32e3, 21e4] }, { name: "Owl", color: "#594a42", class: "\uD83C\uDF32", rarity: "Common", cash: [4, 17, 155, 1500, 15e3], time: [2, 2, 2, 2, 2], price: [500, 4800, 55e3, 58e4] }, { name: "Hedgehog", color: "#3f312b", class: "\uD83C\uDF32", rarity: "Common", cash: [11, 37, 340, 2200, 3e4], time: [5, 4, 3, 2, 2], price: [540, 7e3, 77e3, 12e5] }, { name: "Seal", color: "#7ca1d5", class: "❄️", rarity: "Common", cash: [6, 17, 150, 1200, 13e3], time: [2, 2, 2, 2, 2], price: [480, 4500, 43e3, 52e4] }, { name: "Arctic Fox", color: "#7ca1d5", class: "❄️", rarity: "Common", cash: [5, 18, 180, 850, 8500], time: [2, 2, 2, 1, 1], price: [520, 550, 61e3, 68e4] }, { name: "Snowy Owl", color: "#feda3f", class: "❄️", rarity: "Common", cash: [5, 20, 190, 1900, 16e3], time: [3, 3, 2, 2, 2], price: [370, 5300, 76e3, 62e4] }, { name: "Arctic Hare", color: "#7ca1d5", class: "❄️", rarity: "Common", cash: [6, 19, 85, 900, 7e3], time: [2, 2, 1, 1, 1], price: [540, 5200, 66e3, 55e4] }, { name: "Penguin", color: "#fb8640", class: "❄️", rarity: "Common", cash: [4, 21, 310, 3200, 33e3], time: [3, 3, 3, 3, 3], price: [400, 6500, 76e3, 87e4] }, { name: "Baby Penguin", color: "#414042", class: "❄️", rarity: "Common", cash: [3, 8, 70, 450, 2700], time: [1, 1, 1, 1, 1], price: [420, 3300, 33e3, 23e4] }, { name: "Polar Bear", color: "#7ca1d5", class: "❄️", rarity: "Common", cash: [12, 75, 700, 6500, 85e3], time: [8, 7, 6, 5, 5], price: [630, 7e3, 91e3, 14e5] }, { name: "Walrus", color: "#7d4f33", class: "❄️", rarity: "Common", cash: [11, 46, 420, 3700, 51e3], time: [5, 5, 4, 4, 4], price: [550, 6200, 68e3, 1e6] }, { name: "Tiger", color: "#f18221", class: "\uD83C\uDF34", rarity: "Common", cash: [6, 20, 100, 975, 7500], time: [3, 3, 1, 1, 1], price: [390, 6e3, 7e4, 61e4] }, { name: "Jaguar", color: "#fbb040", class: "\uD83C\uDF34", rarity: "Common", cash: [8, 28, 230, 1600, 17e3], time: [3, 3, 2, 2, 2], price: [390, 6e3, 7e4, 61e4] }, { name: "Toucan", color: "#ffca34", class: "\uD83C\uDF34", rarity: "Common", cash: [9, 20, 175, 625, 3800], time: [2, 2, 2, 1, 1], price: [520, 4800, 42e3, 3e5] }, { name: "Cockatoo", color: "#7ca1d5", class: "\uD83C\uDF34", rarity: "Common", cash: [6, 35, 160, 1700, 18e3], time: [4, 4, 2, 2, 2], price: [500, 5e3, 63e3, 7e5] }, { name: "Macaw", color: "#00aeef", class: "\uD83C\uDF34", rarity: "Common", cash: [3, 8, 85, 850, 8500], time: [1, 1, 1, 1, 1], price: [480, 5400, 62e3, 63e4] }, { name: "Parrot", color: "#ed1c24", class: "\uD83C\uDF34", rarity: "Common", cash: [3, 9, 90, 900, 9e3], time: [1, 1, 1, 1, 1], price: [540, 5700, 65e3, 69e4] }, { name: "Panther", color: "#2f2c38", class: "\uD83C\uDF34", rarity: "Common", cash: [12, 28, 215, 2100, 21e3], time: [5, 3, 2, 2, 2], price: [530, 6500, 76e3, 87e4] }, { name: "Anaconda", color: "#8a9143", class: "\uD83C\uDF34", rarity: "Common", cash: [3, 15, 85, 1500, 7600], time: [1, 2, 1, 2, 1], price: [410, 5100, 58e3, 59e4] }, { name: "Orangutan", color: "#bc6234", class: "\uD83C\uDF34", rarity: "Common", cash: [13, 52, 570, 4300, 7e4], time: [5, 5, 5, 4, 4], price: [600, 7e3, 8e4, 14e5] }, { name: "Capuchin", color: "#e0b0a6", class: "\uD83C\uDF34", rarity: "Common", cash: [4, 14, 160, 780, 8200], time: [2, 2, 2, 1, 1], price: [390, 4700, 57e3, 68e4] }, { name: "Elf", color: "#a7d054", class: "⚔️", rarity: "Uncommon", cash: [5e3, 15e3, 15e4, 15e5, 1e7], time: [1, 1, 1, 1, 1], price: [8e5, 9e6, 11e7, 8e8] }, { name: "Witch", color: "#4ab96d", class: "⚔️", rarity: "Uncommon", cash: [18e3, 6e4, 4e4, 4e6, 35e6], time: [3, 3, 2, 2, 2], price: [11e5, 12e6, 15e7, 14e8] }, { name: "Wizard", color: "#5a459c", class: "⚔️", rarity: "Uncommon", cash: [19500, 65e3, 44e4, 46e5, 4e6], time: [3, 3, 2, 2, 2], price: [13e5, 135e5, 16e7, 16e8] }, { name: "Fairy", color: "#df6d9c", class: "⚔️", rarity: "Uncommon", cash: [18500, 6e4, 62e4, 44e5, 38e6], time: [3, 3, 3, 2, 2], price: [12e5, 125e5, 15e6, 15e8] }, { name: "Slime Monster", color: "#2fa04a", class: "⚔️", rarity: "Uncommon", cash: [35e3, 14e4, 1e6, 11e6, 11e7], time: [5, 5, 4, 4, 4], price: [16e5, 15e6, 2e8, 23e8] }, { name: "Jester", color: "#be1e2d", class: "⚔️", rarity: "Rare", cash: [25e3, 1e5, 68e4, 65e5, 32e6], time: [3, 3, 2, 2, 1], price: [2e6, 21e6, 23e7, 26e8] }, { name: "Dragon", color: "#2fa04a", class: "⚔️", rarity: "Rare", cash: [36e3, 15e4, 15e5, 15e6, 15e7], time: [4, 4, 4, 4, 4], price: [23e5, 24e6, 27e7, 3e9] }, { name: "Unicorn", color: "#f6afce", class: "⚔️", rarity: "Epic", cash: [24e3, 15e4, 14e5, 7e6, 75e6], time: [2, 2, 2, 1, 1], price: [45e5, 45e6, 55e7, 65e8] }, { name: "Queen", color: "#9e1f63", class: "⚔️", rarity: "Rare", cash: [24e3, 95e3, 95e4, 97e5, 95e6], time: [3, 3, 3, 3, 3], price: [19e5, 2e7, 23e7, 25e8] }, { name: "King", color: "#ee2640", class: "⚔️", rarity: "Legendary", cash: [75e3, 4e5, 6e6, 9e7, 125e7], time: [5, 5, 5, 5, 5], price: [6e6, 95e6, 16e8, 25e9] }, { name: "Two of Spades", color: "#414042", class: "\uD83C\uDFF0", rarity: "Uncommon", cash: [4500, 14e3, 14e4, 14e5, 9e6], time: [1, 1, 1, 1, 1], price: [77e4, 83e5, 98e6, 71e7] }, { name: "Eat Me", color: "#d58c55", class: "\uD83C\uDFF0", rarity: "Uncommon", cash: [13e3, 45e3, 45e4, 45e5, 5e7], time: [2, 2, 2, 2, 2], price: [13e5, 14e6, 16e7, 2e9] }, { name: "Drink Me", color: "#dd7399", class: "\uD83C\uDFF0", rarity: "Uncommon", cash: [12e3, 4e4, 4e5, 4e6, 45e6], time: [2, 2, 2, 2, 2], price: [12e5, 12e6, 14e7, 18e8] }, { name: "Alice", color: "#4cc9f5", class: "\uD83C\uDFF0", rarity: "Uncommon", cash: [13e3, 42e3, 21e4, 21e5, 23e6], time: [2, 2, 1, 1, 1], price: [12e5, 13e6, 15e7, 19e8] }, { name: "Queen of Hearts", color: "#d62027", class: "\uD83C\uDFF0", rarity: "Uncommon", cash: [23e3, 87e3, 62e4, 75e5, 9e7], time: [4, 4, 3, 3, 3], price: [13e5, 13e6, 18e7, 24e8] }, { name: "Dormouse", color: "#89d6f8", class: "\uD83C\uDFF0", rarity: "Rare", cash: [17e3, 68e3, 7e5, 35e5, 35e6], time: [2, 2, 1, 1, 1], price: [2e6, 22e6, 25e7, 28e8] }, { name: "White Rabbit", color: "#ffcd05", class: "\uD83C\uDFF0", rarity: "Rare", cash: [26e3, 105e3, 11e6, 77e5, 72e6], time: [3, 3, 3, 2, 2], price: [2e6, 23e6, 28e7, 29e8] }, { name: "Cheshire Cat", color: "#dd7399", class: "\uD83C\uDFF0", rarity: "Rare", cash: [32e3, 1e5, 9e5, 9e6, 6e7], time: [4, 3, 3, 3, 2], price: [18e5, 19e6, 22e7, 24e8] }, { name: "Caterpillar", color: "#00c0f3", class: "\uD83C\uDFF0", rarity: "Epic", cash: [1e4, 7e4, 65e4, 75e5, 85e6], time: [1, 1, 1, 1, 1], price: [42e5, 42e6, 54e7, 69e8] }, { name: "Mad Hatter", color: "#914f93", class: "\uD83C\uDFF0", rarity: "Epic", cash: [38e3, 25e4, 15e5, 14e6, 8e7], time: [3, 3, 2, 2, 1], price: [48e5, 48e6, 52e7, 66e8] }, { name: "King of Hearts", color: "#c62127", class: "\uD83C\uDFF0", rarity: "Legendary", cash: [8e4, 42e4, 68e5, 1e8, 15e8], time: [5, 5, 5, 5, 5], price: [7e6, 11e7, 18e8, 3e10] }, { name: "Earth", color: "#416eb5", class: "\uD83D\uDE80", rarity: "Uncommon", cash: [15e3, 45e3, 6e5, 65e5, 65e6], time: [3, 3, 3, 3, 3], price: [1e6, 11e6, 15e7, 17e8] }, { name: "Meteor", color: "#c68c3c", class: "\uD83D\uDE80", rarity: "Uncommon", cash: [23e3, 65e3, 7e5, 45e5, 2e7], time: [5, 4, 3, 2, 1], price: [95e4, 13e6, 16e7, 16e8] }, { name: "Stars", color: "#19184d", class: "\uD83D\uDE80", rarity: "Uncommon", cash: [1e4, 4e4, 2e5, 2e6, 18e6], time: [2, 2, 1, 1, 1], price: [14e5, 14e6, 15e7, 15e8] }, { name: "Alien", color: "#8dc63f", class: "\uD83D\uDE80", rarity: "Uncommon", cash: [3e4, 1e5, 1e6, 11e6, 85e6], time: [4, 4, 4, 4, 4], price: [15e5, 17e6, 19e7, 17e8] }, { name: "Planet", color: "#9dc6ea", class: "\uD83D\uDE80", rarity: "Rare", cash: [25e3, 1e5, 9e5, 9e6, 9e7], time: [3, 3, 3, 3, 3], price: [2e6, 21e6, 21e7, 24e8] }, { name: "UFO", color: "#a15095", class: "\uD83D\uDE80", rarity: "Rare", cash: [17e3, 7e4, 7e5, 7e6, 7e7], time: [2, 2, 2, 2, 2], price: [21e5, 23e6, 25e7, 28e8] }, { name: "Spaceship", color: "#ffcb29", class: "\uD83D\uDE80", rarity: "Epic", cash: [6e4, 32e4, 21e5, 15e6, 85e6], time: [5, 4, 3, 2, 1], price: [48e5, 46e6, 54e7, 68e8] }, { name: "Astronaut", color: "#9bd4ee", class: "\uD83D\uDE80", rarity: "Legendary", cash: [45e3, 26e4, 25e5, 38e6, 55e7], time: [3, 3, 2, 2, 2], price: [65e5, 1e8, 17e8, 27e9] }, { name: "Lil Bot", color: "#3e564a", class: "\uD83E\uDD16", rarity: "Uncommon", cash: [4e3, 12e3, 18e4, 19e5, 25e6], time: [1, 1, 1, 1, 1], price: [73e4, 12e6, 13e7, 19e8] }, { name: "Lovely Bot", color: "#f179af", class: "\uD83E\uDD16", rarity: "Uncommon", cash: [16e3, 65e3, 65e4, 48e5, 42e6], time: [3, 3, 3, 2, 2], price: [13e5, 14e6, 17e7, 16e8] }, { name: "Angry Bot", color: "#f1613a", class: "\uD83E\uDD16", rarity: "Uncommon", cash: [22e3, 85e3, 8e5, 62e5, 65e6], time: [4, 4, 4, 3, 3], price: [12e5, 13e6, 15e7, 17e8] }, { name: "Happy Bot", color: "#51ba6b", class: "\uD83E\uDD16", rarity: "Uncommon", cash: [11e3, 45e3, 5e5, 25e5, 3e7], time: [2, 2, 2, 1, 1], price: [14e5, 15e6, 18e7, 24e8] }, { name: "Watson", color: "#d69b5a", class: "\uD83E\uDD16", rarity: "Rare", cash: [24e3, 1e5, 1e6, 1e7, 1e8], time: [3, 3, 3, 3, 3], price: [2e6, 22e6, 24e7, 26e8] }, { name: "Buddy Bot", color: "#9dc6ea", class: "\uD83E\uDD16", rarity: "Rare", cash: [22e3, 95e3, 65e4, 65e5, 65e6], time: [3, 3, 2, 2, 2], price: [19e5, 21e6, 23e7, 25e8] }, { name: "Brainy Bot", color: "#9ecf7a", class: "\uD83E\uDD16", rarity: "Epic", cash: [5e4, 25e4, 21e5, 21e6, 17e7], time: [4, 3, 3, 3, 2], price: [5e6, 46e6, 5e8, 67e8] }, { name: "Mega Bot", color: "#d71f27", class: "\uD83E\uDD16", rarity: "Legendary", cash: [8e4, 43e4, 42e5, 62e6, 1e9], time: [5, 5, 3, 3, 3], price: [7e6, 12e7, 19e8, 35e9] }].map(x => ({ name: x.name, value: JSON.stringify(x) }))) }], run: function (blook) { let i = document.createElement('iframe'); document.body.append(i); window.alert = i.contentWindow.alert.bind(window); i.remove(); const { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; if (stateNode.state.blooks.length >= 10) alert("Choose a blook to replace"); stateNode.chooseBlook(JSON.parse(blook)); } }, { name: "Free Upgrades", description: "Sets upgrade prices to 0 for all current blooks", run: function () { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState(state => ({ ...state, blooks: state.blooks.map(blook => ({ ...blook, price: [0, 0, 0, 0] })) })); } }, { name: "Max Blooks", description: "Maxes out all your blooks' levels", run: function () { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.state.blooks.forEach(blook => blook.level = 4); } }, { name: "Remove Glitches", description: "Removes all enemy glitches", run: function () { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ bits: 0, ads: [], hazards: [], color: "", lol: false, joke: false, slow: false, dance: false, glitch: "", glitcherName: "", glitcherBlook: "" }); clearTimeout(stateNode.adTimeout); clearInterval(stateNode.hazardInterval); clearTimeout(stateNode.nightTimeout); clearTimeout(stateNode.glitchTimeout); clearTimeout(stateNode.lolTimeout); clearTimeout(stateNode.jokeTimeout); clearTimeout(stateNode.slowTimeout); clearTimeout(stateNode.danceTimeout); clearTimeout(stateNode.nameTimeout); } }, { name: "Send Glitch", description: "Sends a glitch to everyone else playing", inputs: [{ name: "Glitch", type: "options", options: Object.entries({ lb: "Lunch Break", as: "Ad Spam", e37: "Error 37", nt: "Night Time", lo: "#LOL", j: "Jokester", sm: "Slow Mo", dp: "Dance Party", v: "Vortex", r: "Reverse", f: "Flip", m: "Micro" }).map(([value, name]) => ({ name, value })) }], run: function (val) { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.safe = true; stateNode.props.liveGameController.setVal({ path: `c/${stateNode.props.client.name}/tat`, val }); } }, { name: "Set All MegaBot", description: "Sets all your blooks to maxed out Mega Bots", run: function () { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.setState({ blooks: new Array(10).fill({ name: "Mega Bot", color: "#d71f27", class: "🤖", rarity: "Legendary", cash: [8e4, 43e4, 42e5, 62e6, 1e9], time: [5, 5, 3, 3, 3], price: [7e6, 12e7, 19e8, 35e9], active: false, level: 4, bonus: 5.5 }) }); } }, { name: "Set Cash", description: "Sets amount of cash you have", inputs: [{ name: "Cash", type: "number" }], run: function (cash) { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.setState({ cash }); } } ], fishing: [ { name: "Frenzy", description: "Sets everyone to frenzy mode", run: function () { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.props.liveGameController.setVal({ path: `c/${stateNode.props.client.name}`, val: { b: stateNode.props.client.blook, w: stateNode.state.weight, f: "Frenzy", s: true } }); } }, { name: "Remove Distractions", description: "Removes distractions", type: "toggle", enabled: false, data: null, run: function () { if (!this.enabled) { this.enabled = true; this.data = setInterval(() => { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.setState({ party: "" }); }, 50); } else { this.enabled = false; clearInterval(this.data); this.data = null; } } }, { name: "Send Distraction", description: "Sends a distraction to everyone", inputs: [{ name: "Distraction", type: "options", options: ["Crab", "Jellyfish", "Frog", "Pufferfish", "Octopus", "Narwhal", "Megalodon", "Blobfish", "Baby Shark"] }], run: function (f) { let i = document.createElement('iframe'); document.body.append(i); window.alert = i.contentWindow.alert.bind(window); i.remove(); let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.safe = true; stateNode.props.liveGameController.setVal({ path: `c/${stateNode.props.client.name}`, val: { b: stateNode.props.client.blook, w: stateNode.state.weight, f, s: true } }); } }, { name: "Set Lure", description: "Sets fishing lure (range 1 - 5)", inputs: [{ name: "Lure (1 - 5)", type: "number", min: 1, max: 5 }], run: function (lure) { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.setState({ lure: Math.max(Math.min(lure - 1, 4), 0) }); } }, { name: "Set Weight", description: "Sets weight", inputs: [{ name: "Weight", type: "number" }], run: function (weight) { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ weight, weight2: weight }); stateNode.props.liveGameController.setVal({ path: `c/${stateNode.props.client.name}`, val: { b: stateNode.props.client.blook, w: weight, f: ["Crab", "Jellyfish", "Frog", "Pufferfish", "Octopus", "Narwhal", "Megalodon", "Blobfish", "Baby Shark"][Math.floor(Math.random() * 9)] } }); } } ], flappy: [ { name: "Toggle Ghost", description: "Lets you go through the pipes", type: "toggle", enabled: false, run: function () { this.enabled = !this.enabled; Object.values(document.querySelector("#phaser-bouncy"))[1].children[0]._owner.stateNode.state.game.scene.physics.world.bodies.entries.forEach(x => x.gameObject.frame.texture.key.startsWith("blook") && (x.checkCollision.none = this.enabled, x.gameObject.setAlpha(this.enabled ? 0.5 : 1))); } }, { name: "Set Score", description: "Sets flappy blook score", inputs: [{ name: "Score", type: "number" }], run: function (score) { Object.values(document.querySelector("#phaser-bouncy"))[1].children[0]._owner.stateNode.setState({ score }); } } ], gold: [ { name: "Always Triple", description: "Always get triple gold", type: "toggle", enabled: false, data: null, run: function () { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode._choosePrize ||= stateNode.choosePrize; if (!this.enabled) { this.enabled = true; this.data = setInterval(() => { stateNode.choosePrize = function (i) { stateNode.state.choices[i] = { type: "multiply", val: 3, text: "Triple Gold!", blook: "Unicorn" }; stateNode._choosePrize(i); } }, 50); } else { this.enabled = false; clearInterval(this.data); this.data = null; stateNode.choosePrize = stateNode._choosePrize || stateNode.choosePrize; } } }, { name: "Auto Choose", description: "Automatically picks the option that would give you the most gold", type: "toggle", enabled: false, data: null, run: function () { if (!this.enabled) { this.enabled = true; this.data = setInterval(async () => { try { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; if (stateNode.state.stage === "prize") { const players = Object.entries(await new Promise(r => stateNode.props.liveGameController.getDatabaseVal("c", c => c && r(c))) || []).filter(x => x[0] != stateNode.props.client.name).sort((a, b) => b[1].g - a[1].g)[0]?.[1]?.g || 0; let max = 0; index = -1; for (let i = 0; i < stateNode.state.choices.length; i++) { const { type, val } = stateNode.state.choices[i]; let value = stateNode.state.gold; switch (type) { case "gold": value = stateNode.state.gold + val || stateNode.state.gold; break; case "multiply": case "divide": value = Math.round(stateNode.state.gold * val) || stateNode.state.gold; break; case "swap": value = players || stateNode.state.gold; case "take": value = stateNode.state.gold + players * val || stateNode.state.gold; } if ((value || 0) <= max) continue; max = value, index = i + 1; } document.querySelector(`div[class^='styles__choice${index}']`).click(); } } catch { } }, 50); } else { this.enabled = false; clearInterval(this.data); this.data = null; } } }, { name: "Chest ESP", description: "Shows what each chest will give you", type: "toggle", enabled: false, data: null, run: function () { if (!this.enabled) { this.enabled = true; this.data = setInterval(() => { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.state.choices.forEach(({ text }, index) => { let chest = document.querySelector(`div[class^='styles__choice${index + 1}']`); if (!chest || chest.querySelector('div')) return; let choice = document.createElement('div'); choice.style.color = "white"; choice.style.fontFamily = "Eczar"; choice.style.fontSize = "2em"; choice.style.display = "flex"; choice.style.justifyContent = "center"; choice.style.transform = "translateY(200px)"; choice.innerText = text; chest.append(choice); }); }, 50); } else { this.enabled = false; clearInterval(this.data); this.data = null; } } }, { name: "Reset Players Gold", description: "Sets a player's gold to 0", inputs: [{ name: "Player", type: "options", options: () => { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; return new Promise(res => stateNode.props.liveGameController._liveApp ? stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players))) : res([])); } }], run: function (target) { let { stateNode: { props, state } } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; props.liveGameController.setVal({ path: "c/".concat(props.client.name), val: { b: props.client.blook, g: state.gold, tat: `${target}:swap:0` } }); } }, { name: "Set Gold", description: "Sets amount of gold", inputs: [{ name: "Gold", type: "number" }], run: function (gold) { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ gold, gold2: gold }); stateNode.props.liveGameController.setVal({ path: "c/".concat(stateNode.props.client.name), val: { b: stateNode.props.client.blook, g: gold } }); } }, { name: "Swap Gold", description: "Swaps gold with someone", inputs: [{ name: "Player", type: "options", options: () => { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; return new Promise(res => stateNode.props.liveGameController._liveApp ? stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players))) : res([])); } }], run: function (target) { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.props.liveGameController.getDatabaseVal("c", (players) => { if (!players?.[target]) return; let { g } = players[target]; stateNode.props.liveGameController.setVal({ path: "c/".concat(stateNode.props.client.name), val: { b: stateNode.props.client.blook, g, tat: `${target}:swap:${stateNode.state.gold}` } }); stateNode.setState({ gold: g, gold2: g }); }); } }, { name: "Reset All Players' Gold", description: "Set's everyone else's gold to 0", run: function () { let i = document.createElement('iframe'); document.body.append(i); window.alert = i.contentWindow.alert.bind(window); i.remove(); let { stateNode: { props, state } } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; let count = 0; props.liveGameController.getDatabaseVal("c", async (players) => { if (players) for (const player of Object.keys(players)) { props.liveGameController.setVal({ path: "c/".concat(props.client.name), val: { b: props.client.blook, g: state.gold, tat: `${player}:swap:0` } }); count++; await new Promise(r => setTimeout(r, 4000)); }; alert(`Reset ${count} players' gold!`); }); } } ], kingdom: [ { name: "Choice ESP", description: "Shows you what will happen if you say Yes or No", type: "toggle", enabled: false, data: null, run: function () { if (!this.enabled) { this.enabled = true; let stats = ['materials', 'people', 'happiness', 'gold']; let elements = Object.fromEntries([...document.querySelectorAll('[class^=styles__statContainer]')].map((container, i) => [stats[i], container])); this.data = setInterval(() => { let { guest: data, phase } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.state; if (phase == "choice") { Array.from(document.getElementsByClassName('choiceESP')).forEach(x => x.remove()); Object.entries(data.yes || {}).forEach(x => { if (x[0] == 'msg' || !stats.includes(x[0])) return; let element = document.createElement('div'); element.className = 'choiceESP'; element.style = 'font-size: 24px; color: rgb(75, 194, 46); font-weight: bolder;'; element.innerText = String(x[1]); elements[x[0]].appendChild(element); }); Object.entries(data.no || {}).forEach(x => { if (x[0] == 'msg' || !stats.includes(x[0])) return; let element = document.createElement('div'); element.className = 'choiceESP'; element.style = 'font-size: 24px; color: darkred; font-weight: bolder;'; element.innerText = String(x[1]); elements[x[0]].appendChild(element); }); } }, 50); } else { this.enabled = false; clearInterval(this.data); Array.from(document.getElementsByClassName('choiceESP')).forEach(x => x.remove()); this.data = null; } } }, { name: "Disable Tax Toucan", description: "Tax evasion", run: function () { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.taxCounter = Number.MAX_VALUE; } }, { name: "Max Stats", description: "Sets all resources to the max", run: function () { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.setState({ materials: 100, people: 100, happiness: 100, gold: 100 }); } }, { name: "Set Guests", description: "Sets the amount of guests you've seen", inputs: [{ name: "Guests", type: "number" }], run: function (guestScore) { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.setState({ guestScore }); } }, { name: "Skip Guest", description: "Skips the current guest", run: function () { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.nextGuest(); } } ], racing: [{ name: "Instant Win", description: "Instantly Wins the race", run: function () { const { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ progress: stateNode.state.goalAmount }, () => { const { state: { question } } = stateNode; try { [...document.querySelectorAll(`[class*="answerContainer"]`)][question.answers.map((x, i) => question.correctAnswers.includes(x) ? i : null).filter(x => x != null)[0]]?.click?.(); } catch { } }); } }], royale: [ { name: "Auto Answer (Toggle)", description: "Toggles auto answer on", type: "toggle", enabled: false, data: null, run: function () { if (!this.enabled) { this.enabled = true; this.data = setInterval(() => { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode?.onAnswer?.(true, stateNode.props.client.question.correctAnswers[0]); }, 50); } else { this.enabled = false; clearInterval(this.data); this.data = null; } } }, { name: "Auto Answer", description: "Chooses the correct answer for you", run: function () { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode?.onAnswer?.(true, stateNode.props.client.question.correctAnswers[0]); } }, ], rush: [ { name: "Set Blooks", description: "Sets amount of blooks you or your team has", inputs: [{ name: "Blooks", type: "number" }], run: function (numBlooks) { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ numBlooks }); stateNode.isTeam ? stateNode.props.liveGameController.setVal({ path: `a/${stateNode.props.client.name}/bs`, val: numBlooks }) : stateNode.props.liveGameController.setVal({ path: `c/${stateNode.props.client.name}/bs`, val: numDefense }); } }, { name: "Set Defense", description: "Sets amount of defense you or your team has (Max 4)", inputs: [{ name: "Defense (max 4)", type: "number", max: 4 }], run: function (defense) { let numDefense = Math.min(defense, 4); let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ numDefense }); stateNode.isTeam ? stateNode.props.liveGameController.setVal({ path: `a/${stateNode.props.client.name}/d`, val: numDefense }) : stateNode.props.liveGameController.setVal({ path: `c/${stateNode.props.client.name}/d`, val: numDefense }); } } ], workshop: [ { name: "Remove Distractions", description: "Removes all enemy distractions", run: function () { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.setState({ fog: !1, dusk: !1, wind: !1, plow: !1, blizzard: !1, force: !1, canada: !1, trees: [!1, !1, !1, !1, !1, !1, !1, !1, !1, !1] }); } }, { name: "Send Distraction", description: "Sends a distraction to everyone else playing", inputs: [{ name: "Distraction", type: "options", options: Object.entries({ c: "Oh Canada", b: "Blizzard", f: "Fog Spell", d: "Dark & Dusk", w: "Howling Wind", g: "Gift Time!", t: "TREES", s: "Snow Plow", fr: "Use The Force" }).map(([value, name]) => ({ name, value })) }], run: function (val) { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.safe = true; stateNode.props.liveGameController.setVal({ path: `c/${stateNode.props.client.name}/tat`, val }); } }, { name: "Set Toys", description: "Sets amount of toys", inputs: [{ name: "Toys", type: "number" }], run: function (toys) { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.setState({ toys }); stateNode.props.liveGameController.setVal({ path: "c/".concat(stateNode.props.client.name), val: { b: stateNode.props.client.blook, t: toys } }); } }, { name: "Set Toys Per Question", description: "Sets amount of toys per question", inputs: [{ name: "Toys Per Question", type: "number" }], run: function (toysPerQ) { Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner.stateNode.setState({ toysPerQ }); } }, { name: "Swap Toys", description: "Swaps toys with someone", inputs: [{ name: "Player", type: "options", options: () => { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; return new Promise(res => stateNode.props.liveGameController._liveApp ? stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players))) : res([])); } }], run: function (target) { let { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; stateNode.props.liveGameController.getDatabaseVal("c", (players) => { if (players && Object.keys(players).map(x => x.toLowerCase()).includes(target.toLowerCase())) { let [player, { t: toys }] = Object.entries(players).find(([name]) => name.toLowerCase() == target.toLowerCase()); stateNode.props.liveGameController.setVal({ path: "c/".concat(stateNode.props.client.name), val: { b: stateNode.props.client.blook, t: toys, tat: `${player}:swap:${stateNode.state.toys}` } }); stateNode.setState({ toys }); } }); } } ], settings: [ { name: "Import Settings", description: "Import a custom theme", inputs: [ { name: "JSON Data", type: "string" } ], run: function (theme) { try { JSON.parse(theme); } catch (e) { return alert("Invalid JSON provided"); } theme = { backgroundColor: "rgb(11, 194, 207)", infoColor: "#9a49aa", cheatList: "#9a49aa", defaultButton: "#9a49aa", disabledButton: "#A02626", enabledButton: "#47A547", textColor: "white", inputColor: "#7a039d", contentBackground: "rgb(64, 17, 95)", ...JSON.parse(theme) } Settings.setItem("theme", theme); for (const prop in theme) variables.sheet.cssRules[0].style.setProperty(`--${prop}`, theme[prop]); } }, { name: "Export Settings", description: "Export the current theme to JSON", run: async function () { await navigator.clipboard.writeText(JSON.stringify(Settings.data.theme, null, 4)); prompt("Text copied to clipboard. (Paste below to test)"); } }, { name: "Defaults", description: "Changes all the settings to a preset", inputs: [ { name: "Theme", type: "options", options: [ { name: "Default", value: { backgroundColor: "rgb(11, 194, 207)", infoColor: "#9a49aa", cheatList: "#9a49aa", defaultButton: "#9a49aa", disabledButton: "#A02626", enabledButton: "#47A547", textColor: "white", inputColor: "#7a039d", contentBackground: "rgb(64, 17, 95)" } }, { name: "Blacket", value: { backgroundColor: "#4f4f4f", infoColor: "#2f2f2f", cheatList: "#2f2f2f", defaultButton: "#4f4f4f", disabledButton: "#eb6234", enabledButton: "#00c20c", textColor: "white", inputColor: "#3f3f3f", contentBackground: "#2f2f2f" } }, { name: "Skool.lol", value: { backgroundColor: "linear-gradient(90deg, rgba(104,45,140,1) 220px, rgba(237,30,121,1) 100%)", cheatList: "#1e2124", infoColor: "#1e2124", defaultButton: "#36393e", inputColor: "#1e2124", enabledButton: "#9c9a9a", textColor: "white", disabledButton: "#171717", contentBackground: "#292929" } }, { name: "Blue - Purple Background", value: { backgroundColor: "linear-gradient(162.5deg, rgba(0,183,255,1) 220px, rgba(128,0,255,1) 100%)" } }, { name: "Saint Patricks Background", value: { backgroundColor: "rgb(9, 148, 65)" } }, { name: "Halloween Background", value: { backgroundColor: "rgb(41, 41, 41)" } }, { name: "Fall Background", value: { backgroundColor: "rgb(224, 159, 62)" } }, { name: "Winter Background", value: { backgroundColor: "linear-gradient(rgb(49, 170, 224), rgb(187, 221, 255))" } }, { name: "Crypto Hack", value: { backgroundColor: "radial-gradient(#11581e,#041607)", infoColor: "#1a1a1a", cheatList: "#1a1a1a", defaultButton: "rgb(88 175 88)", disabledButton: "#A02626", enabledButton: "#0b601b", textColor: "white", inputColor: "rgb(0 0 0 / 25%)", contentBackground: "#11581e" } }, { name: "Fishing Frenzy", value: { backgroundColor: "linear-gradient(180deg,#9be2fe 0,#67d1fb)", infoColor: "#c8591e", cheatList: "#c8591e", defaultButton: "#ff751a", disabledButton: "#bf0e0e", enabledButton: "#2fb62f", textColor: "white", inputColor: "rgb(0 0 0 / 25%)", contentBackground: "radial-gradient(#02b0ea 40%, #1d86ea)" } }, { name: "Deceptive Dinos", value: { backgroundColor: "radial-gradient(rgba(220, 184, 86, 0), rgba(220, 184, 86, 0.4)), url(\"https://ac.blooket.com/play/111cb7e0ee6607ac3d1a13d534c0e0f1.png\"), #ead49a", infoColor: "#af8942", cheatList: "#af8942", defaultButton: "#af8942", disabledButton: "#A02626", enabledButton: "#47A547", textColor: "white", inputColor: "rgb(0 0 0 / 10%)", contentBackground: "radial-gradient(rgba(1,104,162,.6),rgba(24,55,110,.5)),radial-gradient(#2783b4 1.5px,#18376e 0) center / 24px 24px" } }, { name: "Blook Rush", value: { backgroundColor: "repeating-linear-gradient(45deg,white,white 8%,#e6e6e6 0,#e6e6e6 16%)", defaultButton: "#36c", inputColor: "rgb(0 0 0 / 25%)", infoColor: "#36c", cheatList: "#36c", contentBackground: "#888", textColor: "white", disabledButton: "#A02626", enabledButton: "#47A547" } }, { name: "Factory", value: { defaultButton: "#1563bf", infoColor: "#a5aabe", cheatList: "#a5aabe", contentBackground: "#2d313d", backgroundColor: "#3a3a3a", enabledButton: "rgb(75, 194, 46)", disabledButton: "#9a49aa", inputColor: "rgb(0 0 0 / 25%)", textColor: "white" } }, { name: "Cafe", value: { backgroundColor: "linear-gradient(90deg,rgba(200,0,0,.5) 50%,transparent 0) center / 50px 50px,linear-gradient(rgba(200,0,0,0.5) 50%,transparent 0) white center / 50px 50px", defaultButton: "#0bc2cf", inputColor: "rgb(0 0 0 / 25%)", infoColor: "#ac7339", cheatList: "#ac7339", contentBackground: "rgb(64, 64, 64)", textColor: "white", disabledButton: "#A02626", enabledButton: "#47A547" } }, { name: "Tower of Doom", value: { backgroundColor: "rgb(41 41 41)", disabledButton: "rgb(151, 15, 5)", defaultButton: "#333", inputColor: "rgb(0 0 0 / 25%)", contentBackground: "#404040", enabledButton: "#4bc22e", textColor: "white", infoColor: "#9a49aa", cheatList: "#9a49aa" } }, { name: "Monster Brawl", value: { defaultButton: "rgb(45, 51, 67)", backgroundColor: "rgb(78, 95, 124)", inputColor: "rgb(0 0 0 / 25%)", contentBackground: "linear-gradient(0deg,#374154,#4f5b74)", infoColor: "#374154", cheatList: "#374154", textColor: "white", enabledButton: "#47A547", disabledButton: "#A02626" } }, { name: "Tower Defense 2", value: { backgroundColor: "url(https://media.blooket.com/image/upload/v1676164454/Media/defense/backgroundTd1-02.svg) center / cover", cheatList: "#a33c22", infoColor: "#a33c22", defaultButton: "#40b1d8", inputColor: "#3e8cbe", contentBackground: "#293c82", enabledButton: "#47A547", disabledButton: "#A02626", textColor: "white" } }, ] } ], run: function (theme) { Settings.setItem("theme", { ...Settings.data.theme, ...theme }); for (const prop in theme) variables.sheet.cssRules[0].style.setProperty(`--${prop}`, theme[prop]); } }, { name: "Scale", description: "Forces the GUI to scale from 25%-100%", inputs: [ { type: "number", name: "Percent scale", min: 25, max: 100, value: (Settings.data.scale || 1) * 100 } ], run: function (scale) { scale = Math.min(Math.max(scale, 25), 100); Settings.setItem("scale", scale / 100); guiWrapper.style.transform = `scale(${(scale / 100)})`; } }, { name: "Hide Keybind", description: "Change the hide keybind (Click button after input to change)", inputs: [ { type: "function", name: "Input", function: onchange => createKeybindListener(({ shift, ctrl, alt, key }) => onchange(`${[ctrl && "Ctrl", shift && "Shift", alt && "Alt", key && key.toUpperCase()].filter(Boolean).join(' + ')}`)) } ], run: function (hide) { Settings.setItem("hide", hide); controls.update(Settings.data.hide || { ctrl: true, key: "e" }, Settings.data.close || { ctrl: true, key: "x" }); } }, { name: "Close Keybind", description: "Change the quick close keybind (Click button after input to change)", inputs: [ { type: "function", name: "Input", function: onchange => createKeybindListener(({ shift, ctrl, alt, key }) => onchange(`${[ctrl && "Ctrl", shift && "Shift", alt && "Alt", key && key.toUpperCase()].filter(Boolean).join(' + ')}`)) } ], run: function (close) { Settings.setItem("close", close); controls.update(Settings.data.hide || { ctrl: true, key: "e" }, Settings.data.close || { ctrl: true, key: "x" }); } }, { name: "Background Color", description: "Changes the background color of the GUI", inputs: [{ type: "string", name: "Color" }], run: function (color) { variables.sheet.cssRules[0].style.setProperty("--backgroundColor", color); Settings.setItem("theme.backgroundColor", color); } }, { name: "Category List Color", description: "Changes the categories list background color", inputs: [{ type: "string", name: "Color" }], run: function (color) { variables.sheet.cssRules[0].style.setProperty("--cheatList", color); Settings.setItem("theme.cheatList", color); } }, { name: "Info Color", description: "Changes the color of the information at the top of the GUI", inputs: [{ type: "string", name: "Color" }], run: function (color) { variables.sheet.cssRules[0].style.setProperty("--infoColor", color); Settings.setItem("theme.infoColor", color); } }, { name: "Button Color", description: "Changes the color of the cheats", inputs: [{ type: "string", name: "Color" }], run: function (color) { variables.sheet.cssRules[0].style.setProperty("--defaultButton", color); Settings.setItem("theme.defaultButton", color); } }, { name: "Enabled Toggle Color", description: "Changes the color of enabled toggle cheats", inputs: [{ type: "string", name: "Color" }], run: function (color) { Settings.setItem("theme.enabledButton", color); } }, { name: "Disabled Toggle Color", description: "Changes the color of disabled toggle cheats", inputs: [{ type: "string", name: "Color" }], run: function (color) { variables.sheet.cssRules[0].style.setProperty("--disabledButton", color); Settings.setItem("theme.disabledButton", color); } }, { name: "Text Color", description: "Changes the text color", inputs: [{ type: "string", name: "Color" }], run: function (color) { variables.sheet.cssRules[0].style.setProperty("--textColor", color); Settings.setItem("theme.textColor", color); } }, { name: "Input Color", description: "Changes the color of inputs, like the set gold number input", inputs: [{ type: "string", name: "Color" }], run: function (color) { variables.sheet.cssRules[0].style.setProperty("--inputColor", color); Settings.setItem("theme.inputColor", color); } }, { name: "Content Color", description: "Changes the background color of the cheats", inputs: [{ type: "string", name: "Color" }], run: function (color) { variables.sheet.cssRules[0].style.setProperty("--contentBackground", color); Settings.setItem("theme.contentBackground", color); } } ], alerts: [ { element: createElement("div", { className: "alertContainer", style: { margin: "15px 15px 5px 15px", backgroundColor: "rgb(0 0 0 / 50%)", width: "95%", height: "370px", borderRadius: "7px", display: "block", alignItems: "center", justifyContent: "center" } }, createElement("ul", { className: "alertList", style: { margin: "10px 10px 0 10px", padding: "0", listStyleType: "none", display: "flex", flexDirection: "column-reverse", height: "355px", overflowY: "scroll", wordWrap: "break-word" } }, createElement("li", { style: { margin: "5px" } }, createElement("span", { style: { color: "var(--textColor)" }, innerText: "[LOG] GUI opened" }) ) )), addLog(message, color) { return this.element.firstChild.prepend(createElement("li", { style: { margin: "5px" } }, createElement("span", { style: { color: color || "var(--textColor)" }, innerHTML: "[LOG] " + message }))); }, addAlert(name, blook, message) { return this.element.firstChild.prepend(createElement("li", { style: { margin: "5px" } }, createElement("img", { src: blook || this.blookData?.Black?.url, alt: "blook", draggable: false, style: { height: "22.5px", margin: "0 10px -5px 0" } }), createElement("strong", {}, name), " ", message)); }, connection: null, data: {}, updateLeaderboard(standings) { if (!this.leaderboardEl) this.addLeaderboard(); this.leaderboard.innerHTML = ""; for (const { blook, name, value } of standings) { this.leaderboard.append(createElement("li", { style: { fontSize: "2rem", paddingInline: "72px 15px", paddingBlock: "1.25px", position: "relative" } }, createElement("img", { src: this.blookData?.[blook]?.url || this.blookData.Black.url, alt: blook, draggable: false, style: { height: "45px", position: "absolute", left: "15px" } }), name, createElement("span", { innerText: this.parseNumber(parseInt(value)), style: { float: "right" } }) )); } }, parseNumber(num = 0) { var parsed = num; if (num < 1e3) return parsed.toString(); const coeffs = ["", "K", "M", "B", "T"]; const coeffIndex = Math.floor((num.toString().length - 1) / 3); if (coeffIndex < coeffs.length) { let rounded = 0; for (let i = 3; i >= 1; i--) { rounded = parseFloat((0 !== coeffIndex ? num / Math.pow(1e3, coeffIndex) : num).toPrecision(i)); if (rounded.toString().replace(/[^a-zA-Z 0-9]+/g, "").length <= 3) break; } rounded % 1 != 0 && (rounded = rounded.toFixed(1)); parsed = rounded + coeffs[coeffIndex]; } else { let rounded = num, tens = 0; for (; rounded >= 100; tens++) rounded = Math.floor(rounded / 10); let exponents = ""; let powers = ["⁰", "¹", "²", "³", "⁴", "⁵", "⁶", "⁷", "⁸", "⁹"]; for (const n of (tens + 1).toString().split("")) exponents += powers[Number(n)]; parsed = `${rounded / 10} × 10${exponents}`; } return parsed; }, addLeaderboard() { this.blookData ||= Object.values(webpackJsonp.push([[], { ['']: (_, a, b) => { a.cache = b.c }, }, [['']],]).cache).find(x => x.exports?.a?.Alice && x.exports?.a?.Alien).exports.a; this.element.append(this.leaderboardEl = createElement("div", { id: "leaderboardContent", style: { position: "absolute", inset: "110% 0px" } }, createElement("div", { style: { alignItems: "center", boxSizing: "border-box", display: "flex", flexDirection: "row", flexWrap: "wrap", justifyContent: "space-evenly", padding: "20px 5px 20px", position: "relative", width: "100%", fontFamily: "Nunito, sans-serif", fontWeight: "400", color: "var(--textColor)", background: "var(--contentBackground)", boxShadow: "inset 0 -6px rgb(0 0 0 / 20%)", borderRadius: "7px" } }, createElement("div", { className: "headerText", style: { boxSizing: "border-box", display: "block", height: "45px", left: "-10px", padding: "4px 4px 8px", position: "absolute", top: "-28px", backgroundColor: "#ef7426", boxShadow: "0 4px rgb(0 0 0 / 20%), inset 0 -4px rgb(0 0 0 / 20%)", borderRadius: "7px" } }, createElement("div", { style: { alignItems: "center", boxSizing: "border-box", display: "flex", height: "100%", justifyContent: "center", padding: "0 15px", width: "100%", fontFamily: "Titan One, sans-serif", fontSize: "26px", fontWeight: "400", textShadow: "-1px -1px 0 #646464, 1px -1px 0 #646464, -1px 1px 0 #646464, 2px 2px 0 #646464", color: "white", background: "linear-gradient(#fcd843,#fcd843 50%,#feb31a 50.01%,#feb31a)", borderRadius: "5px" }, innerText: "Leaderboard" }) ), createElement("div", { className: "alertContainer", style: { margin: "15px 15px 5px 15px", backgroundColor: "rgb(0 0 0 / 50%)", width: "95%", height: "370px", borderRadius: "7px", display: "flex", alignItems: "center", justifyContent: "center" } }, (this.leaderboard = createElement("nl", { className: "alertList", style: { marginTop: "10px", padding: "0", listStyleType: "decimal", width: "100%", height: "355px", overflowY: "scroll", wordWrap: "break-word" } }))) ) )) }, async connect() { try { const { stateNode } = Object.values((function react(r = document.querySelector("body>div")) { return Object.values(r)[1]?.children?.[0]?._owner.stateNode ? r : react(r.querySelector(":scope>div")) })())[1].children[0]._owner; if (!stateNode?.props?.liveGameController?._liveGameCode) return false; this.connection = await stateNode.props.liveGameController.getDatabaseRef("c"); const blooks = this.blookData = Object.values(webpackJsonp.push([[], { ['']: (_, a, b) => { a.cache = b.c }, }, [['']],]).cache).find(x => x.exports?.a?.Alice && x.exports?.a?.Alien).exports.a; const gamemode = this.getGamemode(); const factoryGlitches = { lb: "Lunch Break", as: "Ad Spam", e37: "Error 37", nt: "Night Time", lo: "#LOL", j: "Jokester", sm: "Slow Mo", dp: "Dance Party", v: "Vortex", r: "Reverse", f: "Flip", m: "Micro" } this.connection.on("value", snapshot => { const players = snapshot.val() || {}; if (!players || !this.diffObjects(this.data, players)) return; const added = this.diffObjects(this.data, players) this.data = players; let standings; switch (gamemode) { case "racing": standings = Object.entries(players).map(([name, { b, pr }]) => ({ name, blook: b, value: pr || 0 })); case "classic": standings = Object.entries(players).map(([name, { b, p }]) => ({ name, blook: b, value: p || 0 })); case "royale": standings = Object.entries(players).map(([name, { b, e }]) => ({ name, blook: b, value: e || 0 })); case "workshop": standings = Object.entries(players).map(([name, { b, t }]) => ({ name, blook: b, value: t || 0 })); case "brawl": standings = Object.entries(players).map(([name, { b, xp }]) => ({ name, blook: b, value: xp || 0 })); case "defense": case "defense2": standings = Object.entries(players).map(([name, { b, d }]) => ({ name, blook: b, value: d || 0 })); case "gold": for (const player in added) { if (!added[player].tat) continue; const [tat, amount] = added[player].tat.split(':'); if (amount == "swap") this.addAlert(player, blooks[players[player].b]?.url, `just swapped with ${tat}`); else this.addAlert(player, blooks[players[player].b]?.url, `just took ${this.parseNumber(parseInt(amount))} gold from ${tat}`); } standings = Object.entries(players).map(([name, { b, g }]) => ({ name, blook: b, value: g || 0 })); break; case "hack": for (const player in added) { if (!added[player].tat) continue; const [tat, amount] = added[player].tat.split(':'); this.addAlert(player, blooks[players[player].b]?.url, `just took ${this.parseNumber(parseInt(amount))} crypto from ${tat}`); } standings = Object.entries(players).map(([name, { b, cr }]) => ({ name, blook: b, value: cr || 0 })); break; case "fishing": for (const player in added) { if (added[player].f == "Frenzy") this.addAlert(player, blooks[players[player].b]?.url, `just started a frenzy`); else if (added[player].s) this.addAlert(player, blooks[players[player].b]?.url, `just sent a ${added[player].f} distraction`); } standings = Object.entries(players).map(([name, { b, w }]) => ({ name, blook: b, value: w || 0 })); break; case "dino": for (const player in added) { if (!added[player].tat) continue; const [tat, caught] = added[player].tat.split(':'); if (caught == "true") this.addAlert(player, blooks[players[player].b]?.url, `just caught ${tat} CHEATING!`); else this.addAlert(player, blooks[players[player].b]?.url, `investigated ${tat}`); } standings = Object.entries(players).map(([name, { b, f }]) => ({ name, blook: b, value: f || 0 })); break; case "cafe": for (const player in added) { if (!added[player].up) continue; const [upgrade, level] = added[player].up.split(":"); if (level) this.addAlert(player, blooks[players[player].b]?.url, `upgraded ${upgrade} to level ${level}`); } standings = Object.entries(players).map(([name, { b, ca }]) => ({ name, blook: b, value: ca || 0 })); break; case "factory": for (const player in added) { const data = added[player]; if (data.g) this.addAlert(player, blooks[players[player].b]?.url, `activated the ${factoryGlitches[data.g]} glitch!`); else if (data.s) { const [amount, synergy] = data.s.split('-'); this.addAlert(player, blooks[players[player].b]?.url, `has a ${amount} ${synergy} synergy!`); } else if (data.t) this.addAlert(player, blooks[players[player].b]?.url, `now has 10 Blooks!`); } standings = Object.entries(players).map(([name, { b, ca }]) => ({ name, blook: b, value: ca || 0 })); break; } this.updateLeaderboard(standings.sort((a, b) => b.value - a.value)); }); } catch { return false; } }, diffObjects(obj1, obj2) { const changed = {}; for (const key in obj1) { if (!(key in obj2)) continue; if (typeof obj1[key] === "object" && typeof obj2[key] === "object") { const recChanged = this.diffObjects(obj1[key], obj2[key]); if (recChanged && Object.keys(recChanged).length !== 0) changed[key] = recChanged; } else if (JSON.stringify(obj1[key]) !== JSON.stringify(obj2[key])) changed[key] = obj2[key]; } for (const key in obj2) if (!(key in obj1)) changed[key] = obj2[key]; if (Object.keys(changed).length == 0) return null; return changed; }, getGamemode() { switch (window.location.pathname) { case "/play/racing": return "racing"; case "/play/factory": return "factory"; case "/play/classic/get-ready": case "/play/classic/question": case "/play/classic/answer/sent": case "/play/classic/answer/result": case "/play/classic/standings": return "classic"; case "/play/battle-royale/match/preview": case "/play/battle-royale/question": case "/play/battle-royale/answer/sent": case "/play/battle-royale/answer/result": case "/play/battle-royale/match/result": return "royale"; case "/play/toy": return "workshop"; case "/play/gold": return "gold"; case "/play/brawl": return "brawl"; case "/play/hack": return "hack"; case "/play/fishing": return "fishing"; case "/play/rush": return "rush"; case "/play/dino": return "dino"; case "/tower/map": case "/tower/battle": case "/tower/rest": case "/tower/risk": case "/tower/shop": case "/tower/victory": return "doom"; case "/cafe": case "/cafe/shop": return "cafe"; case "/defense": return "defense"; case "/play/defense2": return "defense2"; case "/kingdom": return "kingdom"; default: return false; } } } ] }; addMode("Alerts", null, Cheats.alerts, true); addMode("Global", "https://media.blooket.com/image/upload/v1661496291/Media/uiTest/Games_Played_2.svg", Cheats.global)(); addMode("Pirate's Voyage", "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHZpZXdCb3g9IjAgMCAzMDAgMzAwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zOnNlcmlmPSJodHRwOi8vd3d3LnNlcmlmLmNvbS8iIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MjsiPjxnIGlkPSJCb2F0Ij48cGF0aCBkPSJNMTcwLjQsNTYuMDU0Yy02OC43ODgsMTAuMTc0IC0xMTUuOTcxLDU2LjkzOCAtMTQ1LjQxMSwxMzMuNzVsMTUuNDY5LDcuNzM0YzMwLjk2MiwtMjguMTc1IDc0LjcwNSwtMzcuNzg3IDEzMi4zMjIsLTI3LjI1bDAsLTE3LjYxMWMtMjUuNjI5LC0yNy45NTIgLTI2Ljk2NiwtNTYuNzcyIDAuNzE0LC04Ni42MjhsLTMuMDk0LC05Ljk5NVoiIHN0eWxlPSJmaWxsOiNmNmUwYmQ7Ii8+PHBhdGggZD0iTTE5OS42NzMsNjAuODEzYzMyLjc4NCw0Mi45ODIgNjUuODIyLDkwLjg4NyA5Ny4zMzcsMTM5LjU4MWwtNi42NjMsMGMtMTIuMDg1LC0zMS4xMTEgLTU3Ljg4MiwtMzkuNjk0IC05MS42MjYsLTI3LjI1YzIyLjUxNCwtMzQuNTc5IDE3Ljc5NiwtNzIuNjczIDAuOTUyLC0xMTIuMzMxWiIgc3R5bGU9ImZpbGw6I2Y2ZTBiZDsiLz48cGF0aCBkPSJNNjkuNDQ4LDE5Ny41MzhjMCwwIC01OS43MDcsLTE1LjI0MyAtNjguMzk4LC0xNy40NjJjLTAuMDc2LC0wLjAxOSAtMC4xNTQsMC4wMiAtMC4xODQsMC4wOTJjLTAuMDMsMC4wNzIgLTAuMDAyLDAuMTU1IDAuMDY1LDAuMTk1YzkuNjgyLDUuNzc1IDkxLjY0Nyw1NC42NTggOTEuNjQ3LDU0LjY1OGwtMjMuMTMsLTM3LjQ4M1oiIHN0eWxlPSJmaWxsOiM4ZDZlNDE7Ii8+PHBhdGggZD0iTTE2NC40NSw0Ny45MDNjMCwtNS4zNTMgNC4zNDYsLTkuNjk4IDkuNjk4LC05LjY5OGwxOS4zOTcsLTBjNS4zNTIsLTAgOS42OTgsNC4zNDUgOS42OTgsOS42OThsLTAsMTU2Ljk1M2MtMCw1LjM1MyAtNC4zNDYsOS42OTggLTkuNjk4LDkuNjk4bC0xOS4zOTcsMGMtNS4zNTIsMCAtOS42OTgsLTQuMzQ1IC05LjY5OCwtOS42OThsMCwtMTU2Ljk1M1oiIHN0eWxlPSJmaWxsOiM3ZjY4NDU7Ii8+PHBhdGggZD0iTTI2My45OTMsMjU2LjEwM2MyMi4xNzEsLTE0LjcxIDM2LjAwNywtMzUuNTE1IDM2LjAwNywtNTguNTY1bC0yMzAuNTUyLDBjMCwyMy43MTMgMTQuNjQzLDQ1LjA1IDM3Ljk0LDU5LjgxOWM5Ljg3NSwtMy43MjkgMjAuMDQxLC0xMS4zMzQgMzAuNDYzLC0yMi4zMzZjMzIuODExLDM1LjQ1NSA2NC4wNjksMzUuOTQzIDkzLjcwOCwwYzYuODM4LDkuNjc3IDE3LjczNiwxNi42NDYgMzIuNDM0LDIxLjA4MloiIHN0eWxlPSJmaWxsOiNiNjkyNWY7Ii8+PC9nPjwvc3ZnPg==", Cheats.voyage); addMode("Gold Quest", "https://media.blooket.com/image/upload/v1661496292/Media/uiTest/Gold.svg", Cheats.gold); addMode("Cafe", "https://media.blooket.com/image/upload/v1655161189/Media/survivor/Pizza_lvl1.svg", Cheats.cafe); addMode("Crypto Hack", "https://media.blooket.com/image/upload/v1661496293/Media/uiTest/CryptoIcon.svg", Cheats.crypto); addMode("Deceptive Dinos", [``], Cheats.dinos); addMode("Tower Defense", [``], Cheats.defense); addMode("Tower Defense 2", [``], Cheats.defense2); addMode("Factory", "https://media.blooket.com/image/upload/v1661496293/Media/uiTest/Factory_Upgrades.svg", Cheats.factory); addMode("Fishing Frenzy", "https://media.blooket.com/image/upload/v1661496295/Media/uiTest/Fish_Weight.svg", Cheats.fishing); addMode("Flappy Blook", "https://media.blooket.com/image/upload/v1645222006/Blooks/yellowBird.svg", Cheats.flappy); addMode("Tower of Doom", [``], Cheats.doom); addMode("Crazy Kingdom", "https://media.blooket.com/image/upload/v1655161323/Media/survivor/Jester_lvl1.svg", Cheats.kingdom); addMode("Racing", "https://media.blooket.com/image/upload/v1661496295/Media/uiTest/Racing_Progress.svg", Cheats.racing); addMode("Battle Royale", "https://media.blooket.com/image/upload/v1655936179/Media/br/VS_Lightning_Bolt_Bottom.svg", Cheats.royale); addMode("Blook Rush", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADdgAAA3YBfdWCzAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAA7YSURBVHic7Z17tFxVfcc/e59zZib3kcfN456YQObOTB43PBIKoeIqSlwIBXwiCCytXe2qxabSWrAqLKmwXKthVRe2BFxitYpasSIPV0sI8mhV5GHVdpWaoCRIvAnZSW/uzeuG3Nec/jFzk8mYOXNm73PmeT7/zt6/s+/d399vv/cWnufRSSilZgEXAZcBl42MHF5m23KrlPJBKcU9mUx6pLElrC+iEwSglFpOscIpVH5q5rfh4YPH0wkBlmUNW5b8oZTyi9ls+ol6l7XetKUAyrz8ciBbKW2pAMqRUk62e3RoGwH4ebkffgIopV2jQ8sKoOjl6zlR6RW93I+gAiinGB22SSkfklJsatXo0FICUEqt4ESFv4WAXu6HrgBKKYkOPypGh+8bG60TTS0ApVQXJ3t5JuxvhCGAcorR4aVidLg7k0kPh/6RkGg6AUTh5X5EIYBSmj06NFwA9fByP6IWQDnNFh0aIgCl1EpO9vJk3QtRpN4CKKUYHfYXo8O92Wx6S93LUA8BFL38rZyo9IHIPxqQRgqgHCnlVEl02FSP6BCZAIpefjmFCn8zDfRyP5pJAKWURIdnin2HSKJDaAJQSnVzclveNF7uR7MKoJyy6HBPJpPeF4ZdIwEopVZxosKb1sv9aBUBlFIWHb6UzaY3a9uqRQBFLy9ty9O6H24WWlEA5RSjwy+llA8X+w6Bo0NVASilBjlR4RfSgl5+KiY9eP6g4IWhad7Xf4Qu2VzzIboUo8NISXR41De9nwCUUpcAj4ddyEaxaxyeHhU8PQLPHBSMTQP7FoHwWDBrnPPnjXFd/yHW9kw0uqihkUolbsnlBjZW+t2ukl+GXJ66MunBcwcFT48WKv7loxUSeoLhoyk2H02xefd8HHuK5b2v8/sLj3DNosOtHh0svx+rCaDlKPXyHx0UHJ2u3cbklM3W0V62jvZy58tu20YHaAMBTOTh+UMBvFwXn+hw9cLD9FgtHR1aUwBDx4pePlpoy3W8XJfy6DD/eHQ4zDk94/UrSEi0hAAm8vDcjJePCLa/3ugSFfEE+4+meOxoisd2z8dxCtHhkvmFvkMrRIemFcBvSrz8x3X2cl0mJ222jvSydaSXv9/uMr9rnHVzxri2/zDn9jZndGgaATStl+viCfaPpdgylmLLa80bHRoqgFIvf+aA4PV8I0sTLc0aHeoqgBkvf2qkUPE7Wt3LdSmPDvYUudmF6HBtnaND5ALYWdqWt7mX6zI5ZbNtpJdtI738w3aXvlnjrJtXiA7nRTyyiEwAvxiDP31J8kqnerkunmDkaIrHj6Z4vDjvsHHVHi7tC3uCo0BkU737JkRc+SEwOWXz6rgTmf2WnuuPMScWQIcTC6DDiQXQ4cQC6HBiAXQ4sQA6nFgAHU4sgA4nFkCHEwugw4kF0OHEAuhwYgF0OLEAOpxqAtDei2sL3Zwx5SQx2kY16fdjNQFob+mYazfHrtd2YFFCf0+8EOKw3+/VBKC9D2lu02w4b30WJ40ORRzw+zG6CBDdLqaO4w3JKZPsvjdgRBYBeq24HxAKAvodowhgJACjbZ1z4mbAGCHM9tELge8l1pEKIO4HmGNL44MUo34/VhPAEUD7RoR5sQCMSVjGAtjr96OvAFzX9YBdul+e68RDQVOSBgKQUk5mMmlfA0FmAod0CxA3AeZ02SYCEGNV0wSwoy2ABfFQ0Jg5tv4QUAjh2/5DxAI4o1s3Z8wMqw0OhwohVLU0kQpgTU/cBzDlonn6AzEhxM5qaYIIoKqRSmS7oMf3lroYP4TweNNsEwHwUrU0QQTwM90CSOCsHt3cMT3JSaPZVCnFg1XTVEvguu5e4BXdQsTNgD6ndx3TzlscAv5v1XQB7T2rW5A1cQTQZk2vvgAsSwaav4leAL1xBNBl/Tz9W0GklC8EShfQ3nO6BUmnYHY8IVQzQnqcP1t/CCileCRQuoD2XqSwLlAzgrgfoENvckJ7w6YQwhOCh4OkDfQN13WngUAh5VSc26ubs3PJdRu1/6OZTDrQIl4tItPuB7xzQRwBauUPFus/ZWNZ8hdB09ZFAIPdsKpLN3fnkXCmuNhsBjDw87S1COB5QNuVr1wUR4GgrOvT6m4dR0rxjcBpgyZ0XfcAsE2rRMB7FnrEWwSD8eElVRfxKmJZcjyTSQeevq+1o6ndDCxNwrrZurk7h57khNGzNJYlX60lfa0C+GGN6U/iyoVxM1CNCxf4nuOoipTyP2pKX6P9h4Gqu0wq8Y4FXrxV3A8BG5b6nuPwzy4EUopP15KnJgG4rnsEeKCmUpXQ58BF8+IoUIm+WcdIGxwCsW1reyaT9t0EWo7OZNNXNfIc5z0LTXK3N5cuNAv/ti3vqjWP1uPRSqmXgVzNGSk8GvHGn0n2NMsTOvsWNboEAFjWNM+8cYf2YxFSysnVq5cnas6n9TX4mmY+EhI+elrcDJRzqXvA6KUQx7F+oJNPVwD3gf6h9ev6PZa2xRPU4WBZ09w+sN/IhpTyFq18Oplc190FPKGTF8ARcRQo5YrFB0gZvE9s29ZwNpv+T528JlfE/JNBXq7p91iWMrHQHtjWNJ9Om3m/bVvf1M1rIoDvgf/JUz9sATeeHkeBdy0ZIWHg/UIIr9axfynaAnBddxz4lm5+gPcu9MjMMrHQ2jj2FJ9Ka/tQwYZjvZjJpA/p5je9JcyoGbAE3NTBUeDKJaPGz7ZZlnWHSX6teYBSlFI/B87RzZ8H1v9c8qtoXkWrToPmARL2FC9csMNoatyy5OuDg8uNdlqEcU/graYF+Gwu33EXFv51bq/xuojj2H9nWg7j/7vruo8CT5rYOH82/NnSzmkKzpp/iGsXmW36sG1rJJcbuM20LGE53k0YTAwBfGKZx+oOOE2cdCb58mDVQ7tVcRz7+hCKE44AXNf9Hww7hI6ATSvyOG29XOyxcdUeugyGfQCJhP3LbDb93TBKFGbT+ynAaDlrdTd8fFn7NgW/13+Atxls9oTCuN+2ratCKlJ4AigeIjUakgBsWOq15dax7tQEm1bsM7aTSNhPBjn0GZSwO993Ar8xMSApNAXd7XSvgPC4e/Vrxr1+KeWUZcn3hVOoos0wjbmuewz4pKmdZSm4baB9moK3LxnhPIOrXmZIJOwvZjJp/T1jpyCK4fe3MThGNsMHXI9r+ltfBKfPHmNjZtjYjm1bR6QUfxlCkU4idAEU7xa8MQxbn8t5XNzXuiLo6zrGw2fvDsWW49gfq3bnnw6RTMC5rvss8B1TO7aAL63yOK8FD5d2Jyf43toho5W+GRzHHspm0/eGUKzfIsoZ2I9S5ZrSIMyS8I0z8qxoobOFCXuKB9YOMdfgkscZpBR527beGUKxTm0/KsOu6+4BrsPg2ZkZ5trw7TPyvKEFtpFZ1jT3rRniNLM7/o+TTDofy2bT/x2KsVMQ6RqM67r/juFi0QyLkwURNPP1s0LkuevM3ZzZrX+0q5Rk0vl+Njvw+VCMVaAei3B3AP8WhqHlXYXmYFYzLh0Kj79ZtYc3zzGb6ZvBcay9liUvC8WYD5H/K4ujgg8Cr4Zh77xe+PKgR6qZRCA8PpLby1ULzVb4ZpBSTjmOfUEUvf7f+lbUHwBwXXcUuBoI5TjIW+d5PHJ2nv6aj0GEj5R5/nb1Lq43uNGjFCEgmXT+OJNJ/zoUg1Womx+5rvtTCiODUFjTA4+tyTf0QupUYpJ/Pmcn75gf3namRCJxfzabDnzBgynGW8JqRSn1TeD9Ydk7Og1//ivBlv2aE+2aW8IWdB/jwbN30Wf2oNNJOI796sqV2YHQDAagES3p9UDgS4yq0WXBVwY9NtRxR9FZ8w/xxO/sDLXyLUuOO471u6EZDEjdBeC67hhwFZr3Dp4KCdya9rhzuRf5hpJ3nzbMt87YE+o9B0IIL5Fwrsxk0ubrxTXSkL6067ovAR+gyru2tXJdv8e/nJmP5LEqIfN8cuVrfMbwDN+pSCadO7LZ9ObQDQeg7n2AUpRS76KwZhBqf373OHxiu+Cp0QBuGqAP0Nd1jLsG97AmpAmeUlKpxMZcbkDrYGcYNFQAAEqpy4GHgNAneh/5P8GtrwiG/eKMjwCkzHPtacPcvEz/1q5KFIZ7idtyuYHbQzdeSzkaLQAApdQlwCNA6AfFDk7B7b8W3L+3QjSoIIBls8e4d1CxJKQ5/VKEECSTzi253MDG0I3XWpZmEACAUmo98K9AJCP7Hx8UfHy74JXymdoyAdj2NH+V3csH+82ua6mEEIJUyrkx6jn+oDSNAACUUhcCm4FInpkYz8PnhwRf2CWYnPmzSwSwdsEhvrByL73mr3WeEiGEl0o5N2SzA/dE8gENmkoAAEqpC4AtQGR7g7eNwc07JC8cAvYtoic5wWdWKKP7eatRqPzE9dls+h8j+4gGTScAAKXUOuBxYF6U33lyRPDskMeGJeHM41eiWPl/lM2m74v0Qxo0pQAAlFLnULiGZn6U3xkerkvlvz+bTd8f6Yc0aaZF1ZNwXfe/gPVAXVbFokBKOZVKJa5q1sqHJhYAgOu6LwJrgab9B1bCceydqZSTzmbTDzW6LH40bRNQjlLqD4G7CXmEEHYTIITwkknnK7ncwIdCNRwRTR0BSnFd9z4KN5H8tNFlqYRlWWOpVOJtrVL50EICAHBddzvwJuCzGLxeEgWJhPOTZNJelM2mn2p0WWqhZZqAcpRSFwNfBxab2DFtAqQU+UTCuTmXGzC+rqURtKwAAJRSCyncXn6Frg0TATiOtc9x7LdkMumqr3Q3Ky0tgBmUUjdQaBZqXlHUEYAQkEg4312+PHN1zZmbjJbqA1TCdd1NwLkY3F8cFNu29qdSyXe3Q+VDm0SAUpRSVwCfA1YFSR80AliWnHAce2MYN3M1E20RAUopXlt3FnADYLx/qziufyCZdOa0W+VDG0aAUpRSc4GbgQ1UmECqFAGEEJ7j2D+xbXlNLe/wtRptLYAZlFJ9FCLCXwB9pb+VC6CwQ9f+gWXJP8lk0jvqV8rG0BECmEEp1UPhXMJNFOcPZgQgpcg7jv2oZckP1fryVivTUQKYQSmVpHBg9cOjo4dXOY79oJTiIybXrrcq/w99zo6mO4xCQAAAAABJRU5ErkJggg==", Cheats.rush); addMode("Monster Brawl", [``], Cheats.brawl); addMode("Santa's Workshop", [''], Cheats.workshop); addMode("Settings", null, Cheats.settings, true); dragElement(controls, guiWrapper); dragElement(dragButton, guiWrapper); function dragElement(element, parent) { var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; element.onpointerdown = function (e = window.event) { pos3 = e.clientX; pos4 = e.clientY; document.onpointerup = function () { document.onpointerup = null; document.onpointermove = null; }; document.onpointermove = function (e = window.event) { pos1 = pos3 - e.clientX; pos2 = pos4 - e.clientY; pos3 = e.clientX; pos4 = e.clientY; var ratio = 1 || parseFloat((0.75 / window.devicePixelRatio).toFixed(2)); parent.style.top = (parent.offsetTop - pos2 / ratio) + "px"; parent.style.left = (parent.offsetLeft - pos1 / ratio) + "px"; } } } window.addEventListener("keydown", keydown); let alertInterval = setInterval(() => { if (!Cheats.alerts[0].connection) Cheats.alerts[0].connect(); else clearInterval(alertInterval); }, 5000); function close() { guiWrapper.remove(); clearInterval(alertInterval); for (const category in Cheats) for (const cheat of Cheats[category]) if (cheat.enabled) cheat.run() Object.keys(Cheats).forEach(mode => Cheats[mode].forEach(cheat => cheat.enabled && (cheat.run(), setCheats(...currentMode)))); window.removeEventListener("keydown", keydown); }; let last; guiWrapper.addEventListener("mousemove", e => { if (e.target.className != "cheatName" && e.target.className != "scriptButton") { if (tooltip.style.opacity != "0") { tooltip.animate([{ opacity: 0.9 }, { opacity: 0 }], { duration: 200 }); tooltip.style.opacity = "0"; } return; } const target = e.target.className == "scriptButton" ? e.target : e.target.parentElement; if (tooltip.innerText == target.dataset.description && tooltip.style.opacity == "0.9") return; const button = target.getBoundingClientRect(); const parent = target.offsetParent.getBoundingClientRect(); tooltip.innerText = target.dataset.description; if (tooltip.style.opacity == "0") { tooltip.animate([{ opacity: 0 }, { opacity: 0.9 }], { duration: 200 }); tooltip.style.opacity = "0.9"; } tooltip.style.left = (button.x - parent.x) + (button.width - tooltip.clientWidth) / 2 + "px"; tooltip.style.top = (button.y - parent.y) + (button.height) + "px"; }); function keydown(e) { let hideKey = Settings.data.hide || { ctrl: true, key: "e" }; let closeKey = Settings.data.close || { ctrl: true, key: "x" }; if (((hideKey.ctrl && e.ctrlKey) || (!hideKey.ctrl && !e.ctrlKey)) && ((hideKey.shift && e.shiftKey) || (!hideKey.shift && !e.shiftKey)) && ((hideKey.alt && e.altKey) || (!hideKey.alt && !e.altKey)) && e.key.toLowerCase() == hideKey.key) { e.preventDefault(); guiWrapper.style.display = guiWrapper.style.display === "block" ? "none" : "block"; } else if (((closeKey.ctrl && e.ctrlKey) || (!closeKey.ctrl && !e.ctrlKey)) && ((closeKey.shift && e.shiftKey) || (!closeKey.shift && !e.shiftKey)) && ((closeKey.alt && e.altKey) || (!closeKey.alt && !e.altKey)) && e.key.toLowerCase() == closeKey.key) { e.preventDefault(); close(); } } function createKeybindListener(onpress, element = window) { return new Promise(resolve => { const pressed = {}; let shift, ctrl, alt, key; const keydown = e => { e.preventDefault(); pressed[e.code] = true; shift ||= e.shiftKey; ctrl ||= e.ctrlKey; alt ||= e.altKey; if (!["shift", "control", "alt", "meta"].includes(e.key.toLowerCase())) key = e.key.toLowerCase(); onpress?.({ shift, ctrl, alt, key }); }; const keyup = e => { delete pressed[e.code]; if (Object.keys(pressed).length > 0) return; element.removeEventListener("keydown", keydown); element.removeEventListener("keyup", keyup); resolve({ shift, ctrl, alt, key }); }; element.addEventListener("keydown", keydown); element.addEventListener("keyup", keyup); }); } }); let img = new Image; img.src = "https://raw.githubusercontent.com/05Konz/Blooket-Cheats/main/autoupdate/timestamps/gui.png?" + Date.now(); img.crossOrigin = "Anonymous"; img.onload = function() { const c = document.createElement("canvas"); const ctx = c.getContext("2d"); ctx.drawImage(img, 0, 0, this.width, this.height); let { data } = ctx.getImageData(0, 0, this.width, this.height), decode = "", last; for (let i = 0; i < data.length; i += 4) { let char = String.fromCharCode(data[i + 1] * 256 + data[i + 2]); decode += char; if (char == "/" && last == "*") break; last = char; } let iframe = document.querySelector("iframe"); const [_, time, error] = decode.match(/LastUpdated: (.+?); ErrorMessage: "(.+?)"/); if (parseInt(time) <= 1697936106829 || iframe.contentWindow.confirm(error)) cheat(); } img.onerror = img.onabort = () => (img.src = null, cheat()); })();