您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Auto clicker: Smooth + Burst modes, max 10k CPS. Hold M1 to click, Alt+M toggle, Alt+N set CPS.
// ==UserScript== // @name Mouse-Follow Auto Clicker (Smooth + Burst, Max 10k CPS, Hold M1) V3 // @namespace http://tampermonkey.net/ // @version 10.0 // @description Auto clicker: Smooth + Burst modes, max 10k CPS. Hold M1 to click, Alt+M toggle, Alt+N set CPS. // @author TheHackerClient // @match *://*/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; let running = false; // Auto clicker ON/OFF state let cps = 100; // Default clicks per second let smoothInterval = null; let burstInterval = null; let lastMouseX = 0, lastMouseY = 0; let m1Down = false; // Track if M1 is held // Track mouse document.addEventListener("mousemove", e => { lastMouseX = e.clientX; lastMouseY = e.clientY; }); // Track M1 press document.addEventListener("mousedown", e => { if (e.button === 0) m1Down = true; }); document.addEventListener("mouseup", e => { if (e.button === 0) m1Down = false; }); // Key controls document.addEventListener("keyup", function(evt) { // Alt+M → toggle on/off if (evt.key.toLowerCase() === "m" && evt.altKey) { if (!running) { running = true; alert(`Auto Clicker ENABLED. Hold M1 to click at ${cps} CPS.\n(Use Alt+N to change CPS, Alt+M to disable)`); } else { running = false; clearInterval(smoothInterval); clearInterval(burstInterval); smoothInterval = null; burstInterval = null; alert("Auto Clicker DISABLED."); } } // Alt+N → change CPS if (evt.key.toLowerCase() === "n" && evt.altKey) { let inp = prompt(`Enter CPS (1–10000, current ${cps}):`, cps); if (!isNaN(inp) && inp.trim().length > 0) { inp = parseInt(inp); if (inp > 10000) cps = 10000; else if (inp < 1) cps = 1; else cps = inp; alert(`CPS updated to ${cps}.`); } // If running, restart clicking with new CPS if (running) { clearInterval(smoothInterval); clearInterval(burstInterval); smoothInterval = null; burstInterval = null; } } }); function startClicking() { if (smoothInterval || burstInterval) return; // Already running // Smooth clicks let smoothIntervalMs = 1000 / cps; smoothInterval = setInterval(() => { if (m1Down && running) simulateClick(lastMouseX, lastMouseY); }, smoothIntervalMs); // Burst clicks burstInterval = setInterval(() => { if (m1Down && running) { let clicksPerBurst = Math.ceil(cps / 10); for (let i = 0; i < clicksPerBurst; i++) { simulateClick(lastMouseX, lastMouseY); } } }, 100); } // Continuously check to start/stop clicking setInterval(() => { if (running && m1Down && !smoothInterval && !burstInterval) { startClicking(); } if ((!m1Down || !running) && (smoothInterval || burstInterval)) { clearInterval(smoothInterval); clearInterval(burstInterval); smoothInterval = null; burstInterval = null; } }, 50); function simulateClick(x, y) { let el = document.elementFromPoint(x, y); if (!el) return; let ev = new MouseEvent("click", { view: window, bubbles: true, cancelable: true, clientX: x, clientY: y }); el.dispatchEvent(ev); } })();