- // ==UserScript==
- // @name Bloble.io Zoom The Patch
- // @namespace http://tampermonkey.net/
- // @version 1.0
- // @description Zoom Hack.
- // @author IMPERATOR
- // @match http://bloble.io/*
- // @grant none
- // ==/UserScript==
-
- window.UIList = window.UIList || [];
- window.initFuncs = window.initFuncs || [];
- window.statusItems = window.statusItems || [];
-
- window.sendIndex = 0;
- window.loops = 0;
- window.hasSentTarget = false;
- window.usePatch = true;
- window.cache = [];
- window.cacheHeight = 0;
- window.cacheIndexes = 0;
- window.shift = false;
- window.sendFrequency = 1E3 / 15
- window.UIList.push({
- level: 3,
- x: 0,
- description: 'Zoom Patch',
- html: '<div id="patch" onclick=patch()>Disable ZP</div>'
- });
-
- window.statusItems.push({
- name: 'Zoom Patch',
- order: 2,
- value: function () {
- return usePatch ? 'On' : 'Off';
- }
- });
-
- window.patch = function () {
- var el = document.getElementById('patch');
- if (usePatch) {
- usePatch = false
- socket.emit("2", Math.round(camX), Math.round(camY))
- el.textContent = 'Enable ZP'
- } else {
- usePatch = true;
- el.textContent = 'Disable ZP';
- populate();
- }
- window.statusBar();
- return usePatch;
- }
-
-
- function populate() {
- if (!usePatch) return;
- cacheHeight = Math.round(maxScreenHeight / 1080);
- cacheIndexes = cacheHeight * cacheHeight - 1;
- for (var i = cache.length; i < cacheIndexes; i++) {
- cache[i] = spiral(i);
- }
- }
- populate();
-
-
- window.addEventListener('keyup', function (a) {
- a = a.keyCode ? a.keyCode : a.which;
- if (a == 70) { // F to out
- (maxScreenHeight = 30000, maxScreenWidth = 53333, resize(true));
- cameraSpd = (shift ? 1.8 : .85) * (Math.log(maxScreenHeight / 1080) + 1)
- populate()
- }
- if (a == 67) { // C to zoom in
- (maxScreenHeight = 1080, maxScreenWidth = 1920, resize(true))
- cameraSpd = shift ? 1.8 : .85;
- populate()
- }
- if (a === 16) {
- shift = false;
- cameraSpd = .85 * (Math.log(maxScreenHeight / 1080) + 1);
- }
-
- })
- window.addEventListener('keydown', function (a) {
- a = a.keyCode ? a.keyCode : a.which;
- if (a === 16) {
- shift = true;
- cameraSpd = 1.8 * (Math.log(maxScreenHeight / 1080) + 1);
- }
- })
-
- function zoom(a) {
- a = window.event || a;
- a.preventDefault();
- a.stopPropagation();
- scroll = Math.max(-1, Math.min(1, a.wheelDelta || -a.detail))
- if (scroll == -1) { //zoom out
- if (maxScreenHeight < 30000) {
- (maxScreenHeight += 250, maxScreenWidth += 250, resize(true));
- cameraSpd = (shift ? 1.8 : .85) * (Math.log(maxScreenHeight / 1080) + 1)
- scroll = 0
- populate()
- }
- }
-
- if (scroll == 1) { //zoom in
- if (maxScreenHeight > 1080) {
- (maxScreenHeight -= 250, maxScreenWidth -= 250, resize(true))
- cameraSpd = (shift ? 1.8 : .85) * (Math.log(maxScreenHeight / 1080) + 1)
- scroll = 0
- populate()
- }
- }
- }
- mainCanvas.addEventListener ? (window.addEventListener("mousewheel", zoom, !1),
- mainCanvas.addEventListener("DOMMouseScroll", zoom, !1)) : window.attachEvent("onmousewheel", zoom);
-
- function spiral(n) {
- var r = Math.floor((Math.sqrt(n + 1) - 1) / 2) + 1;
- var p = (8 * r * (r - 1)) / 2;
- var en = r * 2;
- var a = (1 + n - p) % (r * 8);
- var pos = [0, 0, r];
- switch (Math.floor(a / (r * 2))) {
- case 0:
- pos[0] = a - r;
- pos[1] = -r;
- break;
- case 1:
- pos[0] = r;
- pos[1] = (a % en) - r;
- break;
- case 2:
- pos[0] = r - (a % en);
- pos[1] = r;
- break;
- case 3:
- pos[0] = -r;
- pos[1] = r - (a % en);
- break;
- }
- return pos;
- }
-
- window.initFuncs.push(function () {
- var js = window.updateGameLoop.toString();
-
- var ind = js.indexOf('if (gameState && mapBounds) {');
- if (ind === -1) ind = js.indexOf('if (gameState&&mapBounds) {');
- if (ind === -1) ind = js.indexOf('if(gameState&&mapBounds){');
-
- var ind2 = js.indexOf('}', ind);
-
- var n = js.substring(0, ind) + 'if(gameState&&mapBounds){if(camXS||camYS)camX+=camXS*cameraSpd*a,camY+=camYS*cameraSpd*a;player.x+camX<mapBounds[0]?camX=mapBounds[0]-player.x:player.x+camX>mapBounds[0]+mapBounds[2]&&(camX=mapBounds[0]+mapBounds[2]-player.x);player.y+camY<mapBounds[1]?camY=mapBounds[1]-player.y:player.y+camY>mapBounds[1]+mapBounds[3]&&(camY=mapBounds[1]+mapBounds[3]-player.y);if(currentTime-lastCamSend>=sendFrequency)if(lastCamSend=currentTime,usePatch&&cacheIndexes)if(lastCamX!=camX||lastCamY!=camY)lastCamX=camX,lastCamY=camY,loop=sendIndex=0;else{if(4>=loop){if(sendIndex%2)(sendIndex-1)%6?socket.emit("2",Math.round(camX),Math.round(camY)):socket.emit("2",0,0);else{var index=sendIndex/2;index>=cacheIndexes?(sendIndex=0,loop++):socket.emit("2",Math.round(camX+1920*cache[index][0]),Math.round(camY+1080*cache[index][1]))}hasSentTarget=!1;sendIndex++}}else lastCamX==camX&&lastCamY==camY&&hasSentTarget||(lastCamX=camX,hasSentTarget=!0,lastCamY=camY,loop=0,socket.emit("2",Math.round(camX),Math.round(camY)))}' +
- js.substr(ind2 + 1);
- n = n.substring(n.indexOf('{') + 1, n.lastIndexOf('}'));
- window.updateGameLoop = new Function('a', n)
-
- });
-
- window.makeUI = function () {
- if (window.hasMadeUI) return;
- window.hasMadeUI = true;
- window.statusItems.sort(function (a, b) {
- return a.order - b.order;
- })
- var levels = [];
- window.UIList.forEach((item) => {
- if (!levels[item.level]) levels[item.level] = [];
- levels[item.level].push(item)
- })
-
- levels = levels.filter((a) => {
- if (a) {
- a.sort(function (a, b) {
- return a.x - b.x;
- })
- return true;
- } else {
- return false;
- }
- })
-
- var headAppend = document.getElementsByTagName("head")[0],
- style = document.createElement("div");
-
- var toast = document.createElement('div');
- toast.id = "snackbar";
- var css = document.createElement('div');
-
- css.innerHTML = '<style>\n\
- #snackbar {\n\
- visibility: hidden;\n\
- min-width: 250px;\n\
- margin-left: -125px;\n\
- background-color: rgba(40, 40, 40, 0.5);\n\
- color: #fff;\n\
- text-align: center;\n\
- border-radius: 4px;\n\
- padding: 10px;\n\
- font-family: "regularF";\n\
- font-size: 20px;\n\
- position: fixed;\n\
- z-index: 100;\n\
- left: 50%;\n\
- top: 30px;\n\
- }\n\
- #snackbar.show {\n\
- visibility: visible;\n\
- -webkit-animation: fadein 0.5s;\n\
- animation: fadein 0.5s;\n\
- }\n\
- #snackbar.hide {\n\
- visibility: visible;\n\
- -webkit-animation: fadeout 0.5s;\n\
- animation: fadeout 0.5s;\n\
- }\n\
- @-webkit-keyframes fadein {\n\
- from {top: 0; opacity: 0;}\n\
- to {top: 30px; opacity: 1;}\n\
- }\n\
- @keyframes fadein {\n\
- from {top: 0; opacity: 0;}\n\
- to {top: 30px; opacity: 1;}\n\
- }\n\
- @-webkit-keyframes fadeout {\n\
- from {top: 30px; opacity: 1;}\n\
- to {top: 0; opacity: 0;}\n\
- }\n\
- @keyframes fadeout {\n\
- from {top: 30px; opacity: 1;}\n\
- to {top: 0; opacity: 0;}\n\
- }\n\
- </style>'
- var height = levels.length * (14 + 19) + (levels.length - 1) * 7 + 15;
- style.innerHTML = "<style>\n\
- #noobscriptUI, #noobscriptUI > div > div {\n\
- background-color:rgba(40,40,40,.5);\n\
- margin-left: 3px;\n\
- border-radius:4px;\n\
- pointer-events:all\n\
- }\n\
- #noobscriptUI {\n\
- top: -" + (height + 12) + "px;\n\
- transition: 1s;\n\
- margin-left:10px;\n\
- position:absolute;\n\
- padding-left:24px;\n\
- margin-top:9px;\n\
- padding-top:15px;\n\
- width:580px;\n\
- height: " + height + "px;\n\
- font-family:arial;\n\
- left:25%\n\
- }\n\
- #noobscriptUI:hover{\n\
- top:0px\n\
- }\n\
- #noobscriptUI > div > div {\n\
- color:#fff;\n\
- padding:7px;\n\
- height:19px;\n\
- display:inline-block;\n\
- cursor:pointer;\n\
- font-size:15px\n\
- }\n\
- </style>"
-
- headAppend.appendChild(style);
- headAppend.appendChild(css);
-
-
- var contAppend = document.getElementById("gameUiContainer"),
- menuA = document.createElement("div");
-
- var code = ['<div id="noobscriptUI">\n'];
-
- levels.forEach((items, i) => {
- code.push(i === 0 ? ' <div>\n' : ' <div style="margin-top:7px;">\n');
- items.forEach((el) => {
- code.push(' ' + el.html + '\n');
- })
- code.push(' </div>\n');
- })
- code.push(' <div id="confinfo" style="margin-top:4px; color: white; text-align: center; font-size: 10px; white-space:pre"></div>')
- code.push('</div>');
-
- menuA.innerHTML = code.join("");
- contAppend.insertBefore(menuA, contAppend.firstChild)
- contAppend.appendChild(toast)
- var toastTimeout = false;
- window.showToast = function (msg) {
- toast.textContent = msg;
-
- if (toastTimeout) clearTimeout(toastTimeout);
- else toast.className = "show";
- toastTimeout = setTimeout(function () {
- toast.className = 'hide'
- setTimeout(function () {
- toast.className = '';
- }, 400);
- toastTimeout = false;
- }, 3000);
- }
- window.statusBar = function () {
- var el = document.getElementById('confinfo');
- var text = [];
-
- window.statusItems.forEach((item, i) => {
- if (i !== 0) text.push(' ');
- if (item.name) text.push(item.name + ': ');
- text.push(item.value());
- })
-
- el.textContent = text.join('');
- }
- window.statusBar();
-
- window.initFuncs.forEach((func) => {
- func();
- })
- }
- setTimeout(() => {
- window.makeUI();
- }, 1000)