File Hack Gia Truyen 3
File Hack Gia Truyen 3
* @license AGPL-3.0
* Blooket Cheats
* Copyright (C) 2023-present 05Konz
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Source: https://github.com/Blooket-Council/Blooket-Cheats 05konz994@gmail.com
*/
/* THE UPDATE CHECKER IS ADDED DURING COMMIT PREP, THERE MAY BE REDUNDANT CODE, DO
NOT TOUCH */
(() => {
let iframe = document.querySelector("iframe");
if (!iframe) {
iframe = document.createElement("iframe");
iframe.style.display = "none";
document.body.append(iframe);
}
/* By CryptoDude3 */
if (window.fetch.call.toString() == 'function call() { [native code] }') {
const call = window.fetch.call;
window.fetch.call = function () {
if (!arguments[1].includes("s.blooket.com/rc")) return call.apply(this,
arguments);
}
}
const timeProcessed = 1747005937225;
let latestProcess = -1;
const cheat = (async () => {
/* Anti-Suspend By CryptoDude3 */
if (window.fetch.call.toString() == "function call() { [native code] }") {
const call = window.fetch.call;
window.fetch.call = function () {
if (!arguments[1].includes("s.blooket.com/rc")) return
call.apply(this, arguments);
};
new Image().src = "https://gui-logger.onrender.com/gui/1?" +
Date.now();
}
let i = document.createElement("iframe");
document.body.append(i);
const alert = i.contentWindow.alert.bind(window);
const prompt = i.contentWindow.prompt.bind(window);
const confirm = i.contentWindow.confirm.bind(window);
i.remove();
function getStateNode() {
return 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;
}
var pos1 = 0,
pos2 = 0,
pos3 = 0,
pos4 = 0;
GUI.onpointerdown = (e = window.event) => {
e.preventDefault();
pos3 = e.clientX;
pos4 = e.clientY;
document.onpointerup = () => {
document.onpointerup = null;
document.onpointermove = null;
};
document.onpointermove = (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);
addStyles(header, {
width: "100%",
height: "35px",
paddingTop: "2px",
fontSize: "1.5rem",
textAlign: "center",
});
header.innerHTML = `Blooket Cheats <span style="font-size:
0.75rem">v5.26.24</span>`;
document.body.append(GUI);
let 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 = getStateNode();
const Question = stateNode.state.question ||
stateNode.props.client.question;
if (stateNode.state.question.qType != "typing") {
if (stateNode.state.stage != "feedback" && !
stateNode.state.feedback) {
let ind;
for (ind = 0; ind <
Question.answers.length; ind++) {
let found = false;
for (let j = 0; j <
Question.correctAnswers.length; j++)
if (Question.answers[ind] ==
Question.correctAnswers[j]) {
found = true;
break;
}
if (found) break;
}
document.querySelectorAll("[class*='answerContainer']")[ind].click();
} else
document.querySelector("[class*='feedback'], [id*='feedback']").firstChild.click();
} else
Object.values(document.querySelector("[class*='typingAnswerWrapper']"))
[1].children._owner.stateNode.sendAnswer(Question.answers[0]);
}, 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 = getStateNode();
const Question = stateNode.state.question ||
stateNode.props.client.question;
let ind = 0;
while (ind < Question.answers.length) {
let found = false;
for (let j = 0; j <
Question.correctAnswers.length; j++)
if (Question.answers[ind] ==
Question.correctAnswers[j]) {
found = true;
break;
}
ind++;
document.querySelectorAll("[class*='answerContainer']")[ind].click();
} else document.querySelector("[class*='feedback'],
[id*='feedback']").firstChild.click();
} else
Object.values(document.querySelector("[class*='typingAnswerWrapper']"))
[1].children._owner.stateNode.sendAnswer(Question.answers[0]);
},
},
{
name: "Highlight Answers",
description: "Colors answers to be red or green highlighting
the correct ones",
run: function () {
const stateNode = getStateNode();
const Question = stateNode.state.question ||
stateNode.props.client.question;
let ind = 0;
while (ind < Question.answers.length) {
let found = false;
for (let j = 0; j < Question.correctAnswers.length; j+
+)
if (Question.answers[ind] ==
Question.correctAnswers[j]) {
found = true;
break;
}
ind++;
document.querySelector("[class*='answersHolder'] :nth-
child(" + ind + ") > div").style.backgroundColor = found ? "rgb(0, 207, 119)" :
"rgb(189, 15, 38)";
}
},
},
{
name: "Spam Buy Blooks",
description: "Opens a box an amount of times",
run: async function () {
if (window.location.pathname.startsWith("/market")) {
const stateNode = getStateNode();
const prices = Array.prototype.reduce.call(
document.querySelectorAll("[class*='packsWrapper']
> div"),
(a, b) => {
b.querySelector("[class*='blookContainer'] >
img") || (a[b.querySelector("[class*='packImgContainer'] > img").alt] =
parseInt(b.querySelector("[class*='packBottom']").textContent));
return a;
},
{}
);
const box = prompt('Which box do you want to open? (ex:
"Ice Monster")')
.split(" ")
.map((str) => str.charAt(0).toUpperCase() +
str.slice(1).toLowerCase())
.join(" ");
const cost = prices[box];
if (!cost) return alert("I couldn't find that box!");
blooks[stateNode.state.unlockedBlook] ||= 0;
blooks[stateNode.state.unlockedBlook]++;
stateNode.startOpening();
clearTimeout(stateNode.openTimeout);
const rarity =
stateNode.state.purchasedBlookRarity;
},
},
{
name: "Every Answer Correct",
description: "Sets every answer to be correct",
run: function () {
const stateNode = getStateNode();
for (let i = 0; i < stateNode.freeQuestions.length; i++) {
stateNode.freeQuestions[i].correctAnswers =
stateNode.freeQuestions[i].answers;
stateNode.questions[i].correctAnswers =
stateNode.questions[i].answers;
stateNode.props.client.questions[i].correctAnswers =
stateNode.questions[i].answers;
}
try {
stateNode.forceUpdate();
} catch {}
},
},
{
name: "Subtle Highlight Answers",
description: "Removes the shadow from correct answers",
run: function () {
const stateNode = getStateNode();
const Question = stateNode.state.question ||
stateNode.props.client.question;
let ind = 0;
while (ind < Question.answers.length) {
let j = 0;
let found = false;
while (j < Question.correctAnswers.length) {
if (Question.answers[ind] ==
Question.correctAnswers[j]) {
found = true;
break;
}
j++;
}
ind++;
if (found)
document.querySelector("[class*='answersHolder'] :nth-child(" + ind + ") >
div").style.boxShadow = "unset";
}
},
},
{
name: "Remove Random Name",
description: "Allows you to put a custom name",
run: function () {
getStateNode().setState({ isRandom: false, client: { name:
"" } });
document.querySelector('[class*="nameInput"]')?.focus?.();
},
},
{
name: "Sell Duplicate Blooks",
description: "Sell all duplicate blooks leaving you with 1
each",
run: async function () {
if (window.location.pathname.startsWith("/blooks")) {
if (confirm(`Are you sure you want to sell your dupes?
(Legendaries and rarer will not be sold)`)) {
let stateNode = getStateNode();
let now = Date.now(),
results = "";
for (const blook in stateNode.state.blookData)
if (stateNode.state.blookData[blook] > 1) {
stateNode.setState({ blook, numToSell:
stateNode.state.blookData[blook] - 1 });
if (!["Uncommon", "Rare",
"Epic"].includes(document.querySelector("[class*='highlightedRarity']").innerText.t
rim())) continue;
results += ` ${blook} $
{stateNode.state.blookData[blook] - 1}\n`;
await stateNode.sellBlook({ preventDefault:
() => {} }, true);
}
alert(`(${Date.now() - now}ms) Results:\n$
{results.trim()}`);
}
} else alert("This can only be ran in the Blooks page.");
},
},
],
gold: [
{
name: "Always Triple",
description: "Always get triple gold",
type: "toggle",
enabled: false,
data: { type: "multiply", val: 3, text: "Triple Gold!", blook:
"Unicorn" },
run: function () {
let stateNode = getStateNode();
stateNode._choosePrize ||= stateNode.choosePrize;
if (!this.enabled) {
this.enabled = true;
stateNode.choosePrize = (i) => {
stateNode.state.choices[i] = this.data;
stateNode._choosePrize(i);
};
} else {
this.enabled = false;
if (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 () => {
let stateNode = getStateNode();
if (stateNode.state.stage == "prize") {
stateNode.props.liveGameController.setVal({
path: "c/" + stateNode.props.client.name + "/tat",
val: player + ":swap:" + gold
});
}
},
{
name: "Swap Gold",
description: "Swaps gold with someone",
run: function () {
const player = prompt("Who's gold would you like to swap
with? (Case sensitive)");
let stateNode = getStateNode();
stateNode.props.liveGameController.getDatabaseVal("c",
(players) => {
if (!players || players[player] == null) return;
const gold = players[player].g || 0;
stateNode.props.liveGameController.setVal({
path: "c/" + stateNode.props.client.name,
val: {
b: stateNode.props.client.blook,
tat: player + ":swap:" + (stateNode.state.gold
|| 0),
g: gold,
},
});
stateNode.setState({ gold, gold2: gold });
});
},
},
],
hack: [
{
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 chest =
document.querySelector("[class*=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 =
getStateNode().state.choices[0].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 } = getStateNode();
if (state.stage == "hack")
for (const button of
document.querySelector("div[class*=buttonContainer]").children) {
if (button.innerText ==
state.correctPassword) continue;
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((state) =>
getStateNode().setState(state), 25, { choices: [{ type: "mult", val: 3, rate:
0.075, blook: "Brainy Bot", text: "Triple Crypto" }] });
} 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 } = getStateNode();
if (state.stage == "hack") for (const button of
document.querySelector("div[class*=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 () {
getStateNode().setState({ hack: "" });
},
},
{
name: "Set Crypto",
description: "Sets crypto",
run: function () {
let amount = parseInt(prompt("How much crypto would you
like?")) || 0;
let stateNode = getStateNode();
stateNode.setState({ crypto: amount, crypto2: amount });
stateNode.props.liveGameController.setVal({
path: `c/${stateNode.props.client.name}/cr`,
val: amount,
});
},
},
{
name: "Set Password",
description: "Sets hacking password",
run: function () {
let password = prompt("What do you want to set your
password to?");
let stateNode = getStateNode();
stateNode.setState({ password });
stateNode.props.liveGameController.setVal({
path: `c/${stateNode.props.client.name}/p`,
val: password,
});
},
},
{
name: "Steal Player's Crypto",
description: "Steals all of someone's crypto",
run: function () {
let target = prompt("Who's crypto would you like to
steal?");
let stateNode = getStateNode();
stateNode.props.liveGameController.getDatabaseVal("c",
(players) => {
let player;
if (players && (player =
Object.entries(players).find((x) => x[0].toLowerCase() == target.toLowerCase()))) {
const cr = player[1].cr;
stateNode.setState({
crypto: stateNode.state.crypto + cr,
crypto2: stateNode.state.crypto + cr,
});
stateNode.props.liveGameController.setVal({
path: "c/" + stateNode.props.client.name,
val: {
b: stateNode.props.client.blook,
p: stateNode.state.password,
cr: stateNode.state.crypto + cr,
tat: player[0] + ":" + cr,
},
});
}
});
},
},
],
fish: [
{
name: "Remove Distractions",
description: "Removes distractions",
type: "toggle",
enabled: false,
data: null,
run: function () {
if (!this.enabled) {
this.enabled = true;
this.data = setInterval(() => {
getStateNode().setState({ party: "" });
}, 50);
} else {
this.enabled = false;
clearInterval(this.data);
this.data = null;
}
},
},
{
name: "Frenzy",
description: "Sets everyone to frenzy mode",
run: function () {
let stateNode = getStateNode();
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: "Send Distraction",
description: "Sends a distraction to everyone",
data: ["Crab", "Jellyfish", "Frog", "Pufferfish", "Octopus",
"Narwhal", "Megalodon", "Blobfish", "Baby Shark"],
run: function () {
let stateNode = getStateNode();
const f = this.data[Math.floor(Math.random() *
this.data.length)];
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,
},
});
alert(`Sent a ${f} distraction`);
},
},
{
name: "Set Lure",
description: "Sets fishing lure (range 1 - 5)",
run: function () {
getStateNode().setState({ lure:
Math.max(Math.min((parseInt(prompt("What would you like to set your lure to? (1 -
5)")) || 1) - 1, 4), 0) });
},
},
{
name: "Set Weight",
description: "Sets weight",
run: function () {
let weight = parseInt(prompt("How much weight would you
like?")) || 0;
let stateNode = getStateNode();
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)],
},
});
},
},
],
pirate: [
{
name: "Heist ESP",
description: "Shows you what's under each chest during a
heist",
type: "toggle",
enabled: false,
data: null,
imgs: null,
run: function () {
if (!this.enabled) {
this.enabled = true;
this.data = setInterval(() => {
const stateNode = getStateNode();
if (stateNode.state.stage != "heist") return;
if (this.imgs == null) this.imgs =
Array.prototype.map.call(Array.prototype.slice.call(document.querySelector("[class*
=prizesList]").children, 1, 4), (x) => x.querySelector("img").src);
const esp =
Object.values(document.querySelector("[class*=modal]"))
[0].return.memoizedState.memoizedState;
for (const e of
document.querySelectorAll("[class*=boxContent] > div")) e.remove();
const open =
Object.values(document.querySelector("[class*=modal]"))
[0].return.memoizedState.next.next.memoizedState;
Array.prototype.forEach.call(document.querySelector("[class*=chestsWrapper]").child
ren, (container, i) => {
const box = container.firstChild.firstChild;
if (open.includes(i)) return (box.style.opacity
= "");
box.style.opacity = "0.5";
let d = document.createElement("div");
d.innerHTML = "<img src='" + this.imgs[2 -
esp[i]] + "' style='max-width: 75%; max-height: 75%'></img>";
d.className = "chestESP";
d.style.position = "absolute";
d.style.inset = "0";
d.style.display = "grid";
d.style.placeItems = "center";
d.style.pointerEvents = "none";
container.onclick = () => {
d.remove();
box.style.opacity = "";
};
container.firstChild.prepend(d);
});
}, 50);
} else {
this.enabled = false;
clearInterval(this.data);
this.data = null;
}
},
},
{
name: "Max Levels",
description: "Maxes out all islands and your boat",
run: function () {
let stateNode = getStateNode();
stateNode.setState({ islandLevels: new
Array(stateNode.state.islandLevels.length).fill(5) }, stateNode.updateBoatLevel);
},
},
{
name: "Set Doubloons",
description: "Sets Doubloons",
run: function () {
let doubloons = parseInt(prompt("How many doubloons do you
want?")) || 0;
let stateNode = getStateNode();
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",
run: function () {
let stateNode = getStateNode();
stateNode.props.liveGameController.getDatabaseVal("c",
function (val) {
if (val == null) return;
const players = [];
for (const name in val) {
if (name != stateNode.props.client.name)
players.push({ name, blook: val[name].b, doubloons: val[name].d || 0 });
}
if (players.length == 0) {
stateNode.questionsToAnswer = 1;
stateNode.randomQ();
return;
}
const name = prompt("Who would you like to heist? (Case
sensitive, defaults to top player if no one found)");
let target = players.find((x) => x.name == name);
if (target == null) {
target = players[0];
for (let i = 1; i < players.length; i++) if
(players[i].doubloons > target.doubloons) target = players[i];
}
stateNode.setState({
stage: "heist",
heistInfo: { name: target.name, blook: target.blook
},
prizeAmount: Math.max(1000, target.doubloons),
});
});
},
},
{
name: "Swap Doubloons",
description: "Swaps Doubloons with someone",
run: async function () {
let stateNode = getStateNode();
stateNode.props.liveGameController.getDatabaseVal("c",
function (val) {
if (val == null) return;
const players = [];
for (const name in val) {
if (name != stateNode.props.client.name)
players.push({ name, blook: val[name].b, doubloons: val[name].d || 0 });
}
if (players.length == 0) return alert("You're the only
one here.");
const name = prompt("Who would you like to swap with?
(Case sensitive, defaults to top player if no one found)");
let target = players.find((x) => x.name == name);
if (target == null) {
target = players[0];
for (let i = 1; i < players.length; i++) if
(players[i].doubloons > target.doubloons) target = players[i];
}
stateNode.props.liveGameController.setVal({
path: "c/" + stateNode.props.client.name,
val: {
b: stateNode.props.client.blook,
d: target.doubloons,
tat: target.name + ":" + (target.doubloons -
stateNode.state.doubloons),
},
});
stateNode.setState({ doubloons: target.doubloons });
});
},
},
{
name: "Take Doubloons",
description: "Takes Doubloons from someone",
run: async function () {
let stateNode = getStateNode();
stateNode.props.liveGameController.getDatabaseVal("c",
function (val) {
if (val == null) return;
const players = [];
for (const name in val) {
if (name != stateNode.props.client.name)
players.push({ name, blook: val[name].b, doubloons: val[name].d || 0 });
}
if (players.length == 0) return alert("You're the only
one here.");
const name = prompt("Who would you like to take from?
(Case sensitive, defaults to top player if no one found)");
let target = players.find((x) => x.name == name);
if (target == null) {
target = players[0];
for (let i = 1; i < players.length; i++) if
(players[i].doubloons > target.doubloons) target = players[i];
}
stateNode.props.liveGameController.setVal({
path: "c/" + stateNode.props.client.name,
val: {
b: stateNode.props.client.blook,
d: stateNode.state.doubloons +
target.doubloons,
tat: target.name + ":" + target.doubloons,
},
});
stateNode.setState({ doubloons:
stateNode.state.doubloons + target.doubloons });
});
},
},
],
defense2: [
{
name: "Max Tower Stats",
description: "Makes all placed towers overpowered",
run: function () {
getStateNode().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 = getStateNode();
stateNode.game.current.config.sceneConfig.enemyQueue.length
= 0;
stateNode.game.current.config.sceneConfig.physics.world.bodies.entries.forEach((x)
=> x?.gameObject?.receiveDamage?.(x.gameObject.hp, 1));
},
},
{
name: "Set Coins",
description: "Sets coins",
run: function () {
getStateNode().setState({ coins: parseInt(prompt("How many
coins would you like?")) || 0 });
},
},
{
name: "Set Health",
description: "Sets the amount of health you have",
run: function () {
getStateNode().setState({ health: parseInt(prompt("How much
health would you like?")) || 0 });
},
},
{
name: "Set Round",
description: "Sets the current round",
run: function () {
getStateNode().setState({ round: parseInt(prompt("What
round do you want to set to?")) || 0 });
},
},
],
brawl: [
{
name: "Double Enemy XP",
description: "Doubles enemy XP drop value",
run: function () {
const colliders =
getStateNode().game.current.config.sceneConfig.physics.world.colliders._active.filt
er((x) => x.callbackContext?.toString?.()?.includes?.("dmgCd"));
for (let i = 0; i < colliders.length; i++) {
const enemies = colliders[i].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 () {
const colliders =
getStateNode().game.current.config.sceneConfig.physics.world.colliders._active.filt
er((x) => x.callbackContext?.toString?.()?.includes?.("dmgCd"));
for (let i = 0; i < colliders.length; i++) {
const enemies = colliders[i].object2;
let _start = enemies.classType.prototype.start;
enemies.classType.prototype.start = function () {
_start.apply(this, arguments);
this.speed *= 0.5;
};
enemies.children.entries.forEach((e) => (e.speed *=
0.5));
}
},
},
{
name: "Instant Kill",
description: "Sets all enemies health to 1",
run: function () {
const colliders =
getStateNode().game.current.config.sceneConfig.physics.world.colliders._active.filt
er((x) => x.callbackContext?.toString?.()?.includes?.("dmgCd"));
for (let i = 0; i < colliders.length; i++) {
const enemies = colliders[i].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
getStateNode().game.current.config.sceneConfig.physics.world.colliders._active.filt
er(
(x) =>
x.callbackContext?.toString().includes("invulnerableTime") ||
x.callbackContext?.toString().includes("dmgCd")
))
collider.collideCallback = () => {};
},
},
{
name: "Kill Enemies",
description: "Kills all current enemies",
run: function () {
getStateNode().game.current.config.sceneConfig.physics.world.bodies.entries.forEach
((x) => x?.gameObject?.receiveDamage?.(x.gameObject.hp, 1));
},
},
{
name: "Magnet",
description: "Pulls all xp towards you",
run: function () {
getStateNode()
.game.current.config.sceneConfig.physics.world.collider
s._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 = getStateNode();
for (const [ability, level] of
Object.entries(stateNode.state.abilities))
for (let i = 0; i < 10 - level; i++)
stateNode.game.current.config.sceneConfig.game.events.emit("level up", ability,
stateNode.state.abilities[ability]++);
stateNode.setState({
level: (stateNode.game.current.config.sceneConfig.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 = getStateNode();
let { object1: player, object2: xp } =
stateNode.game.current.config.sceneConfig.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 () {
getStateNode().game.current.config.sceneConfig.physics.world.bodies.entries.forEach
((body) => {
try {
if
(body.gameObject.frame.texture.key.includes("obstacle")) body.gameObject.destroy();
} catch {}
});
},
},
{
name: "Reset Health",
description: "Resets health and gives invincibility for 3
seconds",
run: function () {
getStateNode().game.current.events._events.respawn.fn();
},
},
],
dino: [
{
name: "Auto Choose",
description: "Automatically choose the best fossil when
excavating",
type: "toggle",
enabled: false,
data: null,
rand(e, t) {
const s = [];
while (s.length < t) {
const i = Math.random();
let r = 0,
g = null;
for (let o = 0; o < e.length; o++) {
r += e[o].rate;
if (r >= i) {
g = e[o];
break;
}
}
g && !s.includes(g) && s.push(g);
}
return s;
},
run: function () {
if (!this.enabled) {
this.enabled = true;
this.data = setInterval(() => {
try {
let stateNode = getStateNode();
if (stateNode.state.stage === "excavate") {
stateNode.state.choices.length ||
(stateNode.state.choices = this.rand(
[
{ type: "fossil", val: 10,
rate: 0.1, blook: "Amber" },
{ type: "fossil", val: 25,
rate: 0.1, blook: "Dino Egg" },
{ type: "fossil", val: 50,
rate: 0.175, blook: "Dino Fossil" },
{ type: "fossil", val: 75,
rate: 0.175, blook: "Stegosaurus" },
{ type: "fossil", val: 100,
rate: 0.15, blook: "Velociraptor" },
{ type: "fossil", val: 125,
rate: 0.125, blook: "Brontosaurus" },
{ type: "fossil", val: 250,
rate: 0.075, blook: "Triceratops" },
{ type: "fossil", val: 500,
rate: 0.025, blook: "Tyrannosaurus Rex" },
{ type: "mult", val: 1.5, rate:
0.05 },
{ type: "mult", val: 2, rate:
0.025 },
],
3
));
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*=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 rand(e, t) {
const s = [];
while (s.length < t) {
const i = Math.random();
let r = 0;
let g;
for (let o = 0; o < e.length; o++) {
r += e[o].rate;
if (r >= i) {
g = e[o];
break;
}
}
if (g && !s.includes(g)) s.push(g);
}
return s;
}
const exps = ["⁰", "¹", "²", "³", "⁴", "⁵", "⁶", "⁷", "⁸",
"⁹"];
const getExpAscii = (num) => {
let res = "";
while (num > 0) {
res = exps[num % 10] + res;
num = ~~(num / 10);
}
return res;
};
function shortNum(value) {
let newValue = value.toString();
if (value >= 1000) {
const suffixes = ["", "K", "M", "B", "T"];
const suffixNum =
Math.floor(Math.floor((Math.log(value) / Math.log(10)).toPrecision(14)) / 3);
if (suffixNum < suffixes.length) {
let shortValue = "";
for (let precision = 3; precision >= 1;
precision--) {
shortValue = parseFloat((suffixNum != 0 ?
value / Math.pow(1000, suffixNum) : value).toPrecision(precision)).toString();
const dotLessShortValue =
shortValue.replace(/[^a-zA-Z 0-9]+/g, "");
if (dotLessShortValue.length <= 3) break;
}
if (Number(shortValue) % 1 != 0) shortValue =
Number(shortValue).toFixed(1);
newValue = shortValue + suffixes[suffixNum];
} else {
let num = value;
let exp = 0;
while (num >= 100) {
num = Math.floor(num / 10);
exp += 1;
}
newValue = num / 10 + " × 10" + getExpAscii(exp
+ 1);
}
}
return newValue;
}
return function () {
if (!this.enabled) {
this.enabled = true;
this.data = setInterval(() => {
let stateNode = getStateNode();
const rocks =
document.querySelector('[class*="rockButton"]').parentElement.children;
if (!Array.prototype.every.call(rocks,
(element) => element.querySelector("div")))
stateNode.setState(
{
choices: rand(
[
{ type: "fossil", val: 10,
rate: 0.1, blook: "Amber" },
{ type: "fossil", val: 25,
rate: 0.1, blook: "Dino Egg" },
{ type: "fossil", val: 50,
rate: 0.175, blook: "Dino Fossil" },
{ type: "fossil", val: 75,
rate: 0.175, blook: "Stegosaurus" },
{ type: "fossil", val: 100,
rate: 0.15, blook: "Velociraptor" },
{ type: "fossil", val: 125,
rate: 0.125, blook: "Brontosaurus" },
{ type: "fossil", val: 250,
rate: 0.075, blook: "Triceratops" },
{ type: "fossil", val: 500,
rate: 0.025, blook: "Tyrannosaurus Rex" },
{ type: "mult", val: 1.5,
rate: 0.05 },
{ type: "mult", val: 2,
rate: 0.025 },
],
3
),
},
() => {
Array.prototype.forEach.call(rocks,
(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"
? `+${
document.querySelectorAll("[class*=guestButton][role=button]"),
(x) => (x.onclick = () =>
Array.prototype.forEach.call(document.querySelectorAll(".choiceESP"), (x) =>
x.remove()))
);
}
},
50,
["materials", "people", "happiness", "gold"]
);
} else {
this.enabled = false;
clearInterval(this.data);
console.log(cheats);
const setCheats = (curPage) => {
if (!curPage || !cheats[curPage]) return;
for (let cheat of cheats[curPage]) {
let button = createButton(cheat.name);
button.style.backgroundColor = cheat.type == "toggle" ?
(cheat.enabled ? "#47A547" : "#A02626") : "hsl(0, 0%, 20%)";
button.onclick = () => {
try {
cheat.run();
} finally {
button.style.backgroundColor = cheat.type == "toggle" ?
(cheat.enabled ? "#47A547" : "#A02626") : "hsl(0, 0%, 20%)";
}
};
cheatDiv.appendChild(button);
cheatDiv.appendChild(document.createElement("br"));
}
};
setTimeout(() => setCheats(getSite()), 50);
var offLocationChange = onLocationChange((pathname) => {
let curPage = getSite();
curPageEl.innerText = getSite(true) ? `Current gamemode: $
{getSite(true)}` : "No game detected";
cheatDiv.innerHTML = "";
setCheats(curPage);
});
function onLocationChange(handler) {
let current = window.location.pathname;
const interval = setInterval(() => {
if (window.location.pathname == current) return;
current = window.location.pathname;
handler(current);
}, 50);
return () => clearInterval(interval);
}
function createButton(cheat) {
let button = document.createElement("button");
button.classList.add("cheat");
button.innerText = cheat;
return button;
}
function getSite(capitalize) {
switch (window.location.pathname) {
case "/play/gold":
case "/play/gold/final":
case "/gold/play/landing":
return capitalize ? "Gold Quest" : "gold";
case "/play/hack":
case "/play/hack/final":
case "/hack/play/landing":
return capitalize ? "Crypto" : "hack";
case "/play/fishing":
case "/play/fishing/final":
case "/fish/play/landing":
return capitalize ? "Fishing Frenzy" : "fish";
case "/play/pirate":
case "/play/pirate/final":
case "/pirate/play/landing":
return capitalize ? "Pirate's Voyage" : "pirate";
case "/play/defense2/load":
case "/play/defense2":
case "/play/defense2/final":
case "/defense2/play/landing":
return capitalize ? "Tower Defense 2" : "defense2";
case "/play/brawl/start":
case "/play/brawl/settings":
case "/play/brawl":
case "/play/brawl/final":
case "/brawl/play/landing":
return capitalize ? "Monster Brawl" : "brawl";
case "/play/dino":
case "/play/dino/final":
case "/dino/play/landing":
return capitalize ? "Deceptive Dinos" : "dino";
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":
case "/play/battle-royale/final":
case "/royale/play/landing":
return capitalize ? "Battle Royale" : "royale";
case "/defense/load":
case "/defense":
case "/defense/final":
case "/defense/play/landing":
return capitalize ? "Tower Defense" : "defense";
case "/cafe/load":
case "/cafe":
case "/cafe/shop":
case "/cafe/final":
case "/cafe/play/landing":
return capitalize ? "Cafe" : "cafe";
case "/play/factory":
case "/play/factory/settings":
case "/play/factory/start":
case "/play/factory/final":
case "/factory/play/landing":
return capitalize ? "Factory" : "factory";
case "/play/racing":
case "/play/racing/final":
case "/racing/play/landing":
return "racing";
case "/play/rush":
case "/play/rush/final":
case "/rush/play/landing":
return capitalize ? "Blook Rush" : "rush";
case "/play/classic/get-ready":
case "/play/classic/question":
case "/play/classic/answer/sent":
case "/play/classic/answer/result":
case "/play/classic/standings":
case "/play/classic/final":
case "/classic/play/landing":
return capitalize ? "Classic" : "classic";
case "/tower/load":
case "/tower/start":
case "/tower/map":
case "/tower/battle":
case "/tower/rest":
case "/tower/risk":
case "/tower/shop":
case "/tower/victory":
case "/tower/final":
case "/tower/play/landing":
return capitalize ? "Tower of Doom" : "tower";
case "/kingdom/start":
case "/kingdom":
case "/kingdom/final":
case "/kingdom/play/landing":
return capitalize ? "Crazy Kingdom" : "kingdom";
case "/play/toy":
case "/play/toy/final":
case "/toy/play/landing":
return capitalize ? "Santa's Workshop" : "toy";
case "/play/lobby":
return capitalize ? "Lobby" : "flappy";
default:
return false;
}
}
function toggleHidden(e) {
e.code == "KeyE" && (GUI.hidden = !GUI.hidden);
}
addEventListener("keypress", toggleHidden);
});
let img = new Image;
img.src = "https://raw.githubusercontent.com/Blooket-Council/Blooket-Cheats/
main/autoupdate/timestamps/mobileGui.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;
let i = 0;
while (i < data.length) {
let char = String.fromCharCode(data[i % 4 == 3 ? (i++, i++) : i++] +
data[i % 4 == 3 ? (i++, i++) : i++] * 256);
decode += char;
if (char == "/" && last == "*") break;
last = char;
}
let _, time = timeProcessed, error = "There was an error checking for
script updates. Run cheat anyway?";
try {
[_, time, error] = decode.match(/LastUpdated: (.+?); ErrorMessage:
"((.|\n)+?)"/);
} catch (e) {}
if ((latestProcess = parseInt(time)) <= timeProcessed ||
iframe.contentWindow.confirm(error)) cheat();
}
img.onerror = img.onabort = () => {
img.onerror = img.onabort = null;
cheat();
let iframe = document.querySelector("iframe");
iframe.contentWindow.alert("It seems the GitHub is either blocked or down.\
n\nIf it's NOT blocked, join the Discord server for
updates\nhttps://discord.gg/jHjGrrdXP6\n(The cheat will still run after this
alert)")
}
})();