// ==UserScript==
// @name MouseHunt - GWH 2021 Naughty/Nice map colour coder
// @author in59te
// @namespace https://greasyfork.org/en/users/739524-in59te
// @version 1.2
// @description Color codes mice on Naughty/Nice maps according to type
// @match http://www.mousehuntgame.com/*
// @match https://www.mousehuntgame.com/*
// @downloadURL https://update.greasyfork.icu/scripts/436714/MouseHunt%20-%20GWH%202021%20NaughtyNice%20map%20colour%20coder.user.js
// @updateURL https://update.greasyfork.icu/scripts/436714/MouseHunt%20-%20GWH%202021%20NaughtyNice%20map%20colour%20coder.meta.js
// ==/UserScript==
const standardMice = [
"Confused Courier",
"Gingerbread",
"Hoarder",
"Present",
"Triple Lutz",
"Miser",
"Greedy Al"
];
const sbMice = [
"Mouse of Winter Future",
"Mouse of Winter Past",
"Mouse of Winter Present",
"Scrooge"
];
const PPMice = [
"Borean Commander",
"Builder",
"Frigid Foreman",
"Glacia Ice Fist",
"Iceberg Sculptor",
"Nice Knitting",
"Ridiculous Sweater",
"Snow Golem Jockey",
"Snow Scavenger",
"Great Giftnapper",
"Great Winter Hunt Impostor",
"Shorts-All-Year",
"Stuck Snowball",
"Naughty Nougat"
];
const winterMice = [
"Snowflake"
];
const liscMice = [
"Snow Golem Architect"
];
const glazyMice = [
"Glazy",
"Joy"
];
const winterSportsMice = [
"Sporty Ski Instructor",
"Young Prodigy Racer",
"Toboggan Technician",
"Free Skiing",
"Nitro Racer",
"Rainbow Racer",
"Double Black Diamond Racer",
"Black Diamond Racer"
];
const toysMice = [
"Nutcracker",
"Toy",
"Slay Ride",
"Squeaker Claws",
"Destructoy",
"Toy Tinkerer",
"Mad Elf",
"Elf"
];
const ornamentsMice = [
"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 bossMouse = [
"Ol' King Coal"
]
function colorize() {
let stdColor = "#fff935"; // yellow
let stdCount = 0;
let sbColor = "#fff4ad"; // slightly brighter yellow :pepela:
let sbCount = 0;
let ppColor = "#ba6900"; // brown
let ppCount = 0;
let winterColor = "#dedede"; // light grey
let winterCount = 0;
let liscColor = "#5d9fce"; // blue
let liscCount = 0;
let glazyColor = "#f9a645"; // orange
let glazyCount = 0;
let winterSportsColor = "#9370db"; // purple
let winterSportsCount = 0;
let toysColor = "#e74f4e"; // red
let toysCount = 0;
let ornamentsColor = "#32cd32"; // green
let ornamentsCount = 0;
let snowColor = "#a5dce6"; // light blue
let snowCount = 0;
let fireworksColor = "#ee82ee"; // pink
let fireworksCount = 0;
let bossColor = "#575757"; // dark grey
let bossCount = 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 (standardMice.indexOf(mouseName) > -1) {
el.style.backgroundColor = stdColor;
if (el.className.indexOf(" complete ") < 0) {
stdCount++;
} 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 (PPMice.indexOf(mouseName) > -1) {
el.style.backgroundColor = ppColor;
if (el.className.indexOf(" complete ") < 0) {
ppCount++;
} 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";
}
} 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 (glazyMice.indexOf(mouseName) > -1) {
el.style.backgroundColor = glazyColor;
if (el.className.indexOf(" complete ") < 0) {
glazyCount++;
} else {
if (isChecked) el.style.backgroundColor = "white";
}
} else if (winterSportsMice.indexOf(mouseName) > -1) {
el.style.backgroundColor = winterSportsColor;
if (el.className.indexOf(" complete ") < 0) {
winterSportsCount++;
} else {
if (isChecked) el.style.backgroundColor = "white";
}
} else if (toysMice.indexOf(mouseName) > -1) {
el.style.backgroundColor = toysColor;
if (el.className.indexOf(" complete ") < 0) {
toysCount++;
} else {
if (isChecked) el.style.backgroundColor = "white";
}
} else if (ornamentsMice.indexOf(mouseName) > -1) {
el.style.backgroundColor = ornamentsColor;
if (el.className.indexOf(" complete ") < 0) {
ornamentsCount++;
} 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 (bossMouse.indexOf(mouseName) > -1) {
el.style.backgroundColor = bossColor;
if (el.className.indexOf(" complete ") < 0) {
bossCount++;
} else {
if (isChecked) el.style.backgroundColor = "white";
}
}
});
stdColor = stdCount > 0 ? stdColor : greyColor;
sbColor = sbCount > 0 ? sbColor : greyColor;
ppColor = ppCount > 0 ? ppColor : greyColor;
winterColor = winterCount > 0 ? winterColor : greyColor;
liscColor = liscCount > 0 ? liscColor : greyColor;
glazyColor = glazyCount > 0 ? glazyColor : greyColor;
winterSportsColor = winterSportsCount > 0 ? winterSportsColor : greyColor;
toysColor = toysCount > 0 ? toysColor : greyColor;
ornamentsColor = ornamentsCount > 0 ? ornamentsColor : greyColor;
snowColor = snowCount > 0 ? snowColor : greyColor;
fireworksColor = fireworksCount > 0 ? fireworksColor : greyColor;
bossColor = bossCount > 0 ? bossColor : 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 stdSpan = document.createElement("span");
stdSpan.classList.add("stdSpan");
stdSpan.style = "background-color: " + stdColor + spanStyle;
stdSpan.innerHTML = "Std
" + stdCount;
const sbSpan = document.createElement("span");
sbSpan.classList.add("sbSpan");
sbSpan.style = "background-color: " + sbColor + spanStyle;
sbSpan.innerHTML = "SB
" + sbCount;
const ppSpan = document.createElement("span");
ppSpan.classList.add("ppSpan");
ppSpan.style = "background-color: " + ppColor + spanStyle;
ppSpan.innerHTML = "PP
" + ppCount;
const winterSpan = document.createElement("span");
winterSpan.classList.add("winterSpan");
winterSpan.style = "background-color: " + winterColor + spanStyle;
winterSpan.innerHTML = "Wint
" + winterCount;
const liscSpan = document.createElement("span");
liscSpan.classList.add("liscSpan");
liscSpan.style = "background-color: " + liscColor + spanStyle;
liscSpan.innerHTML = "LISC
" + liscCount;
const glazySpan = document.createElement("span");
glazySpan.classList.add("glazySpan");
glazySpan.style = "background-color: " + glazyColor + spanStyle;
glazySpan.innerHTML = "GPP
" + glazyCount;
const winterSportsSpan = document.createElement("span");
winterSportsSpan.classList.add("winterSportsSpan");
winterSportsSpan.style = "background-color: " + winterSportsColor + spanStyle;
winterSportsSpan.innerHTML = "Sport
" + winterSportsCount;
const toysSpan = document.createElement("span");
toysSpan.classList.add("toysSpan");
toysSpan.style = "background-color: " + toysColor + spanStyle;
toysSpan.innerHTML = "Toy
" + toysCount;
const ornamentsSpan = document.createElement("span");
ornamentsSpan.classList.add("ornamentsSpan");
ornamentsSpan.style = "background-color: " + ornamentsColor + spanStyle;
ornamentsSpan.innerHTML = "Orna
" + ornamentsCount;
const snowSpan = document.createElement("span");
snowSpan.classList.add("snowSpan");
snowSpan.style = "background-color: " + snowColor + spanStyle;
snowSpan.innerHTML = "Snow
" + snowCount;
const fireworksSpan = document.createElement("span");
fireworksSpan.classList.add("fireworksSpan");
fireworksSpan.style = "background-color: " + fireworksColor + spanStyle;
fireworksSpan.innerHTML = "Fire
" + fireworksCount;
const bossSpan = document.createElement("span");
bossSpan.classList.add("bossSpan");
bossSpan.style = "background-color: " + bossColor + spanStyle;
bossSpan.innerHTML = "Boss
" + bossCount;
// 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(stdSpan);
masterDiv.appendChild(sbSpan);
masterDiv.appendChild(ppSpan);
masterDiv.appendChild(winterSpan);
masterDiv.appendChild(liscSpan);
masterDiv.appendChild(glazySpan);
masterDiv.appendChild(winterSportsSpan);
masterDiv.appendChild(toysSpan);
masterDiv.appendChild(ornamentsSpan);
masterDiv.appendChild(snowSpan);
masterDiv.appendChild(fireworksSpan);
masterDiv.appendChild(bossSpan);
// 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"
);
if (chestEl) {
const chestName = chestEl.textContent;
if (
chestName &&
((chestName.indexOf("Naughty") >= 0) ||
(chestName.indexOf("Nice") >= 0))
) {
colorize();
}
}
});
originalOpen.apply(this, arguments);
};