您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Speed Typing Online Cheat - Supported Modes: Type The Alphabet, Type The Flags, Type PI, Fast Fire Typer
// ==UserScript== // @name Speed Typing Online Cheat // @namespace http://tampermonkey.net/ // @version 2.6 // @description Speed Typing Online Cheat - Supported Modes: Type The Alphabet, Type The Flags, Type PI, Fast Fire Typer // @author Omkar04 // @match https://www.speedtypingonline.com/games/* // @icon https://www.google.com/s2/favicons?sz=64&domain=speedtypingonline.com // @grant none // @license GPL-3.0 // ==/UserScript== (function () { 'use strict'; // ---- state ---- let cr; // interval handle for legacy flows let prevC; // previous content tracker for flags mode let originalResetMultiplier = null; // backup for god mode // ---- popup ---- window.popup = function (msg) { let div = document.createElement("div"); div.textContent = msg; div.style.position = "fixed"; div.style.bottom = "20px"; div.style.right = "20px"; div.style.background = "black"; div.style.color = "white"; div.style.padding = "25px 30px"; div.style.fontSize = "20px"; div.style.borderRadius = "8px"; div.style.fontFamily = "sans-serif"; div.style.zIndex = 999999; document.body.appendChild(div); setTimeout(() => div.remove(), 4000); }; // ---- small helpers ---- function formatSeconds(s) { if (!Number.isFinite(s)) return String(s); const mm = Math.floor(s / 60); const ss = Math.floor(s % 60); return `${mm}:${ss.toString().padStart(2, "0")}`; } function getDelay() { return parseInt(localStorage.getItem("delayMS") || "100"); } function makeDraggable(elem, handle) { let offsetX = 0, offsetY = 0, isDown = false; handle.addEventListener("mousedown", (e) => { if (elem.style.opacity === "0") return; isDown = true; offsetX = e.clientX - elem.offsetLeft; offsetY = e.clientY - elem.offsetTop; handle.style.cursor = "grabbing"; e.preventDefault(); }); document.addEventListener("mouseup", () => { if (elem.style.opacity === "0") return; isDown = false; handle.style.cursor = "grab"; }); document.addEventListener("mousemove", (e) => { if (!isDown) return; if (elem.style.opacity === "0") return; elem.style.left = (e.clientX - offsetX) + "px"; elem.style.top = (e.clientY - offsetY) + "px"; }); } // ---- UI: simple slider-only menu (Alphabet, PI) ---- function createSliderMenu() { if (document.querySelector("#cheatMenu")) return; // avoid duplicates let menu = document.createElement("div"); menu.id = "cheatMenu"; menu.style.position = "absolute"; menu.style.top = "70px"; menu.style.background = "#252525"; menu.style.color = "white"; menu.style.padding = "10px"; menu.style.borderRadius = "8px"; menu.style.zIndex = "999999"; menu.style.width = "220px"; menu.style.fontSize = "14px"; menu.style.transition = "opacity 0.25s ease"; menu.style.opacity = "1"; menu.innerHTML = ` <label>Typing Delay: <span id="delayLabel">${getDelay()}ms</span></label> <input type="range" id="delaySlider" min="0" max="200" step="5" value="${getDelay()}" style="width:100%;"> <div style="font-size:12px;color:#ccc;margin-top:6px;">Press F1 to start auto typer</div> <div style="font-size:12px;color:#ccc;margin-top:6px;">Press F2 to hide/show menu</div> `; let header = document.createElement("div"); header.textContent = "Cheat Menu ⚡"; header.style.fontWeight = "bold"; header.style.padding = "4px"; header.style.cursor = "grab"; header.style.background = "#333"; header.style.borderBottom = "1px solid #555"; menu.prepend(header); document.body.appendChild(menu); makeDraggable(menu, header); let slider = menu.querySelector("#delaySlider"); let label = menu.querySelector("#delayLabel"); slider.addEventListener("input", () => { localStorage.setItem("delayMS", slider.value); label.textContent = slider.value + "ms"; }); } // ---- UI: Flags menu (slider + autoType checkbox) ---- function createFlagsMenu() { if (document.querySelector("#cheatMenu")) return; // avoid duplicates let menu = document.createElement("div"); menu.id = "cheatMenu"; menu.style.position = "absolute"; menu.style.top = "70px"; menu.style.background = "#252525"; menu.style.color = "white"; menu.style.padding = "10px"; menu.style.borderRadius = "8px"; menu.style.zIndex = "999999"; menu.style.width = "240px"; menu.style.fontSize = "14px"; menu.style.transition = "opacity 0.25s ease"; menu.style.opacity = "1"; menu.innerHTML = ` <div id="cn" style="font-weight:bold;margin-bottom:6px;font-size: 18px;">Country name will appear here</div> <label>Typing Delay: <span id="delayLabel">${getDelay()}ms</span></label> <input type="range" id="delaySlider" min="0" max="200" step="5" value="${getDelay()}" style="width:100%;"><br> <label style="display:block;margin-top:6px;"> <input type="checkbox" id="autoFlagsChk"> Auto Type (Flags) </label> <div style="font-size:12px;color:#ccc;margin-top:6px;">Press F1 to start/stop typing</div> <div style="font-size:12px;color:#ccc;margin-top:6px;">Press F2 to hide/show menu</div> `; let header = document.createElement("div"); header.textContent = "Cheat Menu ⚡"; header.style.fontWeight = "bold"; header.style.padding = "4px"; header.style.cursor = "grab"; header.style.background = "#333"; header.style.borderBottom = "1px solid #555"; menu.prepend(header); document.body.appendChild(menu); makeDraggable(menu, header); let slider = menu.querySelector("#delaySlider"); let label = menu.querySelector("#delayLabel"); slider.addEventListener("input", () => { localStorage.setItem("delayMS", slider.value); label.textContent = slider.value + "ms"; }); } // ---- UI: FFT menu (slider + auto type + god mode + +10s + end game) ---- function createFFTMenu() { let menu = document.createElement("div"); menu.id = "cheatMenu"; menu.style.position = "absolute"; menu.style.top = "70px"; menu.style.background = "#252525"; menu.style.color = "white"; menu.style.padding = "10px"; menu.style.borderRadius = "8px"; menu.style.zIndex = "999999"; menu.style.width = "300px"; menu.style.fontSize = "14px"; menu.style.transition = "opacity 0.25s ease"; menu.style.opacity = "1"; let godModeSaved = localStorage.getItem("fftGodMode") === "1"; menu.innerHTML = ` <label>Typing Delay: <span id="delayLabel">${getDelay()}ms</span></label> <input type="range" id="delaySlider" min="50" max="300" step="5" value="${getDelay()}" style="width:100%;"><br> <label style="display:block;margin-top:6px;"><input type="checkbox" id="autoT"> Auto Type (FFT)</label> <label style="display:block;margin-top:6px;"><input type="checkbox" id="godModeChk"> Multiplier God Mode</label> <div style="margin-top:8px;"> <button id="add10Btn" style="padding:6px 8px;border-radius:6px;border:none;background:#4CAF50;color:white;cursor:pointer;">+10 seconds</button> <span style="font-size:10px;color:#ccc;">(works only when timer is started)</span> <button id="endGameBtn" style="padding:6px 8px;border-radius:6px;border:none;background:#E53935;color:white;cursor:pointer;margin-top:8px;">End Game</button> </div> <div style="font-size:12px;color:#ccc;margin-top:6px;">Press F1 to start/stop typing</div> <div style="font-size:16px;color:#ccc;margin-top:6px;">Press F2 to hide/show menu</div> `; let header = document.createElement("div"); header.textContent = "Cheat Menu ⚡"; header.style.fontWeight = "bold"; header.style.padding = "4px"; header.style.cursor = "grab"; header.style.background = "#333"; header.style.borderBottom = "1px solid #555"; menu.prepend(header); document.body.appendChild(menu); makeDraggable(menu, header); let slider = menu.querySelector("#delaySlider"); let label = menu.querySelector("#delayLabel"); slider.addEventListener("input", () => { localStorage.setItem("delayMS", slider.value); label.textContent = slider.value + "ms"; }); // restore God Mode saved state let godChk = menu.querySelector("#godModeChk"); if (godModeSaved) { godChk.checked = true; enableGodMode(); // re-enable on load if previously saved } godChk.addEventListener("change", (e) => { if (e.target.checked) { localStorage.setItem("fftGodMode", "1"); enableGodMode(); } else { localStorage.removeItem("fftGodMode"); disableGodMode(); } }); // +10s button let addBtn = menu.querySelector("#add10Btn"); addBtn.addEventListener("click", () => { try { if (typeof window.TotalSeconds === "number") { window.TotalSeconds += 10; } else if (typeof TotalSeconds === "number") { TotalSeconds += 10; } const ts = (typeof window.TotalSeconds === "number") ? window.TotalSeconds : (typeof TotalSeconds === "number" ? TotalSeconds : NaN); window.popup(`[+10s] TotalSeconds = ${formatSeconds(ts)}`); } catch (err) { console.error("Add10s error:", err); window.popup("[⚠️] Failed to add seconds."); } }); // End Game button let endBtn = menu.querySelector("#endGameBtn"); endBtn.addEventListener("click", () => { try { // only end if game running (reset button hidden) and TimeWasReset is false if (!window.TimeWasReset && document.querySelector("#resetBtn")?.style.visibility === "hidden") { if (typeof window.TotalSeconds === "number") { window.TotalSeconds = 0; } else if (typeof TotalSeconds === "number") { TotalSeconds = 0; } window.popup("[✅] Game Ended Successfully!!"); } } catch (err) { console.error("End Game error:", err); window.popup("[⚠️] Failed to end the game."); } }); } // ---- God Mode functions (patch/unpatch resetMultiplier) ---- function enableGodMode() { try { if (typeof window.resetMultiplier === "function" && originalResetMultiplier === null) { originalResetMultiplier = window.resetMultiplier; } // override regardless window.resetMultiplier = function () { }; window.popup("[⚡ God Mode ON] - Multiplier won't reset"); } catch (err) { console.error("enableGodMode error:", err); } } function disableGodMode() { try { if (originalResetMultiplier && typeof originalResetMultiplier === "function") { window.resetMultiplier = originalResetMultiplier; window.popup("[❌ God Mode OFF] - Multiplier reset restored"); } else { try { if (window.resetMultiplier && window.resetMultiplier.toString().trim() === "function () {}") { delete window.resetMultiplier; } } catch (e) { } window.popup("[❌ God Mode OFF] - restored"); } } catch (err) { console.error("disableGodMode error:", err); } } // ---- simulate key for block modes (flags, alphabet, pi) ---- function simulateKey(char) { let upper = char.toUpperCase(); let code = (char === ".") ? "Period" : "Key" + upper; let keyCode = (char === ".") ? 190 : upper.charCodeAt(0); const event = new KeyboardEvent("keydown", { key: char, code: code, keyCode: keyCode, which: keyCode, bubbles: true }); Object.defineProperty(event, "keyCode", { get: () => keyCode }); Object.defineProperty(event, "which", { get: () => keyCode }); document.querySelector("#blockLine0")?.dispatchEvent(event); } function autoType(word) { if (!word) return; let i = 0; let delay = getDelay(); function typeNext() { if (i < word.length) { simulateKey(word[i]); i++; setTimeout(typeNext, delay); } } typeNext(); } // ---- PI up to 1002 digits (including "3.") ---- function getPI(len) { const PI1002 = "3." + "14159265358979323846264338327950288419716939937510" + "58209749445923078164062862089986280348253421170679" + "82148086513282306647093844609550582231725359408128" + "48111745028410270193852110555964462294895493038196" + "44288109756659334461284756482337867831652712019091" + "45648566923460348610454326648213393607260249141273" + "72458700660631558817488152092096282925409171536436" + "78925903600113305305488204665213841469519415116094" + "33057270365759591953092186117381932611793105118548" + "07446237996274956735188575272489122793818301194912" + "98336733624406566430860213949463952247371907021798" + "60943702770539217176293176752384674818467669405132" + "00056812714526356082778577134275778960917363717872" + "14684409012249534301465495853710507922796892589235" + "42019956112129021960864034418159813629774771309960" + "51870721134999999837297804995105973173281609631859" + "50244594553469083026425223082533446850352619311881" + "71010003137838752886587533208381420617177669147303" + "59825349042875546873115956286388235378759375195778" + "18577805321712268066130019278766111959092164201989" + "38095257201065485863278865936153381827968230301952" + "03530185296899577362259941389124972177528347913151" + "55748572424541506959508295331168617278558890750983"; if (len && len.includes("Baby")) return PI1002.slice(0, 17); if (len && len.includes("Short")) return PI1002.slice(0, 27); if (len && len.includes("Medium")) return PI1002.slice(0, 52); if (len && len.includes("Long")) return PI1002.slice(0, 102); if (len && len.includes("Legendary")) return PI1002; return PI1002; } // ---- FFT typing (simulate real typing; uses wordBank) ---- async function FFTCheat() { let el = document.querySelector("#gInput"); if (!el) return; if (!window.wordBank || !Array.isArray(window.wordBank)) return; function randint(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } let word = window.wordBank[randint(0, window.wordBank.length - 1)]; el.value = ""; let delay = getDelay(); for (let i = 0; i < word.length; i++) { const char = word[i]; const keyCode = char.charCodeAt(0); ["keydown", "keypress", "keyup"].forEach(type => { let ev = new KeyboardEvent(type, { key: char, code: "Key" + (char.toUpperCase() || ""), keyCode: keyCode, which: keyCode, bubbles: true }); Object.defineProperty(ev, "keyCode", { get: () => keyCode }); Object.defineProperty(ev, "which", { get: () => keyCode }); el.dispatchEvent(ev); }); // update value & fire input so site sees typed letters el.value += char; el.dispatchEvent(new Event("input", { bubbles: true })); await new Promise(r => setTimeout(r, delay)); } // press Enter ["keydown", "keypress", "keyup"].forEach(type => { let e = new KeyboardEvent(type, { key: "Enter", code: "Enter", keyCode: 13, which: 13, bubbles: true }); Object.defineProperty(e, "keyCode", { get: () => 13 }); Object.defineProperty(e, "which", { get: () => 13 }); el.dispatchEvent(e); }); } // ---- F2 close behaviors ---- function enableF2HideMenu() { let container = document.querySelector("#blockDivContainer"); const keyHandler = (e) => { if (e.key === "F2") { e.preventDefault(); let menu = document.querySelector("#cheatMenu"); if (menu) { menu.style.opacity = menu.style.opacity === "0" ? "1" : "0"; if (menu.style.opacity === "0") { window.popup("❌ Menu hidden"); menu.style.cursor = ""; } else window.popup("📂 Menu shown"); } } }; [document, container].forEach(t => t?.addEventListener("keydown", keyHandler)); } // ------------------ MODE-SPECIFIC INIT ------------------ // FLAGS MODE (with checkbox requirement) if (location.pathname.includes("type-the-flags")) { createFlagsMenu(); enableF2HideMenu(); window.popup("[🚩] Tick 'Auto Type (Flags)' then press F1 to start/stop"); setInterval(() => { document.querySelector("#cn").textContent = `Country: ${textString}`; }, 500); let container = document.querySelector("#blockDivContainer"); let cheatRunning = false; let intervalId = null; const keyHandler = (e) => { if (e.key === "F1") { e.preventDefault(); const menu = document.querySelector("#cheatMenu"); const autoChk = menu?.querySelector("#autoFlagsChk"); if (!autoChk || !autoChk.checked) { window.popup("☑️ Tick 'Auto Type (Flags)' first!"); return; } if (cheatRunning) { clearInterval(intervalId); cheatRunning = false; window.popup("[Cheat Stopped ❌] - Type The Flags"); } else { cheatRunning = true; window.popup("[Cheat Started ✅] - Type The Flags"); intervalId = setInterval(() => { if (typeof textString !== "undefined" && textString !== prevC) { prevC = textString; autoType(textString); } }, 500); } } }; [document, container].forEach(t => t?.addEventListener("keydown", keyHandler)); } // ALPHABET MODE if (location.pathname.includes("type-the-alphabet")) { createSliderMenu(); enableF2HideMenu(); window.popup("[🔤] Press F1 to start typing the alphabet!!"); let container = document.querySelector("#blockDivContainer"); const keyHandler = (e) => { if (e.key === "F1") { e.preventDefault(); if (typeof textString !== "undefined") { autoType(textString); } } }; [document, container].forEach(t => t?.addEventListener("keydown", keyHandler)); } // PI MODE if (location.pathname.includes("type-pi")) { createSliderMenu(); enableF2HideMenu(); window.popup("[🧮] Press F1 to start typing PI!!"); let container = document.querySelector("#blockDivContainer"); const keyHandler = (e) => { if (e.key === "F1") { e.preventDefault(); let PI_length = document.querySelector(".ui-selectmenu-text")?.textContent || ""; autoType(getPI(PI_length)); } }; [document, container].forEach(t => t?.addEventListener("keydown", keyHandler)); } // FFT MODE if (location.pathname.includes("fast-fire-typer")) { createFFTMenu(); enableF2HideMenu(); window.popup("[🚀] Tick 'Auto Type (FFT)' then press F1 to start/stop. F2 hides/shows menu."); let fftRunning = false; document.addEventListener("keydown", async e => { if (e.key === "F1") { e.preventDefault(); const menu = document.querySelector("#cheatMenu"); const autoT = menu?.querySelector("#autoT"); if (!autoT || !autoT.checked) { window.popup("☑️ Tick 'Auto Type (FFT)' first!"); return; } if (fftRunning) { fftRunning = false; window.popup("[Cheat Stopped ❌] - Fast Fire Typer"); return; } fftRunning = true; window.popup("[Cheat Running ✅] - Fast Fire Typer"); while (fftRunning && autoT && autoT.checked) { // stop if reset button visible (timer ended) let resetBtn = document.querySelector("#resetBtn"); if (resetBtn && resetBtn.style.visibility !== "hidden") { fftRunning = false; window.popup("[⏹️ Stopped] Timer ended"); break; } await FFTCheat(); } } }); } })();