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