Mxo New Bot Librarys/Depencens - Extensions

For Mxo New Bot - Library/Depencens

สคริปต์นี้ไม่ควรถูกติดตั้งโดยตรง มันเป็นคลังสำหรับสคริปต์อื่น ๆ เพื่อบรรจุด้วยคำสั่งเมทา // @require https://update.greasyfork.org/scripts/465113/1185072/Mxo%20New%20Bot%20LibrarysDepencens%20-%20Extensions.js

// ==UserScript==
// @version      1.0
// @author       https://github.com/bababoyy
// @license      GPLv3
// ==/UserScript==
window.onMxobotLoaded = window.onMxobotLoaded || [];
window.onMxobotLoaded.push(function () {
  function filter(tasks) {
    return tasks.filter(
      (x) =>
        x.color != window.MxobotWS.BBY_get_pixel(x.x, x.y) && x.color != -1
    );
  }

  function PatternExtensionGenerate(pattern) {
    return function () {
        Mxobot.Tasker.onTaskAction = function (task) {
        if (task == undefined) return;
        let chunkCoord = [
          Math.floor(task.x / pattern[0].length) * pattern[0].length,
          Math.floor(task.y / pattern.length) * pattern.length,
        ];
        let patternCoord = [task.x - chunkCoord[0], task.y - chunkCoord[1]];
        let ascii = pattern[patternCoord[1]][patternCoord[0]];
        if (ascii == "p") {
          return false;
        } else if (ascii == "X") {
          task.color = Mxobot.getSelectedColor();
        } else {
          task.color = ascii.charCodeAt(0) - "0".charCodeAt(0);
        }
        return true;
      };
    };
  }
  var amogus = ["ppppp", "p555p", "5500p", "5555p", "p555p", "p5p5p", "ppppp"];
  Mxobot.extensions.push([PatternExtensionGenerate(amogus), "amogus"]);
  Mxobot.extensions.push([
    PatternExtensionGenerate(["L5", "5L"]),
    "gmod missing texture",
  ]);

  Mxobot.extensions.push([
    PatternExtensionGenerate(["S", "J", "0", "J", "S"]),
    "trans",
  ]);
  Mxobot.extensions.push([
    PatternExtensionGenerate(["D", ">", "<", "8", "Q", "M"]),
    "lgbt",
  ]);
  Mxobot.extensions.push([
    PatternExtensionGenerate(["K", "J", "0", "U", "0", "J"]),
    "femboy",
  ]);

  Mxobot.extensions.push([
    function () {
      PatternExtensionGenerate(Mxobot.Menu.pixif)();
    },
    "Generate pattern by image",
  ]);

  Mxobot.extensions.push([
    function () {
      var rectsize = 2;
      function ontask(task) {
        return (
          task != undefined &&
          (task.y % (rectsize + 1) == 0 || task.x % (rectsize + 1) >= rectsize)
        );
      }
      Mxobot.Tasker.onTaskAction = ontask;
      Mxobot.Tasker.onImageTaskReorganize = function (tasks) {
        return tasks.filter(ontask);
      };
    },
    "┼ styled pixelating",
  ]);
  Mxobot.extensions.push([
    function () {
      /**
       * Shuffles array in place.
       * @param {Array} a items An array containing the items.
       */
      function shuffle(a) {
        var j, x, i;
        for (i = a.length - 1; i > 0; i--) {
          j = Math.floor(Math.random() * (i + 1));
          x = a[i];
          a[i] = a[j];
          a[j] = x;
        }
        return a;
      }
      Mxobot.Tasker.onImageTaskReorganize = function (tasks) {
        tasks = shuffle(tasks);
        tasks = filter(tasks);
        // change pixelradius from localstorage or keep it as 5
        var pixelRadius = localStorage.pixelradius - 0 || 5;
        var newTasks = Array.from(tasks);
        var pixels = [];
        var stucknum = 0;
        while (newTasks.length != 0) {
          var found_a_match = false;
          var task = newTasks.shift();
          if (pixels.length == 0) {
            pixels.push(task);
            found_a_match = true;
          } else if (stucknum > newTasks.length) {
            pixels = [...pixels, task];
            found_a_match = true;
          } else {
            for (let pixel of pixels) {
              if (
                (task.x - pixel.x) ** 2 + (task.y - pixel.y) ** 2 <=
                pixelRadius ** 2
              ) {
                pixels.push(task);
                found_a_match = true;
                break;
              }
            }
          }
          if (!found_a_match) {
            newTasks.push(task);
            stucknum++;
          } else {
            stucknum = 0;
          }
        }
        return pixels;
      };
    },
    "circledotting",
  ]);
  Mxobot.extensions.push([
    function () {
      function coordinate(x, y, ox, oy) {
        return [Math.abs(x - ox), Math.abs(y - oy)];
      }
      Mxobot.Tasker.onImageTaskReorganize = function (
        tasks,
        width,
        height,
        cx,
        cy
      ) {
        var [originX, originY] = [
          Math.floor(width / 2) + cx,
          Math.floor(height / 2) + cy,
        ];
        tasks.sort(
          (pixel1, pixel2) =>
            Math.hypot(pixel1.x - originX, pixel1.y - originY) -
            Math.hypot(pixel2.x - originX, pixel2.y - originY)
        );
        return tasks;
      };
    },
    "circlefilling",
  ]);

  Mxobot.extensions.push([
    function () {
      var colors = Array.from(
        document.querySelector("#palette-buttons").children
      )
        .filter((x) => x.className != "disabled")
        .map((x) => parseInt(x.getAttribute("data-id")));
      function ontask(task) {
        return task;
      }
      Mxobot.Tasker.onTaskAction = function (task) {
        if (task == undefined) return;
        task.color = colors[Math.floor(Math.random() * colors.length)];
        return true;
      };
      Mxobot.Tasker.onImageTaskReorganize = function (tasks) {
        if (!tasks || tasks.length == 0) {
          return [];
        }
        return tasks.map(function (task) {
          if (task == undefined) return;
          task.color = colors[Math.floor(Math.random() * colors.length)];
          return task;
        });
      };
    },
    "war",
  ]);
  Mxobot.extensions.push([
    function () {
      var colors = Array.from(
        document.querySelector("#palette-buttons").children
      )
        .filter((x) => x.className != "disabled")
        .map((x) => parseInt(x.getAttribute("data-id")));
      function ontask(task) {
        return task;
      }
      Mxobot.Tasker.onTaskAction = function (task) {
        if (task == undefined) return;
        task.color = colors[Math.floor(Math.random() * colors.length)];
        return true;
      };
      Mxobot.Tasker.onImageTaskReorganize = function (tasks) {
        if (!tasks || tasks.length == 0) {
          return [];
        }
        return tasks.map(function (task) {
          if (task == undefined) return;
          task.color = colors[Math.floor(Math.random() * colors.length)];
          task.x = tasks[0].x;
          task.y = tasks[0].y;
          return task;
        });
      };
    },
    "war in one pixel",
  ]);

  Mxobot.extensions.push([
    function () {
        Mxobot.Tasker.onTaskAction = () => true;
        Mxobot.Tasker.onImageTaskReorganize = undefined;
    },
    "Normalize Mxobot.Tasker events",
  ]);
  var fill_callback;
  var fill_ran = false;
  Mxobot.extensions.push([
    function () {
      if (fill_ran == false) {
        fill_ran = true;
        interact("#canvas").on("click", function () {
          if (fill_callback != undefined) {
            fill_callback();
          }
        });
      }
      let start_coordinate, end_coordinate;
      if (fill_callback) {
        fill_callback = undefined;
        toastr.info("closed fill");
        return;
      }
      toastr.info("opened fill");
      fill_callback = function () {
        if (start_coordinate) {
          end_coordinate = Mxobot.getCoordinates();
          let color = Mxobot.getSelectedColor();
          if (!color && color != 0) {
            return -1;
          }
          for (let y = start_coordinate[1]; y <= end_coordinate[1]; y++) {
            for (let x = start_coordinate[0]; x <= end_coordinate[0]; x++) {
              var mvpModeX;
              if ((y - start_coordinate[1]) % 2 == 0) {
                mvpModeX = x;
              } else {
                mvpModeX = end_coordinate[0] - x + start_coordinate[0];
              }
              Mxobot.Tasker._tasks.push({
                // @TODO Mxobot.Tasker
                x: mvpModeX,
                y: y,
                color: color,
              });
            }
          }
          Mxobot.Tasker._tasks = Mxobot.prepareTasks(Mxobot.Tasker._tasks)
          if (Mxobot.Tasker.onImageTaskReorganize) {
            Mxobot.Tasker._tasks = Mxobot.Tasker.onImageTaskReorganize(
                Mxobot.Tasker._tasks,
              end_coordinate[0] - start_coordinate[0],
              end_coordinate[1] - start_coordinate[1],
              ...start_coordinate
            );
          }
          start_coordinate = undefined;
        } else {
          start_coordinate = Mxobot.getCoordinates();
        }
      };
    },
    "fill",
  ]);

  Mxobot.extensions.push([
    function () {
      var timeout = prompt(
        "Your timeout is " +
          localStorage.timeout +
          " at the moment. Set timeout to (ms):"
      );
      if (isNaN(parseInt(timeout))) {
        return;
      }
      localStorage.timeout = parseInt(timeout);
    },
    "Set timeout",
  ]);
  Mxobot.extensions.push([
    function () {
      var name = prompt("Go to user:");
      $($('.messages div a[class="user open-profile"]').get(0))
        .attr("data-profile", name)
        .attr("data-id", name)
        .click();
    },
    "Go to user profile",
  ]);
});