- // ==UserScript==
- // @name BMO BOT
- // @namespace http://tampermonkey.net/
- // @version 0.4
- // @description BMO
- // @author Bambi1
- // @match https://pixelplace.io/*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=pixelplace.io
- // @run-at document-start
- // @grant none
- // @license MIT
- // ==/UserScript==
- let drawBMO = false;
- var fillHeight = 70;
- var fillWidth = 90;
- var color = 28;
- var lineLength = 5;
- let chatting = false
- let onOff = true;
- function fix(a, b) {
- Object.defineProperty(window.console, a, { configurable: false, enumerable: true, writable: false, value: b });
- }
-
- fix('log', console.log);
- fix('warn', console.warn);
- fix('error', console.error);
- fix('info', console.info);
-
- const originalWebSocket = window.WebSocket;
- var socket;
-
- class WebSocketHook extends originalWebSocket {
- constructor(a, b) {
- super(a, b);
- socket = this;
- }
- }
-
- window.WebSocket = WebSocketHook;
-
- document.addEventListener('DOMContentLoaded', () => {
-
-
- document.addEventListener('keydown', function (event) {
- if (!chatting & onOff) {
- var coordinatesElement = document.getElementById('coordinates');
- var coordinatesValue = coordinatesElement.textContent;
- var [x, y] = coordinatesValue.split(',');
- x = parseInt(x);
- y = parseInt(y);
-
- switch (event.key) {
- case 'm':
- if (menuContainer.style.display === 'none') {
- menuContainer.style.display = 'block';
- } else {
- fillHeight = parseFloat(heightInput.querySelector('input').value);
- fillWidth = parseFloat(widthInput.querySelector('input').value);
- color = parseFloat(colorInput.querySelector('input').value);
- lineLength = parseFloat(lineInput.querySelector('input').value);
- menuContainer.style.display = 'none';
- }
- break;
- case 'f':
- fillTool(x, y, color);
- break;
- case 'i':
- drawUpLine(x, y, color);
- break;
- case 'k':
- drawDownLine(x, y, color);
- break;
- case 'j':
- drawLeftLine(x, y, color);
- break;
- case 'l':
- drawRightLine(x, y, color);
- break;
- case 'b':
- if (drawBMO === true) {
- BMO(x, y, color);
- }
- break;
- default:
- break;
- }
- }
- });
-
-
- function placePix(x, y, col) {
- socket.send(`42["p",[${x},${y},${col},1]]`);
- }
-
- function fillTool(SX, SY, color) {
- let i = 0;
- let j = 0;
-
- function placePixelWithDelay() {
- if (j < fillHeight) {
- if (i < fillWidth) {
- placePix(SX + i, SY + j, color);
- placePix(SX + i, SY + j, color);
- i++;
- setTimeout(placePixelWithDelay, 50);// <---- Delay change with caution
- } else {
- i = 0;
- j++;
- setTimeout(placePixelWithDelay, 50);//<---- Delay change with caution
- }
- }
- }
-
- placePixelWithDelay();
- }
-
- function drawUpLine(SX,SY,color){
- let a = 0;
- function placeUpLine(){
- if (a < lineLength){
- placePix(SX, SY - a , color)
- a++
- setTimeout(placeUpLine , 75)
- }}
- placeUpLine();}
- function drawDownLine(SX,SY,color){
- let b = 0;
- function placeDownLine(){
- if (b < lineLength){
- placePix(SX, SY + b , color)
- b++
- setTimeout(placeDownLine , 75)
- }}
- placeDownLine();}
- function drawLeftLine(SX,SY,color){
- let c = 0;
- function placeLeftLine(){
- if (c < lineLength){
- placePix(SX - c, SY , color)
- c++
- setTimeout(placeLeftLine , 75)
- }}placeLeftLine();}
- function drawRightLine(SX,SY,color){
- let d = 0;
- function placeRightLine(){
- if (d < lineLength){
- placePix(SX + d, SY, color)
- d++
- setTimeout(placeRightLine , 75)
- }}placeRightLine();}
- function sleep(ms) {
- return new Promise(resolve => setTimeout(resolve, ms));
- }
- async function BMO(SX, SY) {
- const pixelArray = [
- [0 ,0 ,0 ,0 ,0 ,37 ,37, 37, 37, 37, 37, 37, 37, 37, 36, 36, 36, 36, 36],//1
- [0, 0, 0, 0, 0, 37, 48, 48, 48, 48, 48, 48, 48, 37, 36, 36, 36, 36, 36],//2
- [0, 0, 0, 0, 0, 37, 48, 5, 48, 48, 48, 5, 48, 37, 36, 36, 36, 36, 36],//3
- [0, 0, 0, 0, 0, 37, 48, 48, 48, 48, 48, 48, 48, 37, 36, 36, 36, 36, 36],//4
- [0, 0, 0, 0, 0, 37, 48, 5, 5, 5, 5, 5, 48, 37, 36, 36, 36, 36 ,36],//5
- [0, 37, 0, 0, 0, 37, 48, 48, 5, 5, 5, 48, 48, 37, 36, 36, 36, 36, 36],//6
- [0, 37, 0, 0, 0, 37, 48, 48, 48, 48, 48, 48, 48, 37, 36, 36, 36, 36, 36],//7
- [0, 0, 37, 0, 0, 37, 37, 37, 37, 37, 37, 37, 37, 37, 36, 36, 36, 36, 36],//8
- [0, 0, 0, 37, 37, 37, 3, 3, 3, 3, 3, 37, 44, 37, 36, 47, 36, 36, 36],//9
- [0, 0, 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 37, 37, 36, 47, 36, 36, 36],//10
- [0, 0, 0, 0, 0, 37, 37, 11, 37, 37, 37, 37, 37, 37, 36, 47, 36, 36, 36],//11
- [0, 0, 0, 0, 0, 37, 11, 11, 11, 37, 37, 37, 37, 37, 36, 47, 36, 36, 36],//12
- [0, 0, 0, 0, 0, 37, 37, 11, 37, 37, 37, 32, 37, 37, 36, 47, 36, 36, 36],//13
- [0, 0, 0, 0, 0, 37, 37, 37, 37, 37, 20, 37, 7, 37, 36, 36, 36, 36, 36],//14
- [0, 0, 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 37, 37, 36, 36, 36, 36, 36],//15
- [0, 0, 0, 0, 0, 37, 37, 37, 37, 37, 37, 37, 37, 37, 36, 36, 36, 36, 36],//16
- [0, 0, 0, 0, 0, 0, 0, 37, 36, 0, 0, 0, 0, 0, 37, 36, 0, 0, 0, 0],//17
- [0, 0, 0, 0, 0, 0, 0, 37, 36, 0, 0, 0, 0, 0, 37, 36, 0, 0, 0, 0],//18
- [0, 0, 0, 0, 0, 0, 0, 37, 36, 0, 0, 0, 0, 0, 37, 36, 0, 0, 0, 0],//19
- // Add more rows as needed
- ];
- for (let y = 0; y < pixelArray.length; y++) {
- for (let x = 0; x < pixelArray[y].length; x++) {
- const col = pixelArray[y][x];
- placePix(SX + x, SY + y, col);
- await sleep(75);
- }
- }
- }
-
-
- const menuContainer = document.createElement('div');
- menuContainer.style.display = 'none';
- menuContainer.style.position = 'fixed';
- menuContainer.style.backgroundColor = 'white';
- menuContainer.style.border = '1px solid #ccc';
- menuContainer.style.padding = '10px';
- menuContainer.style.boxShadow = '0px 0px 10px rgba(0, 0, 0, 0.1)';
- menuContainer.style.fontFamily = 'Arial, sans-serif';
- menuContainer.style.top = '50%';
- menuContainer.style.left = '50%';
- menuContainer.style.transform = 'translate(-50%, -50%)';
-
-
- function createInputWithLabel(labelText, defaultValue) {
- const inputWrapper = document.createElement('div');
-
- const label = document.createElement('label');
- label.textContent = labelText + ':';
- label.style.fontWeight = 'bold';
- label.style.marginBottom = '4px';
-
- const input = document.createElement('input');
- if (typeof defaultValue === 'boolean') {
- input.type = 'checkbox';
- input.checked = defaultValue;
- input.addEventListener('change', function () {
- drawBMO = this.checked;
- });
- } else {
- input.type = 'number';
- input.placeholder = defaultValue;
- input.style = `
- padding: 5px;
- border: 1px solid #ccc;
- border-radius: 4px;
- width: 100px;
- margin-bottom: 10px;
- color: black; /* Set text color to black */
- z-index: 2000000001; /* Set z-index */
- `;
- }
-
- inputWrapper.appendChild(label);
- inputWrapper.appendChild(input);
-
- return inputWrapper;
- }
-
- const header = document.createElement('div');
- header.textContent = 'Fill Tool Settings';
- header.style.fontSize = '18px';
- header.style.fontWeight = 'bold';
- header.style.marginBottom = '10px';
-
- const heightInput = createInputWithLabel('Fill Height', '0');
- const widthInput = createInputWithLabel('Fill Width', '0');
- const lineInput = createInputWithLabel('Line Length', '0');
- const colorInput = createInputWithLabel('Color', '0');
- const drawBMOInput = createInputWithLabel('Draw BMO', false);
-
- const submitButton = document.createElement('button');
- submitButton.textContent = 'Submit (m)';
- submitButton.style.backgroundColor = '#007bff';
- submitButton.style.color = 'white';
- submitButton.style.padding = '8px 12px';
- submitButton.style.border = 'none';
- submitButton.style.borderRadius = '4px';
- submitButton.style.cursor = 'pointer';
- submitButton.style.marginTop = '10px';
-
- menuContainer.appendChild(header);
- menuContainer.appendChild(heightInput);
- menuContainer.appendChild(widthInput);
- menuContainer.appendChild(lineInput);
- menuContainer.appendChild(colorInput);
- menuContainer.appendChild(drawBMOInput);
- menuContainer.appendChild(submitButton);
-
- document.body.appendChild(menuContainer);
-
-
-
- submitButton.addEventListener('click', () => {
- fillHeight = parseFloat(heightInput.querySelector('input').value);
- fillWidth = parseFloat(widthInput.querySelector('input').value);
- color = parseFloat(colorInput.querySelector('input').value);
- lineLength = parseFloat(lineInput.querySelector('input').value);
- menuContainer.style.display = 'none';
- });
- const chatInput = document.querySelector('input[name="chat"]');
- chatInput.addEventListener('focus', () => {
- chatting = true;
- console.log("chatting");
- });
- chatInput.addEventListener('blur', () => {
- console.log("unchatting");
- chatting = false;
- });
- /// Create the checkbox container element
- const checkboxContainer = document.createElement('div');
- checkboxContainer.style.position = 'fixed';
- checkboxContainer.style.left = '450px';
- checkboxContainer.style.bottom = '12px';
- checkboxContainer.style.zIndex = '2000000001'; // Set the z-index
- checkboxContainer.style.display = 'flex';
- checkboxContainer.style.alignItems = 'center';
-
- // Create the checkbox element
- const checkbox = document.createElement('input');
- checkbox.type = 'checkbox';
- checkbox.style.borderRadius = '25%';
- checkbox.style.width = '25px'; // Increase the size
- checkbox.style.height = '25px'; // Increase the size
- checkbox.checked = true;
- checkbox.style.marginRight = '10px'; // Add some spacing
-
- // Initial state of onOff based on checkbox's checked state
- let onOff = checkbox.checked;
-
- // Function to toggle onOff when checkbox is clicked
- checkbox.addEventListener('click', function() {
- onOff = checkbox.checked;
- updateBackgroundColor();
- });
-
- // Append the checkbox to the container
- checkboxContainer.appendChild(checkbox);
-
- // Append the container to the body
- document.body.appendChild(checkboxContainer);
-
- // Function to update background color based on onOff state
- function updateBackgroundColor() {
- if (onOff) {
- document.body.style.backgroundColor = 'lightblue';
- } else {
- document.body.style.backgroundColor = 'white';
- }}
- });