// ==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';
})();