您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Now u can fill unlimited.
// ==UserScript== // @name True fill tool (fix). // @version 0.1 // @description Now u can fill unlimited. // @author nab aka NoT BoT // @match *.ourworldofpixels.com/* // @grant none // @license MIT // @namespace https://greasyfork.runtimutd.eu.org/users/228105 // ==/UserScript== function install() { let move = (x, y) => { OWOP.net.protocol.lastSentX = x * 16; OWOP.net.protocol.lastSentY = y * 16; OWOP.net.connection.send(new Int32Array([x * 16, y * 16, 0]).buffer); }; OWOP.tool.addToolObject(new OWOP.tool.class('True Fill', OWOP.cursors.fill, OWOP.fx.player.NONE, false, function (tool) { tool.extra.tickAmount = 6; var queue = []; var fillingColor = null; var defaultFx = OWOP.fx.player.RECT_SELECT_ALIGNED(1); tool.setFxRenderer(function (fx, ctx, time) { ctx.globalAlpha = 0.8; ctx.strokeStyle = fx.extra.player.htmlRgb; var z = OWOP.camera.zoom; if (!fillingColor || !fx.extra.isLocalPlayer) { defaultFx(fx, ctx, time); } else { ctx.beginPath(); for (var i = 0; i < queue.length; i++) { ctx.rect((queue[i][0] - OWOP.camera.x) * z, (queue[i][1] - OWOP.camera.y) * z, z, z); } ctx.stroke(); } }); function tick() { var eq = function eq(a, b) { return a && b && a[0] === b[0] && a[1] === b[1] && a[2] === b[2]; }; var check = function check(x, y) { if (eq(OWOP.world.getPixel(x, y), fillingColor)) { queue.unshift([x, y]); return true; } return false; }; if (!queue.length || !fillingColor) { return; } var selClr = OWOP.player.selectedColor; var painted = 0; var tickAmount = tool.extra.tickAmount; for (var painted = 0; painted < tickAmount && queue.length; painted++) { var current = queue.pop(); var x = current[0]; var y = current[1]; var thisClr = OWOP.world.getPixel(x, y); if (eq(thisClr, fillingColor) && !eq(thisClr, selClr)) { move(x,y); if (!OWOP.world.setPixel(x, y, selClr)) { queue.push(current); break; } // diamond check first var top = check(x, y - 1); var bottom = check(x, y + 1); var left = check(x - 1, y); var right = check(x + 1, y); // if corners are not closed by parts of the diamond, then they can be accessed if (top && left) { check(x - 1, y - 1); } if (top && right) { check(x + 1, y - 1); } if (bottom && left) { check(x - 1, y + 1); } if (bottom && right) { check(x + 1, y + 1); } // Shape diamond, infra not like /*check(x , y - 1); check(x - 1, y ); check(x + 1, y ); check(x , y + 1);*/ } } } tool.setEvent('mousedown', function (mouse) { if (!(mouse.buttons & 4)) { fillingColor = OWOP.world.getPixel(mouse.tileX, mouse.tileY); if (fillingColor) { queue.push([mouse.tileX, mouse.tileY]); tool.setEvent('tick', tick); } } }); tool.setEvent('mouseup deselect', function (mouse) { if (!mouse || !(mouse.buttons & 1)) { fillingColor = null; queue = []; tool.setEvent('tick', null); } }); })); } setTimeout(() => { install() },5000)