Cookie Clicker Mod Menu

Mod menu for Cookie Clicker.

当前为 2024-09-18 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

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

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Cookie Clicker Mod Menu
// @namespace    https://orteil.dashnet.org/cookieclicker/
// @version      1.3Beta
// @description  Mod menu for Cookie Clicker.
// @author       DarkDeath
// @match        https://orteil.dashnet.org/cookieclicker/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=dashnet.org
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    let clickInterval;
    const style = document.createElement('style');
    style.textContent = `
        #cookie-clicker-menu {
            position: fixed;
            top: 10px;
            right: 10px;
            background-color: rgba(0, 0, 0, 0.8);
            color: white;
            border: 1px solid #ccc;
            padding: 10px;
            z-index: 1000000;
            font-family: Arial, sans-serif;
            width: 200px;
        }
        #cookie-clicker-menu h3 {
            margin: 0;
            padding-bottom: 10px;
            cursor: move;
            user-select: none;
            border-bottom: 1px solid #ccc;
            margin-bottom: 10px;
        }
        #cookie-clicker-menu button {
            display: block;
            width: 100%;
            margin-bottom: 5px;
            padding: 5px;
            background-color: #007bff;
            color: white;
            border: none;
            border-radius: 5px;
            cursor: pointer;
            transition: background-color 0.3s;
        }
        #cookie-clicker-menu button:hover {
            background-color: #0056b3;
        }
        #ruin-the-fun {
            background-color: #dc3545 !important;
        }
        #ruin-the-fun:hover {
            background-color: #c82333 !important;
        }
        .custom-window {
            position: fixed;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            background-color: rgba(0, 0, 0, 0.9);
            color: white;
            border: 1px solid #ccc;
            padding: 20px;
            z-index: 1000001;
            font-family: Arial, sans-serif;
            width: 300px;
            text-align: center;
        }
        .custom-window input {
            width: 100%;
            padding: 5px;
            margin: 10px 0;
            box-sizing: border-box;
        }
        .custom-window button {
            margin: 5px;
            padding: 5px 10px;
            background-color: #007bff;
            color: white;
            border: none;
            border-radius: 5px;
            cursor: pointer;
        }
        .custom-window button:hover {
            background-color: #0056b3;
        }
    `;
    document.head.appendChild(style);

    const menu = document.createElement('div');
    menu.id = 'cookie-clicker-menu';
    menu.innerHTML = `
        <h3>Cookie Clicker Mod Menu</h3>
        <button id="start-auto-click">Start Auto Click</button>
        <button id="stop-auto-click">Stop Auto Click</button>
        <button id="gain-lumps">Gain Lumps</button>
        <button id="buy-times">Buy All</button>
        <button id="set-cookies">Set Cookies</button>
        <button id="ruin-the-fun">Ruin The Fun</button>
    `;
    document.body.appendChild(menu);

    // Make the menu draggable
    let isDragging = false;
    let currentX;
    let currentY;
    let initialX;
    let initialY;
    let xOffset = 0;
    let yOffset = 0;

    menu.querySelector('h3').addEventListener('mousedown', dragStart);
    document.addEventListener('mousemove', drag);
    document.addEventListener('mouseup', dragEnd);

    function dragStart(e) {
        initialX = e.clientX - xOffset;
        initialY = e.clientY - yOffset;
        isDragging = true;
    }

    function drag(e) {
        if (isDragging) {
            e.preventDefault();
            currentX = e.clientX - initialX;
            currentY = e.clientY - initialY;
            xOffset = currentX;
            yOffset = currentY;
            setTranslate(currentX, currentY, menu);
        }
    }

    function dragEnd(e) {
        initialX = currentX;
        initialY = currentY;
        isDragging = false;
    }

    function setTranslate(xPos, yPos, el) {
        el.style.transform = `translate3d(${xPos}px, ${yPos}px, 0)`;
    }

    // Custom input window function
    function createInputWindow(title, placeholder, callback) {
        const inputWindow = document.createElement('div');
        inputWindow.className = 'custom-window';
        inputWindow.innerHTML = `
            <h3>${title}</h3>
            <input type="text" placeholder="${placeholder}">
            <button class="confirm">Confirm</button>
            <button class="cancel">Cancel</button>
        `;
        document.body.appendChild(inputWindow);

        const input = inputWindow.querySelector('input');
        const confirmBtn = inputWindow.querySelector('.confirm');
        const cancelBtn = inputWindow.querySelector('.cancel');

        confirmBtn.addEventListener('click', () => {
            const value = input.value;
            document.body.removeChild(inputWindow);
            callback(value);
        });

        cancelBtn.addEventListener('click', () => {
            document.body.removeChild(inputWindow);
        });
    }

    // Custom alert window function
    function createAlertWindow(message) {
        const alertWindow = document.createElement('div');
        alertWindow.className = 'custom-window';
        alertWindow.innerHTML = `
            <p>${message}</p>
            <button class="ok">OK</button>
        `;
        document.body.appendChild(alertWindow);

        const okBtn = alertWindow.querySelector('.ok');
        okBtn.addEventListener('click', () => {
            document.body.removeChild(alertWindow);
        });
    }

    // Auto-click functionality
    function autoClickCookie(interval) {
        if (typeof interval !== 'number' || interval <= 0) {
            console.error("Please provide a valid interval in milliseconds.");
            return;
        }
        if (!clickInterval) {
            clickInterval = setInterval(() => {
                Game.ClickCookie();
            }, interval);
        } else {
            createAlertWindow("Auto clicker is already running.");
        }
    }

    function stopAutoClickCookie() {
        if (clickInterval) {
            clearInterval(clickInterval);
            clickInterval = null;
            console.log("Auto clicker stopped.");
        } else {
            console.warn("Auto clicker is not currently running.");
        }
    }

    // Gain lumps functionality
    function getLumps() {
        createInputWindow("Gain Lumps", "Enter number of lumps", (lumps) => {
            if (lumps && !isNaN(Number(lumps))) {
                Game.gainLumps(Number(lumps));
                createAlertWindow(`Gained ${lumps} lumps`);
            } else {
                createAlertWindow("Please enter a valid number.");
            }
        });
    }

    // Ruin The Fun functionality
    function ruinTheFun() {
        if (confirm("Are you sure you want to ruin the fun? This action cannot be undone!")) {
            Game.RuinTheFun(1);
            createAlertWindow("The fun has been ruined!");
        }
    }

    function buyAll() {
        Game.storeBuyAll();
        createInputWindow("Buy All", "How much do you want to buy?", (times) => {
            if (times && !isNaN(Number(times))) {
                for (let i in Game.Objects) {
                    Game.Objects[i].getFree(Number(times));
                }
                createAlertWindow(`Bought all objects ${times} times.`);
            } else {
                createAlertWindow("Please enter a valid number.");
            }
        });
    }

    function setCookies() {
        createInputWindow("Set Cookies", "Enter number of cookies", (cookies) => {
            if (cookies && !isNaN(Number(cookies))) {
                Game.cookies = Number(cookies);
                createAlertWindow(`Successfully set your cookies to ${cookies}`);
            } else {
                createAlertWindow("Please enter a valid number.");
            }
        });
    }

    // Event listeners for buttons
    document.getElementById('start-auto-click').addEventListener('click', () => autoClickCookie(10));
    document.getElementById('stop-auto-click').addEventListener('click', stopAutoClickCookie);
    document.getElementById('gain-lumps').addEventListener('click', getLumps);
    document.getElementById('buy-times').addEventListener('click', buyAll);
    document.getElementById('ruin-the-fun').addEventListener('click', ruinTheFun);
    document.getElementById('set-cookies').addEventListener('click', setCookies);
    console.log("Cookie Clicker mod menu added. Drag the title to move the menu.");
})();