🏠 

Greasy Fork is available in English.

Shadam's unlag FIXED

THIS IS NOT MY SCRIPT THIS IS JUST A FIXED VERSION OF SHADAM'S (SHADMAN CONTACT ME IF YOU WANT THIS TAKEN DOWN) ORIGINAL: https://greasyfork.org/en/scripts/420008-unlag

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.greasyfork.org/scripts/450802/1163153/Shadam%27s%20unlag%20FIXED.js

// ==UserScript==
// @name         Shadam's unlag FIXED
// @version      0.0
// @description  THIS IS NOT MY SCRIPT THIS IS JUST A FIXED VERSION OF SHADAM'S (SHADMAN CONTACT ME IF YOU WANT THIS TAKEN DOWN) ORIGINAL: https://greasyfork.org/en/scripts/420008-unlag
// @author       Shädam
// @match        https://diep.io/*
// @grant        none
// @namespace    https://greasyfork.org/users/719520
// @run-at		document-start
// ==/UserScript==
var int = unsafeWindow.setInterval(function() {
if(unsafeWindow.input != null) {
unsafeWindow.clearInterval(int);
onready();
}
}, 100);
function onready() {
let ping = false;
let t;
let samples = new Array(500);
let m;
let h = 0;
function getMax() {
let max = 0;
for(let i = 0; i < 500; ++i) {
if(samples[i] != null) {
if(samples[i] > max) {
max = samples[i];
}
} else {
break;
}
}
m = max;
}
function sleep(time) {
return new Promise(function(resolve) {
setTimeout(resolve, time);
});
}
unsafeWindow.WebSocket = class extends WebSocket {
constructor(ip) {
super(ip);
if(ip.match(/\.hiss\.io/) != null) {
samples = new Array(500);
h = 0;
ping = false;
this.send = new Proxy(this.send, {
apply: function(to, what, args) {
if(args[0].length == 1) {
ping = true;
t = new Date().getTime();
}
return to.apply(what, args);
}
});
let a = unsafeWindow.setInterval(function() {
if(this.onmessage != null) {
unsafeWindow.clearInterval(a);
this.onmessage = new Proxy(this.onmessage, {
apply: function(to, what, args) {
if(new Uint8Array(args[0].data).length == 1 && ping == true) {
ping = false;
samples[h] = new Date().getTime() - t;
h = (h + 1) % 501;
getMax();
}
return to.apply(what, args);
}
});
}
}.bind(this), 120);
}
}
}
unsafeWindow.powSolver = new Proxy(unsafeWindow.powSolver, {
apply: function(to, what, args) {
const time = new Date().getTime();
const f = args[2];
return to.apply(what, [args[0], args[1], async function(...g) {
if(args[1] == 17 && 10000 - m * 3 - new Date().getTime() + time > 0) {
await sleep(10000 - m * 3 - new Date().getTime() + time);
}
return f(...g);
}]);
}
});
}