您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
shows pp data from osustats.ppy.sh on osu score pages.
当前为
- // ==UserScript==
- // @name pp for osu score pages
- // @namespace http://osustats.ppy.sh
- // @description shows pp data from osustats.ppy.sh on osu score pages.
- // @include http*://osu.ppy.sh/b/*
- // @include http*://osu.ppy.sh/s/*
- // @include http*://osu.ppy.sh/p/beatmap?b=*
- // @include http*://osu.ppy.sh/p/beatmap?s=*
- // @grant GM_setValue
- // @grant GM_getValue
- // @grant GM_xmlhttpRequest
- // @version 3
- // ==/UserScript==
- var result=null;
- var mapID=null;
- var mapMode=null;
- var scoresMissing=false;
- var time = 10;
- var interval;
- var requestedUpdate=false;
- function Start()
- {
- scoresMissing=false;
- if(mapID!=null && mapMode!=null)
- {
- GetScores(mapID,mapMode,function(res){
- result = JSON.parse(res);
- UpdateOsuScoresTable();
- if(scoresMissing && !requestedUpdate)
- {
- RequestBeatmapUpdate(mapID,mapMode,function(accepted){
- if(accepted)
- {
- interval = setInterval(Countdown, 1000);
- }
- });
- }
- else
- if(requestedUpdate)
- {
- SetInfoText("Updated successfully");
- }
- });
- }
- }
- function Init()
- {
- var mapTab = document.getElementsByClassName("beatmapTab active");
- if(mapTab.length==1)
- {
- mapID = mapTab[0].href.split("/")[4];
- mapID = mapID.split("&")[0];
- mapMode = document.getElementsByClassName("active");
- mapMode = mapMode[mapMode.length-1].href.split("&m=")[1];
- }
- }
- function UpdateOsuScoresTable()
- {
- var rows,username,score,row,pp;
- rows = document.evaluate('//div[@class=\'beatmapListing\']/table/tbody/tr',
- document,
- null,
- XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
- null);
- rows.snapshotItem(0).children[5].innerHTML="Combo / pp";
- for (var i=1;i<rows.snapshotLength;i++) {
- row = rows.snapshotItem(i);
- username = row.children[4].children[1].innerHTML;
- score = row.children[2].innerHTML.replace(/,/g,'').replace(/<b>/g,'').replace(/<\/b>/g,'');
- pp = GetPpFromUsername(username,score);
- console.log(requestedUpdate);
- if(requestedUpdate)
- {
- row.children[5].innerHTML = row.children[5].innerHTML.substring(0, row.children[5].innerHTML.indexOf('/'));
- }
- row.children[5].innerHTML += pp;
- }
- }
- function GetPpFromUsername(username,score)
- {
- for (var i=0;i<result.length;i++) {
- if(username == result[i].name)
- {
- if(score == result[i].score)
- {
- return " / "+(Math.round(result[i].pp * 100) / 100)+"pp";
- }
- scoresMissing=true;
- return " / N/U";
- }
- }
- scoresMissing=true;
- return " / N/D";
- }
- function GetScores(mapID,mapMode,callback)
- {
- GetPage("http://osustats.ppy.sh/api/beatmap/getScores/"+ mapID + "/"+ mapMode,function(res){
- callback(res);
- });
- }
- function RequestBeatmapUpdate(mapID,mapMode,callback)
- {
- GetPage("http://osustats.ppy.sh/api/beatmap/updateRequest/"+ mapID + "/"+ mapMode,function(res){
- requestedUpdate=true;
- res = JSON.parse(res);
- console.log(res.status);
- if(res.status=="OK"){
- callback(true);
- }
- else{
- callback(false);
- SetInfoText("Request failed- try again later.");
- }
- });
- }
- function GetPage(url,callback)
- {
- GM_xmlhttpRequest({
- method: "GET",
- url: url,
- synchronous: true,
- headers: {
- Referer: location.href
- },
- onload: function(resp) {
- callback(resp.responseText);
- }
- });
- }
- function Countdown()
- {
- time--;
- SetInfoText("Missing scores detected- Update requested</br>Updating in "+time+" seconds");
- console.log(time);
- if(time == 0){
- clearInterval(interval);
- SetInfoText("Updating...");
- Start();
- }
- }
- function SetInfoText(text)
- {
- rows = document.evaluate('//div[@class=\'content-with-bg\']/h2',
- document,
- null,
- XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
- null);
- row = rows.snapshotItem(0)
- row.previousElementSibling.innerHTML = "<h1 style=\"font: 30px; text-align: center;\">"+text+"</h1>";
- }
- window.addEventListener('load', function() {
- Init();
- Start();
- }, false);