Pixel Place Клиент
// ==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