// ==UserScript== // @name MH King's Crowns+ // @author Warden Slayer - Warden Slayer#2302 // @namespace https://greasyfork.org/en/users/227259-wardenslayer // @version 1.8 // @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 // @downloadURL none // ==/UserScript== $(document).ready(function() { var observerA = new MutationObserver(callback); var observerB = new MutationObserver(callback); var observerOptionsA = { childList: true, attributes: false, subtree: false }; var observerOptionsB = { childList: true, attributes: true, subtree: true }; if ($('.mousehuntHud-page-tabHeader.kings_crowns').hasClass('active')) { generate() } else if ($('#tabbarContent_page').find('.tabbarContent-tab.active').children().filter('.active').attr('data-template') == 'tab_profile') { observerB.observe($(".mousehuntHud-page-tabHeader-container").get(0), observerOptionsB); //is 2 of these active at once a bad idea? observerA.observe($("#tabbarContent_page").get(0), observerOptionsA); } else if ($("#tabbarContent_page").get(0)) { observerA.observe($("#tabbarContent_page").get(0), observerOptionsA); } else { return false } }); function callback(mutationList, observer) { mutationList.forEach(mutation => { if (mutation.type == 'childList') { let $nodes = $(mutation.addedNodes).filter('.active'); if ($nodes.attr('data-template') == 'tab_kings_crowns') { generate() } } else if (mutation.type == 'attributes') { let $nodes = $(mutation.target); if ($nodes.hasClass('mousehuntHud-page-tabHeader kings_crowns active')) { if (localStorage.getItem("haltCode") == "Y") { localStorage.setItem("haltCode", "N"); } else { setTimeout(generate, 2000); localStorage.setItem("haltCode", "Y"); } } } }) }; function generate() { buildToolbar(); if (localStorage.getItem("Lock Favorites") == "Y" && $(".mouseCrownsView-group-mouse-favouriteButton").length > 0) { lockFavorites(); } if (localStorage.getItem("ShowCommunityRanks") == "Y") { showCommunityRanks(); } } 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 ($(".mouseCrownsView-group-mouse-favouriteButton").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 let crownBreak = $('.mouseCrownsView-group.favourite'); crownBreak.append(toolBar); $(".toolBar").css({ 'float': "right", }); } /********** Lock Favs **********/ $(document).on("change", "#lockFavs", function() { if ( window.location.href.includes("profile.php") && $(".mousehuntHud-page-tabHeader.kings_crowns").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 ($(".mouseCrownsView-group-mouse-favouriteButton").length < 0) { localStorage.setItem("LockFavs", "N"); lockFavs.checked = ""; return; } var allMice = $(".mouseCrownsView-group-mouse").find('.mouseCrownsView-group-mouse-favouriteButton'); allMice.css("pointer-events", "none"); $(".mouseCrownsView-crown.favourite").css( "background", "url('https://image.flaticon.com/icons/svg/204/204310.svg') no-repeat left top" ); } function unlockFavorites() { localStorage.setItem("Lock Favorites", "N"); var allMice = $(".mouseCrownsView-group-mouse").find('.mouseCrownsView-group-mouse-favouriteButton'); allMice.css("pointer-events", "auto"); $(".mouseCrownsView-crown.favourite").css({ 'background-image': "url('https://www.mousehuntgame.com/images/ui/camp/trap/star_favorite.png')", 'display': 'inline-block', 'vertical-align': 'middle', 'width': '50px', 'height': '50px', 'margin-right': '5px', 'background-repeat': 'no-repeat', 'background-position': '50% 50%', 'background-size': 'contain' }); } /********** Community Ranks **********/ $(document).on("change", "#communityRanks", function() { if ( window.location.href.includes("profile.php") && $(".mousehuntHud-page-tabHeader.kings_crowns").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 = 1007; if ($(".crownheader.crownheadercommunity").length > 0) { return; } var crownBreak = $(".mouseCrownsView-group.favourite"); var communityCrownHeader = $( "
Community Ranks
Crown Summary
" ); communityCrownHeader.css({ 'background-image': "url('https://image.flaticon.com/icons/svg/478/478941.svg')", 'background-repeat': 'no-repeat', }); communityCrownHeader.insertAfter(crownBreak); var allUncrowned = $(".mouseCrownsView-group.none").find(".mouseCrownsView-group-mouse"); var allBronze = $(".mouseCrownsView-group.bronze,.mouseCrownsView-group.silver,.mouseCrownsView-group.gold,.mouseCrownsView-group.platinum,.mouseCrownsView-group.diamond").find(".mouseCrownsView-group-mouse"); var allSilver = $(".mouseCrownsView-group.silver,.mouseCrownsView-group.gold,.mouseCrownsView-group.platinum,.mouseCrownsView-group.diamond").find(".mouseCrownsView-group-mouse"); var allGold = $(".mouseCrownsView-group.gold,.mouseCrownsView-group.platinum,.mouseCrownsView-group.diamond").find(".mouseCrownsView-group-mouse"); var allPlat = $(".mouseCrownsView-group.platinum,.mouseCrownsView-group.diamond").find(".mouseCrownsView-group-mouse"); var allDiamond = $(".mouseCrownsView-group.diamond").find(".mouseCrownsView-group-mouse"); var bronzeCrowns = allBronze.length; var silverCrowns = allSilver.length; var goldCrowns = allGold.length; var platCrowns = allPlat.length; var diamondCrowns = allDiamond.length; var uncrowned = totalMice-bronzeCrowns; 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 = $("
"); $(rankSummary).append("
"); $(rankSummary).append("
"); rankSummary.css({ 'font-size': '16px', 'padding': '5px', }); rankSummary.insertAfter(communityCrownHeader); var uncrownedText = document.createTextNode("Uncrowned: " + uncrowned + " (" + ((uncrowned / totalMice) * 100).toFixed(2) + "%) | "); $(rankSummary).attr('title', 'Mobster and Leprechaun excluded from counts'); 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"); $('.lineOne').append(uncrownedText).append(aBronze).append(aSilver); var aGold = document.createElement('a'); aGold.appendChild(goldText); aGold.title = "MHCC Elite Scoreboard"; aGold.href = goldLink; $(aGold).attr("target", "_blank"); $('.lineTwo').append(aGold).append(platText).append(diamondText); $('.lineOne,.lineTwo').css({ 'width': '100%', 'margin-bottom': '2px', }); } function getRankBronze(crowns) { var totalMice = 1007; var crownPrecent = ((crowns / totalMice) * 100).toFixed(2) + "%"; var rank = ""; if (crowns >= totalMice) { rank = "Hepatizon"; } else if (crowns >= 997) { rank = "Electrum"; } else if (crowns >= 987) { rank = "Palladium"; } else if (crowns >= 957) { rank = "Cobalt"; } else if (crowns >= 907) { rank = "Bronze (full)"; } else if (crowns >= 856) { rank = "Titanium"; } else if (crowns >= 806) { rank = "Pewter"; } else if (crowns >= 756) { rank = "Brass"; } else if (crowns >= 705) { rank = "Copper"; } else if (crowns >= 655) { rank = "Tin"; } else { rank = "Rust"; } return rank; } function getRankSilver(crowns) { var totalMice = 1007; var crownPrecent = ((crowns / totalMice) * 100).toFixed(2) + "%"; var rank = ""; if (crowns >= 906) { rank = "Super Secret Squirrel"; } else if (crowns >= 856) { rank = "Grizzled Squirrel"; } else if (crowns >= 806) { rank = "Flying Squirrel"; } else if (crowns >= 755) { rank = "Chinchilla"; } else if (crowns >= 705) { rank = "Meerkat"; } else if (crowns >= 655) { rank = "Ferret"; } else if (crowns >= 604) { rank = "Prairie Dog"; } else if (crowns >= 554) { rank = "Marmot"; } else if (crowns >= 504) { rank = "Woodchuck"; } else if (crowns >= 453) { rank = "Wombat"; } else if (crowns >= 403) { rank = "Pine Marten"; } else if (crowns >= 352) { rank = "Chipmunk"; } else if (crowns >= 302) { rank = "Bandicoot"; } else { rank = "Weasel"; } return rank; } function hideCommunityRanks() { if ($(".crownheader.crownheadercommunity").length > 0) { $(".crownheader.crownheadercommunity").remove(); $(".rank.summary").remove(); } } function copyCrowns() { var allMice = $(".mouseCrownsView-group.none,.mouseCrownsView-group.bronze,.mouseCrownsView-group.silver,.mouseCrownsView-group.gold,.mouseCrownsView-group.platinum,.mouseCrownsView-group.diamond").find(".mouseCrownsView-group-mouse"); var miceArray = []; allMice.each(function(i) { let $mouse = correctMouseName($(this).find('.mouseCrownsView-group-mouse-name').text()); let $count = parseInt($(this).find('.mouseCrownsView-group-mouse-catches').text().replace(',',""),10); miceArray[i] = [$mouse,$count]; }) let finalTable = miceArray.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'Mina, The Mountain Queen") { newMouseName = "Ful'mina the Mountain Queen" } 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") { newMouseName = "Corky the Collector" } else { newMouseName = mouseName } return newMouseName; }