您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Pixel Place Compile Client
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/443844/1043551/PPCC.js
- // ==UserScript==
- // @name PPCC
- // @description Pixel Place Compile Client
- // @version 1.4.6
- // @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
- // ==/UserScript==
- const PPCC = (() => {
- return {
- speed: 30,
- compile(client, PPML, CWSS, timer=window) {
- const speed = this.speed;
- Object.assign(client, {
- ws: null,
- map: {},
- onclick: null,
- last: [0, 0, 255],
- lock: false,
- _pixelQueue: [],
- _posQueue: 0,
- safeEmit(x, y, pixel) {
- this._pixelQueue.push(x, y, pixel);
- },
- send(data) {
- CWSS.send.call(client.ws, data);
- },
- liveQueue(client, ws) {
- const t = timer.setInterval(() => {
- while (client._posQueue < client._pixelQueue.length) {
- client._posQueue += 3;
- const [x, y, pixel] = client._pixelQueue.slice(client._posQueue-3, client._posQueue);
- if (client.map.get(x,y) === 255 || pixel === 255) continue;
- if (client.map.get(x,y) === pixel) continue;
- CWSS.send.call(ws, `42["p",[${x},${y},${pixel},1]]`);
- return;
- }
- if (client.lock && client._posQueue > client._pixelQueue.length-1) {
- client._posQueue = 0;
- return;
- }
- client._posQueue = 0;
- client._pixelQueue = [];
- }, 1e3/speed);
- ws.addEventListener('close', () => timer.clearInterval(t));
- },
- });
- PPML.onload = map => {
- Object.assign(client.map, map);
- client.map.pixels = new Uint8Array(map.pixels);
- };
- CWSS.setHook({
- priority: 0,
- init() {
- if (client.ws) return arguments;
- client.ws = this;
- return arguments;
- },
- open() {
- if (client.ws !== this) return arguments;
- client.liveQueue(client, client.ws);
- return arguments;
- },
- message({data}) {
- if (client.ws != this) return arguments;
- const message = JSON.parse(data.split(/(?<=^\d+)(?=[^\d])/)[1] || '[]');
- if (!message.length) return arguments;
- const [event, json] = message;
- if (event == 'canvas' || event == 'p') json.map(p => client.map.set(...p));
- return arguments;
- },
- send(data) {
- if (client.ws != this) return arguments;
- const message = JSON.parse(data.split(/(?<=^\d+)(?=[^\d])/)[1] || '[]');
- if (!message.length) return arguments;
- const [event, json] = message;
- if (event == 'p') {
- const [x, y, pixel] = json;
- client.last = [x, y, pixel];
- if (client.onclick && client.onclick(x, y, pixel) === false) return;
- }
- return arguments;
- }
- });
- }
- };
- })();
- // 0vC4#7152