您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
300英雄战绩网站优化
当前为
// ==UserScript== // @name 300战绩查询 // @namespace http://tampermonkey.net/ // @version 0.1 // @description 300英雄战绩网站优化 // @author You // @match https://300report.jumpw.com/* // @grant GM_setValue // @grant GM_getValue // ==/UserScript== ;(async () => { const baseAvatarUrl = 'https://300report.jumpw.com/list.html?name=' const baseMatchUrl = 'https://300report.jumpw.com/match.html' const baseImgUrl = `https://300report.jumpw.com/static/images/` const api_matchUrl = 'https://300report.jumpw.com/api/getmatch?id=' const GenMatchTemplate = ({ avatarUrl, avatarName, side, destory, kd, kill, money, score, skill, equips, isWin, scoreStatus, }) => ` <td> <img src="${avatarUrl}" alt="" height="48" width="48"> </td> <td> ${avatarName}<br> 上把<span style="color: ${side ? '#fff' : '#db000e'};">${ side ? '队友' : '对面' }</span> </td> <td> ${kd} </td> <td> ${isWin ? '胜利' : '失败'} </td> <td> ${destory} </td> <td> ${kill} </td> <td> ${money} </td> <td> ${score} </td> <td> ${skill.reduce( (all, sk) => all + `<img src="${sk}" alt="" height="32" width="32">`, '' )} </td> <td> ${equips.reduce( (all, eq) => all + `<img src="${eq}" alt="" height="32" width="32">`, '' )} </td> <td style="color: ${ (scoreStatus === '牛逼' && '#29c124') || (scoreStatus === '拉跨' && '#db000e') || '#fff' };"> ${scoreStatus} </td> ` let $$ = (query) => [...document.querySelectorAll(query)] let isUrl = (baseUrl) => location.href.indexOf(baseUrl) === 0 const req = (...args) => new Promise((resolve) => fetch(...args) .then((res) => res.json()) .then((res) => { resolve(res) }) ) // let $ = document.querySelectorAll /**@type {{ mid:string,isWin:boolean}[]} */ let midList = GM_getValue('midList') || [] if (midList) { midList = JSON.parse(midList) } if (isUrl(baseMatchUrl)) { let mid = new URLSearchParams(location.search).get('id') let aElList = $$('td a') let nowMatchIndex = midList.findIndex((m) => m.mid === mid) let nowMatch = midList[nowMatchIndex] let preMatch = midList[nowMatchIndex + 1] let preMatchData, preMatchDataMap = {} // 生成数据map if (preMatch) { preMatchData = await req(api_matchUrl + preMatch.mid) let wmax = 0, wmin = 0, wmaxData, wminData preMatchData.Match.WinSide.forEach((roleData) => { roleData.isWin = true preMatchDataMap[roleData.RoleName] = roleData let score = roleData.KDA if (score > wmax) { wmax = score wmaxData = roleData } if (score < wmin) { wmin = score wminData = roleData } }) wmaxData && (wmaxData.scoreStatus = '牛逼') wminData && (wminData.scoreStatus = '拉跨') let lmax = 0, lmin = 0, lmaxData, lminData preMatchData.Match.LoseSide.forEach((roleData) => { roleData.isWin = false preMatchDataMap[roleData.RoleName] = roleData let score = roleData.KDA if (score > lmax) { lmax = score lmaxData = roleData } if (score < lmin) { lmin = score lminData = roleData } }) lmaxData && (lmaxData.scoreStatus = '牛逼') lminData && (lminData.scoreStatus = '拉跨') } let avatarList = aElList.map((el) => { let url = decodeURI(el.href) let name = url.replace(baseAvatarUrl, '') let match = new RegExp(`${name[0]}.*${name[name.length - 1]}`) el.innerHTML = el.innerHTML.replace(match, name) // 上一把数据 if (preMatchData && preMatchDataMap[name]) { let roleData = preMatchDataMap[name] let toAddEl = document.createElement('tr') toAddEl.style = 'border:1px solid #0072ff;' let innerHTML = GenMatchTemplate({ avatarName: roleData.Hero.Name, avatarUrl: baseImgUrl + roleData.Hero.IconFile, destory: roleData.TowerDestroy, kill: roleData.KillUnitCount, equips: roleData.Equip.map((eq) => baseImgUrl + eq.IconFile), kd: `${roleData.KillCount}/${roleData.DeathCount}/${roleData.AssistCount}`, money: roleData.TotalMoney, score: roleData.KDA, side: preMatch.isWin === roleData.isWin, skill: roleData.Skill.map((eq) => baseImgUrl + eq.IconFile), isWin: roleData.isWin, scoreStatus: roleData.scoreStatus || '普通', }) toAddEl.innerHTML = innerHTML el.parentElement.parentElement.insertAdjacentElement( 'afterend', toAddEl ) } return { name, } }) } if (isUrl(baseAvatarUrl)) { let list = $$('table:last-of-type tr[onclick]') let midList = list.map((el) => { let onclickScript = el.getAttribute('onclick') let reg = /match\.html\?id=(.*?)'/ let mid = onclickScript.match(reg)[1], isWin = el.children[2].textContent === '胜利' return { mid, isWin, } }) GM_setValue('midList', JSON.stringify(midList)) } })()