Greasy Fork

Greasy Fork is available in English.

MooMoo.io Bow Insta Helper

Helps you to bow insta faster

当前为 2023-03-16 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         MooMoo.io Bow Insta Helper
// @description  Helps you to bow insta faster
// @author       WEIRD
// @match        *://*.moomoo.io/*
// @require      https://cdnjs.cloudflare.com/ajax/libs/msgpack-lite/0.1.26/msgpack.min.js
// @run-at       document-start
// @grant        unsafeWindow
// @license      MIT
// @version      0.3
// @namespace    http://greasyfork.icu/users/999838
// ==/UserScript==

/*
Press "Z" to toggle the helper
*/

(async () => {
    var inGame = false
    await new Promise(async resolve => {
        let { send } = WebSocket.prototype

        WebSocket.prototype.send = function (...x) {
            send.apply(this, x)
            this.addEventListener("message", e => {
                const [packet, data] = msgpack.decode(new Uint8Array(e.data))
                switch (packet) {
                    case "1":
                        inGame = true
                        break
                    case "11":
                        inGame = false
                        let storeHolder = unsafeWindow.customStore ? document.getElementById("customStoreHolder") : document.getElementById("storeHolder")
                        let storeButton = unsafeWindow.customStore ? document.getElementById("customStoreButton") : document.getElementById("storeButton")
                        let gameUI = document.getElementById("gameUI")
                        let upgradeHolder = document.getElementById("upgradeHolder")
                        let storeMenu = document.getElementById("storeMenu")
                        let chatHolder = document.getElementById("chatHolder")
                        if (toggle) {
                            toggle = false
                            gameUI.style.visibility = null
                            storeButton.style.visibility = null
                            upgradeHolder.style.visibility = null
                            storeMenu.style.visibility = null
                            chatHolder.style.visibility = null

                            storeHolder.style.position = null
                            storeHolder.style.left = null
                            storeHolder.style.top = null

                            upgradeHolder.style.left = null
                            upgradeHolder.style.top = null
                        }
                        break
                }
            })
            resolve(this)
        }
    })

    function waitForElm(selector) {
        return new Promise(resolve => {
            if (document.querySelector(selector)) {
                return resolve(document.querySelector(selector));
            }

            const observer = new MutationObserver(mutations => {
                if (document.querySelector(selector)) {
                    resolve(document.querySelector(selector));
                    observer.disconnect();
                }
            });

            observer.observe(document.body, {
                childList: true,
                subtree: true
            });
        });
    }

    const mouse = {
        x: null,
        y: null
    }
    let toggle = false

    document.addEventListener("keydown", event => {
        if (inGame && event.code == "KeyZ"
            && document.getElementById("allianceMenu").style.display != "block"
            && document.getElementById("chatHolder").style.display != "block") {
            let storeHolder = unsafeWindow.customStore ? document.getElementById("customStoreHolder") : document.getElementById("storeHolder")
            let storeButton = unsafeWindow.customStore ? document.getElementById("customStoreButton") : document.getElementById("storeButton")
            let gameUI = document.getElementById("gameUI")
            let upgradeHolder = document.getElementById("upgradeHolder")
            let storeMenu = document.getElementById("storeMenu")
            let chatHolder = document.getElementById("chatHolder")
            if (toggle) {
                toggle = false
                gameUI.style.visibility = null
                storeButton.style.visibility = null
                upgradeHolder.style.visibility = null
                storeMenu.style.visibility = null
                chatHolder.style.visibility = null

                storeHolder.style.position = null
                storeHolder.style.left = null
                storeHolder.style.top = null

                upgradeHolder.style.left = null
                upgradeHolder.style.top = null
            } else {
                toggle = true
                gameUI.style.visibility = "hidden"
                storeButton.style.visibility = "visible"
                upgradeHolder.style.visibility = "visible"
                storeMenu.style.visibility = "visible"
                chatHolder.style.visibility = "visible"

                storeHolder.style.position = "absolute"
                storeHolder.style.left = mouse.x - 370 + "px"
                storeHolder.style.top = mouse.y - (window.innerHeight / 2) + "px"

                upgradeHolder.style.left = mouse.x - (window.innerWidth / 1600 * 815) + "px"
                upgradeHolder.style.top = mouse.y - 33 + "px"
            }
        }
    })

    waitForElm("#gameCanvas").then(gameCanvas => {
        gameCanvas.addEventListener("mousemove", event => {
            mouse.x = event.clientX
            mouse.y = event.clientY
        })
    })
})()