猫国建设者修改器

注意:此版本支持科学技术法,例如:1e93.7e18.

// ==UserScript==
// ==UserScript==
// @name         猫国建设者修改器
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  猫国建设者全资源修改器 - 支持科学计数法
// @author       GGC大帝
// @match        https://lolitalibrary.com/maomao/*
// @grant        GM_addStyle
// @grant        GM_getValue
// @grant        GM_setValue
// ==/UserScript==

GM_addStyle(`
    .resource-editor {
        position: fixed;
        left: ${GM_getValue('editorPosX', '10px')};
        top: ${GM_getValue('editorPosY', '10px')};
        user-select: none;
        z-index: 9999;
        background: #f8f9fa;
        padding: 8px;
        border-radius: 6px;
        box-shadow: 0 2px 8px rgba(0,0,0,0.15);
        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
        width: 300px;
        transition: all 0.2s ease;
    }

    .editor-header {
        display: flex;
        justify-content: space-between;
        align-items: center;
        margin-bottom: 8px;
        padding-bottom: 6px;
        border-bottom: 1px solid #e0e0e0;
    }

    .editor-title {
        font-weight: bold;
        color: #2c3e50;
        font-size: 14px;
    }

    .editor-close {
        cursor: pointer;
        color: #7f8c8d;
        font-size: 16px;
        background: none;
        border: none;
        padding: 0;
    }

    .resource-selector {
        width: 100%;
        padding: 6px;
        border: 1px solid #bdc3c7;
        border-radius: 3px;
        margin-bottom: 8px;
        font-size: 13px;
    }

    .resource-controls {
        display: flex;
        gap: 6px;
    }

    .resource-amount {
        flex: 1;
        padding: 6px;
        border: 1px solid #bdc3c7;
        border-radius: 3px;
        font-size: 13px;
    }

    .add-button {
        padding: 6px 12px;
        background: #2ecc71;
        color: white;
        border: none;
        border-radius: 4px;
        cursor: pointer;
        font-size: 13px;
        transition: background 0.2s;
    }

    .add-button:hover {
        background: #27ae60;
    }

    .format-hint {
        font-size: 11px;
        color: #7f8c8d;
        margin-top: 4px;
        text-align: right;
    }
`);

(function() {
    'use strict';

    // 所有资源数据
    const resourceData = [
        {
            group: '基础资源',
            items: [
                { name: '猫薄荷', value: 'catnip' },
                { name: '木材', value: 'wood' },
                { name: '矿物', value: 'minerals' },
                { name: '煤炭', value: 'coal' },
                { name: '铁锭', value: 'iron' },
                { name: '钛锭', value: 'titanium' },
                { name: '黄金', value: 'gold' },
                { name: '石油', value: 'oil' },
                { name: '铀', value: 'uranium' },
                { name: '难得素', value: 'unobtainium' }
            ]
        },
        {
            group: '科技资源',
            items: [
                { name: '喵力', value: 'manpower' },
                { name: '科研点', value: 'science' },
                { name: '文化点', value: 'culture' },
                { name: '信仰', value: 'faith' },
                { name: '喵星人', value: 'kittens' },
                { name: '斑马', value: 'zebras' },
                { name: '星图', value: 'starchart' },
                { name: '火箭', value: 'rocket' },
                { name: '时间通量', value: 'temporalFlux' },
                { name: '浮点运算', value: 'gflops' },
                { name: '哈希', value: 'hashrates' }
            ]
        },
        {
            group: '稀有资源',
            items: [
                { name: '皮革', value: 'furs' },
                { name: '象牙', value: 'ivory' },
                { name: '香料', value: 'spice' },
                { name: '独角兽', value: 'unicorns' },
                { name: '空角兽', value: 'alicorn' },
                { name: '眼泪', value: 'tears' }
            ]
        },
        {
            group: '高级资源',
            items: [
                { name: '领导力', value: 'paragon' },
                { name: '燃烧领导力', value: 'burnedParagon' },
                { name: '时光水晶', value: 'timeCrystal' },
                { name: '悲伤', value: 'sorrow' },
                { name: '礼盒', value: 'elderBox' },
                { name: '包装纸', value: 'wrappingPaper' },
                { name: '黑币', value: 'blackcoin' }
            ]
        },
        {
            group: '工业资源',
            items: [
                { name: '横梁', value: 'beam' },
                { name: '石板', value: 'slab' },
                { name: '混凝土', value: 'concrete' },
                { name: '金属板', value: 'plate' },
                { name: '钢铁', value: 'steel' },
                { name: '合金', value: 'alloy' },
                { name: '齿轮', value: 'gear' },
                { name: '脚手架', value: 'scaffold' },
                { name: '船', value: 'ship' },
                { name: '油轮', value: 'tanker' },
                { name: '煤油', value: 'kerosene' }
            ]
        },
        {
            group: '知识资源',
            items: [
                { name: '手稿', value: 'manuscript' },
                { name: '羊皮纸', value: 'parchment' },
                { name: '摘要', value: 'compendium' },
                { name: '蓝图', value: 'blueprint' },
                { name: '钍', value: 'thorium' },
                { name: '巨石', value: 'megalith' }
            ]
        },
        {
            group: '神秘资源',
            items: [
                { name: '死灵兽', value: 'necrocorn' },
                { name: 'E合金', value: 'eludium' },
                { name: '虚空', value: 'void' },
                { name: '圣遗物', value: 'relic' },
                { name: '反物质', value: 'antimatter' }
            ]
        }
    ];

    // 创建编辑器容器
    const editor = document.createElement('div');
    editor.className = 'resource-editor';
    editor.innerHTML = `
        <div class="editor-header">
            <div class="editor-title">🐱 资源编辑器</div>
            <button class="editor-close">×</button>
        </div>
        <select id="resource_selector" class="resource-selector">
            ${resourceData.map(group => `
                <optgroup label="${group.group}">
                    ${group.items.map(item => `
                        <option value="${item.value}">${item.name} (${item.value})</option>
                    `).join('')}
                </optgroup>
            `).join('')}
        </select>
        <div class="resource-controls">
            <input type="text" class="resource-amount" id="resource_amount" value="10000" placeholder="例如: 1.5e9" />
            <button id="add_resource" class="add-button">添加</button>
        </div>
        <div class="format-hint">支持科学计数法 (如1e6=1百万)</div>
    `;

    document.body.appendChild(editor);

    // 关闭按钮功能
    editor.querySelector('.editor-close').addEventListener('click', () => {
        editor.style.display = 'none';
    });

    // 解析数值输入(支持科学计数法)
    function parseNumberInput(value) {
        if (value === '') return 10000;

        // 尝试解析科学计数法
        const num = Number(value);
        if (!isNaN(num) && isFinite(num)) {
            return num;
        }

        // 尝试解析常规数字
        const simpleNum = parseFloat(value);
        return isNaN(simpleNum) ? 10000 : simpleNum;
    }

    // 添加资源按钮点击事件
    document.getElementById('add_resource').addEventListener('click', function() {
        const resourceType = document.getElementById('resource_selector').value;
        const inputValue = document.getElementById('resource_amount').value;
        const amount = parseNumberInput(inputValue);

        if (gamePage?.resPool?.resourceMap?.[resourceType]) {
            gamePage.resPool.resourceMap[resourceType].value += amount;
            this.textContent = '✓ 成功';
            setTimeout(() => this.textContent = '添加', 1000);

            // 显示实际添加的数值(格式化显示)
            const formattedAmount = amount >= 1e6
                ? amount.toExponential(2).replace('.00', '')
                : amount.toLocaleString();
            console.log(`成功添加 ${formattedAmount} ${resourceType}`);
        } else {
            alert("资源类型不存在或游戏未加载完成!");
        }
    });

    // 拖拽功能(保持不变)
    let isDragging = false;
    let offsetX, offsetY;

    editor.querySelector('.editor-header').addEventListener('mousedown', (e) => {
        if (e.target.classList.contains('editor-close')) return;
        isDragging = true;
        offsetX = e.clientX - editor.getBoundingClientRect().left;
        offsetY = e.clientY - editor.getBoundingClientRect().top;
        editor.style.cursor = 'grabbing';
    });

    document.addEventListener('mousemove', (e) => {
        if (!isDragging) return;
        const x = e.clientX - offsetX;
        const y = e.clientY - offsetY;
        editor.style.left = `${x}px`;
        editor.style.top = `${y}px`;
        GM_setValue('editorPosX', `${x}px`);
        GM_setValue('editorPosY', `${y}px`);
    });

    document.addEventListener('mouseup', () => {
        isDragging = false;
        editor.style.cursor = '';
    });
})();

posted @ 2025-08-08 22:22  ggc114514  阅读(757)  评论(0)    收藏  举报