Masterix BumpyBall Client

Cheat client for Pucks.io and Bumpyball.io by Masterix

// ==UserScript==
// @name         Masterix BumpyBall Client
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Cheat client for Pucks.io and Bumpyball.io by Masterix
// @author       Masterix
// @match        https://www.pucks.io/*
// @match        https://www.bumpyball.io/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=pucks.io
// @grant        none
// ==/UserScript==

/*=============================================================================================================
  SCRIPT BY MASTERIX! #MCC
  If you want to change/edit my console, please contact me via Discord. Thank you!
  Discord ==> masterix9759
  Thanks for using my cheat. <3
=============================================================================================================*/

// TIP: Click on the "e" key to open the cheat.

let selectedCar;
let usernamearray=[];
let playername;
let controlinterval, controlintervalOwn;
let loaded = false;

//------------------------------------------------SERVER BROWSER------------------------------------------------//

//Amsterdam
const amsterdam_01_8080 = new WebSocket('wss://amsterdam-01.usemapsettings.com:8080/server');
const amsterdam_01_8081 = new WebSocket('wss://amsterdam-01.usemapsettings.com:8081/server');
const amsterdam_01_8082 = new WebSocket('wss://amsterdam-01.usemapsettings.com:8082/server');
const amsterdam_01_8083 = new WebSocket('wss://amsterdam-01.usemapsettings.com:8083/server');
const amsterdam_01_8084 = new WebSocket('wss://amsterdam-01.usemapsettings.com:8084/server');
const amsterdam_01_8085 = new WebSocket('wss://amsterdam-01.usemapsettings.com:8085/server');
const practice_amsterdam_01_8086 = new WebSocket('wss://amsterdam-01.usemapsettings.com:8086/server');
const practice_amsterdam_01_8087 = new WebSocket('wss://amsterdam-01.usemapsettings.com:8087/server');

//Frankfurt
const frankfurt_01_8080 = new WebSocket('wss://frankfurt-01.usemapsettings.com:8080/server');
const frankfurt_01_8081 = new WebSocket('wss://frankfurt-01.usemapsettings.com:8081/server');
const frankfurt_01_8082 = new WebSocket('wss://frankfurt-01.usemapsettings.com:8082/server');
const frankfurt_01_8083 = new WebSocket('wss://frankfurt-01.usemapsettings.com:8083/server');
const frankfurt_01_8084 = new WebSocket('wss://frankfurt-01.usemapsettings.com:8084/server');
const frankfurt_01_8085 = new WebSocket('wss://frankfurt-01.usemapsettings.com:8085/server');
const practice_frankfurt_01_8086 = new WebSocket('wss://frankfurt-01.usemapsettings.com:8086/server');
const practice_frankfurt_01_8087 = new WebSocket('wss://frankfurt-01.usemapsettings.com:8087/server');

//New York City
const newyorkcity_02_8080 = new WebSocket('wss://newyorkcity_02.usemapsettings.com:8080/server');
const newyorkcity_02_8081 = new WebSocket('wss://newyorkcity_02.usemapsettings.com:8081/server');
const newyorkcity_02_8082 = new WebSocket('wss://newyorkcity_02.usemapsettings.com:8082/server');
const newyorkcity_02_8083 = new WebSocket('wss://newyorkcity_02.usemapsettings.com:8083/server');
const newyorkcity_02_8084 = new WebSocket('wss://newyorkcity_02.usemapsettings.com:8084/server');
const newyorkcity_02_8085 = new WebSocket('wss://newyorkcity_02.usemapsettings.com:8085/server');
const practice_newyorkcity_02_8086 = new WebSocket('wss://newyorkcity_02.usemapsettings.com:8086/server');
const practice_newyorkcity_02_8087 = new WebSocket('wss://newyorkcity_02.usemapsettings.com:8087/server');
const practice_newyorkcity_02_8088 = new WebSocket('wss://newyorkcity_02.usemapsettings.com:8088/server');
const practice_newyorkcity_02_8089 = new WebSocket('wss://newyorkcity_02.usemapsettings.com:8089/server');

//San Francisco
const sanfrancisco_01_8080 = new WebSocket('wss://sanfrancisco-01.usemapsettings.com:8080/server');
const sanfrancisco_01_8081 = new WebSocket('wss://sanfrancisco-01.usemapsettings.com:8081/server');
const sanfrancisco_01_8082 = new WebSocket('wss://sanfrancisco-01.usemapsettings.com:8082/server');
const sanfrancisco_01_8083 = new WebSocket('wss://sanfrancisco-01.usemapsettings.com:8083/server');
const sanfrancisco_01_8084 = new WebSocket('wss://sanfrancisco-01.usemapsettings.com:8084/server');
const sanfrancisco_01_8085 = new WebSocket('wss://sanfrancisco-01.usemapsettings.com:8085/server');
const practice_sanfrancisco_01_8086 = new WebSocket('wss://sanfrancisco-01.usemapsettings.com:8086/server');
const practice_sanfrancisco_01_8087 = new WebSocket('wss://sanfrancisco-01.usemapsettings.com:8087/server');

//Singapore
const singapore_01_8080 = new WebSocket('wss://singapore-01.usemapsettings.com:8080/server');
const singapore_01_8081 = new WebSocket('wss://singapore-01.usemapsettings.com:8081/server');
const singapore_01_8082 = new WebSocket('wss://singapore-01.usemapsettings.com:8082/server');
const singapore_01_8083 = new WebSocket('wss://singapore-01.usemapsettings.com:8083/server');
const singapore_01_8084 = new WebSocket('wss://singapore-01.usemapsettings.com:8084/server');
const singapore_01_8085 = new WebSocket('wss://singapore-01.usemapsettings.com:8085/server');
const practice_singapore_01_8086 = new WebSocket('wss://singapore-01.usemapsettings.com:8086/server');
const practice_singapore_01_8087 = new WebSocket('wss://singapore-01.usemapsettings.com:8087/server');

//--------------------------------------------------------------------------------------------------------------//

const client = {};

(function() {
    let alert = '%cCONSOLE LAUNCHED';
    let color = 'color:red;';
    let size = 'font-size:20px;';
    console.warn(alert,color+size);
    console.warn(alert,color+size);
    console.warn(alert,color+size);

    const originalWebSocket = window.WebSocket;
    window.WebSocket = function(...args) {
        const ws = new originalWebSocket(...args);
        const originalSend = ws.send;
        const originalOnMessage = ws.onmessage;
        client.ws = ws;

        ws.send = function(data) {
            if (data instanceof ArrayBuffer) {
                const uint8Array = new Uint8Array(data);
                //console.log("Data:",data);
                const decoder = new TextDecoder();
                if(loaded == false){
                    loaded = true;
                    const usernameStartIndex = 6;
                    let usernameEndIndex = usernameStartIndex;
                    while (usernameEndIndex < uint8Array.length && uint8Array[usernameEndIndex] >= 32 && uint8Array[usernameEndIndex] <= 126) {
                        usernameEndIndex++;
                    }
                    console.log('===============================================');
                    console.log(ws);
                    const usernameArray = uint8Array.slice(usernameStartIndex, usernameEndIndex);
                    usernamearray=Array.from(usernameArray);
                    const getUser = decoder.decode(usernameArray).trim().replace(/[^\x20-\x7E]/g, '');
                    console.log('Logged User:', getUser);
                    playername = getUser;
                    ConsoleLoaded(getUser);
                }
                //console.log('Message Data:', uint8Array);
                //select car
                if(selectedCar==0){
                    var car0 = [8, 1, 18, 47, 10, usernamearray.length, ...usernamearray, 18, 28, 109, 53, 120, 117, 114, 120, 100, 65, 49, 71, 90, 85, 71, 104, 50, 82, 112, 50, 78, 70, 79, 84, 73, 82, 90, 110, 106, 49, 24, 230, 6, 32, 0, 56, 1];
                    originalSend.call(this, new Uint8Array(car0));
                    gameInstance.SendMessage('NetworkLayer','SetSkin', selectedCar);
                }
                if (selectedCar == 1) {
                    var car1 = [8, 1, 18, 47, 10, usernamearray.length, ...usernamearray, 18, 28, 109, 53, 120, 117, 114, 120, 100, 65, 49, 71, 90, 85, 71, 104, 50, 82, 112, 50, 78, 70, 79, 84, 73, 82, 90, 110, 106, 49, 24, 230, 6, 32, 1, 56, 1];
                    originalSend.call(this, new Uint8Array(car1));
                    gameInstance.SendMessage('NetworkLayer','SetSkin', selectedCar);
                }
                if (selectedCar == 2) {
                    var car2 = [8, 1, 18, 47, 10, usernamearray.length,...usernamearray, 18, 28, 109, 53, 120, 117, 114, 120, 100, 65, 49, 71, 90, 85, 71, 104, 50, 82, 112, 50, 78, 70, 79, 84, 73, 82, 90, 110, 106, 49, 24, 230, 6, 32, 2, 56, 1];
                    originalSend.call(this, new Uint8Array(car2));
                    gameInstance.SendMessage('NetworkLayer','SetSkin', selectedCar);
                }
                if (selectedCar == 3) {
                    var car3 = [8, 1, 18, 47, 10, usernamearray.length, ...usernamearray, 18, 28, 109, 53, 120, 117, 114, 120, 100, 65, 49, 71, 90, 85, 71, 104, 50, 82, 112, 50, 78, 70, 79, 84, 73, 82, 90, 110, 106, 49, 24, 230, 6, 32, 3, 56, 1];
                    originalSend.call(this, new Uint8Array(car3));
                    gameInstance.SendMessage('NetworkLayer','SetSkin', selectedCar);
                }
                if (selectedCar == 4) {
                    var car4 = [8, 1, 18, 47, 10, usernamearray.length, ...usernamearray, 18, 28, 109, 53, 120, 117, 114, 120, 100, 65, 49, 71, 90, 85, 71, 104, 50, 82, 112, 50, 78, 70, 79, 84, 73, 82, 90, 110, 106, 49, 24, 230, 6, 32, 4, 56, 1];
                    originalSend.call(this, new Uint8Array(car4));
                    gameInstance.SendMessage('NetworkLayer','SetSkin', selectedCar);
                }
                if (selectedCar == 5) {
                    var car5 = [8, 1, 18, 47, 10, usernamearray.length, ...usernamearray, 18, 28, 109, 53, 120, 117, 114, 120, 100, 65, 49, 71, 90, 85, 71, 104, 50, 82, 112, 50, 78, 70, 79, 84, 73, 82, 90, 110, 106, 49, 24, 230, 6, 32, 5, 56, 1];
                    originalSend.call(this, new Uint8Array(car5));
                    gameInstance.SendMessage('NetworkLayer','SetSkin', selectedCar);
                }
                if (selectedCar == 6) {
                    var car6 = [8, 1, 18, 47, 10, usernamearray.length, ...usernamearray, 18, 28, 109, 53, 120, 117, 114, 120, 100, 65, 49, 71, 90, 85, 71, 104, 50, 82, 112, 50, 78, 70, 79, 84, 73, 82, 90, 110, 106, 49, 24, 230, 6, 32, 6, 56, 1];
                    originalSend.call(this, new Uint8Array(car6));
                    gameInstance.SendMessage('NetworkLayer','SetSkin', selectedCar);
                }
                if (selectedCar == 7) {
                    var car7 = [8, 1, 18, 47, 10, usernamearray.length,...usernamearray, 18, 28, 109, 53, 120, 117, 114, 120, 100, 65, 49, 71, 90, 85, 71, 104, 50, 82, 112, 50, 78, 70, 79, 84, 73, 82, 90, 110, 106, 49, 24, 230, 6, 32, 7, 56, 1];
                    originalSend.call(this, new Uint8Array(car7));
                    gameInstance.SendMessage('NetworkLayer','SetSkin', selectedCar);
                }
                if (selectedCar == 8) {
                    var car8 = [8, 1, 18, 47, 10, usernamearray.length, ...usernamearray, 18, 28, 109, 53, 120, 117, 114, 120, 100, 65, 49, 71, 90, 85, 71, 104, 50, 82, 112, 50, 78, 70, 79, 84, 73, 82, 90, 110, 106, 49, 24, 230, 6, 32, 8, 56, 1];
                    originalSend.call(this, new Uint8Array(car8));
                    gameInstance.SendMessage('NetworkLayer','SetSkin', selectedCar);
                }
                if (selectedCar == 9) {
                    var car9 = [8, 1, 18, 47, 10, usernamearray.length, ...usernamearray, 18, 28, 109, 53, 120, 117, 114, 120, 100, 65, 49, 71, 90, 85, 71, 104, 50, 82, 112, 50, 78, 70, 79, 84, 73, 82, 90, 110, 106, 49, 24, 230, 6, 32, 9, 56, 1];
                    originalSend.call(this, new Uint8Array(car9));
                    gameInstance.SendMessage('NetworkLayer','SetSkin', selectedCar);
                }
                if (selectedCar == 10) {
                    var car10 = [8, 1, 18, 47, 10, usernamearray.length, ...usernamearray, 18, 28, 109, 53, 120, 117, 114, 120, 100, 65, 49, 71, 90, 85, 71, 104, 50, 82, 112, 50, 78, 70, 79, 84, 73, 82, 90, 110, 106, 49, 24, 230, 6, 32, 10, 56, 1];
                    originalSend.call(this, new Uint8Array(car10));
                    gameInstance.SendMessage('NetworkLayer','SetSkin', selectedCar);
                }
                if (selectedCar == 11) {
                    var car11 = [8, 1, 18, 47, 10, usernamearray.length, ...usernamearray, 18, 28, 109, 53, 120, 117, 114, 120, 100, 65, 49, 71, 90, 85, 71, 104, 50, 82, 112, 50, 78, 70, 79, 84, 73, 82, 90, 110, 106, 49, 24, 230, 6, 32, 11, 56, 1];
                    originalSend.call(this, new Uint8Array(car11));
                    gameInstance.SendMessage('NetworkLayer','SetSkin', selectedCar);
                }
                if (selectedCar == 12) {
                    var car12 = [8, 1, 18, 47, 10, usernamearray.length, ...usernamearray, 18, 28, 109, 53, 120, 117, 114, 120, 100, 65, 49, 71, 90, 85, 71, 104, 50, 82, 112, 50, 78, 70, 79, 84, 73, 82, 90, 110, 106, 49, 24, 230, 6, 32, 12, 56, 1];
                    originalSend.call(this, new Uint8Array(car12));
                    gameInstance.SendMessage('NetworkLayer','SetSkin', selectedCar);
                }
                if (selectedCar == 13) {
                    var car13 = [8, 1, 18, 47, 10, usernamearray.length, ...usernamearray, 18, 28, 109, 53, 120, 117, 114, 120, 100, 65, 49, 71, 90, 85, 71, 104, 50, 82, 112, 50, 78, 70, 79, 84, 73, 82, 90, 110, 106, 49, 24, 230, 6, 32, 13, 56, 1];
                    originalSend.call(this, new Uint8Array(car13));
                    console.log("Pusher selected");
                    gameInstance.SendMessage('NetworkLayer','SetSkin', selectedCar);
                }
                // NOT AVAILABLE
                // if (selectedCar == 14) {
                //     var car14 = [8, 1, 18, 45, 10, 6, 77, 84, 88, 54, 54, 54, 18, 28, 109, 53, 120, 117, 114, 120, 100, 65, 49, 71, 90, 85, 71, 104, 50, 82, 112, 50, 78, 70, 79, 84, 73, 82, 90, 110, 106, 49, 24, 230, 6, 32, 14, 56, 1];
                //     originalSend.call(this, new Uint8Array(car14));
                // }

                originalSend.call(this, data);
            }  else {
                console.log('Client Request:', data);
                originalSend.call(this, data);
            }
        };

        return ws;
    };

    document.addEventListener('keydown',e=>{
        switch(e.key){
            case'e':
                id('cheatwindow').style.display='block';
                break;
        }});

    const cheat = top.cheat = {

        unknownmessage: (name) => {
            var message = id('cheatinput').value;
            var encoder = new TextEncoder();
            var encodedMessage = encoder.encode(name+message);
            var messageLength = encodedMessage.length;
            var header = [8, 5, 18, messageLength + 5, 8, 223, 18, 18, messageLength];
            var chatArray = new Uint8Array(header.length + messageLength);
            chatArray.set(header);
            chatArray.set(encodedMessage, header.length);
            client.ws.send(new Uint8Array(chatArray));
            //}
        },

        spambymcc: () => {
            //console.log('Spam by MCC');
            var chatarray = [8, 5, 18, 75, 8, 144, 2, 18, 70, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
                             61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 83, 80, 65, 77, 32, 66, 89, 32, 35, 77, 67, 67, 61, 61, 61, 61,
                             61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61];
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
        },
        clearchat: () => {
            var chatarray = [8, 5, 18, 9, 8, 223, 18, 18, 4, 32, 227, 133, 164];
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
            client.ws.send(new Uint8Array(chatarray));
        },
    };

    //******************************************Cheat Console UI******************************************//

    window.id = top.id = id => top.document.getElementById(id);
    window.crt = top.crt = crt => top.document.createElement(crt);

    window.infobutton = top.infobutton = (name) => {
        let element = crt('input');
        element.id = 'infobutton';
        element.value = name;
        element.type = 'button';
        element.style = button1_CSS;
        element.style.color = 'lightgreen';
        element.style.cursor='default';
        id('cpage1').appendChild(element);
        const page = id('cpage1');
        page.insertBefore(element, page.firstChild); //Puts the button at the beginning
    };

    window.noteLabel = top.noteLabel = (name, affi, al = 0) => {
        let element = crt('label');
        element.id = 'noteLabel';
        if(alert !=1){
            element.innerText = name;
        }
        element.style.color = '#FE2E2E';
        element.style.cursor='default';
        element.style.position='absolute';
        element.style.marginTop='35%';
        element.style.marginLeft='10px';
        element.style.fontSize='18px';
        id(affi).appendChild(element);

        if (al == 1)
            window.alert(name);
    };

    window.noteLabelWithAlert = top.noteLabelWithAlert = (name, altext, affi, m_top='3%', m_left='92%') => {
        let element = crt('label');
        element.id = 'noteLabel';
        element.innerText = name;
        element.style.color = 'white';
        element.style.cursor='default';
        element.style.position='absolute';
        element.style.marginTop=m_top;
        element.style.marginLeft=m_left;
        element.style.fontSize='18px';
        element.style.background='#333';
        element.style.borderRadius='100%';
        element.style.padding='1px 9px 1px 9px';
        element.style.cursor='pointer';
        id(affi).appendChild(element);
        element.addEventListener('click',()=>{
            window.alert(altext);
        });
    };

    window.generalbutton = top.generalbutton = (name,func=()=>{}) => {
        let element = crt('input');
        element.id = 'generalbutton';
        element.value = name;
        element.type = 'button';
        element.style = button1_CSS;
        element.style.color = 'white';
        element.style.cursor='pointer';
        id('cpage1').appendChild(element);
        element.addEventListener('click', func);
        element.classList.add('generalbutton');
    };

    window.player = top.player = (name, forecolor='white', func = () => {}) => {
        let element = crt('input');
        element.id = 'player';
        element.value = name;
        element.type = 'button';
        element.style = button1_CSS;
        element.style.color = forecolor;
        element.style.cursor = 'pointer';
        id('cpage4').appendChild(element);

        buttonanimations(element);
        element.addEventListener('click', func);
    };

    window.switchteams = top.switchteams = (name, func = () => {}) => {
        let element = crt('input');
        element.id = 'switchteams';
        element.value = name;
        element.type = 'button';
        element.style = button1_CSS;
        element.style.cursor = 'default';
        id('cpage5').appendChild(element);

        buttonanimations(element);
        element.addEventListener('click', func);
    };

    window.tabbutton = top.tabbutton = (name, Id, func=()=>{}) => {
        let element = crt('input');
        element.id = Id;
        element.value = name;
        element.type = 'button';
        element.style = tabs_CSS;
        id('leftsidebar').appendChild(element);
        element.addEventListener('click', func);
    };

    window.cheatbutton1 = top.cheatbutton1 = (name, forecolor, func = () => {}) => {
        let element = crt('input');
        element.id = 'cheatbutton1';
        element.value = name;
        element.type = 'button';
        element.style = button1_CSS;
        element.style.color = forecolor;
        element.style.cursor = 'default';
        id('cpage2').appendChild(element);

        buttonanimations(element);
        element.addEventListener('click', func);
    };

    window.carcheat = top.carcheat = (name, func = () => {}) => {
        let element = crt('input');
        element.id = 'cheatbutton1';
        element.value = name;
        element.type = 'button';
        element.style = button1_CSS;
        element.style.color = 'white';
        element.style.cursor = 'default';
        id('cpage3').appendChild(element);

        buttonanimations(element);
        element.addEventListener('click', func);
    };

    window.cheatinput = top.cheatinput = () => {
        let element = crt('input');
        element.id = 'cheatinput';
        element.placeholder='Enter message...';
        element.value = name;
        element.style = input_CSS;
        id('cpage2').appendChild(element);
    };

    function buttonanimations(elem){
        elem.addEventListener('mouseover', () => elem.style = button1_CSS_hover);
        elem.addEventListener('mouseout', () => elem.style = button1_CSS);
        elem.addEventListener('mousedown', () => elem.style = button1_CSS_down);
        elem.addEventListener('mouseup', () => elem.style = button1_CSS);
    }

    document.addEventListener('keydown', function(event) {
        if (event.ctrlKey) {
            event.stopPropagation();
            event.stopImmediatePropagation();
        }
    }, true);

    //---Styles---//

    const cheatWindow_CSS = `
        display:block;
        background: #1a1b16;
        border-radius: 15px;
        border: 1px #646464 solid;
        width: 600px;
        height: 400px;
        z-index: 99999;
        position:absolute;
        top:50%;
        left:50%;
        transform: translate(-50%,-50%);
        box-shadow:0px 0px 5px 5px #333333;
    `;

    const windowtitle_CSS = `
        height:6%;
        background:#161616;
        top:0;
        left:0;
        right:0;
        border-top-left-radius:15px;
        border-top-right-radius:15px;
        color:white;
        text-align:center;
        font-size:130%;
        padding:1%;
    `;

    const closewindow_CSS = `
        height:6%;
        background:red;
        width:6%;
        top:0;
        right:0;
        border-top-right-radius:15px;
        color:white;
        text-align:center;
        font-size:20px;
        padding:1%;
        position:absolute;
        cursor:pointer;
    `;

    const cpages_CSS = `
        display: grid;
        height:91%;
        width:435px;
        background:transparent;
        right:0;
        bottom:0;
        color:white;
        position:absolute;
        border-bottom-right-radius:15px;
        grid-template-columns:1fr 1fr;
        grid-template-rows:1fr 1fr 1fr 1fr 1fr;
        z-index:10;
        overflow-x:hidden;
        overflow-y:auto;
    `;

    const aboutpage_CSS = `
        display: block;
        height:91%;
        width:435px;
        background:transparent;
        right:0;
        bottom:0;
        color:white;
        position:absolute;
        border-bottom-right-radius:15px;
        z-index:10;
        overflow-x:hidden;
        overflow-y:auto;
    `;

    const cpages_CSS_block = `
        display: block;
        height:91%;
        width:435px;
        background:transparent;
        right:0;
        bottom:0;
        color:white;
        border-bottom-right-radius:15px;
        grid-template-columns:1fr 1fr;
        grid-template-rows:1fr 1fr 1fr 1fr 1fr;
        z-index:10;
        overflow-x:hidden;
        overflow-y:auto;
    `;

    const button1_CSS = `
        border-radius:15px;
        background:#333333;
        border:none;
        height:auto;
        width:90%;
        padding:10px;
        margin:10px;
        font-size:16px;
        cursor:pointer;
        color:white;
    `;

    const button1_CSS_hover = `
        border-radius:15px;
        background:#404040;
        border:none;
        height:auto;
        width:90%;
        padding:10px;
        margin:10px;
        font-size:16px;
        cursor:pointer;
        color:white;
    `;

    const button1_CSS_down = `
        border-radius:15px;
        background:#282828;
        border:none;
        height:auto;
        width:90%;
        padding:10px;
        margin:10px;
        font-size:16px;
        cursor:pointer;
        color:white;
    `;

    const input_CSS = `
        border-radius:15px;
        background:#252525;
        border:none;
        height:auto;
        width:180px;
        padding:10px;
        margin:10px;
        font-size:16px;
        color:white;
    `;

    const left_sidebar = `
        display: grid;
        height:91%;
        width:25%;
        background:#111111;
        left:0;
        bottom:0;
        color:white;
        position:absolute;
        border-bottom-left-radius:15px;
        grid-template-columns:1fr;
        grid-template-rows:1fr 1fr 1fr 1fr 1fr 1fr;
        z-index:12;
    `;
    const tabs_CSS = `
        width:auto;
        background:transparent;
        left:0;
        right:0;
        color:white;
        border:none;
        border-bottom:1px #252525 solid;
    `;

    const tabs_CSS_active = `
        width:auto;
        background:#222;
        left:0;
        right:0;
        color:white;
        border:none;
        border-bottom:1px #252525 solid;
    `;

    const tabs_CSS_hover = `
        width:auto;
        background:#666;
        left:0;
        right:0;
        color:white;
        border:none;
        border-bottom:1px #252525 solid;
    `;

    //---Content---//

    const cwindow = document.createElement("div");
    cwindow.id = 'cheatwindow';
    cwindow.style = cheatWindow_CSS;
    cwindow.style.display='none';
    document.body.appendChild(cwindow);

    const el = id('cheatwindow');
    let offsetX, offsetY;

    const cwindow_title = document.createElement("div");
    cwindow_title.id = 'cheatwindowtitle';
    cwindow_title.style = windowtitle_CSS;
    cwindow_title.style.userSelect='none';
    cwindow_title.innerText = 'Masterix BumpyBall Client';
    id('cheatwindow').appendChild(cwindow_title);
    cwindow_title.addEventListener('mousedown', function(e){
        offsetX = e.clientX - el.offsetLeft;
        offsetY = e.clientY - el.offsetTop;

        document.addEventListener('mouseup', stopMoving);
        document.addEventListener('mousemove', startMoving);
    });

    function startMoving(e){
        el.style.left = e.clientX - offsetX + "px";
        el.style.top = e.clientY - offsetY + "px";
    }

    function stopMoving(e){
        document.removeEventListener('mouseup', stopMoving);
        document.removeEventListener('mousemove', startMoving);
    }

    const close_cwindow = document.createElement("div");
    close_cwindow.id = 'close_cwindow';
    close_cwindow.style = closewindow_CSS;
    close_cwindow.innerText = 'X';
    id('cheatwindowtitle').appendChild(close_cwindow);
    close_cwindow.addEventListener('click', () => {
        id('cheatwindow').style.display = 'none';
    });

    const leftsidebar = document.createElement("div");
    leftsidebar.id = 'leftsidebar';
    leftsidebar.style = left_sidebar;
    id('cheatwindow').appendChild(leftsidebar);

    const cpage1 = document.createElement("div");
    cpage1.id = 'cpage1';
    cpage1.style = cpages_CSS;
    id('cheatwindow').appendChild(cpage1);

    const cpage2 = document.createElement("div");
    cpage2.id = 'cpage2';
    cpage2.style = cpages_CSS;
    cpage2.style.display='none';
    id('cheatwindow').appendChild(cpage2);

    const cpage3 = document.createElement("div");
    cpage3.id = 'cpage3';
    cpage3.style = cpages_CSS;
    cpage3.style.display='none';
    id('cheatwindow').appendChild(cpage3);

    const cpage4 = document.createElement("div");
    cpage4.id = 'cpage4';
    cpage4.style = cpages_CSS;
    cpage4.style.display='none';
    id('cheatwindow').appendChild(cpage4);

    const cpage5 = document.createElement("div");
    cpage5.id = 'cpage5';
    cpage5.style = cpages_CSS;
    cpage5.style.display='none';
    id('cheatwindow').appendChild(cpage5);

    const cpage6 = document.createElement("div");
    cpage6.id = 'cpage6';
    cpage6.style = aboutpage_CSS;
    cpage6.innerHTML=`
    <h3>About</h3>

    <p> Creator: Masterix<br>
        Version: 1.0<br>
        Release date: 13th August 2024<br><br>
        Thanks for using my cheat client. <3
    </p>

    <div class="aboutButtonsDIV">
        <button class="sm_button" onclick="javascript:window.open('https://youtube.com/@masterix9944');"><img class="sm_image" src="https://www.google.com/s2/favicons?sz=64&domain=youtube.com"></img>Masterix</button>
        <button class="sm_button" onclick="javascript:window.open('https://www.youtube.com/@whiztech200');"><img class="sm_image" src="https://www.google.com/s2/favicons?sz=64&domain=youtube.com"></img>WhizTech</button>
        <button class="sm_button" onclick="javascript:window.open('https://www.instagram.com/whiztechh/');"><img class="sm_image" src="https://www.google.com/s2/favicons?sz=64&domain=instagram.com"></img>WhizTech</button>
    </div>

    <style>
    h3{
        text-align:center;
        padding-bottom:0px;
    }
    p{
        margin-top:-50px;
    }
    .sm_button{
        border-radius:15px;
        background:#333;
        border:none;
        color:white;
        height:40px;
        width:93%;
        align-items:center;
        justify-content: center;
        display:flex
    }
    .sm_image{
        height:20px;
        margin-right:10px;
    }
    .sm_button:hover{
        background:#444;
        cursor:pointer;
    }
    .aboutButtonsDIV{
        display:grid;
        margin-top:-30px;
        grid-template-columns:1fr 1fr;
        grid-template-rows:0.5fr;
    }
    </style>`;
    cpage6.style.display='none';
    id('cheatwindow').appendChild(cpage6);

    //***********************************************************************************************************************//

    function control(key, code, whichkeycode, delay){
        controlinterval = setInterval(() => {
            const event = new KeyboardEvent('keydown', {
                key: key,
                code: code,
                which: whichkeycode,
                keyCode: whichkeycode,
                bubbles: true,
                cancelable: true
            });
            document.dispatchEvent(event);
        }, delay);
    };

    function controlOwn(key, code, whichkeycode, delay){
        controlintervalOwn = setInterval(() => {
            const event = new KeyboardEvent('keydown', {
                key: key,
                code: code,
                which: whichkeycode,
                keyCode: whichkeycode,
                bubbles: true,
                cancelable: true
            });
            document.dispatchEvent(event);
        }, delay);
    }

    function KeyW_down() {
        const event = new KeyboardEvent('keydown', { key: 'w', code: 'KeyW', which: 87, keyCode: 87, bubbles: true, cancelable: true });
        document.dispatchEvent(event);
    }

    function KeyW_up() {
        const event = new KeyboardEvent('keyup', { key: 'w', code: 'KeyW', which: 87, keyCode: 87, bubbles: true, cancelable: true });
        document.dispatchEvent(event);
    }

    function KeyA_down() {
        const event = new KeyboardEvent('keydown', { key: 'a', code: 'KeyA', which: 65, keyCode: 65, bubbles: true, cancelable: true });
        document.dispatchEvent(event);
    }

    function KeyA_up() {
        const event = new KeyboardEvent('keyup', { key: 'a', code: 'KeyA', which: 65, keyCode: 65, bubbles: true, cancelable: true });
        document.dispatchEvent(event);
    }

    function KeyS_down() {
        const event = new KeyboardEvent('keydown', { key: 's', code: 'KeyS', which: 83, keyCode: 83, bubbles: true, cancelable: true });
        document.dispatchEvent(event);
    }

    function KeyS_up() {
        const event = new KeyboardEvent('keyup', { key: 's', code: 'KeyS', which: 83, keyCode: 83, bubbles: true, cancelable: true });
        document.dispatchEvent(event);
    }

    function KeyD_down() {
        const event = new KeyboardEvent('keydown', { key: 'd', code: 'KeyD', which: 68, keyCode: 68, bubbles: true, cancelable: true });
        document.dispatchEvent(event);
    }

    function KeyD_up() {
        const event = new KeyboardEvent('keyup', { key: 'd', code: 'KeyD', which: 68, keyCode: 68, bubbles: true, cancelable: true });
        document.dispatchEvent(event);
    }

    let autogascheat = crt('input');
    autogascheat.id = 'autogascheat';
    autogascheat.value = 'Auto Gas: OFF';
    autogascheat.type = 'button';
    autogascheat.style = button1_CSS;
    id('cpage4').appendChild(autogascheat);

    buttonanimations(autogascheat);
    autogascheat.addEventListener('click', ()=>{

        if (autogascheat.value == 'Auto Gas: OFF') {
            autogascheat.value = 'Auto Gas: ON';
            control('w', 'KeyW', 87, 0);
        }

        else if (autogascheat.value == 'Auto Gas: ON') {
            clearInterval(controlinterval);
            KeyW_up();
            autogascheat.value = 'Auto Gas: OFF';
        }
    });

    let startinstruction = crt('input');
    startinstruction.id = 'startinstruction';
    startinstruction.value = 'Start Set';
    startinstruction.type = 'button';
    startinstruction.style = button1_CSS;
    startinstruction.style.border = '1px #666 solid';
    id('cpage4').appendChild(startinstruction);

    startinstruction.addEventListener('click', () => {
        let duration = id('instructiondurationinput').value;
        if (startinstruction.value == 'Start Set' && id('instructionlistbox').value != 0 && id('instructiondurationinput').value != 0) {
            startinstruction.value = 'Stop Set';
            var cmd = instructionlistbox.value.split('\n');
            for (let i = 0; i < cmd.length; i++) {
                setTimeout(() => {
                    switch (cmd[i]) {
                        case 'forward':
                            KeyA_up();
                            KeyD_up();
                            KeyS_up();

                            KeyW_up();
                            KeyW_down();
                            break;
                        case 'left':
                            KeyW_up();
                            KeyD_up();
                            KeyS_up();

                            KeyA_up();
                            KeyA_down();
                            break;
                        case 'right':
                            KeyA_up();
                            KeyW_up();
                            KeyS_up();

                            KeyD_up();
                            KeyD_down();
                            break;
                        case 'backward':
                            KeyA_up();
                            KeyW_up();
                            KeyD_up();

                            KeyS_up();
                            KeyS_down();
                            break;
                        case 'stop':
                            KeyA_up();
                            KeyW_up();
                            KeyD_up();
                            KeyS_up();
                            break;
                    }
                }, (i+1) * duration);
            }
        } else if (startinstruction.value == 'Stop Set') {
            KeyA_up();
            KeyW_up();
            KeyD_up();
            KeyS_up();
            startinstruction.value = 'Start Set';
        }

        else {
            window.alert("Please provide a value in the input fields.");
            startinstruction.value = 'Start Set';
        }
    });

    let instructionlabel = crt('label');
    instructionlabel.innerText='Instruction Set';
    instructionlabel.style.gridColumn='span 2';
    instructionlabel.style.marginTop='15px';
    instructionlabel.style.marginLeft='15px';
    id('cpage4').appendChild(instructionlabel);

    let instructiondurationinput = crt('input');
    instructiondurationinput.id='instructiondurationinput';
    instructiondurationinput.innerText='Instruction Set';
    instructiondurationinput.style = input_CSS;
    instructiondurationinput.style.gridColumn='span 2';
    instructiondurationinput.style.marginTop='12.5%';
    instructiondurationinput.style.marginLeft='210px';
    instructiondurationinput.style.position='fixed';
    instructiondurationinput.style.height='15px';
    instructiondurationinput.placeholder='Set duration (in ms) ...';
    id('cpage4').appendChild(instructiondurationinput);

    let instructionlistbox = crt('textarea');
    instructionlistbox.id='instructionlistbox';
    instructionlistbox.type='textarea';
    instructionlistbox.style=input_CSS;
    instructionlistbox.style.marginTop='-30px';
    instructionlistbox.placeholder=`Example:\nforward\nleft\nstop\nbackward\nright\n...`;
    instructionlistbox.style.resize='none';
    instructionlistbox.style.height='200px';
    instructionlistbox.style.width='380px';
    instructionlistbox.style.fontSize='16px';
    instructionlistbox.style.gridColumn='span 2';
    instructionlistbox.style.gridRow='span 3';
    id('cpage4').appendChild(instructionlistbox);

    noteLabelWithAlert('i', 'Five commands can be specified in an instruction set.\nThey are as follows:\n'+
                       'forward\nbackward\nleft\nright\nstop\n\n'+
                       'In the text field for set duration, a number in milliseconds must be entered for how long a command should be executed.\nFor example, the car moves forward for 5 seconds (5000 ms).\n\n'+
                       'The syntax is kept simple, one command per line (example is displayed in the text field).', 'cpage4', '19%', '40%');

    //*******************************************************************************************************************************************//

    const teamblue = [8, 5, 18, 15, 8, 223, 18, 18, 10, 47, 116, 101, 97, 109, 32, 98, 108, 117, 101];
    const teamred = [8, 5, 18, 13, 8, 6, 18, 9, 47, 116, 101, 97, 109, 32, 114, 101, 100];
    const teamspect = [8, 5, 18, 20, 8, 223, 18, 18, 15, 47, 116, 101, 97, 109, 32, 115, 112, 101, 99, 116, 97, 116, 111, 114];

    switchteams('Team Blue',()=>{
        client.ws.send(new Uint8Array(teamblue));
    });

    switchteams('Team Red',()=>{
        client.ws.send(new Uint8Array(teamred));
    });

    switchteams('Team Spectator',()=>{
        client.ws.send(new Uint8Array(teamspect));
    });

    let autoteambutton = crt('input');
    autoteambutton.id = 'autoteambutton';
    autoteambutton.value = 'Team Switch: OFF';
    autoteambutton.type = 'button';
    autoteambutton.style = button1_CSS;
    autoteambutton.style.color = 'white';
    autoteambutton.style.cursor = 'default';
    id('cpage5').appendChild(autoteambutton);
    buttonanimations(autoteambutton);
    let autoteaminterval;
    autoteambutton.addEventListener('click', ()=>{
        if(autoteambutton.value =='Team Switch: OFF'){
            let switchFlag = true;
            autoteambutton.value ='Team Switch: ON';
            autoteaminterval = setInterval(() => {
                if (switchFlag) {
                    client.ws.send(new Uint8Array(teamblue));
                } else {
                    client.ws.send(new Uint8Array(teamred));
                }
                switchFlag = !switchFlag;
            }, 150);
        }else if(autoteambutton.value =='Team Switch: ON'){
            autoteambutton.value ='Team Switch: OFF'
            clearInterval(autoteaminterval);
        }
    });
    noteLabel('Only works in practice servers.','cpage5',0);

    //***********************************************************************************************************************//

    generalbutton('Quit Game',()=>{
        gameInstance.Quit();
    });
    generalbutton('Sign Out',()=>{
        firebase.auth().signOut();
    });
    generalbutton('Change Player Name',()=>{
        var playername = prompt('Change player name:');
        gameInstance.SendMessage('GameCanvas', 'SetPlayerNameExternal', playername );
    });
    cheatinput();

    let checkboxname = crt('input');
    checkboxname.id='checkbox';
    checkboxname.type='checkbox';
    checkboxname.name='checkbox';
    checkboxname.style.height='20px';
    checkboxname.style.marginLeft = '-170px';
    let chklabel = crt('label');
    chklabel.htmlFor = 'checkbox';
    chklabel.innerText = 'Send With Name';
    chklabel.style.marginTop = '5px';
    chklabel.style.marginLeft = '-180px';
    cheatbutton1('Send Message', 'white', () => {
        if (checkboxname.checked){cheat.unknownmessage(playername+": ");}
        else{cheat.unknownmessage('');}
    });
    id('cpage2').appendChild(checkboxname);
    id('cpage2').appendChild(chklabel);
    cheatbutton1('SPAM BY #MCC', 'white', () => {cheat.spambymcc();});
    cheatbutton1('Clear Chat', 'white', () => {cheat.clearchat();});

    noteLabelWithAlert('i', 'Choose a car before you join a server!\n\nSometimes selected vehicles are not taken over and you only get the standard vehicle (default).\nRejoining a few times or reloading the game often helps.','cpage3');
    const selectedcarLabel = document.createElement("label");
    selectedcarLabel.id = 'selectedcarLabel';
    selectedcarLabel.innerText='Selected Vehicle:';
    selectedcarLabel.style.margin='13px';
    selectedcarLabel.style.fontSize='18px';
    selectedcarLabel.style.gridColumn = 'span 2';
    id('cpage3').appendChild(selectedcarLabel);

    carcheat('Standard',()=>{
        selectedCar=0;
        selectedcarLabel.innerText='Selected Vehicle: Standard';
    });

    carcheat('Cruiser',()=>{
        selectedCar=1;
        selectedcarLabel.innerText='Selected Vehicle: Cruiser';
    });

    carcheat('Tricked Out',()=>{
        selectedCar=2;
        selectedcarLabel.innerText='Selected Vehicle: Tricked Out';
    });

    carcheat('Bugged Out',()=>{
        selectedCar=3;
        selectedcarLabel.innerText='Selected Vehicle: Bugged Out';
    });
    carcheat('Taxi Cab',()=>{
        selectedCar=4;
        selectedcarLabel.innerText='Selected Vehicle: Taxi Cab';
    });

    carcheat('Hot Rod',()=>{
        selectedCar=5;
        selectedcarLabel.innerText='Selected Vehicle: Hot Rod';
    });

    carcheat('Drag Racer',()=>{
        selectedCar=6;
        selectedcarLabel.innerText='Selected Vehicle: Drag Racer';
    });

    carcheat('Classic',()=>{
        selectedCar=7;
        selectedcarLabel.innerText='Selected Vehicle: Classic';
    });

    carcheat('Soccer Van',()=>{
        selectedCar=8;
        selectedcarLabel.innerText='Selected Vehicle: Soccer Van';
    });

    carcheat('Cement Mixer',()=>{
        selectedCar=9;
        selectedcarLabel.innerText='Selected Vehicle: Cement Mixer';
    });

    carcheat('Apocalypse',()=>{
        selectedCar=10;
        selectedcarLabel.innerText='Selected Vehicle: Apocalypse';
    });

    carcheat('Dump Truck',()=>{
        selectedCar=11;
        selectedcarLabel.innerText='Selected Vehicle: Dump Truck';
    });

    carcheat('Steam Roller',()=>{
        selectedCar=12;
        selectedcarLabel.innerText='Selected Vehicle: Steam Roller';
    });

    carcheat('Pusher',()=>{
        selectedCar=13;
        selectedcarLabel.innerText='Selected Vehicle: Pusher';
    });

    tabbutton('General', 'genTab',()=>{
        cpage1_open();
    });
    tabbutton('Player', 'playerTab',()=>{
        cpage4_open();
    });
    tabbutton('Teams', 'teamsTab',()=>{
        cpage5_open();
    });
    tabbutton('Game Chat', 'gchatTab',()=>{
        cpage2_open();
    });
    tabbutton('Unlock Vehicles', 'uvehiclesTab',()=>{
        cpage3_open();
    });
    tabbutton('About', 'aboutTab',()=>{
        cpage6_open();
    });

    function ConsoleLoaded(user){
        infobutton('User: '+user);
    }

    function cpage1_open(){
        id('genTab').style=tabs_CSS_active;
        cpage1.style.display='grid'; //open

        var tabs =[id('playerTab'), id('teamsTab'), id('gchatTab'), id('uvehiclesTab'), id('aboutTab')];
        var pages =[cpage2,cpage3,cpage4,cpage5,cpage6];

        tabs.forEach(tab =>{tab.style=tabs_CSS;});
        id('aboutTab').style.borderBottomLeftRadius='15px';
        pages.forEach(page =>{page.style.display='none';});

    }

    function cpage2_open(){
        id('gchatTab').style=tabs_CSS_active;
        cpage2.style.display='grid'; //open

        var tabs =[id('genTab'), id('playerTab'), id('teamsTab'), id('uvehiclesTab'), id('aboutTab')];
        var pages =[cpage1,cpage3,cpage4,cpage5,cpage6];

        tabs.forEach(tab =>{tab.style=tabs_CSS;});
        id('aboutTab').style.borderBottomLeftRadius='15px';
        pages.forEach(page =>{page.style.display='none';});
    }

    function cpage3_open(){
        id('uvehiclesTab').style=tabs_CSS_active;
        cpage3.style.display='grid'; //open

        var tabs =[id('genTab'), id('playerTab'), id('teamsTab'), id('gchatTab'), id('aboutTab')];
        var pages =[cpage1,cpage2,cpage4,cpage5,cpage6];

        tabs.forEach(tab =>{tab.style=tabs_CSS;});
        id('aboutTab').style.borderBottomLeftRadius='15px';
        pages.forEach(page =>{page.style.display='none';});
    }

    function cpage4_open(){
        id('playerTab').style=tabs_CSS_active;
        cpage4.style.display='grid'; //open

        var tabs =[id('genTab'), id('uvehiclesTab'), id('teamsTab'), id('gchatTab'), id('aboutTab')];
        var pages =[cpage1,cpage2,cpage3,cpage5,cpage6];

        tabs.forEach(tab =>{tab.style=tabs_CSS;});
        id('aboutTab').style.borderBottomLeftRadius='15px';
        pages.forEach(page =>{page.style.display='none';});
    }

    function cpage5_open(){
        id('teamsTab').style=tabs_CSS_active;
        cpage5.style.display='grid'; //open

        var tabs =[id('genTab'), id('uvehiclesTab'), id('playerTab'), id('gchatTab'), id('aboutTab')];
        var pages =[cpage1,cpage2,cpage3,cpage4,cpage6];

        tabs.forEach(tab =>{tab.style=tabs_CSS;});
        id('aboutTab').style.borderBottomLeftRadius='15px';
        pages.forEach(page =>{page.style.display='none';});
    }

    function cpage6_open(){
        id('aboutTab').style=tabs_CSS_active;
        id('aboutTab').style.borderBottomLeftRadius='15px';
        cpage6.style.display='grid'; //open

        var tabs =[id('genTab'), id('uvehiclesTab'), id('playerTab'), id('gchatTab'), id('teamsTab')];
        var pages =[cpage1,cpage2,cpage3,cpage4,cpage5];

        tabs.forEach(tab =>{tab.style=tabs_CSS;});
        pages.forEach(page =>{page.style.display='none';});
    }

    //**********************OTHER STYLE INITS**********************//

    id('aboutTab').style.borderBottomLeftRadius='15px';
})();












QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址