- // ==UserScript==
- // @name 🐭️ MouseHunt - Halloween Map Helper
- // @version 1.1.4
- // @description Easily see and equip the cheese needed for Halloween Trick or Treat maps.
- // @license MIT
- // @author bradp
- // @namespace bradp
- // @match https://www.mousehuntgame.com/*
- // @icon https://i.mouse.rip/mouse.png
- // @grant none
- // @run-at document-end
- // ==/UserScript==
-
- (function () {
- 'use strict';
-
- const cheeseIdToId = {
- super_brie_cheese: 1114,
- cauldron_tier_1_cheese: 3305,
- cauldron_tier_2_cheese: 3306,
- cauldron_tier_3_cheese: 3307,
- cauldron_tier_4_cheese: 3308,
- };
-
- const miceCheeses = [
- {
- name: 'Grey Recluse',
- cheese: 'Standard',
- cheeseId: 'super_brie_cheese'
- },
- {
- name: 'Cobweb',
- cheese: 'Standard',
- cheeseId: 'super_brie_cheese'
- },
- {
- name: 'Teenage Vampire',
- cheese: 'Standard',
- cheeseId: 'super_brie_cheese'
- },
- {
- name: 'Zombot Unipire',
- cheese: 'Standard',
- cheeseId: 'super_brie_cheese'
- },
- {
- name: 'Candy Cat',
- cheese: 'Standard',
- cheeseId: 'super_brie_cheese'
- },
- {
- name: 'Candy Goblin',
- cheese: 'Standard',
- cheeseId: 'super_brie_cheese'
- },
- {
- name: 'Shortcut',
- cheese: 'Standard',
- cheeseId: 'super_brie_cheese'
- },
- {
- name: 'Tricky Witch',
- cheese: 'Standard',
- cheeseId: 'super_brie_cheese'
- },
- {
- name: 'Sugar Rush',
- cheese: 'Standard',
- cheeseId: 'super_brie_cheese'
- },
- {
- name: 'Spirit Light',
- cheese: 'Monterey Jack-O-Lantern',
- cheeseId: 'cauldron_tier_1_cheese'
- },
- {
- name: 'Gourdborg',
- cheese: 'Monterey Jack-O-Lantern',
- cheeseId: 'cauldron_tier_1_cheese'
- },
- {
- name: 'Pumpkin Hoarder',
- cheese: 'Monterey Jack-O-Lantern',
- cheeseId: 'cauldron_tier_1_cheese'
- },
- {
- name: 'Trick',
- cheese: 'Monterey Jack-O-Lantern',
- cheeseId: 'cauldron_tier_1_cheese'
- },
- {
- name: 'Treat',
- cheese: 'Monterey Jack-O-Lantern',
- cheeseId: 'cauldron_tier_1_cheese'
- },
- {
- name: 'Wild Chainsaw',
- cheese: 'Monterey Jack-O-Lantern',
- cheeseId: 'cauldron_tier_1_cheese'
- },
- {
- name: 'Maize Harvester',
- cheese: 'Monterey Jack-O-Lantern',
- cheeseId: 'cauldron_tier_1_cheese'
- },
- {
- name: 'Creepy Marionette',
- cheese: 'Bonefort',
- cheeseId: 'cauldron_tier_2_cheese'
- },
- {
- name: 'Dire Lycan',
- cheese: 'Bonefort',
- cheeseId: 'cauldron_tier_2_cheese'
- },
- {
- name: 'Grave Robber',
- cheese: 'Bonefort',
- cheeseId: 'cauldron_tier_2_cheese'
- },
- {
- name: 'Hollowhead',
- cheese: 'Bonefort',
- cheeseId: 'cauldron_tier_2_cheese'
- },
- {
- name: 'Mousataur Priestess',
- cheese: 'Bonefort',
- cheeseId: 'cauldron_tier_2_cheese'
- },
- {
- name: 'Sandmouse',
- cheese: 'Bonefort',
- cheeseId: 'cauldron_tier_2_cheese'
- },
- {
- name: 'Titanic Brain-Taker',
- cheese: 'Bonefort',
- cheeseId: 'cauldron_tier_2_cheese'
- },
- {
- name: 'Tomb Exhumer',
- cheese: 'Bonefort',
- cheeseId: 'cauldron_tier_2_cheese'
- },
- {
- name: 'Admiral Arrrgh',
- cheese: 'Polter-Geitost',
- cheeseId: 'cauldron_tier_3_cheese'
- },
- {
- name: 'Captain Cannonball',
- cheese: 'Polter-Geitost',
- cheeseId: 'cauldron_tier_3_cheese'
- },
- {
- name: 'Ghost Pirate Queen',
- cheese: 'Polter-Geitost',
- cheeseId: 'cauldron_tier_3_cheese'
- },
- {
- name: 'Gourd Ghoul',
- cheese: 'Polter-Geitost',
- cheeseId: 'cauldron_tier_3_cheese'
- },
- {
- name: 'Scorned Pirate',
- cheese: 'Polter-Geitost',
- cheeseId: 'cauldron_tier_3_cheese'
- },
- {
- name: 'Spectral Butler',
- cheese: 'Polter-Geitost',
- cheeseId: 'cauldron_tier_3_cheese'
- },
- {
- name: 'Spectral Swashbuckler',
- cheese: 'Polter-Geitost',
- cheeseId: 'cauldron_tier_3_cheese'
- },
- {
- name: 'Baba Gaga',
- cheese: 'Scream',
- cheeseId: 'cauldron_tier_4_cheese'
- },
- {
- name: 'Bonbon Gummy Globlin',
- cheese: 'Scream',
- cheeseId: 'cauldron_tier_4_cheese'
- },
- {
- name: 'Hollowed',
- cheese: 'Scream',
- cheeseId: 'cauldron_tier_4_cheese'
- },
- {
- name: 'Hollowed Minion',
- cheese: 'Scream',
- cheeseId: 'cauldron_tier_4_cheese'
- },
- {
- name: 'Swamp Thang',
- cheese: 'Scream',
- cheeseId: 'cauldron_tier_4_cheese'
- }
- ];
-
- /**
- * Add styles to the page.
- *
- * @param {string} styles The styles to add.
- */
- const addStyles = (styles) => {
- const existingStyles = document.getElementById('mh-mouseplace-custom-styles');
-
- if (existingStyles) {
- existingStyles.innerHTML += styles;
- } else {
- const style = document.createElement('style');
- style.id = 'mh-mouseplace-custom-styles';
-
- style.innerHTML = styles;
- document.head.appendChild(style);
- }
- };
-
- /**
- * Do something when the overlay is shown or hidden.
- *
- * @param {Object} callbacks
- * @param {Function} callbacks.show The callback to call when the overlay is shown.
- * @param {Function} callbacks.hide The callback to call when the overlay is hidden.
- * @param {Function} callbacks.change The callback to call when the overlay is changed.
- */
- const onOverlayChange = (callbacks) => {
- const observer = new MutationObserver(() => {
- if (callbacks.change) {
- callbacks.change();
- }
-
- if (document.getElementById('overlayBg').classList.length > 0) {
- if (callbacks.show) {
- callbacks.show();
- }
- } else if (callbacks.hide) {
- callbacks.hide();
- }
- });
- observer.observe(
- document.getElementById('overlayBg'),
- {
- attributes: true,
- attributeFilter: ['class']
- }
- );
- };
-
- /**
- * Add links to the mouse details on the map.
- */
- const addCheeseLinks = () => {
- const overlayClasses = document.getElementById('overlayPopup').classList;
- if (! overlayClasses.contains('treasureMapPopup')) {
- return;
- }
-
- const mapName = document.querySelector('.treasureMapView-mapMenu-rewardName');
- if (! mapName) {
- setTimeout(addCheeseLinks, 500);
- return;
- }
-
- if (! mapName.innerText) {
- return;
- }
-
- if (! mapName.innerText.includes('Halloween')) {
- return;
- }
-
- const mouseIcon = document.querySelectorAll('.treasureMapView-goals-group-goal');
- if (mouseIcon.length === 0) {
- setTimeout(addCheeseLinks, 500);
- }
-
- mouseIcon.forEach((mouse) => {
- const classes = mouse.classList;
- if (classes.contains('complete')) {
- return;
- }
-
- const mouseName = mouse.querySelector('.treasureMapView-goals-group-goal-name span');
- if (! (mouseName && mouseName.textContent)) {
- return;
- }
-
- const mouseContainer = mouse.querySelector('.treasureMapView-goals-group-goal-name');
- if (! mouseContainer) {
- return;
- }
-
- // grab the data outof the micecheese array
- const mouseData = miceCheeses.find((mouseCheese) => mouseCheese.name === mouseName.textContent);
- if (! mouseData) {
- return;
- }
-
- // add in a button and a background color
- const mouseButton = document.createElement('a');
- mouseButton.classList.add('mh-halloween-cheese-selector');
-
- const currentCheese = user.bait_item_id; // eslint-disable-line no-undef
- if (cheeseIdToId[ mouseData.cheeseId ] === currentCheese) {
- mouseButton.textContent = `${mouseData.cheese} equipped`;
- } else {
- mouseButton.textContent = `Equip ${mouseData.cheese}`;
- }
-
- const parent = mouseContainer.parentNode.parentNode;
- parent.classList.add('mh-halloween-cheese-' + mouseData.cheeseId);
-
- parent.addEventListener('click', () => {
- hg.utils.TrapControl.setBait(mouseData.cheeseId); // eslint-disable-line no-undef
- hg.utils.TrapControl.go(); // eslint-disable-line no-undef
-
- const close = document.getElementById('jsDialogClose');
- if (close) {
- close.click();
- }
- });
-
- mouseContainer.appendChild(mouseButton);
- });
- };
-
- addStyles(`.treasureMapView.event.halloween_treat_2021 .treasureMapView-goals-groups div:nth-child(2),
- .treasureMapView.event.halloween_trick_2021 .treasureMapView-goals-groups div:nth-child(2) {
- display: grid;
- grid-template-columns: repeat(2, 1fr);
- padding: 1em;
- }
-
- .treasureMapView.event.halloween_treat_2021 .treasureMapView-highlight .treasureMapView-goals-groups div:nth-child(2),
- .treasureMapView.event.halloween_trick_2021 .treasureMapView-highlight .treasureMapView-goals-groups div:nth-child(2) {
- display: block;
- }
-
- .treasureMapView.event.halloween_treat_2021 .treasureMapView-block-content .treasureMapView-goals-group-goal,
- .treasureMapView.event.halloween_trick_2021 .treasureMapView-block-content .treasureMapView-goals-group-goal {
- width: 90%;
- cursor: initial;
- }
-
- .treasureMapView.event.halloween_treat_2021 .treasureMapView-goals-group-goal:hover:before,
- .treasureMapView.event.halloween_trick_2021 .treasureMapView-goals-group-goal:hover:before {
- background-color: transparent;
- left: 0;
- right: -2px;
- }
-
- .treasureMapView.event.halloween_treat_2021 .treasureMapView-block-content .treasureMapView-goals-group-goal-padding .treasureMapView-goals-group-goal-name,
- .treasureMapView.event.halloween_trick_2021 .treasureMapView-block-content .treasureMapView-goals-group-goal-padding .treasureMapView-goals-group-goal-name {
- display: flex;
- flex-direction: column;
- }
-
- .treasureMapView.event.halloween_treat_2021 .treasureMapView-goals-group-goal:hover:before,
- .treasureMapView.event.halloween_trick_2021 .treasureMapView-goals-group-goal:hover:before {
- box-shadow: 0 0 0 1px #646363;
- left: 0;
- right: 0;
- top: 0;
- bottom: 0;
- }
-
- .mh-halloween-cheese-selector {
- margin-top: 0.5em;
- }
-
- .mh-halloween-cheese-cauldron_tier_1_cheese {
- background-color: #ffaa4c !important;
- border-radius: 5px;
- }
-
- .mh-halloween-cheese-cauldron_tier_2_cheese {
- background-color: #eac2d1 !important;
- border-radius: 5px;
- }
-
- .mh-halloween-cheese-cauldron_tier_3_cheese {
- background-color: #cfeaec !important;
- border-radius: 5px;
- }
-
- .mh-halloween-cheese-cauldron_tier_4_cheese {
- background-color: #b5d652 !important;
- border-radius: 5px;
- }`);
-
- onOverlayChange({ show: addCheeseLinks });
- }());