MH King's Crowns+

Locked Favorites, Community Ranks, and Copy Crowns Button

目前為 2019-12-11 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         MH King's Crowns+
// @author       Warden Slayer - Warden Slayer#2302
// @namespace    https://greasyfork.org/en/users/227259-wardenslayer
// @version      1.7.7
// @description  Locked Favorites, Community Ranks, and Copy Crowns Button
// @include      https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
// @include      http://www.mousehuntgame.com/*
// @include      https://www.mousehuntgame.com/*
// @grant GM_setClipboard
// ==/UserScript==
$(document).ready(function() {
    var observer = new MutationObserver(callback);
    var observerOptions = {
        childList: true,
        attributes: false,
        subtree: false
    };
    if ($("#tabbarContent_page_2").get(0)) {
        observer.observe($("#tabbarContent_page_2").get(0), observerOptions);
    }
});

function callback(mutationList, observer) {
    mutationList.forEach(mutation => {
        switch (mutation.type) {
            case "childList":
                if (localStorage.getItem("haltCode") == "Y") {
                    localStorage.setItem("haltCode", "N");
                    break;
                }
                buildToolbar();
                if (localStorage.getItem("ShowCommunityRanks") == "Y") {
                    showCommunityRanks();
                }

                if (
                    localStorage.getItem("Lock Favorites") == "Y" &&
                    $(".favoriteCrownToggle.crownAction").length > 0
                ) {
                    lockFavorites();
                } else {
                    $(".crownheader.crownheadertop").css(
                        "background",
                        "url('https://image.flaticon.com/icons/svg/189/189671.svg') no-repeat left top"
                    );
                }

                localStorage.setItem("haltCode", "Y");
                break;
        }
    });
}

function buildToolbar() {
    if ($(".toolBar").length > 0) return;
    var toolBar = document.createElement("div");
    toolBar.classList.add("toolBar");

    // Lock Favs CB
    var lockFavs = document.createElement("input");
    lockFavs.type = "checkbox";
    lockFavs.name = "lockFavs";
    lockFavs.value = "";
    lockFavs.id = "lockFavs";
    if (localStorage.getItem("LockFavs") == "Y") {
        lockFavs.checked = "Yes";
    } else {
        lockFavs.checked = "";
    }

    var lockFavsLabel = document.createElement("label");
    lockFavsLabel.htmlFor = "lockFavsLabel";
    lockFavsLabel.appendChild(document.createTextNode("Lock Favorites"));
    if ($(".favoriteCrownToggle.crownAction").length > 0) {
        toolBar.appendChild(lockFavs);
        toolBar.appendChild(lockFavsLabel);
    }
    // Community Ranks CB
    var communityRanks = document.createElement("input");
    communityRanks.type = "checkbox";
    communityRanks.name = "communityRanks";
    communityRanks.value = "";
    communityRanks.id = "communityRanks";
    communityRanks.checked = "";
    if (localStorage.getItem("ShowCommunityRanks") == "Y") {
        communityRanks.checked = "Yes";
    } else {
        communityRanks.checked = "";
    }

    var communityRanksLabel = document.createElement("label");
    communityRanksLabel.htmlFor = "communityRanksLabel";
    communityRanksLabel.appendChild(
        document.createTextNode("Show Community Ranks  ")
    );
    toolBar.appendChild(communityRanks);
    toolBar.appendChild(communityRanksLabel);

    //Copy Crown Button
    var copyCrownsButton = document.createElement("button");
    copyCrownsButton.id = "copyCrownsButton";
    copyCrownsButton.innerText = "Copy Crowns to Clipboard";
    copyCrownsButton.addEventListener("click", copyCrowns)
    toolBar.appendChild(copyCrownsButton);

    // Last
    var crownBreak = $(".crownbreak").first();
    if ($(".crownheader.crownheadertop").length < 1) {
        var header = $(".crownbreak")
            .last()
            .clone();
        header.insertBefore($(".crownheader.crownheadergold"));
        crownBreak = $(header);
    }
    crownBreak.append(toolBar);
    $(".toolBar").css({
        float: "right"
    });
}

/********** Lock Favs **********/
$(document).on("change", "#lockFavs", function() {
    if (
        window.location.href.includes("profile.php") &&
        $("#tabbarContent_page_2").hasClass("active")
    ) {
        // Check to see if the cb was JUST checked
        if (this.checked) {
            // Put the checked value into storage
            localStorage.setItem("LockFavs", "Y");
            lockFavs.checked = "Yes";
            lockFavorites();
        } else {
            // Put the checked value into storage
            localStorage.setItem("LockFavs", "N");
            lockFavs.checked = "";
            unlockFavorites();
        }
    }
});

function lockFavorites() {
    localStorage.setItem("Lock Favorites", "Y");
    if ($(".mousebox.favorite").length < 0) {
        localStorage.setItem("LockFavs", "N");
        lockFavs.checked = "";
        return;
    }
    var allMice = $(".favoriteCrownToggle.crownAction");
    allMice.css("pointer-events", "none");
    $(".nocrowns.crownAction").css("pointer-events", "none");
    $(".crownheader.crownheadertop").css(
        "background",
        "url('https://image.flaticon.com/icons/svg/204/204310.svg') no-repeat left top"
    );
    $(":submit").last().css("pointer-events", "none");
}

function unlockFavorites() {
    localStorage.setItem("Lock Favorites", "N");
    var allMice = $(".favoriteCrownToggle.crownAction");
    allMice.css("pointer-events", "auto");
    $(".nocrowns.crownAction").css("pointer-events", "auto");
    $(".crownheader.crownheadertop").css(
        "background",
        "url('https://image.flaticon.com/icons/svg/189/189671.svg') no-repeat left top"
    );
    $(":submit").last().css("pointer-events", "auto");
}

function filterOutTopFavs(elements) {
    var seen = {};
    var result = elements.filter(function() {
        var txt = $(this).siblings().last().text();
        if (seen[txt]) {
            return true;
        } else {
            seen[txt] = true;
            if (
                $(this)
                .parent()
                .parent()
                .hasClass("mousebox favorite")
            ) {
                return false;
            } else {
                return true;
            }
        }
    });
    return result;
}

function sortAcsending(result) {
    var array = result.toArray();
    array = array.sort(function(a, b) {
        a = parseInt($(a).text(), 10);
        b = parseInt($(b).text(), 10);
        return a - b;
    });
    return array;
}

/********** Community Ranks **********/
$(document).on("change", "#communityRanks", function() {
    if (
        window.location.href.includes("profile.php") &&
        $("#tabbarContent_page_2").hasClass("active")
    ) {
        // Check to see if the cb was JUST checked
        if (this.checked) {
            // Put the checked value into storage
            localStorage.setItem("ShowCommunityRanks", "Y");
            communityRanks.checked = "Yes";
            showCommunityRanks();
        } else {
            // Put the checked value into storage
            localStorage.setItem("ShowCommunityRanks", "N");
            communityRanks.checked = "";
            hideCommunityRanks();
        }
    }
});

function showCommunityRanks() {
    var totalMice = 1006;
    if ($(".crownheader.crownheadercommunity").length > 0) {
        return;
    }
    var crownBreak = $(".crownbreak").first();
    var spacer4 = $(".crownbreak")
        .last()
        .clone()
        .attr("id", "spacer4");
    var communityCrownHeader = $(
        "<div class='crownheader crownheadercommunity'>Community Ranks <div class='crownnote'>Crown Summary</div></div>"
    );
    communityCrownHeader.css(
        "background",
        "url('https://image.flaticon.com/icons/svg/478/478941.svg') no-repeat left top"
    );
    communityCrownHeader.insertAfter(crownBreak);
    spacer4.insertAfter(communityCrownHeader);
    var allMice = $(".mousebox");
    var allBronze = allMice.find(
        ".numcatches.bronze,.numcatches.silver,.numcatches.gold,.numcatches.platinum,.numcatches.diamond"
    );
    allBronze = filterOutTopFavs(allBronze);
    var allSilver = allMice.find(
        ".numcatches.silver,.numcatches.gold,.numcatches.platinum,.numcatches.diamond"
    );
    allSilver = filterOutTopFavs(allSilver);
    var allGold = allMice.find(
        ".numcatches.gold,.numcatches.platinum,.numcatches.diamond"
    );
    allGold = filterOutTopFavs(allGold);
    var allPlat = allMice.find(
        ".numcatches.platinum,.numcatches.diamond"
    );
    allPlat = filterOutTopFavs(allPlat);
    var allDiamond = allMice.find(
        ".numcatches.diamond"
    );
    allDiamond = filterOutTopFavs(allDiamond);
    var bronzeCrowns = allBronze.length;
    var silverCrowns = allSilver.length;
    var goldCrowns = allGold.length;
    var platCrowns = allPlat.length;
    var diamondCrowns = allDiamond.length;
    var bronzeLink = "https://docs.google.com/spreadsheets/d/19_wHCkwiT5M6LS7XNLt4NYny98fjpg4UlHbgOD05ijw/pub?fbclid=IwAR3a1Ku2xTl1mIDksUr8Lk5ORMEnuv7jnvIy9K6OBeziG6AyvYYlZaIQkHY"
    var silverLink = 'https://docs.google.com/spreadsheets/d/e/2PACX-1vQG5g3vp-q7LRYug-yZR3tSwQzAdN7qaYFzhlZYeA32vLtq1mJcq7qhH80planwei99JtLRFAhJuTZn/pubhtml?fbclid=IwAR3sPXNLloGnFk324a0HShroP1E-sNcnQBlRTjJ7gScWTWosqmXv5InB_Ns'
    var goldLink = 'https://docs.google.com/spreadsheets/d/10OGD5OYkGIEAbiez7v92qU5Fdul0ZtCRgEjlECkwZJE/pubhtml?gid=478731024&single=true&fbclid=IwAR28w7IQyMp91I62CR3GOILpbeLwgKaydIoQimMNm7j3S0DL8Mj_IsRpGD4'
    var rankSummary = $(
        "<div class='rank summary' style='font-size: 14px'></div>"
    );
    rankSummary.insertAfter(communityCrownHeader);
    var bronzeText = document.createTextNode("Bronze: " + bronzeCrowns + " (" + ((bronzeCrowns / totalMice) * 100).toFixed(2) + "%) | ");
    var silverText = document.createTextNode("Silver: " + silverCrowns + " (" + ((silverCrowns / totalMice) * 100).toFixed(2) + "%) | ");
    var goldText = document.createTextNode("Gold: " + goldCrowns + " (" + ((goldCrowns / totalMice) * 100).toFixed(2) + "%) | ");
    var platText = document.createTextNode("Platinum: " + platCrowns + " (" + ((platCrowns / totalMice) * 100).toFixed(2) + "%) | ");
    var diamondText = document.createTextNode("Diamond: " + diamondCrowns + " (" + ((diamondCrowns / totalMice) * 100).toFixed(2) + "%)");
    var aBronze = document.createElement('a');
    aBronze.appendChild(bronzeText);
    var bronzeRank = getRankBronze(allBronze.length)
    aBronze.title = "90% Crowned Scoreboard: " + bronzeRank;
    aBronze.href = bronzeLink;
    $(aBronze).attr("target", "_blank");
    var aSilver = document.createElement('a');
    aSilver.appendChild(silverText);
    var silverRank = getRankSilver(allSilver.length)
    aSilver.title = "MHCC Scoreboard: " + silverRank;
    aSilver.href = silverLink;
    $(aSilver).attr("target", "_blank");
    var aGold = document.createElement('a');
    aGold.appendChild(goldText);
    aGold.title = "MHCC Elite Scoreboard";
    aGold.href = goldLink;
    $(aGold).attr("target", "_blank");
    $(rankSummary).append(aBronze).append(aSilver).append(aGold).append(platText).append(diamondText);
}

function getRankBronze(crowns) {
    var totalMice = 1006;
    var crownPrecent = ((crowns / totalMice) * 100).toFixed(2) + "%";
    var rank = "";
    if (crowns >= totalMice) {
        rank = "Hepatizon";
    } else if (crowns >= 996) {
        rank = "Electrum";
    } else if (crowns >= 986) {
        rank = "Palladium";
    } else if (crowns >= 956) {
        rank = "Cobalt";
    } else if (crowns >= 906) {
        rank = "Bronze (full)";
    } else if (crowns >= 856) {
        rank = "Titanium";
    } else if (crowns >= 806) {
        rank = "Pewter";
    } else if (crowns >= 756) {
        rank = "Brass";
    } else if (crowns >= 706) {
        rank = "Copper";
    } else if (crowns >= 656) {
        rank = "Tin";
    } else {
        rank = "Rust";
    }

    return rank;
}

function getRankSilver(crowns) {
    var totalMice = 1006;
    var crownPrecent = ((crowns / totalMice) * 100).toFixed(2) + "%";
    var rank = "";
    if (crowns >= 904) {
        rank = "Super Secret Squirrel";
    } else if (crowns >= 854) {
        rank = "Grizzled Squirrel";
    } else if (crowns >= 804) {
        rank = "Flying Squirrel";
    } else if (crowns >= 753) {
        rank = "Chinchilla";
    } else if (crowns >= 703) {
        rank = "Meerkat";
    } else if (crowns >= 653) {
        rank = "Ferret";
    } else if (crowns >= 603) {
        rank = "Prairie Dog";
    } else if (crowns >= 552) {
        rank = "Marmot";
    } else if (crowns >= 502) {
        rank = "Woodchuck";
    } else if (crowns >= 452) {
        rank = "Wombat";
    } else if (crowns >= 402) {
        rank = "Pine Marten";
    } else if (crowns >= 351) {
        rank = "Chipmunk";
    } else if (crowns >= 302) {
        rank = "Bandicoot";
    } else {
        rank = "Weasel";
    }
    return rank;
}


function hideCommunityRanks() {
    if ($(".crownheader.crownheadercommunity").length > 0) {
        $(".crownheader.crownheadercommunity").remove();
        $("#spacer4").remove();
        $(".rank.summary").remove();
    }
}

function copyCrowns() {
    var allMice = $(".mousebox,.mousebox.favorite");
    var allCrowns = allMice.find(".numcatches.bronze,.numcatches.silver,.numcatches.gold,.numcatches.platinum,.numcatches.diamond");
    var results = filterOutTopFavs(allCrowns.parent().find(".name"));
    var array = $(results).toArray();
    var miceArray = [];
    var catchArray = [];
    array.forEach(function(elements, i) {
        var mouseName = $(elements).parent().parent().find('img').attr('title');
        mouseName = correctMouseName(mouseName);
        var mouseCatches = $(elements).siblings().text();
        miceArray.push(mouseName);
        catchArray.push(mouseCatches);
    })
    var combinedArray = [],
        i = -1;
    while (miceArray[++i]) {
        combinedArray.push([miceArray[i], catchArray[i]]);
    }
    if ($(".remainingMouse").length > 0) {
        var remainingMiceArray = $(".remainingMouse").children().toArray();
        remainingMiceArray.forEach(function(elements, i) {
            var txt = $(elements).text();
            if (txt == " - Select a mouse -") {} else {
                txt = txt.replace(")", "").split("(");
                let mouseName = txt[0].trim();
                mouseName = correctMouseName(mouseName);
                let catches = txt[1];
                combinedArray.push([mouseName, catches])
            }
        })
    } else {
        //Cannot parse uncrowned mice from a profile other than your own.
    }
    let finalTable = combinedArray.sort().map(e => e.join(",")).join("\n");
    GM_setClipboard(finalTable);
    var copyCrownsButton = $("#copyCrownsButton")
    copyCrownsButton.text("---------Copied!---------")
    setTimeout(function() {
        copyCrownsButton.text("Copy Crowns to Clipboard")
    }, 1500);
}

function correctMouseName(mouseName) {
    let newMouseName = "";
    if (mouseName == "Ful") {
        newMouseName = "Ful'mina the Mountain Queen"
    } else if (mouseName == "Kalor") {
        newMouseName = "Kalor'Ignis of the Geyser"
    } else if (mouseName == "Inferna, The Engulfed") {
        newMouseName = "Inferna the Engulfed"
    } else if (mouseName == "Nachous, The Molten") {
        newMouseName = "Nachous the Molten"
    } else if (mouseName == "Stormsurge, the Vile Tempest") {
        newMouseName = "Stormsurge the Vile Tempest"
    } else if (mouseName == "Bruticus, the Blazing") {
        newMouseName = "Bruticus the Blazing"
    } else if (mouseName == "Vincent, The Magnificent") {
        newMouseName = "Vincent The Magnificent"
    } else if (mouseName == "Corky, the Collector Mouse") {
        newMouseName = "Corky the Collector Mouse"
    } else if (mouseName == "Record Keeper") {
        newMouseName = "Record Keeper's Assistant"
    } else if (mouseName == "Keeper") {
        newMouseName = "Keeper's Assistant"
    } else {
        newMouseName = mouseName
    }
    return newMouseName;
}