您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Color codes mice on GWH maps according to decorations & cheese
// ==UserScript== // @name MouseHunt - GWH Map Color Coder // @author Tran Situ (tsitu) // @namespace https://greasyfork.org/en/users/232363-tsitu // @version 1.3 // @description Color codes mice on GWH maps according to decorations & cheese // @match http://www.mousehuntgame.com/* // @match https://www.mousehuntgame.com/* // ==/UserScript== const sportMice = [ "Sporty Ski Instructor", "Young Prodigy Racer", "Toboggan Technician", "Free Skiing", "Nitro Racer", "Rainbow Racer", "Double Black Diamond Racer", "Black Diamond Racer" ]; const toyMice = [ "Nutcracker", "Toy", "Slay Ride", "Squeaker Claws", "Destructoy", "Toy Tinkerer", "Mad Elf", "Elf" ]; const ornamentalMice = [ "Christmas Tree", "Stocking", "Candy Cane", "Ornament", "Missile Toe", "Wreath Thief", "Ribbon", "Snowglobe" ]; const snowMice = [ "Snow Fort", "Snowball Hoarder", "S.N.O.W. Golem", "Snow Sorceress", "Reinbo", "Tundra Huntress", "Snowblower", "Snow Boulder" ]; const fireworksMice = [ "Frightened Flying Fireworks", "New Year's", "Party Head" ]; const glazyMice = ["Glazy", "Joy"]; const pecanMice = [ "Borean Commander", "Builder", "Frigid Foreman", "Glacia Ice Fist", "Great Winter Hunt Impostor", "Iceberg Sculptor", "Naughty Nougat", "Nice Knitting", "Ridiculous Sweater", "Shorts-All-Year", "Snow Golem Jockey", "Snow Scavenger", "Stuck Snowball" ]; const sbMice = [ "Mouse of Winter Future", "Mouse of Winter Past", "Mouse of Winter Present", "Scrooge" ]; const standardMice = [ "Confused Courier", "Gingerbread", "Greedy Al", "Hoarder", "Miser", "Present", "Triple Lutz" ]; const liscMice = ["Snow Golem Architect"]; const winterMice = ["Snowflake"]; function colorize() { let sportColor = "#c97c49"; // brown-ish let sportCount = 0; let toyColor = "#f06a60"; // red let toyCount = 0; let ornamentalColor = "#5ae031"; // green let ornamentalCount = 0; let snowColor = "#4fcaf0"; // blue let snowCount = 0; let fireworksColor = "#cd87ff"; // light purple let fireworksCount = 0; let glazyColor = "#ff9966"; // orange let glazyCount = 0; let pecanColor = "#ffff66"; // yellow let pecanCount = 0; let sbColor = "#66ffff"; // teal-ish let sbCount = 0; let standardColor = "#afa500"; // mountain dew-ish let standardCount = 0; let liscColor = "#6a62ad"; // medium purple let liscCount = 0; let winterColor = "#338838"; // darker green let winterCount = 0; const greyColor = "#949494"; const isChecked = localStorage.getItem("highlightPref") === "uncaught-only" ? true : false; const isCheckedStr = isChecked ? "checked" : ""; if ( document.querySelectorAll(".treasureMapView-goals-group-goal").length === 0 ) { return; } document.querySelectorAll(".treasureMapView-goals-group-goal").forEach(el => { el.querySelector("span").style = "color: black; font-size: 11px;"; const mouseName = el.querySelector(".treasureMapView-goals-group-goal-name") .textContent; if (sportMice.indexOf(mouseName) > -1) { el.style.backgroundColor = sportColor; if (el.className.indexOf(" complete ") < 0) { sportCount++; } else { if (isChecked) el.style.backgroundColor = "white"; } } else if (toyMice.indexOf(mouseName) > -1) { el.style.backgroundColor = toyColor; if (el.className.indexOf(" complete ") < 0) { toyCount++; } else { if (isChecked) el.style.backgroundColor = "white"; } } else if (ornamentalMice.indexOf(mouseName) > -1) { el.style.backgroundColor = ornamentalColor; if (el.className.indexOf(" complete ") < 0) { ornamentalCount++; } else { if (isChecked) el.style.backgroundColor = "white"; } } else if (snowMice.indexOf(mouseName) > -1) { el.style.backgroundColor = snowColor; if (el.className.indexOf(" complete ") < 0) { snowCount++; } else { if (isChecked) el.style.backgroundColor = "white"; } } else if (fireworksMice.indexOf(mouseName) > -1) { el.style.backgroundColor = fireworksColor; if (el.className.indexOf(" complete ") < 0) { fireworksCount++; } else { if (isChecked) el.style.backgroundColor = "white"; } } else if (glazyMice.indexOf(mouseName) > -1) { el.style.backgroundColor = glazyColor; if (el.className.indexOf(" complete ") < 0) { glazyCount++; } else { if (isChecked) el.style.backgroundColor = "white"; } } else if (pecanMice.indexOf(mouseName) > -1) { el.style.backgroundColor = pecanColor; if (el.className.indexOf(" complete ") < 0) { pecanCount++; } else { if (isChecked) el.style.backgroundColor = "white"; } } else if (sbMice.indexOf(mouseName) > -1) { el.style.backgroundColor = sbColor; if (el.className.indexOf(" complete ") < 0) { sbCount++; } else { if (isChecked) el.style.backgroundColor = "white"; } } else if (standardMice.indexOf(mouseName) > -1) { el.style.backgroundColor = standardColor; if (el.className.indexOf(" complete ") < 0) { standardCount++; } else { if (isChecked) el.style.backgroundColor = "white"; } } else if (liscMice.indexOf(mouseName) > -1) { el.style.backgroundColor = liscColor; if (el.className.indexOf(" complete ") < 0) { liscCount++; } else { if (isChecked) el.style.backgroundColor = "white"; } } else if (winterMice.indexOf(mouseName) > -1) { el.style.backgroundColor = winterColor; if (el.className.indexOf(" complete ") < 0) { winterCount++; } else { if (isChecked) el.style.backgroundColor = "white"; } } }); sportColor = sportCount > 0 ? sportColor : greyColor; toyColor = toyCount > 0 ? toyColor : greyColor; ornamentalColor = ornamentalCount > 0 ? ornamentalColor : greyColor; snowColor = snowCount > 0 ? snowColor : greyColor; fireworksColor = fireworksCount > 0 ? fireworksColor : greyColor; glazyColor = glazyCount > 0 ? glazyColor : greyColor; pecanColor = pecanCount > 0 ? pecanColor : greyColor; sbColor = sbCount > 0 ? sbColor : greyColor; standardColor = standardCount > 0 ? standardColor : greyColor; liscColor = liscCount > 0 ? liscColor : greyColor; winterColor = winterCount > 0 ? winterColor : greyColor; // Remove existing GWH Map related elements before proceeding document.querySelectorAll(".tsitu-gwh-map").forEach(el => el.remove()); const masterDiv = document.createElement("div"); masterDiv.className = "tsitu-gwh-map"; masterDiv.style = "display: inline-flex; margin-bottom: 10px; width: 100%; text-align: center; line-height: 1.5; overflow: hidden"; const spanStyle = "; width: auto; padding: 5px; font-weight: bold; font-size: 12.75px; text-shadow: 0px 0px 11px white"; const sportSpan = document.createElement("span"); sportSpan.style = "background-color: " + sportColor + spanStyle; sportSpan.innerHTML = "Sport<br>" + sportCount; const toySpan = document.createElement("span"); toySpan.style = "background-color: " + toyColor + spanStyle; toySpan.innerHTML = "Toy<br>" + toyCount; const ornamentalSpan = document.createElement("span"); ornamentalSpan.style = "background-color: " + ornamentalColor + spanStyle; ornamentalSpan.innerHTML = "Orna<br>" + ornamentalCount; const snowSpan = document.createElement("span"); snowSpan.style = "background-color: " + snowColor + spanStyle; snowSpan.innerHTML = "Snow<br>" + snowCount; const fireworksSpan = document.createElement("span"); fireworksSpan.style = "background-color: " + fireworksColor + spanStyle; fireworksSpan.innerHTML = "Fire<br>" + fireworksCount; const glazySpan = document.createElement("span"); glazySpan.style = "background-color: " + glazyColor + spanStyle; glazySpan.innerHTML = "Glazy<br>" + glazyCount; const pecanSpan = document.createElement("span"); pecanSpan.style = "background-color: " + pecanColor + spanStyle; pecanSpan.innerHTML = "Pecan<br>" + pecanCount; const sbSpan = document.createElement("span"); sbSpan.style = "background-color: " + sbColor + spanStyle; sbSpan.innerHTML = "SB+<br>" + sbCount; const standardSpan = document.createElement("span"); standardSpan.style = "background-color: " + standardColor + spanStyle; standardSpan.innerHTML = "Basic<br>" + standardCount; const liscSpan = document.createElement("span"); liscSpan.style = "background-color: " + liscColor + spanStyle; liscSpan.innerHTML = "LISC<br>" + liscCount; const winterSpan = document.createElement("span"); winterSpan.style = "background-color: " + winterColor + spanStyle; winterSpan.innerHTML = "Winter<br>" + winterCount; // Highlight uncaught only feature const highlightLabel = document.createElement("label"); highlightLabel.htmlFor = "tsitu-highlight-box"; highlightLabel.innerText = "Highlight uncaught mice only"; const highlightBox = document.createElement("input"); highlightBox.type = "checkbox"; highlightBox.name = "tsitu-highlight-box"; highlightBox.style.verticalAlign = "middle"; highlightBox.checked = isChecked; highlightBox.addEventListener("click", function () { if (highlightBox.checked) { localStorage.setItem("highlightPref", "uncaught-only"); } else { localStorage.setItem("highlightPref", "all"); } colorize(); }); const highlightDiv = document.createElement("div"); highlightDiv.className = "tsitu-gwh-map"; highlightDiv.style = "float: right; position: relative; z-index: 1"; highlightDiv.appendChild(highlightBox); highlightDiv.appendChild(highlightLabel); // Assemble masterDiv masterDiv.appendChild(sportSpan); masterDiv.appendChild(toySpan); masterDiv.appendChild(ornamentalSpan); masterDiv.appendChild(snowSpan); masterDiv.appendChild(fireworksSpan); masterDiv.appendChild(glazySpan); masterDiv.appendChild(pecanSpan); masterDiv.appendChild(sbSpan); masterDiv.appendChild(standardSpan); masterDiv.appendChild(liscSpan); masterDiv.appendChild(winterSpan); // Inject into DOM const insertEl = document.querySelector( ".treasureMapView-leftBlock .treasureMapView-block-content" ); if ( insertEl && document.querySelector( ".treasureMapRootView-header-navigation-item.tasks.active" // On "Active Maps" ) ) { insertEl.insertAdjacentElement("afterbegin", highlightDiv); insertEl.insertAdjacentElement("afterbegin", masterDiv); } // "Goals" button document.querySelector("[data-type='show_goals']").onclick = function () { colorize(); }; } // Listen to XHRs, opening a map always at least triggers board.php const originalOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function () { this.addEventListener("load", function () { const chestEl = document.querySelector( ".treasureMapView-mapMenu-rewardName" ); // 2019: Nice/Naughty List descriptors present in HUD, not so in 2020 // 2020: "2018-2020 [Rare] Nice Treasure Chest" & "2020 [Rare] Naughty Treasure Chest" if (chestEl) { const chestName = chestEl.textContent; if ( chestName && (chestName.indexOf("Nice Treasure Chest") >= 0 || chestName.indexOf("Naughty Treasure Chest") >= 0) ) { colorize(); } } }); originalOpen.apply(this, arguments); };