PPML

Pixel Place Map Loader

当前为 2022-05-08 提交的版本,查看 最新版本

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/443803/1048500/PPML.js

// ==UserScript==
// @name         PPML
// @description  Pixel Place Map Loader
// @version      1.6
// @author       0vC4
// @namespace    https://gf.qytechs.cn/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 PPML = (() => {
  if (window.PPML) return window.PPML;



  const colors = new Uint32Array([
      0xFFFFFF,
      0xC4C4C4,
      0x888888,
      0x555555,
      0x222222,
      0x000000,
      0x006600,
      0x22B14C,
      0x02BE01,
      0x51E119,
      0x94E044,
      0xFBFF5B,
      0xE5D900,
      0xE6BE0C,
      0xE59500,
      0xA06A42,
      0x99530D,
      0x633C1F,
      0x6B0000,
      0x9F0000,
      0xE50000,
      0xFF3904,
      0xBB4F00,
      0xFF755F,
      0xFFC49F,
      0xFFDFCC,
      0xFFA7D1,
      0xCF6EE4,
      0xEC08EC,
      0x820080,
      0x5100FF,
      0x020763,
      0x0000EA,
      0x044BFF,
      0x6583CF,
      0x36BAFF,
      0x0083C7,
      0x00D3DD,
      0x45FFC8
  ]);



  const PPML = {
      map: {},
      _hooks: [],
      set onload(func) {
          this._hooks.push(func);
      }
  };



  const Img = window.Image;
  window.Image = function() {
      const img = new Img(...arguments);

      Object.defineProperty(img, 'src', {
          enumerable: true,
          configurable: true,
          set(val) {
              this.setAttribute('src', val);
              if (!val.match(/canvas\/\d+\.png\?/)) return;

              this.addEventListener('load', () => {
                  const canvas = document.createElement('canvas');
                  canvas.width = this.width;
                  canvas.height = this.height;

                  const ctx = canvas.getContext('2d');
                  ctx.drawImage(this, 0, 0);

                  const rgba = ctx.getImageData(0, 0, this.width, this.height).data;
                  const pixels = new Uint8Array(rgba.length>>2);
                  for (let i = 0; i < rgba.length; i += 4)
                      pixels[i>>2] = colors.indexOf((rgba[i]<<16) + (rgba[i+1]<<8) + (rgba[i+2]))-1;

                  const {width, height} = this;
                  const map = {
                      pixels, colors,
                      width, height,
                      find(pixel) {
                          const pos = this.pixels.indexOf(pixel);
                          if (pos > -1) return pos;
                          return null;
                      },
                      get(x,y) {
                          return this.pixels[x+y*this.width];
                      },
                      set(x,y,pixel) {
                          const offset = x+y*this.width;
                          if (this.pixels[offset] == null) return;
                          this.pixels[offset] = pixel;
                      }
                  };

                  Object.assign(PPML.map, map);
                  PPML._hooks.map(f => f(map));
              });
          }
      });

      return img;
  };
  Object.assign(Image, Img);
  for (let k in Img.prototype) try {Image.prototype[k] = Img.prototype[k];} catch (e) {};



  window.PPML = PPML;
  return PPML;
})();
// 0vC4#7152

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址