您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Convert mice weight to metric.
- // ==UserScript==
- // @name 🐭️ MouseHunt - Metric
- // @description Convert mice weight to metric.
- // @version 2.1.0
- // @license MIT
- // @author bradp
- // @namespace bradp
- // @match https://www.mousehuntgame.com/*
- // @icon https://i.mouse.rip/mh-improved/icon-64.png
- // @run-at document-end
- // @grant none
- // @require https://cdn.jsdelivr.net/npm/script-migration@1.1.1
- // ==/UserScript==
- var mhui = (() => {
- var __defProp = Object.defineProperty;
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
- var __getOwnPropNames = Object.getOwnPropertyNames;
- var __hasOwnProp = Object.prototype.hasOwnProperty;
- var __export = (target, all) => {
- for (var name in all)
- __defProp(target, name, { get: all[name], enumerable: true });
- };
- var __copyProps = (to, from, except, desc) => {
- if (from && typeof from === "object" || typeof from === "function") {
- for (let key of __getOwnPropNames(from))
- if (!__hasOwnProp.call(to, key) && key !== except)
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
- }
- return to;
- };
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
- var __async = (__this, __arguments, generator) => {
- return new Promise((resolve, reject) => {
- var fulfilled = (value) => {
- try {
- step(generator.next(value));
- } catch (e) {
- reject(e);
- }
- };
- var rejected = (value) => {
- try {
- step(generator.throw(value));
- } catch (e) {
- reject(e);
- }
- };
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
- step((generator = generator.apply(__this, __arguments)).next());
- });
- };
- // src/modules/metric/index.js
- var metric_exports = {};
- __export(metric_exports, {
- default: () => metric_default
- });
- // src/utils/events.js
- var requestCallbacks = {};
- var onRequestHolder = null;
- var onRequest = (url = null, callback = null, skipSuccess = false, ignore = []) => {
- url = "*" === url ? "*" : `managers/ajax/${url}`;
- if (ignore.includes(url)) {
- return;
- }
- if (!callback) {
- return;
- }
- if (!requestCallbacks[url]) {
- requestCallbacks[url] = [];
- }
- requestCallbacks[url].push({
- callback,
- skipSuccess
- });
- if (onRequestHolder) {
- return;
- }
- const req = XMLHttpRequest.prototype.open;
- XMLHttpRequest.prototype.open = function() {
- this.addEventListener("load", function() {
- if (this.responseText) {
- let response = {};
- try {
- response = JSON.parse(this.responseText);
- } catch (e) {
- return;
- }
- Object.keys(requestCallbacks).forEach((key) => {
- if ("*" === key || this.responseURL.includes(key)) {
- requestCallbacks[key].forEach((item) => {
- if (item.callback && typeof item.callback === "function" && (item.skipSuccess || (response == null ? void 0 : response.success))) {
- item.callback(response);
- }
- });
- }
- });
- }
- });
- Reflect.apply(req, this, arguments);
- };
- onRequestHolder = true;
- };
- var getDialogMapping = () => {
- return {
- treasureMapPopup: "map",
- itemViewPopup: "item",
- mouseViewPopup: "mouse",
- largerImage: "image",
- convertibleOpenViewPopup: "convertible",
- adventureBookPopup: "adventureBook",
- marketplaceViewPopup: "marketplace",
- giftSelectorViewPopup: "gifts",
- supportPageContactUsForm: "support",
- MHCheckout: "premiumShop"
- };
- };
- var onDialogShow = (overlay = null, callback = null, once = false) => {
- const identifier = callback.toString().replaceAll(/[^\w-]/gi, "");
- eventRegistry.addEventListener("js_dialog_show", () => {
- if (!activejsDialog) {
- return;
- }
- const tokens = activejsDialog.getAllTokens();
- if (!tokens || !tokens["{*content*}"] || !tokens["{*content*}"].value || tokens["{*content*}"].value === "" || tokens["{*content*}"].value.includes('data-item-type=""') || // Item view.
- tokens["{*content*}"].value.includes('data-mouse-id=""')) {
- return;
- }
- const atts = activejsDialog.getAttributes();
- let dialogType = atts.className.replace("jsDialogFixed", "").replace("wide", "").replace("default", "").replaceAll(" ", " ").replaceAll(" ", ".").trim();
- if (dialogType.endsWith(".")) {
- dialogType = dialogType.slice(0, -1);
- }
- if ((!overlay || "all" === overlay) && "function" === typeof callback) {
- return callback();
- }
- const dialogMapping = getDialogMapping();
- if ("function" === typeof callback && (overlay === dialogType || overlay === dialogMapping[dialogType])) {
- return callback();
- }
- }, null, once, 0, identifier);
- };
- // src/utils/messages.js
- hadAddedErrorStyles = false;
- // src/modules/metric/index.js
- var imperialToMetric = (text) => {
- const lb = text.match(/(\d+? )lb./i);
- const oz = text.match(/(\d+? )oz./i);
- if (!(lb || oz)) {
- return;
- }
- const lbValue = lb ? lb[1] : 0;
- const ozValue = oz ? oz[1] : 0;
- const totalWeight = Number.parseInt(lbValue) + Number.parseInt(ozValue) / 16;
- const totalWeightMetric = (Math.round(totalWeight * 0.45359237 * 100) / 100).toString();
- return text.replace(/(\d+? lb.\s)?(\d+? oz.)/i, totalWeightMetric + " kg. ");
- };
- var convertInDialog = () => {
- const mouseViewWeights = document.querySelectorAll(".mouseView-statsContainer .mouseView-statsContainer-block-padding table tbody tr");
- if (mouseViewWeights.length) {
- mouseViewWeights.forEach((row) => {
- const firstCell = row.querySelector("td");
- const secondCell = firstCell.nextSibling;
- if (firstCell.innerText === "Avg. Weight:" || firstCell.innerText === "Heaviest:") {
- const converted = imperialToMetric(secondCell.innerText);
- if (converted) {
- secondCell.innerText = converted;
- }
- }
- });
- }
- };
- var replaceInJournal = () => {
- const entries = document.querySelectorAll(".journal .entry .journalbody .journaltext");
- if (!entries.length) {
- return;
- }
- entries.forEach((entry) => {
- const converted = imperialToMetric(entry.innerHTML);
- if (converted) {
- entry.innerHTML = converted;
- }
- });
- };
- var replaceOnMousePage = () => {
- const mouseWeightsStats = document.querySelectorAll(".mouseListView-categoryContent-subgroupContainer .mouseListView-categoryContent-subgroup-mouse-stats");
- if (!mouseWeightsStats.length) {
- return;
- }
- mouseWeightsStats.forEach((stat) => {
- if (stat.classList.contains("average_weight") || stat.classList.contains("heaviest_catch")) {
- const converted = imperialToMetric(stat.innerText);
- if (converted) {
- stat.innerText = converted;
- }
- }
- });
- };
- var convertOnPage = () => {
- replaceOnMousePage();
- replaceInJournal();
- };
- var init = () => __async(void 0, null, function* () {
- onDialogShow("all", convertInDialog);
- onRequest("*", convertOnPage);
- convertOnPage();
- });
- var metric_default = {
- id: "metric",
- name: "Metric Units",
- type: "feature",
- default: false,
- description: "Use metric units instead of imperial units.",
- load: init
- };
- return __toCommonJS(metric_exports);
- })();
- mhImprovedVersion = "0.0.0-userscript;"
- mhImprovedPlatform = "userscript";
- mhui.default.load();
- migrateUserscript('Metric', 'https://greasyfork.org/en/scripts/449840-mousehunt-metric');