Moomoo.io - Hat Macro & Guide Menu

Toggle Macros with "P". Won't work while chatting or creating an alliance tribe.

当前为 2023-10-12 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Moomoo.io - Hat Macro & Guide Menu
// @author       Seryo
// @description  Toggle Macros with "P". Won't work while chatting or creating an alliance tribe.
// @             Shortcuts:
// @             - No Hat: Shift
// @             - Bull Helmet: R
// @             - Tank Gear: Z
// @             - Soldier Helmet: G
// @             - Booster Hat: B
// @             - Flipper Hat: Y
// @             - Winter Cap: N
// @             - EMP Helmet: J
// @             - Fluff Head: I
// @             - Turret Gear: T
// @             - Spike Gear: H
// @             - Samurai Armor: U
// @             - Bearbarian Armor: M
// @             Feel free to mix and match.
// @version      Beta
// @match        *://*.moomoo.io/*
// @namespace    https://greasyfork.org/users/1190411
// @icon         https://cdn.glitch.com/82ae8945-dcc6-4276-98a9-665381b4cd2b/cursor12.png
// @license      MIT
// @grant        none
// @run-at       document-end
// ==/UserScript==

(function () {
    var macrosToggle = 1;
    var macroEventListener = null;
    var menuVisible = false;
    var isDragging = false;
    var initialX;
    var initialY;
    var menuElement = null;

    function isChatOpen() {
        return document.activeElement.id.toLowerCase() === 'chatbox';
    }

    function isAllianceInputActive() {
        return document.activeElement.id.toLowerCase() === 'allianceinput';
    }

    function shouldHandleHotkeys() {
        return !isChatOpen() && !isAllianceInputActive();
    }

    function toggleMacros() {
        macrosToggle = (macrosToggle + 1) % 2;
        document.title = macrosToggle === 1 ? "нaтѕ-on" : "нaтѕ-oғғ";

        var macroStateElement = document.getElementById("macroState");
        macroStateElement.textContent = macrosToggle === 1 ? "On" : "Off";

        if (macrosToggle === 1) {
            macroEventListener = function (e) {
                if (shouldHandleHotkeys()) {
                    switch (e.keyCode) {
                        case 16:
                            storeEquip(0);
                            break;
                        case 82:
                            storeEquip(7);
                            break;
                        case 90:
                            storeEquip(40);
                            break;
                        case 71:
                            storeEquip(6);
                            break;
                        case 66:
                            storeEquip(12);
                            break;
                        case 89:
                            storeEquip(31);
                            break;
                        case 78:
                            storeEquip(15);
                            break;
                        case 74:
                            storeEquip(22);
                            break;
                        case 73:
                            storeEquip(30);
                            break;
                        case 84:
                            storeEquip(53);
                            break;
                        case 77:
                            storeEquip(26);
                            break;
                        case 85:
                            storeEquip(20);
                            break;
                        case 72:
                            storeEquip(11);
                            break;
                    }
                }
            };

            document.addEventListener('keydown', macroEventListener);
        } else {
            document.removeEventListener('keydown', macroEventListener);
            macroEventListener = null;
        }
    }

    function toggleMenu() {
        var menuElement = document.getElementById('hatMacroMenu');
        if (menuVisible) {
            menuElement.style.display = 'none';
            menuVisible = false;
        } else {
            menuElement.style.display = 'block';
            menuVisible = true;
        }
    }

    function dragStart(e) {
        isDragging = true;
        initialX = e.clientX - menuElement.getBoundingClientRect().left;
        initialY = e.clientY - menuElement.getBoundingClientRect().top;
    }

    function dragEnd() {
        isDragging = false;
    }

    function drag(e) {
        if (!isDragging) return;
        menuElement.style.left = (e.clientX - initialX) + 'px';
        menuElement.style.top = (e.clientY - initialY) + 'px';
    }

    function createMenu() {
        menuElement = document.createElement('div');
        menuElement.id = 'hatMacroMenu';
        menuElement.style.display = 'none';
        menuElement.style.background = 'rgba(0, 0, 0, 0.8)';
        menuElement.style.fontFamily = 'Hammersmith One, sans-serif';
        menuElement.style.position = 'absolute';
        menuElement.style.width = '200px';
        menuElement.style.height = '225px';
        menuElement.style.border = '1.5px solid #000';
        menuElement.style.borderRadius = '8px';
        menuElement.style.boxShadow = '0px 0px 10px rgba(0, 0, 0, 0.8)';
        menuElement.style.top = '20px';
        menuElement.style.right = '20px';
        menuElement.style.zIndex = '9999';
        menuElement.style.overflowY = 'auto';
        menuElement.style.color = '#fff';
        menuElement.style.fontSize = '17px !important';
        menuElement.style.boxShadow = '5px 5px 10px rgba(0, 0, 0, 0.4)';
        menuElement.style.padding = '18px';
        document.body.appendChild(menuElement);

        var tableHTML = `
        <h1 style="font-size: 28px;  margin-top: 15px; text-align: center;">Hat Shortcuts</h1>
        <p style="text-align: center;"<span id="macroState">Off</span></p>
        <table style="margin: 0 auto; text-align: center;">
            <tr>
                <td>No Hat</td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td>Shift</td>
            </tr>
            <tr>
                <td>Bull Helmet</td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td>R</td>
            </tr>
            <tr>
                <td>Tank Gear</td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td>Z</td>
            </tr>
            <tr>
                <td>Soldier Helmet</td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td>G</td>
            </tr>
            <tr>
                <td>Booster Hat</td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td>B</td>
            </tr>
            <tr>
                <td>Flipper Hat</td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td>Y</td>
            </tr>
            <tr>
                <td>Winter Cap</td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td>N</td>
            </tr>
            <tr>
                <td>EMP Helmet</td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td>J</td>
            </tr>
            <tr>
                <td>Fluff Head</td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td>I</td>
            </tr>
            <tr>
                <td>Turret Gear</td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td>T</td>
            </tr>
            <tr>
                <td>Spike Gear</td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td>H</td>
            </tr>
            <tr>
                <td>Samurai Armor</td>
                <td>&nbsp;&nbsp;&nbsp;</td>
                <td>U</td>
            </tr>
            <tr>
                <td>Bearbarian Armor</td>
                <td>&nbsp;&nbsp;</td>
                <td>M</td>
            </tr>
        </table>
        `;

        menuElement.innerHTML = tableHTML;

        menuElement.querySelectorAll('span, td, p').forEach(element => {
            element.style.fontSize = '17px';
            element.style.color = '#fff';
        });

        menuElement.addEventListener('mousedown', dragStart);
        menuElement.addEventListener('mouseup', dragEnd);
        menuElement.addEventListener('mousemove', drag);
    }

    createMenu();

    document.addEventListener('keydown', function (e) {
        if (e.keyCode === 80 && !isChatOpen() && !isAllianceInputActive()) {
            toggleMacros();
        } else if (e.keyCode === 27 &&
            document.activeElement.id.toLowerCase() !== 'chatbox' &&
            allianceMenu.style.display !== 'block' &&
            storeMenu.style.display !== 'block') {
            toggleMenu();
        }
    });

    var headerText = document.querySelector('h1').textContent;
    var macrosEnabled = headerText.includes('Macros On');

    if (macrosEnabled) {
        toggleMacros();
    }
})();