您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
just a funny script.. Sends a message when a player appears on the screen
// ==UserScript== // @name Hello! I'm stupid man! [ Patched ] // @namespace - // @version 0.1 // @description just a funny script.. Sends a message when a player appears on the screen // @author Devil D. Nudo#7346 // @match *://*.moomoo.io/* // @match *://moomoo.io/* // @grant none // @run-at document-start // ==/UserScript== (function() { "use strict" class MsgPack { static decodeData(data) { if (!data || typeof MsgPack.decode !== 'function') return data = MsgPack.decode(new Uint8Array(data)) return data } static encodeData(data) { if (!data || typeof MsgPack.encode !== 'function') return data = new Uint8Array(Array.from(MsgPack.encode(data))) return data } static getFormatedData() { if (!arguments.length) return const type = Array.prototype.slice.call(arguments, 0, 1) const content = Array.prototype.slice.call(arguments, 1) if (!content.length) { console.warn(type[0], "A strange packet with no data being sent") } const data = MsgPack.encode([type[0], [...content]]) return data } } Function.prototype.call = new Proxy(Function.prototype.call, { apply(target, _this, args) { const data = target.apply(_this, args) if (args[1] && args[1].i) { const index = args[1].i if (index === 9) { MsgPack.encode = args[0].encode } if (index === 15) { MsgPack.decode = args[0].decode Function.prototype.call = target } } return data } }) class Config { get stupidMessage() { return "Hello [name]! I'm stupid man!" } } const config = new Config() class Socket { constructor(websocket = null) { this.websocket = websocket this.eventQueue = [] } addEvent(event, callback) { if (!this.websocket) { return this.eventQueue.push({ event: event, callback: callback }) } this.websocket.addEventListener(event, callback) } send() { const data = MsgPack.getFormatedData(...arguments) this.websocket.send(data) } init(sourceThis, callback) { this.websocket = sourceThis for (const event of this.eventQueue) { this.addEvent(event.event, event.callback) } callback.call(this, this.websocket) } } class MyPlayer { constructor() { if (MyPlayer.instance) { return MyPlayer.instance } this.sid = null this.socket = new Socket() MyPlayer.instance = this } onSetupGame(content) { if (this.sid !== null) return this.sid = content[0] } onAddPlayer(content) { const info = [...content[0]] if (info[1] === this.sid) return const message = config.stupidMessage.replace(/\[\w+\]/, info[2]) this.socket.send("ch", message) } onMessage(event) { const data = MsgPack.decodeData(event.data) const type = data[0] const content = [...data[1]] switch (type) { case "1": this.onSetupGame(content) break case "2": this.onAddPlayer(content) break } } } const myPlayer = new MyPlayer() window.WebSocket = class extends WebSocket { constructor(...args) { super(args) myPlayer.socket.init(this, function() { this.addEvent("message", myPlayer.onMessage.bind(myPlayer)) }) } } window.myPlayer = myPlayer })()
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址