Osu Match

show BP difference

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Osu Match
// @namespace    https://osu.ppy.sh/u/4647122
// @version      1.0.2
// @description  show BP difference
// @author       superboy724
// @match        https://osu.ppy.sh/u/*
// @grant        none
// ==/UserScript==
// JavaScript source code
//dim struct
var matchusername = "";
var myid = "";
var score = {
    score: 0,
    beatmap_id: 0,
    mods: 0,
    acc: 0.0,
    pp: 0.0,
    combo: 0,
    miss:0,
    Create: function (json) {
        var score = {};
        score.beatmap_id = json["beatmap_id"];
        score.score = json["score"];
        score.mods = json["enabled_mods"];
        score.acc = (json["count300"] * 6 + json["count100"] * 2 + json["count50"]) / (6 * (json["count300"] + json["count100"] + json["count50"] + json["countmiss"]));
        score.pp = json["pp"];
        score.combo = json["maxcombo"];
        score.miss = json["countmiss"];
        return score;
    },
    CreateWithID: function (json, beatmap_id) {
        var score = {};
        score.beatmap_id = beatmap_id;
        score.score = json["score"];
        score.mods = json["enabled_mods"];
        score.acc = (json["count300"] * 6 + json["count100"] * 2 + json["count50"]) / (6 * (json["count300"] + json["count100"] + json["count50"] + json["countmiss"]));
        score.pp = json["pp"];
        score.miss = json["countmiss"];
        score.combo = json["maxcombo"];
        return score;
    },
    DefaultCreate: function () {
        var score = {};
        return score;
    },
    Find: function (scores, beatmapid) {
        for (var i = 0; i <= scores.length - 1; i++) {
            if (scores[i].beatmap_id == beatmapid) {
                return scores[i];
            }
        }
    }
};

var scoreex = {
    Create: function () {
        var scoreex = score.DefaultCreate();
        scoreex.isEqualMod = true;
        return scoreex;
    }
};

function GetScore(username, count) {
    var scores = new Array();
    $.getJSON("../../api/get_user_best?k=2ed21141cd5e897d0e43ca0ae010870205467aaa&u=" + username + "&limit=" + count.toString(), function (data) {

        $.each(data, function (index, content) {
            scores.push(score.Create(content));
        });

    });
    return scores;
}

function GetBeatmapScore(username, beatmapid) {
    var _score = undefined;
    $.getJSON("../../api/get_scores?k=2ed21141cd5e897d0e43ca0ae010870205467aaa&u=" + username + "&b=" + beatmapid.toString(), function (data) {
        if (data[0] == undefined) {
            return;
        } else {
            _score = score.CreateWithID(data[0], beatmapid);
        }
    });
    return _score;
}

function ProcessData(userdatas, matchdatas) {
    $.each(userdatas, function (index, content) {
        var s = CalcData(content, matchdatas);
        if (s == undefined) {
            return true;
        }
        SetData(s);
    });
}

function ProcessDataNew(username, matchdatas) {
    $.each(matchdatas, function (index, content) {
        var userscore = GetBeatmapScore(username, content.beatmap_id);
        if (userscore == undefined) {
            return true;
        }
        var s = CalcData(userscore, matchdatas);
        if (s == undefined) {
            return true;
        }
        SetData(s);
    });
}

function CalcData(userscore, matchdatas) {
    var _scoreex = scoreex.Create();
    var matchscore = score.Find(matchdatas, userscore.beatmap_id);
    if (matchscore == undefined) {
        return;
    }
    _scoreex.score = userscore.score - matchscore.score;
    _scoreex.acc = userscore.acc - matchscore.acc;
    _scoreex.pp = userscore.pp - matchscore.pp;
    _scoreex.combo = userscore.combo - matchscore.combo;
    _scoreex.beatmap_id = userscore.beatmap_id;
    _scoreex.miss = userscore.miss - matchscore.miss;
    if (matchscore.mods == userscore.mods || (matchscore.mods == 64 && userscore.mods == 512) || (matchscore.mods == 512 && userscore.mods == 64)) {
        _scoreex.isEqualMod = true;
    } else {
        _scoreex.isEqualMod = false;
    }
    return _scoreex;
}

function SetData(_scoreex) {
    //print acc
    var scorediv = $("#performance-" + _scoreex.beatmap_id.toString());
    //if (scorediv == undefined) {
    //    return;
    //}
    //if (_scoreex.isEqualMod) {
    //    var printcolor = 0;
    //    if (_scoreex.acc > 0) {
    //        printcolor = 1;
    //    } else if (_scoreex.acc < 0) {
    //        printcolor = 2;
    //    } else if (_scoreex.acc == 0) {
    //        printcolor = 3;
    //    }
    //    scorediv.find(".h").html(scorediv.find(".h").html() + Print(_scoreex.acc.toString(), printcolor));
    //}
    //print pp
    var ppprintcolor = 0;
    if (!_scoreex.isEqualMod) {
        ppprintcolor = 4;
    } else if (_scoreex.pp > 0) {
        ppprintcolor = 1;
    } else if (_scoreex.pp < 0) {
        ppprintcolor = 2;
    } else if (_scoreex.pp == 0) {
        ppprintcolor = 3;
    }
    //var test = scorediv.find(".pp-display").find("b").html();
    if (_scoreex.pp > 0) {
        scorediv.find(".pp-display").find("b").html(scorediv.find(".pp-display").find("b").html() + Print("(+" + _scoreex.pp.toFixed(2).toString() + ")", ppprintcolor));
    } else {
        scorediv.find(".pp-display").find("b").html(scorediv.find(".pp-display").find("b").html() + Print("(" + _scoreex.pp.toFixed(2).toString() + ")", ppprintcolor));
    }
    //print combo
    var comboprintcolor = 0;
    if (!_scoreex.isEqualMod) {
        comboprintcolor = 4;
    } else if (_scoreex.combo > 0) {
        comboprintcolor = 1;
    } else if (_scoreex.combo < 0) {
        comboprintcolor = 2;
    } else if (_scoreex.combo == 0) {
        comboprintcolor = 3;
    }
    //var test = scorediv.find(".pp-display").find("b").html();
    if (_scoreex.combo > 0) {
        scorediv.find(".h").html(scorediv.find(".h").html() + Print("&nbsp;Diff MaxCombo:+" + _scoreex.combo.toString(), comboprintcolor));
    } else {
        scorediv.find(".h").html(scorediv.find(".h").html() + Print("&nbsp;Diff MaxCombo:" + _scoreex.combo.toString(), comboprintcolor));
    }
    //print miss
    var missprintcolor = 0;
    if (!_scoreex.isEqualMod) {
        missprintcolor = 4;
    } else if (_scoreex.miss > 0) {
        missprintcolor = 2;
    } else if (_scoreex.miss < 0) {
        missprintcolor = 1;
    } else if (_scoreex.miss == 0) {
        missprintcolor = 3;
    }
    //var test = scorediv.find(".pp-display").find("b").html();
    if (_scoreex.miss > 0) {
        scorediv.find(".h").html(scorediv.find(".h").html() + Print("&nbsp;Diff MissCount:+" + _scoreex.miss.toString(), missprintcolor));
    } else {
        scorediv.find(".h").html(scorediv.find(".h").html() + Print("&nbsp;Diff MissCount:" + _scoreex.miss.toString(), missprintcolor));
    }
}

function Print(text, color) {
    //1:red,2:green,3:gray,4.purple
    switch (color) {
        case 1: return "<span style='color:red' class='match_print'>" + text + "</span>";
        case 2: return "<span style='color:green' class='match_print'>" + text + "</span>";
        case 3: return "<span style='color:gray' class='match_print'>" + text + "</span>";
        case 4: return "<span style='color:purple' class='match_print'>" + text + "</span>";
    }
}

function ShowAll() {
    $(".match_print").remove();
    $("#match_vs").html("Loading...");
    var matchsocres = GetScore(matchusername, 100);
    ProcessDataNew(myid, matchsocres);
    $("#match_vs").html("VS " + matchusername + "(ALLScore)");
}

function ShowTop100Rank(){
    $(".match_print").remove();
    $("#match_top100").html("Loading...");
    var userscores = GetScore(myid, 100);
    var matchscores = GetScore(matchusername, 100);
    ProcessData(userscores, matchscores);
    $("#match_top100").html("VS " + matchusername + "(Top100Ranks)");
}

(function () {
    'use strict';
    // Your code here..
    //content
    $(".sectionContents").eq(1).html(Print("Purple:This score was used different mods<br/>", 4) + $(".sectionContents").eq(1).html());
    $(".sectionContents").eq(1).html(Print("Gray:This score is equal your score<br/>", 3) + $(".sectionContents").eq(1).html());
    $(".sectionContents").eq(1).html(Print("Green:This score is better then your score<br/>", 2) + $(".sectionContents").eq(1).html());
    $(".sectionContents").eq(1).html(Print("Red:This score is worse then your score<br/>", 1) + $(".sectionContents").eq(1).html());
    $.ajaxSettings.async = false;
    var _matchusername = $(".profile-username").html();
    myid = $(".content-infoline").find("div").find("b").find("a").html();
    matchusername = _matchusername;
    var ua = navigator.userAgent;
    if(ua.indexOf("Chrome") !== -1){
        expandProfile('general');
        expandProfile('general');
        expandProfile('leader');
    }
    //$("#leader").find("h2").eq(0).html($("#leader").find("h2").eq(0).html() + "<a id='match_vs' style='float:right'>VS " + _matchusername + "</a>");
    $("#fixable").html($("#fixable").html() + "<h2></a><h2>");
    $("#fixable").html($("#fixable").html() + "<h2><a id='match_vs' style='float:left'>VS " + _matchusername + " (ALLScore)</a><h2>");
    $("#fixable").html($("#fixable").html() + "<h2><a id='match_top100' style='float:left'>VS " + _matchusername + " (Top100Ranks)</a><h2>");
    //$("#more-performance-1").html("Loading...");
    //$("#more-performance-1").load("/pages/include/profile-leader.php?u=" + matchusername + "&m=0&pp=2");
    if(ua.indexOf("Chrome") !== -1){
        ShowTop100Rank();
    }
    document.getElementById("match_vs").addEventListener('click', function (e) {
        ShowAll();
    }, false);
    document.getElementById("match_top100").addEventListener('click', function (e) {
        ShowTop100Rank();
    }, false);
})();