Matrix Menu V2 | ESP & X-Ray | Wireframe Players&World

X-RAY Menu

// ==UserScript==
// @name         Matrix Menu V2 | ESP & X-Ray | Wireframe Players&World
// @namespace    http://tampermonkey.net/
// @version      0.2.1
// @description  X-RAY Menu
// @author       Whoami
// @match        *://voxiom.io/*
// @require      https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js
// @icon         https://media.giphy.com/media/CxYGmxv0Oyz4I/giphy.gif
// @grant        none
// @license      MIT
// ==/UserScript==

const originalArrayPush = Array.prototype.push;
const THREE = window.THREE;
const prototype_ = {
    world: {
        wireframe: false,
        visibleOnDamage: true,
        notVisible: true,
        depthFunc: 2
    },
    player: {
        opacity: 0.5,
        wireframe: false
    }
};

Array.prototype.push = function(...args) {
    if (args[0] && args[0].material && args[0].material.type && args[0].material.type === "ShaderMaterial") {
        const material = args[0].material;
        material.opacity = 0;
        material.transparent = prototype_.world.visibleOnDamage;
        material.side = 2;
        material.depthFunc = prototype_.world.depthFunc;
        material.wireframe = prototype_.world.wireframe;
        material.visible = prototype_.world.notVisible;
    }
    if (args[0] && args[0].material && args[0].material.type && args[0].material.type === "MeshBasicMaterial") {
        const material = args[0].material;
        material.opacity = prototype_.player.opacity;
        material.wireframe = prototype_.player.wireframe;
    }
    return originalArrayPush.apply(this, args);
};

const style = document.createElement('style');
style.innerHTML = `
    .menuHeaderText1 {
        font-size: 35px;
        font-weight: 900;
        text-align: center !important;
        animation: rgbAnimation 0.5s infinite alternate;
    }
    .menuItemTitle1 {
        font-size: 18px;
        animation: rgbAnimation 0.5s infinite alternate;
    }
    @keyframes rgbAnimation {
        0% { color: rgb(255, 0, 0); }
        25% { color: rgb(255, 255, 0); }
        50% { color: rgb(0, 255, 0); }
        75% { color: rgb(0, 255, 255); }
        100% { color: rgb(255, 0, 255); }
    }
    .menuItem1:hover img {
        transform: scale(1.1);
    }
    #menuContainer {
        position: fixed;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        background-color: #212121;
        padding: 10px;
        border-radius: 10px;
        border: revert-layer;
        z-index: 1000;
        max-width: 400px;
        font-size: 14px;
        line-height: 1.5;
        box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
    }
    #menuContainer * {
        -webkit-font-smoothing: antialiased;
        font-smoothing: antialiased;
    }
    #menuContainer label {
        color: white !important;
        font-weight: bold;
    }
    .tab {
        display: flex;
        justify-content: space-around;
        margin-bottom: 10px;
    }
    .tab button {
        background-color: #f0f0f0;
        border: 1px solid #ccc;
        padding: 3px 5px;
        width: 100%;
        cursor: pointer;
    }
    .tab button.active {
        background-color: #ccc;
    }
    .tabcontent {
        display: none;
        margin-top: 10px;
    }
    .tabcontent.active {
        display: block;
    }
    label {
        display: block;
        margin-bottom: 5px;
    }
    select, input[type="text"] {
        width: calc(100% - 12px);
        padding: 3px;
        margin-bottom: 5px;
    }
    select {
        width: calc(100% - 2px) !important;
    }
    .header {
        position: relative;
        text-align: center;
    }
    .headerContent {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
    }
    .header h2 {
        margin: 0;
        position: relative;
        bottom: -100px;
    }
    .headerImage {
        width: 100%;
        height: auto;
        margin-top: -50px;
        border-radius: 10px;
        object-fit: cover;
    }
    @import url(https://fonts.googleapis.com/css2?family=Space+Grotesk:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900&display=swap);
    @import url(https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900&display=swap);
    div div b {
        font-family: Montserrat;
    }
    h2.menuHeaderText1 {
        display: none;
    }
    button.active {
        font-family: Space Grotesk;
    }
    div div button {
        font-family: Space Grotesk;
        background-color: #7300a8;
        border-color: #000000;
        color: #eceff1;
        border-radius: 3px;
    }
    div div label {
        font-family: Montserrat;
    }
    div div select {
        font-family: Space Grotesk;
        background-color: #000000;
        color: #f5f5f5;
        text-decoration: overline;
        border-color: #7300a8;
        border-radius: 3px;
        text-align: center;
        height: 40px;
    }
    div div input {
        background-color: #7300a8;
        border-color: #000000;
        color: #ffffff;
        border-radius: 6px;
    }
    div div div {
        background-color: #000000;
    }
    div.sc-iJKOTD.jqbzkO {
        display: none;
    }
    a.sc-giYglK.bzRdHa {
        display: none;
    }
    img.sc-pVTFL.iRqeFU {
        display: none;
    }
    #menuContainer {
        width: 500px;
    }
    img.sc-ibSMNl.emCBjU {
        display: none;
    }
    div.sc-lbCmg.kLCLJb {
        text-decoration: overline;
        font-family: Montserrat;
    }
    div.sc-bgMUWu.hqpBqs {
        font-family: Montserrat;
    }
    div.sc-ivsNig.kqMamr {
        font-family: Montserrat;
    }
    div.sc-bxYNtK.ekaCUa {
        font-family: Montserrat;
    }
    div.sc-inrDdN.ehvxZP {
        font-family: Montserrat;
        align-items: center;
    }
    div.sc-fBgqEL.ljNuSc {
        background-color: #212121;
    }
    div.sc-ikJyIC.vCrTy {
        background-color: #7300a8;
        opacity: 0.4;
    }
    div.sc-jwrNVz.fVmNa {
        background-color: #7300a8;
        border-radius: 5px;
        height: 50px;
        align-items: center;
        padding-left: 40px;
    }
    div.sc-hnCQzQ.gFCsYN {
        font-family: Montserrat;
    }
    a.sc-cgLTVH.hqKrdE {
        font-family: Montserrat;
    }
`;
document.head.appendChild(style);

const menuContainer = document.createElement('div');
menuContainer.id = 'menuContainer';
document.body.appendChild(menuContainer);

const header = document.createElement('div');
header.innerHTML = `
    <div class="header">
        <h2 class='menuHeaderText1'>WHOAMI CHEATS</h2>
    </div>
    <b>"O" Exit</b>
`;
menuContainer.appendChild(header);

const tab = document.createElement('div');
tab.className = 'tab';
tab.innerHTML = `
    <button class="tablinks active" onclick="openTab(event, 'mainMenu')">Main Menu</button>
    <button class="tablinks" onclick="openTab(event, 'players')">Players</button>
    <button class="tablinks" onclick="openTab(event, 'world')">World</button>
`;
menuContainer.appendChild(tab);

const mainMenu = document.createElement('div');
mainMenu.id = 'mainMenu';
mainMenu.className = 'tabcontent active';
mainMenu.innerHTML = `
    <label for="opacity"><span class='menuItemTitle1'>Opacity:</span></label>
    <select id="opacity">
        <option value="0">0</option>
        <option value="0.1">0.1</option>
        <option value="0.2">0.2</option>
        <option value="0.3">0.3</option>
        <option value="0.4">0.4</option>
        <option value="0.5">0.5</option>
        <option value="0.6">0.6</option>
        <option value="0.7">0.7</option>
        <option value="0.8">0.8</option>
        <option value="0.9">0.9</option>
        <option value="1">1</option>
    </select>
    <button onclick="resetSettings()">Reset to Defaults</button>
`;
menuContainer.appendChild(mainMenu);

const players = document.createElement('div');
players.id = 'players';
players.className = 'tabcontent';
players.innerHTML = `
    <label for="playerOpacity"><span class='menuItemTitle1'>Player Opacity:</span></label>
    <select id="playerOpacity">
        <option value="0">0</option>
        <option value="0.1">0.1</option>
        <option value="0.2">0.2</option>
        <option value="0.3">0.3</option>
        <option value="0.4">0.4</option>
        <option value="0.5">0.5</option>
        <option value="0.6">0.6</option>
        <option value="0.7">0.7</option>
        <option value="0.8">0.8</option>
        <option value="0.9">0.9</option>
        <option value="1">1</option>
    </select>
`;
menuContainer.appendChild(players);

const world = document.createElement('div');
world.id = 'world';
world.className = 'tabcontent';
world.innerHTML = `
    <label for="wireframe"><span class='menuItemTitle1'>World Wireframe:</span></label>
    <select id="wireframe">
        <option value="true">True</option>
        <option value="false" selected>False</option>
    </select>
`;
menuContainer.appendChild(world);

function openTab(evt, tabName) {
    const tabcontent = document.getElementsByClassName('tabcontent');
    for (let i = 0; i < tabcontent.length; i++) {
        tabcontent[i].style.display = 'none';
        tabcontent[i].classList.remove('active');
    }
    const tablinks = document.getElementsByClassName('tablinks');
    for (let i = 0; i < tablinks.length; i++) {
        tablinks[i].classList.remove('active');
    }
    document.getElementById(tabName).style.display = 'block';
    document.getElementById(tabName).classList.add('active');
    evt.currentTarget.classList.add('active');
}

document.getElementById('opacity').addEventListener('change', function() {
    prototype_.player.opacity = parseFloat(this.value);
});

document.getElementById('playerOpacity').addEventListener('change', function() {
    prototype_.player.opacity = parseFloat(this.value);
});

document.getElementById('wireframe').addEventListener('change', function() {
    prototype_.world.wireframe = this.value === 'true';
});

function resetSettings() {
    prototype_.world.wireframe = false;
    prototype_.player.opacity = 0.5;
    prototype_.world.visibleOnDamage = true;
    prototype_.world.notVisible = true;
    prototype_.world.depthFunc = 2;
    document.getElementById('opacity').value = '0.5';
    document.getElementById('playerOpacity').value = '0.5';
    document.getElementById('wireframe').value = 'false';
}