Cookie Clicker Ultimate Cheat Menu (Fixed & Improved)

Full-featured cheat menu for Cookie Clicker with fixed cheats, draggable dark UI, toggleable, many options, and smooth controls.

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Cookie Clicker Ultimate Cheat Menu (Fixed & Improved)
// @namespace    http://tampermonkey.net/
// @version      1.3
// @description  Full-featured cheat menu for Cookie Clicker with fixed cheats, draggable dark UI, toggleable, many options, and smooth controls.
// @author       Marley
// @match        https://orteil.dashnet.org/cookieclicker/
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Prevent duplicates
    if (window.__ccCheatMenuLoaded) return;
    window.__ccCheatMenuLoaded = true;

    // Wait until game is ready
    function waitForGameReady(callback) {
        if (typeof Game === 'undefined' || !Game.ready) {
            setTimeout(() => waitForGameReady(callback), 1000);
        } else {
            callback();
        }
    }

    waitForGameReady(() => {
        // Main cheat state
        let cheatState = {
            autoCookies: false,
            autoBuyUpgrades: false,
            autoBuyBuildings: false,
            autoGoldenClick: false,
            autoReindeerClick: false,
            cookiesPerTick: 1000000,
            cookieMultiplier: 1,
        };

        // Create UI panel
        const panel = document.createElement('div');
        panel.style.position = 'fixed';
        panel.style.top = '50px';
        panel.style.left = '20px';
        panel.style.width = '300px';
        panel.style.background = '#121212';
        panel.style.border = '1px solid #333';
        panel.style.borderRadius = '8px';
        panel.style.color = '#eee';
        panel.style.fontFamily = 'Segoe UI, Tahoma, Geneva, Verdana, sans-serif';
        panel.style.fontSize = '13px';
        panel.style.zIndex = '99999999';
        panel.style.padding = '12px';
        panel.style.userSelect = 'none';
        panel.style.boxShadow = '0 0 10px #000';

        panel.style.cursor = 'move';

        // Title
        const title = document.createElement('div');
        title.textContent = '🍪 Cookie Clicker Cheat Menu';
        title.style.fontWeight = '700';
        title.style.fontSize = '16px';
        title.style.marginBottom = '10px';
        title.style.textAlign = 'center';
        panel.appendChild(title);

        // Helper to create toggles
        function createToggle(labelText, initialState, onChange) {
            const container = document.createElement('div');
            container.style.marginBottom = '8px';
            container.style.display = 'flex';
            container.style.alignItems = 'center';
            container.style.justifyContent = 'space-between';

            const label = document.createElement('label');
            label.textContent = labelText;
            label.style.userSelect = 'none';

            const input = document.createElement('input');
            input.type = 'checkbox';
            input.checked = initialState;
            input.style.cursor = 'pointer';

            input.addEventListener('change', () => onChange(input.checked));

            container.appendChild(label);
            container.appendChild(input);
            return container;
        }

        // Helper to create number inputs
        function createNumberInput(labelText, initialValue, min, max, step, onChange) {
            const container = document.createElement('div');
            container.style.marginBottom = '8px';
            container.style.display = 'flex';
            container.style.alignItems = 'center';
            container.style.justifyContent = 'space-between';

            const label = document.createElement('label');
            label.textContent = labelText;
            label.style.userSelect = 'none';

            const input = document.createElement('input');
            input.type = 'number';
            input.value = initialValue;
            input.min = min;
            input.max = max;
            input.step = step;
            input.style.width = '80px';
            input.style.cursor = 'pointer';
            input.style.background = '#222';
            input.style.border = '1px solid #444';
            input.style.color = '#eee';
            input.style.borderRadius = '4px';
            input.style.textAlign = 'right';

            input.addEventListener('change', () => {
                let val = Number(input.value);
                if (isNaN(val)) val = initialValue;
                if (val < min) val = min;
                if (val > max) val = max;
                input.value = val;
                onChange(val);
            });

            container.appendChild(label);
            container.appendChild(input);
            return container;
        }

        // Toggle functions
        function toggleAutoCookies(enabled) {
            cheatState.autoCookies = enabled;
        }
        function toggleAutoBuyUpgrades(enabled) {
            cheatState.autoBuyUpgrades = enabled;
        }
        function toggleAutoBuyBuildings(enabled) {
            cheatState.autoBuyBuildings = enabled;
        }
        function toggleAutoGoldenClick(enabled) {
            cheatState.autoGoldenClick = enabled;
        }
        function toggleAutoReindeerClick(enabled) {
            cheatState.autoReindeerClick = enabled;
        }
        function changeCookiesPerTick(value) {
            cheatState.cookiesPerTick = value;
        }
        function changeCookieMultiplier(value) {
            cheatState.cookieMultiplier = value;
        }

        // Add toggles & inputs to panel
        panel.appendChild(createToggle('Auto Add Cookies', cheatState.autoCookies, toggleAutoCookies));
        panel.appendChild(createNumberInput('Cookies per Tick', cheatState.cookiesPerTick, 1, 1e12, 1000, changeCookiesPerTick));
        panel.appendChild(createNumberInput('Cookie Multiplier', cheatState.cookieMultiplier, 1, 1000, 0.1, changeCookieMultiplier));
        panel.appendChild(createToggle('Auto Buy Upgrades', cheatState.autoBuyUpgrades, toggleAutoBuyUpgrades));
        panel.appendChild(createToggle('Auto Buy Buildings', cheatState.autoBuyBuildings, toggleAutoBuyBuildings));
        panel.appendChild(createToggle('Auto Click Golden Cookies', cheatState.autoGoldenClick, toggleAutoGoldenClick));
        panel.appendChild(createToggle('Auto Click Reindeer', cheatState.autoReindeerClick, toggleAutoReindeerClick));

        // Extra buttons for common cheats
        const btnContainer = document.createElement('div');
        btnContainer.style.marginTop = '12px';
        btnContainer.style.display = 'flex';
        btnContainer.style.flexWrap = 'wrap';
        btnContainer.style.gap = '8px';
        btnContainer.style.justifyContent = 'center';

        function createButton(text, onClick) {
            const btn = document.createElement('button');
            btn.textContent = text;
            btn.style.background = '#2979ff';
            btn.style.color = '#fff';
            btn.style.border = 'none';
            btn.style.borderRadius = '5px';
            btn.style.padding = '6px 10px';
            btn.style.cursor = 'pointer';
            btn.style.fontWeight = '600';
            btn.style.flex = '1 1 auto';
            btn.addEventListener('mouseenter', () => btn.style.background = '#1565c0');
            btn.addEventListener('mouseleave', () => btn.style.background = '#2979ff');
            btn.addEventListener('click', onClick);
            return btn;
        }

        btnContainer.appendChild(createButton('Add 1 Million Cookies', () => Game.Earn(1e6)));
        btnContainer.appendChild(createButton('Unlock All Upgrades', () => {
            for (let upg of Game.UpgradesById) {
                if (!upg.bought) {
                    upg.bought = 1;
                    upg.isUnlocked = true;
                    upg.win();
                }
            }
            Game.UpgradesToRebuild = 1;
        }));
        btnContainer.appendChild(createButton('Unlock All Buildings', () => {
            for (let b of Game.ObjectsById) {
                b.unlocked = 1;
                if (b.amount < 1) b.amount = 1;
            }
            Game.CalculateGains();
            Game.BuildStore();
        }));
        btnContainer.appendChild(createButton('Unlock All Achievements', () => {
            for (let a of Game.Achievements) {
                if (!a.won) a.win();
            }
        }));
        btnContainer.appendChild(createButton('Max CPS (Cookies Per Second)', () => {
            Game.cookiesPs = Number.MAX_SAFE_INTEGER;
            Game.CalculateGains();
        }));
        btnContainer.appendChild(createButton('Reset Game (No Confirmation!)', () => {
            Game.Reset();
        }));

        panel.appendChild(btnContainer);

        // Append panel to body
        document.body.appendChild(panel);

        // Make UI draggable
        let drag = {
            active: false,
            offsetX: 0,
            offsetY: 0
        };

        panel.addEventListener('mousedown', e => {
            if (e.target.tagName.toLowerCase() === 'input' || e.target.tagName.toLowerCase() === 'button') return;
            drag.active = true;
            drag.offsetX = e.clientX - panel.offsetLeft;
            drag.offsetY = e.clientY - panel.offsetTop;
            panel.style.transition = 'none';
        });

        document.addEventListener('mouseup', () => {
            drag.active = false;
            panel.style.transition = '';
        });

        document.addEventListener('mousemove', e => {
            if (!drag.active) return;
            let left = e.clientX - drag.offsetX;
            let top = e.clientY - drag.offsetY;
            // Clamp within viewport
            left = Math.min(Math.max(0, left), window.innerWidth - panel.offsetWidth);
            top = Math.min(Math.max(0, top), window.innerHeight - panel.offsetHeight);
            panel.style.left = left + 'px';
            panel.style.top = top + 'px';
            panel.style.bottom = 'auto';
        });

        // Main loop
        setInterval(() => {
            if (!Game || !Game.ready) return;

            if (cheatState.autoCookies) {
                Game.Earn(cheatState.cookiesPerTick * cheatState.cookieMultiplier);
            }

            if (cheatState.autoBuyUpgrades) {
                for (let upg of Game.UpgradesInStore) {
                    if (upg.canBuy()) upg.buy();
                }
            }

            if (cheatState.autoBuyBuildings) {
                for (let b of Game.ObjectsById) {
                    while (b.getPrice() <= Game.cookies) {
                        b.buy(1);
                    }
                }
            }

            if (cheatState.autoGoldenClick) {
                const golden = Game.shimmers.find(s => s.type === 'golden');
                if (golden) golden.pop();
            }

            if (cheatState.autoReindeerClick) {
                const reindeer = Game.shimmers.find(s => s.type === 'reindeer');
                if (reindeer) reindeer.pop();
            }

        }, 500);

        console.log('[Cookie Clicker Cheat Menu] Loaded! Drag the panel to move it.');
    });

})();