// ==UserScript== // @name Better Loot Tracker // @namespace http://tampermonkey.net/ // @version 1.2.2 // @description 计算并展示掉落记录中强化和炼金行动的部分信息 // @author PaperCat // @match https://www.milkywayidle.com/* // @match https://test.milkywayidle.com/* // @match https://milkywayidle.com/* // @match https://milkywayidlecn.com/* // @match https://www.milkywayidlecn.com/* // @match https://test.milkywayidlecn.com/* // @require https://cdnjs.cloudflare.com/ajax/libs/mathjs/10.6.4/math.min.js // @require https://cdn.jsdelivr.net/npm/lz-string@1.5.0/libs/lz-string.min.js // @license MIT // @grant none // @downloadURL https://update.greasyfork.icu/scripts/561845/Better%20Loot%20Tracker.user.js // @updateURL https://update.greasyfork.icu/scripts/561845/Better%20Loot%20Tracker.meta.js // ==/UserScript== /* 此插件依赖 MWITools 的市场数据,请确保已安装 MWITools: This plugin depends on MWITools for market data. Please install MWITools: https://greasyfork.org/en/scripts/494467-mwitools */ (function() { 'use strict'; const userLanguage = localStorage.getItem('i18nextLng'); const isZH = userLanguage?.startsWith("zh"); // ====================== // 国际化文本 // ====================== const i18n = { zh: { success: '成功', failure: '失败', target: '目标', protectLevel: '保护等级', preferredLevels: '偏好等级', superEnhanceMinLevel: '超级强化最低起始等级', globalSettings: '全局设置', alchemyPriceMode: '炼金价格选择', alchemyPriceAskBid: '左买右卖', alchemyPriceBidAsk: '右买左卖', alchemyPriceAskAsk: '左买左卖', alchemyPriceBidBid: '右买右卖', autoOptimal: '自动(最优)', treatAsSuccess: '视为成功', material: '材料', protection: '保护', total: '总消耗', superSpend: '强化消耗', alchemyCost: '成本', alchemyOutput: '产出', alchemyProfit: '收益', originalCost: '原始成本', finalValue: '最终价值', profit: '收益', aboveExpected: '高于期望', belowExpected: '低于期望', expected: '期望', noMarketData: '市场数据未加载,请确保已安装MWITools' }, en: { success: 'Success', failure: 'Failure', target: 'Target', protectLevel: 'Protect Level', preferredLevels: 'Preferred Levels', superEnhanceMinLevel: 'Super Enhance Min Start', globalSettings: 'Global Settings', alchemyPriceMode: 'Alchemy Price Mode', alchemyPriceAskBid: 'Ask/ Bid', alchemyPriceBidAsk: 'Bid/ Ask', alchemyPriceAskAsk: 'Ask/ Ask', alchemyPriceBidBid: 'Bid/ Bid', autoOptimal: 'Auto(Optimal)', treatAsSuccess: 'Treat as Success', material: 'Material', protection: 'Protect', total: 'Total', superSpend: 'Enhance Spend', alchemyCost: 'Cost', alchemyOutput: 'Output', alchemyProfit: 'Profit', originalCost: 'Original Cost', finalValue: 'Final Value', profit: 'Profit', aboveExpected: 'Above expected', belowExpected: 'Below expected', expected: 'Expected', noMarketData: 'Market data not loaded, please ensure MWITools is installed' } }; const t = isZH ? i18n.zh : i18n.en; const DEBUG = { init: true, calc: false }; const logInit = (...args) => { if (DEBUG.init) console.log(...args); }; const logCalc = (...args) => { if (DEBUG.calc) console.log(...args); }; const LOOT_LOG_PANEL_SELECTOR = '.LootLogPanel_lootLogPanel__2013X'; const LOOT_LOG_LIST_SELECTOR = '.LootLogPanel_actionLoots__3oTid'; const LOOT_LOG_ITEM_SELECTOR = '.LootLogPanel_actionLoot__32gl_'; const REFRESH_BUTTON_SELECTOR = 'button.Button_button__1Fe9z'; const PREFERENCE_LEVELS_KEY = 'EnhancementLootTracker_preference_levels'; const SUPER_ENHANCE_MIN_KEY = 'EnhancementLootTracker_super_min_start_level'; const ALCHEMY_PRICE_MODE_KEY = 'EnhancementLootTracker_alchemy_price_mode'; const ALCHEMY_PRICE_MODES = ['ask_bid', 'bid_ask', 'ask_ask', 'bid_bid']; let globalPreferenceText = localStorage.getItem(PREFERENCE_LEVELS_KEY) || ''; let globalSuperEnhanceMinLevel = Number(localStorage.getItem(SUPER_ENHANCE_MIN_KEY)); let globalAlchemyPriceMode = localStorage.getItem(ALCHEMY_PRICE_MODE_KEY) || 'ask_bid'; if (!Number.isFinite(globalSuperEnhanceMinLevel) || globalSuperEnhanceMinLevel < 0) { globalSuperEnhanceMinLevel = 5; } if (!ALCHEMY_PRICE_MODES.includes(globalAlchemyPriceMode)) { globalAlchemyPriceMode = 'ask_bid'; } function getGlobalPreferenceLevels() { return parsePreferenceLevels(globalPreferenceText); } function setGlobalPreferenceText(text) { globalPreferenceText = text || ''; localStorage.setItem(PREFERENCE_LEVELS_KEY, globalPreferenceText); } function getSuperEnhanceMinLevel() { return globalSuperEnhanceMinLevel; } function setSuperEnhanceMinLevel(value) { const parsed = Number(value); if (!Number.isFinite(parsed)) return; const normalized = Math.min(Math.max(Math.round(parsed), 0), 20); globalSuperEnhanceMinLevel = normalized; localStorage.setItem(SUPER_ENHANCE_MIN_KEY, String(normalized)); } function getAlchemyPriceMode() { return globalAlchemyPriceMode; } function setAlchemyPriceMode(value) { if (!ALCHEMY_PRICE_MODES.includes(value)) return; globalAlchemyPriceMode = value; localStorage.setItem(ALCHEMY_PRICE_MODE_KEY, value); } function getLootLogContainer() { return document.querySelector(LOOT_LOG_LIST_SELECTOR); } function setupRefreshButtonHook() { const panel = document.querySelector(LOOT_LOG_PANEL_SELECTOR); if (!panel) return; const refreshButton = panel.querySelector(REFRESH_BUTTON_SELECTOR); if (!refreshButton || refreshButton.dataset.eltBound === '1') return; refreshButton.dataset.eltBound = '1'; refreshButton.addEventListener('click', () => { setTimeout(() => processLootLogs({ force: true }), 0); }); } // ====================== // 数据访问帮助函数 // ====================== function decompressInitClientData(compressedData) { try { const decompressedJson = LZString.decompressFromUTF16(compressedData); if (!decompressedJson) { throw new Error("decompressInitClientData: decompressFromUTF16() returned null"); } return JSON.parse(decompressedJson); } catch (error) { console.error("[Better Loot Tracker] decompressInitClientData: ", error); return null; } } let _cachedInitClientData = null; function getInitClientData() { if (_cachedInitClientData) return _cachedInitClientData; const stored = localStorage.getItem("initClientData"); if (!stored) return null; // 解压缩 const decompressed = decompressInitClientData(stored); if (decompressed) { _cachedInitClientData = decompressed; return decompressed; } return null; } // 获取市场数据 (来自MWITools) function getMarketData() { try { const marketDataStr = localStorage.getItem('MWITools_marketAPI_json'); if (marketDataStr) { return JSON.parse(marketDataStr); } } catch (e) { console.error('[Better Loot Tracker] Error loading market data:', e); } return null; } function getMarketPrice(itemHRID, marketData) { if (itemHRID === '/items/coin' || itemHRID === '/items/coins') return 1; if (!itemHRID || typeof itemHRID !== 'string') return 0; if (!marketData?.marketData) return 0; const marketRoot = marketData.marketData[itemHRID]; if (!marketRoot) return 0; const priceObject = marketRoot["0"]; if (!priceObject) return 0; return priceObject.a || priceObject.b || 0; } function getMarketPriceSide(itemHRID, marketData, side) { if (itemHRID === '/items/coin' || itemHRID === '/items/coins') return 1; if (!itemHRID || typeof itemHRID !== 'string') return 0; if (!marketData?.marketData) return 0; const marketRoot = marketData.marketData[itemHRID]; if (!marketRoot) return 0; const priceObject = marketRoot["0"]; if (!priceObject) return 0; if (side === 'bid') return priceObject.b || priceObject.a || 0; return priceObject.a || priceObject.b || 0; } /* 官方汉化 */ const ZHItemNames = { "/items/coin": "金币", "/items/task_token": "任务代币", "/items/labyrinth_token": "迷宫代币", "/items/chimerical_token": "奇幻代币", "/items/sinister_token": "阴森代币", "/items/enchanted_token": "秘法代币", "/items/pirate_token": "海盗代币", "/items/cowbell": "牛铃", "/items/bag_of_10_cowbells": "牛铃袋 (10个)", "/items/purples_gift": "小紫牛的礼物", "/items/small_meteorite_cache": "小陨石舱", "/items/medium_meteorite_cache": "中陨石舱", "/items/large_meteorite_cache": "大陨石舱", "/items/small_artisans_crate": "小工匠匣", "/items/medium_artisans_crate": "中工匠匣", "/items/large_artisans_crate": "大工匠匣", "/items/small_treasure_chest": "小宝箱", "/items/medium_treasure_chest": "中宝箱", "/items/large_treasure_chest": "大宝箱", "/items/chimerical_chest": "奇幻宝箱", "/items/chimerical_refinement_chest": "奇幻精炼宝箱", "/items/sinister_chest": "阴森宝箱", "/items/sinister_refinement_chest": "阴森精炼宝箱", "/items/enchanted_chest": "秘法宝箱", "/items/enchanted_refinement_chest": "秘法精炼宝箱", "/items/pirate_chest": "海盗宝箱", "/items/pirate_refinement_chest": "海盗精炼宝箱", "/items/purdoras_box_skilling": "紫多拉之盒(生活)", "/items/purdoras_box_combat": "紫多拉之盒(战斗)", "/items/labyrinth_refinement_chest": "迷宫精炼宝箱", "/items/seal_of_gathering": "采集封印", "/items/seal_of_gourmet": "美食封印", "/items/seal_of_processing": "加工封印", "/items/seal_of_efficiency": "效率封印", "/items/seal_of_action_speed": "行动速度封印", "/items/seal_of_combat_drop": "战斗掉落封印", "/items/seal_of_attack_speed": "攻击速度封印", "/items/seal_of_cast_speed": "施法速度封印", "/items/seal_of_damage": "伤害封印", "/items/seal_of_critical_rate": "暴击率封印", "/items/seal_of_wisdom": "经验封印", "/items/seal_of_rare_find": "稀有发现封印", "/items/blue_key_fragment": "蓝色钥匙碎片", "/items/green_key_fragment": "绿色钥匙碎片", "/items/purple_key_fragment": "紫色钥匙碎片", "/items/white_key_fragment": "白色钥匙碎片", "/items/orange_key_fragment": "橙色钥匙碎片", "/items/brown_key_fragment": "棕色钥匙碎片", "/items/stone_key_fragment": "石头钥匙碎片", "/items/dark_key_fragment": "黑暗钥匙碎片", "/items/burning_key_fragment": "燃烧钥匙碎片", "/items/chimerical_entry_key": "奇幻钥匙", "/items/chimerical_chest_key": "奇幻宝箱钥匙", "/items/sinister_entry_key": "阴森钥匙", "/items/sinister_chest_key": "阴森宝箱钥匙", "/items/enchanted_entry_key": "秘法钥匙", "/items/enchanted_chest_key": "秘法宝箱钥匙", "/items/pirate_entry_key": "海盗钥匙", "/items/pirate_chest_key": "海盗宝箱钥匙", "/items/donut": "甜甜圈", "/items/blueberry_donut": "蓝莓甜甜圈", "/items/blackberry_donut": "黑莓甜甜圈", "/items/strawberry_donut": "草莓甜甜圈", "/items/mooberry_donut": "哞莓甜甜圈", "/items/marsberry_donut": "火星莓甜甜圈", "/items/spaceberry_donut": "太空莓甜甜圈", "/items/cupcake": "纸杯蛋糕", "/items/blueberry_cake": "蓝莓蛋糕", "/items/blackberry_cake": "黑莓蛋糕", "/items/strawberry_cake": "草莓蛋糕", "/items/mooberry_cake": "哞莓蛋糕", "/items/marsberry_cake": "火星莓蛋糕", "/items/spaceberry_cake": "太空莓蛋糕", "/items/gummy": "软糖", "/items/apple_gummy": "苹果软糖", "/items/orange_gummy": "橙子软糖", "/items/plum_gummy": "李子软糖", "/items/peach_gummy": "桃子软糖", "/items/dragon_fruit_gummy": "火龙果软糖", "/items/star_fruit_gummy": "杨桃软糖", "/items/yogurt": "酸奶", "/items/apple_yogurt": "苹果酸奶", "/items/orange_yogurt": "橙子酸奶", "/items/plum_yogurt": "李子酸奶", "/items/peach_yogurt": "桃子酸奶", "/items/dragon_fruit_yogurt": "火龙果酸奶", "/items/star_fruit_yogurt": "杨桃酸奶", "/items/milking_tea": "挤奶茶", "/items/foraging_tea": "采摘茶", "/items/woodcutting_tea": "伐木茶", "/items/cooking_tea": "烹饪茶", "/items/brewing_tea": "冲泡茶", "/items/alchemy_tea": "炼金茶", "/items/enhancing_tea": "强化茶", "/items/cheesesmithing_tea": "奶酪锻造茶", "/items/crafting_tea": "制作茶", "/items/tailoring_tea": "缝纫茶", "/items/super_milking_tea": "超级挤奶茶", "/items/super_foraging_tea": "超级采摘茶", "/items/super_woodcutting_tea": "超级伐木茶", "/items/super_cooking_tea": "超级烹饪茶", "/items/super_brewing_tea": "超级冲泡茶", "/items/super_alchemy_tea": "超级炼金茶", "/items/super_enhancing_tea": "超级强化茶", "/items/super_cheesesmithing_tea": "超级奶酪锻造茶", "/items/super_crafting_tea": "超级制作茶", "/items/super_tailoring_tea": "超级缝纫茶", "/items/ultra_milking_tea": "究极挤奶茶", "/items/ultra_foraging_tea": "究极采摘茶", "/items/ultra_woodcutting_tea": "究极伐木茶", "/items/ultra_cooking_tea": "究极烹饪茶", "/items/ultra_brewing_tea": "究极冲泡茶", "/items/ultra_alchemy_tea": "究极炼金茶", "/items/ultra_enhancing_tea": "究极强化茶", "/items/ultra_cheesesmithing_tea": "究极奶酪锻造茶", "/items/ultra_crafting_tea": "究极制作茶", "/items/ultra_tailoring_tea": "究极缝纫茶", "/items/gathering_tea": "采集茶", "/items/gourmet_tea": "美食茶", "/items/wisdom_tea": "经验茶", "/items/processing_tea": "加工茶", "/items/efficiency_tea": "效率茶", "/items/artisan_tea": "工匠茶", "/items/catalytic_tea": "催化茶", "/items/blessed_tea": "福气茶", "/items/stamina_coffee": "耐力咖啡", "/items/intelligence_coffee": "智力咖啡", "/items/defense_coffee": "防御咖啡", "/items/attack_coffee": "攻击咖啡", "/items/melee_coffee": "近战咖啡", "/items/ranged_coffee": "远程咖啡", "/items/magic_coffee": "魔法咖啡", "/items/super_stamina_coffee": "超级耐力咖啡", "/items/super_intelligence_coffee": "超级智力咖啡", "/items/super_defense_coffee": "超级防御咖啡", "/items/super_attack_coffee": "超级攻击咖啡", "/items/super_melee_coffee": "超级近战咖啡", "/items/super_ranged_coffee": "超级远程咖啡", "/items/super_magic_coffee": "超级魔法咖啡", "/items/ultra_stamina_coffee": "究极耐力咖啡", "/items/ultra_intelligence_coffee": "究极智力咖啡", "/items/ultra_defense_coffee": "究极防御咖啡", "/items/ultra_attack_coffee": "究极攻击咖啡", "/items/ultra_melee_coffee": "究极近战咖啡", "/items/ultra_ranged_coffee": "究极远程咖啡", "/items/ultra_magic_coffee": "究极魔法咖啡", "/items/wisdom_coffee": "经验咖啡", "/items/lucky_coffee": "幸运咖啡", "/items/swiftness_coffee": "迅捷咖啡", "/items/channeling_coffee": "吟唱咖啡", "/items/critical_coffee": "暴击咖啡", "/items/poke": "破胆之刺", "/items/impale": "透骨之刺", "/items/puncture": "破甲之刺", "/items/penetrating_strike": "贯心之刺", "/items/scratch": "爪影斩", "/items/cleave": "分裂斩", "/items/maim": "血刃斩", "/items/crippling_slash": "致残斩", "/items/smack": "重碾", "/items/sweep": "重扫", "/items/stunning_blow": "重锤", "/items/fracturing_impact": "碎裂冲击", "/items/shield_bash": "盾击", "/items/quick_shot": "快速射击", "/items/aqua_arrow": "流水箭", "/items/flame_arrow": "烈焰箭", "/items/rain_of_arrows": "箭雨", "/items/silencing_shot": "沉默之箭", "/items/steady_shot": "稳定射击", "/items/pestilent_shot": "疫病射击", "/items/penetrating_shot": "贯穿射击", "/items/water_strike": "流水冲击", "/items/ice_spear": "冰枪术", "/items/frost_surge": "冰霜爆裂", "/items/mana_spring": "法力喷泉", "/items/entangle": "缠绕", "/items/toxic_pollen": "剧毒粉尘", "/items/natures_veil": "自然菌幕", "/items/life_drain": "生命吸取", "/items/fireball": "火球", "/items/flame_blast": "熔岩爆裂", "/items/firestorm": "火焰风暴", "/items/smoke_burst": "烟爆灭影", "/items/minor_heal": "初级自愈术", "/items/heal": "自愈术", "/items/quick_aid": "快速治疗术", "/items/rejuvenate": "群体治疗术", "/items/taunt": "嘲讽", "/items/provoke": "挑衅", "/items/toughness": "坚韧", "/items/elusiveness": "闪避", "/items/precision": "精确", "/items/berserk": "狂暴", "/items/elemental_affinity": "元素增幅", "/items/frenzy": "狂速", "/items/spike_shell": "尖刺防护", "/items/retribution": "惩戒", "/items/vampirism": "吸血", "/items/revive": "复活", "/items/insanity": "疯狂", "/items/invincible": "无敌", "/items/speed_aura": "速度光环", "/items/guardian_aura": "守护光环", "/items/fierce_aura": "物理光环", "/items/critical_aura": "暴击光环", "/items/mystic_aura": "元素光环", "/items/gobo_stabber": "哥布林长剑", "/items/gobo_slasher": "哥布林关刀", "/items/gobo_smasher": "哥布林狼牙棒", "/items/spiked_bulwark": "尖刺重盾", "/items/werewolf_slasher": "狼人关刀", "/items/griffin_bulwark": "狮鹫重盾", "/items/griffin_bulwark_refined": "狮鹫重盾(精)", "/items/gobo_shooter": "哥布林弹弓", "/items/vampiric_bow": "吸血弓", "/items/cursed_bow": "咒怨之弓", "/items/cursed_bow_refined": "咒怨之弓(精)", "/items/gobo_boomstick": "哥布林火棍", "/items/cheese_bulwark": "奶酪重盾", "/items/verdant_bulwark": "翠绿重盾", "/items/azure_bulwark": "蔚蓝重盾", "/items/burble_bulwark": "深紫重盾", "/items/crimson_bulwark": "绛红重盾", "/items/rainbow_bulwark": "彩虹重盾", "/items/holy_bulwark": "神圣重盾", "/items/wooden_bow": "木弓", "/items/birch_bow": "桦木弓", "/items/cedar_bow": "雪松弓", "/items/purpleheart_bow": "紫心弓", "/items/ginkgo_bow": "银杏弓", "/items/redwood_bow": "红杉弓", "/items/arcane_bow": "神秘弓", "/items/stalactite_spear": "石钟长枪", "/items/granite_bludgeon": "花岗岩大棒", "/items/furious_spear": "狂怒长枪", "/items/furious_spear_refined": "狂怒长枪(精)", "/items/regal_sword": "君王之剑", "/items/regal_sword_refined": "君王之剑(精)", "/items/chaotic_flail": "混沌连枷", "/items/chaotic_flail_refined": "混沌连枷(精)", "/items/soul_hunter_crossbow": "灵魂猎手弩", "/items/sundering_crossbow": "裂空之弩", "/items/sundering_crossbow_refined": "裂空之弩(精)", "/items/frost_staff": "冰霜法杖", "/items/infernal_battlestaff": "炼狱法杖", "/items/jackalope_staff": "鹿角兔之杖", "/items/rippling_trident": "涟漪三叉戟", "/items/rippling_trident_refined": "涟漪三叉戟(精)", "/items/blooming_trident": "绽放三叉戟", "/items/blooming_trident_refined": "绽放三叉戟(精)", "/items/blazing_trident": "炽焰三叉戟", "/items/blazing_trident_refined": "炽焰三叉戟(精)", "/items/cheese_sword": "奶酪剑", "/items/verdant_sword": "翠绿剑", "/items/azure_sword": "蔚蓝剑", "/items/burble_sword": "深紫剑", "/items/crimson_sword": "绛红剑", "/items/rainbow_sword": "彩虹剑", "/items/holy_sword": "神圣剑", "/items/cheese_spear": "奶酪长枪", "/items/verdant_spear": "翠绿长枪", "/items/azure_spear": "蔚蓝长枪", "/items/burble_spear": "深紫长枪", "/items/crimson_spear": "绛红长枪", "/items/rainbow_spear": "彩虹长枪", "/items/holy_spear": "神圣长枪", "/items/cheese_mace": "奶酪钉头锤", "/items/verdant_mace": "翠绿钉头锤", "/items/azure_mace": "蔚蓝钉头锤", "/items/burble_mace": "深紫钉头锤", "/items/crimson_mace": "绛红钉头锤", "/items/rainbow_mace": "彩虹钉头锤", "/items/holy_mace": "神圣钉头锤", "/items/wooden_crossbow": "木弩", "/items/birch_crossbow": "桦木弩", "/items/cedar_crossbow": "雪松弩", "/items/purpleheart_crossbow": "紫心弩", "/items/ginkgo_crossbow": "银杏弩", "/items/redwood_crossbow": "红杉弩", "/items/arcane_crossbow": "神秘弩", "/items/wooden_water_staff": "木制水法杖", "/items/birch_water_staff": "桦木水法杖", "/items/cedar_water_staff": "雪松水法杖", "/items/purpleheart_water_staff": "紫心水法杖", "/items/ginkgo_water_staff": "银杏水法杖", "/items/redwood_water_staff": "红杉水法杖", "/items/arcane_water_staff": "神秘水法杖", "/items/wooden_nature_staff": "木制自然法杖", "/items/birch_nature_staff": "桦木自然法杖", "/items/cedar_nature_staff": "雪松自然法杖", "/items/purpleheart_nature_staff": "紫心自然法杖", "/items/ginkgo_nature_staff": "银杏自然法杖", "/items/redwood_nature_staff": "红杉自然法杖", "/items/arcane_nature_staff": "神秘自然法杖", "/items/wooden_fire_staff": "木制火法杖", "/items/birch_fire_staff": "桦木火法杖", "/items/cedar_fire_staff": "雪松火法杖", "/items/purpleheart_fire_staff": "紫心火法杖", "/items/ginkgo_fire_staff": "银杏火法杖", "/items/redwood_fire_staff": "红杉火法杖", "/items/arcane_fire_staff": "神秘火法杖", "/items/eye_watch": "掌上监工", "/items/snake_fang_dirk": "蛇牙短剑", "/items/vision_shield": "视觉盾", "/items/gobo_defender": "哥布林防御者", "/items/vampire_fang_dirk": "吸血鬼短剑", "/items/knights_aegis": "骑士盾", "/items/knights_aegis_refined": "骑士盾(精)", "/items/treant_shield": "树人盾", "/items/manticore_shield": "蝎狮盾", "/items/tome_of_healing": "治疗之书", "/items/tome_of_the_elements": "元素之书", "/items/watchful_relic": "警戒遗物", "/items/bishops_codex": "主教法典", "/items/bishops_codex_refined": "主教法典(精)", "/items/cheese_buckler": "奶酪圆盾", "/items/verdant_buckler": "翠绿圆盾", "/items/azure_buckler": "蔚蓝圆盾", "/items/burble_buckler": "深紫圆盾", "/items/crimson_buckler": "绛红圆盾", "/items/rainbow_buckler": "彩虹圆盾", "/items/holy_buckler": "神圣圆盾", "/items/wooden_shield": "木盾", "/items/birch_shield": "桦木盾", "/items/cedar_shield": "雪松盾", "/items/purpleheart_shield": "紫心盾", "/items/ginkgo_shield": "银杏盾", "/items/redwood_shield": "红杉盾", "/items/arcane_shield": "神秘盾", "/items/gatherer_cape": "采集者披风", "/items/gatherer_cape_refined": "采集者披风(精)", "/items/artificer_cape": "工匠披风", "/items/artificer_cape_refined": "工匠披风(精)", "/items/culinary_cape": "烹饪披风", "/items/culinary_cape_refined": "烹饪披风(精)", "/items/chance_cape": "机缘披风", "/items/chance_cape_refined": "机缘披风(精)", "/items/sinister_cape": "阴森斗篷", "/items/sinister_cape_refined": "阴森斗篷(精)", "/items/chimerical_quiver": "奇幻箭袋", "/items/chimerical_quiver_refined": "奇幻箭袋(精)", "/items/enchanted_cloak": "秘法披风", "/items/enchanted_cloak_refined": "秘法披风(精)", "/items/red_culinary_hat": "红色厨师帽", "/items/snail_shell_helmet": "蜗牛壳头盔", "/items/vision_helmet": "视觉头盔", "/items/fluffy_red_hat": "蓬松红帽子", "/items/corsair_helmet": "掠夺者头盔", "/items/corsair_helmet_refined": "掠夺者头盔(精)", "/items/acrobatic_hood": "杂技师兜帽", "/items/acrobatic_hood_refined": "杂技师兜帽(精)", "/items/magicians_hat": "魔术师帽", "/items/magicians_hat_refined": "魔术师帽(精)", "/items/cheese_helmet": "奶酪头盔", "/items/verdant_helmet": "翠绿头盔", "/items/azure_helmet": "蔚蓝头盔", "/items/burble_helmet": "深紫头盔", "/items/crimson_helmet": "绛红头盔", "/items/rainbow_helmet": "彩虹头盔", "/items/holy_helmet": "神圣头盔", "/items/rough_hood": "粗糙兜帽", "/items/reptile_hood": "爬行动物兜帽", "/items/gobo_hood": "哥布林兜帽", "/items/beast_hood": "野兽兜帽", "/items/umbral_hood": "暗影兜帽", "/items/cotton_hat": "棉帽", "/items/linen_hat": "亚麻帽", "/items/bamboo_hat": "竹帽", "/items/silk_hat": "丝帽", "/items/radiant_hat": "光辉帽", "/items/dairyhands_top": "挤奶工上衣", "/items/foragers_top": "采摘者上衣", "/items/lumberjacks_top": "伐木工上衣", "/items/cheesemakers_top": "奶酪师上衣", "/items/crafters_top": "工匠上衣", "/items/tailors_top": "裁缝上衣", "/items/chefs_top": "厨师上衣", "/items/brewers_top": "饮品师上衣", "/items/alchemists_top": "炼金师上衣", "/items/enhancers_top": "强化师上衣", "/items/gator_vest": "鳄鱼马甲", "/items/turtle_shell_body": "龟壳胸甲", "/items/colossus_plate_body": "巨像胸甲", "/items/demonic_plate_body": "恶魔胸甲", "/items/anchorbound_plate_body": "锚定胸甲", "/items/anchorbound_plate_body_refined": "锚定胸甲(精)", "/items/maelstrom_plate_body": "怒涛胸甲", "/items/maelstrom_plate_body_refined": "怒涛胸甲(精)", "/items/marine_tunic": "海洋皮衣", "/items/revenant_tunic": "亡灵皮衣", "/items/griffin_tunic": "狮鹫皮衣", "/items/kraken_tunic": "克拉肯皮衣", "/items/kraken_tunic_refined": "克拉肯皮衣(精)", "/items/icy_robe_top": "冰霜袍服", "/items/flaming_robe_top": "烈焰袍服", "/items/luna_robe_top": "月神袍服", "/items/royal_water_robe_top": "皇家水系袍服", "/items/royal_water_robe_top_refined": "皇家水系袍服(精)", "/items/royal_nature_robe_top": "皇家自然系袍服", "/items/royal_nature_robe_top_refined": "皇家自然系袍服(精)", "/items/royal_fire_robe_top": "皇家火系袍服", "/items/royal_fire_robe_top_refined": "皇家火系袍服(精)", "/items/cheese_plate_body": "奶酪胸甲", "/items/verdant_plate_body": "翠绿胸甲", "/items/azure_plate_body": "蔚蓝胸甲", "/items/burble_plate_body": "深紫胸甲", "/items/crimson_plate_body": "绛红胸甲", "/items/rainbow_plate_body": "彩虹胸甲", "/items/holy_plate_body": "神圣胸甲", "/items/rough_tunic": "粗糙皮衣", "/items/reptile_tunic": "爬行动物皮衣", "/items/gobo_tunic": "哥布林皮衣", "/items/beast_tunic": "野兽皮衣", "/items/umbral_tunic": "暗影皮衣", "/items/cotton_robe_top": "棉袍服", "/items/linen_robe_top": "亚麻袍服", "/items/bamboo_robe_top": "竹袍服", "/items/silk_robe_top": "丝绸袍服", "/items/radiant_robe_top": "光辉袍服", "/items/dairyhands_bottoms": "挤奶工下装", "/items/foragers_bottoms": "采摘者下装", "/items/lumberjacks_bottoms": "伐木工下装", "/items/cheesemakers_bottoms": "奶酪师下装", "/items/crafters_bottoms": "工匠下装", "/items/tailors_bottoms": "裁缝下装", "/items/chefs_bottoms": "厨师下装", "/items/brewers_bottoms": "饮品师下装", "/items/alchemists_bottoms": "炼金师下装", "/items/enhancers_bottoms": "强化师下装", "/items/turtle_shell_legs": "龟壳腿甲", "/items/colossus_plate_legs": "巨像腿甲", "/items/demonic_plate_legs": "恶魔腿甲", "/items/anchorbound_plate_legs": "锚定腿甲", "/items/anchorbound_plate_legs_refined": "锚定腿甲(精)", "/items/maelstrom_plate_legs": "怒涛腿甲", "/items/maelstrom_plate_legs_refined": "怒涛腿甲(精)", "/items/marine_chaps": "航海皮裤", "/items/revenant_chaps": "亡灵皮裤", "/items/griffin_chaps": "狮鹫皮裤", "/items/kraken_chaps": "克拉肯皮裤", "/items/kraken_chaps_refined": "克拉肯皮裤(精)", "/items/icy_robe_bottoms": "冰霜袍裙", "/items/flaming_robe_bottoms": "烈焰袍裙", "/items/luna_robe_bottoms": "月神袍裙", "/items/royal_water_robe_bottoms": "皇家水系袍裙", "/items/royal_water_robe_bottoms_refined": "皇家水系袍裙(精)", "/items/royal_nature_robe_bottoms": "皇家自然系袍裙", "/items/royal_nature_robe_bottoms_refined": "皇家自然系袍裙(精)", "/items/royal_fire_robe_bottoms": "皇家火系袍裙", "/items/royal_fire_robe_bottoms_refined": "皇家火系袍裙(精)", "/items/cheese_plate_legs": "奶酪腿甲", "/items/verdant_plate_legs": "翠绿腿甲", "/items/azure_plate_legs": "蔚蓝腿甲", "/items/burble_plate_legs": "深紫腿甲", "/items/crimson_plate_legs": "绛红腿甲", "/items/rainbow_plate_legs": "彩虹腿甲", "/items/holy_plate_legs": "神圣腿甲", "/items/rough_chaps": "粗糙皮裤", "/items/reptile_chaps": "爬行动物皮裤", "/items/gobo_chaps": "哥布林皮裤", "/items/beast_chaps": "野兽皮裤", "/items/umbral_chaps": "暗影皮裤", "/items/cotton_robe_bottoms": "棉袍裙", "/items/linen_robe_bottoms": "亚麻袍裙", "/items/bamboo_robe_bottoms": "竹袍裙", "/items/silk_robe_bottoms": "丝绸袍裙", "/items/radiant_robe_bottoms": "光辉袍裙", "/items/enchanted_gloves": "附魔手套", "/items/pincer_gloves": "蟹钳手套", "/items/panda_gloves": "熊猫手套", "/items/magnetic_gloves": "磁力手套", "/items/dodocamel_gauntlets": "渡渡驼护手", "/items/dodocamel_gauntlets_refined": "渡渡驼护手(精)", "/items/sighted_bracers": "瞄准护腕", "/items/marksman_bracers": "神射护腕", "/items/marksman_bracers_refined": "神射护腕(精)", "/items/chrono_gloves": "时空手套", "/items/cheese_gauntlets": "奶酪护手", "/items/verdant_gauntlets": "翠绿护手", "/items/azure_gauntlets": "蔚蓝护手", "/items/burble_gauntlets": "深紫护手", "/items/crimson_gauntlets": "绛红护手", "/items/rainbow_gauntlets": "彩虹护手", "/items/holy_gauntlets": "神圣护手", "/items/rough_bracers": "粗糙护腕", "/items/reptile_bracers": "爬行动物护腕", "/items/gobo_bracers": "哥布林护腕", "/items/beast_bracers": "野兽护腕", "/items/umbral_bracers": "暗影护腕", "/items/cotton_gloves": "棉手套", "/items/linen_gloves": "亚麻手套", "/items/bamboo_gloves": "竹手套", "/items/silk_gloves": "丝手套", "/items/radiant_gloves": "光辉手套", "/items/collectors_boots": "收藏家靴", "/items/shoebill_shoes": "鲸头鹳鞋", "/items/black_bear_shoes": "黑熊鞋", "/items/grizzly_bear_shoes": "棕熊鞋", "/items/polar_bear_shoes": "北极熊鞋", "/items/pathbreaker_boots": "开路者靴", "/items/pathbreaker_boots_refined": "开路者靴(精)", "/items/centaur_boots": "半人马靴", "/items/pathfinder_boots": "探路者靴", "/items/pathfinder_boots_refined": "探路者靴(精)", "/items/sorcerer_boots": "巫师靴", "/items/pathseeker_boots": "寻路者靴", "/items/pathseeker_boots_refined": "寻路者靴(精)", "/items/cheese_boots": "奶酪靴", "/items/verdant_boots": "翠绿靴", "/items/azure_boots": "蔚蓝靴", "/items/burble_boots": "深紫靴", "/items/crimson_boots": "绛红靴", "/items/rainbow_boots": "彩虹靴", "/items/holy_boots": "神圣靴", "/items/rough_boots": "粗糙靴", "/items/reptile_boots": "爬行动物靴", "/items/gobo_boots": "哥布林靴", "/items/beast_boots": "野兽靴", "/items/umbral_boots": "暗影靴", "/items/cotton_boots": "棉靴", "/items/linen_boots": "亚麻靴", "/items/bamboo_boots": "竹靴", "/items/silk_boots": "丝靴", "/items/radiant_boots": "光辉靴", "/items/small_pouch": "小袋子", "/items/medium_pouch": "中袋子", "/items/large_pouch": "大袋子", "/items/giant_pouch": "巨大袋子", "/items/gluttonous_pouch": "贪食之袋", "/items/guzzling_pouch": "暴饮之囊", "/items/necklace_of_efficiency": "效率项链", "/items/fighter_necklace": "战士项链", "/items/ranger_necklace": "射手项链", "/items/wizard_necklace": "巫师项链", "/items/necklace_of_wisdom": "经验项链", "/items/necklace_of_speed": "速度项链", "/items/philosophers_necklace": "贤者项链", "/items/earrings_of_gathering": "采集耳环", "/items/earrings_of_essence_find": "精华发现耳环", "/items/earrings_of_armor": "护甲耳环", "/items/earrings_of_regeneration": "恢复耳环", "/items/earrings_of_resistance": "抗性耳环", "/items/earrings_of_rare_find": "稀有发现耳环", "/items/earrings_of_critical_strike": "暴击耳环", "/items/philosophers_earrings": "贤者耳环", "/items/ring_of_gathering": "采集戒指", "/items/ring_of_essence_find": "精华发现戒指", "/items/ring_of_armor": "护甲戒指", "/items/ring_of_regeneration": "恢复戒指", "/items/ring_of_resistance": "抗性戒指", "/items/ring_of_rare_find": "稀有发现戒指", "/items/ring_of_critical_strike": "暴击戒指", "/items/philosophers_ring": "贤者戒指", "/items/trainee_milking_charm": "实习挤奶护符", "/items/basic_milking_charm": "基础挤奶护符", "/items/advanced_milking_charm": "高级挤奶护符", "/items/expert_milking_charm": "专家挤奶护符", "/items/master_milking_charm": "大师挤奶护符", "/items/grandmaster_milking_charm": "宗师挤奶护符", "/items/trainee_foraging_charm": "实习采摘护符", "/items/basic_foraging_charm": "基础采摘护符", "/items/advanced_foraging_charm": "高级采摘护符", "/items/expert_foraging_charm": "专家采摘护符", "/items/master_foraging_charm": "大师采摘护符", "/items/grandmaster_foraging_charm": "宗师采摘护符", "/items/trainee_woodcutting_charm": "实习伐木护符", "/items/basic_woodcutting_charm": "基础伐木护符", "/items/advanced_woodcutting_charm": "高级伐木护符", "/items/expert_woodcutting_charm": "专家伐木护符", "/items/master_woodcutting_charm": "大师伐木护符", "/items/grandmaster_woodcutting_charm": "宗师伐木护符", "/items/trainee_cheesesmithing_charm": "实习奶酪锻造护符", "/items/basic_cheesesmithing_charm": "基础奶酪锻造护符", "/items/advanced_cheesesmithing_charm": "高级奶酪锻造护符", "/items/expert_cheesesmithing_charm": "专家奶酪锻造护符", "/items/master_cheesesmithing_charm": "大师奶酪锻造护符", "/items/grandmaster_cheesesmithing_charm": "宗师奶酪锻造护符", "/items/trainee_crafting_charm": "实习制作护符", "/items/basic_crafting_charm": "基础制作护符", "/items/advanced_crafting_charm": "高级制作护符", "/items/expert_crafting_charm": "专家制作护符", "/items/master_crafting_charm": "大师制作护符", "/items/grandmaster_crafting_charm": "宗师制作护符", "/items/trainee_tailoring_charm": "实习缝纫护符", "/items/basic_tailoring_charm": "基础缝纫护符", "/items/advanced_tailoring_charm": "高级缝纫护符", "/items/expert_tailoring_charm": "专家缝纫护符", "/items/master_tailoring_charm": "大师缝纫护符", "/items/grandmaster_tailoring_charm": "宗师缝纫护符", "/items/trainee_cooking_charm": "实习烹饪护符", "/items/basic_cooking_charm": "基础烹饪护符", "/items/advanced_cooking_charm": "高级烹饪护符", "/items/expert_cooking_charm": "专家烹饪护符", "/items/master_cooking_charm": "大师烹饪护符", "/items/grandmaster_cooking_charm": "宗师烹饪护符", "/items/trainee_brewing_charm": "实习冲泡护符", "/items/basic_brewing_charm": "基础冲泡护符", "/items/advanced_brewing_charm": "高级冲泡护符", "/items/expert_brewing_charm": "专家冲泡护符", "/items/master_brewing_charm": "大师冲泡护符", "/items/grandmaster_brewing_charm": "宗师冲泡护符", "/items/trainee_alchemy_charm": "实习炼金护符", "/items/basic_alchemy_charm": "基础炼金护符", "/items/advanced_alchemy_charm": "高级炼金护符", "/items/expert_alchemy_charm": "专家炼金护符", "/items/master_alchemy_charm": "大师炼金护符", "/items/grandmaster_alchemy_charm": "宗师炼金护符", "/items/trainee_enhancing_charm": "实习强化护符", "/items/basic_enhancing_charm": "基础强化护符", "/items/advanced_enhancing_charm": "高级强化护符", "/items/expert_enhancing_charm": "专家强化护符", "/items/master_enhancing_charm": "大师强化护符", "/items/grandmaster_enhancing_charm": "宗师强化护符", "/items/trainee_stamina_charm": "实习耐力护符", "/items/basic_stamina_charm": "基础耐力护符", "/items/advanced_stamina_charm": "高级耐力护符", "/items/expert_stamina_charm": "专家耐力护符", "/items/master_stamina_charm": "大师耐力护符", "/items/grandmaster_stamina_charm": "宗师耐力护符", "/items/trainee_intelligence_charm": "实习智力护符", "/items/basic_intelligence_charm": "基础智力护符", "/items/advanced_intelligence_charm": "高级智力护符", "/items/expert_intelligence_charm": "专家智力护符", "/items/master_intelligence_charm": "大师智力护符", "/items/grandmaster_intelligence_charm": "宗师智力护符", "/items/trainee_attack_charm": "实习攻击护符", "/items/basic_attack_charm": "基础攻击护符", "/items/advanced_attack_charm": "高级攻击护符", "/items/expert_attack_charm": "专家攻击护符", "/items/master_attack_charm": "大师攻击护符", "/items/grandmaster_attack_charm": "宗师攻击护符", "/items/trainee_defense_charm": "实习防御护符", "/items/basic_defense_charm": "基础防御护符", "/items/advanced_defense_charm": "高级防御护符", "/items/expert_defense_charm": "专家防御护符", "/items/master_defense_charm": "大师防御护符", "/items/grandmaster_defense_charm": "宗师防御护符", "/items/trainee_melee_charm": "实习近战护符", "/items/basic_melee_charm": "基础近战护符", "/items/advanced_melee_charm": "高级近战护符", "/items/expert_melee_charm": "专家近战护符", "/items/master_melee_charm": "大师近战护符", "/items/grandmaster_melee_charm": "宗师近战护符", "/items/trainee_ranged_charm": "实习远程护符", "/items/basic_ranged_charm": "基础远程护符", "/items/advanced_ranged_charm": "高级远程护符", "/items/expert_ranged_charm": "专家远程护符", "/items/master_ranged_charm": "大师远程护符", "/items/grandmaster_ranged_charm": "宗师远程护符", "/items/trainee_magic_charm": "实习魔法护符", "/items/basic_magic_charm": "基础魔法护符", "/items/advanced_magic_charm": "高级魔法护符", "/items/expert_magic_charm": "专家魔法护符", "/items/master_magic_charm": "大师魔法护符", "/items/grandmaster_magic_charm": "宗师魔法护符", "/items/basic_task_badge": "基础任务徽章", "/items/advanced_task_badge": "高级任务徽章", "/items/expert_task_badge": "专家任务徽章", "/items/celestial_brush": "星空刷子", "/items/cheese_brush": "奶酪刷子", "/items/verdant_brush": "翠绿刷子", "/items/azure_brush": "蔚蓝刷子", "/items/burble_brush": "深紫刷子", "/items/crimson_brush": "绛红刷子", "/items/rainbow_brush": "彩虹刷子", "/items/holy_brush": "神圣刷子", "/items/celestial_shears": "星空剪刀", "/items/cheese_shears": "奶酪剪刀", "/items/verdant_shears": "翠绿剪刀", "/items/azure_shears": "蔚蓝剪刀", "/items/burble_shears": "深紫剪刀", "/items/crimson_shears": "绛红剪刀", "/items/rainbow_shears": "彩虹剪刀", "/items/holy_shears": "神圣剪刀", "/items/celestial_hatchet": "星空斧头", "/items/cheese_hatchet": "奶酪斧头", "/items/verdant_hatchet": "翠绿斧头", "/items/azure_hatchet": "蔚蓝斧头", "/items/burble_hatchet": "深紫斧头", "/items/crimson_hatchet": "绛红斧头", "/items/rainbow_hatchet": "彩虹斧头", "/items/holy_hatchet": "神圣斧头", "/items/celestial_hammer": "星空锤子", "/items/cheese_hammer": "奶酪锤子", "/items/verdant_hammer": "翠绿锤子", "/items/azure_hammer": "蔚蓝锤子", "/items/burble_hammer": "深紫锤子", "/items/crimson_hammer": "绛红锤子", "/items/rainbow_hammer": "彩虹锤子", "/items/holy_hammer": "神圣锤子", "/items/celestial_chisel": "星空凿子", "/items/cheese_chisel": "奶酪凿子", "/items/verdant_chisel": "翠绿凿子", "/items/azure_chisel": "蔚蓝凿子", "/items/burble_chisel": "深紫凿子", "/items/crimson_chisel": "绛红凿子", "/items/rainbow_chisel": "彩虹凿子", "/items/holy_chisel": "神圣凿子", "/items/celestial_needle": "星空针", "/items/cheese_needle": "奶酪针", "/items/verdant_needle": "翠绿针", "/items/azure_needle": "蔚蓝针", "/items/burble_needle": "深紫针", "/items/crimson_needle": "绛红针", "/items/rainbow_needle": "彩虹针", "/items/holy_needle": "神圣针", "/items/celestial_spatula": "星空锅铲", "/items/cheese_spatula": "奶酪锅铲", "/items/verdant_spatula": "翠绿锅铲", "/items/azure_spatula": "蔚蓝锅铲", "/items/burble_spatula": "深紫锅铲", "/items/crimson_spatula": "绛红锅铲", "/items/rainbow_spatula": "彩虹锅铲", "/items/holy_spatula": "神圣锅铲", "/items/celestial_pot": "星空壶", "/items/cheese_pot": "奶酪壶", "/items/verdant_pot": "翠绿壶", "/items/azure_pot": "蔚蓝壶", "/items/burble_pot": "深紫壶", "/items/crimson_pot": "绛红壶", "/items/rainbow_pot": "彩虹壶", "/items/holy_pot": "神圣壶", "/items/celestial_alembic": "星空蒸馏器", "/items/cheese_alembic": "奶酪蒸馏器", "/items/verdant_alembic": "翠绿蒸馏器", "/items/azure_alembic": "蔚蓝蒸馏器", "/items/burble_alembic": "深紫蒸馏器", "/items/crimson_alembic": "绛红蒸馏器", "/items/rainbow_alembic": "彩虹蒸馏器", "/items/holy_alembic": "神圣蒸馏器", "/items/celestial_enhancer": "星空强化器", "/items/cheese_enhancer": "奶酪强化器", "/items/verdant_enhancer": "翠绿强化器", "/items/azure_enhancer": "蔚蓝强化器", "/items/burble_enhancer": "深紫强化器", "/items/crimson_enhancer": "绛红强化器", "/items/rainbow_enhancer": "彩虹强化器", "/items/holy_enhancer": "神圣强化器", "/items/milk": "牛奶", "/items/verdant_milk": "翠绿牛奶", "/items/azure_milk": "蔚蓝牛奶", "/items/burble_milk": "深紫牛奶", "/items/crimson_milk": "绛红牛奶", "/items/rainbow_milk": "彩虹牛奶", "/items/holy_milk": "神圣牛奶", "/items/cheese": "奶酪", "/items/verdant_cheese": "翠绿奶酪", "/items/azure_cheese": "蔚蓝奶酪", "/items/burble_cheese": "深紫奶酪", "/items/crimson_cheese": "绛红奶酪", "/items/rainbow_cheese": "彩虹奶酪", "/items/holy_cheese": "神圣奶酪", "/items/log": "原木", "/items/birch_log": "白桦原木", "/items/cedar_log": "雪松原木", "/items/purpleheart_log": "紫心原木", "/items/ginkgo_log": "银杏原木", "/items/redwood_log": "红杉原木", "/items/arcane_log": "神秘原木", "/items/lumber": "木板", "/items/birch_lumber": "白桦木板", "/items/cedar_lumber": "雪松木板", "/items/purpleheart_lumber": "紫心木板", "/items/ginkgo_lumber": "银杏木板", "/items/redwood_lumber": "红杉木板", "/items/arcane_lumber": "神秘木板", "/items/rough_hide": "粗糙兽皮", "/items/reptile_hide": "爬行动物皮", "/items/gobo_hide": "哥布林皮", "/items/beast_hide": "野兽皮", "/items/umbral_hide": "暗影皮", "/items/rough_leather": "粗糙皮革", "/items/reptile_leather": "爬行动物皮革", "/items/gobo_leather": "哥布林皮革", "/items/beast_leather": "野兽皮革", "/items/umbral_leather": "暗影皮革", "/items/cotton": "棉花", "/items/flax": "亚麻", "/items/bamboo_branch": "竹子", "/items/cocoon": "蚕茧", "/items/radiant_fiber": "光辉纤维", "/items/cotton_fabric": "棉花布料", "/items/linen_fabric": "亚麻布料", "/items/bamboo_fabric": "竹子布料", "/items/silk_fabric": "丝绸", "/items/radiant_fabric": "光辉布料", "/items/egg": "鸡蛋", "/items/wheat": "小麦", "/items/sugar": "糖", "/items/blueberry": "蓝莓", "/items/blackberry": "黑莓", "/items/strawberry": "草莓", "/items/mooberry": "哞莓", "/items/marsberry": "火星莓", "/items/spaceberry": "太空莓", "/items/apple": "苹果", "/items/orange": "橙子", "/items/plum": "李子", "/items/peach": "桃子", "/items/dragon_fruit": "火龙果", "/items/star_fruit": "杨桃", "/items/arabica_coffee_bean": "低级咖啡豆", "/items/robusta_coffee_bean": "中级咖啡豆", "/items/liberica_coffee_bean": "高级咖啡豆", "/items/excelsa_coffee_bean": "特级咖啡豆", "/items/fieriosa_coffee_bean": "火山咖啡豆", "/items/spacia_coffee_bean": "太空咖啡豆", "/items/green_tea_leaf": "绿茶叶", "/items/black_tea_leaf": "黑茶叶", "/items/burble_tea_leaf": "紫茶叶", "/items/moolong_tea_leaf": "哞龙茶叶", "/items/red_tea_leaf": "红茶叶", "/items/emp_tea_leaf": "虚空茶叶", "/items/catalyst_of_coinification": "点金催化剂", "/items/catalyst_of_decomposition": "分解催化剂", "/items/catalyst_of_transmutation": "转化催化剂", "/items/prime_catalyst": "至高催化剂", "/items/snake_fang": "蛇牙", "/items/shoebill_feather": "鲸头鹳羽毛", "/items/snail_shell": "蜗牛壳", "/items/crab_pincer": "蟹钳", "/items/turtle_shell": "乌龟壳", "/items/marine_scale": "海洋鳞片", "/items/treant_bark": "树皮", "/items/centaur_hoof": "半人马蹄", "/items/luna_wing": "月神翼", "/items/gobo_rag": "哥布林抹布", "/items/goggles": "护目镜", "/items/magnifying_glass": "放大镜", "/items/eye_of_the_watcher": "观察者之眼", "/items/icy_cloth": "冰霜织物", "/items/flaming_cloth": "烈焰织物", "/items/sorcerers_sole": "魔法师鞋底", "/items/chrono_sphere": "时空球", "/items/frost_sphere": "冰霜球", "/items/panda_fluff": "熊猫绒", "/items/black_bear_fluff": "黑熊绒", "/items/grizzly_bear_fluff": "棕熊绒", "/items/polar_bear_fluff": "北极熊绒", "/items/red_panda_fluff": "小熊猫绒", "/items/magnet": "磁铁", "/items/stalactite_shard": "钟乳石碎片", "/items/living_granite": "花岗岩", "/items/colossus_core": "巨像核心", "/items/vampire_fang": "吸血鬼之牙", "/items/werewolf_claw": "狼人之爪", "/items/revenant_anima": "亡者之魂", "/items/soul_fragment": "灵魂碎片", "/items/infernal_ember": "地狱余烬", "/items/demonic_core": "恶魔核心", "/items/griffin_leather": "狮鹫之皮", "/items/manticore_sting": "蝎狮之刺", "/items/jackalope_antler": "鹿角兔之角", "/items/dodocamel_plume": "渡渡驼之翎", "/items/griffin_talon": "狮鹫之爪", "/items/chimerical_refinement_shard": "奇幻精炼碎片", "/items/acrobats_ribbon": "杂技师彩带", "/items/magicians_cloth": "魔术师织物", "/items/chaotic_chain": "混沌锁链", "/items/cursed_ball": "诅咒之球", "/items/sinister_refinement_shard": "阴森精炼碎片", "/items/royal_cloth": "皇家织物", "/items/knights_ingot": "骑士之锭", "/items/bishops_scroll": "主教卷轴", "/items/regal_jewel": "君王宝石", "/items/sundering_jewel": "裂空宝石", "/items/enchanted_refinement_shard": "秘法精炼碎片", "/items/marksman_brooch": "神射胸针", "/items/corsair_crest": "掠夺者徽章", "/items/damaged_anchor": "破损船锚", "/items/maelstrom_plating": "怒涛甲片", "/items/kraken_leather": "克拉肯皮革", "/items/kraken_fang": "克拉肯之牙", "/items/pirate_refinement_shard": "海盗精炼碎片", "/items/pathbreaker_lodestone": "开路者磁石", "/items/pathfinder_lodestone": "探路者磁石", "/items/pathseeker_lodestone": "寻路者磁石", "/items/labyrinth_refinement_shard": "迷宫精炼碎片", "/items/butter_of_proficiency": "精通之油", "/items/thread_of_expertise": "专精之线", "/items/branch_of_insight": "洞察之枝", "/items/gluttonous_energy": "贪食能量", "/items/guzzling_energy": "暴饮能量", "/items/milking_essence": "挤奶精华", "/items/foraging_essence": "采摘精华", "/items/woodcutting_essence": "伐木精华", "/items/cheesesmithing_essence": "奶酪锻造精华", "/items/crafting_essence": "制作精华", "/items/tailoring_essence": "缝纫精华", "/items/cooking_essence": "烹饪精华", "/items/brewing_essence": "冲泡精华", "/items/alchemy_essence": "炼金精华", "/items/enhancing_essence": "强化精华", "/items/swamp_essence": "沼泽精华", "/items/aqua_essence": "海洋精华", "/items/jungle_essence": "丛林精华", "/items/gobo_essence": "哥布林精华", "/items/eyessence": "眼精华", "/items/sorcerer_essence": "法师精华", "/items/bear_essence": "熊熊精华", "/items/golem_essence": "魔像精华", "/items/twilight_essence": "暮光精华", "/items/abyssal_essence": "地狱精华", "/items/chimerical_essence": "奇幻精华", "/items/sinister_essence": "阴森精华", "/items/enchanted_essence": "秘法精华", "/items/pirate_essence": "海盗精华", "/items/labyrinth_essence": "迷宫精华", "/items/task_crystal": "任务水晶", "/items/star_fragment": "星光碎片", "/items/pearl": "珍珠", "/items/amber": "琥珀", "/items/garnet": "石榴石", "/items/jade": "翡翠", "/items/amethyst": "紫水晶", "/items/moonstone": "月亮石", "/items/sunstone": "太阳石", "/items/philosophers_stone": "贤者之石", "/items/crushed_pearl": "珍珠碎片", "/items/crushed_amber": "琥珀碎片", "/items/crushed_garnet": "石榴石碎片", "/items/crushed_jade": "翡翠碎片", "/items/crushed_amethyst": "紫水晶碎片", "/items/crushed_moonstone": "月亮石碎片", "/items/crushed_sunstone": "太阳石碎片", "/items/crushed_philosophers_stone": "贤者之石碎片", "/items/shard_of_protection": "保护碎片", "/items/mirror_of_protection": "保护之镜", "/items/philosophers_mirror": "贤者之镜", "/items/basic_torch": "基础火炬", "/items/advanced_torch": "进阶火炬", "/items/expert_torch": "专家火炬", "/items/basic_shroud": "基础斗篷", "/items/advanced_shroud": "进阶斗篷", "/items/expert_shroud": "专家斗篷", "/items/basic_beacon": "基础信标", "/items/advanced_beacon": "进阶信标", "/items/expert_beacon": "专家信标", "/items/basic_food_crate": "基础食物箱", "/items/advanced_food_crate": "进阶食物箱", "/items/expert_food_crate": "专家食物箱", "/items/basic_tea_crate": "基础茶叶箱", "/items/advanced_tea_crate": "进阶茶叶箱", "/items/expert_tea_crate": "专家茶叶箱", "/items/basic_coffee_crate": "基础咖啡箱", "/items/advanced_coffee_crate": "进阶咖啡箱", "/items/expert_coffee_crate": "专家咖啡箱" }; // ====================== // 物品名称映射 // ====================== let itemNameToHrid = {}; let itemHridToName = {}; let zhNameToHrid = {}; function buildItemMaps() { if (!itemDetailMap) { const initData = getInitClientData(); if (initData?.itemDetailMap) { itemDetailMap = initData.itemDetailMap; } else { logInit('[Better Loot Tracker] No itemDetailMap available for building item maps'); return; } } // 由 itemDetailMap 构建英文名映射 for (const [hrid, item] of Object.entries(itemDetailMap)) { if (item.name) { itemNameToHrid[item.name] = hrid; itemHridToName[hrid] = item.name; } } // 由 ZHItemNames 构建中文名映射(反转映射) for (const [hrid, zhName] of Object.entries(ZHItemNames)) { zhNameToHrid[zhName] = hrid; } logInit('[Better Loot Tracker] 物品映射构建完成,英文', Object.keys(itemNameToHrid).length, '中文:', Object.keys(zhNameToHrid).length); } // 根据物品名称获取HRID(支持中英文) function getItemHrid(itemName) { // 先去掉末尾的强化等级标记(如 "+1" 或 "+5") const cleanName = itemName.replace(/\s*\+\d+$/, '').trim(); // 先尝试英文名 if (itemNameToHrid[cleanName]) { return itemNameToHrid[cleanName]; } // 再尝试中文名 if (zhNameToHrid[cleanName]) { return zhNameToHrid[cleanName]; } // 尝试用 itemDetailMap 动态查找(遍历所有物品) if (itemDetailMap) { for (const [hrid, item] of Object.entries(itemDetailMap)) { // 检查英文名 if (item.name === cleanName) { itemNameToHrid[cleanName] = hrid; return hrid; } } } // 通过 ZHItemNames 查找 for (const [hrid, zhName] of Object.entries(ZHItemNames)) { if (zhName === cleanName) { zhNameToHrid[cleanName] = hrid; return hrid; } } return null; } // ====================== // 强化计算 // ====================== const SUCCESS_RATE = [ 50, 45, 45, 40, 40, 40, 35, 35, 35, 35, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 ]; const ITEM_ENHANCE_LEVEL_TO_BUFF_BONUS_MAP = { 0: 0, 1: 2, 2: 4.2, 3: 6.6, 4: 9.2, 5: 12, 6: 15, 7: 18.2, 8: 21.6, 9: 25.2, 10: 29, 11: 33.4, 12: 38.4, 13: 44, 14: 50.2, 15: 57, 16: 64.4, 17: 72.4, 18: 81, 19: 90.2, 20: 100 }; const ENHANCE_DEFAULT_PARAMS = { enhancing_level: 125, laboratory_level: 6, enhancer_bonus: 5.42, glove_bonus: 12.9, tea_enhancing: false, tea_super_enhancing: false, tea_ultra_enhancing: true, tea_blessed: true }; function getBaseItemLevel(itemHRID) { if (!itemDetailMap) { const initData = getInitClientData(); if (initData?.itemDetailMap) { itemDetailMap = initData.itemDetailMap; } else { return 0; } } const itemDetails = itemDetailMap[itemHRID]; return itemDetails?.itemLevel || 0; } function getEnhancementCosts(itemHRID) { if (!itemDetailMap) { const initData = getInitClientData(); if (initData?.itemDetailMap) { itemDetailMap = initData.itemDetailMap; } else { return null; } } const itemData = itemDetailMap[itemHRID]; if (!itemData?.enhancementCosts) return null; return itemData.enhancementCosts; } function getProtectionItems(itemHRID) { if (!itemDetailMap) { const initData = getInitClientData(); if (initData?.itemDetailMap) { itemDetailMap = initData.itemDetailMap; } else { return [itemHRID, "/items/mirror_of_protection"]; } } const itemData = itemDetailMap[itemHRID]; let protectHrids = [itemHRID, "/items/mirror_of_protection"]; if (itemData?.protectionItemHrids) { protectHrids = protectHrids.concat(itemData.protectionItemHrids); } return protectHrids; } // ====================== // 数据获取和管理 // ====================== // 存储角色数据 let characterItems = null; let characterBuffs = null; let characterSkills = null; let characterHouseRoomMap = null; let itemDetailMap = null; // 存储选择的强化记录(用于合并计算) const selectedEnhancements = new Map(); // 合并计算选择的强化记录 function calculateMergedEnhancements() { const marketData = getMarketData(); if (!marketData) { alert(t.noMarketData); return; } const selectedItems = []; selectedEnhancements.forEach((data, element) => { selectedItems.push(data); }); if (selectedItems.length === 0) { alert('请先选择要合并计算的强化记录'); return; } // 验证所有选择的记录是否是同一物品 const firstItemData = selectedItems[0].parsedData; const firstItemName = firstItemData.itemName; for (const item of selectedItems) { // 由于我们已经在parseEnhancementLoot中统一了物品名称格式(去除了强化等级后缀) // 所以现在可以直接比较itemName if (item.parsedData.itemName !== firstItemName) { alert('只能合并计算同一物品的强化记录'); return; } } const firstItemHrid = firstItemData.itemHrid; // 合并等级数量 const mergedDrops = {}; let totalEnhanceCount = 0; let maxStartLevel = 0; let totalDuration = 0; for (const item of selectedItems) { const { drops, enhanceCount, startLevel, duration } = item.parsedData; totalEnhanceCount += enhanceCount; maxStartLevel = Math.max(maxStartLevel, startLevel); totalDuration += duration || 0; for (const [level, count] of Object.entries(drops)) { mergedDrops[level] = (mergedDrops[level] || 0) + count; } } // 创建合并后的解析数据 const mergedParsedData = { itemName: firstItemName, itemHrid: firstItemHrid, enhanceCount: totalEnhanceCount, startLevel: maxStartLevel, duration: totalDuration, drops: mergedDrops }; // 分析合并结果 const mergedAnalysis = analyzeEnhancementResult(mergedParsedData); // 应用偏好等级判定(复用一般场景的逻辑) const preferenceLevels = getGlobalPreferenceLevels(); const preferredAnalysis = applyPreferredTarget(mergedAnalysis, preferenceLevels); // 使用偏好等级判定后的目标等级和成功状态 let targetLevel = preferredAnalysis.targetLevel; let success = preferredAnalysis.success; // 重新判断成功状态:合并后的掉落中有目标等级的物品 // 只要合并统计后有目标等级的掉落,就认为整体成功 if (targetLevel > maxStartLevel && mergedDrops[targetLevel] && mergedDrops[targetLevel] > 0) { success = true; } const bestStrategy = findBestProtectLevel(firstItemHrid, targetLevel, marketData); if (!bestStrategy) { alert('无法计算最佳强化策略'); return; } const protectAt = bestStrategy.protectAt; const sim = Enhancelate(firstItemHrid, targetLevel, protectAt); const baseItemPrice = getMarketPrice(firstItemHrid, marketData); const originalCost = baseItemPrice + getExpectedTotalCostToLevel(firstItemHrid, maxStartLevel, marketData); const expectedMaterialCost = bestStrategy.perActionCost * sim.actions; const expectedProtectCost = bestStrategy.minProtectCost * sim.protectCount; const expectedTotalCost = expectedMaterialCost + expectedProtectCost + originalCost; const actualMaterialCost = bestStrategy.perActionCost * totalEnhanceCount; const actualProtectTargetLevel = targetLevel; const actualProtectSuccess = success; const actualProtectCount = calculateActualProtections(mergedDrops, protectAt, actualProtectTargetLevel, actualProtectSuccess); const actualProtectCost = bestStrategy.minProtectCost * actualProtectCount; const actualTotalCost = actualMaterialCost + actualProtectCost + originalCost; const diff = actualTotalCost - expectedTotalCost; const diffText = diff >= 0 ? `${t.aboveExpected}: ${formatNumber(diff)}` : `${t.belowExpected}: ${formatNumber(Math.abs(diff))}`; const diffColor = diff >= 0 ? 'rgb(255, 100, 100)' : 'rgb(100, 255, 100)'; // 计算最终价值 let finalValue = baseItemPrice; // 默认值为基础物品价格 if (success && targetLevel > 0) { // 尝试从市场数据中获取对应等级的ask价格 if (marketData?.marketData && marketData.marketData[firstItemHrid]) { const marketRoot = marketData.marketData[firstItemHrid]; const levelKey = targetLevel.toString(); // 优先使用对应等级的ask价格 if (marketRoot[levelKey] && marketRoot[levelKey].a) { finalValue = marketRoot[levelKey].a; } else { // 计算理论成本 const theoreticalCost = baseItemPrice + getExpectedTotalCostToLevel(firstItemHrid, targetLevel, marketData); // 获取对应等级或基础等级的bid价格 let bidPrice = baseItemPrice; if (marketRoot[levelKey] && marketRoot[levelKey].b) { bidPrice = marketRoot[levelKey].b; } else if (marketRoot["0"] && marketRoot["0"].b) { bidPrice = marketRoot["0"].b; } // 理论成本与bid价格取较高者 finalValue = Math.max(theoreticalCost, bidPrice); } } else { // 如果市场数据不可用,使用原来的计算方式 finalValue = baseItemPrice + getExpectedTotalCostToLevel(firstItemHrid, targetLevel, marketData); } } // 确保finalValue不为负数或-1,如果为0或负数,使用预期成本 if (finalValue <= 0) { finalValue = baseItemPrice + getExpectedTotalCostToLevel(firstItemHrid, targetLevel, marketData); } // 计算收益时考虑98%的交易手续费 const profit = (finalValue * 0.98) - actualTotalCost; const profitColor = profit >= 0 ? 'rgb(100, 255, 100)' : 'rgb(255, 100, 100)'; // 计算预期收益 const expectedProfit = (finalValue * 0.98) - expectedTotalCost; // 计算预期持续时间 const expectedDuration = totalEnhanceCount > 0 ? (sim.actions / totalEnhanceCount) * totalDuration : 0; // 计算预期工时费(每小时收益) const expectedHourlyWage = expectedDuration > 0 ? expectedProfit / (expectedDuration / 3600) : 0; // 显示弹出框 showMergeResultPopup({ itemName: firstItemName, itemHrid: firstItemHrid, totalEnhanceCount, maxStartLevel, duration: totalDuration, mergedDrops, targetLevel, success, actualMaterialCost, actualProtectCost, actualProtectCount, actualTotalCost, expectedMaterialCost, expectedProtectCost, expectedProtectCount: sim.protectCount, expectedTotalCost, diffText, diffColor, originalCost, finalValue, profit, profitColor, expectedProfit, expectedDuration, expectedHourlyWage }); } // 显示合并结果弹出框 function showMergeResultPopup(initialData) { // 使用闭包保存当前配置 let currentTargetLevel = initialData.targetLevel; let currentSuccess = initialData.success; let currentProtectAt = null; // null表示使用自动最优 const marketData = getMarketData(); if (!marketData) { alert(t.noMarketData); return; } // 创建更新函数 const updateDisplay = () => { const data = recalculateMergeData(initialData, currentTargetLevel, currentSuccess, currentProtectAt, marketData); renderMergePopup(data, currentTargetLevel, currentSuccess, currentProtectAt); }; // 初始渲染 updateDisplay(); function recalculateMergeData(baseData, targetLevel, success, protectAt, marketData) { const { itemHrid, totalEnhanceCount, maxStartLevel, mergedDrops } = baseData; const bestStrategy = findBestProtectLevel(itemHrid, targetLevel, marketData); if (!bestStrategy) return baseData; const actualProtectAt = protectAt !== null ? Math.min(protectAt, targetLevel) : bestStrategy.protectAt; const sim = Enhancelate(itemHrid, targetLevel, actualProtectAt); const baseItemPrice = getMarketPrice(itemHrid, marketData); const originalCost = baseItemPrice + getExpectedTotalCostToLevel(itemHrid, maxStartLevel, marketData); const expectedMaterialCost = bestStrategy.perActionCost * sim.actions; const expectedProtectCost = bestStrategy.minProtectCost * sim.protectCount; const expectedTotalCost = expectedMaterialCost + expectedProtectCost + originalCost; const actualMaterialCost = bestStrategy.perActionCost * totalEnhanceCount; const actualProtectCount = calculateActualProtections(mergedDrops, actualProtectAt, targetLevel, success); const actualProtectCost = bestStrategy.minProtectCost * actualProtectCount; const actualTotalCost = actualMaterialCost + actualProtectCost + originalCost; const diff = actualTotalCost - expectedTotalCost; const diffText = diff >= 0 ? `${t.aboveExpected}: ${formatNumber(diff)}` : `${t.belowExpected}: ${formatNumber(Math.abs(diff))}`; const diffColor = diff >= 0 ? 'rgb(255, 100, 100)' : 'rgb(100, 255, 100)'; let finalValue = baseItemPrice; if (success && targetLevel > 0) { if (marketData?.marketData && marketData.marketData[itemHrid]) { const marketRoot = marketData.marketData[itemHrid]; const levelKey = targetLevel.toString(); if (marketRoot[levelKey] && marketRoot[levelKey].a) { finalValue = marketRoot[levelKey].a; } else { const theoreticalCost = baseItemPrice + getExpectedTotalCostToLevel(itemHrid, targetLevel, marketData); let bidPrice = baseItemPrice; if (marketRoot[levelKey] && marketRoot[levelKey].b) { bidPrice = marketRoot[levelKey].b; } else if (marketRoot["0"] && marketRoot["0"].b) { bidPrice = marketRoot["0"].b; } finalValue = Math.max(theoreticalCost, bidPrice); } } else { finalValue = baseItemPrice + getExpectedTotalCostToLevel(itemHrid, targetLevel, marketData); } } if (finalValue <= 0) { finalValue = baseItemPrice + getExpectedTotalCostToLevel(itemHrid, targetLevel, marketData); } const profit = (finalValue * 0.98) - actualTotalCost; const profitColor = profit >= 0 ? 'rgb(100, 255, 100)' : 'rgb(255, 100, 100)'; const expectedProfit = (finalValue * 0.98) - expectedTotalCost; const expectedDuration = totalEnhanceCount > 0 ? (sim.actions / totalEnhanceCount) * baseData.duration : 0; const expectedHourlyWage = expectedDuration > 0 ? expectedProfit / (expectedDuration / 3600) : 0; return { ...baseData, targetLevel, success, actualMaterialCost, actualProtectCost, actualProtectCount, actualTotalCost, expectedMaterialCost, expectedProtectCost, expectedProtectCount: sim.protectCount, expectedTotalCost, diffText, diffColor, originalCost, finalValue, profit, profitColor, expectedProfit, expectedDuration, expectedHourlyWage, bestStrategy, actualProtectAt }; } function renderMergePopup(data, targetLevel, success, protectAt) { const { itemName, actualMaterialCost, actualProtectCost, actualProtectCount, actualTotalCost, expectedMaterialCost, expectedProtectCost, expectedProtectCount, expectedTotalCost, diffText, diffColor, originalCost, finalValue, profit, profitColor, expectedProfit, expectedDuration, expectedHourlyWage, bestStrategy, actualProtectAt } = data; // 使用实际持续时间并格式化为标准格式 const durationSeconds = data.duration || 0; const hours = Math.floor(durationSeconds / 3600); const minutes = Math.floor((durationSeconds % 3600) / 60); const seconds = durationSeconds % 60; // 构建持续时间字符串:4h 28m 55s let durationText = ''; if (hours > 0) { durationText += `${hours}h `; } if (minutes > 0 || hours > 0) { durationText += `${minutes}m `; } durationText += `${seconds}s`; durationText = durationText.trim(); // 计算记录数量 const recordCount = selectedEnhancements.size; // 移除旧的弹出框(如果存在) const oldPopup = document.querySelector('.merge-result-popup'); const oldOverlay = document.querySelector('.merge-result-overlay'); if (oldPopup) oldPopup.remove(); if (oldOverlay) oldOverlay.remove(); // 创建弹出框 const popup = document.createElement('div'); popup.className = 'merge-result-popup'; popup.style.cssText = ` position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: rgba(0, 0, 0, 0.9); border: 1px solid #555; border-radius: 10px; padding: 20px; width: 80%; max-width: 600px; max-height: 80vh; overflow-y: auto; z-index: 10000; color: #e0e0e0; `; // 生成目标等级选项 let targetOptions = ''; for (let i = 1; i <= 20; i++) { const selected = i === targetLevel ? 'selected' : ''; targetOptions += ``; } // 生成保护等级选项 const autoProtectLabel = isZH ? `自动(+${bestStrategy.protectAt})` : `Auto(+${bestStrategy.protectAt})`; let protectOptions = ``; for (let i = 2; i <= targetLevel; i++) { const selected = (protectAt !== null && i === actualProtectAt) ? 'selected' : ''; protectOptions += ``; } if (protectAt === null) { protectOptions = protectOptions.replace('value="auto"', 'value="auto" selected'); } // 生成等级分布HTML(参考原行动记录的形式) let dropsHtml = '
| 项目 | 实际 | 预期 |
|---|---|---|
| 装备成本 | ${formatNumber(originalCost)} | - |
| 材料成本 | ${formatNumber(actualMaterialCost)} | ${formatNumber(expectedMaterialCost)} |
| 保护成本 | ${formatNumber(actualProtectCost)} / ${actualProtectCount || 0}个 | ${formatNumber(expectedProtectCost)} / ${(expectedProtectCount || 0).toFixed(2)}个 |
| 成本合计 | ${formatNumber(originalCost + actualMaterialCost + actualProtectCost)} | ${formatNumber(expectedMaterialCost + expectedProtectCost + originalCost)} |
| ${diffText.includes(t.aboveExpected) ? t.aboveExpected : t.belowExpected} | ${diffText.replace(t.aboveExpected + ': ', '').replace(t.belowExpected + ': ', '')} | - |
| 最终价值 | ${formatNumber(finalValue)} (税后: ${formatNumber(finalValue * 0.98)}) | - |
| 收益 | ${formatNumber(profit)} | ${formatNumber(expectedProfit)} |
| 工时费/h | ${formatNumber(hourlyWage)} | ${formatNumber(expectedHourlyWage)} |