Auto Battle

Slot Machine, Las Noches, Tailed Beast, Valhalla Lv. 56

// ==UserScript==
// @name         Auto Battle
// @namespace    http://tampermonkey.net/
// @description  Slot Machine, Las Noches, Tailed Beast, Valhalla Lv. 56
// @version      5.0
// @match        https://pockieninja.online
// ==/UserScript==

(function() {
    'use strict';

    let autoBattleSlot = false;
    let autoBattleLN = false;
    let autoBattleTB = false;
    let currentBeastIndex = 0;

    // Daftar koordinat Tailed Beast (Urutan: Shukaku → Kurama)
    const tailedBeastCoordinates = [
        { name: "Shukaku", x: 810, y: 475 },
        { name: "Son Goku", x: 718, y: 308 },
        { name: "Son Goku 2", x: 750, y: 280 },
        { name: "Matatabi", x: 286, y: 310 },
        { name: "Matatabi2", x: 228, y: 305 },
        { name: "Chomei", x: 559, y: 198 },
        { name: "Chomei 2", x: 585, y: 145 },
        { name: "Kurama", x: 290, y: 514 },
        { name: "Gyuki", x: 548, y: 439 },
        { name: "Saiken", x: 512, y: 372 },
        { name: "Kokuo", x: 986, y: 351 },
        { name: "Isobu", x: 892, y: 178 },
    ];

    // === SLOT MACHINE ===
    function klikChallengeSlot() {
        if (!autoBattleSlot) return;

        let tombolChallenge = document.querySelector(".slot-machine__challenge-btn");
        if (tombolChallenge) {
            console.log("🎰 Menekan tombol Challenge (Slot)...");
            tombolChallenge.click();
            cekBattleSelesai(klikChallengeSlot);
        }
    }

    function startAutoBattleSlot() {
        if (autoBattleSlot) return;
        autoBattleSlot = true;
        console.log("🚀 Auto Battle Slot Machine DIMULAI!");
        klikChallengeSlot();
    }

    function stopAutoBattleSlot() {
        autoBattleSlot = false;
        console.log("🛑 Auto Battle Slot Machine DIHENTIKAN!");
    }

    // === LAS NOCHES ===
    function klikContinueLN() {
        if (!autoBattleLN) return;

        let floorElement = [...document.querySelectorAll('pre')]
            .find(pre => pre.textContent.trim().startsWith("Current Floor"));

        if (floorElement) {
            let currentFloor = parseInt(floorElement.textContent.replace("Current Floor", "").trim(), 10);
            if (!isNaN(currentFloor) && currentFloor >= 166) {
                console.log(`🚫 Current Floor telah mencapai ${currentFloor}. Menghentikan Auto Battle.`);
                autoBattleLN = false;
                return;
            }
            console.log(`🏛️ Current Floor: ${currentFloor}`);
        }

        let button = [...document.querySelectorAll('button')].find(btn =>
            btn.textContent.trim() === "Continue" &&
            btn.classList.contains("theme__button--original")
        );

        if (button) {
            console.log("⚔️ Menekan tombol Continue (LN)...");
            button.click();
            cekBattleSelesai(klikContinueLN);
        }
    }

    function startAutoBattleLN() {
        if (autoBattleLN) return;
        autoBattleLN = true;
        console.log("🚀 Auto Battle Las Noches DIMULAI!");
        klikContinueLN();
    }

    function stopAutoBattleLN() {
        autoBattleLN = false;
        console.log("🛑 Auto Battle Las Noches DIHENTIKAN!");
    }

    // === TAILED BEAST ===
    function clickNextBeast() {
        if (!autoBattleTB) return;

        const beast = tailedBeastCoordinates[currentBeastIndex];
        console.log(`🦊 Mencoba klik ${beast.name} di (${beast.x}, ${beast.y})`);
        clickCanvas(beast.x, beast.y);

        // Pindah ke beast berikutnya
        currentBeastIndex = (currentBeastIndex + 1) % tailedBeastCoordinates.length;
    }

    function clickCanvas(x, y) {
        if (!autoBattleTB) return;

        const canvas = document.querySelector("#tailed-beast-map-container canvas");
        if (!canvas) {
            console.log("❌ Canvas tidak ditemukan!");
            return;
        }

        console.log(`📌 Klik pada X=${x}, Y=${y}`);

        ["mousedown", "mouseup", "click"].forEach(eventType => {
            const event = new MouseEvent(eventType, {
                bubbles: true,
                cancelable: true,
                composed: true,
                clientX: x,
                clientY: y
            });

            canvas.dispatchEvent(event);
            document.dispatchEvent(event);
        });

        console.log(`✅ Klik berhasil di X: ${x}, Y: ${y}`);

        setTimeout(checkChooseDifficulty, 500);  // Periksa elemen "Choose Difficulty Level" setelah klik canvas
    }

        function checkChooseDifficulty() {
        if (!autoBattleTB) return;

        // Periksa apakah elemen "Choose Difficulty Level" sudah muncul
        const difficultyLevelText = document.querySelector("#game-container > div:nth-child(9) > div.panel__top_bar.moveable > div > b");

        if (difficultyLevelText && difficultyLevelText.textContent.trim() === "Choose Difficulty Level") {
            console.log("✅ 'Choose Difficulty Level' muncul! Klik tombol 'Fight'...");
            clickButtonAfterCanvas();
        } else {
            console.log("⚠️ 'Choose Difficulty Level' belum muncul, mencoba koordinat lain...");
            // Coba koordinat berikutnya jika elemen belum muncul
            clickNextBeast();
        }
    }

function clickButtonAfterCanvas() {
    if (!autoBattleTB) return;

    const selector = "#game-container > div:nth-child(9) > div.themed_panel.theme__transparent--original > div > div:nth-child(1) > div.grid > div:nth-child(4) > button";
    const button = document.querySelector(selector);

    if (button && button.textContent.trim() === "Fight") {
        console.log("✅ Tombol 'Fight' ditemukan! Menunggu tombol tidak disabled...");

        const waitUntilEnabled = setInterval(() => {
            if (!autoBattleTB) {
                clearInterval(waitUntilEnabled);
                return;
            }

            if (!button.disabled) {
                clearInterval(waitUntilEnabled);

                console.log("✅ Tombol 'Fight' sudah aktif! Menunggu 1 detik sebelum klik...");
                setTimeout(() => {
                    button.click();
                    console.log("🔥 Tombol 'Fight' diklik!");

                    // Mulai timeout 10 detik untuk cek fightContainer
                    let timeout = setTimeout(() => {
                        if (!document.querySelector("#fightContainer")) {
                            console.log("❌ #fightContainer tidak muncul dalam 10 detik!");

                            // Tekan tombol Close jika ada
                            let closeBtn = [...document.querySelectorAll(".theme__button--original")]
                                .find(btn => btn.textContent.trim() === "Close");

                            if (closeBtn) {
                                console.log("🧹 Menekan tombol Close karena tidak ada respon...");
                                closeBtn.click();
                            }

                            // Ulangi klik koordinat dari awal
                            currentBeastIndex = 0;
                            setTimeout(clickNextBeast, 1000);
                        }
                    }, 7000);

                    // Jika #fightContainer muncul, lanjut battle
                    const checkFightContainer = setInterval(() => {
                        const fightContainer = document.querySelector("#fightContainer");
                        if (fightContainer) {
                            clearTimeout(timeout);
                            clearInterval(checkFightContainer);

                            console.log("✅ #fightContainer ditemukan, battle dimulai!");
                            cekBattleSelesai(() => {
                                console.log("✅ Battle selesai, mulai dari awal...");
                                currentBeastIndex = 0;
                                setTimeout(clickNextBeast, 500);
                            });
                        }
                    }, 500);

                }, 500);
            } else {
                console.log("⏳ Menunggu tombol 'Fight' aktif...");
            }
        }, 500);
    } else {
        console.log("⚠️ Tombol 'Fight' tidak ditemukan atau teksnya bukan 'Fight'!");
    }
}

    function startAutoBattleTB() {
        if (autoBattleTB) return;
        autoBattleTB = true;
        currentBeastIndex = 0;
        console.log("🚀 Auto Battle Tailed Beast DIMULAI!");
        clickNextBeast();
    }

    function stopAutoBattleTB() {
        autoBattleTB = false;
        console.log("🛑 Auto Battle Tailed Beast DIHENTIKAN!");
    }

    // === CEK BATTLE SELESAI ===
    function cekBattleSelesai(callback) {
        let cekInterval = setInterval(() => {
            let tombolCloseList = document.querySelectorAll(".theme__button--original");
            for (let tombol of tombolCloseList) {
                if (tombol.textContent.trim() === "Close") {
                    console.log("🏁 Battle selesai! Menekan tombol 'Close'...");
                    tombol.click();
                    clearInterval(cekInterval);
                    setTimeout(callback, 500);
                    return;
                }
            }
        }, 500);
    }

    // === VALHALLA LV.56 ===
let autoBattleRunning = false;
let currentDungeonIndex = 0;

const dungeons = [
    {
        completeSelector: '#game-container > div:nth-child(5) > div:nth-child(2) > img[src*="0_complete.png"]',
        buttonSelector: '#game-container > div:nth-child(5) > div:nth-child(2) > button > img',
        monsterContainer: '#game-container > div:nth-child(5) > div:nth-child(3)',
    },
    {
        completeSelector: '#game-container > div:nth-child(5) > div:nth-child(3) > img[src*="1_complete.png"]',
        buttonSelector: '#game-container > div:nth-child(5) > div:nth-child(3) > button > img',
        monsterContainer: '#game-container > div:nth-child(5) > div:nth-child(4)',
    },
    {
        completeSelector: '#game-container > div:nth-child(5) > div:nth-child(4) > img[src*="2_complete.png"]',
        buttonSelector: '#game-container > div:nth-child(5) > div:nth-child(4) > button > img',
        monsterContainer: '#game-container > div:nth-child(5) > div:nth-child(5)',
    },
    {
        completeSelector: '#game-container > div:nth-child(5) > div:nth-child(5) > img[src*="3_complete.png"]',
        buttonSelector: '#game-container > div:nth-child(5) > div:nth-child(5) > button > img',
        monsterContainer: '#game-container > div:nth-child(5) > div:nth-child(6)',
    }
];

function waitForElement(selector, callback, checkInterval = 500) {
    const interval = setInterval(() => {
        if (!autoBattleRunning) return clearInterval(interval);
        const el = document.querySelector(selector);
        if (el) {
            clearInterval(interval);
            callback(el);
        }
    }, checkInterval);
}

function cekBattleSelesai2(callback) {
    const cekInterval = setInterval(() => {
        const tombolCloseList = document.querySelectorAll(".theme__button--original");
        for (let tombol of tombolCloseList) {
            if (tombol.textContent.trim() === "Close") {
                console.log("🏁 Battle selesai, klik Close");
                tombol.click();
                clearInterval(cekInterval);
                setTimeout(callback, 4000);
                return;
            }
        }
    }, 500);
}

function bukaDungeon(index, callback) {
    console.log(`📂 Buka Dungeon ke-${index + 1}`);
    waitForElement(dungeons[index].buttonSelector, (btn) => {
        btn.click();
        waitForElement('img[src*="dungeons/select.png"]', () => {
            console.log("📜 Panel select muncul");
            callback();
        });
    });
}

function lawanSemuaMonster(index, callback) {
    const baseSelector = dungeons[index].monsterContainer;
    let currentMonster = 2;

    function lawanBerikutnya() {
        if (!autoBattleRunning) return;

        if (currentMonster > 6) {
            console.log("✅ Semua monster di dungeon ini telah dilawan.");
            callback(); // Lanjut ke dungeon berikutnya
            return;
        }

        const monsterBtn = document.querySelector(`${baseSelector} > button:nth-child(${currentMonster}) > img`);
        if (!monsterBtn || monsterBtn.parentElement.classList.contains("--disabled")) {
            console.log(`⚠️ Monster ke-${currentMonster - 1} tidak bisa dilawan, lanjut ke berikutnya...`);
            currentMonster++;
            return lawanBerikutnya();
        }

        console.log(`⚔️ Melawan monster ke-${currentMonster - 1}`);
        monsterBtn.click();

        cekBattleSelesai2(() => {
            currentMonster++;
            lawanBerikutnya();
        });
    }

    lawanBerikutnya();
}

function mulaiAutoBattleValhalla() {
    if (autoBattleRunning) return;
    autoBattleRunning = true;
    currentDungeonIndex = 0;
    console.log("🚀 Auto Battle Valhalla DIMULAI!");

    function nextDungeon() {
        if (!autoBattleRunning) return;

        if (currentDungeonIndex >= dungeons.length) {
            console.log("🎉 Semua dungeon telah selesai!");
            autoBattleRunning = false;
            return;
        }

        const dungeon = dungeons[currentDungeonIndex];

        // Cek apakah dungeon sudah complete
        if (document.querySelector(dungeon.completeSelector)) {
            console.log(`✅ Dungeon ${currentDungeonIndex + 1} sudah selesai, lanjut ke dungeon berikutnya...`);
            currentDungeonIndex++;
            return nextDungeon();
        }

        bukaDungeon(currentDungeonIndex, () => {
            lawanSemuaMonster(currentDungeonIndex, () => {
                console.log(`➡️ Selesai Dungeon ${currentDungeonIndex + 1}, lanjut...`);
                currentDungeonIndex++;
                setTimeout(nextDungeon, 1000);
            });
        });
    }

    nextDungeon();
}

function startAutoBattleValhalla() {
    if (!autoBattleRunning) {
        console.log("▶️ Memulai auto battle Valhalla");
        mulaiAutoBattleValhalla(); // ✅ Ini benar
    }
}

function stopAutoBattleValhalla() {
    autoBattleRunning = false;
    console.log("⏹️ Auto battle Valhalla dihentikan.");
}


// === UI AUTO BATTLE ===
function createUIButton() {
    let uiDiv = document.createElement("div");
    uiDiv.innerHTML = `
        <div id="autoBattleUI" style="position: fixed; top: 205px; left: 0px; background: rgba(0, 0, 0, 0.8); padding: 12px; z-index: 9999; border-radius: 8px; font-family: sans-serif; min-width: 100px;">
            <h4 style="color: #ffffff; text-align: center; margin-top: 0; margin-bottom: 10px;">⚔️ Auto Battle</h4>
            <div style="margin-bottom: 10px;">
                <button id="toggleSlot" class="auto-btn">Start SM</button>
            </div>
            <div style="margin-bottom: 10px;">
                <button id="toggleLN" class="auto-btn">Start LN</button>
            </div>
            <div style="margin-bottom: 10px;">
                <button id="toggleTB" class="auto-btn">Start TB</button>
            </div>
            <div>
                <button id="toggleVH" class="auto-btn">Start VH</button>
            </div>
        </div>
        <style>
            .auto-btn {
                width: 100%;
                padding: 6px 10px;
                border: none;
                border-radius: 5px;
                background-color: #007bff;
                color: white;
                font-size: 13px;
                cursor: pointer;
                transition: 0.2s ease-in-out;
            }
            .auto-btn:hover {
                background-color: #0056b3;
            }
            .auto-btn.active {
                background-color: #dc3545;
            }
        </style>
    `;
    document.body.appendChild(uiDiv);

    function setupToggle(buttonId, startFn, stopFn, label) {
        let isRunning = false;
        const button = document.getElementById(buttonId);
        button.addEventListener("click", () => {
            isRunning = !isRunning;
            button.textContent = isRunning ? `Stop ${label}` : `Start ${label}`;
            button.classList.toggle("active", isRunning);
            isRunning ? startFn() : stopFn();
        });
    }

    setupToggle("toggleSlot", startAutoBattleSlot, stopAutoBattleSlot, "SM");
    setupToggle("toggleLN", startAutoBattleLN, stopAutoBattleLN, "LN");
    setupToggle("toggleTB", startAutoBattleTB, stopAutoBattleTB, "TB");
    setupToggle("toggleVH", startAutoBattleValhalla, stopAutoBattleValhalla, "VH");
}

createUIButton();
})();