您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
This is a beta adapter for your ping/FPS in MooMoo.io! + Remove Ad
当前为
- // ==UserScript==
- // @name Beta adapter Ping/Fps! (v3)
- // @name:ru Бета адаптер Ping/Fps! (v3)
- // @namespace none
- // @version 3.1.0
- // @description This is a beta adapter for your ping/FPS in MooMoo.io! + Remove Ad
- // @description:ru Это бета-адаптер для вашего ping/FPS в MooMoo.io! + Удалить Рекламу
- // @author @nudoo
- // @match *://moomoo.io/*
- // @match *://*.moomoo.io/*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=moomoo.io
- // @grant none
- // @run-at document-start
- // ==/UserScript==
- (function() {
- "use strict"
- const adSelectors = [
- "#adCard", "#adBlock", "#promoImgHolder",
- "#pre-content-container"
- ]
- const meaninglessSelectors = [
- "#joinPartyButton", "#partyButton", "#settingsButton",
- `script[src="./libs/howler.core.min.js"]`, "#errorNotification",
- "#youtubeFollow", "#linksContainer2", "#twitterFollow",
- "#followText", "#youtuberOf", "#mobileInstructions",
- "#downloadButtonContainer", "#mobileDownloadButtonContainer", ".downloadBadge",
- "#altServer"
- ]
- const stateColors = {
- enabled: "#7ee559",
- disabled: "#e55959"
- }
- function removeElement(selector) {
- const elements = [ ...document.querySelectorAll(selector) ]
- for (const element of elements) {
- if (!element) continue
- if (!(element.remove instanceof Function)) {
- element.style.display = "none !important"
- element.style.visiblity = "hidden !important"
- continue
- }
- element.remove()
- }
- }
- function removeElements(selectors) {
- for (const selector of selectors) {
- if (!selector) continue
- removeElement(selector)
- }
- }
- function getCustomId(id) {
- id = id.toLowerCase().replace(/(\-|\s)/g, "_")
- return `beta_adapter_${id}`
- }
- function getGameDefaultButton(id) {
- const button = document.createElement("div")
- button.classList.add("menuButton")
- button.id = id
- return button
- }
- function addButtonToSetupCard(name, state, listener) {
- const setupCard = document.getElementById("setupCard")
- const id = getCustomId(name)
- const button = getGameDefaultButton(id)
- button.innerHTML = `<span>${name}</span>`
- button.style.marginTop = "16px"
- setupCard.appendChild(button)
- button.setState = function(_state) {
- const stateColor = stateColors[_state ? "enabled" : "disabled"]
- button.style.backgroundColor = stateColor
- }
- button.setState(state)
- if (!(listener instanceof Function)) return
- button.addEventListener("click", listener.bind(null, button))
- }
- function getRemoveStoreHatsState() {
- return JSON.parse(localStorage.getItem("remove_store_hats"))
- }
- function setRemoveStoreHatsState(_state) {
- localStorage.setItem("remove_store_hats", JSON.stringify(_state))
- }
- function onDOMLoaded() {
- removeElements(adSelectors)
- removeElements(meaninglessSelectors)
- addButtonToSetupCard("Remove store hats", getRemoveStoreHatsState(), (button) => {
- const state = !getRemoveStoreHatsState()
- button.setState(state)
- setRemoveStoreHatsState(state)
- })
- const storeButton = document.getElementById("storeButton")
- const storeTabs = document.querySelectorAll(".storeTab")
- const removeHatsButtons = [ storeButton, ...storeTabs ]
- removeHatsButtons.forEach((button) => {
- button.addEventListener("click", () => {
- if (!getRemoveStoreHatsState()) return
- const interval = setInterval(() => {
- const mainMenu = document.getElementById("mainMenu")
- const hatPreview = document.querySelector(".hatPreview")
- if (mainMenu) return clearInterval(interval)
- if (!hatPreview) return
- removeElement(".hatPreview")
- clearInterval(interval)
- })
- })
- })
- }
- window.location.native_resolution = true
- const oldReqAnimFrame = window.requestAnimationFrame
- window.requestAnimationFrame = function(callback) {
- if (callback.toString().length === 69) {
- return window.setTimeout(callback, 1e3 / 200)
- }
- return oldReqAnimFrame(callback)
- }
- Object.defineProperty(HTMLImageElement.prototype, "src", {
- get() {
- return this[Symbol("src")]
- },
- set(value) {
- if (this.classList.contains("hatPreview")) {
- if (getRemoveStoreHatsState() && (/\/hats\/hat\_/.test(value) || /\/accessories\/access\_/.test(value))) {
- return this.remove()
- }
- }
- this.setAttribute("src", value)
- this[Symbol("src")] = value
- },
- configurable: true
- })
- Object.defineProperty(Object.prototype, "turnSpeed", {
- get() {
- return 0
- },
- set(value) {
- this[Symbol("turnSpeed")] = 0
- },
- configurable: true
- })
- const maxScreenWidth = 1920
- const maxScreenHeight = 1080
- const { lineTo, moveTo } = CanvasRenderingContext2D.prototype
- const gridAlpha = 0.06
- CanvasRenderingContext2D.prototype.moveTo = function(x, y) {
- if (this.globalAlpha === gridAlpha) return
- return moveTo.apply(this, arguments)
- }
- CanvasRenderingContext2D.prototype.lineTo = function(x, y) {
- if (this.globalAlpha === gridAlpha && (y === maxScreenHeight || x === maxScreenWidth)) return
- return lineTo.apply(this, arguments)
- }
- window.addEventListener("DOMContentLoaded", onDOMLoaded)
- })()