您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A fragment of code from NoobScript V3 - The FPS and resolution setter.
// ==UserScript== // @name Bloble.io NoobScript V3 GameUtils Fragment // @namespace http://tampermonkey.net/ // @version 1.1 // @description A fragment of code from NoobScript V3 - The FPS and resolution setter. // @author NoobishHacker // @match http://bloble.io/* // @grant none // ==/UserScript== window.UIList = window.UIList || []; window.initFuncs = window.initFuncs || []; window.statusItems = window.statusItems || []; // Resolution and FPS chooser. var resolution = 1; var rate = 0; window.removeEventListener("mousemove", gameInput); window.gameInput = function (a) { a.preventDefault(); a.stopPropagation(); mouseX = a.clientX * resolution; mouseY = a.clientY * resolution; } window.addEventListener("mousemove", gameInput, false); window.removeEventListener("resize", resize); window.resize = function (n) { screenWidth = window.innerWidth * resolution; screenHeight = window.innerHeight * resolution; scaleFillNative = MathMAX(screenWidth / maxScreenWidth, screenHeight / maxScreenHeight); if (n !== true) { mainCanvas.width = screenWidth; mainCanvas.height = screenHeight; mainCanvas.style.width = (screenWidth / resolution) + "px"; mainCanvas.style.height = (screenHeight / resolution) + "px"; } mainContext.setTransform(scaleFillNative, 0, 0, scaleFillNative, Math.floor((screenWidth - maxScreenWidth * scaleFillNative) / 2), Math.floor((screenHeight - maxScreenHeight * scaleFillNative) / 2)); player || renderBackground() } window.addEventListener("resize", resize); window.statusItems.push({ order: 3, value: function () { return document.getElementById('fps').textContent; } }, { order: 4, name: 'Resolution', value: function () { return document.getElementById('res').textContent; } }); window.UIList.push({ level: 3, x: 4, html: '<div id="res" onclick=setRes()>Normal Res</div>' }, { level: 3, x: 5, html: '<div id="fps" onclick=setFPS()>Unlim FPS</div>' }, { level: 3, x: 1, html: '<div id="afk" onclick=afk()>AFK off</div>' }); var afkinterval = false; window.afk = function () { var element = document.getElementById('afk'); if (afkinterval) { clearInterval(afkinterval) afkinterval = false; element.textContent = 'AFK off'; } else { afkinterval = setInterval(function () { socket.emit("2", Math.round(camX), Math.round(camY)); }, 1000) element.textContent = 'AFK on'; } } window.setRes = function () { var el = document.getElementById('res'); if (resolution === 2) { resolution = .5; el.textContent = 'Low Res'; } else if (resolution === .5) { resolution = .8; el.textContent = 'Med Res'; } else if (resolution === .8) { resolution = 1; el.textContent = 'Normal Res'; } else if (resolution === 1) { resolution = 1.5; el.textContent = 'High Res'; } else { resolution = 2; el.textContent = 'Retina Res'; } unitSprites = {}; resize(); window.statusBar(); } window.setFPS = function () { var el = document.getElementById('fps'); if (rate === 0) { el.textContent = '45 FPS' rate = 22; } else if (rate === 22) { el.textContent = '40 FPS' rate = 25; } else if (rate === 25) { el.textContent = '35 FPS' rate = 28; } else if (rate === 28) { el.textContent = '30 FPS'; rate = 33; } else if (rate === 33) { el.textContent = '25 FPS'; rate = 40; } else if (rate === 40) { el.textContent = '20 FPS'; rate = 50; } else { el.textContent = 'Unlim FPS'; rate = 0; } window.statusBar(); } window.callUpdate = function () { requestAnimFrame(callUpdate); currentTime = window.performance.now(); var a = currentTime - then; if (a >= rate) { then = currentTime; updateGameLoop(a); } updateMenuLoop(a) } 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)