WarSoul Helper

为WarSoul游戏中特定装备添加星形图标

// ==UserScript==
// @name         WarSoul Helper
// @namespace    http://tampermonkey.net/
// @version      0.7
// @description  为WarSoul游戏中特定装备添加星形图标
// @author       shykai
// @match        https://aring.cc/awakening-of-war-soul-ol/*
// ==/UserScript==

(function () {
    'use strict';

    // 需要标记星星的装备名称列表
    const staredEquipment = [
        // 攻速套
        '风暴匕首',
        '阳炎头盔',
        '快枪手的夹克',
        '疾驰军靴',
        '风暴泰坦之靴',
        '风暴魔印',
        '迅捷者',

        // 爬塔 or 进阶
        '天谴之锤',
        '无用的铁盒',
        '宁静',
        '精准核心',
        '暗夜之拥',
        '裂魂',
        '巨熊',
        '征服者',
        '永恒烈焰魔印',
        '黑曜石板甲',

        // 暴击分裂重创
        '狂风短弓',
        '狂战士的风帽',
        '千刃铠甲',
        '熔火行靴',
        '鹰眼指环',

        // 幸运7
        '妖刀村正',
        '掠夺者的凝视',
        '诅咒铠甲',
        '疾风切割护胫',
        '幸运7',

        // 叹息
        '妖刀村正',
        '裂隙叹息',
        '天鹅挽歌',

        // 破阵
        '龙胆枪',
        '裂隙咆哮',
        '黎明守卫板甲',
        '先锋星章',
        '原始狂怒之靴',

        // 在这里添加更多需要标记的装备名称
    ];

    // 创建星形SVG图标元素
    function createStarIcon() {
        const svgNS = "http://www.w3.org/2000/svg";
        const svg = document.createElementNS(svgNS, "svg");
        svg.setAttribute("viewBox", "0 0 1024 1024");

        const path = document.createElementNS(svgNS, "path");
        path.setAttribute("fill", "red");
        path.setAttribute("d", "M512 64 L650 400 L1000 400 L725 570 L850 920 L512 700 L174 920 L299 570 L24 400 L374 400 Z");

        svg.appendChild(path);
        return svg;
    }

    // 检查装备名称是否在标记列表中
    function shouldAddStar(element) {
        // 查找装备名称元素
        if (!element) return false;

        // 获取装备名称文本
        const textName = element.textContent.trim();

        // 检查装备名称是否包含在标记列表中的任何一个名称
        return staredEquipment.some(equipName => textName.includes(equipName));
    }

    // 为匹配的元素添加星形图标
    function checkItemPage(dataTag, classFilter) {
        const elements = document.querySelectorAll('div[' + dataTag + '].' + classFilter);

        elements.forEach(element => {
            // 检查装备名称是否在标记列表中
            const textSpan = element.querySelector('span[' + dataTag + ']');
            if (shouldAddStar(textSpan)) {
                // 检查元素是否已经有星形图标
                if (!element.querySelector('[star-icon]')) {
                    const starItag = document.createElement('i');
                    starItag.setAttribute('star-icon', '');
                    starItag.className = 'el-icon';
                    starItag.style.position = 'absolute';
                    starItag.style.bottom = '0px';
                    starItag.style.left = '0px';
                    starItag.display = 'block';
                    starItag.appendChild(createStarIcon());
                    textSpan.parentNode.appendChild(starItag);
                }
                else {
                    const starItag = element.querySelector('[star-icon]');
                    starItag.style.display = 'block';
                }
            } else {
                const starItag = element.querySelector('[star-icon]');
                if (starItag) {
                    starItag.style.display = 'none';
                }
            }
        });
    }

    function checkAllPage() {
        checkItemPage('data-v-9bab1e99', 'common-btn-wrap'); // 黑市-摊贩
        checkItemPage('data-v-5403be9d', 'common-btn-wrap'); // 黑市-行商
        checkItemPage('data-v-159a8075', 'common-btn-wrap'); // 图鉴
        checkItemPage('data-v-65b2f605', 'common-btn-wrap'); // 铁匠铺-强化
        checkItemPage('data-v-800880ad', 'common-btn-wrap'); // 铁匠铺-继承
        checkItemPage('data-v-9648bea1', 'common-btn-wrap'); // 铁匠铺-升星
        checkItemPage('data-v-f49ac02d', 'is-guttered'); // 背包
        checkItemPage('data-v-c22a0aa7', 'is-guttered'); // 仓库
        checkItemPage('data-v-947da266', 'is-guttered'); // 合成
        checkItemPage('data-v-f5dc95ed', 'is-guttered'); // 邮件
    }
    // 创建一个MutationObserver来监视DOM变化
    const observer = new MutationObserver(mutations => {
        checkAllPage();
    });

    // 开始观察DOM变化
    observer.observe(document.body, {
        childList: true,
        subtree: true
    });

    // 初始运行,为现有元素添加图标
    checkAllPage();

    // 定期检查,以防有些元素在动态加载后未被MutationObserver捕获
    setInterval(checkAllPage, 2000);

})();