Starblast Gem Drop

Draggable button, hold to drop gems automatically

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name         Starblast Gem Drop
// @namespace    starblast-ios
// @version      2.0
// @description  Draggable button, hold to drop gems automatically
// @match        https://starblast.io/*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    const btn = document.createElement("div");
    btn.innerText = "💎 DROP";
    btn.style.position = "fixed";
    btn.style.left = "20px";
    btn.style.top = "50%";
    btn.style.transform = "translateY(-50%)";
    btn.style.background = "linear-gradient(145deg, #ffcc33, #ff9900)";
    btn.style.color = "white";
    btn.style.padding = "15px 20px";
    btn.style.borderRadius = "15px";
    btn.style.fontSize = "16px";
    btn.style.fontWeight = "bold";
    btn.style.zIndex = "9999";
    btn.style.userSelect = "none";
    btn.style.touchAction = "none";
    btn.style.boxShadow = "0 4px 15px rgba(0,0,0,0.4)";
    btn.style.textAlign = "center";
    btn.style.cursor = "grab";

    document.body.appendChild(btn);

    let dropping = false;

    function dropGem() {
        const down = new KeyboardEvent("keydown", {
            key: "v",
            code: "KeyV",
            keyCode: 86,
            which: 86,
            bubbles: true
        });
        const up = new KeyboardEvent("keyup", {
            key: "v",
            code: "KeyV",
            keyCode: 86,
            which: 86,
            bubbles: true
        });
        document.dispatchEvent(down);
        setTimeout(() => document.dispatchEvent(up), 750);
    }

    // Hold to keep dropping
    let dropInterval;
    btn.addEventListener("touchstart", (e) => {
        e.preventDefault();
        dropping = true;
        dropGem();
        dropInterval = setInterval(() => {
            if(dropping) dropGem();
        }, 800);
    });

    btn.addEventListener("touchend", () => {
        dropping = false;
        clearInterval(dropInterval);
    });

    // Draggable
    let offsetX = 0, offsetY = 0, isDragging = false;

    btn.addEventListener("touchmove", (e) => {
        e.preventDefault();
        const touch = e.touches[0];
        if(isDragging){
            btn.style.left = (touch.clientX - offsetX) + "px";
            btn.style.top = (touch.clientY - offsetY) + "px";
        }
    });

    btn.addEventListener("touchstart", (e) => {
        if(e.target === btn && !dropping){
            isDragging = true;
            const touch = e.touches[0];
            offsetX = touch.clientX - btn.getBoundingClientRect().left;
            offsetY = touch.clientY - btn.getBoundingClientRect().top;
        }
    });

    btn.addEventListener("touchend", () => {
        isDragging = false;
    });

})();