POE2 trade 繁体

POE2 trade 繁体化 - 放课后

目前為 2024-12-11 提交的版本,檢視 最新版本

// ==UserScript==
// @name         POE2 trade 繁体
// @namespace    http://tampermonkey.net/
// @version      1.6
// @description  POE2 trade 繁体化 - 放课后
// @author       放课后
// @match        https://www.pathofexile.com/trade2/*
// @grant        GM_xmlhttpRequest
// @license MIT
// @run-at       document-start
// @require https://scriptcat.org/lib/637/1.4.3/ajaxHooker.js#sha256=y1sWy1M/U5JP1tlAY5e80monDp27fF+GMRLsOiIrSUY=
// @grant        GM_setValue
// @grant        GM_getValue
// ==/UserScript==


(async () => {

    'use strict';
    const applyState = GM_getValue('applyState') ? GM_getValue('applyState') : 1

    window.addEventListener('load', function() {
        document.addEventListener('click', function(event) {
            if (event.target.closest('.applyTw')) {
                event.preventDefault(); // 阻止默认行为
                const applyState = GM_getValue('applyState') || 1;
                GM_setValue('applyState', applyState === 1 ? 2 : 1);
                localStorage.clear();
                location.reload();
            }
        });

        // 查找目标 ul 元素
        const tabList = document.querySelector('ul.nav.nav-tabs.account');
        if (!tabList) {
            console.error('未找到目标元素');
            return; // 如果找不到目标元素,退出
        }
        // 创建应用按钮
        const applyLi = document.createElement('li');
        applyLi.role = 'presentation';
        applyLi.className = 'applyTw'
        applyLi.style.float = 'right';
        applyLi.style.height = '32px';
        const applyLink = document.createElement('a');
        applyLink.href = '#';
        applyLink.innerHTML = `<span>${applyState == 1 ? '已应用繁体化':'未应用繁体化'}</span>`;
        applyLi.appendChild(applyLink);

        // 将按钮添加到 ul 元素中
        tabList.appendChild(applyLi);
    });

    const dataMap = {}

    if(applyState == 2) return
    ajaxHooker.hook(request => {
        request.response = res => {
            const responseText = res.responseText;
            const response = JSON.parse(responseText);
            if (request.url.includes('api/trade2/fetch') && dataMap['stats'] && dataMap['stats'].length) {
                response.result.forEach(item => {
                    if(item.item.extended.hashes){
                        const keys = Object.keys(item.item.extended.hashes)

                        keys.forEach(key => {
                            const mods = item.item.extended.hashes[key]
                            const entry = dataMap['stats'].find(a => a.id == key)
                            const modTexts = item.item[key+'Mods']

                            if(entry && entry.entries && modTexts){
                                let index = 0
                                const newModTexts = mods.map(m => {
                                    const oldText =  modTexts[index++]
                                    const mod = entry.entries.find(a => a.id == m[0])
                                    if(mod){
                                        let newModText = mod.text
                                        const values = oldText.match(/\d*\.\d+|\d+/g)
                                        if(values){
                                            let i = 0
                                            values.forEach(v => {
                                                newModText = newModText.replace(/#/,values[i++])
                                            })
                                        }
                                        if(newModText.match(/增加/) && oldText.match(/reduced/)){
                                            newModText = newModText.replace(/增加/,'降低')
                                        }
                                        return `${newModText}(${ oldText})`
                                        console.log(values)
                                    }
                                    return oldText
                                })
                                item.item[key+'Mods'] = newModTexts
                            }

                        })
                    }

                })
                res.responseText = JSON.stringify(response);
            }else if (request.url.includes('api/trade2/data')){
                const key = request.url.split('/').pop();
                if(key == 'items'){
                    const result = response.result

                    res.responseText = new Promise(resolve => {
                        GM_xmlhttpRequest({
                            method: 'GET',
                            url: 'https://p2.710421059.xyz/enTradeItems2Tw.json',
                            onload: function(response1) {
                                if (response1.status === 200) {
                                    try {
                                        const enTradeItems2Tw = JSON.parse(response1.responseText);
                                        for (let i = 0; i < result.length; i++) {
                                            try {
                                                result[i].label = enTradeItems2Tw[i].label;
                                            } catch (e) {
                                                console.error(`Error processing item ${i}:`, e);
                                            }
                                            if (result[i].entries) {
                                                for (let j = 0; j < result[i].entries.length; j++) {
                                                    const find = enTradeItems2Tw[i].entries.find(a => a.type === result[i].entries[j].type && (result[i].entries[j].name ? a.name === result[i].entries[j].name : true));
                                                    if (find) {
                                                        result[i].entries[j].text = find.text;
                                                    }
                                                }
                                            }
                                        }
                                        dataMap[key] = result
                                        response.result = result
                                        resolve(JSON.stringify(response));
                                    } catch (e) {
                                        console.error(e)
                                        resolve(responseText);
                                    }
                                } else {
                                    resolve(responseText);
                                }
                            },
                            onerror: function(error) {
                                resolve(responseText);
                            }
                        });
                    });
                }else{
                    const twUrl = 'https://pathofexile.tw'+request.url
                    res.responseText = new Promise(resolve => {
                    GM_xmlhttpRequest({
                        method: 'GET',
                        url: twUrl,
                        onload: function(response) {
                            if (response.status === 200) {
                                try {
                                    const data = JSON.parse(response.responseText);
                                    dataMap[key] = data.result
                                    resolve(response.responseText);
                                } catch (e) {
                                    resolve(responseText);
                                }
                            } else {
                                resolve(responseText);
                            }
                        },
                        onerror: function(error) {
                            resolve(responseText);
                        }
                    });
                });
                }

            }
        };
    });
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址