您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
To understand data of messages you send
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.icu/scripts/539331/1607201/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 } }