您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automates typing on Typewriter with toggle using "Arrow Down"
当前为
// ==UserScript== // @name Typhacker with Auto Typing and Toggle // @namespace http://tampermonkey.net/ // @version 1.8 // @license MIT // @description Automates typing on Typewriter with toggle using "Arrow Down" // @author random russian guy // @match https://sg.typewriter.ch/index.php?r=typewriter/runLevel // @grant none // ==/UserScript== (function() { 'use strict'; const VALID_CHAR_REGEX = /^[a-zA-Z0-9À-ÖØ-öø-ÿ.,:;!?@#$%^&*()_+\-=\[\]{}|\\:;'",<>./? ]$/; let lastTypedChar = null; let typingEnabled = false; let typingTimer = null; let elementsHidden = false; function hideElements() { const hudInfo = document.getElementById("hud_info"); const hudTop2 = document.getElementById("hud_top2"); const hudTop1 = document.getElementById("hud_top1"); const keyboard = document.querySelector(".keyboard"); const targetImage = document.querySelector('img[height="325"][width="980"][src="/assets/65968696/images/tastatur_background.svg"]'); if (hudInfo) hudInfo.style.display = "none"; if (hudTop1) hudTop1.style.display = "none"; if (hudTop2) hudTop2.style.display = "none"; if (keyboard) keyboard.style.display = "none"; if (targetImage) targetImage.style.display = "none"; } function showElements() { const hudInfo = document.getElementById("hud_info"); const hudTop2 = document.getElementById("hud_top2"); const hudTop1 = document.getElementById("hud_top1"); const keyboard = document.querySelector(".keyboard"); const targetImage = document.querySelector('img[height="325"][width="980"][src="/assets/65968696/images/tastatur_background.svg"]'); if (hudInfo) hudInfo.style.display = ""; if (hudTop1) hudTop1.style.display = ""; if (hudTop2) hudTop2.style.display = ""; if (keyboard) keyboard.style.display = ""; if (targetImage) targetImage.style.display = ""; } function toggleElementsVisibility() { elementsHidden = !elementsHidden; if (elementsHidden) { hideElements(); } else { showElements(); } } function isElementInMiddle(element) { const rect = element.getBoundingClientRect(); const middleX = window.innerWidth / 2; const middleY = window.innerHeight / 2; const middleRegion = { left: middleX - window.innerWidth / 4, top: middleY - window.innerHeight / 4, right: middleX + window.innerWidth / 4, bottom: middleY + window.innerHeight / 4 }; return ( rect.left >= middleRegion.left && rect.right <= middleRegion.right && rect.top >= middleRegion.top && rect.bottom <= middleRegion.bottom ); } function detectAndType() { const spans = document.querySelectorAll('span'); spans.forEach(span => { const text = span.textContent.trim(); if (text.length === 1 && VALID_CHAR_REGEX.test(text) && isElementInMiddle(span)) { typeCharacter(text); } }); } function typeCharacter(char) { const typingArea = document.activeElement; if (typingArea && (typingArea.tagName === 'INPUT' || typingArea.tagName === 'TEXTAREA')) { const eventOptions = { key: char, code: `Key${char.toUpperCase()}`, char: char, keyCode: char.charCodeAt(0), which: char.charCodeAt(0), bubbles: true, cancelable: true }; typingArea.dispatchEvent(new KeyboardEvent('keydown', eventOptions)); typingArea.dispatchEvent(new KeyboardEvent('keypress', eventOptions)); typingArea.dispatchEvent(new KeyboardEvent('keyup', eventOptions)); lastTypedChar = char; } } function toggleTyping() { typingEnabled = !typingEnabled; if (typingEnabled) { startTypingAutomation(); } else { stopTypingAutomation(); } } function startTypingAutomation() { typingTimer = setInterval(() => { detectAndType(); }, 100); } function stopTypingAutomation() { if (typingTimer) { clearInterval(typingTimer); typingTimer = null; } } function handleKeyPress(event) { if (event.key === 'ArrowDown') { toggleTyping(); toggleElementsVisibility(); } } document.addEventListener('keydown', handleKeyPress); })();