您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Añade pincel con transparencia a Drawaria.online y botón para activar/desactivar y ajustar transparencia.
// ==UserScript== // @name Drawaria Pincel Transparente con UI (Simulador) // @namespace http://tampermonkey.net/ // @version 1.0 // @description Añade pincel con transparencia a Drawaria.online y botón para activar/desactivar y ajustar transparencia. // @author YouTubeDrawaria // @match https://drawaria.online/* // @grant none // @license MIT // @icon https://www.google.com/s2/favicons?sz=64&domain=drawaria.online // ==/UserScript== (function() { 'use strict'; console.log("[Drawaria Transparency Script] Script cargado. Intentando inicializar..."); // --- Crear UI flotante --- function createControlPanel() { const wrapper = document.createElement('div'); wrapper.id = 'transparentBrushControlPanel'; // Añadimos un ID para identificarlo wrapper.style.position = 'fixed'; wrapper.style.top = '30px'; wrapper.style.right = '30px'; wrapper.style.zIndex = '9999'; wrapper.style.background = '#222c'; wrapper.style.padding = '13px 20px 10px 20px'; wrapper.style.borderRadius = '10px'; wrapper.style.fontFamily = 'sans-serif'; wrapper.style.color = '#fff'; wrapper.style.userSelect = 'none'; wrapper.style.boxShadow = '0 1px 6px #0008'; wrapper.style.cursor = 'grab'; // Indica que se puede arrastrar const title = document.createElement('h3'); title.textContent = 'Pincel Transparente'; title.style.margin = '0 0 10px 0'; title.style.textAlign = 'center'; title.style.fontSize = '1.1em'; title.style.color = '#ccc'; const toggleBtn = document.createElement('button'); toggleBtn.textContent = 'Pincel: OFF'; toggleBtn.style.margin = '0 0 8px 0'; toggleBtn.style.width = '100%'; toggleBtn.style.padding = '7px 0'; toggleBtn.style.background = '#492'; toggleBtn.style.border = 'none'; toggleBtn.style.borderRadius = '7px'; toggleBtn.style.color = '#fff'; toggleBtn.style.fontWeight = 'bold'; toggleBtn.style.cursor = 'pointer'; const label = document.createElement('label'); label.textContent = 'Opacidad:'; label.style.marginRight = '8px'; const slider = document.createElement('input'); slider.type = 'range'; slider.min = '0.05'; slider.max = '1'; slider.step = '0.01'; slider.value = '0.3'; slider.style.width = '70px'; slider.style.verticalAlign = 'middle'; // Alinea con el texto const percent = document.createElement('span'); percent.textContent = '30%'; percent.style.display = 'inline-block'; percent.style.minWidth = '35px'; // Evita que se mueva al cambiar el valor percent.style.textAlign = 'right'; wrapper.appendChild(title); wrapper.appendChild(toggleBtn); wrapper.appendChild(document.createElement('br')); wrapper.appendChild(label); wrapper.appendChild(slider); wrapper.appendChild(percent); document.body.appendChild(wrapper); console.log("[Drawaria Transparency Script] Panel de control creado."); return {wrapper, toggleBtn, slider, percent}; } // --- Funcionalidad de Arrastrar el Panel --- function makeDraggable(element) { let isDragging = false; let offsetX, offsetY; element.addEventListener('mousedown', (e) => { // Solo arrastra si el clic no es en un botón o slider if (e.target === element || e.target.tagName === 'H3') { isDragging = true; offsetX = e.clientX - element.getBoundingClientRect().left; offsetY = e.clientY - element.getBoundingClientRect().top; element.style.cursor = 'grabbing'; e.preventDefault(); // Evita la selección de texto console.log("[Drawaria Transparency Script] Empezando a arrastrar."); } }); document.addEventListener('mousemove', (e) => { if (!isDragging) return; const newX = e.clientX - offsetX; const newY = e.clientY - offsetY; element.style.left = `${newX}px`; element.style.top = `${newY}px`; element.style.right = 'auto'; // Desactiva right para que left tome control element.style.bottom = 'auto'; // Desactiva bottom // Limitar el movimiento para que no se salga de la ventana const panelRect = element.getBoundingClientRect(); if (panelRect.left < 0) element.style.left = '0px'; if (panelRect.top < 0) element.style.top = '0px'; if (panelRect.right > window.innerWidth) element.style.left = `${window.innerWidth - panelRect.width}px`; if (panelRect.bottom > window.innerHeight) element.style.top = `${window.innerHeight - panelRect.height}px`; }); document.addEventListener('mouseup', () => { if (isDragging) { isDragging = false; element.style.cursor = 'grab'; console.log("[Drawaria Transparency Script] Terminando de arrastrar."); } }); } // --- MAIN --- let transparentMode = false; let customAlpha = 0.3; // Valor inicial let ctx; // UI const {wrapper, toggleBtn, slider, percent} = createControlPanel(); makeDraggable(wrapper); // Hacer el panel arrastrable toggleBtn.addEventListener('click', function() { transparentMode = !transparentMode; toggleBtn.textContent = transparentMode ? 'Pincel: ON' : 'Pincel: OFF'; toggleBtn.style.background = transparentMode ? '#2a5' : '#492'; console.log(`[Drawaria Transparency Script] Pincel transparente: ${transparentMode ? 'ON' : 'OFF'}`); }); slider.oninput = function() { customAlpha = parseFloat(slider.value); percent.textContent = Math.round(customAlpha*100) + "%"; console.log(`[Drawaria Transparency Script] Opacidad ajustada a: ${customAlpha}`); }; // Espía el contexto para manipular la opacidad function hookBrush() { const canvas = document.querySelector('canvas'); if (!canvas) { console.log("[Drawaria Transparency Script] No se encontró el canvas. Reintentando..."); return false; } if (!canvas.getContext) { console.log("[Drawaria Transparency Script] El canvas no soporta getContext. Reintentando..."); return false; } ctx = canvas.getContext('2d'); if (!ctx) { console.log("[Drawaria Transparency Script] No se pudo obtener el contexto 2D. Reintentando..."); return false; } if (ctx._pincelTransparenteHooked) { console.log("[Drawaria Transparency Script] Contexto ya enganchado."); return true; } // Guardamos las referencias originales a los métodos const origStroke = ctx.stroke; const origFill = ctx.fill; // Sobrescribimos stroke ctx.stroke = function() { let prevAlpha = ctx.globalAlpha; if (transparentMode) { ctx.globalAlpha = customAlpha; } origStroke.apply(this, arguments); // Usamos 'this' para asegurar el contexto correcto ctx.globalAlpha = prevAlpha; }; // Sobrescribimos fill ctx.fill = function() { let prevAlpha = ctx.globalAlpha; if (transparentMode) { ctx.globalAlpha = customAlpha; } origFill.apply(this, arguments); // Usamos 'this' para asegurar el contexto correcto ctx.globalAlpha = prevAlpha; }; ctx._pincelTransparenteHooked = true; // Marca para evitar doble enganche console.log("[Drawaria Transparency Script] Canvas context enganchado exitosamente!"); return true; } // Prueba hook cada segundo hasta éxito let tryTimes = 0; const maxRetries = 60; // Intentar durante 60 segundos function tryHook() { if (!hookBrush()) { tryTimes++; if (tryTimes < maxRetries) { setTimeout(tryHook, 1000); } else { console.error("[Drawaria Transparency Script] No se pudo enganchar el canvas después de varios intentos. Asegúrate de estar en Drawaria.online."); } } } // Esperar a que el DOM esté completamente cargado antes de intentar if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', tryHook); } else { tryHook(); // Si ya está cargado, ejecutar inmediatamente } })();