// ==UserScript== // @name Code Injector - Starblast.io // @version 1.0.8 // @description Allows different userscripts to define functions that modify the game's code // @author Pixelmelt & Excigma & kklkkj // @namespace https://greasyfork.org/en/users/226344 // @license GPL-3.0 // @match https://starblast.io/ // @run-at document-end // @grant none // @downloadURL https://update.greasyfork.icu/scripts/443953/Code%20Injector%20-%20Starblastio.user.js // @updateURL https://update.greasyfork.icu/scripts/443953/Code%20Injector%20-%20Starblastio.meta.js // ==/UserScript== /* Create a logger */ const log = (msg) => console.log(`%c[Mod injector] ${msg}`, "color: #06c26d"); console.clear() /* Stop non modified scripts from executing */ document.open(); /* little message telling the user to wait for mods to load */ document.write(`Loading...

Loading mods

Please wait

`); document.close(); log(`Started`) function injectLoader(){ /* dont inject into anything but the main page */ if (window.location.pathname != "/"){log(`Injection not needed`); return} /* Set to a specific vesion of sb because of rotating var names. If you want to use the most recent version of sb for your mod- BE WARNED your mod could break at any time due to rotating variable names Changing this URL could lead to your ECP being stolen, be careful! */ var url = "https://starblast.io"; /* Grab the contents of the link*/ var xhr = new XMLHttpRequest(); log("Fetching starblast src..."); xhr.open("GET", url); /* When the request finishes... */ xhr.onreadystatechange = function () { if (xhr.readyState === 4) { var starSRC = xhr.responseText; if(starSRC != undefined){ log(`Src fetched successfully`) }else{ log(`Src fetch failed`) alert("An error occurred whilst fetching game code"); } const start_time = performance.now(); log("Patching src..."); if (!window.sbCodeInjectors) { log("Did not find any Starblast.io userscripts to load. This may be an error, make sure you have scripts installed."); log(`Proceeded to load normally.`) } else { /* Loop through `sbCodeInjectors` and pass src code in for them to modify */ let error_notified = false; for (const injector of window.sbCodeInjectors) { try { /* Run injector from other userscripts */ if (typeof injector === "function") starSRC = injector(starSRC); else { log("Injector was not a function"); console.log(injector); } } catch (error) { /* Only notify the user once if any userscript fails to load helpful to prevent spamming alerts() */ if (!error_notified) { /* An injector from one of the other userscripts failed to load */ alert("One of your Starblast.io userscripts was unable to be loaded"); error_notified = true; } console.error(error); } } } const end_time = performance.now(); log(`Patched src successfully (${(end_time - start_time).toFixed(0)}ms)`); /* Finish up and write the modified code to the docuent */ document.open(); document.write(starSRC); document.close(); // run function once docuemnt is loaded document.addEventListener("DOMContentLoaded", function() { log("Document loaded"); setTimeout(() => { if (!window.sbCodeRunners) { log("No CodeRunners found") }else{ log("CodeRunners found") for(const runner of window.sbCodeRunners){ try{ if(typeof runner === "function"){ runner(); }else{ log("CodeRunner was not a function"); console.log(runner); } }catch(err){ console.error(err); } } }; }, 30); }); }}; /* Send the request */ xhr.send(); } /* ms before trying to inject mods */ setTimeout(injectLoader, 1);