SKLauncher Bypass

Bypasses the requirement to view ads to download and reveals the actual files dynamically per update.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name         SKLauncher Bypass
// @namespace    http://tampermonkey.net/
// @version      2.3
// @description  Bypasses the requirement to view ads to download and reveals the actual files dynamically per update.
// @author       InternetNinjo
// @match        https://skmedix.pl/*
// @grant        GM_xmlhttpRequest
// @connect      skmedix.pl
// @connect      api.quotable.io
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // 1. Fetch a random quote from the Web
    const fetchWebQuote = () => {
        return new Promise((resolve) => {
            GM_xmlhttpRequest({
                method: "GET",
                url: "https://api.quotable.io/random?maxLength=85",
                onload: (res) => {
                    try {
                        const data = JSON.parse(res.responseText);
                        resolve(`${data.content} — ${data.author}`);
                    } catch(e) {
                        resolve("Don't dig straight down!");
                    }
                },
                onerror: () => resolve("Minecraft is better with friends.")
            });
        });
    };

    const getPageVersion = () => {
        const paragraphs = document.querySelectorAll('p.fw-light');
        for (let p of paragraphs) {
            if (p.textContent.includes('Version')) {
                const match = p.textContent.match(/\d+\.\d+\.\d+/);
                return match ? match[0] : null;
            }
        }
        return "3.2.18";
    };

    const checkUrl = (url) => {
        return new Promise((resolve) => {
            GM_xmlhttpRequest({ method: "HEAD", url: url, onload: (res) => resolve(res.status === 200), onerror: () => resolve(false) });
        });
    };

    const init = async () => {
        const version = getPageVersion();
        const quote = await fetchWebQuote();

        const box = document.createElement('div');
        box.style = `
            position: fixed; bottom: 30px; right: 30px; z-index: 10000;
            background: rgba(24, 24, 27, 0.98); backdrop-filter: blur(12px);
            border: 1px solid #845ec2; border-radius: 16px; padding: 24px;
            color: #efe9f3; font-family: 'Inter', sans-serif;
            box-shadow: 0 20px 40px rgba(0,0,0,0.8); min-width: 320px;
        `;
        box.innerHTML = `<div style="font-size: 14px; color: #ababad;">📡 Verifying links...</div>`;
        document.body.appendChild(box);

        const jarUrl = `https://skmedix.pl/binaries/skl/${version}/SKlauncher-${version}.jar`;
        const exeUrl = `https://skmedix.pl/binaries/skl/${version}/win-x64/SKlauncher-${version}_Setup.exe`;
        const jarExists = await checkUrl(jarUrl);
        const exeExists = await checkUrl(exeUrl);

        box.innerHTML = `
            <div style="margin-bottom: 22px; text-align: center; font-style: italic; color: #ffeb3b; font-size: 12px; line-height: 1.5; text-shadow: 1px 1px 2px #000; padding: 0 5px;">
                "${quote}"
            </div>

            <div style="display: flex; align-items: center; margin-bottom: 20px;">
                <div style="background: #845ec2; width: 8px; height: 8px; border-radius: 50%; margin-right: 10px; box-shadow: 0 0 10px #845ec2;"></div>
                <span style="font-weight: 800; font-size: 18px; letter-spacing: -0.5px;">SKlauncher Toolbox</span>
            </div>

            <div style="display: grid; gap: 10px;">
                <div style="font-size: 11px; color: #845ec2; font-weight: bold; text-transform: uppercase; margin-bottom: 4px; letter-spacing: 0.5px;">Verified Downloads (v${version})</div>
                ${exeExists ? `
                    <a href="${exeUrl}" style="background: linear-gradient(135deg, #1a75ff, #845ec2); color: white; text-align: center; padding: 12px; border-radius: 10px; text-decoration: none; font-weight: 600; font-size: 14px; transition: transform 0.1s ease;">
                        Download Installer (.exe)
                    </a>` : ''}
                ${jarExists ? `
                    <a href="${jarUrl}" style="background: rgba(132, 94, 194, 0.15); border: 1px solid #845ec2; color: #efe9f3; text-align: center; padding: 12px; border-radius: 10px; text-decoration: none; font-weight: 600; font-size: 14px;">
                        Download Universal (.jar)
                    </a>` : ''}
            </div>

            ${(!jarExists && !exeExists) ? `<div style="color: #be3a51; font-size: 13px; margin-top: 10px;">Files not found on binary server.</div>` : ''}
        `;
    };

    init();
})();