您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A userscript to toggle visibility settings in bonk
当前为
- // ==UserScript==
- // @name No Usernames
- // @version 1.2.2
- // @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
- // ==/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
- },
- 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 = `
- <div class="windowShadow ${injectorName}Menu newbonklobby_elementcontainer" id="${injectorName}Menu" style="display: none;">
- <div class="newbonklobby_boxtop newbonklobby_boxtop_classic" style='overflow-x: auto'>
- <div id="${injectorName}MenuCollapse" class="newbonklobby_settings_button brownButton brownButton_classic buttonShadow" onclick="${collapseMenu}">-</div>
- Settings
- </div>
- <div class="${injectorName}SubMenu">
- <div class="newbonklobby_boxtop newbonklobby_boxtop_classic">
- <p>Players</p>
- </div>
- <table>
- <tr>
- <td class="mapeditor_rightbox_table">
- Visible
- </td>
- <td>
- <input type="checkbox" checked onchange="window.${injectorName}.players.visible = !window.${injectorName}.players.visible">
- </td>
- </tr>
- <tr>
- <td class="mapeditor_rightbox_table">
- Opacity
- </td>
- <td>
- <input type="range" style="width: 5vw" value=100 oninput="window.${injectorName}.players.alpha = this.value/100">
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <div class="${injectorName}SubMenu">
- <div class="newbonklobby_boxtop newbonklobby_boxtop_classic">
- <p>Usernames</p>
- </div>
- <table>
- <tr>
- <td class="mapeditor_rightbox_table">
- Visible
- </td>
- <td>
- <input type="checkbox" checked onchange="window.${injectorName}.players.usernames.visible = !window.${injectorName}.players.usernames.visible">
- </td>
- </tr>
- <tr>
- <td class="mapeditor_rightbox_table">
- Opacity
- </td>
- <td>
- <input type="range" style="width: 5vw" value=100 oninput="window.${injectorName}.players.usernames.alpha = this.value/100">
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- </table>
- </div>
- <div class="${injectorName}SubMenu">
- <div class="newbonklobby_boxtop newbonklobby_boxtop_classic">
- <p>Chat</p>
- </div>
- <table>
- <tr>
- <td class="mapeditor_rightbox_table">
- Visible
- </td>
- <td>
- <input type="checkbox" checked onchange="window.${injectorName}.chat.visible = !window.${injectorName}.chat.visible; window.${injectorName}.chatWindow.style.opacity = +window.${injectorName}.chat.visible;">
- </td>
- </tr>
- <tr>
- <td class="mapeditor_rightbox_table">
- Opacity
- </td>
- <td>
- <input type="range" style="width: 5vw" value=100 oninput="window.${injectorName}.chat.alpha = this.value/100; window.${injectorName}.chatWindow.style.opacity = window.${injectorName}.chat.alpha;">
- </td>
- </tr>
- </table>
- </div>
- </div>`;
- // 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}]){
- 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");