diff --git a/BlooketPower: b/BlooketPower: new file mode 100644 index 0000000..837e46e --- /dev/null +++ b/BlooketPower: @@ -0,0 +1,656 @@ +(() => { + let n = document.createElement('iframe'); + document.body.append(n); + window.alert = n.contentWindow.alert.bind(window); + window.prompt = n.contentWindow.prompt.bind(window); + window.confirm = n.contentWindow.confirm.bind(window); + n.remove(); +})(); +(() => { + let style = document.createElement('style'); + style.innerHTML = (`details > summary { + cursor: pointer; + transition: 0.15s; + list-style: none; +} +details > summary:hover { + color: hsl(0, 0%, 50%) +} +details > summary::-webkit-details-marker { + display: none; +} +details summary ~ * { + animation: sweep .5s ease-in-out; +} + +@keyframes sweep { + 0% {opacity: 0; transform: translateY(-10px)} + 100% {opacity: 1; transform: translateY(0)} +} +.cheat { + border: none; + background: hsl(0, 0%, 20%); + padding: 5px; + margin: 3px; + width: 60%; + color: hsl(0, 0%, 100%); + transition: 0.2s; + border-radius: 5px; + cursor: pointer; +} +.cheat:hover { + background: hsl(0, 0%, 30%); +}`); + + const GUI = document.createElement('div'); + GUI.appendChild(style); + GUI.style.width = '400px'; + //GUI.style.height = '500px'; + GUI.style.background = 'hsl(0, 0%, 10%)'; + GUI.style.borderRadius = '10px'; + GUI.style.position = 'absolute'; + GUI.style.textAlign = 'center'; + GUI.style.fontFamily = 'Nunito'; + GUI.style.color = 'white'; + GUI.style.overflow = 'hidden'; + GUI.style.top = '50px'; + GUI.style.left = '50px'; + + var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; + GUI.onmousedown = ((e = window.event) => { + e.preventDefault(); + pos3 = e.clientX; + pos4 = e.clientY; + document.onmouseup = (() => { + document.onmouseup = null; + document.onmousemove = null; + }); + document.onmousemove = ((e) => { + e = e || window.event; + e.preventDefault(); + pos1 = pos3 - e.clientX; + pos2 = pos4 - e.clientY; + pos3 = e.clientX; + pos4 = e.clientY; + GUI.style.top = (GUI.offsetTop - pos2) + "px"; + GUI.style.left = (GUI.offsetLeft - pos1) + "px"; + }); + }); + + let header = document.createElement('div'); + GUI.appendChild(header); + header.style.width = '100%'; + header.style.height = '35px'; + header.style.paddingTop = '2px'; + header.style.fontSize = '1.5rem'; + header.style.textAlign = 'center' + header.innerHTML = `Blooket Cheats v4.10.22`; + + let loop; + + let close = document.createElement('button'); + header.appendChild(close); + close.style.background = 'red'; + close.style.height = '45px'; + close.style.width = '45px'; + close.style.border = 'none'; + close.style.cursor = 'pointer'; + close.style.position = 'absolute'; + close.style.top = '-10px'; + close.style.right = '-10px'; + close.style.fontSize = '1.5rem'; + close.style.borderRadius = '10px'; + close.style.fontFamily = 'Nunito'; + close.style.fontWeight = 'bolder'; + close.style.paddingTop = '10px'; + close.style.paddingRight = '15px'; + close.innerText = 'X'; + close.onclick = () => { + GUI.remove(); + clearInterval(loop); + removeEventListener('keypress', toggleHidden) + } + + let minimize = document.createElement('button'); + header.appendChild(minimize); + minimize.style.background = '#444444'; + minimize.style.height = '45px'; + minimize.style.width = '45px'; + minimize.style.border = 'none'; + minimize.style.cursor = 'pointer'; + minimize.style.position = 'absolute'; + minimize.style.top = '-10px'; + minimize.style.left = '-10px'; + minimize.style.fontSize = '1.5rem'; + minimize.style.borderRadius = '10px'; + minimize.style.fontFamily = 'Nunito'; + minimize.style.fontWeight = 'bolder'; + minimize.style.paddingTop = '10px'; + minimize.style.paddingLeft = '15px'; + minimize.innerText = '-'; + minimize.onclick = () => { + bodyDiv.hidden = !bodyDiv.hidden; + } + let bodyDiv = document.createElement('div'); + let body = document.createElement('div'); + bodyDiv.appendChild(body); + GUI.appendChild(bodyDiv); + + body.innerHTML = (`${getSite(true) ? `Current gamemode: ${getSite(true)}` : 'No game detected'}
(Press E to hide)
`); + body.style.display = 'block'; + body.style.margin = '10px'; + //body.style.background = 'white'; + body.style.minHeight = '70px'; + + let activeCheats = document.createElement('span'); + body.appendChild(activeCheats); + + document.body.append(GUI); + + let footer = document.createElement('div'); + bodyDiv.appendChild(footer); + footer.style.fontSize = '0.9rem'; + footer.style.paddingBottom = '5px'; + footer.innerHTML = (`GUI by OneMinesraft2#5394
Cheats by gliz
`); + + var getValues = () => new Promise((e, t) => { + try { + let n = window.webpackJsonp.map(e => Object.keys(e[1]).map(t => e[1][t])).reduce((e, t) => [...e, ...t], []).find(e => /\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/.test(e.toString()) && /\(new TextEncoder\)\.encode\(\"(.+?)\"\)/.test(e.toString())).toString(); + e({ + blooketBuild: n.match(/\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/)[0], + secret: n.match(/\(new TextEncoder\)\.encode\(\"(.+?)\"\)/)[1] + }) + } catch { + t("Could not fetch auth details") + } + }) + var encodeValues = async (e, t) => { + let d = window.crypto.getRandomValues(new Uint8Array(12)); + return window.btoa(Array.from(d).map(e => String.fromCharCode(e)).join("") + Array.from(new Uint8Array(await window.crypto.subtle.encrypt({ + name: "AES-GCM", + iv: d + }, await window.crypto.subtle.importKey("raw", await window.crypto.subtle.digest("SHA-256", (new TextEncoder).encode(t)), { + name: "AES-GCM" + }, !1, ["encrypt"]), (new TextEncoder).encode(JSON.stringify(e))))).map(e => String.fromCharCode(e)).join("")) + }; + + function reactHandler() { + return Object.values(document.querySelector('#app > div > div'))[1].children[1]._owner; + } + + let autoAnswer, highlightAnswers, choiceESP, autoPassword, chestESP; + + let cheats = { + global: { + 'Get Daily Rewards': () => { + fetch("https://api.blooket.com/api/users", { credentials: "include" }).then(x => x.json()).then(x => { + getValues().then(async e => { + fetch("https://api.blooket.com/api/users/add-rewards", { + method: "put", + credentials: "include", + headers: { + "content-type": "application/json", + "X-Blooket-Build": e.blooketBuild + }, + body: await encodeValues({ + name: x.name, + addedTokens: 250, + addedXp: 300 + }, e.secret) + }); + fetch("https://api.blooket.com/api/users/add-rewards", { + method: "put", + credentials: "include", + headers: { + "content-type": "application/json", + "X-Blooket-Build": e.blooketBuild + }, + body: await encodeValues({ + name: x.name, + addedTokens: 250, + addedXp: 300 + }, e.secret) + }).then(() => alert('Added daily rewawrds!')).catch(() => alert('There was an error when adding rewards!'));; + }).catch(() => alert('There was an error encoding requests!')); + }).catch(() => alert('There was an error getting username!')); + }, + 'Spoof Blooks': () => { + if (!window.location.pathname.split('/').includes('lobby')) return alert('You must be in a game lobby! (e.g. https://www.blooket.com/play/lobby)'); + reactHandler().stateNode.setState({ lockedBlooks: [], takenBlooks: [] }); + }, + 'Toggle Auto Answer': () => { autoAnswer = !autoAnswer }, + 'Toggle Highlight Answers': () => { highlightAnswers = !highlightAnswers }, + 'Spam Open Boxes': () => { + let box = prompt(`Which box do you want to open? (e.g. Space)`); + let boxes = { + safari: 25, + aquatic: 20, + bot: 20, + space: 20, + breakfast: 15, + medieval: 15, + wonderland: 15 + } + if (!Object.keys(boxes).includes(box.toLowerCase())) return alert('I could not find that box!'); + let amount = prompt('How many boxes do you want to open?'); + fetch("https://api.blooket.com/api/users", { credentials: "include" }).then(x => x.json()).then(x => { + if (x.tokens < boxes[box.toLowerCase()] * amount) amount = Math.floor(x.tokens / boxes[box.toLowerCase()]); + if (!amount) return alert('You do not have enough tokens!'); + let wait = ms => new Promise(r => setTimeout(r, ms)); + getValues().then(async e => { + let error = false, + blooks = []; + for (let i = 0; i < amount; i++) { + fetch("https://api.blooket.com/api/users/unlockblook", { + method: "put", + credentials: "include", + headers: { + "content-type": "application/json", + "X-Blooket-Build": e.blooketBuild + }, + body: await encodeValues({ + name: x.name, + box: box.charAt(0).toUpperCase() + box.slice(1).toLowerCase() + }, e.secret) + }).then(async x => { + let blook = await x.json(); + blooks.push(blook.unlockedBlook); + alert(`${blook.unlockedBlook} (${i + 1}/${amount})`); + }).catch(() => { error = true }); + await wait(750); + if (error) break; + } + let count = {}; + blooks.forEach(blook => { count[blook] = (count[blook] || 0) + 1 }); + alert(`Results:\n` + Object.entries(count).map((x) => ` ${x[1]} ${x[0]}`).join(`\n`)); + }).catch(() => alert('There was an error encoding requests!')); + }).catch(() => alert('There was an error getting username!')); + }, + 'Auto Sell Dupes': () => { + fetch("https://api.blooket.com/api/users", { credentials: "include" }).then(x => x.json()).then(x => { + let blooks = Object.entries(x.unlocks).map(x => [x[0], x[1] - 1]).filter(x => x[1] > 0); + let wait = ms => new Promise(r => setTimeout(r, ms)); + getValues().then(async e => { + let error = false; + alert('Selling duplicate blooks, please wait'); + for (let [blook, numSold] of blooks) { + fetch("https://api.blooket.com/api/users/sellblook", { + method: "put", + credentials: "include", + headers: { + "content-type": "application/json", + "X-Blooket-Build": e.blooketBuild + }, + body: await encodeValues({ + name: x.name, + blook, + numSold + }, e.secret) + }).catch(() => { error = true }); + await wait(750); + if (error) break; + } + alert(`Results:\n` + blooks.map((x) => ` ${x[1]} ${x[0]}`).join(`\n`)); + }).catch(() => alert('There was an error encoding requests!')); + }).catch(() => alert('There was an error getting user data!')); + } + }, + cafe: { + 'Infinite Food': () => { + if (document.location.pathname != "/cafe") return alert("This cheat doesn't work in the shop!"); + reactHandler().stateNode.state.foods.forEach(e => e.stock = 99999); + reactHandler().stateNode.forceUpdate(); + }, + 'Max Levels': () => { + if (document.location.pathname != "/cafe/shop") return alert("This cheat only works in the shop!"); + Object.keys(reactHandler().stateNode.state.items).forEach(x => reactHandler().stateNode.state.items[x] = 5); + reactHandler().stateNode.forceUpdate(); + }, + 'Set Cash': () => { + reactHandler().stateNode.setState({ cafeCash: Number(parseFloat(prompt('How much cash would you like?'))) }); + }, + 'Reset Abilities': () => { + Object.keys(reactHandler().stateNode.state.abilities).forEach(x => reactHandler().stateNode.state.abilities[x] = 5); + reactHandler().stateNode.forceUpdate(); + } + }, + kingdom: { + 'Choice ESP': () => { choiceESP = !choiceESP }, + 'Max Stats': () => { + reactHandler().stateNode.setState({ materials: 100, people: 100, happiness: 100, gold: 100 }); + }, + 'Disable Toucan': () => { + reactHandler().stateNode.taxCounter = Number.MAX_VALUE; + }, + 'Set Guests': () => { + let guestScore = Number(parseFloat(prompt('How many guests do you want?'))); + reactHandler().stateNode.setState({ guestScore }); + }, + 'Skip Guest': () => { + reactHandler().stateNode.nextGuest(); + } + }, + crypto: { + 'Auto Hack': () => { autoPassword = !autoPassword }, + 'Set Crypto': () => { + let amount = Number(parseFloat(prompt('How much crypto do you want?'))); + reactHandler().stateNode.setState({ crypto2: amount, crypto: amount }); + }, + 'Custom Password': () => { + let password = Number(parseFloat(prompt('What do you want to set your password to?'))); + reactHandler().stateNode.setState({ password }); + }, + 'Remove Hack': () => { + reactHandler().stateNode.setState({ hack: '' }) + }, + 'Reset Player\'s Crypto': () => { + let target = prompt("Name of player"); + let e = reactHandler(); + !target || e.memoizedProps.firebase.getDatabaseVal(e.memoizedProps.client.hostId, "c", (...o) => { + let data = Object.keys(o[0]); + if (data.some(e => e == target)) data.forEach(player => { + if (player == target) { + e.memoizedProps.firebase.setVal({ + id: e.memoizedProps.client.hostId, + path: "c/" + e.memoizedProps.client.name, + val: { + p: e.stateNode.state.password, + b: e.memoizedProps.client.blook, + cr: e.stateNode.state.crypto, + tat: player + ":" + (o[0][player].cr || 0) + } + }); alert('Reset player\'s crypto') + }; + }); + else alert("Player does not exist"); + }) + } + }, + factory: { + 'All Mega Bot': () => { + let blooks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0].fill({ name: "Mega Bot", color: "#d71f27", class: "🤖", rarity: "Legendary", cash: [80000, 430000, 4200000, 62000000, 1000000000], time: [5, 5, 3, 3, 3], price: [7000000, 120000000, 1900000000, 35000000000], active: false, level: 4, bonus: 5.5 }) + reactHandler().stateNode.setState({ blooks }); + }, + 'Remove Glitches': () => { + reactHandler().stateNode.setState({ + glitch: "", + bites: 0, + ads: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + hazards: ["", "", "", "", ""], + lol: false, + joke: false, + slow: false, + dance: false, + popUpAmount: 0, + }); + }, + 'Max Blooks': () => { + reactHandler().stateNode.state.blooks.forEach(blook => { blook.level = 4 }); + }, + 'Set Cash': () => { + let cash = Number(parseFloat(prompt('How much cash do you want?'))); + reactHandler().stateNode.setState({ cash }); + }, + }, + fishing: { + 'Set Weight': () => { + let weight = Number(parseFloat(prompt('How much weight do you want?'))); + reactHandler().stateNode.setState({ weight2: weight, weight }); + }, + 'Set Lure': () => { + let lure = Number(parseFloat(prompt('What do you want to set your lure to? (1 - 5)'))) - 1; + reactHandler().stateNode.setState({ lure: lure < 0 ? 0 : lure > 4 ? 4 : lure }); + } + }, + gold: { + 'Set Gold': () => { + let gold = Number(parseFloat(prompt('How much gold do you want?'))); + reactHandler().stateNode.setState({ gold2: gold, gold }); + }, + 'Chest ESP': () => { chestESP = !chestESP }, + "Set Player's Gold": () => { + let e = reactHandler(), + player = prompt("Player to set gold"), + amount = Number(parseFloat(prompt("Amount to set gold to"))); + e.memoizedProps.firebase.setVal({ + id: e.memoizedProps.client.hostId, + path: "c/" + e.memoizedProps.client.name, + val: { + b: e.memoizedProps.client.blook, + g: e.stateNode.state.gold, + tat: player + ":swap:" + amount + } + }) + } + }, + racing: { + 'Instant Win': () => { + reactHandler().stateNode.setState({ progress: reactHandler().stateNode.state.goalAmount }); + setTimeout(() => { + try { + Array.from(document.body.querySelectorAll('div[class*="answerText"]')).filter(t => t.firstChild.innerHTML == reactHandler().memoizedState.question.correctAnswers[0])[0].click(); + } catch { + try { + Array.from(document.body.querySelectorAll('div[class*="answerText"]')).filter(t => t.firstChild.innerHTML == reactHandler().memoizedProps.client.question.correctAnswers[0])[0].click(); + } catch { }; + }; + }, 100); + } + }, + defense: { + 'Clear Enemies': () => { + reactHandler().stateNode.enemies = []; + }, + 'Max Towers': () => { + reactHandler().stateNode.towers.forEach(tower => { + tower.damage = 99999999; + tower.range = 99999999; + tower.fullCd = 0; + }); + }, + 'Remove Ducks': () => { + data = reactHandler().stateNode; + data.ducks.forEach(x => { data.tiles[x.y][x.x] = 0; }); + data.ducks.length = 0; + }, + 'Place Towers Anywhere': () => { + reactHandler().stateNode.tiles = reactHandler().stateNode.tiles.map(x => x.map(e => e == 2 ? 0 : e)); + }, + 'Set Damage': () => { + let dmg = Number(parseFloat(prompt('How much damage do you want?'))); + reactHandler().stateNode.dmg = dmg; + }, + 'Set Round': () => { + let round = Number(parseFloat(prompt('What round do you want to set it to?'))); + reactHandler().stateNode.setState({ round }); + }, + 'Set Tokens': () => { + let tokens = Number(parseFloat(prompt('How many tokens do you want?'))); + reactHandler().stateNode.setState({ tokens }); + } + }, + doom: { + 'Set Coins': () => { + try { + reactHandler().stateNode.props.setTowerCoins(Number(parseFloat(prompt('How many coins do you want?')))); + } catch { } + }, + 'Lower Enemy Stats': () => { + let data = reactHandler().stateNode.state; + if (data.phase != 'select') return alert('You must be on the attribute selection page!'); + reactHandler().stateNode.setState({ enemyCard: { ...data.enemyCard, strength: 0, charisma: 0, wisdom: 0 } }) + }, + 'Max Player Stats': () => { + let data = reactHandler().stateNode.state; + if (data.phase != 'select') return alert('You must be on the attribute selection page!'); + reactHandler().stateNode.setState({ myCard: { ...data.myCard, strength: 20, charisma: 20, wisdom: 20 } }) + }, + 'Heal Player': () => { + reactHandler().stateNode.setState({ myLife: 100 }); + } + }, + rush: { + 'Set Defense': () => { + let e = reactHandler(); + e.stateNode.props.firebase.setVal({ + id: e.stateNode.props.client.hostId, + path: 'c/' + e.stateNode.props.client.name + '/d', + val: Number(parseFloat(prompt('How much defense do you want?'))) + }); + }, + 'Set Blooks': () => { + let e = reactHandler(); + e.stateNode.props.firebase.setVal({ + id: e.stateNode.props.client.hostId, + path: 'c/' + e.stateNode.props.client.name + '/bs', + val: Number(parseFloat(prompt('How many blooks do you want?'))) + }); + } + } + }; + + let global = document.createElement('details'); + global.innerHTML = (`Global`); + for (var i = 0; i < Object.keys(cheats.global).length; i++) { + let cheat = createButton(Object.keys(cheats.global)[i]); + cheat.onclick = cheats.global[Object.keys(cheats.global)[i]]; + global.appendChild(cheat); + } + global.open = true; + global.style.paddingBottom = '10px'; + body.appendChild(global); + + let cheatDiv = document.createElement('div'); + body.appendChild(cheatDiv); + + loop = setInterval(() => { + if (curPage != getSite()) { + curPage = getSite(); + curPageEl.innerText = getSite(true) ? `Current gamemode: ${getSite(true)}` : 'No game detected' + Array.from(cheatDiv.children).forEach(x => x.remove()); + if (curPage && cheats[curPage]) Object.keys(cheats[curPage]).forEach(cheat => { + let button = createButton(cheat); + button.onclick = cheats[curPage][cheat]; + cheatDiv.appendChild(button); + cheatDiv.appendChild(document.createElement('br')); + }) + }; + let activeCheatsText = (`Auto Answer: ${autoAnswer ? 'Enabled' : 'Disabled'}\nHighlight Answers: ${highlightAnswers ? 'Enabled' : 'Disabled'}${curPage == 'kingdom' ? `\nChoice ESP: ${choiceESP ? 'Enabled' : 'Disabled'}` : curPage == 'crypto' ? `\nAuto Hack: ${autoPassword ? 'Enabled' : 'Disabled'}` : curPage == 'gold' ? `\nChest ESP: ${chestESP ? 'Enabled' : 'Disabled'}` : ''}`); + activeCheats.innerText != activeCheatsText && (activeCheats.innerText = activeCheatsText); + if (autoAnswer) { + try { + Array.from(document.body.querySelectorAll('div[class*="answerText"]')).filter(t => t.firstChild.innerHTML == reactHandler().memoizedState.question.correctAnswers[0])[0].click(); + } catch { + try { + Array.from(document.body.querySelectorAll('div[class*="answerText"]')).filter(t => t.firstChild.innerHTML == reactHandler().memoizedProps.client.question.correctAnswers[0])[0].click(); + } catch { }; + }; + }; + if (highlightAnswers) { + try { + Array.from(document.querySelector('div[class*="answersHolder"').children).forEach(x => { + if (reactHandler().memoizedState.question.correctAnswers.includes(x.innerText) || reactHandler().memoizedProps.client.question.correctAnswers.includes(x.innerText)) x.firstChild.style = 'background-color: rgb(0, 207, 119);'; + else x.firstChild.style = 'background-color: rgb(225, 40, 33);'; + }); + } catch { } + }; + if (curPage == 'kingdom') { + Array.from(document.getElementsByClassName('choiceESP')).forEach(x => x.remove()) + if (choiceESP) { + try { + let elements = { + materials: Array.from(document.querySelectorAll('div')).find(x => Array.from(x.children).find(e => e.className.includes('tree'))), + people: Array.from(document.querySelectorAll('div')).find(x => Array.from(x.children).find(e => e.className.includes('users') && e.parentElement.className.includes('statContainer'))), + happiness: Array.from(document.querySelectorAll('div')).find(x => Array.from(x.children).find(e => e.className.includes('grin'))), + gold: Array.from(document.querySelectorAll('div')).find(x => Array.from(x.children).find(e => e.className.includes('coins'))) + } + let data = reactHandler().stateNode.state.guest; + Object.entries(data.yes).forEach(x => { + if (x[0] == 'msg') 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') 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); + }) + } catch (e) { } + }; + } + if (curPage == 'crypto' && autoPassword) { + let { stage, correctPassword } = Object.values(document.querySelector('#app > div > div'))[1].children[1]._owner.stateNode.state; + if (stage == "hack") Array.from(document.querySelectorAll('div')).filter(x => x.innerHTML == correctPassword)[0].click(); + }; + if (curPage == 'gold' && chestESP) { + try { + if (reactHandler().stateNode.state.stage == 'prize') { + let { choices } = reactHandler().stateNode.state; + let div = document.querySelector("div[class*='regularBody']").children[1]; + if (div) { + if (!document.querySelectorAll(".chest-esp").length) choices.forEach((box, i) => { + textElement = document.createElement('p'); + textElement.className = "chest-esp"; + textElement.innerText = box.text; + textElement.style = `text-align: center; + font-size: 30px; + color: white; + font-family:Titan One; + sans-serif; + border-color: black; + margin-top: 200px;` + try { div.children[i].appendChild(textElement); } catch (e) { console.log(e) } + }); + else choices.forEach((box, i) => { + if (div.children.length == 3 && div.children[i].children[1].innerText != box.text) div.children[i].children[1].innerText = box.text; + }) + } + } + } catch (e) { console.log(e) } + }; + }); + + let curPage = getSite(); + if (curPage && cheats[curPage]) Object.keys(cheats[curPage]).forEach(cheat => { + let button = createButton(cheat); + button.onclick = cheats[curPage][cheat]; + cheatDiv.appendChild(button); + cheatDiv.appendChild(document.createElement('br')); + }) + + function createButton(cheat) { + let button = document.createElement('button'); + button.classList.add('cheat'); + button.innerText = cheat; + return button + } + function getSite(capitalize) { + switch (window.location.pathname.split('/')[2]) { + case 'rush': return capitalize ? 'Blook Rush' : 'rush'; + case 'gold': return capitalize ? 'Gold Quest' : 'gold'; + case 'fishing': return capitalize ? 'Fishing Frenzy' : 'fishing'; + case 'hack': return capitalize ? 'Crypto Hack' : 'crypto'; + case 'battle-royale': return capitalize ? 'Battle Royale' : 'royale'; + case 'factory': return capitalize ? 'Factory' : 'factory'; + case 'racing': return capitalize ? 'Racing' : 'racing'; + case 'classic': return capitalize ? 'Classic' : 'classic'; + default: switch (window.location.pathname.split('/')[1]) { + case 'defense': return capitalize ? 'Tower Defense' : 'defense'; + case 'cafe': return capitalize ? 'Café' : 'cafe'; + case 'tower': return capitalize ? 'Tower of Doom' : 'doom'; + case 'kingdom': return capitalize ? 'Crazy Kingdom' : 'kingdom'; + default: return false; + } + }; + }; + function toggleHidden(e) { + e.code == 'KeyE' && (GUI.hidden = !GUI.hidden) + }; + addEventListener('keypress', toggleHidden); +})()