Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if(!window.Players) {
- Players = {};
- OWOP.on(26, up => {
- for(let p in up) Players[p] = {
- id: p,
- x: (up[p].x >> 4) | 0,
- y: (up[p].y >> 4) | 0,
- color: up[p].rgb,
- tool: up[p].tool
- }
- });
- OWOP.on(27, up => {
- for(let p of up) delete Players[p];
- })
- };
- const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
- const filter = (obj, fn) => {
- let newObj = {};
- for(let i in obj) if(fn(obj[i])) newObj[i] = obj[i];
- return newObj;
- }
- let delay = 900;
- OWOP.tools.addToolObject(new OWOP.tools.class('Applier', OWOP.cursors.select, OWOP.fx.player.NONE, false, function (tool) {
- g = {};
- tool.setFxRenderer(function (fx, ctx, time) {
- if (!fx.extra.isLocalPlayer) return 1;
- let x = fx.extra.player.x;
- let y = fx.extra.player.y;
- let fxx = (Math.floor(x / 16) - OWOP.camera.x) * OWOP.camera.zoom;
- let fxy = (Math.floor(y / 16) - OWOP.camera.y) * OWOP.camera.zoom;
- let oldlinew = ctx.lineWidth;
- ctx.lineWidth = 1;
- if (tool.extra.end) {
- let s = tool.extra.start;
- let e = tool.extra.end;
- let x = (s[0] - OWOP.camera.x) * OWOP.camera.zoom + 0.5;
- let y = (s[1] - OWOP.camera.y) * OWOP.camera.zoom + 0.5;
- let w = e[0] - s[0];
- let h = e[1] - s[1];
- ctx.beginPath();
- ctx.rect(x, y, w * OWOP.camera.zoom, h * OWOP.camera.zoom);
- ctx.globalAlpha = 0.25;
- ctx.strokeStyle = "#FFFFFF";
- ctx.stroke();
- ctx.setLineDash([3, 4]);
- ctx.strokeStyle = "#000000";
- ctx.stroke();
- ctx.globalAlpha = 0.25 + Math.sin(time / 500) / 4;
- ctx.fillStyle = OWOP.renderer.patterns.unloaded;
- ctx.fill();
- ctx.setLineDash([]);
- let oldfont = ctx.font;
- ctx.font = "16px sans-serif";
- let txt = (!tool.extra.clicking ? "Right click to apply action " : "") + '(' + Math.abs(w) + 'x' + Math.abs(h) + ')';
- let txtx = window.innerWidth >> 1;
- let txty = window.innerHeight >> 1;
- txtx = Math.max(x, Math.min(txtx, x + w * OWOP.camera.zoom));
- txty = Math.max(y, Math.min(txty, y + h * OWOP.camera.zoom));
- OWOP.drawText = (ctx, str, x, y, centered) => {
- ctx.strokeStyle = "#000000", ctx.fillStyle = "#FFFFFF", ctx.lineWidth = 2.5, ctx.globalAlpha = 1;
- if (centered) {
- x -= ctx.measureText(str).width >> 1;
- }
- ctx.strokeText(str, x, y);
- ctx.globalAlpha = 1;
- ctx.fillText(str, x, y);
- };
- OWOP.drawText(ctx, txt, txtx, txty, true);
- ctx.font = oldfont;
- ctx.lineWidth = oldlinew;
- return 0;
- } else {
- ctx.beginPath();
- ctx.moveTo(0, fxy + 0.5);
- ctx.lineTo(window.innerWidth, fxy + 0.5);
- ctx.moveTo(fxx + 0.5, 0);
- ctx.lineTo(fxx + 0.5, window.innerHeight);
- //ctx.lineWidth = 1;
- ctx.globalAlpha = 0.8;
- ctx.strokeStyle = "#FFFFFF";
- ctx.stroke();
- ctx.setLineDash([3]);
- ctx.strokeStyle = "#000000";
- ctx.stroke();
- ctx.setLineDash([]);
- ctx.lineWidth = oldlinew;
- return 1;
- }
- });
- tool.extra.start = null;
- tool.extra.end = null;
- tool.extra.clicking = false;
- tool.setEvent('mousedown', async function (mouse, event) {
- let s = tool.extra.start;
- let e = tool.extra.end;
- let isInside = function isInside() {
- return mouse.tileX >= s[0] && mouse.tileX < e[0] && mouse.tileY >= s[1] && mouse.tileY < e[1];
- };
- if (mouse.buttons === 1 && !tool.extra.end) {
- tool.extra.start = [mouse.tileX,mouse.tileY];
- tool.extra.clicking = true;
- tool.setEvent('mousemove', function (mouse, event) {
- if (tool.extra.start && mouse.buttons === 1) {
- tool.extra.end = [mouse.tileX, mouse.tileY];
- return 1;
- }
- });
- let finish = function finish() {
- tool.setEvent('mousemove mouseup deselect', null);
- tool.extra.clicking = false;
- let s = tool.extra.start;
- let e = tool.extra.end;
- if (e) {
- if (s[0] === e[0] || s[1] === e[1]) {
- tool.extra.start = null;
- tool.extra.end = null;
- }
- if (s[0] > e[0]) {
- let tmp = e[0];
- e[0] = s[0];
- s[0] = tmp;
- }
- if (s[1] > e[1]) {
- let tmp = e[1];
- e[1] = s[1];
- s[1] = tmp;
- }
- }
- OWOP.renderer.render(OWOP.renderer.rendertype.FX);
- };
- tool.setEvent('deselect', finish);
- tool.setEvent('mouseup', function (mouse, event) {
- if (!(mouse.buttons & 1)) {
- finish();
- }
- });
- } else if (mouse.buttons === 1 && tool.extra.end) {
- if (isInside()) {
- let offx = mouse.tileX;
- let offy = mouse.tileY;
- tool.setEvent('mousemove', function (mouse, event) {
- let dx = mouse.tileX - offx;
- let dy = mouse.tileY - offy;
- tool.extra.start = [s[0] + dx, s[1] + dy];
- tool.extra.end = [e[0] + dx, e[1] + dy];
- });
- let end = function end() {
- tool.setEvent('mouseup deselect mousemove', null);
- };
- tool.setEvent('deselect', end);
- tool.setEvent('mouseup', function (mouse, event) {
- if (!(mouse.buttons & 1)) {
- end();
- }
- ;
- });
- }
- } else if (mouse.buttons === 2 && tool.extra.end && isInside()) {
- let players = Object.keys(filter(Players, i => i.x >= tool.extra.start[0] && i.y >= tool.extra.start[1]
- && i.x <= tool.extra.end[0] && i.y <= tool.extra.end[1]));
- let act = prompt(`Apply action to ${players.join(", ")} (${players.length}). "ID" will be replaced to their ids.`);
- if(!act) return;
- for(let i of players) {
- OWOP.chat.send("/" + act.replace(/ID/g, i));
- await sleep(delay);
- }
- } else {
- tool.extra.start = null;
- tool.extra.end = null;
- }
- });
- }));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement