// ==UserScript==
// @name Blooket Hacks; Test303
// @namespace
// @version 1.13
// @description This is great for Blooket
// @author Gaskertube(also know as GaSk NT)
// @match https://blooket.com
// @match https://dashboard.blooket.com/stats
// @match https://dashboard.blooket.com/blook
// @match https://dashboard.blooket.com/market
// @match https://dashboard.blooket.com/discover
// @match https://play.blooket.com/play
// @match https://dashboard.blooket.com/my-sets
// @run-at document-end
// @license Mit
// ==/UserScript==
(() => {
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 <span style="font-size: 0.75rem">v4.10.22</span>`;
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 = `<span id="curPageEl">${
getSite(true)
? `Current gamemode: ${getSite(true)}`
: "No game detected"
}</span><br><span>(Press E to hide)</span><br>`;
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 = `<span>GUI by OneMinesraft2#5394<br>Cheats by <a style="color: lightblue" href="https://twitter.com/glizuwu">gliz</a></span>`;
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 = `<summary style="padding: 10px; font-size: 1.5em; font-weight: bolder">Global</summary>`;
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);
})();