Auto Minting Coin (Pc + Mobile)

Minting automatically at the academy at random intervals

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

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

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

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

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

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==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);
    }
})();