Blooket Hacks

Some Useful Blooket Hacks.

  1. // ==UserScript==
  2. // @name Blooket Hacks
  3. // @namespace
  4. // @version 1
  5. // @description Some Useful Blooket Hacks.
  6. // @author Spikesee3
  7. // @match *://*.blooket.com/*
  8. // @match *://blooket.com/*
  9. // @icon https://www.google.com/s2/favicons?domain=blooket.com
  10. // @run-at document-end
  11. // @supportURL
  12. // @license
  13. // @source ilities.js
  14. // ==/UserScript==
  15.  
  16. (() => {
  17. let n = document.createElement("iframe");
  18.  
  19. document.body.append(n);
  20.  
  21. window.alert = n.contentWindow.alert.bind(window);
  22.  
  23. window.prompt = n.contentWindow.prompt.bind(window);
  24.  
  25. window.confirm = n.contentWindow.confirm.bind(window);
  26.  
  27. n.remove();
  28. })();
  29.  
  30. (() => {
  31. let style = document.createElement("style");
  32.  
  33. style.innerHTML = `details > summary {
  34.  
  35. cursor: pointer;
  36.  
  37. transition: 0.15s;
  38.  
  39. list-style: none;
  40.  
  41. }
  42.  
  43. details > summary:hover {
  44.  
  45. color: hsl(0, 0%, 50%)
  46.  
  47. }
  48.  
  49. details > summary::-webkit-details-marker {
  50.  
  51. display: none;
  52.  
  53. }
  54.  
  55. details summary ~ * {
  56.  
  57. animation: sweep .5s ease-in-out;
  58.  
  59. }
  60.  
  61.  
  62.  
  63. @keyframes sweep {
  64.  
  65. 0% {opacity: 0; transform: translateY(-10px)}
  66.  
  67. 100% {opacity: 1; transform: translateY(0)}
  68.  
  69. }
  70.  
  71. .cheat {
  72.  
  73. border: none;
  74.  
  75. background: hsl(0, 0%, 20%);
  76.  
  77. padding: 5px;
  78.  
  79. margin: 3px;
  80.  
  81. width: 60%;
  82.  
  83. color: hsl(0, 0%, 100%);
  84.  
  85. transition: 0.2s;
  86.  
  87. border-radius: 5px;
  88.  
  89. cursor: pointer;
  90.  
  91. }
  92.  
  93. .cheat:hover {
  94.  
  95. background: hsl(0, 0%, 30%);
  96.  
  97. }`;
  98.  
  99. const GUI = document.createElement("div");
  100.  
  101. GUI.appendChild(style);
  102.  
  103. GUI.style.width = "400px";
  104.  
  105. //GUI.style.height = '500px';
  106.  
  107. GUI.style.background = "hsl(0, 0%, 10%)";
  108.  
  109. GUI.style.borderRadius = "10px";
  110.  
  111. GUI.style.position = "absolute";
  112.  
  113. GUI.style.textAlign = "center";
  114.  
  115. GUI.style.fontFamily = "Nunito";
  116.  
  117. GUI.style.color = "white";
  118.  
  119. GUI.style.overflow = "hidden";
  120.  
  121. GUI.style.top = "50px";
  122.  
  123. GUI.style.left = "50px";
  124.  
  125. var pos1 = 0,
  126. pos2 = 0,
  127. pos3 = 0,
  128. pos4 = 0;
  129.  
  130. GUI.onmousedown = (e = window.event) => {
  131. e.preventDefault();
  132.  
  133. pos3 = e.clientX;
  134.  
  135. pos4 = e.clientY;
  136.  
  137. document.onmouseup = () => {
  138. document.onmouseup = null;
  139.  
  140. document.onmousemove = null;
  141. };
  142.  
  143. document.onmousemove = (e) => {
  144. e = e || window.event;
  145.  
  146. e.preventDefault();
  147.  
  148. pos1 = pos3 - e.clientX;
  149.  
  150. pos2 = pos4 - e.clientY;
  151.  
  152. pos3 = e.clientX;
  153.  
  154. pos4 = e.clientY;
  155.  
  156. GUI.style.top = GUI.offsetTop - pos2 + "px";
  157.  
  158. GUI.style.left = GUI.offsetLeft - pos1 + "px";
  159. };
  160. };
  161.  
  162. let header = document.createElement("div");
  163.  
  164. GUI.appendChild(header);
  165.  
  166. header.style.width = "100%";
  167.  
  168. header.style.height = "35px";
  169.  
  170. header.style.paddingTop = "2px";
  171.  
  172. header.style.fontSize = "1.5rem";
  173.  
  174. header.style.textAlign = "center";
  175.  
  176. header.innerHTML = `Blooket Cheats <span style="font-size: 0.75rem">v4.10.22</span>`;
  177.  
  178. let loop;
  179.  
  180. let close = document.createElement("button");
  181.  
  182. header.appendChild(close);
  183.  
  184. close.style.background = "red";
  185.  
  186. close.style.height = "45px";
  187.  
  188. close.style.width = "45px";
  189.  
  190. close.style.border = "none";
  191.  
  192. close.style.cursor = "pointer";
  193.  
  194. close.style.position = "absolute";
  195.  
  196. close.style.top = "-10px";
  197.  
  198. close.style.right = "-10px";
  199.  
  200. close.style.fontSize = "1.5rem";
  201.  
  202. close.style.borderRadius = "10px";
  203.  
  204. close.style.fontFamily = "Nunito";
  205.  
  206. close.style.fontWeight = "bolder";
  207.  
  208. close.style.paddingTop = "10px";
  209.  
  210. close.style.paddingRight = "15px";
  211.  
  212. close.innerText = "X";
  213.  
  214. close.onclick = () => {
  215. GUI.remove();
  216.  
  217. clearInterval(loop);
  218.  
  219. removeEventListener("keypress", toggleHidden);
  220. };
  221.  
  222. let minimize = document.createElement("button");
  223.  
  224. header.appendChild(minimize);
  225.  
  226. minimize.style.background = "#444444";
  227.  
  228. minimize.style.height = "45px";
  229.  
  230. minimize.style.width = "45px";
  231.  
  232. minimize.style.border = "none";
  233.  
  234. minimize.style.cursor = "pointer";
  235.  
  236. minimize.style.position = "absolute";
  237.  
  238. minimize.style.top = "-10px";
  239.  
  240. minimize.style.left = "-10px";
  241.  
  242. minimize.style.fontSize = "1.5rem";
  243.  
  244. minimize.style.borderRadius = "10px";
  245.  
  246. minimize.style.fontFamily = "Nunito";
  247.  
  248. minimize.style.fontWeight = "bolder";
  249.  
  250. minimize.style.paddingTop = "10px";
  251.  
  252. minimize.style.paddingLeft = "15px";
  253.  
  254. minimize.innerText = "-";
  255.  
  256. minimize.onclick = () => {
  257. bodyDiv.hidden = !bodyDiv.hidden;
  258. };
  259.  
  260. let bodyDiv = document.createElement("div");
  261.  
  262. let body = document.createElement("div");
  263.  
  264. bodyDiv.appendChild(body);
  265.  
  266. GUI.appendChild(bodyDiv);
  267.  
  268. body.innerHTML = `<span id="curPageEl">${
  269. getSite(true)
  270. ? `Current gamemode: ${getSite(true)}`
  271. : "No game detected"
  272. }</span><br><span>(Press E to hide)</span><br>`;
  273.  
  274. body.style.display = "block";
  275.  
  276. body.style.margin = "10px";
  277.  
  278. //body.style.background = 'white';
  279.  
  280. body.style.minHeight = "70px";
  281.  
  282. let activeCheats = document.createElement("span");
  283.  
  284. body.appendChild(activeCheats);
  285.  
  286. document.body.append(GUI);
  287.  
  288. let footer = document.createElement("div");
  289.  
  290. bodyDiv.appendChild(footer);
  291.  
  292. footer.style.fontSize = "0.9rem";
  293.  
  294. footer.style.paddingBottom = "5px";
  295.  
  296. footer.innerHTML = `<span>GUI by OneMinesraft2#5394<br>Cheats by <a style="color: lightblue" href="https://twitter.com/glizuwu">gliz</a></span>`;
  297.  
  298. var getValues = () =>
  299. new Promise((e, t) => {
  300. try {
  301. let n = window.webpackJsonp
  302. .map((e) => Object.keys(e[1]).map((t) => e[1][t]))
  303. .reduce((e, t) => [...e, ...t], [])
  304. .find(
  305. (e) =>
  306. /\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/.test(
  307. e.toString()
  308. ) &&
  309. /\(new TextEncoder\)\.encode\(\"(.+?)\"\)/.test(
  310. e.toString()
  311. )
  312. )
  313. .toString();
  314.  
  315. e({
  316. blooketBuild: n.match(/\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/)[0],
  317.  
  318. secret: n.match(
  319. /\(new TextEncoder\)\.encode\(\"(.+?)\"\)/
  320. )[1],
  321. });
  322. } catch {
  323. t("Could not fetch auth details");
  324. }
  325. });
  326.  
  327. var encodeValues = async (e, t) => {
  328. let d = window.crypto.getRandomValues(new Uint8Array(12));
  329.  
  330. return window.btoa(
  331. Array.from(d)
  332. .map((e) => String.fromCharCode(e))
  333. .join("") +
  334. Array.from(
  335. new Uint8Array(
  336. await window.crypto.subtle.encrypt(
  337. {
  338. name: "AES-GCM",
  339.  
  340. iv: d,
  341. },
  342. await window.crypto.subtle.importKey(
  343. "raw",
  344. await window.crypto.subtle.digest(
  345. "SHA-256",
  346. new TextEncoder().encode(t)
  347. ),
  348. {
  349. name: "AES-GCM",
  350. },
  351. !1,
  352. ["encrypt"]
  353. ),
  354. new TextEncoder().encode(JSON.stringify(e))
  355. )
  356. )
  357. )
  358. .map((e) => String.fromCharCode(e))
  359. .join("")
  360. );
  361. };
  362.  
  363. function reactHandler() {
  364. return Object.values(document.querySelector("#app > div > div"))[1]
  365. .children[1]._owner;
  366. }
  367.  
  368. let autoAnswer, highlightAnswers, choiceESP, autoPassword, chestESP;
  369.  
  370. let cheats = {
  371. global: {
  372. "Get Daily Rewards": () => {
  373. fetch("https://api.blooket.com/api/users", {
  374. credentials: "include",
  375. })
  376. .then((x) => x.json())
  377. .then((x) => {
  378. getValues()
  379. .then(async (e) => {
  380. fetch(
  381. "https://api.blooket.com/api/users/add-rewards",
  382. {
  383. method: "put",
  384.  
  385. credentials: "include",
  386.  
  387. headers: {
  388. "content-type": "application/json",
  389.  
  390. "X-Blooket-Build": e.blooketBuild,
  391. },
  392.  
  393. body: await encodeValues(
  394. {
  395. name: x.name,
  396.  
  397. addedTokens: 250,
  398.  
  399. addedXp: 300,
  400. },
  401. e.secret
  402. ),
  403. }
  404. );
  405.  
  406. fetch(
  407. "https://api.blooket.com/api/users/add-rewards",
  408. {
  409. method: "put",
  410.  
  411. credentials: "include",
  412.  
  413. headers: {
  414. "content-type": "application/json",
  415.  
  416. "X-Blooket-Build": e.blooketBuild,
  417. },
  418.  
  419. body: await encodeValues(
  420. {
  421. name: x.name,
  422.  
  423. addedTokens: 250,
  424.  
  425. addedXp: 300,
  426. },
  427. e.secret
  428. ),
  429. }
  430. )
  431. .then(() => alert("Added daily rewawrds!"))
  432. .catch(() =>
  433. alert(
  434. "There was an error when adding rewards!"
  435. )
  436. );
  437. })
  438. .catch(() =>
  439. alert("There was an error encoding requests!")
  440. );
  441. })
  442. .catch(() => alert("There was an error getting username!"));
  443. },
  444.  
  445. "Spoof Blooks": () => {
  446. if (!window.location.pathname.split("/").includes("lobby"))
  447. return alert(
  448. "You must be in a game lobby! (e.g. https://www.blooket.com/play/lobby)"
  449. );
  450.  
  451. reactHandler().stateNode.setState({
  452. lockedBlooks: [],
  453. takenBlooks: [],
  454. });
  455. },
  456.  
  457. "Toggle Auto Answer": () => {
  458. autoAnswer = !autoAnswer;
  459. },
  460.  
  461. "Toggle Highlight Answers": () => {
  462. highlightAnswers = !highlightAnswers;
  463. },
  464.  
  465. "Spam Open Boxes": () => {
  466. let box = prompt(`Which box do you want to open? (e.g. Space)`);
  467.  
  468. let boxes = {
  469. safari: 25,
  470.  
  471. aquatic: 20,
  472.  
  473. bot: 20,
  474.  
  475. space: 20,
  476.  
  477. breakfast: 15,
  478.  
  479. medieval: 15,
  480.  
  481. wonderland: 15,
  482. };
  483.  
  484. if (!Object.keys(boxes).includes(box.toLowerCase()))
  485. return alert("I could not find that box!");
  486.  
  487. let amount = prompt("How many boxes do you want to open?");
  488.  
  489. fetch("https://api.blooket.com/api/users", {
  490. credentials: "include",
  491. })
  492. .then((x) => x.json())
  493. .then((x) => {
  494. if (x.tokens < boxes[box.toLowerCase()] * amount)
  495. amount = Math.floor(
  496. x.tokens / boxes[box.toLowerCase()]
  497. );
  498.  
  499. if (!amount)
  500. return alert("You do not have enough tokens!");
  501.  
  502. let wait = (ms) =>
  503. new Promise((r) => setTimeout(r, ms));
  504.  
  505. getValues()
  506. .then(async (e) => {
  507. let error = false,
  508. blooks = [];
  509.  
  510. for (let i = 0; i < amount; i++) {
  511. fetch(
  512. "https://api.blooket.com/api/users/unlockblook",
  513. {
  514. method: "put",
  515.  
  516. credentials: "include",
  517.  
  518. headers: {
  519. "content-type":
  520. "application/json",
  521.  
  522. "X-Blooket-Build":
  523. e.blooketBuild,
  524. },
  525.  
  526. body: await encodeValues(
  527. {
  528. name: x.name,
  529.  
  530. box:
  531. box
  532. .charAt(0)
  533. .toUpperCase() +
  534. box
  535. .slice(1)
  536. .toLowerCase(),
  537. },
  538. e.secret
  539. ),
  540. }
  541. )
  542. .then(async (x) => {
  543. let blook = await x.json();
  544.  
  545. blooks.push(blook.unlockedBlook);
  546.  
  547. alert(
  548. `${blook.unlockedBlook} (${
  549. i + 1
  550. }/${amount})`
  551. );
  552. })
  553. .catch(() => {
  554. error = true;
  555. });
  556.  
  557. await wait(750);
  558.  
  559. if (error) break;
  560. }
  561.  
  562. let count = {};
  563.  
  564. blooks.forEach((blook) => {
  565. count[blook] = (count[blook] || 0) + 1;
  566. });
  567.  
  568. alert(
  569. `Results:\n` +
  570. Object.entries(count)
  571. .map((x) => ` ${x[1]} ${x[0]}`)
  572. .join(`\n`)
  573. );
  574. })
  575. .catch(() =>
  576. alert("There was an error encoding requests!")
  577. );
  578. })
  579. .catch(() => alert("There was an error getting username!"));
  580. },
  581.  
  582. "Auto Sell Dupes": () => {
  583. fetch("https://api.blooket.com/api/users", {
  584. credentials: "include",
  585. })
  586. .then((x) => x.json())
  587. .then((x) => {
  588. let blooks = Object.entries(x.unlocks)
  589. .map((x) => [x[0], x[1] - 1])
  590. .filter((x) => x[1] > 0);
  591.  
  592. let wait = (ms) =>
  593. new Promise((r) => setTimeout(r, ms));
  594.  
  595. getValues()
  596. .then(async (e) => {
  597. let error = false;
  598.  
  599. alert("Selling duplicate blooks, please wait");
  600.  
  601. for (let [blook, numSold] of blooks) {
  602. fetch(
  603. "https://api.blooket.com/api/users/sellblook",
  604. {
  605. method: "put",
  606.  
  607. credentials: "include",
  608.  
  609. headers: {
  610. "content-type":
  611. "application/json",
  612.  
  613. "X-Blooket-Build":
  614. e.blooketBuild,
  615. },
  616.  
  617. body: await encodeValues(
  618. {
  619. name: x.name,
  620.  
  621. blook,
  622.  
  623. numSold,
  624. },
  625. e.secret
  626. ),
  627. }
  628. ).catch(() => {
  629. error = true;
  630. });
  631.  
  632. await wait(750);
  633.  
  634. if (error) break;
  635. }
  636.  
  637. alert(
  638. `Results:\n` +
  639. blooks
  640. .map((x) => ` ${x[1]} ${x[0]}`)
  641. .join(`\n`)
  642. );
  643. })
  644. .catch(() =>
  645. alert("There was an error encoding requests!")
  646. );
  647. })
  648. .catch(() =>
  649. alert("There was an error getting user data!")
  650. );
  651. },
  652. },
  653.  
  654. cafe: {
  655. "Infinite Food": () => {
  656. if (document.location.pathname != "/cafe")
  657. return alert("This cheat doesn't work in the shop!");
  658.  
  659. reactHandler().stateNode.state.foods.forEach(
  660. (e) => (e.stock = 99999)
  661. );
  662.  
  663. reactHandler().stateNode.forceUpdate();
  664. },
  665.  
  666. "Max Levels": () => {
  667. if (document.location.pathname != "/cafe/shop")
  668. return alert("This cheat only works in the shop!");
  669.  
  670. Object.keys(reactHandler().stateNode.state.items).forEach(
  671. (x) => (reactHandler().stateNode.state.items[x] = 5)
  672. );
  673.  
  674. reactHandler().stateNode.forceUpdate();
  675. },
  676.  
  677. "Set Cash": () => {
  678. reactHandler().stateNode.setState({
  679. cafeCash: Number(
  680. parseFloat(prompt("How much cash would you like?"))
  681. ),
  682. });
  683. },
  684.  
  685. "Reset Abilities": () => {
  686. Object.keys(reactHandler().stateNode.state.abilities).forEach(
  687. (x) => (reactHandler().stateNode.state.abilities[x] = 5)
  688. );
  689.  
  690. reactHandler().stateNode.forceUpdate();
  691. },
  692. },
  693.  
  694. kingdom: {
  695. "Choice ESP": () => {
  696. choiceESP = !choiceESP;
  697. },
  698.  
  699. "Max Stats": () => {
  700. reactHandler().stateNode.setState({
  701. materials: 100,
  702. people: 100,
  703. happiness: 100,
  704. gold: 100,
  705. });
  706. },
  707.  
  708. "Disable Toucan": () => {
  709. reactHandler().stateNode.taxCounter = Number.MAX_VALUE;
  710. },
  711.  
  712. "Set Guests": () => {
  713. let guestScore = Number(
  714. parseFloat(prompt("How many guests do you want?"))
  715. );
  716.  
  717. reactHandler().stateNode.setState({ guestScore });
  718. },
  719.  
  720. "Skip Guest": () => {
  721. reactHandler().stateNode.nextGuest();
  722. },
  723. },
  724.  
  725. crypto: {
  726. "Auto Hack": () => {
  727. autoPassword = !autoPassword;
  728. },
  729.  
  730. "Set Crypto": () => {
  731. let amount = Number(
  732. parseFloat(prompt("How much crypto do you want?"))
  733. );
  734.  
  735. reactHandler().stateNode.setState({
  736. crypto2: amount,
  737. crypto: amount,
  738. });
  739. },
  740.  
  741. "Custom Password": () => {
  742. let password = Number(
  743. parseFloat(
  744. prompt("What do you want to set your password to?")
  745. )
  746. );
  747.  
  748. reactHandler().stateNode.setState({ password });
  749. },
  750.  
  751. "Remove Hack": () => {
  752. reactHandler().stateNode.setState({ hack: "" });
  753. },
  754.  
  755. "Reset Player's Crypto": () => {
  756. let target = prompt("Name of player");
  757.  
  758. let e = reactHandler();
  759.  
  760. !target ||
  761. e.memoizedProps.firebase.getDatabaseVal(
  762. e.memoizedProps.client.hostId,
  763. "c",
  764. (...o) => {
  765. let data = Object.keys(o[0]);
  766.  
  767. if (data.some((e) => e == target))
  768. data.forEach((player) => {
  769. if (player == target) {
  770. e.memoizedProps.firebase.setVal({
  771. id: e.memoizedProps.client.hostId,
  772.  
  773. path:
  774. "c/" +
  775. e.memoizedProps.client.name,
  776.  
  777. val: {
  778. p: e.stateNode.state.password,
  779.  
  780. b: e.memoizedProps.client.blook,
  781.  
  782. cr: e.stateNode.state.crypto,
  783.  
  784. tat:
  785. player +
  786. ":" +
  787. (o[0][player].cr || 0),
  788. },
  789. });
  790. alert("Reset player's crypto");
  791. }
  792. });
  793. else alert("Player does not exist");
  794. }
  795. );
  796. },
  797. },
  798.  
  799. factory: {
  800. "All Mega Bot": () => {
  801. let blooks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0].fill({
  802. name: "Mega Bot",
  803. color: "#d71f27",
  804. class: "🤖",
  805. rarity: "Legendary",
  806. cash: [80000, 430000, 4200000, 62000000, 1000000000],
  807. time: [5, 5, 3, 3, 3],
  808. price: [7000000, 120000000, 1900000000, 35000000000],
  809. active: false,
  810. level: 4,
  811. bonus: 5.5,
  812. });
  813.  
  814. reactHandler().stateNode.setState({ blooks });
  815. },
  816.  
  817. "Remove Glitches": () => {
  818. reactHandler().stateNode.setState({
  819. glitch: "",
  820.  
  821. bites: 0,
  822.  
  823. ads: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  824.  
  825. hazards: ["", "", "", "", ""],
  826.  
  827. lol: false,
  828.  
  829. joke: false,
  830.  
  831. slow: false,
  832.  
  833. dance: false,
  834.  
  835. popUpAmount: 0,
  836. });
  837. },
  838.  
  839. "Max Blooks": () => {
  840. reactHandler().stateNode.state.blooks.forEach((blook) => {
  841. blook.level = 4;
  842. });
  843. },
  844.  
  845. "Set Cash": () => {
  846. let cash = Number(
  847. parseFloat(prompt("How much cash do you want?"))
  848. );
  849.  
  850. reactHandler().stateNode.setState({ cash });
  851. },
  852. },
  853.  
  854. fishing: {
  855. "Set Weight": () => {
  856. let weight = Number(
  857. parseFloat(prompt("How much weight do you want?"))
  858. );
  859.  
  860. reactHandler().stateNode.setState({ weight2: weight, weight });
  861. },
  862.  
  863. "Set Lure": () => {
  864. let lure =
  865. Number(
  866. parseFloat(
  867. prompt(
  868. "What do you want to set your lure to? (1 - 5)"
  869. )
  870. )
  871. ) - 1;
  872.  
  873. reactHandler().stateNode.setState({
  874. lure: lure < 0 ? 0 : lure > 4 ? 4 : lure,
  875. });
  876. },
  877. },
  878.  
  879. gold: {
  880. "Set Gold": () => {
  881. let gold = Number(
  882. parseFloat(prompt("How much gold do you want?"))
  883. );
  884.  
  885. reactHandler().stateNode.setState({ gold2: gold, gold });
  886. },
  887.  
  888. "Chest ESP": () => {
  889. chestESP = !chestESP;
  890. },
  891.  
  892. "Set Player's Gold": () => {
  893. let e = reactHandler(),
  894. player = prompt("Player to set gold"),
  895. amount = Number(
  896. parseFloat(prompt("Amount to set gold to"))
  897. );
  898.  
  899. e.memoizedProps.firebase.setVal({
  900. id: e.memoizedProps.client.hostId,
  901.  
  902. path: "c/" + e.memoizedProps.client.name,
  903.  
  904. val: {
  905. b: e.memoizedProps.client.blook,
  906.  
  907. g: e.stateNode.state.gold,
  908.  
  909. tat: player + ":swap:" + amount,
  910. },
  911. });
  912. },
  913. },
  914.  
  915. racing: {
  916. "Instant Win": () => {
  917. reactHandler().stateNode.setState({
  918. progress: reactHandler().stateNode.state.goalAmount,
  919. });
  920.  
  921. setTimeout(() => {
  922. try {
  923. Array.from(
  924. document.body.querySelectorAll(
  925. 'div[class*="answerText"]'
  926. )
  927. )
  928. .filter(
  929. (t) =>
  930. t.firstChild.innerHTML ==
  931. reactHandler().memoizedState.question
  932. .correctAnswers[0]
  933. )[0]
  934. .click();
  935. } catch {
  936. try {
  937. Array.from(
  938. document.body.querySelectorAll(
  939. 'div[class*="answerText"]'
  940. )
  941. )
  942. .filter(
  943. (t) =>
  944. t.firstChild.innerHTML ==
  945. reactHandler().memoizedProps.client
  946. .question.correctAnswers[0]
  947. )[0]
  948. .click();
  949. } catch {}
  950. }
  951. }, 100);
  952. },
  953. },
  954.  
  955. defense: {
  956. "Clear Enemies": () => {
  957. reactHandler().stateNode.enemies = [];
  958. },
  959.  
  960. "Max Towers": () => {
  961. reactHandler().stateNode.towers.forEach((tower) => {
  962. tower.damage = 99999999;
  963.  
  964. tower.range = 99999999;
  965.  
  966. tower.fullCd = 0;
  967. });
  968. },
  969.  
  970. "Remove Ducks": () => {
  971. data = reactHandler().stateNode;
  972.  
  973. data.ducks.forEach((x) => {
  974. data.tiles[x.y][x.x] = 0;
  975. });
  976.  
  977. data.ducks.length = 0;
  978. },
  979.  
  980. "Place Towers Anywhere": () => {
  981. reactHandler().stateNode.tiles =
  982. reactHandler().stateNode.tiles.map((x) =>
  983. x.map((e) => (e == 2 ? 0 : e))
  984. );
  985. },
  986.  
  987. "Set Damage": () => {
  988. let dmg = Number(
  989. parseFloat(prompt("How much damage do you want?"))
  990. );
  991.  
  992. reactHandler().stateNode.dmg = dmg;
  993. },
  994.  
  995. "Set Round": () => {
  996. let round = Number(
  997. parseFloat(prompt("What round do you want to set it to?"))
  998. );
  999.  
  1000. reactHandler().stateNode.setState({ round });
  1001. },
  1002.  
  1003. "Set Tokens": () => {
  1004. let tokens = Number(
  1005. parseFloat(prompt("How many tokens do you want?"))
  1006. );
  1007.  
  1008. reactHandler().stateNode.setState({ tokens });
  1009. },
  1010. },
  1011.  
  1012. doom: {
  1013. "Set Coins": () => {
  1014. try {
  1015. reactHandler().stateNode.props.setTowerCoins(
  1016. Number(
  1017. parseFloat(prompt("How many coins do you want?"))
  1018. )
  1019. );
  1020. } catch {}
  1021. },
  1022.  
  1023. "Lower Enemy Stats": () => {
  1024. let data = reactHandler().stateNode.state;
  1025.  
  1026. if (data.phase != "select")
  1027. return alert(
  1028. "You must be on the attribute selection page!"
  1029. );
  1030.  
  1031. reactHandler().stateNode.setState({
  1032. enemyCard: {
  1033. ...data.enemyCard,
  1034. strength: 0,
  1035. charisma: 0,
  1036. wisdom: 0,
  1037. },
  1038. });
  1039. },
  1040.  
  1041. "Max Player Stats": () => {
  1042. let data = reactHandler().stateNode.state;
  1043.  
  1044. if (data.phase != "select")
  1045. return alert(
  1046. "You must be on the attribute selection page!"
  1047. );
  1048.  
  1049. reactHandler().stateNode.setState({
  1050. myCard: {
  1051. ...data.myCard,
  1052. strength: 20,
  1053. charisma: 20,
  1054. wisdom: 20,
  1055. },
  1056. });
  1057. },
  1058.  
  1059. "Heal Player": () => {
  1060. reactHandler().stateNode.setState({ myLife: 100 });
  1061. },
  1062. },
  1063.  
  1064. rush: {
  1065. "Set Defense": () => {
  1066. let e = reactHandler();
  1067.  
  1068. e.stateNode.props.firebase.setVal({
  1069. id: e.stateNode.props.client.hostId,
  1070.  
  1071. path: "c/" + e.stateNode.props.client.name + "/d",
  1072.  
  1073. val: Number(
  1074. parseFloat(prompt("How much defense do you want?"))
  1075. ),
  1076. });
  1077. },
  1078.  
  1079. "Set Blooks": () => {
  1080. let e = reactHandler();
  1081.  
  1082. e.stateNode.props.firebase.setVal({
  1083. id: e.stateNode.props.client.hostId,
  1084.  
  1085. path: "c/" + e.stateNode.props.client.name + "/bs",
  1086.  
  1087. val: Number(
  1088. parseFloat(prompt("How many blooks do you want?"))
  1089. ),
  1090. });
  1091. },
  1092. },
  1093. };
  1094.  
  1095. let global = document.createElement("details");
  1096.  
  1097. global.innerHTML = `<summary style="padding: 10px; font-size: 1.5em; font-weight: bolder">Global</summary>`;
  1098.  
  1099. for (var i = 0; i < Object.keys(cheats.global).length; i++) {
  1100. let cheat = createButton(Object.keys(cheats.global)[i]);
  1101.  
  1102. cheat.onclick = cheats.global[Object.keys(cheats.global)[i]];
  1103.  
  1104. global.appendChild(cheat);
  1105. }
  1106.  
  1107. global.open = true;
  1108.  
  1109. global.style.paddingBottom = "10px";
  1110.  
  1111. body.appendChild(global);
  1112.  
  1113. let cheatDiv = document.createElement("div");
  1114.  
  1115. body.appendChild(cheatDiv);
  1116.  
  1117. loop = setInterval(() => {
  1118. if (curPage != getSite()) {
  1119. curPage = getSite();
  1120.  
  1121. curPageEl.innerText = getSite(true)
  1122. ? `Current gamemode: ${getSite(true)}`
  1123. : "No game detected";
  1124.  
  1125. Array.from(cheatDiv.children).forEach((x) => x.remove());
  1126.  
  1127. if (curPage && cheats[curPage])
  1128. Object.keys(cheats[curPage]).forEach((cheat) => {
  1129. let button = createButton(cheat);
  1130.  
  1131. button.onclick = cheats[curPage][cheat];
  1132.  
  1133. cheatDiv.appendChild(button);
  1134.  
  1135. cheatDiv.appendChild(document.createElement("br"));
  1136. });
  1137. }
  1138.  
  1139. let activeCheatsText = `Auto Answer: ${
  1140. autoAnswer ? "Enabled" : "Disabled"
  1141. }\nHighlight Answers: ${highlightAnswers ? "Enabled" : "Disabled"}${
  1142. curPage == "kingdom"
  1143. ? `\nChoice ESP: ${choiceESP ? "Enabled" : "Disabled"}`
  1144. : curPage == "crypto"
  1145. ? `\nAuto Hack: ${autoPassword ? "Enabled" : "Disabled"}`
  1146. : curPage == "gold"
  1147. ? `\nChest ESP: ${chestESP ? "Enabled" : "Disabled"}`
  1148. : ""
  1149. }`;
  1150.  
  1151. activeCheats.innerText != activeCheatsText &&
  1152. (activeCheats.innerText = activeCheatsText);
  1153.  
  1154. if (autoAnswer) {
  1155. try {
  1156. Array.from(
  1157. document.body.querySelectorAll('div[class*="answerText"]')
  1158. )
  1159. .filter(
  1160. (t) =>
  1161. t.firstChild.innerHTML ==
  1162. reactHandler().memoizedState.question
  1163. .correctAnswers[0]
  1164. )[0]
  1165. .click();
  1166. } catch {
  1167. try {
  1168. Array.from(
  1169. document.body.querySelectorAll(
  1170. 'div[class*="answerText"]'
  1171. )
  1172. )
  1173. .filter(
  1174. (t) =>
  1175. t.firstChild.innerHTML ==
  1176. reactHandler().memoizedProps.client.question
  1177. .correctAnswers[0]
  1178. )[0]
  1179. .click();
  1180. } catch {}
  1181. }
  1182. }
  1183.  
  1184. if (highlightAnswers) {
  1185. try {
  1186. Array.from(
  1187. document.querySelector('div[class*="answersHolder"')
  1188. .children
  1189. ).forEach((x) => {
  1190. if (
  1191. reactHandler().memoizedState.question.correctAnswers.includes(
  1192. x.innerText
  1193. ) ||
  1194. reactHandler().memoizedProps.client.question.correctAnswers.includes(
  1195. x.innerText
  1196. )
  1197. )
  1198. x.firstChild.style =
  1199. "background-color: rgb(0, 207, 119);";
  1200. else
  1201. x.firstChild.style =
  1202. "background-color: rgb(225, 40, 33);";
  1203. });
  1204. } catch {}
  1205. }
  1206.  
  1207. if (curPage == "kingdom") {
  1208. Array.from(document.getElementsByClassName("choiceESP")).forEach(
  1209. (x) => x.remove()
  1210. );
  1211.  
  1212. if (choiceESP) {
  1213. try {
  1214. let elements = {
  1215. materials: Array.from(
  1216. document.querySelectorAll("div")
  1217. ).find((x) =>
  1218. Array.from(x.children).find((e) =>
  1219. e.className.includes("tree")
  1220. )
  1221. ),
  1222.  
  1223. people: Array.from(
  1224. document.querySelectorAll("div")
  1225. ).find((x) =>
  1226. Array.from(x.children).find(
  1227. (e) =>
  1228. e.className.includes("users") &&
  1229. e.parentElement.className.includes(
  1230. "statContainer"
  1231. )
  1232. )
  1233. ),
  1234.  
  1235. happiness: Array.from(
  1236. document.querySelectorAll("div")
  1237. ).find((x) =>
  1238. Array.from(x.children).find((e) =>
  1239. e.className.includes("grin")
  1240. )
  1241. ),
  1242.  
  1243. gold: Array.from(document.querySelectorAll("div")).find(
  1244. (x) =>
  1245. Array.from(x.children).find((e) =>
  1246. e.className.includes("coins")
  1247. )
  1248. ),
  1249. };
  1250.  
  1251. let data = reactHandler().stateNode.state.guest;
  1252.  
  1253. Object.entries(data.yes).forEach((x) => {
  1254. if (x[0] == "msg") return;
  1255.  
  1256. let element = document.createElement("div");
  1257.  
  1258. element.className = "choiceESP";
  1259.  
  1260. element.style =
  1261. "font-size: 24px; color: rgb(75, 194, 46); font-weight: bolder;";
  1262.  
  1263. element.innerText = String(x[1]);
  1264.  
  1265. elements[x[0]].appendChild(element);
  1266. });
  1267.  
  1268. Object.entries(data.no).forEach((x) => {
  1269. if (x[0] == "msg") return;
  1270.  
  1271. let element = document.createElement("div");
  1272.  
  1273. element.className = "choiceESP";
  1274.  
  1275. element.style =
  1276. "font-size: 24px; color: darkred; font-weight: bolder;";
  1277.  
  1278. element.innerText = String(x[1]);
  1279.  
  1280. elements[x[0]].appendChild(element);
  1281. });
  1282. } catch (e) {}
  1283. }
  1284. }
  1285.  
  1286. if (curPage == "crypto" && autoPassword) {
  1287. let { stage, correctPassword } = Object.values(
  1288. document.querySelector("#app > div > div")
  1289. )[1].children[1]._owner.stateNode.state;
  1290.  
  1291. if (stage == "hack")
  1292. Array.from(document.querySelectorAll("div"))
  1293. .filter((x) => x.innerHTML == correctPassword)[0]
  1294. .click();
  1295. }
  1296.  
  1297. if (curPage == "gold" && chestESP) {
  1298. try {
  1299. if (reactHandler().stateNode.state.stage == "prize") {
  1300. let { choices } = reactHandler().stateNode.state;
  1301.  
  1302. let div = document.querySelector(
  1303. "div[class*='regularBody']"
  1304. ).children[1];
  1305.  
  1306. if (div) {
  1307. if (!document.querySelectorAll(".chest-esp").length)
  1308. choices.forEach((box, i) => {
  1309. textElement = document.createElement("p");
  1310.  
  1311. textElement.className = "chest-esp";
  1312.  
  1313. textElement.innerText = box.text;
  1314.  
  1315. textElement.style = `text-align: center;
  1316.  
  1317. font-size: 30px;
  1318.  
  1319. color: white;
  1320.  
  1321. font-family:Titan One;
  1322.  
  1323. sans-serif;
  1324.  
  1325. border-color: black;
  1326.  
  1327. margin-top: 200px;`;
  1328.  
  1329. try {
  1330. div.children[i].appendChild(textElement);
  1331. } catch (e) {
  1332. console.log(e);
  1333. }
  1334. });
  1335. else
  1336. choices.forEach((box, i) => {
  1337. if (
  1338. div.children.length == 3 &&
  1339. div.children[i].children[1].innerText !=
  1340. box.text
  1341. )
  1342. div.children[i].children[1].innerText =
  1343. box.text;
  1344. });
  1345. }
  1346. }
  1347. } catch (e) {
  1348. console.log(e);
  1349. }
  1350. }
  1351. });
  1352.  
  1353. let curPage = getSite();
  1354.  
  1355. if (curPage && cheats[curPage])
  1356. Object.keys(cheats[curPage]).forEach((cheat) => {
  1357. let button = createButton(cheat);
  1358.  
  1359. button.onclick = cheats[curPage][cheat];
  1360.  
  1361. cheatDiv.appendChild(button);
  1362.  
  1363. cheatDiv.appendChild(document.createElement("br"));
  1364. });
  1365.  
  1366. function createButton(cheat) {
  1367. let button = document.createElement("button");
  1368.  
  1369. button.classList.add("cheat");
  1370.  
  1371. button.innerText = cheat;
  1372.  
  1373. return button;
  1374. }
  1375.  
  1376. function getSite(capitalize) {
  1377. switch (window.location.pathname.split("/")[2]) {
  1378. case "rush":
  1379. return capitalize ? "Blook Rush" : "rush";
  1380.  
  1381. case "gold":
  1382. return capitalize ? "Gold Quest" : "gold";
  1383.  
  1384. case "fishing":
  1385. return capitalize ? "Fishing Frenzy" : "fishing";
  1386.  
  1387. case "hack":
  1388. return capitalize ? "Crypto Hack" : "crypto";
  1389.  
  1390. case "battle-royale":
  1391. return capitalize ? "Battle Royale" : "royale";
  1392.  
  1393. case "factory":
  1394. return capitalize ? "Factory" : "factory";
  1395.  
  1396. case "racing":
  1397. return capitalize ? "Racing" : "racing";
  1398.  
  1399. case "classic":
  1400. return capitalize ? "Classic" : "classic";
  1401.  
  1402. default:
  1403. switch (window.location.pathname.split("/")[1]) {
  1404. case "defense":
  1405. return capitalize ? "Tower Defense" : "defense";
  1406.  
  1407. case "cafe":
  1408. return capitalize ? "Café" : "cafe";
  1409.  
  1410. case "tower":
  1411. return capitalize ? "Tower of Doom" : "doom";
  1412.  
  1413. case "kingdom":
  1414. return capitalize ? "Crazy Kingdom" : "kingdom";
  1415.  
  1416. default:
  1417. return false;
  1418. }
  1419. }
  1420. }
  1421.  
  1422. function toggleHidden(e) {
  1423. e.code == "KeyE" && (GUI.hidden = !GUI.hidden);
  1424. }
  1425.  
  1426. addEventListener("keypress", toggleHidden);
  1427. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址