PurposeGames Hack

Answers all games on PurposeGames in record Time (with adjustable slider)

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==UserScript==
// @name         PurposeGames Hack
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Answers all games on PurposeGames in record Time (with adjustable slider)
// @author       longkidkoolstar
// @match        https://www.purposegames.com/*
// @icon         https://th.bing.com/th/id/R.201395eef044c88cd80bb137b6638932?rik=4SVeP8xG%2bGt2Tg&pid=ImgRaw&r=0
// @license      none
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    let previousValue = document.querySelector('#question-box').getAttribute('data-text');

    // Function to simulate click
    function simulateClick(element) {
        const clickEvent = new MouseEvent("click", {
            bubbles: true,
            cancelable: true,
            view: window
        });
        element.dispatchEvent(clickEvent);
    }

    // Function to display the unit circle, the number to click, and the element
    function displayInfo() {
        const dots = document.querySelectorAll('.dot');
        dots.forEach(dot => {
            console.log(`Dot at (${dot.getAttribute('data-x')}, ${dot.getAttribute('data-y')}) represents ${dot.getAttribute('data-text')}`, dot);
        });
        
        const targetAngle = document.querySelector('#question-box').getAttribute('data-text');
        console.log(`Number to click: ${targetAngle}`);
        
        if (targetAngle !== previousValue) {
            solveUnitCircle();
            previousValue = targetAngle;
        }
    }

    // Main function to find and click the correct dot
    function solveUnitCircle() {
        const targetAngle = document.querySelector('#question-box').getAttribute('data-text');
        const dots = document.querySelectorAll('.dot');
        dots.forEach(dot => {
            if(dot.getAttribute('data-text') === targetAngle) {
                simulateClick(dot);
            }
        });
    }

    // Create GUI slider and popup
    function createSliderAndPopup() {
        const slider = document.createElement('input');
        slider.type = 'range';
        slider.min = '1';
        slider.max = '100';
        slider.value = localStorage.getItem('sliderValue') || '10'; // Retrieve saved value or use default
        slider.style.position = 'fixed';
        slider.style.left = '0';
        slider.style.bottom = '0';
        document.body.appendChild(slider);

        // Popup for displaying the current slider value
        var popup = document.createElement('div');
        popup.classList.add('slider-popup');
        popup.style.position = 'fixed';
        popup.style.backgroundColor = 'rgba(0, 0, 0, 0.8)';
        popup.style.color = 'white';
        popup.style.padding = '5px 10px';
        popup.style.borderRadius = '5px';
        popup.style.zIndex = '9999';
        popup.style.display = 'none'; // Initially hidden
        document.body.appendChild(popup);

        let intervalId;
        slider.oninput = function() {
            clearInterval(intervalId);
            const intervalTime = 1000 / this.value; // Calculate interval time based on slider value
            intervalId = setInterval(solveUnitCircle, intervalTime);
            localStorage.setItem('sliderValue', this.value); // Save slider value to localStorage

            // Show the popup with the current slider value
            popup.innerText = 'Speed: ' + this.value;
            popup.style.display = 'block';

            // Calculate slider position and adjust popup position
            var sliderRect = slider.getBoundingClientRect();
            var popupX = sliderRect.left + ((slider.value - slider.min) / (slider.max - slider.min)) * sliderRect.width - popup.clientWidth / 2;
            var popupY = sliderRect.top - popup.clientHeight - 10;

            popup.style.left = popupX + 'px';
            popup.style.top = popupY + 'px';

            // Start a timer to hide the popup after a certain duration (e.g., 2 seconds)
            setTimeout(function() {
                popup.style.display = 'none';
            }, 2000);
        };

        // Show popup when mouse hovers over the slider
        slider.onmouseover = function() {
            popup.style.display = 'block';
        };

        // Hide popup when mouse leaves the slider
        slider.onmouseout = function() {
            popup.style.display = 'none';
        };
    }
    createSliderAndPopup();

    //setInterval(displayInfo, 1000);
})();