Advertisement
DayDun

Area Erase Tool

Jul 3rd, 2018
3,300
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. OWOP.tool.addToolObject(new OWOP.tool.class("Area Erase", OWOP.cursors.selectprotect, OWOP.fx.player.NONE, OWOP.RANK.ADMIN, function (tool) {
  2.     function drawText(ctx, str, x, y, centered) {
  3.         ctx.strokeStyle = "#000000", ctx.fillStyle = "#FFFFFF", ctx.lineWidth = 2.5, ctx.globalAlpha = 0.5;
  4.         if (centered) {
  5.             x -= ctx.measureText(str).width >> 1;
  6.         }
  7.         ctx.strokeText(str, x, y);
  8.         ctx.globalAlpha = 1;
  9.         ctx.fillText(str, x, y);
  10.     }
  11.    
  12.     tool.setFxRenderer(function (fx, ctx, time) {
  13.         if (!fx.extra.isLocalPlayer) return 1;
  14.         var x = fx.extra.player.x;
  15.         var y = fx.extra.player.y;
  16.         var fxx = (Math.round(x / 256) * 16 - OWOP.camera.x) * OWOP.camera.zoom;
  17.         var fxy = (Math.round(y / 256) * 16 - OWOP.camera.y) * OWOP.camera.zoom;
  18.         var oldlinew = ctx.lineWidth;
  19.         ctx.lineWidth = 1;
  20.         if (tool.extra.end) {
  21.             var s = tool.extra.start;
  22.             var e = tool.extra.end;
  23.             var x = (s[0] * 16 - OWOP.camera.x) * OWOP.camera.zoom + 0.5;
  24.             var y = (s[1] * 16 - OWOP.camera.y) * OWOP.camera.zoom + 0.5;
  25.             var rw = e[0] - s[0];
  26.             var rh = e[1] - s[1];
  27.             var w = rw * OWOP.camera.zoom * 16;
  28.             var h = rh * OWOP.camera.zoom * 16;
  29.             ctx.beginPath();
  30.             ctx.rect(x, y, w, h);
  31.             ctx.globalAlpha = 1;
  32.             ctx.strokeStyle = "#FFFFFF";
  33.             ctx.stroke();
  34.             ctx.setLineDash([3, 4]);
  35.             ctx.strokeStyle = "#000000";
  36.             ctx.stroke();
  37.             if (tool.extra.isSure) {
  38.                 ctx.globalAlpha = 0.6;
  39.                 ctx.fillStyle = "#00EE00";
  40.                 ctx.fill();
  41.             }
  42.             ctx.globalAlpha = 0.25 + Math.sin(time / 500) / 4;
  43.             ctx.fillStyle = OWOP.renderer.patterns.unloaded;
  44.             ctx.fill();
  45.             ctx.setLineDash([]);
  46.             var oldfont = ctx.font;
  47.             ctx.font = "16px sans-serif";
  48.             var txt = (tool.extra.isSure ? "Click again to confirm. " : !tool.extra.clicking ? "Click to erase. " : "") + '(' + Math.abs(rw) + 'x' + Math.abs(rh) + ')';
  49.             var txtx = window.innerWidth >> 1;
  50.             var txty = window.innerHeight >> 1;
  51.             txtx = Math.max(x, Math.min(txtx, x + w));
  52.             txty = Math.max(y, Math.min(txty, y + h));
  53.  
  54.             drawText(ctx, txt, txtx, txty, true);
  55.             ctx.font = oldfont;
  56.             ctx.lineWidth = oldlinew;
  57.             return 0;
  58.         } else {
  59.             ctx.beginPath();
  60.             ctx.moveTo(0, fxy + 0.5);
  61.             ctx.lineTo(window.innerWidth, fxy + 0.5);
  62.             ctx.moveTo(fxx + 0.5, 0);
  63.             ctx.lineTo(fxx + 0.5, window.innerHeight);
  64.  
  65.             //ctx.lineWidth = 1;
  66.             ctx.globalAlpha = 1;
  67.             ctx.strokeStyle = "#FFFFFF";
  68.             ctx.stroke();
  69.             ctx.setLineDash([3]);
  70.             ctx.strokeStyle = "#000000";
  71.             ctx.stroke();
  72.  
  73.             ctx.setLineDash([]);
  74.             ctx.lineWidth = oldlinew;
  75.             return 1;
  76.         }
  77.     });
  78.  
  79.     tool.extra.start = null;
  80.     tool.extra.end = null;
  81.     tool.extra.clicking = false;
  82.     tool.extra.isSure = false;
  83.  
  84.     var timeout = null;
  85.  
  86.     var sure = function sure() {
  87.         if (tool.extra.isSure) {
  88.             clearTimeout(timeout);
  89.             timeout = null;
  90.             tool.extra.isSure = false;
  91.             return true;
  92.         }
  93.         tool.extra.isSure = true;
  94.         setTimeout(function () {
  95.             tool.extra.isSure = false;
  96.             timeout = null;
  97.         }, 1000);
  98.         return false;
  99.     };
  100.  
  101.     tool.setEvent('mousedown', function (mouse, event) {
  102.         var get = {
  103.             rx: function rx() {
  104.                 return mouse.tileX / 16;
  105.             },
  106.             ry: function ry() {
  107.                 return mouse.tileY / 16;
  108.             },
  109.             x: function x() {
  110.                 return Math.round(mouse.tileX / 16);
  111.             },
  112.             y: function y() {
  113.                 return Math.round(mouse.tileY / 16);
  114.             }
  115.         };
  116.         var s = tool.extra.start;
  117.         var e = tool.extra.end;
  118.         var isInside = function isInside() {
  119.             return get.rx() >= s[0] && get.rx() < e[0] && get.ry() >= s[1] && get.ry() < e[1];
  120.         };
  121.         if (mouse.buttons === 1 && !tool.extra.end) {
  122.             tool.extra.start = [get.x(), get.y()];
  123.             tool.extra.clicking = true;
  124.             tool.setEvent('mousemove', function (mouse, event) {
  125.                 if (tool.extra.start && mouse.buttons === 1) {
  126.                     tool.extra.end = [get.x(), get.y()];
  127.                     return 1;
  128.                 }
  129.             });
  130.             var finish = function finish() {
  131.                 tool.setEvent('mousemove mouseup deselect', null);
  132.                 tool.extra.clicking = false;
  133.                 var s = tool.extra.start;
  134.                 var e = tool.extra.end;
  135.                 if (e) {
  136.                     if (s[0] === e[0] || s[1] === e[1]) {
  137.                         tool.extra.start = null;
  138.                         tool.extra.end = null;
  139.                     }
  140.                     if (s[0] > e[0]) {
  141.                         var tmp = e[0];
  142.                         e[0] = s[0];
  143.                         s[0] = tmp;
  144.                     }
  145.                     if (s[1] > e[1]) {
  146.                         var tmp = e[1];
  147.                         e[1] = s[1];
  148.                         s[1] = tmp;
  149.                     }
  150.                 }
  151.                 OWOP.renderer.render(OWOP.renderer.rendertype.FX);
  152.             };
  153.             tool.setEvent('deselect', finish);
  154.             tool.setEvent('mouseup', function (mouse, event) {
  155.                 if (!(mouse.buttons & 1)) {
  156.                     finish();
  157.                 }
  158.             });
  159.         } else if (mouse.buttons === 1 && tool.extra.end) {
  160.             if (isInside() && sure()) {
  161.                 tool.extra.start = null;
  162.                 tool.extra.end = null;
  163.                 var _ref = [s[0], s[1], e[0] - s[0], e[1] - s[1]],
  164.                     x = _ref[0],
  165.                     y = _ref[1],
  166.                     w = _ref[2],
  167.                     h = _ref[3];
  168.  
  169.                 for (var i = x; i < x + w; i++) {
  170.                     for (var j = y; j < y + h; j++) {
  171.                         OWOP.net.protocol.clearChunk(i, j, [255, 255, 255]);
  172.                     }
  173.                 }
  174.             } else if (!isInside()) {
  175.                 tool.extra.start = null;
  176.                 tool.extra.end = null;
  177.             }
  178.         }
  179.     });
  180. }));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement