积分记录

记录积分变化

目前為 2023-05-05 提交的版本,檢視 最新版本

// ==UserScript==
// @name         积分记录
// @namespace    http://tampermonkey.net/
// @version      0.2.4.1
// @description  记录积分变化
// @author       You
// @match        https://www.gamemale.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=gamemale.com
// @require      https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js
// @grant        GM_setValue
// @grant        GM_getValue
// ==/UserScript==
this.$ = this.jQuery = jQuery.noConflict(true);

(function () {
    'use strict';
    //进入帖子时更新
    let counted = false;
    var button = document.querySelector("#fastpostsubmit")
    // if (window.location.href.slice(25, 31) == "thread") {
    if (button != null && button != undefined) {
        // console.log("脚本已生效");
        checkCredits()
        showReply()
        showCredits()
        button.addEventListener("click", function () {
            setTimeout(() => {
                replycount(counted)
                updateShow()
                counted = true
            }, 3000);
        });
    }
})();
//已回贴
function replycount(counted) {
    let reply = JSON.parse(localStorage.getItem("reply"))
    if (checkReply() == true && counted == false) {
        reply.count++;
        localStorage.setItem("reply", JSON.stringify(reply));
    }
}

//未回帖
//已回贴

//未回帖
function checkReply() {
    let len = document.querySelector("#postlistreply").childNodes.length;
    if (len == 1) {
        return false;
    } else {
        return true;
    }
}

function showReply() {
    let reply = JSON.parse(localStorage.getItem("reply"))
    let today = new Date().toLocaleDateString()
    if (reply == null || reply == undefined || reply.date != today) {
        reply = {
            "date": today,
            "count": 0
        }
        console.log("reply init");
    }
    localStorage.setItem("reply", JSON.stringify(reply));

    if (document.getElementsByClassName("showReply")[0] != null || document.getElementsByClassName("showReply")[0] != undefined) {
        document.getElementsByClassName("showReply")[0].remove()
    }

    let e = document.querySelector(`#fastpostform > table > tbody > tr > td.plc`)


    if(e!=null&&e!=undefined){
        let div = document.createElement("div")
        div.setAttribute('class', 'showReply')
        div.innerHTML = "【累计回帖】:" + reply.count
        e.appendChild(div)



    }

}

function updateShow() {
    document.getElementsByClassName("showCredits")[0].remove()
    document.getElementsByClassName("showCredits")[0].remove()
    document.getElementsByClassName("showReply")[0].remove()
    document.getElementsByClassName("resetbutton")[0].remove()
    
    checkCredits()
    showReply()
    showCredits()

}
function showCredits() {
    let change = JSON.parse(localStorage.getItem("change"))
    let sum = JSON.parse(localStorage.getItem("sum"))
    delete change.日期
    delete sum.日期

    let e = document.querySelector(`#fastpostform > table > tbody > tr > td.plc`)
    if (e != null && e != undefined) {
        let div1 = document.createElement("div")
        div1.innerHTML = "【积分变动】:" + getHtmlText(change)
        div1.setAttribute('class', 'showCredits')
        e.appendChild(div1)
        let div2 = document.createElement("div")
        div2.innerHTML = "【当日累积】:" + getHtmlText(sum)
        div2.setAttribute('class', 'showCredits')
        e.appendChild(div2)

        let a1 = document.createElement("a")
        a1.innerHTML = "【记录重置】"
        a1.setAttribute('class', 'resetbutton')
        a1.style.cursor="pointer"
        a1.addEventListener("click", function () {
            localStorage.removeItem("latest")
            localStorage.removeItem("change")
            localStorage.removeItem("sum")
            localStorage.removeItem("reply")
            updateShow()
        });
        e.appendChild(a1)

    }

}

function getHtmlText(credit){
    return `<a class="bbda mbn pbn"><a style="margin:2px"><img style="vertical-align:middle" src="https://img.gamemale.com/album/201404/12/023041d2ow7j3gifb55ifo.jpg" /> 旅程: <span id="hcredit_1">${credit["旅程"]}</span></a><a style="margin:2px"><img style="vertical-align:middle" src="https://img.gamemale.com/album/201404/12/023039r465s6wuz65a5sx4.jpg" /> 金币: <span id="hcredit_2">${credit["金币"]}</span></a><a style="margin:2px"><img style="vertical-align:middle" src="https://img.gamemale.com/album/201404/12/023033uxlbvypbeqlzjyy5.jpg" /> 血液: <span id="hcredit_3">${credit["血液"]}</span></a><a style="margin:2px"><img style="vertical-align:middle" src="https://img.gamemale.com/album/201404/12/023043vji23ad4jinid9jn.jpg" /> 追随: <span id="hcredit_4">${credit["追随"]}</span></a><a style="margin:2px"><img style="vertical-align:middle" src="https://img.gamemale.com/album/201404/12/023035iqtc01s1kmcth4rn.jpg" /> 咒术: <span id="hcredit_5">${credit["咒术"]}</span></a><a style="margin:2px"><img style="vertical-align:middle" src="https://img.gamemale.com/album/201404/12/023037obuzvrurwdtlcsnr.jpg" /> 知识: <span id="hcredit_6">${credit["知识"]}</span></a><a style="margin:2px"><img style="vertical-align:middle" src="https://img.gamemale.com/album/201404/12/023047w6n62fn6mm4k3mpk.jpg" /> 灵魂: <span id="hcredit_7">${credit["灵魂"]}</span></a><a style="margin:2px"><img style="vertical-align:middle" src="https://img.gamemale.com/album/201404/12/023045jmv454mfvzo2fmpm.jpg" /> 堕落: <span id="hcredit_8">${credit["堕落"]}</span></a></a>`
}


//上一次积分变动:change-{}
function checkCredits() {
    let old = JSON.parse(localStorage.getItem("latest"))
    let today = new Date().toLocaleDateString()
    if (old == null || old == undefined || old["日期"] != today) {
        console.log("初始化积分信息");
        creditsDataInit();
    } else {
        let latest = getRecord()
        //遍历对象属性
        let change = shallowEqual(old, latest)
        if (change == true) {
            console.log("积分未发生变动");
            //清空change?
        } else {
            localStorage.setItem("change", JSON.stringify(change))
            let sum = sumCredits()//需要用到change
            localStorage.setItem("sum", JSON.stringify(sum))
            console.log("积分存在变动,change:", change, "累积变动:", sum);

            localStorage.setItem("latest", JSON.stringify(latest))
            console.log("更新当前积分:", latest);
        }
    }

}
function creditsDataInit() {
    let latest = getRecord()
    localStorage.setItem("latest", JSON.stringify(latest))
    let change = latest
    let keys = Object.keys(change);
    for (let index = 0; index < keys.length; index++) {
        if (keys[index] != "日期") {
            change[keys[index]] = 0
        }
    }
    localStorage.setItem("change", JSON.stringify(change))
    localStorage.setItem("sum", JSON.stringify(change))
}

//累积积分变动
function sumCredits() {
    let sum = JSON.parse(localStorage.getItem("sum"));
    let change = JSON.parse(localStorage.getItem("change"));
    let keys = Object.keys(change);
    //sum的日期(sum["日期"])与今天不同时,初始化
    let dateStr = new Date().toLocaleDateString()
    if (sum["日期"] != dateStr) {
        sum = getRecord()
        for (let index = 0; index < keys.length; index++) {
            if (keys[index] != "日期") {
                sum[keys[index]] = 0
            }
        }
        console.log("变化累积不是当日的,初始化:", sum);
    }
    //change累加到sum
    for (let index = 0; index < keys.length; index++) {
        if (keys[index] != "日期") {
            sum[keys[index]] = sum[keys[index]] + change[keys[index]]
        }
    }
    console.log("sum:", sum);
    return sum;
}

function shallowEqual(old, latest) {
    let equal = true;
    const keys1 = Object.keys(old);
    const keys2 = Object.keys(latest);
    if (keys1.length !== keys2.length) {
        equal = false;
    } else {
        for (let index = 0; index < keys1.length; index++) {
            const val1 = old[keys1[index]];
            const val2 = latest[keys2[index]];
            if (val1 !== val2) {
                equal = false;
                break;
            }
        }
    }
    if (equal == true) {
        return true;
    } else {
        let result = old
        for (let index = 0; index < keys1.length; index++) {
            if (keys1[index] != "日期") {
                result[keys1[index]] = latest[keys2[index]] - old[keys1[index]]
            } else {
                result[keys1[index]] = latest[keys2[index]]
            }
        }
        return result;
    }
}

//【同步】网络请求并本地存储
function getRecord() {
    let result = null;
    let re = /\d+/g//g:查询多次,而不是查询第一个符合
    $.ajax({
        type: "get",
        url: "https://www.gamemale.com/home.php?mod=spacecp&ac=credit&showcredit=1&inajax=1&ajaxtarget=extcreditmenu_menu",
        cache: false,
        async: false,//同步请求
        dataType: "text",
        success: function (data) {   // data是形参名,代表返回的数据
            var dom = document.createElement('div');
            dom.innerHTML = data;
            let lis = dom.firstElementChild.firstElementChild.children;
            let credits = {};
            let dateString = new Date().toLocaleDateString()// =>2023/5/4.
            credits["日期"] = dateString;
            for (let i = 0; i < lis.length; i++) {
                let credit = Number(lis[i].children[1].innerHTML.match(re)[0])
                switch (i) {
                    case 0:
                        credits["旅程"] = credit
                        break;
                    case 1:
                        credits["金币"] = credit
                        break;
                    case 2:
                        credits["血液"] = credit
                        break;
                    case 3:
                        credits["追随"] = credit
                        break;
                    case 4:
                        credits["咒术"] = credit
                        break;
                    case 5:
                        credits["知识"] = credit
                        break;
                    case 6:
                        credits["灵魂"] = credit
                        break;
                    case 7:
                        credits["堕落"] = credit
                        break;
                    default:
                        break;
                }
            }
            result = credits;
            // window.localStorage.setItem("record", data)
        },
        error: function (error) {
            console.log(error);
            result = error
        }
    });
    return result;
}

QingJ © 2025

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