Speed Hack with Timer (Exclude Multiple Sites)

Speed hack tự động bật, không chạy ở hanaminikata.com và layma.net

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Speed Hack with Timer (Exclude Multiple Sites)
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Speed hack tự động bật, không chạy ở hanaminikata.com và layma.net
// @author       Your Name
// @match        *://*/*
// @exclude      https://hanaminikata.com/*
// @exclude      http://hanaminikata.com/*
// @exclude      https://layma.net/*
// @exclude      http://layma.net/*
// @grant        none
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';

    // Danh sách các web bị chặn
    var blockedSites = [
        'hanaminikata.com',
        'layma.net'
    ];

    // Kiểm tra nếu đang ở web bị chặn thì thoát
    var currentHost = window.location.hostname;
    var isBlocked = blockedSites.some(function(site) {
        return currentHost.includes(site);
    });

    if (isBlocked) {
        console.log("⛔ Speed hack bị vô hiệu hóa trên:", currentHost);
        console.log("📋 Danh sách chặn:", blockedSites.join(', '));
        return;
    }

    console.log("✅ Speed hack được phép trên:", currentHost);

    // Hàm khởi tạo speed hack
    function initSpeedHack() {
        // Kiểm tra nếu đã bật speed hack
        if (window.speedHackEnabled) {
            return;
        }

        console.log("🚀 Đang khởi tạo Speed Hack...");
        console.log("📍 Website hiện tại:", currentHost);

        // Bật speed hack tự động
        window.speedHackEnabled = true;
        var speed = 50; // Tốc độ nhân lên
        
        // Backup các hàm gốc
        window.origRAFBak = window.requestAnimationFrame;
        window.origSTBak = window.setTimeout;
        window.origSIBak = window.setInterval;
        window.origDateBak = Date.now;
        window.origPerfBak = performance.now;
        
        var elapsed = 0;
        var realSeconds = 0;
        
        // Override requestAnimationFrame
        window.requestAnimationFrame = function(cb) {
            return window.origRAFBak(function(t) {
                for (var i = 0; i < speed; i++) {
                    try {
                        cb(t);
                    } catch(e) {
                        // Bỏ qua lỗi
                    }
                }
            });
        };
        
        // Override setTimeout
        window.setTimeout = function(fn, delay) {
            var args = Array.prototype.slice.call(arguments, 2);
            var newDelay = Math.max(1, delay / speed);
            return window.origSTBak.apply(window, [function() {
                try {
                    fn.apply(null, args);
                } catch(e) {
                    // Bỏ qua lỗi
                }
            }, newDelay]);
        };
        
        // Override setInterval
        window.setInterval = function(fn, interval) {
            var args = Array.prototype.slice.call(arguments, 2);
            var newInterval = Math.max(1, interval / speed);
            return window.origSIBak.apply(window, [function() {
                try {
                    fn.apply(null, args);
                } catch(e) {
                    // Bỏ qua lỗi
                }
            }, newInterval]);
        };
        
        // Override Date.now
        Date.now = function() {
            return window.origDateBak() + elapsed;
        };
        
        // Override performance.now
        performance.now = function() {
            return window.origPerfBak() + elapsed;
        };
        
        // Cập nhật thời gian ảo
        window.speedInterval = window.origSIBak(function() {
            elapsed += 16 * (speed - 1);
        }, 16);
        
        // Tạo timer hiển thị
        createTimer();
        
        // Cập nhật timer mỗi giây
        window.timerInterval = window.origSIBak(function() {
            realSeconds++;
            var mins = Math.floor(realSeconds / 60);
            var secs = realSeconds % 60;
            var str = (mins < 10 ? "0" : "") + mins + ":" + (secs < 10 ? "0" : "") + secs;
            if (window.timerDisplay) {
                window.timerDisplay.textContent = "⚡ " + str + " | " + speed + "x";
            }
        }, 1000);
        
        // Thêm shortcut để tắt (Ctrl+Shift+S)
        document.addEventListener('keydown', function(e) {
            if (e.ctrlKey && e.shiftKey && e.key === 'S') {
                e.preventDefault();
                toggleSpeedHack();
            }
        });
        
        console.log("✅ Speed hack " + speed + "x đã được bật!");
        console.log("🕹️ Nhấn Ctrl+Shift+S để tắt/bật");
        
        // Hiển thị thông báo
        showNotification("⚡ Speed " + speed + "x đã bật!");
    }
    
    // Hàm tạo timer
    function createTimer() {
        // Xóa timer cũ nếu có
        if (window.timerDisplay && window.timerDisplay.parentNode) {
            window.timerDisplay.parentNode.removeChild(window.timerDisplay);
        }
        
        window.timerDisplay = document.createElement("div");
        window.timerDisplay.id = "speed-hack-timer";
        window.timerDisplay.style.cssText = `
            position: fixed;
            top: 10px;
            right: 10px;
            background: rgba(0, 0, 0, 0.9);
            color: #00ff00;
            font-family: 'Courier New', monospace;
            font-size: 20px;
            font-weight: bold;
            padding: 10px 18px;
            border-radius: 8px;
            z-index: 999999;
            border: 2px solid #00ff00;
            box-shadow: 0 0 20px rgba(0, 255, 0, 0.3);
            text-shadow: 0 0 10px rgba(0, 255, 0, 0.5);
            user-select: none;
            pointer-events: none;
            backdrop-filter: blur(5px);
        `;
        window.timerDisplay.textContent = "⚡ 00:00 | 50x";
        
        // Đợi body load
        var checkBody = setInterval(function() {
            if (document.body) {
                clearInterval(checkBody);
                document.body.appendChild(window.timerDisplay);
            }
        }, 100);
    }
    
    // Hàm toggle speed hack
    function toggleSpeedHack() {
        if (window.speedHackEnabled) {
            // Tắt speed hack
            window.speedHackEnabled = false;
            window.requestAnimationFrame = window.origRAFBak;
            window.setTimeout = window.origSTBak;
            window.setInterval = window.origSIBak;
            Date.now = window.origDateBak;
            performance.now = window.origPerfBak;
            
            if (window.speedInterval) {
                clearInterval(window.speedInterval);
            }
            if (window.timerInterval) {
                clearInterval(window.timerInterval);
            }
            if (window.timerDisplay && window.timerDisplay.parentNode) {
                window.timerDisplay.parentNode.removeChild(window.timerDisplay);
            }
            
            console.log("⏹️ Speed hack đã tắt");
            showNotification("⏹️ Speed hack đã tắt!");
        } else {
            // Bật lại speed hack
            initSpeedHack();
        }
    }
    
    // Hàm hiển thị thông báo
    function showNotification(message) {
        var notification = document.createElement("div");
        notification.style.cssText = `
            position: fixed;
            top: 80px;
            right: 20px;
            background: rgba(0, 0, 0, 0.95);
            color: #00ff00;
            font-family: Arial, sans-serif;
            font-size: 16px;
            padding: 15px 25px;
            border-radius: 8px;
            z-index: 999999;
            border-left: 4px solid #00ff00;
            box-shadow: 0 4px 15px rgba(0, 0, 0, 0.8);
            animation: slideIn 0.5s ease;
            user-select: none;
            pointer-events: none;
            backdrop-filter: blur(5px);
        `;
        notification.textContent = message;
        
        // Thêm animation keyframes
        if (!document.getElementById('speed-hack-styles')) {
            var style = document.createElement('style');
            style.id = 'speed-hack-styles';
            style.textContent = `
                @keyframes slideIn {
                    from {
                        transform: translateX(100px);
                        opacity: 0;
                    }
                    to {
                        transform: translateX(0);
                        opacity: 1;
                    }
                }
            `;
            document.head.appendChild(style);
        }
        
        document.body.appendChild(notification);
        
        // Tự động xóa sau 3 giây
        setTimeout(function() {
            if (notification.parentNode) {
                notification.style.opacity = '0';
                notification.style.transition = 'opacity 0.5s';
                setTimeout(function() {
                    if (notification.parentNode) {
                        notification.parentNode.removeChild(notification);
                    }
                }, 500);
            }
        }, 3000);
    }
    
    // Chạy khi DOM ready
    function startWhenReady() {
        if (document.body) {
            initSpeedHack();
        } else {
            document.addEventListener('DOMContentLoaded', initSpeedHack);
        }
    }
    
    // Thử khởi tạo ngay lập tức
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', startWhenReady);
    } else {
        startWhenReady();
    }
    
    // Thử lại nếu chưa chạy được
    setTimeout(function() {
        if (!window.speedHackEnabled) {
            console.log("🔄 Thử khởi tạo lại speed hack...");
            initSpeedHack();
        }
    }, 2000);
    
})();