No Usernames

A userscript to remove all usernames from ingame

目前為 2022-03-29 提交的版本,檢視 最新版本

// ==UserScript==
// @name         No Usernames
// @version      1.1.0
// @author       Blu
// @description  A userscript to remove all usernames from ingame
// @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;
  
  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;
  }

  #${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;
  }
  
  .${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);
  gui.outerHTML = `
  <div class="windowShadow ${injectorName}Menu" id="${injectorName}Menu">
    <div class="newbonklobby_boxtop newbonklobby_boxtop_classic">
      <div id="${injectorName}MenuCollapse" class="newbonklobby_settings_button brownButton brownButton_classic buttonShadow">-</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>`;

  // newSrc = newSrc.replace(`render(f1Q,L1Q,S1Q,x1Q,V1Q,G1Q) {`, `render(f1Q,L1Q,S1Q,x1Q,V1Q,G1Q) { debugger;`);

  // control username visibility/opacity
  newSrc = newSrc.replace(`this.discGraphics[J1Q]=null;}`, `this.discGraphics[J1Q]=null;} else {
    if(this.discGraphics[J1Q]){
      this.discGraphics[J1Q].nameText.visible = window.${injectorName}.players.usernames.visible;
      this.discGraphics[J1Q].nameText.alpha = window.${injectorName}.players.usernames.alpha;
    }
  }`);
  // control player visibility/opacity
  newSrc = newSrc.replace(`render(f1Q,L1Q,S1Q,x1Q,V1Q,G1Q) {`, `render(f1Q,L1Q,S1Q,x1Q,V1Q,G1Q) {
    this.discContainer.visible = window.${injectorName}.players.visible;
    this.discContainer.alpha = window.${injectorName}.players.alpha;
  `);
  // get chat window when building renderer
  newSrc = newSrc.replace(`build(E2E,R2E) {`, `build(E2E,R2E) {
    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");