您需要先安装一个扩展,例如 篡改猴、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
- })()