// ==UserScript== // @name No Usernames // @version 1.3.0 // @author Blu // @description A userscript to toggle visibility settings in bonk // @match https://bonk.io/gameframe-release.html // @run-at document-start // @grant none // @namespace https://greasyfork.org/users/826975 // @downloadURL none // ==/UserScript== // for use as a userscript ensure you have Excigma's code injector userscript // https://greasyfork.org/en/scripts/433861-code-injector-bonk-io const injectorName = `NoUsernames`; const errorMsg = `Whoops! ${injectorName} was unable to load. This may be due to an update to Bonk.io. If so, please report this error! This could also be because you have an extension that is incompatible with \ ${injectorName}`; // global variables for mod contained within object under this namespace window[injectorName] = { players: { usernames: { visible: true, alpha: 1 }, skins: true, visible: true, alpha: 1 }, chat: { visible: true, alpha: 1 } }; function injector(src){ let newSrc = src; parent.document.querySelector('#adboxverticalCurse').style.zIndex = -1; let guiCSS = document.createElement('style'); guiCSS.innerHTML = ` .${injectorName}Menu { background-color: #cfd8cd; width: calc(35.2vw - 400px); min-width: 154px; max-width: 260px; position: absolute; right: 1%; top: 60px; border-radius: 7px; display: unset; transition: ease-in-out 100ms; bottom: auto; height: auto; max-height: 100%; overflow-y: visible; } #${injectorName}MenuCollapse { position: absolute; right: 3px; top: 3px; width: 26px; height: 26px; border-radius: 2px; text-transform: full-width; visibility: visible; } #${injectorName}MenuControls { width:100%; } .${injectorName}SubMenu { margin: 2%; background: rgba(94, 114, 90, .15); border-radius: 2px; overflow-x: hidden; } element::-webkit-scrollbar { display: none; /* for Chrome, Safari, and Opera */ } .${injectorName}SubMenu p { text-align: left; padding-left: 5%; margin: 0; } .${injectorName}SubMenu td:nth-child(2) { text-align: right; }`; document.getElementsByTagName('head')[0].appendChild(guiCSS); let gui = document.createElement('div'); document.getElementById('pagecontainer').appendChild(gui); let collapseMenu = ` let menu = document.querySelector('#${injectorName}Menu'); let submenus = [...menu.querySelectorAll('.NoUsernamesSubMenu')]; let button = document.querySelector('#${injectorName}MenuCollapse'); // maximize menu if(menu.style.visibility == 'hidden'){ menu.style.minWidth = ''; menu.style.width = ''; menu.style.minHeight = ''; menu.style.maxHeight = ''; menu.style.visibility = ''; submenus.forEach(n=>n.style.visibility=''); button.innerText = '-'; // minimize menu } else { menu.style.minWidth = 0; menu.style.width = 0; menu.style.minHeight = 0; menu.style.maxHeight = 0; menu.style.visibility = 'hidden'; submenus.forEach(n=>n.style.visibility='hidden'); button.innerText = '+'; } `; gui.outerHTML = `
`; // hide gui when not in lobby let lobbyShowFunction = newSrc.match(/this\[([\w$]{1,4}\[[0-9]+\]\[[0-9]+\])\]=function\(\).{30,200}true;\$\(document\)/)[1]; newSrc = newSrc.replace(`this[${lobbyShowFunction}]=function(){`, `this[${lobbyShowFunction}]=function(){ document.querySelector('#${injectorName}Menu').style.display = 'none';`); // hide gui when returning to main screen let returnToMainFunction = newSrc.match(/this\[([\w$]{1,4}\[[0-9]+\]\[[0-9]+\])\]=function\(\).{30,200};[\w$]{2,4}\(\);[\w$]{2,4}\[[0-9]+\]\[[\w$]{2,4}\[[0-9]+\]\[[0-9]+\]\]\(\);[\w$]{2,4}\(\);/)[1]; newSrc = newSrc.replace(`this[${returnToMainFunction}]=function(){`, `this[${returnToMainFunction}]=function(){ document.querySelector('#${injectorName}Menu').style.display = 'none';`); // show gui when game shown let fadeInFunction = newSrc.match(/function ([\w$]{2,4})\(\)\{.{30,300}new TWEEN/)[1]; newSrc = newSrc.replace(`function ${fadeInFunction}(){`, `function ${fadeInFunction}(){ document.querySelector('#${injectorName}Menu').style.display = '';`); // control player and username visibility let discID = newSrc.match(/this.discGraphics\[([\w$]{2,4})\]=null;\}/)[1]; newSrc = newSrc.replace(`this.discGraphics[${discID}]=null;}`, `this.discGraphics[${discID}]=null;} else { if(this.discGraphics[${discID}]){ if(!this.discGraphics[${discID}].sfwSkin){ this.discGraphics[${discID}].sfwSkin = new PIXI.Graphics; this.discGraphics[${discID}].sfwSkin.beginFill(this.discGraphics[${discID}].teamify(this.discGraphics[${discID}].avatar.bc, this.discGraphics[${discID}].team)); this.discGraphics[${discID}].sfwSkin.drawCircle(0,0,this.discGraphics[${discID}].radius); this.discGraphics[${discID}].sfwSkin.endFill(); this.discGraphics[${discID}].container.addChildAt(this.discGraphics[${discID}].sfwSkin, ${discID} == this.localPlayerID ? this.discContainer.children.length : 0); } this.discGraphics[${discID}].playerGraphic.visible = window.${injectorName}.players.skins; this.discGraphics[${discID}].sfwSkin.visible = !window.${injectorName}.players.skins; this.discGraphics[${discID}].nameText.visible = window.${injectorName}.players.usernames.visible; this.discGraphics[${discID}].nameText.alpha = window.${injectorName}.players.usernames.alpha; if(this.discGraphics[${discID}].playerID != this.localPlayerID){ this.discGraphics[${discID}].container.visible = window.${injectorName}.players.visible; this.discGraphics[${discID}].container.alpha = window.${injectorName}.players.alpha; } } }`); // get chat window when building renderer let buildRendererFunction = newSrc.match(/(build\([\w$]{2,4},[\w$]{2,4}\)) \{.{30,150}=new [\w$]{2,4}\[[0-9]+\]\(/)[1]; newSrc = newSrc.replace(`${buildRendererFunction} {`, `${buildRendererFunction} { window.${injectorName}.chatWindow = document.querySelector('#ingamechatbox'); `); if(src === newSrc) throw "Injection failed!"; console.log(injectorName+" injector run"); return newSrc; } // Compatibility with Excigma's code injector userscript if(!window.bonkCodeInjectors) window.bonkCodeInjectors = []; window.bonkCodeInjectors.push(bonkCode => { try { return injector(bonkCode); } catch (error) { alert(errorMsg); throw error; } }); console.log(injectorName+" injector loaded");