Greasy Fork

MH: Warpath Wave Calculator

Keeps track of reamining wave mice to help you manage the wave.

目前为 2019-09-17 提交的版本。查看 最新版本

// ==UserScript==
// @name         MH: Warpath Wave Calculator
// @author       Warden Slayer - Warden Slayer#2302
// @namespace    https://greasyfork.org/en/users/227259-wardenslayer
// @version      0.9
// @description  Keeps track of reamining wave mice to help you manage the wave.
// @include      https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
// @include      http://www.mousehuntgame.com/*
// @include      https://www.mousehuntgame.com/*
// ==/UserScript==
$(document).ready(function() {
    var observer = new MutationObserver(callback);
    var observerOptions = {
        childList: true,
        attributes: false,
        subtree: false,
        characterData: false
    };
    if ($(".hudLocationContent.desert_warpath").get(0)) {
        if ($('.warpathHUD-streak-quantity').get(0)) {
            observer.observe($('.warpathHUD-streak-quantity').get(0), observerOptions);
        }
        updateWave();
    }
});

function callback(mutationList, observer) {
    mutationList.forEach(mutation => {
        switch (mutation.type) {
            case "childList":
                updateWave()
                break;
        }
    });
}

function updateWave() {
    var wave = "";
    var waveRetreat = "";
    var waveMice = "";
    var warrior = "";
    var scout = "";
    var archer = "";
    var cavalry = "";
    var mage = "";
    var artillery = "";
    var streakedW = 0;
    var streakedS = 0;
    var streakedA = 0;
    var streakedC = 0;
    var streakedM = 0;
    var streakedF = 0;
    var retreatText = "";
    var streak = parseInt($('.warpathHUD-streak-quantity').text(), 10)
    if ($('.warpathHUD.showPortal.wave_1').get(0)) {
        wave = 1;
        waveRetreat = 10;
        waveMice = $('.warpathHUD-wave.wave_1').children();
    } else if ($('.warpathHUD.showPortal.wave_2').get(0)) {
        wave = 2;
        waveRetreat = 18;
        waveMice = $('.warpathHUD-wave.wave_2').children();
    } else if ($('.warpathHUD.showPortal.wave_3').get(0)) {
        wave = 3;
        waveRetreat = 26;
        waveMice = $('.warpathHUD-wave.wave_3').children();
    } else {
        return
    }
    if (waveMice.get(0)) {
        warrior = waveMice.get(0);
        var remainingW = parseInt($(warrior).find('.warpathHUD-wave-mouse-population').text(), 10);
        if (remainingW >= streak) {
            streakedW = streak;
        } else {
            streakedW = remainingW;
        }
    } else {
        remainingW = 0;
        streakedW = remainingW;
    }
    if (waveMice.get(1)) {
        scout = waveMice.get(1);
        var remainingS = parseInt($(scout).find('.warpathHUD-wave-mouse-population').text(), 10);
        if (remainingS >= streak) {
            streakedS = streak;
        } else {
            streakedS = remainingS;
        }
    } else {
        remainingS = 0;
        streakedS = remainingS;
    }
    if (waveMice.get(2)) {
        archer = waveMice.get(2);
        var remainingA = parseInt($(archer).find('.warpathHUD-wave-mouse-population').text(), 10);
        if (remainingA >= streak) {
            streakedA = streak;
        } else {
            streakedA = remainingA;
        }
    } else {
        remainingA = 0;
        streakedA = remainingA;
    }
    if (waveMice.get(3)) {
        cavalry = waveMice.get(3);
        var remainingC = parseInt($(cavalry).find('.warpathHUD-wave-mouse-population').text(), 10);
        if (remainingC >= streak) {
            streakedC = streak;
        } else {
            streakedC = remainingC;
        }
    } else {
        remainingC = 0;
        streakedC = remainingC;
    }
    if (waveMice.get(4)) {
        mage = waveMice.get(4);
        var remainingM = parseInt($(mage).find('.warpathHUD-wave-mouse-population').text(), 10);
        if (remainingM >= streak) {
            streakedM = streak;
        } else {
            streakedM = remainingM;
        }
    } else {
        remainingM = 0;
        streakedM = remainingM;
    }
    if (waveMice.get(5)) {
        artillery = waveMice.get(5);
        var remainingF = parseInt($(artillery).find('.warpathHUD-wave-mouse-population').text(), 10);
        if (remainingF >= streak) {
            streakedF = streak;
        } else {
            streakedF = remainingF;
        }
    } else {
        remainingF = 0;
        streakedF = remainingF;
    }
    var totalRemaining = 0 + remainingW + remainingS + remainingA + remainingC + remainingM + remainingF;
    const panicMeter = $('.warpathHUD-moraleBar.mousehuntTooltipParent');
    var streaked = 0 + streakedW + streakedS + streakedA + streakedC + streakedM + streakedF;
    if (totalRemaining > waveRetreat) {
        var retreatingIn = totalRemaining - waveRetreat;
        if (retreatingIn > 1) {
            retreatText = retreatingIn + " catches left";
        } else {
            retreatText = "Last Catch!";
        }
        $(panicMeter).text(retreatText).css({
            'padding': '1px',
            'font-size': '10px',
            'font-weight': 'bold',
            'text-align': 'center'
        })
    } else {
        retreatText = "Retreated";
        $(panicMeter).text(retreatText).css({
            'padding': '1px',
            'font-size': '10px',
            'font-weight': 'bold',
            'text-align': 'center'
        })
    }
    var highLow = (totalRemaining - streaked) - waveRetreat;
    if (highLow > 0) {
        const plus = "+";
        highLow = plus.concat(highLow);
    }
    var resultString = "Wave commander cutoff: " + waveRetreat + "\nMice left after commander: " + (totalRemaining - streaked) + " (" + highLow + ")";
    return resultString
}
$('.warpathHUD-moraleBar.mousehuntTooltipParent').mouseover(function() {
    var title = updateWave();
    $('.warpathHUD-moraleBar.mousehuntTooltipParent').attr('title', title);
    $('.warpathHUD-moraleBar.mousehuntTooltipParent').css('cursor', 'pointer');
});