Pixel Place Client
- // ==UserScript==
- // @name r/place destroyer
- // @name:ru PP-Client
- // @description Pixel Place Client
- // @description:ru Pixel Place Клиент
- // @version 5.3.5
- // @author 0vC4
- // @namespace https://greasyfork.org/users/670183
- // @match https://pixelplace.io/*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=pixelplace.io
- // @license MIT
- // @grant none
- // @run-at document-start
- // @require https://greasyfork.org/scripts/438620-workertimer/code/WorkerTimer.js?version=1009025
- // @require https://greasyfork.org/scripts/438408-cwss/code/CWSS.js?version=1042744
- // @require https://greasyfork.org/scripts/443803-ppml/code/PPML.js?version=1042963
- // @require https://greasyfork.org/scripts/443894-ppil/code/PPIL.js?version=1043330
- // @require https://greasyfork.org/scripts/443807-ppt/code/PPT.js?version=1045817
- // @require https://greasyfork.org/scripts/443844-ppcc/code/PPCC.js?version=1045802
- // @require https://greasyfork.org/scripts/443907-pppc/code/PPPC.js?version=1043740
- // ==/UserScript==
- window.log = console.log;
- const PPClient = (() => {
- if (window.PPClient) return window.PPClient;
- const log = console.log;
- const client = {
- size: 13,
- innerSize: 0,
- lock: false,
- order: 'fromCenter',
- wh: [null, null],
- async connect(){
- const names = Object.keys(PPPC.settings.userlist);
- const arr = [];
- PPPC.timer = WorkerTimer;
- await PPPC.save();
- let n = 0;
- for (let i = 0; i < names.length; i++) {
- let ws = null;
- try {
- ws = await PPPC.connect(names[i], 13);
- } catch (e) {
- ws = null;
- }
- if (!ws) {
- n++;
- continue;
- }
- arr[i-n] = ws;
- ws.addEventListener('close', e => arr.splice(arr.indexOf(ws), 1));
- }
- await PPPC.load();
- await PPPC.save();
- log(names.length-n, 'bots connected');
- client.bots = arr;
- },
- async disconnect(){
- client.bots.filter(Boolean).map(ws => ws.close&&ws.close());
- }
- };
- PPCC.speed = 50;
- PPCC.compile(client, PPML, CWSS, WorkerTimer);
- client.set = client.safeEmit;
- PPT.speed = 20000; // pixels per cycle
- PPT.client = client;
- client.mode = mode => {
- const finish = () => {
- if (client.order === 'start' || client.order === 'top') return;
- client._posQueue = 0;
- PPT.order[client.order]();
- };
- if (mode == 'none') {
- client.onclick = () => true;
- return true;
- }
- if (mode == 'brush') {
- client.onclick = (x,y,pixel) => {
- PPT.timer = WorkerTimer;
- PPT.size = client.size;
- PPT.innerSize = client.innerSize;
- PPT.pixel = pixel;
- PPT.square(x, y, (x,y,p) => client.set(x, y, p), finish);
- return false;
- };
- return true;
- }
- if (mode == 'rainbow_ring') {
- client.onclick = (x,y,pixel) => {
- PPT.timer = WorkerTimer;
- PPT.size = client.size;
- PPT.innerSize = client.innerSize;
- PPT.pixel = pixel;
- PPT.ring(x, y, (x,y,p) => client.set(x, y, PPT.wheel), finish);
- return false;
- };
- return true;
- }
- if (mode == 'rainbow_hole') {
- client.onclick = (x,y,pixel) => {
- PPT.timer = WorkerTimer;
- PPT.map = client.map;
- const areaSize = 5;
- const has = areaSize>>1;
- const padding = 2;
- const {width, height, pixels} = client.map;
- let clr = 0;
- let perc = null;
- PPT.shader((x,y,p) => {
- const dist = ((x-client.map.width/2)**2+(y-client.map.height/2)**2)**0.5;
- const percent = 1000*dist/(client.map.height/2)>>0;
- if (percent != perc) {
- perc = percent;
- clr = perc%PPT.palette.length;
- while (PPT.palette[clr] == PPT.zero) {
- clr++;
- if (clr > PPT.palette.length-1) clr = 0;
- }
- }
- client.set(x, y, clr);
- }, finish);
- return false;
- };
- return true;
- }
- if (mode == 'border_rainbow') {
- client.onclick = (x,y,pixel) => {
- PPT.timer = WorkerTimer;
- PPT.map = client.map;
- const areaSize = 5;
- const has = areaSize>>1;
- const padding = 2;
- const {width, height, pixels} = client.map;
- PPT.shader((x,y,p) => {
- if (x < areaSize || x > width-1-areaSize || y < areaSize || y > height-1-areaSize) return;
- let start = (x-has)+(y-has)*width;
- let area = [];
- for (let i = 0; i < areaSize; i++) {
- const offset = start+i*width;
- area.push(...pixels.slice(offset, offset+areaSize));
- }
- if (area.find(p => p === 255)) {
- client.set(x, y, PPT.wheel);
- return;
- }
- const size = areaSize+padding*2;
- const hs = has+padding;
- if (x < size || x > width-1-size || y < size || y > height-1-size) return;
- start = (x-hs)+(y-hs)*width;
- area = [];
- for (let i = 0; i < size; i++) {
- const offset = start+i*width;
- area.push(...pixels.slice(offset, offset+size));
- }
- if (area.find(p => p === 255)) {
- client.set(x, y, 5);
- return;
- }
- client.set(x, y, 5);
- }, finish);
- return false;
- };
- return true;
- }
- if (mode == 'poland') {
- client.onclick = (x,y,pixel) => {
- PPT.timer = WorkerTimer;
- PPT.size = client.size;
- PPT.innerSize = client.innerSize;
- PPT.pixel = 0;
- PPT.square(x, y, (x,y,p) => client.set(x, y, p));
- PPT.pixel = 20;
- PPT.square(x, y+client.size, (x,y,p) => client.set(x, y, p), finish);
- return false;
- };
- return true;
- }
- if (mode == 'image') {
- client.onclick = (x,y,pixel) => {
- PPIL.loadImage(...client.wh)(([pixels, w, h]) => {
- PPT.timer = WorkerTimer;
- PPT.image(pixels, x,y,w,h, (x,y,p) => client.set(x, y, p), finish);
- });
- return false;
- };
- return true;
- }
- return false;
- };
- client.lock = true;
- client.mode('image');
- window.PPClient = client;
- return client;
- })();
- // 0vC4#7152