Adds a customizable crosshair to deadshot.io with a stylish menu for color, opacity, and shape customization. Includes custom crosshair upload and size adjustment.
// ==UserScript== // @name Deadshot.io Ventionware V2.6 // @namespace http://tampermonkey.net/ // @version 2.6 // @description Adds a customizable crosshair to deadshot.io with a stylish menu for color, opacity, and shape customization. Includes custom crosshair upload and size adjustment. // @author TheModDownloader // @icon https://deadshot.io/favicon.png // @license GNU GPLv3 // @match *://deadshot.io/* // @grant GM_xmlhttpRequest // ==/UserScript== (function() { 'use strict'; // Current script version const currentVersion = '2.6'; // URL to check for the latest version const versionCheckURL = 'https://file.garden/ZgfK0UDRARPwyXVE/versionVentionWare.txt'; // URL to redirect users if the script is outdated const updateURL = 'https://greasyfork.org/en/scripts/524040-deadshot-io-ventionware-v2-6'; // Replace with your actual URL // Create a container for all custom elements const customContainer = document.createElement('div'); customContainer.style.position = 'fixed'; customContainer.style.top = '0'; customContainer.style.left = '0'; customContainer.style.width = '100%'; customContainer.style.height = '100%'; customContainer.style.pointerEvents = 'none'; // Allow clicks to pass through customContainer.style.zIndex = '2147483647'; // Maximum z-index value document.body.appendChild(customContainer); // Create the crosshair element const crosshair = document.createElement('div'); crosshair.style.position = 'absolute'; crosshair.style.top = '50%'; crosshair.style.left = '50%'; crosshair.style.transform = 'translate(-50%, -50%)'; crosshair.style.width = '20px'; crosshair.style.height = '20px'; crosshair.style.border = '2px solid red'; crosshair.style.borderRadius = '50%'; crosshair.style.pointerEvents = 'none'; customContainer.appendChild(crosshair); // Create a container for the buttons and title const buttonContainer = document.createElement('div'); buttonContainer.style.position = 'fixed'; buttonContainer.style.bottom = '20px'; buttonContainer.style.right = '-200px'; // Start off-screen to the right buttonContainer.style.display = 'flex'; buttonContainer.style.flexDirection = 'column'; buttonContainer.style.alignItems = 'flex-end'; buttonContainer.style.gap = '10px'; buttonContainer.style.zIndex = '100000'; buttonContainer.style.transition = 'right 0.5s ease-in-out'; // Slide-in transition customContainer.appendChild(buttonContainer); // Add the title with glow effect const title = document.createElement('div'); title.textContent = 'VentionWare V2 Version 2.1'; title.style.color = 'white'; title.style.fontFamily = 'Arial, sans-serif'; title.style.fontSize = '14px'; title.style.fontWeight = 'bold'; title.style.backgroundColor = 'rgba(0, 0, 0, 0.8)'; title.style.padding = '8px 12px'; title.style.borderRadius = '5px'; title.style.boxShadow = '0 2px 4px rgba(0, 0, 0, 0.3)'; title.style.textShadow = '0 0 10px #00ff00, 0 0 20px #00ff00'; // Glow effect buttonContainer.appendChild(title); // Function to create a button with hover label function createButton(icon, color, labelText) { const button = document.createElement('button'); button.innerHTML = icon; button.style.backgroundColor = color; button.style.color = 'white'; button.style.border = 'none'; button.style.borderRadius = '50%'; button.style.width = '50px'; button.style.height = '50px'; button.style.fontSize = '24px'; button.style.cursor = 'pointer'; button.style.boxShadow = '0 4px 8px rgba(0, 0, 0, 0.2)'; button.style.transition = 'background-color 0.3s, transform 0.3s'; button.style.pointerEvents = 'auto'; // Allow clicks on the button // Create hover label const label = document.createElement('div'); label.textContent = labelText; label.style.position = 'absolute'; label.style.right = '60px'; // Position to the left of the button label.style.backgroundColor = 'rgba(0, 0, 0, 0.8)'; label.style.color = 'white'; label.style.padding = '5px 10px'; label.style.borderRadius = '5px'; label.style.fontSize = '12px'; label.style.opacity = '0'; label.style.transition = 'opacity 0.3s'; label.style.pointerEvents = 'none'; // Prevent clicks on the label // Add hover effects button.addEventListener('mouseover', () => { button.style.transform = 'scale(1.1)'; label.style.opacity = '1'; }); button.addEventListener('mouseout', () => { button.style.transform = 'scale(1)'; label.style.opacity = '0'; }); // Wrap button and label in a container const container = document.createElement('div'); container.style.position = 'relative'; container.style.display = 'flex'; container.style.alignItems = 'center'; container.appendChild(button); container.appendChild(label); return { button, container }; } // Create the menu button const { button: menuButton, container: menuButtonContainer } = createButton('🎯', '#4CAF50', 'Open Menu'); buttonContainer.appendChild(menuButtonContainer); // Create the toggle crosshair button const { button: toggleButton, container: toggleButtonContainer } = createButton('👁️', '#2196F3', 'Toggle Crosshair'); buttonContainer.appendChild(toggleButtonContainer); // Toggle crosshair visibility let isCrosshairVisible = true; toggleButton.addEventListener('click', () => { isCrosshairVisible = !isCrosshairVisible; crosshair.style.display = isCrosshairVisible ? 'block' : 'none'; }); // Create the kill script button const { button: killButton, container: killButtonContainer } = createButton('❌', '#F44336', 'Kill Script'); buttonContainer.appendChild(killButtonContainer); // Kill/uninject the script killButton.addEventListener('click', () => { document.body.removeChild(customContainer); // Remove all custom elements }); // Create the blur overlay const blurOverlay = document.createElement('div'); blurOverlay.style.position = 'fixed'; blurOverlay.style.top = '0'; blurOverlay.style.left = '0'; blurOverlay.style.width = '100%'; blurOverlay.style.height = '100%'; blurOverlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'; // Start fully transparent blurOverlay.style.backdropFilter = 'blur(0px)'; // Start with no blur blurOverlay.style.display = 'none'; blurOverlay.style.pointerEvents = 'auto'; // Allow clicks on the overlay blurOverlay.style.transition = 'backdrop-filter 0.3s ease-in-out, background-color 0.3s ease-in-out'; // Smooth transition customContainer.appendChild(blurOverlay); // Create the color picker menu const colorMenu = document.createElement('div'); colorMenu.style.position = 'fixed'; colorMenu.style.top = '50%'; colorMenu.style.left = '50%'; colorMenu.style.transform = 'translate(-50%, -50%)'; colorMenu.style.backgroundColor = 'rgba(0, 0, 0, 0)'; // Start fully transparent colorMenu.style.padding = '20px'; colorMenu.style.borderRadius = '10px'; colorMenu.style.display = 'none'; colorMenu.style.boxShadow = '0 4px 8px rgba(0, 0, 0, 0.3)'; colorMenu.style.color = 'white'; colorMenu.style.fontFamily = 'Arial, sans-serif'; colorMenu.style.pointerEvents = 'auto'; // Allow clicks on the menu colorMenu.style.transition = 'background-color 0.3s ease-in-out, opacity 0.3s ease-in-out'; // Smooth transition customContainer.appendChild(colorMenu); // Function to create a menu item with smooth text transition function createMenuItem(labelText, inputElement) { const container = document.createElement('div'); container.style.opacity = '0'; // Start fully transparent container.style.transition = 'opacity 0.3s ease-in-out'; // Smooth transition const label = document.createElement('label'); label.textContent = labelText; label.style.display = 'block'; label.style.marginBottom = '10px'; label.style.color = 'white'; label.style.fontFamily = 'Arial, sans-serif'; label.style.fontSize = '14px'; container.appendChild(label); if (inputElement) { container.appendChild(inputElement); } return container; } // Crosshair Color const colorPickerContainer = document.createElement('div'); colorPickerContainer.style.display = 'flex'; colorPickerContainer.style.alignItems = 'center'; colorPickerContainer.style.gap = '10px'; const colorPreview = document.createElement('div'); colorPreview.style.width = '30px'; colorPreview.style.height = '30px'; colorPreview.style.borderRadius = '5px'; colorPreview.style.backgroundColor = '#ff0000'; // Default color colorPreview.style.border = '2px solid white'; colorPreview.style.cursor = 'pointer'; const colorInput = document.createElement('input'); colorInput.type = 'color'; colorInput.value = '#ff0000'; // Default color is red colorInput.style.opacity = '0'; colorInput.style.position = 'absolute'; colorInput.style.pointerEvents = 'none'; colorInput.addEventListener('input', () => { crosshair.style.borderColor = colorInput.value; colorPreview.style.backgroundColor = colorInput.value; }); colorPreview.addEventListener('click', () => { colorInput.click(); // Trigger the color picker }); colorPickerContainer.appendChild(colorPreview); colorPickerContainer.appendChild(colorInput); const colorMenuItem = createMenuItem('Crosshair Color: ', colorPickerContainer); colorMenu.appendChild(colorMenuItem); // Crosshair Opacity const opacitySliderContainer = document.createElement('div'); opacitySliderContainer.style.width = '100%'; opacitySliderContainer.style.height = '20px'; opacitySliderContainer.style.position = 'relative'; opacitySliderContainer.style.backgroundColor = 'rgba(255, 255, 255, 0.1)'; opacitySliderContainer.style.borderRadius = '10px'; opacitySliderContainer.style.overflow = 'hidden'; const opacitySliderFill = document.createElement('div'); opacitySliderFill.style.position = 'absolute'; opacitySliderFill.style.top = '0'; opacitySliderFill.style.left = '0'; opacitySliderFill.style.height = '100%'; opacitySliderFill.style.width = '100%'; opacitySliderFill.style.backgroundColor = '#2196F3'; opacitySliderFill.style.borderRadius = '10px'; opacitySliderFill.style.transition = 'width 0.2s ease-in-out'; const opacitySliderThumb = document.createElement('div'); opacitySliderThumb.style.position = 'absolute'; opacitySliderThumb.style.top = '0'; opacitySliderThumb.style.left = '0'; opacitySliderThumb.style.width = '20px'; opacitySliderThumb.style.height = '20px'; opacitySliderThumb.style.backgroundColor = 'white'; opacitySliderThumb.style.borderRadius = '50%'; opacitySliderThumb.style.boxShadow = '0 2px 4px rgba(0, 0, 0, 0.3)'; opacitySliderThumb.style.cursor = 'pointer'; opacitySliderThumb.style.transition = 'left 0.2s ease-in-out'; opacitySliderContainer.appendChild(opacitySliderFill); opacitySliderContainer.appendChild(opacitySliderThumb); const opacityInput = document.createElement('input'); opacityInput.type = 'range'; opacityInput.min = '0'; opacityInput.max = '1'; opacityInput.step = '0.1'; opacityInput.value = '1'; opacityInput.style.position = 'absolute'; opacityInput.style.top = '0'; opacityInput.style.left = '0'; opacityInput.style.width = '100%'; opacityInput.style.height = '100%'; opacityInput.style.opacity = '0'; opacityInput.style.cursor = 'pointer'; opacityInput.addEventListener('input', () => { const value = parseFloat(opacityInput.value); opacitySliderFill.style.width = `${value * 100}%`; opacitySliderThumb.style.left = `${value * 100}%`; crosshair.style.opacity = value; }); opacitySliderContainer.appendChild(opacityInput); const opacityMenuItem = createMenuItem('Crosshair Opacity: ', opacitySliderContainer); colorMenu.appendChild(opacityMenuItem); // Crosshair Shape const shapeSelectContainer = document.createElement('div'); shapeSelectContainer.style.position = 'relative'; shapeSelectContainer.style.width = '100%'; const shapeSelect = document.createElement('select'); shapeSelect.style.width = '100%'; shapeSelect.style.padding = '10px'; shapeSelect.style.borderRadius = '5px'; shapeSelect.style.backgroundColor = 'rgba(255, 255, 255, 0.1)'; shapeSelect.style.color = 'white'; shapeSelect.style.border = 'none'; shapeSelect.style.cursor = 'pointer'; shapeSelect.style.appearance = 'none'; // Remove default arrow shapeSelect.style.fontFamily = 'Arial, sans-serif'; shapeSelect.style.fontSize = '14px'; const shapes = [ { value: 'circle', text: 'Circle' }, { value: 'square', text: 'Square' }, { value: 'dot', text: 'Dot' }, { value: 'triangle', text: 'Triangle' }, { value: 'rounded-square', text: 'Rounded Square' } ]; shapes.forEach(shape => { const option = document.createElement('option'); option.value = shape.value; option.textContent = shape.text; shapeSelect.appendChild(option); }); const shapeSelectArrow = document.createElement('div'); shapeSelectArrow.style.position = 'absolute'; shapeSelectArrow.style.top = '50%'; shapeSelectArrow.style.right = '10px'; shapeSelectArrow.style.transform = 'translateY(-50%)'; shapeSelectArrow.style.width = '0'; shapeSelectArrow.style.height = '0'; shapeSelectArrow.style.borderLeft = '5px solid transparent'; shapeSelectArrow.style.borderRight = '5px solid transparent'; shapeSelectArrow.style.borderTop = '5px solid white'; shapeSelectArrow.style.pointerEvents = 'none'; shapeSelectContainer.appendChild(shapeSelect); shapeSelectContainer.appendChild(shapeSelectArrow); shapeSelect.addEventListener('change', () => { const shape = shapeSelect.value; if (shape === 'circle') { crosshair.style.borderRadius = '50%'; crosshair.style.width = '20px'; crosshair.style.height = '20px'; crosshair.style.borderLeft = 'none'; crosshair.style.borderRight = 'none'; crosshair.style.borderBottom = 'none'; } else if (shape === 'square') { crosshair.style.borderRadius = '0'; crosshair.style.width = '20px'; crosshair.style.height = '20px'; crosshair.style.borderLeft = 'none'; crosshair.style.borderRight = 'none'; crosshair.style.borderBottom = 'none'; } else if (shape === 'dot') { crosshair.style.borderRadius = '50%'; crosshair.style.width = '10px'; crosshair.style.height = '10px'; crosshair.style.borderLeft = 'none'; crosshair.style.borderRight = 'none'; crosshair.style.borderBottom = 'none'; } else if (shape === 'triangle') { crosshair.style.borderRadius = '0'; crosshair.style.width = '0'; crosshair.style.height = '0'; crosshair.style.border = 'none'; crosshair.style.borderLeft = '10px solid transparent'; crosshair.style.borderRight = '10px solid transparent'; crosshair.style.borderBottom = `20px solid ${crosshair.style.borderColor}`; } else if (shape === 'rounded-square') { crosshair.style.borderRadius = '10px'; crosshair.style.width = '20px'; crosshair.style.height = '20px'; crosshair.style.borderLeft = 'none'; crosshair.style.borderRight = 'none'; crosshair.style.borderBottom = 'none'; } }); const shapeMenuItem = createMenuItem('Crosshair Shape: ', shapeSelectContainer); colorMenu.appendChild(shapeMenuItem); // Custom Crosshair Upload const customCrosshairInput = document.createElement('input'); customCrosshairInput.type = 'file'; customCrosshairInput.accept = 'image/*'; customCrosshairInput.style.display = 'none'; const customCrosshairLabel = document.createElement('label'); customCrosshairLabel.textContent = 'Upload Custom Crosshair'; customCrosshairLabel.style.display = 'block'; customCrosshairLabel.style.marginTop = '15px'; customCrosshairLabel.style.marginBottom = '10px'; customCrosshairLabel.style.color = 'white'; customCrosshairLabel.style.fontFamily = 'Arial, sans-serif'; customCrosshairLabel.style.fontSize = '14px'; customCrosshairLabel.style.cursor = 'pointer'; customCrosshairLabel.style.backgroundColor = 'rgba(255, 255, 255, 0.1)'; customCrosshairLabel.style.padding = '10px'; customCrosshairLabel.style.borderRadius = '5px'; customCrosshairLabel.style.textAlign = 'center'; customCrosshairLabel.style.transition = 'background-color 0.2s ease-in-out'; customCrosshairLabel.addEventListener('mouseover', () => { customCrosshairLabel.style.backgroundColor = 'rgba(255, 255, 255, 0.2)'; }); customCrosshairLabel.addEventListener('mouseout', () => { customCrosshairLabel.style.backgroundColor = 'rgba(255, 255, 255, 0.1)'; }); customCrosshairLabel.addEventListener('click', () => { customCrosshairInput.click(); // Trigger the file input }); customCrosshairInput.addEventListener('change', (event) => { const file = event.target.files[0]; if (file) { const reader = new FileReader(); reader.onload = (e) => { crosshair.style.backgroundImage = `url(${e.target.result})`; crosshair.style.backgroundSize = 'cover'; crosshair.style.border = 'none'; }; reader.readAsDataURL(file); } }); const customCrosshairMenuItem = createMenuItem('', customCrosshairLabel); colorMenu.appendChild(customCrosshairMenuItem); colorMenu.appendChild(customCrosshairInput); // Crosshair Size Adjustment const sizeSliderContainer = document.createElement('div'); sizeSliderContainer.style.width = '100%'; sizeSliderContainer.style.height = '20px'; sizeSliderContainer.style.position = 'relative'; sizeSliderContainer.style.backgroundColor = 'rgba(255, 255, 255, 0.1)'; sizeSliderContainer.style.borderRadius = '10px'; sizeSliderContainer.style.overflow = 'hidden'; const sizeSliderFill = document.createElement('div'); sizeSliderFill.style.position = 'absolute'; sizeSliderFill.style.top = '0'; sizeSliderFill.style.left = '0'; sizeSliderFill.style.height = '100%'; sizeSliderFill.style.width = '50%'; // Default size sizeSliderFill.style.backgroundColor = '#4CAF50'; sizeSliderFill.style.borderRadius = '10px'; sizeSliderFill.style.transition = 'width 0.2s ease-in-out'; const sizeSliderThumb = document.createElement('div'); sizeSliderThumb.style.position = 'absolute'; sizeSliderThumb.style.top = '0'; sizeSliderThumb.style.left = '50%'; sizeSliderThumb.style.width = '20px'; sizeSliderThumb.style.height = '20px'; sizeSliderThumb.style.backgroundColor = 'white'; sizeSliderThumb.style.borderRadius = '50%'; sizeSliderThumb.style.boxShadow = '0 2px 4px rgba(0, 0, 0, 0.3)'; sizeSliderThumb.style.cursor = 'pointer'; sizeSliderThumb.style.transition = 'left 0.2s ease-in-out'; sizeSliderContainer.appendChild(sizeSliderFill); sizeSliderContainer.appendChild(sizeSliderThumb); const sizeInput = document.createElement('input'); sizeInput.type = 'range'; sizeInput.min = '10'; sizeInput.max = '100'; sizeInput.value = '20'; sizeInput.style.position = 'absolute'; sizeInput.style.top = '0'; sizeInput.style.left = '0'; sizeInput.style.width = '100%'; sizeInput.style.height = '100%'; sizeInput.style.opacity = '0'; sizeInput.style.cursor = 'pointer'; sizeInput.addEventListener('input', () => { const value = parseFloat(sizeInput.value); sizeSliderFill.style.width = `${value}%`; sizeSliderThumb.style.left = `${value}%`; crosshair.style.width = `${value}px`; crosshair.style.height = `${value}px`; }); sizeSliderContainer.appendChild(sizeInput); const sizeMenuItem = createMenuItem('Crosshair Size: ', sizeSliderContainer); colorMenu.appendChild(sizeMenuItem); // Crosshair Glow const glowCheckboxContainer = document.createElement('label'); glowCheckboxContainer.style.display = 'flex'; glowCheckboxContainer.style.alignItems = 'center'; glowCheckboxContainer.style.cursor = 'pointer'; const glowCheckbox = document.createElement('div'); glowCheckbox.style.width = '20px'; glowCheckbox.style.height = '20px'; glowCheckbox.style.borderRadius = '5px'; glowCheckbox.style.backgroundColor = 'rgba(255, 255, 255, 0.1)'; glowCheckbox.style.position = 'relative'; glowCheckbox.style.transition = 'background-color 0.2s ease-in-out'; const glowCheckboxTick = document.createElement('div'); glowCheckboxTick.style.position = 'absolute'; glowCheckboxTick.style.top = '50%'; glowCheckboxTick.style.left = '50%'; glowCheckboxTick.style.transform = 'translate(-50%, -50%)'; glowCheckboxTick.style.width = '12px'; glowCheckboxTick.style.height = '12px'; glowCheckboxTick.style.backgroundColor = '#4CAF50'; glowCheckboxTick.style.borderRadius = '3px'; glowCheckboxTick.style.opacity = '0'; glowCheckboxTick.style.transition = 'opacity 0.2s ease-in-out'; glowCheckbox.appendChild(glowCheckboxTick); glowCheckboxContainer.appendChild(glowCheckbox); const glowCheckboxLabel = document.createElement('span'); glowCheckboxLabel.textContent = 'Enable Crosshair Glow'; glowCheckboxLabel.style.marginLeft = '10px'; glowCheckboxLabel.style.color = 'white'; glowCheckboxLabel.style.fontFamily = 'Arial, sans-serif'; glowCheckboxLabel.style.fontSize = '14px'; glowCheckboxContainer.appendChild(glowCheckboxLabel); glowCheckboxContainer.addEventListener('click', () => { const isChecked = glowCheckboxTick.style.opacity === '1'; glowCheckboxTick.style.opacity = isChecked ? '0' : '1'; glowCheckbox.style.backgroundColor = isChecked ? 'rgba(255, 255, 255, 0.1)' : 'rgba(255, 255, 255, 0.3)'; if (!isChecked) { crosshair.style.boxShadow = `0 0 10px ${crosshair.style.borderColor}, 0 0 20px ${crosshair.style.borderColor}`; } else { crosshair.style.boxShadow = 'none'; } }); const glowMenuItem = createMenuItem('', glowCheckboxContainer); colorMenu.appendChild(glowMenuItem); // Toggle the color menu and blur overlay visibility menuButton.addEventListener('click', () => { const isMenuVisible = colorMenu.style.display === 'none'; colorMenu.style.display = isMenuVisible ? 'block' : 'none'; blurOverlay.style.display = isMenuVisible ? 'block' : 'none'; // Smoothly transition the blur, menu background, and text opacity if (isMenuVisible) { setTimeout(() => { blurOverlay.style.backdropFilter = 'blur(5px)'; blurOverlay.style.backgroundColor = 'rgba(0, 0, 0, 0.5)'; colorMenu.style.backgroundColor = 'rgba(0, 0, 0, 0.9)'; Array.from(colorMenu.children).forEach(child => { child.style.opacity = '1'; // Fade in menu items }); }, 10); // Small delay to allow display change before transition } else { blurOverlay.style.backdropFilter = 'blur(0px)'; blurOverlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'; colorMenu.style.backgroundColor = 'rgba(0, 0, 0, 0)'; Array.from(colorMenu.children).forEach(child => { child.style.opacity = '0'; // Fade out menu items }); } }); // Close the menu when clicking outside blurOverlay.addEventListener('click', () => { colorMenu.style.display = 'none'; blurOverlay.style.display = 'none'; blurOverlay.style.backdropFilter = 'blur(0px)'; blurOverlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'; colorMenu.style.backgroundColor = 'rgba(0, 0, 0, 0)'; Array.from(colorMenu.children).forEach(child => { child.style.opacity = '0'; // Fade out menu items }); }); // Function to display a message at the top of the screen function displayMessage(message, backgroundColor = 'rgba(255, 0, 0, 0.8)') { const messageDiv = document.createElement('div'); messageDiv.textContent = message; messageDiv.style.position = 'fixed'; messageDiv.style.top = '10px'; messageDiv.style.left = '50%'; messageDiv.style.transform = 'translateX(-50%)'; messageDiv.style.backgroundColor = backgroundColor; messageDiv.style.color = 'white'; messageDiv.style.padding = '10px'; messageDiv.style.borderRadius = '5px'; messageDiv.style.zIndex = '1000000'; messageDiv.style.fontFamily = 'Arial, sans-serif'; messageDiv.style.fontSize = '14px'; messageDiv.style.boxShadow = '0 2px 4px rgba(0, 0, 0, 0.3)'; document.body.appendChild(messageDiv); } // Check for script updates try { GM_xmlhttpRequest({ method: 'GET', url: versionCheckURL, onload: function(response) { const latestVersion = response.responseText.trim(); if (latestVersion !== currentVersion) { displayMessage( `Your script is outdated (v${currentVersion}). Latest version is v${latestVersion}.`, 'rgba(255, 0, 0, 0.8)' ); const updateLink = document.createElement('a'); updateLink.textContent = 'Click here to update.'; updateLink.href = updateURL; updateLink.style.color = '#00ff00'; updateLink.style.marginLeft = '10px'; updateLink.style.textDecoration = 'underline'; document.body.appendChild(updateLink); } }, onerror: function(error) { console.error('Failed to check for updates:', error); displayMessage( 'This script requires permission to fetch data. Please enable GM_xmlhttpRequest in your userscript manager.', 'rgba(255, 0, 0, 0.8)' ); } }); } catch (error) { console.error('GM_xmlhttpRequest is not available:', error); displayMessage( 'This script requires permission to fetch data. Please enable GM_xmlhttpRequest in your userscript manager.', 'rgba(255, 0, 0, 0.8)' ); } // Slide the GUI in from the right after the page loads setTimeout(() => { buttonContainer.style.right = '20px'; // Slide into position }, 500); // Delay the slide-in slightly for a smoother effect })();