MouseHunt - Folklore Forest Map color Coder

color codes mice on Folklore Forest maps according to type

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name         MouseHunt - Folklore Forest Map color Coder
// @author       in59te
// @namespace    https://greasyfork.org/en/users/739524-in59te
// @version      0.9
// @description  color codes mice on Folklore Forest maps according to type
// @match        http://www.mousehuntgame.com/*
// @match        https://www.mousehuntgame.com/*
// Based off original script by Tsitu
// ==/UserScript==
    
    const SeedMice = [
        "Root Rummager",
        "Grit Grifter",
    ];
    const FarmSpecialMice = [
        "Land Loafer",
        "Loathsome Locust",
        "Monstrous Midge"
    ];
    const PestsMice = [
        "Angry Aphid",
        "Wily Weevil",
        "Mighty Mite"
    ];
    const StandardPondMice = [
        "Beachcomber",
        "Sand Sifter",
        "Tackle Tracker"
    ];
    const GrubMice = [
        "Pompous Perch",
        "Careless Catfish",
        "Melodramatic Minnow"
    ];
    const ClamMice = [
        "Sinister Squid",
        "Nefarious Nautilus",
        "Vicious Vampire Squid"
    ];
    const StormyMice = [
        "Architeuthulhu of the Abyss"
    ];
    const StandardNonWritingMice = [
        "Brothers Grimmaus",
        "Hans Cheesetian Squeakersen",
        "Madame d'Ormouse",
    ];
    const StandardWritingMice = [
        "Humphrey Dumphrey",
        "Little Bo Squeak",
        "Little Miss Fluffet"
    ];
    const SBOnlyMice = [
        "Crazed Cultivator",
        "Matriarch Gander",
        "Covetous Coastguard"
    ];
    const FirstDDMice = [
        "Fibbocchio",
        "Pinkielina",
        "Princess and the Olive"
    ];
    const SecondDDMice = [
        "Flamboyant Flautist",
        "Greenbeard",
        "Ice Regent"
    ];
    const FinalDDMice = [
        "Bitter Grammarian",
        "Mythweaver"
    ];
    
    
    function colorize() {
    let SBOnlycolor = "#FFFFFF"; // white
    let SBOnlyCount = 0;
    let Seedcolor = "#0FF380"; // light green
    let SeedCount = 0;
    let Pestscolor = "#0EA635"; // med green
    let PestsCount = 0;
    let FarmSpecialcolor = "#0B6222"; // dark green
    let FarmSpecialCount = 0;
    let StandardPondcolor = "#5BF8DC"; // light blue
    let StandardPondCount = 0;
    let Grubcolor = "#0F97F7"; // normal blue
    let GrubCount = 0;
    let Clamcolor = "#07568C"; // dark blue
    let ClamCount = 0;
    let Stormycolor = "#8428CC"; // some shade of purple
    let StormyCount = 0;
    let StandardWritingcolor = "#FC5E78"; // cherry
    let StandardWritingCount = 0;
    let StandardNonWritingcolor = "#CDCDCD"; // grey
    let StandardNonWritingCount = 0;
    let FirstDDcolor = "#FDFAA2"; // yellow
    let FirstDDCount = 0;
    let SecondDDcolor = "#F8943A"; // orange
    let SecondDDCount = 0;
    let FinalDDcolor = "#D6A80B"; // gold
    let FinalDDCount = 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 (SeedMice.indexOf(mouseName) > -1) {
        el.style.backgroundColor = Seedcolor;
        if (el.className.indexOf(" complete ") < 0) {
            SeedCount++;
        } else {
            if (isChecked) el.style.backgroundColor = "white";
        }
        } else if (FarmSpecialMice.indexOf(mouseName) > -1) {
        el.style.backgroundColor = FarmSpecialcolor;
        if (el.className.indexOf(" complete ") < 0) {
            FarmSpecialCount++;
        } else {
            if (isChecked) el.style.backgroundColor = "white";
        }
        } else if (PestsMice.indexOf(mouseName) > -1) {
        el.style.backgroundColor = Pestscolor;
        if (el.className.indexOf(" complete ") < 0) {
            PestsCount++;
        } else {
            if (isChecked) el.style.backgroundColor = "white";
        }
        } else if (StandardPondMice.indexOf(mouseName) > -1) {
        el.style.backgroundColor = StandardPondcolor;
        if (el.className.indexOf(" complete ") < 0) {
            StandardPondCount++;
        } else {
            if (isChecked) el.style.backgroundColor = "white";
        }
        } else if (GrubMice.indexOf(mouseName) > -1) {
        el.style.backgroundColor = Grubcolor;
        if (el.className.indexOf(" complete ") < 0) {
            GrubCount++;
        } else {
            if (isChecked) el.style.backgroundColor = "white";
        }
        } else if (ClamMice.indexOf(mouseName) > -1) {
        el.style.backgroundColor = Clamcolor;
        if (el.className.indexOf(" complete ") < 0) {
            ClamCount++;
        } else {
            if (isChecked) el.style.backgroundColor = "white";
        }
        } else if (StormyMice.indexOf(mouseName) > -1) {
        el.style.backgroundColor = Stormycolor;
        if (el.className.indexOf(" complete ") < 0) {
            StormyCount++;
        } else {
            if (isChecked) el.style.backgroundColor = "white";
        }
        } else if (StandardNonWritingMice.indexOf(mouseName) > -1) {
        el.style.backgroundColor = StandardNonWritingcolor;
        if (el.className.indexOf(" complete ") < 0) {
            StandardNonWritingCount++;
        } else {
            if (isChecked) el.style.backgroundColor = "white";
        }
        } else if (StandardWritingMice.indexOf(mouseName) > -1) {
        el.style.backgroundColor = StandardWritingcolor;
        if (el.className.indexOf(" complete ") < 0) {
            StandardWritingCount++;
        } else {
            if (isChecked) el.style.backgroundColor = "white";
        }
        } else if (SBOnlyMice.indexOf(mouseName) > -1) {
        el.style.backgroundColor = SBOnlycolor;
        if (el.className.indexOf(" complete ") < 0) {
            SBOnlyCount++;
        } else {
            if (isChecked) el.style.backgroundColor = "white";
        }
        } else if (FirstDDMice.indexOf(mouseName) > -1) {
        el.style.backgroundColor = FirstDDcolor;
        if (el.className.indexOf(" complete ") < 0) {
            FirstDDCount++;
        } else {
            if (isChecked) el.style.backgroundColor = "white";
        } 
        } else if (SecondDDMice.indexOf(mouseName) > -1) {
            el.style.backgroundColor = SecondDDcolor;
            if (el.className.indexOf(" complete ") < 0) {
                SecondDDCount++;
            } else {
                if (isChecked) el.style.backgroundColor = "white";
            }
        } else if (FinalDDMice.indexOf(mouseName) > -1) {
            el.style.backgroundColor = FinalDDcolor;
            if (el.className.indexOf(" complete ") < 0) {
                FinalDDCount++;
            } else {
                if (isChecked) el.style.backgroundColor = "white";
            }
        }
    });
    
    Seedcolor = SeedCount > 0 ? Seedcolor : greycolor;
    FarmSpecialcolor = FarmSpecialCount > 0 ? FarmSpecialcolor : greycolor;
    Pestscolor = PestsCount > 0 ? Pestscolor : greycolor;
    StandardPondcolor = StandardPondCount > 0 ? StandardPondcolor : greycolor;
    Grubcolor = GrubCount > 0 ? Grubcolor : greycolor;
    Clamcolor = ClamCount > 0 ? Clamcolor : greycolor;
    Stormycolor = StormyCount > 0 ? Stormycolor : greycolor;
    StandardNonWritingcolor = StandardNonWritingCount > 0 ? StandardNonWritingcolor : greycolor;
    StandardWritingcolor = StandardWritingCount > 0 ? StandardWritingcolor : greycolor;
    SBOnlycolor = SBOnlyCount > 0 ? SBOnlycolor : greycolor;
    FirstDDcolor = FirstDDCount > 0 ? FirstDDcolor : greycolor;
    SecondDDcolor = SecondDDCount > 0 ? SecondDDcolor : greycolor;
    FinalDDcolor = FinalDDCount > 0 ? FinalDDcolor : greycolor;
    
    // Remove existing GWH Map related elements before proceeding
    document.querySelectorAll(".ff-map").forEach(el => el.remove());
    
    const masterDiv = document.createElement("div");
    masterDiv.className = "ff-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: 10px; text-shadow: 0px 0px 11px white";
    
    const SeedSpan = document.createElement("span");
    SeedSpan.style = "background-color: " + Seedcolor + spanStyle;
    SeedSpan.innerHTML = "Seed<br>" + SeedCount;
    
    const FarmSpecialSpan = document.createElement("span");
    FarmSpecialSpan.style = "background-color: " + FarmSpecialcolor + spanStyle;
    FarmSpecialSpan.innerHTML = "Farm Spec<br>" + FarmSpecialCount;
    
    const PestsSpan = document.createElement("span");
    PestsSpan.style = "background-color: " + Pestscolor + spanStyle;
    PestsSpan.innerHTML = "Pest<br>" + PestsCount;
    
    const StandardPondSpan = document.createElement("span");
    StandardPondSpan.style = "background-color: " + StandardPondcolor + spanStyle;
    StandardPondSpan.innerHTML = "Pd Std<br>" + StandardPondCount;
    
    const GrubSpan = document.createElement("span");
    GrubSpan.style = "background-color: " + Grubcolor + spanStyle;
    GrubSpan.innerHTML = "Grub<br>" + GrubCount;
    
    const ClamSpan = document.createElement("span");
    ClamSpan.style = "background-color: " + Clamcolor + spanStyle;
    ClamSpan.innerHTML = "Clam<br>" + ClamCount;
    
    const StormySpan = document.createElement("span");
    StormySpan.style = "background-color: " + Stormycolor + spanStyle;
    StormySpan.innerHTML = "Storm<br>" + StormyCount;
    
    const StandardNonWritingSpan = document.createElement("span");
    StandardNonWritingSpan.style = "background-color: " + StandardNonWritingcolor + spanStyle;
    StandardNonWritingSpan.innerHTML = "Std w/o write<br>" + StandardNonWritingCount;
    
    const StandardWritingSpan = document.createElement("span");
    StandardWritingSpan.style = "background-color: " + StandardWritingcolor + spanStyle;
    StandardWritingSpan.innerHTML = "Std w write<br>" + StandardWritingCount;
    
    const SBOnlySpan = document.createElement("span");
    SBOnlySpan.style = "background-color: " + SBOnlycolor + spanStyle;
    SBOnlySpan.innerHTML = "SB Only<br>" + SBOnlyCount;
    
    const FirstDDSpan = document.createElement("span");
    FirstDDSpan.style = "background-color: " + FirstDDcolor + spanStyle;
    FirstDDSpan.innerHTML = "1DD<br>" + FirstDDCount;

    const SecondDDSpan = document.createElement("span");
    SecondDDSpan.style = "background-color: " + SecondDDcolor + spanStyle;
    SecondDDSpan.innerHTML = "2DD<br>" + SecondDDCount;

    const FinalDDSpan = document.createElement("span");
    FinalDDSpan.style = "background-color: " + FinalDDcolor + spanStyle;
    FinalDDSpan.innerHTML = "FDD<br>" + FinalDDCount;
    
    // 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 = "ff-map";
    highlightDiv.style = "float: right; position: relative; z-index: 1";
    highlightDiv.appendChild(highlightBox);
    highlightDiv.appendChild(highlightLabel);
    
    // Assemble masterDiv
    masterDiv.appendChild(SBOnlySpan);
    masterDiv.appendChild(SeedSpan);
    masterDiv.appendChild(PestsSpan);
    masterDiv.appendChild(FarmSpecialSpan);
    masterDiv.appendChild(StandardPondSpan);
    masterDiv.appendChild(GrubSpan);
    masterDiv.appendChild(ClamSpan);
    masterDiv.appendChild(StormySpan);
    masterDiv.appendChild(StandardNonWritingSpan);
    masterDiv.appendChild(StandardWritingSpan);
    masterDiv.appendChild(FirstDDSpan);
    masterDiv.appendChild(SecondDDSpan);
    masterDiv.appendChild(FinalDDSpan);
    
    // 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"
        );
    
        // Add in FF map names here
        if (chestEl) {
        const chestName = chestEl.textContent;
        if (
            chestName &&
            (chestName.indexOf("Farming and Fishing Treasure Chest") >= 0) || (chestName.indexOf("Folklore Forest Prelude Treasure Chest") >= 0)
        ) {
            colorize();
        }
        }
    });
    originalOpen.apply(this, arguments);
    };