sopo

Super Pro Autohit + Strong Antiban + Advanced Aim Assist

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

Для установки этого скрипта вам необходимо установить расширение, такое как Tampermonkey.

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         sopo
// @namespace    sopo
// @version      4.1
// @description  Super Pro Autohit + Strong Antiban + Advanced Aim Assist
// @author       sopo
// @match        *://*.evoworld.io/*
// @grant        none
// @run-at       document-end
// ==/UserScript==

(function () {
    'use strict';

    let enabled = false;
    let lastHitTime = 0;
    let isResting = false;
    let clickStreak = 0;
    let sessionStart = Date.now();

    // === SUPER ANTIBAN ===
    let lastHumanAction = Date.now();
    let suspiciousLevel = 0;
    let longBreakChance = 0;

    const statusDiv = document.createElement('div');
    statusDiv.style.position = 'fixed';
    statusDiv.style.bottom = '75px';
    statusDiv.style.left = '50%';
    statusDiv.style.transform = 'translateX(-50%)';
    statusDiv.style.background = 'rgba(0, 0, 0, 0.96)';
    statusDiv.style.padding = '12px 28px';
    statusDiv.style.borderRadius = '12px';
    statusDiv.style.fontFamily = 'Arial, sans-serif';
    statusDiv.style.fontSize = '18px';
    statusDiv.style.fontWeight = 'bold';
    statusDiv.style.zIndex = '999999';
    statusDiv.style.pointerEvents = 'none';
    statusDiv.style.border = '3px solid #00ff88';
    statusDiv.style.boxShadow = '0 0 25px rgba(0, 255, 136, 0.8)';
    document.body.appendChild(statusDiv);

    function updateStatus() {
        const playTime = Math.floor((Date.now() - sessionStart) / 60000);
        statusDiv.innerHTML = enabled 
            ? `🔥 sopo <span style='color:#00ff88'>ON</span><br><span style='font-size:14px'>Thời gian: ${playTime} phút</span>` 
            : `⛔ sopo <span style='color:#ff4444'>OFF</span>`;
        statusDiv.style.borderColor = enabled ? '#00ff88' : '#ff4444';
    }

    document.addEventListener('keydown', (e) => {
        if (e.key.toLowerCase() === 'r') {
            enabled = !enabled;
            updateStatus();
        }
    });

    function getRandomInt(min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }

    function getClickDelay() {
        if (isResting) return getRandomInt(950, 2450);

        const playTime = (Date.now() - sessionStart) / 60000;
        let cps = getRandomInt(19, 24);

        if (playTime > 25) cps = getRandomInt(17, 22);
        if (playTime > 60) cps = getRandomInt(16, 20);

        let delay = 1000 / cps;
        delay += getRandomInt(-30, 65);

        if (Math.random() < 0.12 + longBreakChance) {
            delay += getRandomInt(2200, 5200);
            longBreakChance = 0;
        } else if (Math.random() < 0.28) {
            delay += getRandomInt(320, 780);
        }

        return Math.max(40, Math.floor(delay));
    }

    function performProAutohit() {
        const canvas = document.querySelector('canvas');
        if (!canvas) return;

        clickStreak++;
        const rect = canvas.getBoundingClientRect();

        const mouseX = window.mouseX || (rect.left + rect.width * 0.5);
        const mouseY = window.mouseY || (rect.top + rect.height * 0.5);

        let x = mouseX + getRandomInt(-48, 48);
        let y = mouseY + getRandomInt(-48, 48);

        if (Math.random() < 0.35) {
            x += getRandomInt(-25, 25);
            y += getRandomInt(-22, 22);
        }

        const holdTime = getRandomInt(13, 31);

        const eventsDown = [
            new PointerEvent('pointerdown', {bubbles: true, clientX: x, clientY: y, button: 0}),
            new MouseEvent('mousedown', {bubbles: true, clientX: x, clientY: y, button: 0})
        ];
        eventsDown.forEach(ev => canvas.dispatchEvent(ev));

        setTimeout(() => {
            const eventsUp = [
                new PointerEvent('pointerup', {bubbles: true, clientX: x, clientY: y, button: 0}),
                new MouseEvent('mouseup', {bubbles: true, clientX: x, clientY: y, button: 0}),
                new MouseEvent('click', {bubbles: true, clientX: x, clientY: y, button: 0})
            ];
            eventsUp.forEach(ev => canvas.dispatchEvent(ev));
        }, holdTime);

        if (clickStreak > getRandomInt(8, 14)) {
            isResting = true;
            suspiciousLevel++;
            setTimeout(() => {
                isResting = false;
                clickStreak = 0;
            }, getRandomInt(850, 2350));
        }

        lastHumanAction = Date.now();
    }

    document.addEventListener('mousemove', (e) => {
        window.mouseX = e.clientX;
        window.mouseY = e.clientY;
        lastHumanAction = Date.now();
        longBreakChance = Math.max(0, longBreakChance - 0.08);
    });

    function proLoop() {
        if (!enabled) {
            requestAnimationFrame(proLoop);
            return;
        }

        if (Date.now() - lastHumanAction > 28000) {
            isResting = true;
            setTimeout(() => { isResting = false; }, getRandomInt(4500, 11000));
        }

        if (Date.now() - lastHitTime > getClickDelay()) {
            performProAutohit();
            lastHitTime = Date.now();
        }

        requestAnimationFrame(proLoop);
    }

    updateStatus();
    requestAnimationFrame(proLoop);

    console.log('%c✅ sopo v4.1 LOADED! Press R to toggle', 
        'color: #00ff88; font-weight: bold; font-size: 15px');
})();