Greasy Fork is available in English.
Dyskusje » Propozycje stworzenia skryptu/stylu
// ==UserScript// ==UserScript==// @name ! PungHax// @namespace http://tampermonkey.net/// @version 0.1// @description Everything done on client go brr// @author XxcoolGamerZILL// @match *://pung.io/*// @grant none// @run-at document-start// ==/UserScript==// Keys:// F2: Toggle speedhack// F3: Toggle lagswitch (Sent packets)// F4: Toggle lagswitch (Recieved packets)// F6: Add 2 billion coins (function() { // Change this to change your name! var nickname = "person"; // Change this to change your name! var _WebSocket = window.WebSocket; var _send = _WebSocket.prototype.send; var _addEventListener = _WebSocket.prototype.addEventListener; var log; var logctx; var logtext = "none"; var bottext = "Bots: 0"; var toggle = ["Off", "On"]; var botmodes = ["Nothing", "Mirror actions"]; var bottoggle = 0; var botmode = 0; var lagswitch = 0; var lagswitch2 = 0; var lastSentTime = Date.now(); var startSpeedHackTime = Date.now(); var startSpeedHackPerformance = performance.now(); var extraTime = 0; var extraPerformance = 0; var speedhack = 0; var speedmulti = 4; var queue = []; var client = undefined; var xhrAuth = ""; var realID = "291243291243291243"; var oldWarn = window.console.warn; window.console.warn = function(txt) { if (txt.substr(0, 8) != "Received") { oldWarn.apply(console, arguments); } } window.client = undefined; window.xhrAuth = undefined; window.addEventListener("keydown", keys); window.addEventListener("keyup", keys); window.addEventListener('load', function() { log = document.createElement("CANVAS"); logctx = log.getContext("2d"); document.body.appendChild(log); log.style.all = "unset"; log.width = window.innerWidth; log.height = window.innerHeight; log.style.zIndex = "2000000000"; log.style.pointerEvents = "none"; log.style.position = "fixed"; log.style.top = "0px"; log.style.left = "0px"; log.style.bottom = "0px"; log.style.right = "0px"; log.style.width = "100%"; log.style.height = "100%"; log.style.border = "none"; log.style.margin = "0"; log.style.padding = "0"; log.style.overflow = "hidden"; logctx.fillStyle = "#FFFFFF"; logctx.font = "20px Arial"; logctx.fillText(logtext + " | " + bottext, 20, log.height - 40); }); var xmlOpen = XMLHttpRequest.prototype.open; var xmlSend = XMLHttpRequest.send; function ab2str(buf) { return String.fromCharCode.apply(null, new Uint8Array(buf)); } function str2ab(str) { var buf = new ArrayBuffer(str.length); var bufView = new Uint8Array(buf); for (var i=0, strLen=str.length; i 0) { playFab.apply(null, queue[0]); queue.splice(0, 1); } }, 333); window.addEventListener('resize', function() { if (log) { log.width = window.innerWidth; log.height = window.innerHeight; logctx.fillStyle = "#FFFFFF"; logctx.font = "20px Arial"; logctx.fillText(logtext + " | " + bottext, 20, log.height - 40); } }); function inlineWorker(e) { var r = URL.createObjectURL(new Blob(["(", e.toString(), ")()"], { type: "application/javascript" })), t = new Worker(r); URL.revokeObjectURL(r); return t }; function sendData(data) { if (client && client.readyState == 1) { client.send(data); } } function adminMoment() { var responses = 0; var heroData = []; var skillData = []; addCoins(2000000000); playFab("https://fad59.playfabapi.com/Client/GetCatalogItems", {CatalogVersion: "hero"}, function(txt) { var data = JSON.parse(txt); heroData = data.data.Catalog; responses++; if (responses == 2) { run(); } }); playFab("https://fad59.playfabapi.com/Client/GetCatalogItems", {CatalogVersion: "skill"}, function(txt) { var data = JSON.parse(txt); skillData = data.data.Catalog; responses++; if (responses == 2) { run(); } }); function run() { for (let i = 0; i < heroData.length; i++) { queue.push(["https://fad59.playfabapi.com/Client/PurchaseItem", {CatalogVersion: heroData[i].CatalogVersion, ItemId: heroData[i].ItemId, Price: heroData[i].VirtualCurrencyPrices.GG, VirtualCurrency: "GG"}]); } for (let i = 0; i < skillData.length; i++) { queue.push(["https://fad59.playfabapi.com/Client/PurchaseItem", {CatalogVersion: skillData[i].CatalogVersion, ItemId: skillData[i].ItemId, Price: skillData[i].VirtualCurrencyPrices.GG, VirtualCurrency: "GG"}]); } } } window.adminMoment = adminMoment; function playFab(url, data, cb) { if (xhrAuth != undefined) { var xhr = new XMLHttpRequest(); xhr.open("POST", url, true); xhr.setRequestHeader("X-Authorization", xhrAuth); xhr.setRequestHeader("Content-Type", "application/json"); xhr.onload = function() { if (cb != undefined && xhr.readyState === xhr.DONE) { cb(xhr.responseText); } } xhr.send(JSON.stringify(data)); } } function addCoins(coins) { playFab("https://fad59.playfabapi.com/Client/AddUserVirtualCurrency", {Amount: coins, VirtualCurrency: "GG"}); } window.playFab = playFab; var worker = new inlineWorker(function() { var botlimit = 4; var bots = []; var active = 0; var url = undefined; var togglebots = 0; var botmode = 0; var botloop = undefined; var botloading = 0; // Functions function botconnect() { try { if (!botloading && bots.length < botlimit) { bots.push(new WebSocket(url)); botloading++; bots[bots.length - 1].connected = 0; bots[bots.length - 1].onclose = function() { var bot = this; if (!bot.connected) { botloading--; } bots.splice(bots.indexOf(bot), 1); if (bot.connected) { active--; } if (bot.connected && togglebots) { self.postMessage([0, "Bots: " + active]); } } bots[bots.length - 1].onopen = function() { var bot = this; botloading--; active++; bot.connected++; self.postMessage([0, "Bots: " + active]); } } } catch (err) { console.error(err) } } self.onmessage = function(e) { switch (e.data[0]) { case 0: switch (e.data[1]) { case "f4444444444": togglebots++; if (togglebots > 1) { togglebots = 0; clearInterval(botloop); botloop = undefined; self.postMessage([0, "Bots: 0"]); for (let i = 0; i < bots.length; i++) { bots[i].forceExit = 1; bots[i].close(); } } else { botloop = setInterval(botconnect, 50); } break; case "f666666666": botmode++; botmode %= 2; break; } break; case 1: // Broadcast to all active bots for (let i = 0; i < bots.length; i++) { if (bots[i] && bots[i].readyState == 1) { bots[i].send(e.data[1]); } } break; case 2: // Handle server change url = e.data[1]; break; } } }); worker.onmessage = function(e) { switch (e.data[0]) { case 0: // Print to In-Game console bottext = e.data[1]; print(); break; } } function print() { if (logctx) { logctx.clearRect(0, 0, log.width, log.height); logctx.fillStyle = "#FFFFFF"; logctx.font = "20px Arial"; logctx.fillText(logtext + " | " + bottext, 20, log.height - 40); } } function MutableMessageEvent (o) { this.bubbles = o.bubbles || false; this.cancelBubble = o.cancelBubble || false; this.cancelable = o.cancelable || false; this.currentTarget = o.currentTarget || null; this.data = o.data || null; this.defaultPrevented = o.defaultPrevented || false; this.eventPhase = o.eventPhase || 0; this.lastEventId = o.lastEventId || ''; this.origin = o.origin || ''; this.path = o.path || new Array(0); this.ports = o.parts || new Array(0); this.returnValue = o.returnValue || true; this.source = o.source || null; this.srcElement = o.srcElement || null; this.target = o.target || null; this.timeStamp = o.timeStamp || null; this.type = o.type || 'message'; this.prototype = o.prototype || MessageEvent.prototype; } window.WebSocket = function(url, protocol) { if (new.target) { var socket = new _WebSocket(...arguments); if (new URL(url).port == "19091") { // In game client = socket; window.client = socket; } worker.postMessage([2, url]); socket.addEventListener('close', function () { if (client && socket.url == client.url) { client = undefined; window.client = undefined; } }); socket.addEventListener('open', function () { // Code here }); return socket; } else { throw new TypeError("Failed to construct 'WebSocket': Please use the 'new' operator, this DOM object constructor cannot be called as a function."); } }; function intercept(e) { if (client && e.currentTarget.url == client.url) { var data = new Uint8Array(e.data); var cancel = false; if (lagswitch2 && (data[0] != 243 || data[1] != 7)) { cancel = true; } } if (!cancel) { return e; } } function keys(e) { if (e.type == "keydown") { var key = e.key.toLowerCase(); worker.postMessage([0, key]); switch (key) { case "+": e.preventDefault(); speedhack++; speedhack %= 2; logtext = "Speed Hack: " + toggle[speedhack]; print(); if (speedhack) { startSpeedHackTime = oldDateNow(); startSpeedHackPerformance = oldPerformanceNow.call(performance); } else { extraTime += (oldDateNow() - startSpeedHackTime) * speedmulti; extraPerformance += (oldPerformanceNow.call(performance) - startSpeedHackPerformance) * speedmulti; } break; case "f4": e.preventDefault(); lagswitch2++; lagswitch2 %= 2; logtext = "Lag Switch (Recieve): " + toggle[lagswitch2]; print(); break; case "f3": e.preventDefault(); lagswitch++; lagswitch %= 2; logtext = "Lag Switch (Send): " + toggle[lagswitch]; print(); break; case "f1": e.preventDefault(); break; case "f44444444444": e.preventDefault(); bottoggle++; bottoggle %= 2; logtext = "Bots: " + toggle[bottoggle]; print(); break; case "f66666666666": e.preventDefault(); botmode++; botmode %= 2; logtext = "Bot mode: " + botmodes[botmode]; print(); break; case "f6": e.preventDefault(); if (xhrAuth != undefined) { logtext = "Added 2 billion coins!"; addCoins(2000000000); print(); } break; } } } var oldDateNow = Date.now; var oldPerformanceNow = performance.now; Date.now = function(){ return oldDateNow() + extraTime + ((oldDateNow() - startSpeedHackTime) * (speedhack ? speedmulti : 0)); }; performance.now = function(){ return oldPerformanceNow.call(performance) + extraPerformance + ((oldPerformanceNow.call(performance) - startSpeedHackPerformance) * (speedhack ? speedmulti : 0)); }; Object.assign(window.WebSocket, _WebSocket); window.WebSocket.prototype = _WebSocket.prototype; Object.defineProperty(window.WebSocket.prototype, 'onmessage', { 'set': function (func) { var socket = this; var onMessage = function (event) { event = new MutableMessageEvent(event); event = intercept(event); if (event == undefined) { return }; func.call(socket, event); } _addEventListener.apply(socket, ['message', onMessage]); } }); window.WebSocket.prototype.addEventListener = function (type, func) { var socket = this; if (type == "message") { var _func = func; func = function eventHook(event) { event = new MutableMessageEvent(event); event = intercept(event); if (event == undefined) { return }; _func.call(socket, event); }; } _addEventListener.call(socket, type, func); } window.WebSocket.prototype.send = function(data) { var socket = this; var canSend = true; if (client && socket.url == client.url) { data = new Uint8Array(data); if (lagswitch && data[1] != 6) { canSend = false; } } if (canSend) { _send.call(socket, data); if (client && socket.url == client.url) { //console.log("Uint8Array(" + data.length + ") " + data.toString().replaceAll(",", " ")); } } if (botmode == 1) { worker.postMessage([1, data]); } }})();
Zaloguj się, by odpowiedzieć.
// ==UserScript// ==UserScript==
// @name ! PungHax
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Everything done on client go brr
// @author XxcoolGamerZILL
// @match *://pung.io/*
// @grant none
// @run-at document-start
// ==/UserScript==
// Keys:
// F2: Toggle speedhack
// F3: Toggle lagswitch (Sent packets)
// F4: Toggle lagswitch (Recieved packets)
// F6: Add 2 billion coins
(function() {
// Change this to change your name!
var nickname = "person";
// Change this to change your name!
var _WebSocket = window.WebSocket;
var _send = _WebSocket.prototype.send;
var _addEventListener = _WebSocket.prototype.addEventListener;
var log;
var logctx;
var logtext = "none";
var bottext = "Bots: 0";
var toggle = ["Off", "On"];
var botmodes = ["Nothing", "Mirror actions"];
var bottoggle = 0;
var botmode = 0;
var lagswitch = 0;
var lagswitch2 = 0;
var lastSentTime = Date.now();
var startSpeedHackTime = Date.now();
var startSpeedHackPerformance = performance.now();
var extraTime = 0;
var extraPerformance = 0;
var speedhack = 0;
var speedmulti = 4;
var queue = [];
var client = undefined;
var xhrAuth = "";
var realID = "291243291243291243";
var oldWarn = window.console.warn;
window.console.warn = function(txt) {
if (txt.substr(0, 8) != "Received") {
oldWarn.apply(console, arguments);
}
}
window.client = undefined;
window.xhrAuth = undefined;
window.addEventListener("keydown", keys);
window.addEventListener("keyup", keys);
window.addEventListener('load', function() {
log = document.createElement("CANVAS");
logctx = log.getContext("2d");
document.body.appendChild(log);
log.style.all = "unset";
log.width = window.innerWidth;
log.height = window.innerHeight;
log.style.zIndex = "2000000000";
log.style.pointerEvents = "none";
log.style.position = "fixed";
log.style.top = "0px";
log.style.left = "0px";
log.style.bottom = "0px";
log.style.right = "0px";
log.style.width = "100%";
log.style.height = "100%";
log.style.border = "none";
log.style.margin = "0";
log.style.padding = "0";
log.style.overflow = "hidden";
logctx.fillStyle = "#FFFFFF";
logctx.font = "20px Arial";
logctx.fillText(logtext + " | " + bottext, 20, log.height - 40);
});
var xmlOpen = XMLHttpRequest.prototype.open;
var xmlSend = XMLHttpRequest.send;
function ab2str(buf) {
return String.fromCharCode.apply(null, new Uint8Array(buf));
}
function str2ab(str) {
var buf = new ArrayBuffer(str.length);
var bufView = new Uint8Array(buf);
for (var i=0, strLen=str.length; i 0) {
playFab.apply(null, queue[0]);
queue.splice(0, 1);
}
}, 333);
window.addEventListener('resize', function() {
if (log) {
log.width = window.innerWidth;
log.height = window.innerHeight;
logctx.fillStyle = "#FFFFFF";
logctx.font = "20px Arial";
logctx.fillText(logtext + " | " + bottext, 20, log.height - 40);
}
});
function inlineWorker(e) {
var r = URL.createObjectURL(new Blob(["(", e.toString(), ")()"], {
type: "application/javascript"
})),
t = new Worker(r);
URL.revokeObjectURL(r);
return t
};
function sendData(data) {
if (client && client.readyState == 1) {
client.send(data);
}
}
function adminMoment() {
var responses = 0;
var heroData = [];
var skillData = [];
addCoins(2000000000);
playFab("https://fad59.playfabapi.com/Client/GetCatalogItems", {CatalogVersion: "hero"}, function(txt) {
var data = JSON.parse(txt);
heroData = data.data.Catalog;
responses++;
if (responses == 2) {
run();
}
});
playFab("https://fad59.playfabapi.com/Client/GetCatalogItems", {CatalogVersion: "skill"}, function(txt) {
var data = JSON.parse(txt);
skillData = data.data.Catalog;
responses++;
if (responses == 2) {
run();
}
});
function run() {
for (let i = 0; i < heroData.length; i++) {
queue.push(["https://fad59.playfabapi.com/Client/PurchaseItem", {CatalogVersion: heroData[i].CatalogVersion, ItemId: heroData[i].ItemId, Price: heroData[i].VirtualCurrencyPrices.GG, VirtualCurrency: "GG"}]);
}
for (let i = 0; i < skillData.length; i++) {
queue.push(["https://fad59.playfabapi.com/Client/PurchaseItem", {CatalogVersion: skillData[i].CatalogVersion, ItemId: skillData[i].ItemId, Price: skillData[i].VirtualCurrencyPrices.GG, VirtualCurrency: "GG"}]);
}
}
}
window.adminMoment = adminMoment;
function playFab(url, data, cb) {
if (xhrAuth != undefined) {
var xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
xhr.setRequestHeader("X-Authorization", xhrAuth);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onload = function() {
if (cb != undefined && xhr.readyState === xhr.DONE) {
cb(xhr.responseText);
}
}
xhr.send(JSON.stringify(data));
}
}
function addCoins(coins) {
playFab("https://fad59.playfabapi.com/Client/AddUserVirtualCurrency", {Amount: coins, VirtualCurrency: "GG"});
}
window.playFab = playFab;
var worker = new inlineWorker(function() {
var botlimit = 4;
var bots = [];
var active = 0;
var url = undefined;
var togglebots = 0;
var botmode = 0;
var botloop = undefined;
var botloading = 0;
// Functions
function botconnect() {
try {
if (!botloading && bots.length < botlimit) {
bots.push(new WebSocket(url));
botloading++;
bots[bots.length - 1].connected = 0;
bots[bots.length - 1].onclose = function() {
var bot = this;
if (!bot.connected) {
botloading--;
}
bots.splice(bots.indexOf(bot), 1);
if (bot.connected) {
active--;
}
if (bot.connected && togglebots) {
self.postMessage([0, "Bots: " + active]);
}
}
bots[bots.length - 1].onopen = function() {
var bot = this;
botloading--;
active++;
bot.connected++;
self.postMessage([0, "Bots: " + active]);
}
}
} catch (err) { console.error(err) }
}
self.onmessage = function(e) {
switch (e.data[0]) {
case 0:
switch (e.data[1]) {
case "f4444444444":
togglebots++;
if (togglebots > 1) {
togglebots = 0;
clearInterval(botloop);
botloop = undefined;
self.postMessage([0, "Bots: 0"]);
for (let i = 0; i < bots.length; i++) {
bots[i].forceExit = 1;
bots[i].close();
}
} else {
botloop = setInterval(botconnect, 50);
}
break;
case "f666666666":
botmode++;
botmode %= 2;
break;
}
break;
case 1: // Broadcast to all active bots
for (let i = 0; i < bots.length; i++) {
if (bots[i] && bots[i].readyState == 1) {
bots[i].send(e.data[1]);
}
}
break;
case 2: // Handle server change
url = e.data[1];
break;
}
}
});
worker.onmessage = function(e) {
switch (e.data[0]) {
case 0: // Print to In-Game console
bottext = e.data[1];
print();
break;
}
}
function print() {
if (logctx) {
logctx.clearRect(0, 0, log.width, log.height);
logctx.fillStyle = "#FFFFFF";
logctx.font = "20px Arial";
logctx.fillText(logtext + " | " + bottext, 20, log.height - 40);
}
}
function MutableMessageEvent (o) {
this.bubbles = o.bubbles || false;
this.cancelBubble = o.cancelBubble || false;
this.cancelable = o.cancelable || false;
this.currentTarget = o.currentTarget || null;
this.data = o.data || null;
this.defaultPrevented = o.defaultPrevented || false;
this.eventPhase = o.eventPhase || 0;
this.lastEventId = o.lastEventId || '';
this.origin = o.origin || '';
this.path = o.path || new Array(0);
this.ports = o.parts || new Array(0);
this.returnValue = o.returnValue || true;
this.source = o.source || null;
this.srcElement = o.srcElement || null;
this.target = o.target || null;
this.timeStamp = o.timeStamp || null;
this.type = o.type || 'message';
this.prototype = o.prototype || MessageEvent.prototype;
}
window.WebSocket = function(url, protocol) {
if (new.target) {
var socket = new _WebSocket(...arguments);
if (new URL(url).port == "19091") { // In game
client = socket;
window.client = socket;
}
worker.postMessage([2, url]);
socket.addEventListener('close', function () {
if (client && socket.url == client.url) {
client = undefined;
window.client = undefined;
}
});
socket.addEventListener('open', function () {
// Code here
});
return socket;
} else {
throw new TypeError("Failed to construct 'WebSocket': Please use the 'new' operator, this DOM object constructor cannot be called as a function.");
}
};
function intercept(e) {
if (client && e.currentTarget.url == client.url) {
var data = new Uint8Array(e.data);
var cancel = false;
if (lagswitch2 && (data[0] != 243 || data[1] != 7)) {
cancel = true;
}
}
if (!cancel) {
return e;
}
}
function keys(e) {
if (e.type == "keydown") {
var key = e.key.toLowerCase();
worker.postMessage([0, key]);
switch (key) {
case "+":
e.preventDefault();
speedhack++;
speedhack %= 2;
logtext = "Speed Hack: " + toggle[speedhack];
print();
if (speedhack) {
startSpeedHackTime = oldDateNow();
startSpeedHackPerformance = oldPerformanceNow.call(performance);
} else {
extraTime += (oldDateNow() - startSpeedHackTime) * speedmulti;
extraPerformance += (oldPerformanceNow.call(performance) - startSpeedHackPerformance) * speedmulti;
}
break;
case "f4":
e.preventDefault();
lagswitch2++;
lagswitch2 %= 2;
logtext = "Lag Switch (Recieve): " + toggle[lagswitch2];
print();
break;
case "f3":
e.preventDefault();
lagswitch++;
lagswitch %= 2;
logtext = "Lag Switch (Send): " + toggle[lagswitch];
print();
break;
case "f1":
e.preventDefault();
break;
case "f44444444444":
e.preventDefault();
bottoggle++;
bottoggle %= 2;
logtext = "Bots: " + toggle[bottoggle];
print();
break;
case "f66666666666":
e.preventDefault();
botmode++;
botmode %= 2;
logtext = "Bot mode: " + botmodes[botmode];
print();
break;
case "f6":
e.preventDefault();
if (xhrAuth != undefined) {
logtext = "Added 2 billion coins!";
addCoins(2000000000);
print();
}
break;
}
}
}
var oldDateNow = Date.now;
var oldPerformanceNow = performance.now;
Date.now = function(){
return oldDateNow() + extraTime + ((oldDateNow() - startSpeedHackTime) * (speedhack ? speedmulti : 0));
};
performance.now = function(){
return oldPerformanceNow.call(performance) + extraPerformance + ((oldPerformanceNow.call(performance) - startSpeedHackPerformance) * (speedhack ? speedmulti : 0));
};
Object.assign(window.WebSocket, _WebSocket);
window.WebSocket.prototype = _WebSocket.prototype;
Object.defineProperty(window.WebSocket.prototype, 'onmessage', {
'set': function (func) {
var socket = this;
var onMessage = function (event) {
event = new MutableMessageEvent(event);
event = intercept(event);
if (event == undefined) { return };
func.call(socket, event);
}
_addEventListener.apply(socket, ['message', onMessage]);
}
});
window.WebSocket.prototype.addEventListener = function (type, func) {
var socket = this;
if (type == "message") {
var _func = func;
func = function eventHook(event) {
event = new MutableMessageEvent(event);
event = intercept(event);
if (event == undefined) { return };
_func.call(socket, event);
};
}
_addEventListener.call(socket, type, func);
}
window.WebSocket.prototype.send = function(data) {
var socket = this;
var canSend = true;
if (client && socket.url == client.url) {
data = new Uint8Array(data);
if (lagswitch && data[1] != 6) {
canSend = false;
}
}
if (canSend) {
_send.call(socket, data);
if (client && socket.url == client.url) {
//console.log("Uint8Array(" + data.length + ") " + data.toString().replaceAll(",", " "));
}
}
if (botmode == 1) {
worker.postMessage([1, data]);
}
}
})();