Auto Send Resource for Minting

send ress automatically at WH at random intervals (10-20 minutes) with a countdown, reset button, and customizable settings

// ==UserScript==
// @name         Auto Send Resource for Minting
// @version      2.2
// @description  send ress automatically at WH at random intervals (10-20 minutes) with a countdown, reset button, and customizable settings
// @include      https://*/game.php*screen=storage*
// @namespace https://greasyfork.org/users/1388863
// ==/UserScript==

// Variabel global untuk menyimpan referensi timer
let countdownTimer = null;

// Fungsi untuk menghasilkan waktu tunggu acak dalam milidetik
function getRandomInterval(min, max) {
    return Math.random() * (max - min) + min;
}

// Fungsi untuk mendapatkan nilai dari localStorage atau nilai default jika tidak ada
function getFromStorage(key, defaultValue) {
    return localStorage.getItem(key) || defaultValue;
}

// Fungsi untuk menjalankan langkah-langkah dengan jeda
function executeSteps() {
    console.log('Eksekusi langkah utama dimulai...');

    setTimeout(() => {
        document.querySelector('.input_wood.scriptInput').value = 28000000;
        document.querySelector('.input_stone.scriptInput').value = 30000000;
        document.querySelector('.input_iron.scriptInput').value = 25000000;

        const target = document.getElementById('input_target1');
        const origin = document.getElementById('input_origin1');

        const targetValue = getFromStorage('mintingTarget', ' ');
        const originValue = getFromStorage('mintingOrigin', ' ');

        if (target) {
            target.value = targetValue;
            console.log('Teks telah dimasukkan ke dalam target:', target.value);
        } else {
            console.error('Elemen dengan id "input_target1" tidak ditemukan.');
        }

        if (origin) {
            origin.value = originValue;
            console.log('Teks telah dimasukkan ke dalam origin:', origin.value);
        } else {
            console.error('Elemen dengan id "input_origin1" tidak ditemukan.');
        }

        setTimeout(() => {
            const button = document.querySelector('input.btn.evt-confirm-btn.btn-confirm-yes[type="button"][value="calculate"]');
            if (button) {
                button.click();
                console.log('Tombol calculate telah diklik.');
            } else {
                console.error('Tombol calculate tidak ditemukan.');
            }

            setTimeout(() => {
                function pressEnterContinuously() {
                    console.log('Menekan tombol Enter...');
                    const event = new KeyboardEvent('keydown', {
                        key: 'Enter',
                        code: 'Enter',
                        keyCode: 13,
                        which: 13,
                        bubbles: true,
                    });
                    document.dispatchEvent(event);
                    setTimeout(pressEnterContinuously, 2000);
                }

                pressEnterContinuously();
            }, getRandomInterval(2000, 3000));
        }, getRandomInterval(2000, 3000));
    }, getRandomInterval(2000, 3000));
}

// Fungsi utama untuk memulai script
function main() {
    console.log('Menunggu sebelum memuat script eksternal...');
    setTimeout(() => {
        console.log('Memuat script eksternal...');
        $.getScript("https://dl.dropboxusercontent.com/s/gijrksuvyynuzlp/resSender.js?dl=0")
            .done(() => {
                console.log('Script eksternal berhasil dimuat.');
                setTimeout(() => {
                    console.log('Melanjutkan ke langkah utama...');
                    executeSteps();
                }, getRandomInterval(1000, 2000));
            })
            .fail(() => {
                console.error('Gagal memuat script eksternal.');
            });
    }, getRandomInterval(1000, 2000));
}

// Countdown logic
function startCountdown(minutes) {
    const countdownElement = document.getElementById('countdown-timer');
    const endTime = Date.now() + minutes * 60000;
    localStorage.setItem('countdownEndTime', endTime);

    // Hentikan timer sebelumnya jika ada
    if (countdownTimer) {
        clearTimeout(countdownTimer);
    }

    function updateCountdown() {
        const remainingTime = Math.max(0, endTime - Date.now());
        const mins = Math.floor(remainingTime / 60000);
        const secs = Math.floor((remainingTime % 60000) / 1000);

        countdownElement.textContent = `Next execution in: ${mins}m ${secs}s`;

        if (remainingTime > 0) {
            countdownTimer = setTimeout(updateCountdown, 1000);
        } else {
            countdownElement.textContent = 'Executing...';
            main();
            startCountdown(Math.random() * 10 + 10); // Start new countdown with 20-30 minutes
        }
    }

    updateCountdown();
}

// Inisialisasi UI
function initializeUI() {
    const container = document.createElement('div');
    container.style.position = 'fixed';
    container.style.bottom = '20px';
    container.style.left = '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 resetButton = document.createElement('button');
    resetButton.textContent = 'Forced Start';
    resetButton.style.padding = '5px 10px';
    resetButton.style.marginRight = '5px';
    resetButton.style.border = 'none';
    resetButton.style.borderRadius = '3px';
    resetButton.style.cursor = 'pointer';
    resetButton.style.backgroundColor = '#007bff';
    resetButton.style.color = '#fff';

    resetButton.addEventListener('click', () => {
        console.log('Reset button clicked.');
        // main();
        // startCountdown(Math.random() * 10 + 20); // Start new countdown with 20-30 minutes
        startCountdown(0.02); // Start new countdown with 20-30 minutes
        location.reload();
    });

    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 newTarget = prompt('Masukkan Koordinat Target:', getFromStorage('mintingTarget', ' '));
        if (newTarget !== null) {
            localStorage.setItem('mintingTarget', newTarget);
            console.log('Target baru disimpan:', newTarget);
        }

        const newOrigin = prompt('Masukkan Koordinat Origin:', getFromStorage('mintingOrigin', ' '));
        if (newOrigin !== null) {
            localStorage.setItem('mintingOrigin', newOrigin);
            console.log('Origin baru disimpan:', newOrigin);
        }
    });

    container.appendChild(resetButton);
    container.appendChild(settingsButton);
    document.body.appendChild(container);
}

// Mulai program
(function () {
    initializeUI();

    const savedEndTime = localStorage.getItem('countdownEndTime');
    const remainingTime = savedEndTime ? Math.max(0, savedEndTime - Date.now()) : 0;

    if (remainingTime > 0) {
        console.log('Melanjutkan countdown sebelumnya.');
        startCountdown(remainingTime / 60000);
    } else {
        console.log('Memulai countdown baru.');
        startCountdown(Math.random() * 10 + 10); // Random interval between 20-30 minutes
    }
})();