您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
记录积分变化
当前为
// ==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或关注我们的公众号极客氢云获取最新地址