Auto Minting Coin (Pc + Mobile)

Minting automatically at the academy at random intervals

// ==UserScript==
// @name         Auto Minting Coin (Pc + Mobile)
// @version      1.6
// @description  Minting automatically at the academy at random intervals
// @include      https://*/game.php*screen=snob*
// @namespace    https://greasyfork.org/users/1388863
// ==/UserScript==

(function() {
    'use strict';

    function getVillageId() {
        const match = window.location.href.match(/village=(\d+)/);
        return match ? match[1] : null;
    }

    const villageId = getVillageId();
    if (!villageId) {
        console.error('Village ID not found in URL.');
        return; // Stop execution if no villageId is found
    }

    let countdownInterval;
    let isMinting = JSON.parse(localStorage.getItem(`isMinting${villageId}`)) ?? false;
    let countdownTime;
    let minInterval = parseInt(localStorage.getItem('minInterval')) || 300; // Default 5 minutes
    let maxInterval = parseInt(localStorage.getItem('maxInterval')) || 720; // Default 12 minutes

    function saveState() {
        localStorage.setItem(`isMinting${villageId}`, JSON.stringify(isMinting));
    }

    function saveIntervals() {
        localStorage.setItem('minInterval', minInterval);
        localStorage.setItem('maxInterval', maxInterval);
    }

    function initializeUI() {
        const container = document.createElement('div');
        container.style.position = 'fixed';
        container.style.bottom = '20px';
        container.style.right = '20px';
        container.style.backgroundColor = '#333';
        container.style.color = '#fff';
        container.style.padding = '10px';
        container.style.borderRadius = '5px';
        container.style.zIndex = 10000;

        const countdownElement = document.createElement('div');
        countdownElement.id = 'countdown-timer';
        countdownElement.style.marginBottom = '10px';
        container.appendChild(countdownElement);

        const toggleButton = document.createElement('button');
        toggleButton.textContent = isMinting ? 'Stop Minting' : 'Start Minting';
        toggleButton.style.padding = '5px 10px';
        toggleButton.style.marginRight = '5px';
        toggleButton.style.border = 'none';
        toggleButton.style.borderRadius = '3px';
        toggleButton.style.cursor = 'pointer';
        toggleButton.style.backgroundColor = isMinting ? '#FF0000' : '#4CAF50';
        toggleButton.style.color = '#fff';

        toggleButton.addEventListener('click', () => {
            isMinting = !isMinting;
            toggleButton.textContent = isMinting ? 'Stop Minting' : 'Start Minting';
            toggleButton.style.backgroundColor = isMinting ? '#FF0000' : '#4CAF50';
            saveState();

            if (isMinting) {
                mintCoins();
                startCountdown();
            } else {
                stopCountdown();
            }
        });

        container.appendChild(toggleButton);

        const settingsButton = document.createElement('button');
        settingsButton.textContent = 'Settings';
        settingsButton.style.padding = '5px 10px';
        settingsButton.style.border = 'none';
        settingsButton.style.borderRadius = '3px';
        settingsButton.style.cursor = 'pointer';
        settingsButton.style.backgroundColor = '#28a745';
        settingsButton.style.color = '#fff';

        settingsButton.addEventListener('click', () => {
            const newMin = parseInt(prompt('Set minimum interval (seconds):', minInterval));
            const newMax = parseInt(prompt('Set maximum interval (seconds):', maxInterval));

            if (!isNaN(newMin) && !isNaN(newMax) && newMin > 0 && newMax > newMin) {
                minInterval = newMin;
                maxInterval = newMax;
                saveIntervals();
                alert(`Intervals updated! Min: ${minInterval}s, Max: ${maxInterval}s`);
            } else {
                alert('Invalid input. Please enter valid intervals.');
            }
        });

        container.appendChild(settingsButton);

        document.body.appendChild(container);
    }

    function mintCoins() {
        const maxCoinElement = document.getElementById('coin_mint_fill_max');
        const maxCoinValue = maxCoinElement ? parseInt(maxCoinElement.textContent.match(/\((\d+)\)/)?.[1], 10) : null;

        if (maxCoinValue !== null) {
            document.getElementById('coin_mint_count').value = maxCoinValue;

            const mintButton = document.querySelector("input[type='submit'][value='Mint']");
            if (mintButton) {
                mintButton.click();
                console.log('Tombol "Mint" diklik dengan nilai:', maxCoinValue);
            } else {
                console.log('Tombol "Mint" tidak ditemukan.');
            }
        } else {
            console.log('Tidak dapat menemukan nilai maksimum.');
        }
    }

    function startCountdown() {
        const countdownElement = document.getElementById('countdown-timer');
        countdownTime = Math.floor(Math.random() * (maxInterval - minInterval + 1)) + minInterval;

        countdownInterval = setInterval(() => {
            countdownTime--;
            const minutes = Math.floor(countdownTime / 60);
            const seconds = countdownTime % 60;
            countdownElement.textContent = `Next mint in: ${minutes}m ${seconds}s`;

            if (countdownTime <= 0) {
                clearInterval(countdownInterval);
                location.reload();
            }
        }, 1000);
    }

    function stopCountdown() {
        clearInterval(countdownInterval);
        const countdownElement = document.getElementById('countdown-timer');
        if (countdownElement) countdownElement.textContent = '';
    }

    initializeUI();

    if (isMinting) {
        const initialDelay = Math.floor(Math.random() * (5000 - 3000 + 1)) + 3000;
        setTimeout(() => {
            mintCoins();
            startCountdown();
        }, initialDelay);
    }
})();