咕咕镇数据采集

咕咕镇数据采集,目前采集已关闭,兼作助手

目前为 2021-04-30 提交的版本。查看 最新版本

// ==UserScript==
// @name         咕咕镇数据采集
// @namespace    https://gf.qytechs.cn/users/448113
// @version      1.3.1
// @description  咕咕镇数据采集,目前采集已关闭,兼作助手
// @author       paraii
// @include      https://www.guguzhen.com/*
// @grant        GM_xmlhttpRequest
// @connect      notes.orga.cat
// @connect      www.guguzhen.com
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js
// @require      https://cdn.jsdelivr.net/npm/[email protected]/js/tooltip.js
// @require      https://cdn.jsdelivr.net/npm/[email protected]/js/popover.js
// @run-at       document-body
// @license      MIT License
// ==/UserScript==
(function() {
    'use strict'
    var headersPOST = { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Cookie': document.cookie };

    function submitData() {
        if (localStorage.length > 4 && localStorage.getItem('over') == '1') {
            var meURL = `https://notes.orga.cat/${encodeURI(localStorage.getItem('title')).replace(/%/g, '').replace(/~/g, '7E')}`;
            console.log(meURL);
            GM_xmlhttpRequest({
                method: 'GET',
                url: meURL,
                timeout: 30000,
                headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' },
                onload: response => {
                    let text = response.responseText.match(/content">([\s\S]*)<\/text/)[1];
                    if (text.length == 0) {
                        text = '{"1-50":{"MU":[0],"ZHU":[0],"DENG":[0],"SHOU":[0]},"51-100":{"MU":[0],"ZHU":[0],"DENG":[0],"SHOU":[0]},"101-":{"MU":[0],"ZHU":[0],"DENG":[0],"SHOU":[0]}}'
                    } else {
                        text = text.replace(/&quot;/g, '"');
                    }

                    let json = JSON.parse(text);
                    let pk_i = 0;
                    while (localStorage.getItem(`pk${pk_i}`) != null) {
                        let a = localStorage.getItem(`pk${pk_i}`).split(',');
                        let n = a.shift();
                        for (let j = 1; j < a.length; j++) {
                            a[j] = +a[j];
                        }
                        if (a[3] < 51) {
                            json['1-50'][n].push(a);
                        } else if (a[3] < 101 && a[3] > 50) {
                            json['51-100'][n].push(a);
                        } else {
                            json['101-'][n].push(a);
                        }
                        pk_i++;
                    }

                    text = JSON.stringify(json);
                    GM_xmlhttpRequest({
                        method: 'POST',
                        url: meURL,
                        timeout: 30000,
                        headers: headersPOST,
                        data: `text=${text}`,
                        onload: response => {
                            let atrr = localStorage.getItem('attribute');
                            let na = localStorage.getItem('cardName');
                            let ti = localStorage.getItem('title');
                            localStorage.clear();
                            localStorage.setItem('attribute', atrr);
                            localStorage.setItem('cardName', na);
                            localStorage.setItem('title', ti);
                        }
                    });
                }
            });
            return 1;
        } else {
            return 0;
        }
    }

    function eqToAbbr(name) {
        let abbr = 0;
        switch (name[name.length - 1]) {
            case '杖':
                switch (name[name.length - 2]) {
                    case '短':
                        abbr = 'STAFF';
                        break;
                    case '法':
                        abbr = 'WAND';
                        break;
                }
                break;
            case '剑':
                switch (name[name.length - 2]) {
                    case '之':
                        abbr = 'SWORD';
                        break;
                    case '重':
                        abbr = 'CLAYMORE';
                        break;
                }
                break;
            case '刃':
                abbr = 'BLADE';
                break;
            case '首':
                abbr = 'DAGGER';
                break;
            case '盾':
                abbr = 'SHIELD';
                break;
            case '套':
                switch (name[name.length - 3]) {
                    case '者':
                        abbr = 'GLOVES';
                        break;
                    case '鹫':
                        abbr = 'VULTURE';
                        break;
                }
                break;
            case '环':
                abbr = 'BRACELET';
                break;
            case '袍':
                abbr = 'CLOAK';
                break;
            case '巾':
                abbr = 'SCARF';
                break;
            case '饰':
                abbr = 'TIARA';
                break;
            case '带':
                abbr = 'RIBBON';
                break;
            default:
                switch (name[name.length - 2]) {
                    case '短':
                        abbr = 'BOW';
                        break;
                    case '杀':
                        abbr = 'ASSBOW';
                        break;
                    case '布':
                        abbr = 'CLOTH';
                        break;
                    case '皮':
                        abbr = 'LEATHER';
                        break;
                    case '铁':
                        abbr = 'PLATE';
                        break;
                    case '重':
                        abbr = 'THORN';
                        break;
                }
        }
        return abbr;
    }

    function getEquipmentInfo(nodes) {
        let data = new Array();
        if (nodes.length > 0) {
            for (let i = 0; i < nodes.length; i++) {
                if (nodes[i].className.split(' ').length != 3 || nodes[i].innerText.indexOf('符') != -1) {
                    continue;
                }

                let atrr = nodes[i].getAttribute('data-content').match(/>[0-9]+%</g);
                let title = 0;
                title = nodes[i].getAttribute('data-original-title');
                if (title == null) {
                    title = nodes[i].getAttribute('title');
                }
                let lv = title.match(/>[0-9]+</g)[0];
                let name = title.substr(title.lastIndexOf('>') + 1);
                let mys = nodes[i].getAttribute('data-content').match(/\[神秘属性\]/);
                if (mys != null) {
                    mys = 1;
                } else {
                    mys = 0;
                }
                let id = nodes[i].getAttribute('onclick');
                if (id != null) {
                    id = id.match(/[0-9]+/)[0];
                }
                name = eqToAbbr(name);
                data.push(new Array(name, lv.replace('<', '').replace('>', ''), atrr[0].replace('%', '').replace('<', '').replace('>', ''), atrr[1].replace('%', '').replace('<', '').replace('>', ''), atrr[2].replace('%', '').replace('<', '').replace('>', ''), atrr[3].replace('%', '').replace('<', '').replace('>', ''), mys, id));
            }
        }
        return data;
    }
    var equKey = new Array('BLADE', 'ASSBOW', 'WAND', 'STAFF', 'DAGGER', 'CLAYMORE', 'SHIELD', 'BOW', 'SWORD', 'BOUND_0',
                           'GLOVES', 'BRACELET', 'VULTURE', 'BOUND_1', 'CLOAK', 'THORN', 'PLATE', 'LEATHER', 'CLOTH', 'BOUND_2', 'SCARF', 'TIARA', 'RIBBON');
    var fullName = new Array('狂信者的荣誉之刃', '反叛者的刺杀弓', '光辉法杖', '探险者短杖', '幽梦匕首', '陨铁重剑', '荆棘剑盾', '探险者短弓', '探险者之剑', 'BOUND_0',
                             '探险者手套', '命师的传承手环', '秃鹫手套', 'BOUND_1', '旅法师的灵光袍', '战线支撑者的荆棘重甲', '铁甲', '皮甲', '布甲', 'BOUND_2', '探险者头巾', '占星师的发饰', '天使缎带');
    var sortdict = new Array();
    var fullNameOf = new Array();
    for (let i = 0; i < equKey.length; i++) {
        sortdict[equKey[i]] = i;
        fullNameOf[equKey[i]] = fullName[i];
    }

    function sortEqByName(e1, e2) {
        let title1 = e1.getAttribute('data-original-title');
        if (title1 == null) {
            title1 = e1.getAttribute('title');
        }
        let name1 = eqToAbbr(title1.substr(title1.lastIndexOf('>') + 1));
        e1.setAttribute('data-abbr', sortdict[name1]);

        let title2 = e2.getAttribute('data-original-title');
        if (title2 == null) {
            title2 = e2.getAttribute('title');
        }
        let name2 = eqToAbbr(title2.substr(title2.lastIndexOf('>') + 1));
        e2.setAttribute('data-abbr', sortdict[name2]);

        return sortdict[name1] - sortdict[name2];
    }

    function getPostData(p1, p2) {
        let data = -1;
        let sc = document.getElementsByTagName('script');
        //console.log(sc);
        for (let i = 0; i < sc.length; i++) {
            let func = sc[i].innerText.match(p1);
            if (func != null) {
                data = func[0].match(p2)[0];
                break;
            }
        }
        return data;
    }

    var user = document.getElementsByClassName('icon-user')[0].parentNode.innerText.split(' ')[1];
    console.log(user)
    if (localStorage.getItem(user) == null) {
        localStorage.setItem(user, '{"dataIndex":{"battleInfoNow":"0","battleInfoBefore":"0","battleInfoBack":"0"},"dataBind":{"0":"0"},"dataBeachSift":{"0":"0"}}');
    }

    function getUserData() {
        return JSON.parse(localStorage.getItem(user));
    }

    function setUserData(json) {
        localStorage.setItem(user, JSON.stringify(json));
    }
    //GM_addStyle(GM_getResourceText('bootstrapcss'));
    if (localStorage.getItem('attribute') == null && localStorage.getItem('cardName') == null) {
        localStorage.setItem('attribute', 0);
        localStorage.setItem('cardName', 0);
    }
    //     if(localStorage.getItem('pk99')!=null&&localStorage.getItem('title')!=null){ //超过100条战斗自动提交
    //         localStorage.setItem('over', 1);
    //         try{
    //             //submitData();
    //         }catch(err){
    //             console.log(err);
    //         }
    //         localStorage.setItem('over', 0);
    //         let nameURL = `https://notes.orga.cat/gugudataname`;
    //         GM_xmlhttpRequest({
    //             method: 'GET',
    //             url: nameURL,
    //             timeout: 30000,
    //             headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
    //             onload: response => {
    //                 let text = response.responseText.match(/content">([\s\S]*)<\/text/)[1];
    //                 let list = text.split(',');
    //                 if(list.indexOf(localStorage.getItem('title'))==-1){
    //                     list.push(localStorage.getItem('title'));
    //                     text = list.join(',');
    //                     GM_xmlhttpRequest({
    //                         method: 'POST',
    //                         url: nameURL,
    //                         timeout: 30000,
    //                         headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
    //                         data: `text=${text}`,
    //                         onload: response => {
    //                             let atrr = localStorage.getItem('attribute');
    //                             let na = localStorage.getItem('cardName');
    //                             let ti = localStorage.getItem('title');
    //                             localStorage.clear();
    //                             localStorage.setItem('attribute',atrr);
    //                             localStorage.setItem('cardName',na);
    //                             localStorage.setItem('title',ti);
    //                         }
    //                     });
    //                 }
    //             }
    //         });
    //     }

    var attribute = new Array();

    if (window.location.pathname == '/fyg_index.php') {
        let userData = getUserData();
        let dataIndex = userData.dataIndex;
        let waitForCol = setInterval(() => {
            if (document.getElementsByClassName('col-md-4') != null) {
                clearInterval(waitForCol);
                dataIndex.battleInfoNow = document.getElementsByClassName('col-md-4')[0].children[4].children[0].innerText;
                let p0 = document.createElement('p');
                if (dataIndex.battleInfoNow === dataIndex.battleInfoBefore) {
                    p0.innerText = `对玩家战斗(上次查看):${dataIndex.battleInfoBack}`;
                } else {
                    p0.innerText = `对玩家战斗(上次查看):${dataIndex.battleInfoBefore}`;
                    dataIndex.battleInfoBack = dataIndex.battleInfoBefore;
                    dataIndex.battleInfoBefore = dataIndex.battleInfoNow
                }
                setUserData(userData);
                document.getElementsByClassName('col-md-4')[0].appendChild(p0);
            }
        }, 1000);
    } else if (window.location.pathname == '/fyg_equip.php') {
        let btnc1 = document.createElement('button');
        let timeoutWaitForCard = 0;
        btnc1.innerText = '导出计算器';
        btnc1.onclick = () => {
            try {
                d.innerHTML = '<div class="pop_main">\n<div class="pop_con">\n<div class="pop_text">0</div>\n<div class="pop_text">0</div>\n<a href="#">×</a>\n</div>\n<div class="mask"></div>\n</div>';
                $('.pop_con a').click(() => {
                    $('.pop_con').animate({ 'top': 0, 'opacity': 0 }, () => {
                        $('.pop_main').hide()
                    })
                })
                $('.pop_main').show()
                $('.pop_con').css({ 'top': 0, 'opacity': 0 })
                $('.pop_con').animate({ 'top': '50%', 'opacity': 1 })
                let text = $('.pop_text');
                let cardName = document.querySelector("#backpacks > div:nth-child(1) > div.col-md-4 > div > div.row > div.col-xs-2.fyg_f18.fyg_tr").innerText;
                let cardInfo = document.querySelector("#backpacks > div:nth-child(1) > div.col-md-4 > div > div.fyg_tl").innerText.match(/[0-9]+/g);

                switch (cardName) {
                    case '琳':
                        text[0].innerText = `LIN ${cardInfo[0]} ${cardInfo[1]} ${cardInfo[2]}`;
                        text[1].innerText = `${document.getElementById('sjll').getAttribute('value')} ${document.getElementById('sjmj').getAttribute('value')} ${document.getElementById('sjzl').getAttribute('value')} ${document.getElementById('sjtp').getAttribute('value')} ${document.getElementById('sjjs').getAttribute('value')} ${document.getElementById('sjyz').getAttribute('value')}`;
                        break;
                    case '艾':
                        text[0].innerText = `AI ${cardInfo[0]} ${cardInfo[1]} ${cardInfo[2]}`;
                        text[1].innerText = `${document.getElementById('sjll').getAttribute('value')} ${document.getElementById('sjmj').getAttribute('value')} ${document.getElementById('sjzl').getAttribute('value')} ${document.getElementById('sjtp').getAttribute('value')} ${document.getElementById('sjjs').getAttribute('value')} ${document.getElementById('sjyz').getAttribute('value')}`;
                        break;
                    case '默':
                        text[0].innerText = `MO ${cardInfo[0]} ${cardInfo[1]} ${cardInfo[2]}`;
                        text[1].innerText = `${document.getElementById('sjll').getAttribute('value')} ${document.getElementById('sjmj').getAttribute('value')} ${document.getElementById('sjzl').getAttribute('value')} ${document.getElementById('sjtp').getAttribute('value')} ${document.getElementById('sjjs').getAttribute('value')} ${document.getElementById('sjyz').getAttribute('value')}`;
                        break;
                    case '梦':
                        text[0].innerText = `MENG ${cardInfo[0]} ${cardInfo[1]} ${cardInfo[2]}`;
                        text[1].innerText = `${document.getElementById('sjll').getAttribute('value')} ${document.getElementById('sjmj').getAttribute('value')} ${document.getElementById('sjzl').getAttribute('value')} ${document.getElementById('sjtp').getAttribute('value')} ${document.getElementById('sjjs').getAttribute('value')} ${document.getElementById('sjyz').getAttribute('value')}`;
                        break;
                    case '薇':
                        text[0].innerText = `WEI ${cardInfo[0]} ${cardInfo[1]} ${cardInfo[2]}`;
                        text[1].innerText = `${document.getElementById('sjll').getAttribute('value')} ${document.getElementById('sjmj').getAttribute('value')} ${document.getElementById('sjzl').getAttribute('value')} ${document.getElementById('sjtp').getAttribute('value')} ${document.getElementById('sjjs').getAttribute('value')} ${document.getElementById('sjyz').getAttribute('value')}`;
                        break;
                    case '伊':
                        text[0].innerText = `YI ${cardInfo[0]} ${cardInfo[1]} ${cardInfo[2]}`;
                        text[1].innerText = `${document.getElementById('sjll').getAttribute('value')} ${document.getElementById('sjmj').getAttribute('value')} ${document.getElementById('sjzl').getAttribute('value')} ${document.getElementById('sjtp').getAttribute('value')} ${document.getElementById('sjjs').getAttribute('value')} ${document.getElementById('sjyz').getAttribute('value')}`;
                        break;
                }
            } catch (err) { console.log(err); }
        }
        let waitForBackpacks = setInterval(() => {
            if (document.getElementById('backpacks') != null && document.getElementsByClassName('fyg_tc')[3] != null) {
                clearInterval(waitForBackpacks);
                let div00 = document.createElement('div');
                div00.innerHTML = `<p></p><p><button type="button" class="btn btn-block collapsed" data-toggle="collapse" data-target="#eq0"><i class="icon icon-caret-down"></i></button></p>
        <div class="in" id="eq0"></div>
<p><button type="button" class="btn btn-block collapsed" data-toggle="collapse" data-target="#eq1"><i class="icon icon-caret-down"></i></button></p>
        <div class="in" id="eq1"></div>
<p><button type="button" class="btn btn-block collapsed" data-toggle="collapse" data-target="#eq2"><i class="icon icon-caret-down"></i></button></p>
        <div class="in" id="eq2"></div>
<p><button type="button" class="btn btn-block collapsed" data-toggle="collapse" data-target="#eq3"><i class="icon icon-caret-down"></i></button></p>
        <div class="in" id="eq3"></div>
<p><button type="button" class="btn btn-block collapsed" data-toggle="collapse" data-target="#eq4"><i class="icon icon-caret-down"></i></button></p>
        <div class="in" id="eq4"></div>`;

                let eqbtns = null;

                function addCollapse() {
                    let waitForBtn = setInterval(() => {
                        if (document.getElementsByClassName('fyg_tc')[3] != null) {
                            eqbtns = [].slice.call(document.getElementsByClassName('fyg_tc')[3].children).concat([].slice.call(document.getElementById('backpacks').children));
                            if (document.getElementById('backpacks').innerText.indexOf('读取中') == -1 &&
                                eqbtns.length > 0 && eqbtns[0].className.split(' ')[2] == 'fyg_mp3' &&
                                document.getElementById('carding').innerText.indexOf('读取中') == -1) {
                                clearInterval(waitForBtn);
                                eqbtns = [].slice.call(document.getElementsByClassName('fyg_tc')[3].children).concat([].slice.call(document.getElementById('backpacks').children));

                                if (eqbtns[eqbtns.length - 1].className.split(' ')[2] != 'fyg_mp3') {
                                    eqbtns = eqbtns.slice(0, -2);
                                }
                                //console.log(eqbtns);
                                if (document.getElementsByClassName('collapsed').length == 0) {
                                    document.getElementById('backpacks').appendChild(div00);
                                }
                                for (let i = 0; i < eqbtns.length; i++) {
                                    if (eqbtns[i].className.split(' ')[0] == 'popover') {
                                        eqbtns.splice(i, 1);
                                        break;
                                    }
                                }
                                eqbtns.sort(sortEqByName);
                                document.getElementById('eq0').innerHTML = '';
                                document.getElementById('eq1').innerHTML = '';
                                document.getElementById('eq2').innerHTML = '';
                                document.getElementById('eq3').innerHTML = '';
                                document.getElementById('eq4').innerHTML = '';
                                let ineq = document.getElementById('eq0');

                                for (let i = 0; i < eqbtns.length; i++) {
                                    if (eqbtns[i].innerText == '空') {
                                        continue;
                                    }

                                    let btn0 = document.createElement('button');
                                    btn0.setAttribute('class', 'btn btn-light');
                                    btn0.setAttribute('onclick', eqbtns[i].getAttribute('onclick'));
                                    btn0.innerHTML = `<h3 class="popover-title" style="background-color: ${getComputedStyle(eqbtns[i]).getPropertyValue("background-color")}">${eqbtns[i].dataset.originalTitle}</h3><div class="popover-content">${eqbtns[i].dataset.content}</div>`;
                                    if (btn0.children[1].lastChild.nodeType == 3) { //清除背景介绍文本
                                        btn0.children[1].lastChild.remove();
                                    }

                                    if (eqbtns[i].innerText.indexOf('符') != -1) {
                                        ineq = document.getElementById('eq4');
                                    } else {
                                        let a = parseInt(eqbtns[i].getAttribute('data-abbr'));
                                        if (a >= sortdict.BOUND_0 && a < sortdict.BOUND_1) {
                                            ineq = document.getElementById('eq1');
                                        } else if (a >= sortdict.BOUND_1 && a < sortdict.BOUND_2) {
                                            ineq = document.getElementById('eq2');
                                        } else if (a >= sortdict.BOUND_2) {
                                            ineq = document.getElementById('eq3');
                                        }
                                    }

                                    ineq.appendChild(btn0);
                                }
                                $('.btn-light').css({
                                    'padding': 0,
                                    'text-align': 'left',
                                    'box-shadow': 'none',
                                    'background-color': 'none'
                                });
                                $('.bg-danger').css({
                                    'max-width': '250px',
                                    'white-space': 'pre-line',
                                    'word-break': 'break-all'
                                });
                            }
                        }
                    }, 500);
                }
                if (document.getElementsByClassName('nav nav-secondary nav-justified')[0].children[0].className == 'active') { addCollapse(); }

                let observer = new MutationObserver((mutationsList, observer) => {
                    let page = document.getElementsByClassName('nav nav-secondary nav-justified')[0].children;
                    let index = 0;
                    for (let i = 0; i < 4; i++) {
                        if (page[i].className == 'active') {
                            index = i;
                        }
                    }
                    switch (index) {
                        case 0:
                            $('.pop_main').hide();
                            btnc1.onclick = () => {
                                $('.pop_main').show()
                                $('.pop_con').css({ 'top': 0, 'opacity': 0 })
                                $('.pop_con').animate({ 'top': '50%', 'opacity': 1 })
                                try {
                                    let bag = [].slice.call(document.getElementById('backpacks').children);
                                    let bagdata = new Array();
                                    let equip = document.getElementsByClassName('fyg_tc')[3];
                                    let data = new Array();

                                    if (bag[bag.length - 1].className.split(' ')[2] != 'fyg_mp3') {
                                        bag = bag.slice(0, -1);
                                    }
                                    //console.log(bag)
                                    bagdata = getEquipmentInfo(bag);
                                    data = getEquipmentInfo(equip.children);
                                    bagdata.sort((e1, e2) => {
                                        return sortdict[e1[0]] - sortdict[e2[0]];
                                    });
                                    //console.log(bagdata);
                                    d.innerHTML = `<div class="pop_main">
    <div class="pop_con">
        <div class="pop_text">/</div>
        <div class="pop_text">/</div>
        <div class="pop_text">/</div>
        <div class="pop_text">/</div>
        <div class="pop_text" style="color:red">Bag:</div>
        ${new Array(bagdata.length + 1).join('<div class="pop_text">/</div>')}
        <div class="pop_text" style="color:red">Amulet:</div>
        <div class="pop_text">/</div>
<a href="#">×</a>
    </div>
</div>`;
                                    $('.pop_con a').click(() => {
                                        $('.pop_con').animate({ 'top': 0, 'opacity': 0 }, () => {
                                            $('.pop_main').hide()
                                        })
                                    })
                                    $('.pop_main').show()
                                    $('.pop_con').css({ 'top': 0, 'opacity': 0 })
                                    $('.pop_con').animate({ 'top': '50%', 'opacity': 1 })
                                    let text = $('.pop_text');

                                    text[0].innerText = `${data[0].slice(0, -1).join(' ')}`;
                                    text[1].innerText = `${data[1].slice(0, -1).join(' ')}`;
                                    text[2].innerText = `${data[2].slice(0, -1).join(' ')}`;
                                    text[3].innerText = `${data[3].slice(0, -1).join(' ')}`;

                                    for (let i = 0; i < bagdata.length; i++) {
                                        text[5 + i].innerText = `${bagdata[i].slice(0, -1).join(' ')}`;
                                    }

                                    let amulet = document.querySelector("#backpacks > div.row").innerText.match(/\+[0-9]+/g);
                                    let amuletAbbr = new Array('STR','AGI','INT','VIT','SPR','RES','PATK','MATK','SPD','REC','HP','SLD','LCH','RFL','CRT','SKL','PDEF','MDEF');
                                    for(let i=amulet.length-1;i>=0;i--){
                                        if(amulet[i][1]=='0'){
                                            amulet.splice(i, 1);
                                        }
                                        else{
                                            amulet[i] = amuletAbbr[i] + amulet[i];
                                        }

                                    }
                                    text[6 + bagdata.length].innerText = `AMULET ${amulet.join(' ').replace(/\+/g,' ')} ENDAMULET`;

                                } catch (err) { console.log(err); }
                            }
                            try {
                                if (!((mutationsList[0].addedNodes[0].className != null && mutationsList[0].addedNodes[0].className.split(' ')[0] === 'popover') ||
                                      (mutationsList[0].removedNodes[0].className != null && mutationsList[0].removedNodes[0].className.split(' ')[0] === 'popover'))) {
                                    addCollapse();
                                }
                            } catch (err) {}
                            break;
                        case 1:
                            $('.pop_main').hide();
                            btnc1.onclick = () => { console.log('Click None'); };

                            var observerCard = new MutationObserver(() => {
                                observerCard.disconnect();
                                console.log('Backpacks Changed');
                                try {
                                    let col6 = document.querySelector('#backpacks > div:nth-child(1) > div.col-md-6');
                                    if (col6.children[1].innerText.includes('卡片') && col6.children.length == 5) {

                                        btnc1.onclick = () => {
                                            try {
                                                d.innerHTML = '<div class="pop_main">\n<div class="pop_con">\n<div class="pop_text">0</div>\n<div class="pop_text">0</div>\n<a href="#">×</a>\n</div>\n<div class="mask"></div>\n</div>';
                                                $('.pop_con a').click(() => {
                                                    $('.pop_con').animate({ 'top': 0, 'opacity': 0 }, () => {
                                                        $('.pop_main').hide()
                                                    })
                                                })
                                                $('.pop_main').show()
                                                $('.pop_con').css({ 'top': 0, 'opacity': 0 })
                                                $('.pop_con').animate({ 'top': '50%', 'opacity': 1 })
                                                let text = $('.pop_text');
                                                let cardName = document.querySelector("#backpacks > div:nth-child(1) > div.col-md-4 > div > div.row > div.col-xs-2.fyg_f18.fyg_tr").innerText;
                                                let cardInfo = document.querySelector("#backpacks > div:nth-child(1) > div.col-md-4 > div > div.fyg_tl").innerText.match(/[0-9]+/g);

                                                switch (cardName) {
                                                    case '琳':
                                                        text[0].innerText = `LIN ${cardInfo[0]} ${cardInfo[1]} ${cardInfo[2]}`;
                                                        text[1].innerText = `${document.getElementById('sjll').getAttribute('value')} ${document.getElementById('sjmj').getAttribute('value')} ${document.getElementById('sjzl').getAttribute('value')} ${document.getElementById('sjtp').getAttribute('value')} ${document.getElementById('sjjs').getAttribute('value')} ${document.getElementById('sjyz').getAttribute('value')}`;
                                                        break;
                                                    case '艾':
                                                        text[0].innerText = `AI ${cardInfo[0]} ${cardInfo[1]} ${cardInfo[2]}`;
                                                        text[1].innerText = `${document.getElementById('sjll').getAttribute('value')} ${document.getElementById('sjmj').getAttribute('value')} ${document.getElementById('sjzl').getAttribute('value')} ${document.getElementById('sjtp').getAttribute('value')} ${document.getElementById('sjjs').getAttribute('value')} ${document.getElementById('sjyz').getAttribute('value')}`;
                                                        break;
                                                    case '默':
                                                        text[0].innerText = `MO ${cardInfo[0]} ${cardInfo[1]} ${cardInfo[2]}`;
                                                        text[1].innerText = `${document.getElementById('sjll').getAttribute('value')} ${document.getElementById('sjmj').getAttribute('value')} ${document.getElementById('sjzl').getAttribute('value')} ${document.getElementById('sjtp').getAttribute('value')} ${document.getElementById('sjjs').getAttribute('value')} ${document.getElementById('sjyz').getAttribute('value')}`;
                                                        break;
                                                    case '梦':
                                                        text[0].innerText = `MENG ${cardInfo[0]} ${cardInfo[1]} ${cardInfo[2]}`;
                                                        text[1].innerText = `${document.getElementById('sjll').getAttribute('value')} ${document.getElementById('sjmj').getAttribute('value')} ${document.getElementById('sjzl').getAttribute('value')} ${document.getElementById('sjtp').getAttribute('value')} ${document.getElementById('sjjs').getAttribute('value')} ${document.getElementById('sjyz').getAttribute('value')}`;
                                                        break;
                                                    case '薇':
                                                        text[0].innerText = `WEI ${cardInfo[0]} ${cardInfo[1]} ${cardInfo[2]}`;
                                                        text[1].innerText = `${document.getElementById('sjll').getAttribute('value')} ${document.getElementById('sjmj').getAttribute('value')} ${document.getElementById('sjzl').getAttribute('value')} ${document.getElementById('sjtp').getAttribute('value')} ${document.getElementById('sjjs').getAttribute('value')} ${document.getElementById('sjyz').getAttribute('value')}`;
                                                        break;
                                                    case '伊':
                                                        text[0].innerText = `YI ${cardInfo[0]} ${cardInfo[1]} ${cardInfo[2]}`;
                                                        text[1].innerText = `${document.getElementById('sjll').getAttribute('value')} ${document.getElementById('sjmj').getAttribute('value')} ${document.getElementById('sjzl').getAttribute('value')} ${document.getElementById('sjtp').getAttribute('value')} ${document.getElementById('sjjs').getAttribute('value')} ${document.getElementById('sjyz').getAttribute('value')}`;
                                                        break;
                                                }
                                            } catch (err) { console.log(err); }
                                        }


                                        let btng = document.createElement('div');
                                        btng.className = 'btn-group';
                                        col6.insertBefore(btng, col6.children[2]);

                                        let s0 = document.createElement('span');
                                        s0.setAttribute('class', 'fyg_lh30');
                                        s0.innerHTML = '<a href="###" style="color:#F00" onclick="showPopup(this)"> 绑定装备&光环 </a>'
                                        btng.appendChild(s0);

                                        let s1 = document.createElement('span');
                                        s1.setAttribute('class', 'fyg_lh30');
                                        s1.innerHTML = '<a href="###" style="color:#00FF" onclick="equipOnekey(this)"> 一键装备 </a>'
                                        btng.appendChild(s1);


                                        try {
                                            let div0 = document.createElement('div');
                                            div0.setAttribute('id', 'cardpage_pop');
                                            let initHTML = `    <div class="popup-content">
        <div class="topline">
            <p></p>
            <div class="equipment_selector"></div>
        </div>
        <div class="topline">
            <p></p>
            <div class="equipment_selector"></div>
        </div>
        <div class="topline">
            <p></p>
            <div class="equipment_selector"></div>
        </div>
        <div class="topline">
            <p></p>
            <div class="equipment_selector"></div>
        </div>
        <p></p>
        <div class="halo_selector"></div>
        <p id="load_tip">读取中...</p>
        <button type="button" id="bind">绑定</button>
        <button type="button" onclick="unbind()">解除绑定</button>
        <button type="button" onclick="quit()">取消</button>
    </div>`;
                                            div0.innerHTML = `       <style>
    .popup {
        width: 100vw;
        height: 100vh;
        background-color: rgba(0, 0, 0, .5);
        position: fixed;
        left: 0;
        top: 0;
        bottom: 0;
        right: 0;
        z-index: 9999;
        display: none;
        justify-content: center;
        align-items: center;
    }

    .popup-content {
        width: 400px;
        height: 200px;
        background-color: #fff;
        box-sizing: border-box;
        padding: 10px 30px;
        color: black;
    }

    .topline {
        width: 100%;
        border-bottom: 1px solid black;
    }
</style>

<div class="popup" id="popup">
${initHTML}
</div>`;
                                            unsafeWindow.equipOnekey = function(t) {
                                                $('.popup-content').height(100);
                                                $('.popup-content').width(100);
                                                document.getElementById("popup").innerHTML = `<div class="popup-content">
        <div class="topline">
            <p></p>
            <div>装备×</div>
            <div>光环×</div>
        </div>
        <div>更换中..</div>
        <button type="button" onclick="quit()">取消</button>
    </div>`;
                                                let role = t.parentNode.parentNode.parentNode.parentNode.children[0].children[0];
                                                let roleId = role.getAttribute('onclick').match(/[0-9]+/)[0];
                                                role = role.children[0].innerText.replace(/\s+/g, '').split('级')[1] + role.children[1].innerText.replace(/\s+/g, '');
                                                console.log(`equipOnekey: ${roleId} ${role}`);

                                                let bind_info = null;
                                                let ud = getUserData();
                                                if (ud.dataBind[roleId] != null) {
                                                    bind_info = ud.dataBind[roleId];
                                                }
                                                //                                                         else{
                                                //                                                             bind_info = localStorage.getItem(`${role}`);
                                                //                                                             ud.dataBind[role] = bind_info; //数据兼容转移
                                                //                                                             setUserData(ud);
                                                //                                                             localStorage.removeItem(`${role}`);
                                                //                                                         }

                                                console.log(`bind_info of role:${bind_info}`);
                                                console.log(`ID of role:${roleId}`);

                                                let upcard_data = getPostData(/upcard\(id\)\{[\s\S]*\}/m, /data: ".*\+id\+.*"/).slice(7, -1).replace('"+id+"', roleId);

                                                if (bind_info != null) {
                                                    GM_xmlhttpRequest({
                                                        method: 'POST',
                                                        url: `https://www.guguzhen.com/fyg_click.php`,
                                                        headers: headersPOST,
                                                        data: upcard_data,
                                                        onload: response => {
                                                            if (response.responseText == 'ok') {
                                                                console.log('card has changed');
                                                                bind_info = bind_info.split('|');
                                                                let equRequest = GM_xmlhttpRequest({
                                                                    method: 'POST',
                                                                    url: `https://www.guguzhen.com/fyg_read.php`,
                                                                    headers: headersPOST,
                                                                    data: 'f=7',
                                                                    onload: response => {
                                                                        let div0 = document.createElement('div');
                                                                        div0.innerHTML = response.responseText;
                                                                        let equipment = getEquipmentInfo(div0.children);
                                                                        let equiped = getEquipmentInfo(document.getElementsByClassName('fyg_tc')[3].children);

                                                                        let ids = new Array();
                                                                        let err = 0;
                                                                        for (let i = 0; i < 4; i++) {
                                                                            let exist = 0;
                                                                            for (let j = 0; j < 4; j++) {
                                                                                if (bind_info[i] === equiped[j].slice(0, -2).join()) { //已装备
                                                                                    exist = 1;
                                                                                    break;
                                                                                }
                                                                            }
                                                                            if (exist == 0) { //未装备
                                                                                for (let j = 0; j < equipment.length; j++) {
                                                                                    if (bind_info[i] == equipment[j].slice(0, -2).join()) {
                                                                                        console.log(bind_info[i]);
                                                                                        ids.push(equipment[j][equipment[j].length - 1]);
                                                                                        exist = 1;
                                                                                        break;
                                                                                    }
                                                                                }
                                                                                if (exist == 0) {
                                                                                    alert('有装备不存在,请重新绑定');
                                                                                    err = 1;
                                                                                    window.location.reload();
                                                                                }
                                                                            }
                                                                        }
                                                                        if (err == 0) {
                                                                            let c = ids.length;
                                                                            if (c == 0) {
                                                                                document.getElementsByClassName('topline')[0].children[1].innerText = '装备√';
                                                                                if (document.getElementsByClassName('topline')[0].children[2].innerText == '光环√') {
                                                                                    window.location.reload();
                                                                                    document.getElementById("popup").style.display = "none";
                                                                                }
                                                                            }
                                                                            let puton_data = getPostData(/puton\(id\)\{[\s\S]*\}/m, /data: ".*\+id\+.*"/).slice(7, -1);
                                                                            for (let i = 0; i < ids.length; i++) {
                                                                                GM_xmlhttpRequest({
                                                                                    method: 'POST',
                                                                                    url: `https://www.guguzhen.com/fyg_click.php`,
                                                                                    headers: headersPOST,
                                                                                    data: puton_data.replace('"+id+"', ids[i]),
                                                                                    onload: response => {
                                                                                        if (response.responseText == 'ok') {
                                                                                            c--;
                                                                                            if (c == 0) {
                                                                                                document.getElementsByClassName('topline')[0].children[1].innerText = '装备√';
                                                                                                if (document.getElementsByClassName('topline')[0].children[2].innerText == '光环√') {
                                                                                                    window.location.reload();
                                                                                                    document.getElementById("popup").style.display = "none";
                                                                                                }
                                                                                            }
                                                                                        }
                                                                                    }
                                                                                });
                                                                            }
                                                                        }
                                                                    }
                                                                });

                                                                let halo = bind_info[bind_info.length - 1].split(',');
                                                                for (let i = 0; i < halo.length; i++) {
                                                                    switch (halo[i]) {
                                                                        case '启程之誓':
                                                                            halo[i] = '101';
                                                                            break;
                                                                        case '启程之心':
                                                                            halo[i] = '102';
                                                                            break;
                                                                        case '启程之风':
                                                                            halo[i] = '103';
                                                                            break;
                                                                        case '破壁之心':
                                                                            halo[i] = '201';
                                                                            break;
                                                                        case '破魔之心':
                                                                            halo[i] = '202';
                                                                            break;
                                                                        case '复合护盾':
                                                                            halo[i] = '203';
                                                                            break;
                                                                        case '鲜血渴望':
                                                                            halo[i] = '204';
                                                                            break;
                                                                        case '削骨之痛':
                                                                            halo[i] = '205';
                                                                            break;
                                                                        case '伤口恶化':
                                                                            halo[i] = '301';
                                                                            break;
                                                                        case '精神创伤':
                                                                            halo[i] = '302';
                                                                            break;
                                                                        case '铁甲尖刺':
                                                                            halo[i] = '303';
                                                                            break;
                                                                        case '忍无可忍':
                                                                            halo[i] = '304';
                                                                            break;
                                                                        case '热血战魂':
                                                                            halo[i] = '305';
                                                                            break;
                                                                        case '沸血之志':
                                                                            halo[i] = '401';
                                                                            break;
                                                                        case '波澜不惊':
                                                                            halo[i] = '402';
                                                                            break;
                                                                        case '飓风之力':
                                                                            halo[i] = '403';
                                                                            break;
                                                                        case '红蓝双刺':
                                                                            halo[i] = '404';
                                                                            break;
                                                                        case '绝对护盾':
                                                                            halo[i] = '405';
                                                                            break;
                                                                        case '后发制人':
                                                                            halo[i] = '406';
                                                                            break;
                                                                    }
                                                                }
                                                                let halosave_data = getPostData(/halosave\(\)\{[\s\S]*\}/m, /data: ".*\+savearr\+.*"/).slice(7, -1).replace('"+savearr+"', halo.join());
                                                                let haloRequest = GM_xmlhttpRequest({
                                                                    method: 'POST',
                                                                    url: `https://www.guguzhen.com/fyg_click.php`,
                                                                    headers: headersPOST,
                                                                    data: halosave_data,
                                                                    onload: response => {
                                                                        if (response.responseText == 'ok') {
                                                                            document.getElementsByClassName('topline')[0].children[2].innerText = '光环√';
                                                                            if (document.getElementsByClassName('topline')[0].children[1].innerText == '装备√') {
                                                                                window.location.reload();
                                                                                document.getElementById("popup").style.display = "none";
                                                                            }
                                                                        }
                                                                    }
                                                                });
                                                                unsafeWindow.quit = function() {
                                                                    document.getElementById("popup").style.display = "none";
                                                                    equRequest.abort();
                                                                    haloRequest.abort();
                                                                    document.getElementById("popup").innerHTML = initHTML;
                                                                };
                                                                document.getElementById("popup").style.display = "flex";
                                                            }
                                                        }
                                                    });
                                                } else {
                                                    alert('未绑定');
                                                }

                                            }

                                            unsafeWindow.showPopup = function(t) {
                                                document.getElementById("popup").innerHTML = initHTML;
                                                let role = t.parentNode.parentNode.parentNode.parentNode.children[0].children[0];
                                                let roleId = role.getAttribute('onclick').match(/[0-9]+/)[0];
                                                role = role.children[0].innerText.replace(/\s+/g, '').split('级')[1] + role.children[1].innerText.replace(/\s+/g, '');
                                                console.log(`bindRole: ${roleId} ${role}`);
                                                let equRequest = GM_xmlhttpRequest({ //获取装备
                                                    method: 'POST',
                                                    url: `https://www.guguzhen.com/fyg_read.php`,
                                                    headers: headersPOST,
                                                    data: 'f=7',
                                                    onload: response => {
                                                        let div0 = document.createElement('div');
                                                        div0.innerHTML = response.responseText;
                                                        let equipment = getEquipmentInfo(div0.children);
                                                        equipment = equipment.concat(getEquipmentInfo(document.getElementsByClassName('fyg_tc')[3].children));
                                                        $('.popup-content').height(Math.min(equipment.length, 19) * 25 + 120);
                                                        $('.popup-content').width(400);
                                                        $('.popup-content').css('overflow', 'scroll');


                                                        let e = new Array(new Array(), new Array(), new Array(), new Array());
                                                        equipment.sort((e1, e2) => {
                                                            return sortdict[e1[0]] - sortdict[e2[0]];
                                                        });
                                                        equipment.forEach(item => {
                                                            let i = 0;
                                                            if (sortdict[item[0]] < sortdict.BOUND_0) {
                                                                i = 0;
                                                            } else if (sortdict[item[0]] >= sortdict.BOUND_0 && sortdict[item[0]] < sortdict.BOUND_1) {
                                                                i = 1;
                                                            } else if (sortdict[item[0]] >= sortdict.BOUND_1 && sortdict[item[0]] < sortdict.BOUND_2) {
                                                                i = 2;
                                                            } else {
                                                                i = 3;
                                                            }
                                                            //添加文字
                                                            e[i].push(new Array(fullNameOf[item[0]], `Lv${item[1]}`, `${item[2]}%`, `${item[3]}%`, `${item[4]}%`, `${item[5]}%`));
                                                        });

                                                        function selector_equ() {
                                                            var equipNum = $(".equipment_selector .equipment_item").index(this);
                                                            $(".equipment_selector .equipment_item")
                                                                .eq(equipNum)
                                                                .css("background-color", "rgb(135, 206, 250)")
                                                                .siblings(".equipment_selector .equipment_item")
                                                                .css("background-color", "rgb(255, 255, 255)");
                                                        }

                                                        let content = document.getElementsByClassName('equipment_selector');
                                                        for (let i = 0; i < 4; i++) {
                                                            for (let j = 0; j < e[i].length; j++) {
                                                                let li0 = document.createElement('li');
                                                                li0.setAttribute('class', 'equipment_item');
                                                                li0.addEventListener('click', selector_equ, false);
                                                                li0.innerHTML = `<a href="javascript:void(0)">${e[i][j].join(' ')}</a>`;
                                                                content[i].appendChild(li0);
                                                            }
                                                        }
                                                    }
                                                });

                                                localStorage.setItem('halo_max', '0'); //天赋点
                                                let haloRequest = GM_xmlhttpRequest({ //获取天赋点
                                                    method: 'POST',
                                                    url: `https://www.guguzhen.com/fyg_read.php`,
                                                    headers: headersPOST,
                                                    data: 'f=5',
                                                    onload: response => {
                                                        let halo = response.responseText.match(/<h3>.*</)[0].slice(4, -1);
                                                        localStorage.setItem('halo_max', halo.match(/[0-9]+/).join());
                                                        halo = `天赋点:${halo.match(/[0-9]+/)[0]},技能位:${role.match(/[0-9]技/)[0].slice(0, 1)}`;
                                                        document.getElementsByClassName('halo_selector')[0].innerHTML = `<div>${halo}</div>
    <a href="javascript:void(0)" class="halo_item">启程之誓 10</a>
    <a href="javascript:void(0)" class="halo_item">启程之心 10</a>
    <a href="javascript:void(0)" class="halo_item">启程之风 10</a>
    <div></div>
    <a href="javascript:void(0)" class="halo_item">破壁之心 30</a>
    <a href="javascript:void(0)" class="halo_item">破魔之心 30</a>
    <a href="javascript:void(0)" class="halo_item">复合护盾 30</a>
    <a href="javascript:void(0)" class="halo_item">鲜血渴望 30</a>
    <a href="javascript:void(0)" class="halo_item">削骨之痛 30</a>
    <div></div>
    <a href="javascript:void(0)" class="halo_item">伤口恶化 50</a>
    <a href="javascript:void(0)" class="halo_item">精神创伤 50</a>
    <a href="javascript:void(0)" class="halo_item">铁甲尖刺 50</a>
    <a href="javascript:void(0)" class="halo_item">忍无可忍 50</a>
    <a href="javascript:void(0)" class="halo_item">热血战魂 50</a>
    <div></div>
    <a href="javascript:void(0)" class="halo_item">沸血之志 100</a>
    <a href="javascript:void(0)" class="halo_item">波澜不惊 100</a>
    <a href="javascript:void(0)" class="halo_item">飓风之力 100</a>
    <a href="javascript:void(0)" class="halo_item">红蓝双刺 100</a>
    <a href="javascript:void(0)" class="halo_item">绝对护盾 100</a>
    <a href="javascript:void(0)" class="halo_item">后发制人 100</a>`;

                                                        function selector_halo() {
                                                            if ($(this).css('background-color') != 'rgb(135, 206, 250)') {
                                                                $(this).css('background-color', 'rgb(135, 206, 250)');
                                                            } else {
                                                                $(this).css('background-color', 'rgb(255, 255, 255)');
                                                            }
                                                        }
                                                        $('.halo_item').each(function(i, e) {
                                                            $(e).on('click', selector_halo);
                                                        });
                                                        document.getElementById('load_tip').innerText = '';
                                                    }
                                                });

                                                unsafeWindow.quit = function() {
                                                    document.getElementById("popup").style.display = "none";
                                                    equRequest.abort();
                                                    haloRequest.abort();
                                                    document.getElementById("popup").innerHTML = initHTML;
                                                };

                                                unsafeWindow.unbind = function() {
                                                    let ud = getUserData();
                                                    if (ud.dataBind[roleId] != null) {
                                                        delete ud.dataBind[roleId];
                                                    }
                                                    setUserData(ud);
                                                };


                                                //绑定
                                                function hidePopup() {
                                                    let equ = new Array();
                                                    let halo = new Array();
                                                    let sum = 0;
                                                    $(".equipment_item").each(function(i, e) {
                                                        if ($(e).attr("style") != null && $(e).css("background-color") != "rgb(255, 255, 255)") {
                                                            equ.push(e.innerText.split(' '));
                                                        }
                                                    });
                                                    $(".halo_item").each(function(i, e) {
                                                        if ($(e).attr("style") != null && $(e).css("background-color") != "rgb(255, 255, 255)") {
                                                            let ee = e.innerText.split(' ');
                                                            sum += parseInt(ee[1]);
                                                            halo.push(ee[0]);
                                                        }
                                                    });
                                                    let h = parseInt(localStorage.getItem('halo_max'));
                                                    if (equ.length == 4 && sum <= h && halo.length <= parseInt(role.match(/[0-9]技/).slice(0, 1))) {
                                                        for (let i = 0; i < 4; i++) {
                                                            let name = equ[i][0];
                                                            console.log(name);
                                                            name = eqToAbbr(name);
                                                            equ[i][0] = name;
                                                            equ[i][1] = equ[i][1].substr(2);
                                                            for (let j = 2; j < 6; j++) {
                                                                equ[i][j] = equ[i][j].slice(0, -1)
                                                            }
                                                        }
                                                        let bind_info = new Array(equ[0], equ[1], equ[2], equ[3], halo);
                                                        let ud = getUserData();
                                                        ud.dataBind[roleId] = bind_info.join('|');
                                                        setUserData(ud);
                                                        console.log(localStorage);

                                                        document.getElementById("popup").innerHTML = initHTML;
                                                        document.getElementById("popup").style.display = "none";
                                                    } else {
                                                        alert('有装备未选或天赋错误');
                                                    }
                                                }
                                                document.getElementById('bind').addEventListener('click', hidePopup, false);
                                                document.getElementById("popup").style.display = "flex";
                                            };

                                            let p = document.getElementsByClassName('panel panel-primary')[1];
                                            if (p.lastChild.id != 'cardpage_pop') {
                                                p.appendChild(div0);
                                            }

                                        } catch (err) { console.log(err); }
                                    }
                                } catch (err) {}
                            }, 1000);

                            var waitForCard = setInterval(() => {
                                timeoutWaitForCard++;
                                //console.log(timeoutWaitForCard);
                                if (timeoutWaitForCard > 100) {
                                    timeoutWaitForCard = 0;
                                    console.log('Timeout WaitForCard');
                                    clearInterval(waitForCard);
                                }
                                if (document.getElementsByClassName('btn btn-primary btn-group dropup').length > 0) {
                                    timeoutWaitForCard = 0;
                                    clearInterval(waitForCard);
                                    console.log('WaitForCard');
                                    let roleCards = document.getElementById('backpacks').children;
                                    let roleKeys = new Array();
                                    if (roleCards[0].className.indexOf('btn') != -1) { //清除已不存在的卡片的绑定信息
                                        for (let i = 0; i < roleCards.length; i++) {
                                            roleKeys.push(roleCards[i].getAttribute('onclick').match(/[0-9]+/)[0]);
                                        }
                                        let udata = getUserData();
                                        console.log(roleKeys);
                                        for (let key in udata.dataBind) {
                                            console.log(key);
                                            if (roleKeys.indexOf(key) == -1) {
                                                delete udata.dataBind[key];
                                            }
                                        }
                                        setUserData(udata);
                                    }
                                    observerCard.observe(document.getElementById('backpacks'), { childList: true });
                                }
                            }, 100);

                            break;
                        case 2:
                            $('.pop_main').hide();
                            btnc1.onclick = () => {
                                try {
                                    d.innerHTML = '<div class="pop_main">\n<div class="pop_con">\n<div class="pop_text">0</div>\n<a href="#">×</a>\n</div>\n<div class="mask"></div>\n</div>';
                                    $('.pop_con a').click(() => {
                                        $('.pop_con').animate({ 'top': 0, 'opacity': 0 }, () => {
                                            $('.pop_main').hide()
                                        })
                                    })
                                    $('.pop_main').show()
                                    $('.pop_con').css({ 'top': 0, 'opacity': 0 })
                                    $('.pop_con').animate({ 'top': '50%', 'opacity': 1 })
                                    let text = $('.pop_text');
                                    let aura = document.getElementsByClassName('btn btn-primary');
                                    let data = new Array();
                                    data.push(aura.length);

                                    for (let i = 0; i < aura.length; i++) {
                                        let t = aura[i].innerText;
                                        //console.log(t);
                                        switch (t[0]) {
                                            case '启':
                                                switch (t[3]) {
                                                    case '誓':
                                                        data.push('SHI');
                                                        break;
                                                    case '心':
                                                        data.push('XIN');
                                                        break;
                                                    case '风':
                                                        data.push('FENG');
                                                        break;
                                                }
                                                break;
                                            case '破':
                                                switch (t[1]) {
                                                    case '壁':
                                                        data.push('BI');
                                                        break;
                                                    case '魔':
                                                        data.push('MO');
                                                        break;
                                                }
                                                break;
                                            case '复':
                                                data.push('DUN');
                                                break;
                                            case '鲜':
                                                data.push('XUE');
                                                break;
                                            case '削':
                                                data.push('XIAO');
                                                break;
                                            case '伤':
                                                data.push('SHANG');
                                                break;
                                            case '精':
                                                data.push('SHEN');
                                                break;
                                            case '铁':
                                                data.push('CI');
                                                break;
                                            case '忍':
                                                data.push('REN');
                                                break;
                                            case '热':
                                                data.push('RE');
                                                break;
                                            case '沸':
                                                data.push('FEI');
                                                break;
                                            case '波':
                                                data.push('BO');
                                                break;
                                            case '飓':
                                                data.push('JU');
                                                break;
                                            case '红':
                                                data.push('HONG');
                                                break;
                                            case '绝':
                                                data.push('JUE');
                                                break;
                                            case '后':
                                                data.push('HOU');
                                                break;
                                        }
                                    }
                                    text[0].innerText = `${data.join(' ')}`;
                                    //$('.pop_main').hide();

                                } catch (err) {
                                    console.log(err);
                                }
                            }
                            break;
                        case 3:
                            $('.pop_main').hide();
                            btnc1.onclick = () => {}
                            break;
                    }
                });
                observer.observe(document.getElementById('backpacks'), { childList: true, characterData: true });
            }
        }, 500);

        let p = document.getElementsByClassName('panel panel-primary')[1];
        p.insertBefore(btnc1, p.children[0]);

        let d = document.createElement('div');
        d.id = 'alert';
        d.innerHTML = '<div class="pop_main">\n<div class="pop_con">\n<div class="pop_text">0</div>\n<a href="#">×</a>\n</div>\n<div class="mask"></div>\n</div>';
        //'<div class="pop_main">\n<div class="pop_con">\n<div class="pop_text">0</div>\n<div class="pop_text">0</div>\n<div class="pop_text">0</div>\n<div class="pop_text">0</div>\n<div class="pop_text">Bag:</div>\n<div class="pop_text">0</div>\n<div class="pop_text">0</div>\n<div class="pop_text">0</div>\n<div class="pop_text">0</div>\n<div class="pop_text">0</div>\n<div class="pop_text">0</div>\n<div class="pop_text">0</div>\n<div class="pop_text">0</div>\n<div class="pop_text">0</div>\n<div class="pop_text">0</div>\n<div class="pop_text">0</div>\n<div class="pop_text">0</div>\n<div class="pop_text">0</div>\n<div class="pop_text">0</div>\n<a href="#">×</a>\n</div>\n<div class="mask"></div>\n</div>';

        p.insertBefore(d, p.children[0]);
        $('.pop_main').hide();
        $('.pop_con a').click(() => {
            $('.pop_con').animate({ 'top': 0, 'opacity': 0 }, () => {
                $('.pop_main').hide()
            })
        })
    } else if (window.location.pathname == '/fyg_beach.php') {
        function insertAfter(newEl, targetEl) {
            var parentEl = targetEl.parentNode;

            if (parentEl.lastChild == targetEl) {
                parentEl.appendChild(newEl);
            } else {
                parentEl.insertBefore(newEl, targetEl.nextSibling);
            }
        }

        let beachCheck = document.createElement('form');
        beachCheck.innerHTML = `<div class="form-group form-check">
    <label class="form-check-label" for="beachcheck">屏蔽垃圾装备</label>
    <input type="checkbox" class="form-check-input" id="beachcheck">
    <label>分析中..</label>
    <button button type="button" onclick="siftSetting()">筛选设置</button>
  </div>`;
        document.getElementsByClassName('panel panel-primary')[2].insertBefore(beachCheck, document.getElementsByClassName('panel panel-primary')[2].children[1]);
        document.querySelector("#beachcheck").addEventListener('click', () => { localStorage.setItem('beachcheck', document.querySelector("#beachcheck").checked) }, false);
        document.querySelector("#beachcheck").checked = (localStorage.getItem('beachcheck') === 'true');

        let divSetting = document.createElement('div');
        divSetting.setAttribute('id', 'siftpage_pop');

        let eqs = new Array(fullName.slice(0, sortdict.BOUND_0), fullName.slice(sortdict.BOUND_0 + 1, sortdict.BOUND_1), fullName.slice(sortdict.BOUND_1 + 1, sortdict.BOUND_2), fullName.slice(sortdict.BOUND_2 + 1));

        for (let i = 0; i < 4; i++) {
            for (let j = 0; j < eqs[i].length; j++) {
                eqs[i][j] = `
                <span class="dropdown dropdown-hover">
  <button class="btn" type="button" id="btn${eqToAbbr(eqs[i][j])}" data-toggle="dropdown">${eqs[i][j]} <span class="caret"></span></button>
  <ul class="dropdown-menu">
    <li><a href="javascript:void(0)" class="attri_item">属性1</a></li>
    <li><a href="javascript:void(0)" class="attri_item">属性2</a></li>
    <li><a href="javascript:void(0)" class="attri_item">属性3</a></li>
    <li><a href="javascript:void(0)" class="attri_item">属性4</a></li>
  </ul>
</span>
                <input type="checkbox" class="form-check-input siftsetting" id="${eqToAbbr(eqs[i][j])}">&nbsp;`;
            }
        }


        let initHTML = `<div class="popup-content">
        <div class="topline">
            <p></p>
            <form><div class="form-group form-check">
    ${eqs[0]}
</div></form>
        </div>
        <div class="topline">
            <p></p>
            <form><div class="form-group form-check">
    ${eqs[1]}
</div></form>
        </div>
        <div class="topline">
            <p></p>
            <form><div class="form-group form-check">
    ${eqs[2]}
</div></form>
        </div>
        <div class="topline">
            <p></p>
            <form><div class="form-group form-check">
    ${eqs[3]}
</div></form>
        </div>
        <p></p>
        <p style="color:red">勾选的装备不会被拾取,有神秘除外</p>
        <p style="color:red">勾选的属性不会被对比,即此条属性大于已有装备也不会被拾取,即忽略无用属性</p>
        <button type="button" onclick="exitSift()">完成</button>
    </div>`;

        divSetting.innerHTML = `<style>
    .popup {
        width: 100vw;
        height: 100vh;
        background-color: rgba(0, 0, 0, .5);
        position: fixed;
        left: 0;
        top: 0;
        bottom: 0;
        right: 0;
        z-index: 9999;
        display: none;
        justify-content: center;
        align-items: center;
    }

    .popup-content {
        width: 400px;
        height: 200px;
        background-color: #fff;
        box-sizing: border-box;
        padding: 10px 30px;
        color: black;
    }

    .topline {
        width: 100%;
        border-bottom: 1px solid black;
    }
</style>

<div class="popup" id="popup">
${initHTML}
</div>`;
        unsafeWindow.siftSetting = function() {
            $('.popup-content').height(Math.min(fullName.length, 19) * 10 + 200);
            $('.popup-content').width(700);
            $('.popup-content').css('overflow', 'scroll');

            function selector_sift() {
                //console.log($(this).text()[0]);
                if ($(this).text()[0] != '✔') {
                    $(this).text('✔' + $(this).text());
                } else {
                    $(this).text($(this).text().slice(1));
                }
            }
            $('.attri_item').each(function(i, e) {
                $(e).on('click', selector_sift);
            });

            $('.attri_item').hover(
                function() {
                    $(this).css({ 'color': '#fff', 'background-color': '#3280fc' });
                },
                function() {
                    $(this).css({ 'color': '#000', 'background-color': '#fff' });
                });

            let eqchecks = document.getElementsByClassName('form-check-input siftsetting');
            let ud = getUserData();
            for (let i = 0; i < eqchecks.length; i++) {
                if (ud.dataBeachSift == null) {
                    ud.dataBeachSift = { "PLATE": "true,false,false,false,false", "LEATHER": "true,false,false,false,false", "CLOTH": "true,false,false,false,false" };
                    setUserData(ud);
                } else {
                    if (ud.dataBeachSift[eqchecks[i].id] != null) {
                        let s = ud.dataBeachSift[eqchecks[i].id].split(',');
                        eqchecks[i].checked = (s[0] === 'true');
                        let attri = eqchecks[i].previousSibling.previousSibling.children[1].children;
                        for(let i=0;i<attri.length;i++){
                            if(s[1+i]=='true'){
                                attri[i].children[0].innerText = '✔'+ attri[i].children[0].innerText;
                            }

                        }
                    }
                }
            }
            document.getElementById("popup").style.display = "flex";
        }

        unsafeWindow.exitSift = function() {
            let eqchecks = document.getElementsByClassName('form-check-input siftsetting');
            let ud = getUserData();
            for (let i = 0; i < eqchecks.length; i++) {
                let checklist = eqchecks[i].previousSibling.previousSibling.children[1].innerText.split('\n')
                let checkres = new Array(eqchecks[i].checked, false, false, false, false);
                for (let i = 0, j = 1; i < checklist.length; i++) {
                    if (checklist[i].replace(/\s+/g, '').length > 0) {
                        if (checklist[i].replace(/\s+/g, '')[0] == '✔') {
                            checkres[j] = true;
                            j++;
                        } else if (checklist[i].replace(/\s+/g, '')[0] == '属') {
                            checkres[j] = false;
                            j++;
                        }
                    }

                }
                ud.dataBeachSift[eqchecks[i].id] = `${checkres}`;
            }
            setUserData(ud);
            document.getElementById("popup").style.display = "none";
            document.getElementById("popup").innerHTML = initHTML;
        }

        let p = document.getElementsByClassName('panel panel-primary')[2];
        if (p.lastChild.id != 'siftpage_pop') {
            p.appendChild(divSetting);
        }

        let equipment = new Array();
        let equipedbtn = null;
        //读取拥有的装备
        GM_xmlhttpRequest({
            method: 'POST',
            url: `https://www.guguzhen.com/fyg_read.php`,
            headers: headersPOST,
            data: 'f=7',
            onload: response => {
                let div0 = document.createElement('div');
                div0.innerHTML = response.responseText;

                //console.log(div0);
                for (let i = div0.children.length - 1; i >= 0; i--) {
                    if (div0.children[i].className.split(' ').length != 3 || div0.children[i].innerText.indexOf('符') != -1) {
                        div0.removeChild(div0.children[i]);
                    }
                }

                equipedbtn = [].slice.call(div0.children);
                let equipbag = getEquipmentInfo(div0.children);
                GM_xmlhttpRequest({
                    method: 'POST',
                    url: `https://www.guguzhen.com/fyg_read.php`,
                    headers: headersPOST,
                    data: 'f=9',
                    onload: response => {
                        document.querySelector(".form-check").children[2].innerText = '';
                        let div0 = document.createElement('div');
                        div0.innerHTML = response.responseText;

                        equipedbtn = equipedbtn.concat([].slice.call(div0.getElementsByClassName('fyg_tc')[3].children));
                        equipedbtn.sort(sortEqByName);

                        let equiped = getEquipmentInfo(div0.getElementsByClassName('fyg_tc')[3].children);
                        equipment = equipbag.concat(equiped);
                        if (equipment.length == 0) {
                            equipment[0] = -1;
                        }
                    }
                });
            }
        });

        //分析装备并显示属性
        function pickEquipment(equipment) {
            if (document.querySelector("#beachcheck").checked) {
                //屏蔽鼠标事件
                $('#beachall .fyg_mp3').css('pointer-events', 'none');
            } else {
                $('#beachall .fyg_mp3').css('pointer-events', 'auto');
            }
            if (equipment[0] == -1) return;
            let btns = document.getElementsByClassName('fyg_mp3');

            let udata = getUserData();
            if (udata.dataBeachSift == null) {
                udata.dataBeachSift = { "PLATE": "true,false,false,false,false", "LEATHER": "true,false,false,false,false", "CLOTH": "true,false,false,false,false" };
                setUserData(udata);
            }

            for (let i = 0; i < btns.length; i++) {
                if (btns[i].parentNode.id == 'beachall' && btns[i].className.indexOf('btn') != -1) {
                    let isFind = false;
                    let isPick = false;
                    let btninfo = getEquipmentInfo(new Array(btns[i]))[0];

                    let sift = udata.dataBeachSift[btninfo[0]].split(',');



                    //应用筛选设置
                    if (udata.dataBeachSift != null && udata.dataBeachSift[btninfo[0]] != null) {
                        if (sift[0] == 'true') {
                            isPick = false;
                        } else {
                            for (let j = 0; j < equipment.length; j++) {
                                if (equipment[j][0] === btninfo[0]) {
                                    isFind = true;
                                    let e1 = new Array(parseInt(equipment[j][1]), parseInt(equipment[j][2]), parseInt(equipment[j][3]), parseInt(equipment[j][4]), parseInt(equipment[j][5]));
                                    let e2 = new Array(parseInt(btninfo[1]), parseInt(btninfo[2]), parseInt(btninfo[3]), parseInt(btninfo[4]), parseInt(btninfo[5]));

                                    function product(e1, e2) {
                                        return e1 * e2;
                                    }

                                    function linear(e1, e2, a, b) {
                                        return (e1 / a + b) * e2;
                                    }
                                    let comp = new Array(false, false, false, false);

                                    switch (btninfo[0]) {
                                        case 'BLADE':
                                            comp[0] = linear(e1[0], e1[1], 5, 20) < linear(e2[0], e2[1], 5, 20);
                                            comp[1] = linear(e1[0], e1[2], 5, 20) < linear(e2[0], e2[2], 5, 20);
                                            comp[2] = linear(e1[0], e1[3], 20, 10) < linear(e2[0], e2[3], 20, 10);
                                            comp[3] = linear(e1[0], e1[4], 20, 10) < linear(e2[0], e2[4], 20, 10);
                                            break;
                                        case 'STAFF':
                                            comp[0] = product(e1[0], e1[1]) < product(e2[0], e2[1]);
                                            comp[1] = product(e1[0], e1[2]) < product(e2[0], e2[2]);
                                            comp[2] = linear(e1[0], e1[3], 20, 5) < linear(e2[0], e2[3], 20, 5);
                                            comp[3] = linear(e1[0], e1[4], 15, 10) < linear(e2[0], e2[4], 15, 10);
                                            break;
                                        case 'WAND':
                                            comp[0] = product(e1[0], e1[1]) < product(e2[0], e2[1]);
                                            comp[1] = product(e1[0], e1[2]) < product(e2[0], e2[2]);
                                            comp[2] = product(e1[0], e1[3]) < product(e2[0], e2[3]);
                                            comp[3] = product(e1[0], e1[4]) < product(e2[0], e2[4]);
                                            break;
                                        case 'SWORD':
                                            comp[0] = product(e1[0], e1[1]) < product(e2[0], e2[1]);
                                            comp[1] = product(e1[0], e1[2]) < product(e2[0], e2[2]);
                                            comp[2] = product(e1[0], e1[3]) < product(e2[0], e2[3]);
                                            comp[3] = linear(e1[0], e1[4], 15, 10) < linear(e2[0], e2[4], 15, 10);
                                            break;
                                        case 'CLAYMORE':
                                            comp[0] = product(e1[0], e1[1]) < product(e2[0], e2[1]);
                                            comp[1] = product(e1[0], e1[2]) < product(e2[0], e2[2]);
                                            comp[2] = linear(e1[0], e1[3], 5, 30) < linear(e2[0], e2[3], 5, 30);
                                            comp[3] = linear(e1[0], e1[4], 20, 1) < linear(e2[0], e2[4], 20, 1);
                                            break;
                                        case 'SHIELD':
                                            comp[0] = linear(e1[0], e1[1], 15, 10) < linear(e2[0], e2[1], 15, 10);
                                            comp[1] = product(e1[0], e1[2]) < product(e2[0], e2[2]);
                                            comp[2] = product(e1[0], e1[3]) < product(e2[0], e2[3]);
                                            comp[3] = product(e1[0], e1[4]) < product(e2[0], e2[4]);
                                            break;
                                        case 'BOW':
                                            comp[0] = product(e1[0], e1[1]) < product(e2[0], e2[1]);
                                            comp[1] = product(e1[0], e1[2]) < product(e2[0], e2[2]);
                                            comp[2] = product(e1[0], e1[3]) < product(e2[0], e2[3]);
                                            comp[3] = linear(e1[0], e1[4], 15, 10) < linear(e2[0], e2[4], 15, 10);
                                            break;
                                        case 'ASSBOW':
                                            comp[0] = linear(e1[0], e1[1], 5, 30) < linear(e2[0], e2[1], 5, 30);
                                            comp[1] = linear(e1[0], e1[2], 20, 10) < linear(e2[0], e2[2], 20, 10);
                                            comp[2] = linear(e1[0], e1[3], 20, 10) < linear(e2[0], e2[3], 20, 10);
                                            comp[3] = product(e1[0], e1[4]) < product(e2[0], e2[4]);
                                            break;
                                        case 'DAGGER':
                                            comp[0] = linear(e1[0], e1[1], 5, 0) < linear(e2[0], e2[1], 5, 0);
                                            comp[1] = linear(e1[0], e1[2], 5, 0) < linear(e2[0], e2[2], 5, 0);
                                            comp[2] = product(e1[0], e1[3]) < product(e2[0], e2[3]);
                                            comp[3] = linear(e1[0], e1[4], 5, 25) < linear(e2[0], e2[4], 5, 25);
                                            break;
                                        case 'GLOVES':
                                            comp[0] = product(e1[0], e1[1]) < product(e2[0], e2[1]);
                                            comp[1] = product(e1[0], e1[2]) < product(e2[0], e2[2]);
                                            comp[2] = product(e1[0], e1[3]) < product(e2[0], e2[3]);
                                            comp[3] = product(e1[0], e1[4]) < product(e2[0], e2[4]);
                                            break;
                                        case 'BRACELET':
                                            comp[0] = linear(e1[0], e1[1], 5, 1) < linear(e2[0], e2[1], 5, 1);
                                            comp[1] = linear(e1[0], e1[2], 20, 1) < linear(e2[0], e2[2], 20, 1);
                                            comp[2] = product(e1[0], e1[3]) < product(e2[0], e2[3]);
                                            comp[3] = product(e1[0], e1[4]) < product(e2[0], e2[4]);
                                            break;
                                        case 'VULTURE':
                                            comp[0] = linear(e1[0], e1[1], 15, 5) < linear(e2[0], e2[1], 15, 5);
                                            comp[1] = linear(e1[0], e1[2], 15, 5) < linear(e2[0], e2[2], 15, 5);
                                            comp[2] = linear(e1[0], e1[3], 15, 5) < linear(e2[0], e2[3], 15, 5);
                                            comp[3] = product(e1[0], e1[4]) < product(e2[0], e2[4]);
                                            break;
                                        case 'CLOAK':
                                            comp[0] = product(e1[0], e1[1]) < product(e2[0], e2[1]);
                                            comp[1] = product(e1[0], e1[2]) < product(e2[0], e2[2]);
                                            comp[2] = linear(e1[0], e1[3], 5, 25) < linear(e2[0], e2[3], 5, 25);
                                            comp[3] = product(e1[0], e1[4]) < product(e2[0], e2[4]);
                                            break;
                                        case 'CLOTH':
                                            isPick = false;
                                            break;
                                        case 'LEATHER':
                                            isPick = false;
                                            break;
                                        case 'PLATE':
                                            isPick = false;
                                            break;
                                        case 'THORN':
                                            comp[0] = linear(e1[0], e1[1], 5, 20) < linear(e2[0], e2[1], 5, 20);
                                            comp[1] = product(e1[0], e1[2]) < product(e2[0], e2[2]);
                                            comp[2] = product(e1[0], e1[3]) < product(e2[0], e2[3]);
                                            comp[3] = linear(e1[0], e1[4], 15, 10) < linear(e2[0], e2[4], 15, 10);
                                            break;
                                        case 'SCARF':
                                            comp[0] = product(e1[0], e1[1]) < product(e2[0], e2[1]);
                                            comp[1] = product(e1[0], e1[2]) < product(e2[0], e2[2]);
                                            comp[2] = product(e1[0], e1[3]) < product(e2[0], e2[3]);
                                            comp[3] = product(e1[0], e1[4]) < product(e2[0], e2[4]);
                                            break;
                                        case 'TIARA':
                                            comp[0] = product(e1[0], e1[1]) < product(e2[0], e2[1]);
                                            comp[1] = linear(e1[0], e1[2], 3, 1) < linear(e2[0], e2[2], 3, 1);
                                            comp[2] = product(e1[0], e1[3]) < product(e2[0], e2[3]);
                                            comp[3] = product(e1[0], e1[4]) < product(e2[0], e2[4]);
                                            break;
                                        case 'RIBBON':
                                            comp[0] = product(e1[0], e1[1]) < product(e2[0], e2[1]);
                                            comp[1] = product(e1[0], e1[2]) < product(e2[0], e2[2]);
                                            comp[2] = product(e1[0], e1[3]) < product(e2[0], e2[3]);
                                            comp[3] = product(e1[0], e1[4]) < product(e2[0], e2[4]);
                                            break;
                                    }

                                    isPick = (
                                        sift[1] == 'false' && comp[0] ||
                                        sift[2] == 'false' && comp[1] ||
                                        sift[3] == 'false' && comp[2] ||
                                        sift[4] == 'false' && comp[3]);

                                    if(isPick){
                                        break;
                                    }
                                }
                            }
                            if (!isFind) {
                                isPick = true;
                            }
                        }
                    }
                    if (btninfo[6] == 1) {
                        //神秘必捡
                        isPick = true;
                    }

                    if (isPick) {
                        let btn0 = document.createElement('button');
                        btn0.setAttribute('class', 'btn btn-light');
                        btn0.setAttribute('onclick', btns[i].getAttribute('onclick'));
                        btn0.setAttribute('data-toggle', 'popover');
                        btn0.setAttribute('data-trigger', 'hover');
                        btn0.setAttribute('data-placement', 'left');
                        btn0.setAttribute('data-html', 'true');
                        let popover = document.createElement('div');
                        popover.innerHTML = `<style>.popover{max-width:350px}</style>`
                        for (let eqbtn of equipedbtn) {
                            if (sortdict[eqToAbbr(btns[i].dataset.originalTitle.split(' ')[2])] == parseInt(eqbtn.getAttribute('data-abbr'))) {
                                let btn1 = document.createElement('button');
                                btn1.setAttribute('class', 'btn btn-light');
                                btn1.style.cssText = 'text-align:left;';
                                btn1.innerHTML = eqbtn.dataset.content;
                                if (btn1.lastChild.nodeType == 3) { //清除背景介绍文本
                                    btn1.lastChild.remove();
                                }
                                if (btn1.lastChild.className.indexOf('bg-danger') != -1) {
                                    btn1.lastChild.style.cssText = 'max-width:250px;white-space:pre-line;word-break:break-all;';
                                }
                                popover.appendChild(btn1);
                            }
                        }
                        btn0.setAttribute('data-content', popover.innerHTML);
                        btn0.innerHTML = `<h3 class="popover-title" style="background-color: ${getComputedStyle(btns[i]).getPropertyValue("background-color")}">${btns[i].dataset.originalTitle}</h3><div class="popover-content">${btns[i].dataset.content}</div>`;
                        insertAfter(btn0, btns[i]);
                    }
}
}
$(function() {
    $('[data-toggle="popover"]').popover();
});
$('.btn-light').css({
    'padding': 0,
    'text-align': 'left',
    'box-shadow': 'none',
    'background-color': 'none'
});
$('.bg-danger').css({
    'max-width': '250px',
    'white-space': 'pre-line',
    'word-break': 'break-all'
});
}

//等待海滩装备加载
let show = setInterval(() => {
    if ($('#beachall .fyg_mp3').toArray().length != 0) {
        clearInterval(show);
        //等待装备读取完成
        let pick = setInterval(() => {
            if (equipment.length > 0) {
                clearInterval(pick);
                pickEquipment(equipment);
            }
        }, 500);
    }
}, 500);

function getBeachBtnNum() {
    let eqbtns = $('#beachall .fyg_mp3').toArray();
    let num = 0;
    for (let i = 0; i < eqbtns.length; i++) {
        if (eqbtns[i].className.indexOf('btn') != -1) {
            num++;
        }
    }
    return num;
}

let btnNum = -1;
let initBtnNum = setInterval(() => {
    if ($('#beachall .fyg_mp3').toArray().length > 0) {
        clearInterval(initBtnNum);
        btnNum = getBeachBtnNum();
        //console.log(`be:${btnNum}`);
    }
}, 2000);

let observerBody0 = new MutationObserver(() => {
    let nowlength = getBeachBtnNum();
    //console.log(`be:${btnNum},${nowlength}`);
    if (btnNum != -1 && btnNum != nowlength) { //海滩装备数量发生改变
        //console.log(`${btnNum},${nowlength}`);
        btnNum = nowlength;
        //等待海滩状态刷新
        let readd = setInterval(() => {
            if ($('#beachall .btn btn-light').toArray().length == 0) {
                clearInterval(readd);
                pickEquipment(equipment);
            }
        }, 1000);
    }
}, 1000);
observerBody0.observe(document.getElementsByClassName('panel panel-primary')[2], { childList: true, subtree: true, });
} else if (window.location.pathname == '/fyg_pk.php') {
    let btngroup0 = document.createElement('div');
    btngroup0.setAttribute('class', 'action_selector');
    btngroup0.innerHTML = `<p></p><div class="btn-group" role="group">
  <button type="button" class="btn btn-secondary">0</button>
  <button type="button" class="btn btn-secondary">10</button>
  <button type="button" class="btn btn-secondary">20</button>
  <button type="button" class="btn btn-secondary">30</button>
  <button type="button" class="btn btn-secondary">40</button>
  <button type="button" class="btn btn-secondary">50</button>
  <button type="button" class="btn btn-secondary">60</button>
  <button type="button" class="btn btn-secondary">70</button>
  <button type="button" class="btn btn-secondary">80</button>
  <button type="button" class="btn btn-secondary">90</button>
  <button type="button" class="btn btn-secondary">100</button>
</div>`;
        let btngroup1 = document.createElement('div');
        btngroup1.setAttribute('class', 'action_selector');
        btngroup1.innerHTML = `<p></p><div class="btn-group" role="group">
  <button type="button" class="btn btn-secondary">0</button>
  <button type="button" class="btn btn-secondary">5</button>
  <button type="button" class="btn btn-secondary">10</button>
  <button type="button" class="btn btn-secondary">15</button>
  <button type="button" class="btn btn-secondary">20</button>
  <button type="button" class="btn btn-secondary">25</button>
  <button type="button" class="btn btn-secondary">30</button>
  <button type="button" class="btn btn-secondary">35</button>
  <button type="button" class="btn btn-secondary">40</button>
  <button type="button" class="btn btn-secondary">45</button>
  <button type="button" class="btn btn-secondary">50</button>
  <button type="button" class="btn btn-secondary">55</button>
  <button type="button" class="btn btn-secondary">60</button>
  <button type="button" class="btn btn-secondary">65</button>
  <button type="button" class="btn btn-secondary">70</button>
  <button type="button" class="btn btn-secondary">75</button>
  <button type="button" class="btn btn-secondary">80</button>
  <button type="button" class="btn btn-secondary">85</button>
  <button type="button" class="btn btn-secondary">90</button>
  <button type="button" class="btn btn-secondary">95</button>
  <button type="button" class="btn btn-secondary">100</button>
</div>`;
        let btngroup2 = document.createElement('div');
        btngroup2.setAttribute('class', 'action_selector');
        btngroup2.innerHTML = `<p></p><div class="btn-group" role="group">
  <button type="button" class="btn btn-secondary">0</button>
  <button type="button" class="btn btn-secondary">5</button>
  <button type="button" class="btn btn-secondary">10</button>
  <button type="button" class="btn btn-secondary">15</button>
  <button type="button" class="btn btn-secondary">20</button>
  <button type="button" class="btn btn-secondary">25</button>
  <button type="button" class="btn btn-secondary">30</button>
  <button type="button" class="btn btn-secondary">35</button>
  <button type="button" class="btn btn-secondary">40</button>
  <button type="button" class="btn btn-secondary">45</button>
  <button type="button" class="btn btn-secondary">50</button>
  <button type="button" class="btn btn-secondary">55</button>
  <button type="button" class="btn btn-secondary">60</button>
  <button type="button" class="btn btn-secondary">65</button>
  <button type="button" class="btn btn-secondary">70</button>
  <button type="button" class="btn btn-secondary">75</button>
  <button type="button" class="btn btn-secondary">80</button>
  <button type="button" class="btn btn-secondary">85</button>
  <button type="button" class="btn btn-secondary">90</button>
  <button type="button" class="btn btn-secondary">95</button>
  <button type="button" class="btn btn-secondary">100</button>
</div>`;

        let observerBody0 = new MutationObserver(() => {
            //observerBody0.disconnect();
            if (document.getElementsByClassName('btn-secondary').length == 0) {
                let addbtn = setInterval(() => {
                    let col = document.querySelector("#pklist > div > div.col-md-8");
                    if (col != null) {
                        clearInterval(addbtn);
                        let obtns = document.getElementsByClassName('btn-block dropdown-toggle fyg_lh30');
                        col.insertBefore(btngroup0, obtns[0]);
                        col.insertBefore(btngroup1, obtns[1]);
                        col.insertBefore(btngroup2, obtns[2]);
                        if (document.getElementsByClassName('btn-outline-secondary').length == 0) {
                            if (localStorage.getItem('dataReward') == null) {
                                localStorage.setItem('dataReward', '{"sumShell":"0","sumExp":"0"}');
                            }

                            let ok = document.createElement('div');
                            ok.innerHTML = `<p></p><button type="button" class="btn btn-outline-secondary">任务执行</button>`;
                            col.appendChild(ok);

                            function gobattle() {
                                let times = new Array(0, 0, 0);
                                let sum = 0;
                                $(".btn-secondary").each(function(i, e) {
                                    if ($(e).attr("style") != null && $(e).css("background-color") == "rgb(135, 206, 250)") {
                                        let a = parseInt(e.innerText);
                                        let b = $(".btn-group .btn-secondary").index(e);
                                        sum += a;
                                        if (b < 11) {
                                            times[0] = a / 10;
                                        } else if (b >= 11 && b < 32) {
                                            times[1] = a / 5;
                                        } else if (b >= 32) {
                                            times[2] = a / 5;
                                        }
                                    }
                                });

                                if (sum <= parseInt(document.getElementsByClassName('fyg_colpz03')[0].innerText)) {
                                    let gox_data = getPostData(/gox\(\)\{[\s\S]*\}/m, /data: ".*"/).slice(7, -1);

                                    //let gox_data = document.getElementsByTagName('script')[2].innerText.match(/gox\(\)\{[\s\S]*\}/)[0].match(/data:\s*".*"/)[0].slice(7,-1);

                                    let dataReward = JSON.parse(localStorage.getItem('dataReward'));
                                    let sum0 = parseInt(dataReward.sumShell);
                                    let sum1 = parseInt(dataReward.sumExp);

                                    function func0(time) {
                                        if (time == 0) {
                                            if (times[0] != 0) {
                                                GM_xmlhttpRequest({
                                                    method: 'POST',
                                                    url: `https://www.guguzhen.com/fyg_read.php`,
                                                    headers: headersPOST,
                                                    data: 'f=12',
                                                    onload: response => {
                                                        let ap = response.responseText.match(/class="fyg_colpz03" style="font-size:32px;font-weight:900;">[0-9]+</)[0].match(/>[0-9]+</)[0].slice(1, -1);
                                                        document.getElementsByClassName('fyg_colpz03')[0].innerText = ap;
                                                        let rankp = response.responseText.match(/class="fyg_colpz02" style="font-size:32px;font-weight:900;">[0-9]+%</)[0].match(/[0-9]+%/)[0];
                                                        document.getElementsByClassName('fyg_colpz02')[0].innerText = rankp;
                                                        let div_sum = document.createElement('div');
                                                        div_sum.innerText = `贝壳总次数:经验总次数=${sum0}:${sum1}=${(sum0 == 0 || sum1 == 0) ? 'undefined' : (sum0 / sum1).toFixed(4)}`;
                                                        dataReward.sumShell = sum0;
                                                        dataReward.sumExp = sum1;
                                                        localStorage.setItem('dataReward', JSON.stringify(dataReward));
                                                        document.getElementsByClassName('btn-outline-secondary')[0].parentNode.appendChild(div_sum);
                                                        times[0] = 0;
                                                    }
                                                });
                                            }
                                            return;
                                        }
                                        GM_xmlhttpRequest({
                                            method: 'POST',
                                            url: `https://www.guguzhen.com/fyg_click.php`,
                                            headers: headersPOST,
                                            data: gox_data,
                                            onload: response => {
                                                if (response.responseText.slice(0, 2) == '获得') {
                                                    let info = response.responseText.slice(0, response.responseText.indexOf('<'));
                                                    let div_info = document.createElement('div');
                                                    div_info.innerText = info;
                                                    document.getElementsByClassName('btn-outline-secondary')[0].parentNode.appendChild(div_info);
                                                    if (info.indexOf('贝壳') != -1) {
                                                        sum0 += 1;
                                                    } else if (info.indexOf('经验') != -1) {
                                                        sum1 += 1;
                                                    }
                                                    func0(time - 1);
                                                } else {
                                                    let div_info = document.createElement('div');
                                                    div_info.innerText = '段位进度不足';
                                                    document.getElementsByClassName('btn-outline-secondary')[0].parentNode.appendChild(div_info);
                                                    func0(0);
                                                }
                                            }
                                        });
                                    }

                                    function func1(time) {
                                        if (time == 0) {
                                            times[1] = 0;
                                            return;
                                        }
                                        let observerPk = new MutationObserver((mutationsList, observer) => {
                                            let isPk = 0;
                                            for (let mutation of mutationsList) {
                                                if (mutation.type == 'childList') {
                                                    isPk = 1;
                                                    //console.log(targetNode.firstChild);
                                                }
                                            }
                                            if (isPk) {
                                                observerPk.disconnect();
                                                func1(time - 1);
                                            }
                                        });
                                        observerPk.observe(document.querySelector("#pk_text"), { characterData: true, childList: true });
                                        jgjg(1);
                                    }

                                    function func2(time) {
                                        if (time == 0) {
                                            times[2] = 0;
                                            return;
                                        }
                                        let observerPk = new MutationObserver((mutationsList, observer) => {
                                            let isPk = 0;
                                            for (let mutation of mutationsList) {
                                                if (mutation.type == 'childList') {
                                                    isPk = 1;
                                                    //console.log(targetNode.firstChild);
                                                }
                                            }
                                            if (isPk) {
                                                observerPk.disconnect();
                                                func2(time - 1);
                                            }
                                        });
                                        observerPk.observe(document.querySelector("#pk_text"), { characterData: true, childList: true });
                                        jgjg(2);
                                    }
                                    func0(times[0]);
                                    let waitFor0 = setInterval(() => {
                                        if (times[0] == 0) {
                                            clearInterval(waitFor0);
                                            func1(times[1]);
                                        }
                                    }, 1000);
                                    let waitFor1 = setInterval(() => {
                                        if (times[0] == 0 && times[1] == 0) {
                                            clearInterval(waitFor1);
                                            func2(times[2]);
                                        }
                                    }, 1000);
                                } else {
                                    alert('体力不足');
                                }
                            }
                            document.getElementsByClassName('btn-outline-secondary')[0].addEventListener('click', gobattle, false);
                        }

                        function selector_act() {
                            var btnNum = $(".btn-group .btn-secondary").index(this);
                            $(".btn-group .btn-secondary")
                                .eq(btnNum)
                                .css("background-color", "rgb(135, 206, 250)")
                                .siblings(".btn-group .btn-secondary")
                                .css("background-color", "rgb(255, 255, 255)");
                        }
                        let btnselector = document.getElementsByClassName('btn-secondary');
                        for (let i = 0; i < btnselector.length; i++) {
                            btnselector[i].addEventListener('click', selector_act, false);
                        }
                    }
                }, 1000);
            }
        });
        observerBody0.observe(document.getElementsByClassName('panel panel-primary')[0], { childList: true, subtree: true, });

        let keepCheck = document.createElement('form');
        keepCheck.innerHTML = `<div class="form-group form-check">
    <label class="form-check-label" for="keepcheck">暂时保持记录</label>
    <input type="checkbox" class="form-check-input" id="keepcheck">
  </div>`;
        document.getElementsByClassName('panel panel-primary')[1].insertBefore(keepCheck, document.getElementById('pk_text'));
        document.querySelector("#keepcheck").addEventListener('click', () => { localStorage.setItem('keepcheck', document.querySelector("#keepcheck").checked) }, false);
        document.querySelector("#keepcheck").checked = (localStorage.getItem('keepcheck') === 'true');

        let div0_pk_text_more = document.createElement('div');
        div0_pk_text_more.setAttribute('id', 'pk_text_more');
        div0_pk_text_more.setAttribute('class', 'panel-body');
        document.getElementsByClassName('panel panel-primary')[1].appendChild(div0_pk_text_more);
        let pkText = document.querySelector("#pk_text").innerHTML;
        let observerBody1 = new MutationObserver(() => {
            if (document.querySelector("#keepcheck").checked == true) {
                document.querySelector("#pk_text_more").innerHTML = pkText + document.querySelector("#pk_text_more").innerHTML;
                pkText = document.querySelector("#pk_text").innerHTML;
            }
        });
        observerBody1.observe(document.querySelector("#pk_text"), { characterData: true, childList: true });

        let btn1 = document.createElement('button');
        let btn2 = document.createElement('button');
        let span0 = document.createElement('span');
        span0.innerHTML = '  提交中...';
        span0.className = 'tip';
        //btn1.innerHTML = '正在读取卡片...';
        btn1.innerHTML = '提交数据';
        btn1.onmousedown = () => {
            if (btn1.innerText[0] == '提') {
                $('.tip').show();
            }
        };
        btn1.onclick = () => {
            if (btn1.innerText[0] == '提') {
                try {
                    alert('数据采集已关闭');
                    $('.tip').hide();
                    localStorage.clear();
                    //                     let npc = document.getElementById('pklist').children;
                    //                     for(let i = 2;i<12;i++){
                    //                         //console.log(npc[o].innerText[0]);
                    //                         if(npc[i].innerText[0]!='已'){
                    //                             localStorage.setItem('over', 0); //未与全部npc战斗
                    //                             alert('未与全部npc战斗,请与全部npc完成战斗后提交')
                    //                             break;
                    //                         }
                    //                         else{
                    //                             localStorage.setItem('over', 1);
                    //                         }
                    //                     }
                    //                     if(submitData()){
                    //                         alert('数据已提交,第一次使用记得把用户名站内发给thewzmath');
                    //                         $('.tip').hide();
                    //                     }
                    //                     else{
                    //                         if(localStorage.length<=4&&localStorage.getItem('over')=='1'){
                    //                             alert('无数据');
                    //                         }
                    //                         $('.tip').hide();
                    //                     }
                } catch (err) {
                    console.log(err);
                    alert('数据提交失败,请重试');
                    $('.tip').hide();
                }
            }
        };
        btn2.innerText = '清空数据';
        btn2.onclick = () => {
            if (confirm('确定要清空数据吗?\n*确定后会刷新页面')) {
                localStorage.clear();
                window.location.reload();
            }
        }

        let p = document.getElementsByClassName('panel panel-primary')[0];
        p.insertBefore(span0, p.children[0]);
        p.insertBefore(btn1, p.children[0]);
        p.insertBefore(btn2, p.children[0]);
        $('.tip').hide();
    }
})();

QingJ © 2025

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