您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds draggable rainbow UI menu with FOV slider and key press display on Taming.io
// ==UserScript== // @name Taming.io menu by 𝘣𝘢𝘳𝘴𝘪𝘬 𝘴𝘯𝘰𝘴𝘦𝘳 // @namespace http://tampermonkey.net/ // @version 0.5 // @description Adds draggable rainbow UI menu with FOV slider and key press display on Taming.io // @author 𝘣𝘢𝘳𝘴𝘪𝘬 𝘴𝘯𝘰𝘴𝘦𝘳 // @match *://taming.io/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; // --- CSS with animated gradient --- const style = document.createElement('style'); style.textContent = ` @keyframes rainbowShift { 0%{background-position:0% 50%;} 50%{background-position:100% 50%;} 100%{background-position:0% 50%;} } #rainbowMenu { position: fixed; top: 100px; left: 20px; width: 300px; background: linear-gradient(270deg, red, orange, yellow, green, blue, indigo, violet, red); background-size: 1600% 1600%; animation: rainbowShift 12s ease infinite; border-radius: 10px; box-shadow: 0 0 15px rgba(0,0,0,0.5); color: white; font-family: Arial, sans-serif; user-select: none; z-index: 999999; cursor: grab; padding: 15px; } #rainbowMenu header { font-weight: bold; font-size: 18px; margin-bottom: 10px; cursor: grab; } #rainbowMenu label { display: block; margin-top: 10px; font-size: 14px; } #rainbowMenu input[type="range"] { width: 100%; margin-top: 5px; -webkit-appearance: none; background: rgba(255,255,255,0.3); border-radius: 5px; height: 8px; } #rainbowMenu input[type="range"]::-webkit-slider-thumb { -webkit-appearance: none; width: 18px; height: 18px; background: white; border-radius: 50%; cursor: pointer; border: 1px solid #999; margin-top: -5px; } #keyStatus { margin-top: 15px; font-size: 14px; line-height: 1.4; max-height: 150px; overflow-y: auto; background: rgba(255,255,255,0.15); padding: 8px; border-radius: 5px; user-select: text; display: flex; flex-wrap: wrap; gap: 6px; } #keyStatus div.keyBlock { padding: 3px 8px; border: 1px solid rgba(255,255,255,0.3); border-radius: 5px; background: rgba(255,255,255,0.1); white-space: nowrap; user-select: none; } `; document.head.appendChild(style); // --- Create menu element --- const menu = document.createElement('div'); menu.id = 'rainbowMenu'; menu.innerHTML = ` <header>Rainbow UI - Taming.io</header> <label for="fovRange">Field of View (FOV): <span id="fovValue">90</span>°</label> <input type="range" id="fovRange" min="60" max="140" value="90" step="1" /> <label for="speedRange">Player Speed: <span id="speedValue">1.0</span>x</label> <input type="range" id="speedRange" min="0.5" max="3" value="1" step="0.05" /> <label>Pressed Keys:</label> <div id="keyStatus">None</div> `; document.body.appendChild(menu); // --- Drag functionality --- const header = menu.querySelector('header'); let isDragging = false; let dragStartX, dragStartY, menuStartX, menuStartY; header.addEventListener('mousedown', (e) => { isDragging = true; dragStartX = e.clientX; dragStartY = e.clientY; const rect = menu.getBoundingClientRect(); menuStartX = rect.left; menuStartY = rect.top; menu.style.cursor = 'grabbing'; e.preventDefault(); }); window.addEventListener('mouseup', () => { isDragging = false; menu.style.cursor = 'grab'; }); window.addEventListener('mousemove', (e) => { if (!isDragging) return; let newX = menuStartX + (e.clientX - dragStartX); let newY = menuStartY + (e.clientY - dragStartY); const maxX = window.innerWidth - menu.offsetWidth; const maxY = window.innerHeight - menu.offsetHeight; if (newX < 0) newX = 0; if (newY < 0) newY = 0; if (newX > maxX) newX = maxX; if (newY > maxY) newY = maxY; menu.style.left = newX + 'px'; menu.style.top = newY + 'px'; }); // --- Key press tracking --- const keyStatus = menu.querySelector('#keyStatus'); const pressedKeys = new Set(); const keyNames = { 'ArrowUp': 'Arrow Up', 'ArrowDown': 'Arrow Down', 'ArrowLeft': 'Arrow Left', 'ArrowRight': 'Arrow Right', ' ': 'Space', 'Shift': 'Shift', 'Control': 'Control', 'Alt': 'Alt', 'Enter': 'Enter', 'Escape': 'Escape', 'Tab': 'Tab', }; function getDisplayKey(key) { if (keyNames[key]) return keyNames[key]; if (key.length === 1) return key.toUpperCase(); return key; } window.addEventListener('keydown', (e) => { pressedKeys.add(e.key); updateKeyStatus(); }); window.addEventListener('keyup', (e) => { pressedKeys.delete(e.key); updateKeyStatus(); }); function updateKeyStatus() { if (pressedKeys.size === 0) { keyStatus.textContent = 'None'; } else { const blocks = Array.from(pressedKeys) .map(getDisplayKey) .sort() .map(key => `<div class="keyBlock">${key}</div>`) .join(''); keyStatus.innerHTML = blocks; } } // --- FOV control --- const fovRange = menu.querySelector('#fovRange'); const fovValue = menu.querySelector('#fovValue'); function setGameFOV(fov) { try { if (window.game && window.game.camera && typeof window.game.camera.fov !== 'undefined') { window.game.camera.fov = fov; if (typeof window.game.camera.updateProjectionMatrix === 'function') { window.game.camera.updateProjectionMatrix(); } return true; } } catch(e) {} return false; } fovRange.addEventListener('input', () => { const fov = parseInt(fovRange.value, 10); fovValue.textContent = fov; setGameFOV(fov); }); // --- Player speed control --- const speedRange = menu.querySelector('#speedRange'); const speedValue = menu.querySelector('#speedValue'); function setPlayerSpeed(multiplier) { try { if (window.game && window.game.player) { const player = window.game.player; if ('speed' in player) { player.speed = player.baseSpeed ? player.baseSpeed * multiplier : multiplier; } else if ('moveSpeed' in player) { player.moveSpeed = player.baseMoveSpeed ? player.baseMoveSpeed * multiplier : multiplier; } return true; } } catch(e) {} return false; } speedRange.addEventListener('input', () => { const speed = parseFloat(speedRange.value); speedValue.textContent = speed.toFixed(2); setPlayerSpeed(speed); }); // --- Initialization --- function tryInitSettings() { try { if (window.game && window.game.camera && typeof window.game.camera.fov !== 'undefined') { const currentFov = window.game.camera.fov; fovRange.value = currentFov; fovValue.textContent = currentFov; } if (window.game && window.game.player) { const player = window.game.player; let baseSpeed = 1; if ('baseSpeed' in player) baseSpeed = player.baseSpeed; else if ('baseMoveSpeed' in player) baseSpeed = player.baseMoveSpeed; else if ('speed' in player) baseSpeed = player.speed; else if ('moveSpeed' in player) baseSpeed = player.moveSpeed; let currentSpeedMult = 1; if ('speed' in player && baseSpeed) currentSpeedMult = player.speed / baseSpeed; else if ('moveSpeed' in player && baseSpeed) currentSpeedMult = player.moveSpeed / baseSpeed; speedRange.value = currentSpeedMult.toFixed(2); speedValue.textContent = currentSpeedMult.toFixed(2); } } catch(e){} } setTimeout(tryInitSettings, 3000); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址