Greasy Fork

Greasy Fork is available in English.

Bumpyball.io/Pucks.io Decoder

To understand data of messages you send

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.icu/scripts/539331/1607205/BumpyballioPucksio%20Decoder.js

// ==UserScript==
// @name         Bumpyball.io/Pucks.io Decoder
// @namespace    http://greasyfork.icu/en/users/1462379-3lectr0n-nj
// @version      1
// @description  To understand data of messages you send
// @author       3lectr0N!nj@
// @match        https://www.pucks.io/
// @match        https://www.bumpyball.io/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=pucks.io
// @grant        none
// ==/UserScript==
const r7bit =window.r7bit = arr => {let r=0,e=0;for(;35!=e;){let f=arr[e/7];if(r|=(127&f)<<e,0==(128&f))return[r,e/7+1];e+=7}};
const int7 = window.int7=(arr, start) => {let [value, bytes] = r7bit(arr.slice(start));return [value, start+bytes];};
const f32 =window.f32= (arr, start) => {let value = new Float32Array(new Uint8Array(arr.slice(start, start+4)).buffer)[0];return [value, start+4];};
const w7bit =window.w7bit= num => {let r=[];for(;num>=128;num>>=7)r.push((128|num)%256);return r.push(num%256),r};
let td = new TextDecoder()
let te = new TextEncoder()
const ft32 =window.ft32= (value) =>{const floatArray = new Float32Array([value]);const byteArray = new Uint8Array(floatArray.buffer);return Array.from(byteArray);}
let Cars =["Standard","Cruiser","Tricked Out","Bugged Out","Taxi Cab","Hot Rod","Drag Racer","Classic","Soccer Van","Cement Mixer","Apocalypse","Dump Truck","Steam Roller","Pusher","Box Car"]
let SBytes={Join:1,Chat:5,Move:7,}
let boolean = ["False","True"]
const game = window.game = {
    servermsg : {
         sent:[],
        recv:[],
},
    }
function Sdecoder(d){
    let json = {};
    if(d[1]==SBytes.Join){
        json.type = [SBytes.Join,"Join"]
        json.header = [...(d.slice(0,3))]
        json.car = Cars[0]
        d.forEach((value, index) => {
            if (value === 10) {
                if(d[index-1]>37){
            json.name = td.decode(d.slice(index+2,index+2+(d[index+1])))
            }
            }
            if (value === 18) {
            if(d[index+1]==28){
            json.uid = td.decode(d.slice(index+2,index+2+(d[index+1])))
            }
            }
            if (value === 24) {
            json.version =int7(d,index+1)[0]
            }
            if (value === 32) {
                if(d[index+1]<15){
               json.car = Cars[d[index+1]]
                }
            }
            if (value === 42){
                json.password = td.decode(d.slice(index+2,index+2+(d[index+1])))
            }
            if (value === 56){
                if(d[index+1]==1){
            json.auth = d[index+1]
            }
            }
        })
        game.servermsg.sent.push(json)
        return json
    }
    if(d[1]==SBytes.Move){
        json.type = [SBytes.Move,"Move"]
        json.header = [...(d.slice(0,3))]
        json.boost = boolean[0]
        let m
        let e = d.slice(4,4+d[3])
        e.forEach((value, index) => {
            if(value === 8){
            if(e[index+1]==1){
            json.boost = boolean[1]
            }
            }
            if(value === 18){
            if(e[index+1]==0){
            json.move = boolean[0]
            }
            }
            if(value === 13){
            json.direction = "front-back"
             json.units = f32(e,index+1)[0]
            }
            if(value === 21){
             json.direction = "right-left"
             json.units = f32(e,index+1)[0]
            }
            if(value === 24){
            json.pcid = int7(e,index+1)[0]
            }
        })
        game.servermsg.sent.push(json)
        return json
    }
    if(d[1]==SBytes.Chat){
        json.type = [SBytes.Chat,"Chat"]
        json.header = [...(d.slice(0,3))]
        let e = d.slice(4,4+d[3])
        e.forEach((value, index) => {
            if (value === 8){
            json.cid = int7(d,index+1)[0]
            }
            if (value === 18){
            let msg = e.slice(index+2,index+2+e[index+1])
            json.message = td.decode(msg)
            }
        })
        game.servermsg.sent.push(json)
        return json
    }
}