Advertisement
dimden

Applier Tool

Sep 20th, 2019
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. if(!window.Players) {
  2.     Players = {};
  3.    
  4.     OWOP.on(26, up => {
  5.         for(let p in up) Players[p] = {
  6.                 id: p,
  7.                 x: (up[p].x >> 4) | 0,
  8.                 y: (up[p].y >> 4) | 0,
  9.                 color: up[p].rgb,
  10.                 tool: up[p].tool
  11.             }
  12.     });
  13.     OWOP.on(27, up => {
  14.         for(let p of up) delete Players[p];
  15.     })
  16. };
  17.  
  18. const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
  19. const filter = (obj, fn) => {
  20.     let newObj = {};
  21.     for(let i in obj) if(fn(obj[i])) newObj[i] = obj[i];
  22.     return newObj;
  23. }
  24. let delay = 900;
  25.  
  26.  
  27. OWOP.tools.addToolObject(new OWOP.tools.class('Applier', OWOP.cursors.select, OWOP.fx.player.NONE, false, function (tool) {
  28.                 g = {};
  29.                 tool.setFxRenderer(function (fx, ctx, time) {
  30.                     if (!fx.extra.isLocalPlayer) return 1;
  31.                     let x = fx.extra.player.x;
  32.                     let y = fx.extra.player.y;
  33.                     let fxx = (Math.floor(x / 16) - OWOP.camera.x) * OWOP.camera.zoom;
  34.                     let fxy = (Math.floor(y / 16) - OWOP.camera.y) * OWOP.camera.zoom;
  35.                     let oldlinew = ctx.lineWidth;
  36.                     ctx.lineWidth = 1;
  37.                     if (tool.extra.end) {
  38.                         let s = tool.extra.start;
  39.                         let e = tool.extra.end;
  40.                         let x = (s[0] - OWOP.camera.x) * OWOP.camera.zoom + 0.5;
  41.                         let y = (s[1] - OWOP.camera.y) * OWOP.camera.zoom + 0.5;
  42.                         let w = e[0] - s[0];
  43.                         let h = e[1] - s[1];
  44.                         ctx.beginPath();
  45.                         ctx.rect(x, y, w * OWOP.camera.zoom, h * OWOP.camera.zoom);
  46.                         ctx.globalAlpha = 0.25;
  47.                         ctx.strokeStyle = "#FFFFFF";
  48.                         ctx.stroke();
  49.                         ctx.setLineDash([3, 4]);
  50.                         ctx.strokeStyle = "#000000";
  51.                         ctx.stroke();
  52.                         ctx.globalAlpha = 0.25 + Math.sin(time / 500) / 4;
  53.                         ctx.fillStyle = OWOP.renderer.patterns.unloaded;
  54.                         ctx.fill();
  55.                         ctx.setLineDash([]);
  56.                         let oldfont = ctx.font;
  57.                         ctx.font = "16px sans-serif";
  58.                         let txt = (!tool.extra.clicking ? "Right click to apply action " : "") + '(' + Math.abs(w) + 'x' + Math.abs(h) + ')';
  59.                         let txtx = window.innerWidth >> 1;
  60.                         let txty = window.innerHeight >> 1;
  61.                         txtx = Math.max(x, Math.min(txtx, x + w * OWOP.camera.zoom));
  62.                         txty = Math.max(y, Math.min(txty, y + h * OWOP.camera.zoom));
  63.                         OWOP.drawText = (ctx, str, x, y, centered) => {
  64.                             ctx.strokeStyle = "#000000", ctx.fillStyle = "#FFFFFF", ctx.lineWidth = 2.5, ctx.globalAlpha = 1;
  65.                             if (centered) {
  66.                                 x -= ctx.measureText(str).width >> 1;
  67.                             }
  68.                             ctx.strokeText(str, x, y);
  69.                             ctx.globalAlpha = 1;
  70.                             ctx.fillText(str, x, y);
  71.                         };
  72.                         OWOP.drawText(ctx, txt, txtx, txty, true);
  73.                         ctx.font = oldfont;
  74.                         ctx.lineWidth = oldlinew;
  75.                         return 0;
  76.                     } else {
  77.                         ctx.beginPath();
  78.                         ctx.moveTo(0, fxy + 0.5);
  79.                         ctx.lineTo(window.innerWidth, fxy + 0.5);
  80.                         ctx.moveTo(fxx + 0.5, 0);
  81.                         ctx.lineTo(fxx + 0.5, window.innerHeight);
  82.  
  83.                         //ctx.lineWidth = 1;
  84.                         ctx.globalAlpha = 0.8;
  85.                         ctx.strokeStyle = "#FFFFFF";
  86.                         ctx.stroke();
  87.                         ctx.setLineDash([3]);
  88.                         ctx.strokeStyle = "#000000";
  89.                         ctx.stroke();
  90.  
  91.                         ctx.setLineDash([]);
  92.                         ctx.lineWidth = oldlinew;
  93.                         return 1;
  94.                     }
  95.                 });
  96.  
  97.                 tool.extra.start = null;
  98.                 tool.extra.end = null;
  99.                 tool.extra.clicking = false;
  100.  
  101.                 tool.setEvent('mousedown', async function (mouse, event) {
  102.  
  103.                     let s = tool.extra.start;
  104.                     let e = tool.extra.end;
  105.                     let isInside = function isInside() {
  106.                         return mouse.tileX >= s[0] && mouse.tileX < e[0] && mouse.tileY >= s[1] && mouse.tileY < e[1];
  107.                     };
  108.                     if (mouse.buttons === 1 && !tool.extra.end) {
  109.                         tool.extra.start = [mouse.tileX,mouse.tileY];
  110.                         tool.extra.clicking = true;
  111.                         tool.setEvent('mousemove', function (mouse, event) {
  112.                             if (tool.extra.start && mouse.buttons === 1) {
  113.                                 tool.extra.end = [mouse.tileX, mouse.tileY];
  114.                                 return 1;
  115.                             }
  116.                         });
  117.                         let finish = function finish() {
  118.                             tool.setEvent('mousemove mouseup deselect', null);
  119.                             tool.extra.clicking = false;
  120.                             let s = tool.extra.start;
  121.                             let e = tool.extra.end;
  122.                             if (e) {
  123.                                 if (s[0] === e[0] || s[1] === e[1]) {
  124.                                     tool.extra.start = null;
  125.                                     tool.extra.end = null;
  126.                                 }
  127.                                 if (s[0] > e[0]) {
  128.                                     let tmp = e[0];
  129.                                     e[0] = s[0];
  130.                                     s[0] = tmp;
  131.                                 }
  132.                                 if (s[1] > e[1]) {
  133.                                     let tmp = e[1];
  134.                                     e[1] = s[1];
  135.                                     s[1] = tmp;
  136.                                 }
  137.                             }
  138.                             OWOP.renderer.render(OWOP.renderer.rendertype.FX);
  139.                         };
  140.                         tool.setEvent('deselect', finish);
  141.                         tool.setEvent('mouseup', function (mouse, event) {
  142.                             if (!(mouse.buttons & 1)) {
  143.                                 finish();
  144.                             }
  145.                         });
  146.                     } else if (mouse.buttons === 1 && tool.extra.end) {
  147.                         if (isInside()) {
  148.                             let offx = mouse.tileX;
  149.                             let offy = mouse.tileY;
  150.                             tool.setEvent('mousemove', function (mouse, event) {
  151.                                 let dx = mouse.tileX - offx;
  152.                                 let dy = mouse.tileY - offy;
  153.                                 tool.extra.start = [s[0] + dx, s[1] + dy];
  154.                                 tool.extra.end = [e[0] + dx, e[1] + dy];
  155.                             });
  156.                             let end = function end() {
  157.                                 tool.setEvent('mouseup deselect mousemove', null);
  158.                             };
  159.                             tool.setEvent('deselect', end);
  160.                             tool.setEvent('mouseup', function (mouse, event) {
  161.                                 if (!(mouse.buttons & 1)) {
  162.                                     end();
  163.                                 }
  164.                                 ;
  165.                             });
  166.                         }
  167.                     } else if (mouse.buttons === 2 && tool.extra.end && isInside()) {
  168.                         let players = Object.keys(filter(Players, i => i.x >= tool.extra.start[0] && i.y >= tool.extra.start[1]
  169.                                                        && i.x <= tool.extra.end[0] && i.y <= tool.extra.end[1]));
  170.                         let act = prompt(`Apply action to ${players.join(", ")} (${players.length}). "ID" will be replaced to their ids.`);
  171.                         if(!act) return;
  172.                         for(let i of players) {
  173.                             OWOP.chat.send("/" + act.replace(/ID/g, i));
  174.                             await sleep(delay);
  175.                         }
  176.                     } else {
  177.                         tool.extra.start = null;
  178.                         tool.extra.end = null;
  179.                     }
  180.                 });
  181.             }));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement