Greasy Fork

来自缓存

Greasy Fork is available in English.

[银河奶牛]中文单位转换

智能转换k/M单位:10k→1万,100k→10万,1M→1百万

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         [银河奶牛]中文单位转换
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  智能转换k/M单位:10k→1万,100k→10万,1M→1百万
// @license      MIT
// @author       sangshiCHI
// @match        https://www.milkywayidle.com/*
// @match        https://test.milkywayidle.com/*
// @match        https://luyh7.github.io/milkonomy/*
// @match        https://amvoidguy.github.io/MWICombatSimulatorTest/*
// @match        https://shykai.github.io/mwisim.github.io/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=milkywayidle.com
// @grant        GM.xmlHttpRequest
// @grant        GM_registerMenuCommand
// ==/UserScript==

/*转换规则说明:
1k-9999k范围:

1k → 1000

9.9k → 9900

1万-99.9万范围:

10k → 1万

99.9k → 9.99万

10万-99.9万范围:

100k → 10万

999k → 99.9万

100万及以上:

1000k → 1百万

10000k → 1千万
*/

//↓↓↓↓此段引用自stella‘Milky way idle汉化插件’脚本:http://greasyfork.icu/zh-CN/scripts/494308-milky-way-idle%E6%B1%89%E5%8C%96%E6%8F%92%E4%BB%B6/code ↓↓↓↓
//1.排除非翻译部分
const excludeRegs = [
     // 一个字母都不包含
    /^[^a-zA-Z]*$/,
    // 排除时间
    /^(\d+h )?(\d+m )?(\d+s)*$/,
    // 等级
    /^Lv.\d+$/,
    ];
const excludeSelectors = [
    // 排除人名相关
    '[class^="CharacterName"]',
    // 排除排行榜人名
    '[class^="CharacterName_name__1amXp"] span',
    // 排除共享链接
    '[class^="SocialPanel_referralLink"]',
    // 排除工会介绍
    '[class^="GuildPanel_message"]',
    // 排除工会名字
    '[class^="GuildPanel_guildName"]',
    // 排除排行榜工会名字
    '[class^="LeaderboardPanel_guildName"]',
    // 排除个人信息工会名字
    '[class^="CharacterName_characterName__2FqyZ CharacterName_xlarge__1K-fn"]',
    // 排除战斗中的玩家名
    '[class^="BattlePanel_playersArea"] [class^="CombatUnit_name"]',
    // 排除消息内容
    '[class^="ChatMessage_chatMessage"] span',
    // 社区buff贡献者名字
    '[class^="CommunityBuff_contributors"] div',
    // 选择队伍中的队伍名
    '[class^="FindParty_partyName"]',
    // 队伍中的队伍名
    '[class^="Party_partyName"]',
    ];
//↑↑↑↑此段引用自stella‘Milky way idle汉化插件’脚本:http://greasyfork.icu/zh-CN/scripts/494308-milky-way-idle%E6%B1%89%E5%8C%96%E6%8F%92%E4%BB%B6/code↑↑↑↑


(function() {
    'use strict';

    // 🔧 调试模式 (true开启日志)
    const DEBUG = true;
    const log = DEBUG ? console.log.bind(console, '[单位转换]') : () => {};

    // 🎯 配置核心参数(主要修改点1:移除千单位规则)
    const CONFIG = {
        SCAN_INTERVAL: 500,
        MIN_NUMBER: 10000, // 主要修改点2:仅处理1万以上数值
        UNIT_RULES: [
            { value: 1e8, symbol: '亿', decimals: 1 },
            { value: 1e4, symbol: '万', decimals: 1 }
        ],
        EXCLUDE_TAGS: ['SCRIPT', 'STYLE', 'TEXTAREA']
    };

    // 🔄 单位转换核心(主要修改点3:调整返回逻辑)
    function convertValue(input) {
        try {
            const match = input.match(/([\d,]+\.?\d*)([kKmM]?)/);
            if (!match) return input;

            let num = parseFloat(match[1].replace(/,/g, ''));
            const unit = match[2].toUpperCase();

            switch(unit) {
                case 'K': num *= 1e3; break;
                case 'M': num *= 1e6; break;
            }

            // 主要修改点4:千位以内直接返回格式化数值
            if (num < 10000) {
                return num.toLocaleString(); // 如2741 → 2,741
            }

            for (const rule of CONFIG.UNIT_RULES) {
                if (num >= rule.value) {
                    const value = num / rule.value;
                    let result = value.toFixed(rule.decimals)
                                    .replace(/\.?0+$/, '')
                                    .replace(/\.$/, '');

                    // 处理大数值进位问题(如5500万)
                    if (rule.symbol === '万' && num >= 1e7) {
                        return `${(num/1e4).toFixed(0)}万`;
                    }
                    return `${result}${rule.symbol}`;
                }
            }

            // 万级以下数值保留原格式(主要修改点5)
            return num.toLocaleString();

        } catch(e) {
            log('转换异常:', input, e);
            return input;
        }
    }

    /* 其余代码保持不变(DOM处理器/扫描器/监听系统等) */
    // ...(保持原有DOM处理逻辑不变)...

    // 🖥️ DOM处理器
    function processTextNode(node) {
        if (CONFIG.EXCLUDE_TAGS.includes(node.parentNode.tagName)) return;

        const newText = node.textContent.replace(/(\d[\d,.kKmM]*)/g, (match) => {
            if (/^\d+$/.test(match)) return match;
            return convertValue(match);
        });

        if (newText !== node.textContent) {
            node.textContent = newText;
            log('已转换:', node.textContent, '→', newText);
        }
    }

    // 🔍 安全扫描器
    function safeScan(root = document) {
        try {
            const walker = document.createTreeWalker(
                root,
                NodeFilter.SHOW_TEXT,
                { acceptNode: node =>
                    node.textContent.match(/\d/) ?
                    NodeFilter.FILTER_ACCEPT :
                    NodeFilter.FILTER_REJECT
                }
            );

            let node;
            while ((node = walker.nextNode())) {
                processTextNode(node);
            }
        } catch(e) {
            log('扫描异常:', e);
        }
    }

    // 🚀 动态内容监听系统
    const observer = new MutationObserver(mutations => {
        mutations.forEach(mutation => {
            mutation.addedNodes.forEach(node => {
                if (node.nodeType === Node.ELEMENT_NODE) {
                    setTimeout(() => safeScan(node), 100);
                }
            });
        });
    });

    // 📡 初始化系统
    function init() {
        safeScan(document.body);
        observer.observe(document, {
            childList: true,
            subtree: true
        });
        setInterval(() => safeScan(document.body), CONFIG.SCAN_INTERVAL);
        log('系统启动成功');
    }

    // ⏳ 延迟启动防止遗漏
    if (document.readyState === 'complete') {
        setTimeout(init, 1000);
    } else {
        window.addEventListener('load', () => setTimeout(init, 1000));
    }
})();