- // ==UserScript==
- // @name bloxd.io auto clicker, account gen (Draggable UI, Notifications, Right Default)
- // @namespace https://bloxd.io
- // @version 1.1
- // @description Auto clicker for bloxd.io with draggable UI (defaults top right), notifications, arraylist, and simultaneous modules
- // @author MakeItOrBreakIt
- // @match https://staging.bloxd.io/*
- // @grant none
- // @license MIT
- // ==/UserScript==
-
- (function () {
- const config = JSON.parse(localStorage.getItem('bloxdConfig')) || {
- leftClickKey: 'KeyR',
- rightClickKey: 'KeyF'
- };
-
- let minCPS = 10, maxCPS = 15;
- let leftClickActive = false, rightClickActive = false;
- let leftClickInterval, rightClickInterval;
-
- let arraylistVisible = true;
- let arraylist = [];
-
- // Notification system
- function showNotification(msg, duration = 1800) {
- let notif = document.createElement("div");
- notif.className = "bloxd-notification";
- notif.textContent = msg;
- document.body.appendChild(notif);
- setTimeout(() => {
- notif.style.opacity = "0";
- setTimeout(() => notif.remove(), 400);
- }, duration);
- }
-
- // Original click simulation: dispatchEvent on canvas
- const TARGET_SELECTOR = "#noa-canvas";
- function simulateClick(button) {
- const element = document.querySelector(TARGET_SELECTOR);
- if (!element) return;
- element.dispatchEvent(new MouseEvent("mousedown", { button, bubbles: true }));
- element.dispatchEvent(new MouseEvent("mouseup", { button, bubbles: true }));
- if (button === 0) element.dispatchEvent(new MouseEvent("click", { button, bubbles: true }));
- if (button === 2) element.dispatchEvent(new MouseEvent("contextmenu", { button, bubbles: true }));
- }
-
- function randomInterval() {
- return 1000 / (Math.random() * (maxCPS - minCPS) + minCPS);
- }
-
- function startLeftClick() {
- if (leftClickActive) return;
- leftClickActive = true;
- function loop() {
- if (!leftClickActive) return;
- simulateClick(0);
- leftClickInterval = setTimeout(loop, randomInterval());
- }
- loop();
- updateArraylist();
- }
- function stopLeftClick() {
- leftClickActive = false;
- clearTimeout(leftClickInterval);
- updateArraylist();
- }
- function toggleLeftClick() {
- leftClickActive ? stopLeftClick() : startLeftClick();
- }
-
- function startRightClick() {
- if (rightClickActive) return;
- rightClickActive = true;
- function loop() {
- if (!rightClickActive) return;
- simulateClick(2);
- rightClickInterval = setTimeout(loop, randomInterval());
- }
- loop();
- updateArraylist();
- }
- function stopRightClick() {
- rightClickActive = false;
- clearTimeout(rightClickInterval);
- updateArraylist();
- }
- function toggleRightClick() {
- rightClickActive ? stopRightClick() : startRightClick();
- }
-
- function saveConfig() {
- localStorage.setItem('bloxdConfig', JSON.stringify(config));
- }
-
- function clearCookies() {
- document.cookie.split(";").forEach(cookie => {
- document.cookie = cookie.split("=")[0] + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/";
- });
- setTimeout(() => location.reload(), 1000);
- }
-
- function updateArraylist() {
- arraylist = [];
- if (leftClickActive) arraylist.push("Auto Left Click");
- if (rightClickActive) arraylist.push("Auto Right Click");
- renderArraylist();
- }
-
- function renderArraylist() {
- const arrDiv = document.getElementById("bloxd-arraylist");
- arrDiv.innerHTML = arraylist.length
- ? arraylist.map(f => `<span class="arraylist-item">${f}</span>`).join("<br>")
- : `<span style="color:#888;">No features active</span>`;
- arrDiv.style.display = arraylistVisible ? "block" : "none";
- }
-
- function createUI() {
- // Load saved position or use default (right: 10px, top: 10px)
- let saved = JSON.parse(localStorage.getItem('bloxdUIPos') || '{}');
- let useCustom = typeof saved.x === "number" && typeof saved.y === "number";
- let startX = saved.x || 0, startY = saved.y || 10;
-
- // Main UI container
- let ui = document.createElement("div");
- ui.id = "bloxd-ui-container";
- if (useCustom) {
- ui.setAttribute("style", `position: fixed; top: ${startY}px; left: ${startX}px; right: auto; background: rgba(0,0,0,0.8); color: white; padding: 10px; border-radius: 8px; z-index: 9999; font-size: 14px; min-width: 320px; max-width: 440px; box-shadow: 0 2px 8px #0008; cursor: move;`);
- } else {
- ui.setAttribute("style", `position: fixed; top: 10px; right: 10px; left: auto; background: rgba(0,0,0,0.8); color: white; padding: 10px; border-radius: 8px; z-index: 9999; font-size: 14px; min-width: 320px; max-width: 440px; box-shadow: 0 2px 8px #0008; cursor: move;`);
- }
- ui.innerHTML = `
- <div style="display: flex; flex-direction: row; gap: 10px; margin-bottom: 8px; cursor: move;">
- <button id="leftClickToggle" class="action-button">Left Click</button>
- <button id="rightClickToggle" class="action-button">Right Click</button>
- <button id="clearCookies" class="action-button">Gen Account</button>
- <button id="arraylistToggle" class="action-button">Arraylist</button>
- </div>
- <div style="display: flex; flex-direction: row; gap: 8px;">
- <label class="cps-label">Min CPS: <input type="number" id="minCPS" value="${minCPS}" min="1" max="50"></label>
- <label class="cps-label">Max CPS: <input type="number" id="maxCPS" value="${maxCPS}" min="1" max="50"></label>
- <label class="key-label">Left Key: <input id="keyLeft" type="text" value="${config.leftClickKey}" size="8"></label>
- <label class="key-label">Right Key: <input id="keyRight" type="text" value="${config.rightClickKey}" size="8"></label>
- <button id="saveKeys" class="action-button">Save Keys</button>
- </div>
- `;
- document.body.appendChild(ui);
-
- // Arraylist display
- let arrDiv = document.createElement("div");
- arrDiv.id = "bloxd-arraylist";
- arrDiv.className = "arraylist-container";
- if (useCustom) {
- arrDiv.setAttribute("style", `position: fixed; top: ${startY+140}px; left: ${startX}px; right: auto; background: rgba(30,30,30,0.97); color: #00ffb0; padding: 10px 22px; border-radius: 8px; z-index: 10000; font-size: 16px; min-width: 120px; text-align: left; box-shadow: 0 2px 8px #0008; user-select: none; margin-top: 10px;`);
- } else {
- arrDiv.setAttribute("style", `position: fixed; top: 150px; right: 10px; left: auto; background: rgba(30,30,30,0.97); color: #00ffb0; padding: 10px 22px; border-radius: 8px; z-index: 10000; font-size: 16px; min-width: 120px; text-align: left; box-shadow: 0 2px 8px #0008; user-select: none; margin-top: 10px;`);
- }
- document.body.appendChild(arrDiv);
-
- // Drag logic
- let isDragging = false, dragOffsetX = 0, dragOffsetY = 0;
- ui.addEventListener('mousedown', function(e) {
- if (e.target.tagName === "INPUT" || e.target.tagName === "BUTTON") return;
- isDragging = true;
- dragOffsetX = e.clientX - ui.getBoundingClientRect().left;
- dragOffsetY = e.clientY - ui.getBoundingClientRect().top;
- document.body.style.userSelect = "none";
- });
- document.addEventListener('mousemove', function(e) {
- if (!isDragging) return;
- let x = e.clientX - dragOffsetX;
- let y = e.clientY - dragOffsetY;
- // Clamp to window
- x = Math.max(0, Math.min(window.innerWidth - ui.offsetWidth, x));
- y = Math.max(0, Math.min(window.innerHeight - ui.offsetHeight, y));
- ui.style.left = x + "px";
- ui.style.top = y + "px";
- ui.style.right = "auto";
- // Move arraylist too
- arrDiv.style.left = x + "px";
- arrDiv.style.top = (y + 140) + "px";
- arrDiv.style.right = "auto";
- });
- document.addEventListener('mouseup', function(e) {
- if (isDragging) {
- isDragging = false;
- document.body.style.userSelect = "";
- // Save position
- localStorage.setItem('bloxdUIPos', JSON.stringify({
- x: parseInt(ui.style.left),
- y: parseInt(ui.style.top)
- }));
- }
- });
-
- // Event listeners
- document.getElementById("leftClickToggle").onclick = () => { toggleLeftClick(); };
- document.getElementById("rightClickToggle").onclick = () => { toggleRightClick(); };
- document.getElementById("clearCookies").onclick = clearCookies;
-
- document.getElementById("minCPS").onchange = e => { minCPS = parseInt(e.target.value); };
- document.getElementById("maxCPS").onchange = e => { maxCPS = parseInt(e.target.value); };
-
- document.getElementById("saveKeys").onclick = () => {
- config.leftClickKey = document.getElementById("keyLeft").value;
- config.rightClickKey = document.getElementById("keyRight").value;
- saveConfig();
- showNotification("Keybinds saved!");
- };
-
- document.getElementById("arraylistToggle").onclick = () => {
- arraylistVisible = !arraylistVisible;
- renderArraylist();
- };
-
- // Initial render
- updateArraylist();
- }
-
- // Keybinds for toggling features
- document.addEventListener("keydown", (event) => {
- if (event.repeat || ["INPUT", "TEXTAREA"].includes(event.target.tagName) || event.target.isContentEditable) return;
- if (event.code === config.leftClickKey) toggleLeftClick();
- if (event.code === config.rightClickKey) toggleRightClick();
- });
-
- if (!/Mobi|Android/i.test(navigator.userAgent)) {
- createUI();
- }
-
- // Extra CSS for buttons/inputs and notifications
- const styles = `
- #bloxd-ui-container .action-button {
- background-color: #444;
- color: white;
- border: none;
- padding: 9px 18px;
- border-radius: 6px;
- margin: 0 2px;
- cursor: pointer;
- font-size: 15px;
- transition: background-color 0.3s;
- }
- #bloxd-ui-container .action-button:hover {
- background-color: #888;
- }
- #bloxd-ui-container .action-button:active {
- background-color: #333;
- }
- #bloxd-ui-container .cps-label, #bloxd-ui-container .key-label {
- margin: 0 4px;
- font-size: 13px;
- }
- #bloxd-ui-container input[type="number"], #bloxd-ui-container input[type="text"] {
- padding: 4px 7px;
- font-size: 13px;
- width: 55px;
- margin-left: 2px;
- border-radius: 3px;
- border: 1px solid #333;
- background: #222;
- color: #fff;
- }
- #bloxd-arraylist .arraylist-item {
- color: #00ffb0;
- font-weight: bold;
- }
- .bloxd-notification {
- position: fixed;
- top: 20px;
- right: 20px;
- background: #222d;
- color: #fff;
- padding: 12px 24px;
- border-radius: 8px;
- font-size: 16px;
- z-index: 10001;
- box-shadow: 0 2px 8px #0008;
- opacity: 1;
- transition: opacity 0.4s;
- pointer-events: none;
- }
- `;
- let styleSheet = document.createElement("style");
- styleSheet.type = "text/css";
- styleSheet.innerText = styles;
- document.head.appendChild(styleSheet);
- })();