您需要先安装一个扩展,例如 篡改猴、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);
- };