Greasy Fork

MH: Floating Islands HUD Enhancer

See more thing on your floating islands HUD!

目前为 2021-04-07 提交的版本。查看 最新版本

// ==UserScript==
// @name         MH: Floating Islands HUD Enhancer
// @author       Warden Slayer - Warden Slayer#2010
// @namespace    https://greasyfork.org/en/users/227259-wardenslayer
// @version      1.0.8
// @description  See more thing on your floating islands HUD!
// @include      https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js
// @include      http://www.mousehuntgame.com/*
// @include      https://www.mousehuntgame.com/*
// ==/UserScript==
$(document).ready(function() {
    const debug = localStorage.getItem('ws.debug');
    if (user.environment_name == 'Floating Islands') {
        if (debug == true) {
            console.log('FI Script Started');
        }
        loadFunction()
    } else {
        if (debug == true) {
            console.log('Not in the FI');
        }
    }
});

function loadFunction() {
    updateAndRender()
    watchThePopup();
}

//HUD Code
function updateAndRender() {
    localStorage.setItem('ws.fi.ocLevel', user.quests.QuestFloatingIslands.airship.oculus_level);
    hg.utils.UserInventory.getItem('sky_pirate_seal_stat_item', function(data) {
        localStorage.setItem('ws.fi.numSeals', data.quantity);
        hg.utils.UserInventory.getItem('floating_trap_upgrade_stat_item', function(data) {
            localStorage.setItem('ws.fi.numJewels', data.quantity);
            hg.utils.UserInventory.getItem('floating_islands_cloud_gem_stat_item', function(data) {
                localStorage.setItem('ws.fi.numGlass', data.quantity);
                hg.utils.UserInventory.getItem('floating_islands_sky_ore_stat_item', function(data) {
                    localStorage.setItem('ws.fi.numOre', data.quantity);
                    buildHUD()
                }, true);
            }, true);
        }, true);
    }, true);
}

function buildHUD() {
    let body = $('.floatingIslandsHUD-statItemContainer');
    $(body).css({
        'width': '350px',
    });
    if ($('.floatingIslandsHUD-statItem-separator').get(0)) {
        $('.floatingIslandsHUD-statItem-separator').hide();
    }
    let bangles = $('.floatingIslandsHUD-statItem.mousehuntTooltipParent[data-item-type="cloudstone_bangle_stat_item"]');
    //Seals
    let pirateSeals = "";
    if ($("[data-item-type=pirate_seals]").get(0)) {
        pirateSeals = $("[data-item-type=pirate_seals]");
    } else {
        pirateSeals = $(bangles).clone().prependTo(body);
    }
    pirateSeals.attr('data-item-type', 'pirate_seals');
    $(pirateSeals).find('.floatingIslandsHUD-item-image.cloudstone_bangle_stat_item').removeClass('cloudstone_bangle_stat_item').addClass('pirate_seals');
    $('.floatingIslandsHUD-item-image.pirate_seals').css({
        'background-image': 'url(https://www.mousehuntgame.com/images/items/stats/db3bb7de0241624283b99481f7c7a6b8.gif?cv=247)',
    });
    $(pirateSeals).find('.floatingIslandsHUD-statItem-quantity.quantity').attr('data-item-type', 'pirate_seals').text(localStorage.getItem('ws.fi.numSeals'));
    $(pirateSeals).find('.mousehuntTooltip.tight.top.noEvents').text('Sky Pirate Seals').css({
        'font-weight': 'bold',
    });
    //Jewels
    let jewels = "";
    if ($("[data-item-type=jewels]").get(0)) {
        jewels = $("[data-item-type=jewels]");
    } else {
        jewels = $(bangles).clone().appendTo(body);
    }
    jewels.attr('data-item-type', 'jewels');
    $(jewels).find('.floatingIslandsHUD-item-image.cloudstone_bangle_stat_item').removeClass('cloudstone_bangle_stat_item').addClass('jewels');
    $('.floatingIslandsHUD-item-image.jewels').css({
        'background-image': 'url(https://www.mousehuntgame.com/images/items/stats/964b5aeaac26714cac2ffa7194e55176.gif?cv=247)',
    });
    //console.log(localStorage.getItem('ws.fi.numJewels'))
    $(jewels).find('.floatingIslandsHUD-statItem-quantity.quantity').attr('data-item-type', 'jewels').text(parseInt(localStorage.getItem('ws.fi.numJewels'), 10));
    $(jewels).find('.mousehuntTooltip.tight.top.noEvents').text('Adorned Empyrean Jewel').css({
        'font-weight': 'bold',
    });
    //Hide Wind on islands not launchpad
    if ($('.floatingIslandsHUD.launch_pad_island ').length == 0) {
        $('.floatingIslandsHUD-statItem.mousehuntTooltipParent').filter('[data-item-type=bottled_wind_stat_item]').hide();
    }
    //Ore/Glass
    const oculusLevel = localStorage.getItem('ws.fi.ocLevel');
    const skyGlass = $('.floatingIslandsHUD-craftingItem.floating_islands_cloud_gem_stat_item').find("[data-item-type=floating_islands_cloud_gem_stat_item]")
    const skyGlassQty = parseInt(localStorage.getItem('ws.fi.numGlass'), 10)
    const skyOre  = $('.floatingIslandsHUD-craftingItem.floating_islands_sky_ore_stat_item').find("[data-item-type=floating_islands_sky_ore_stat_item]")
    const skyOreQty = parseInt(localStorage.getItem('ws.fi.numOre'), 10)
    let upgradeCost = 0;
    if (oculusLevel == 1) {
        upgradeCost = 35;
    } else if (oculusLevel == 2) {
        upgradeCost = 150;
    } else if (oculusLevel == 3) {
        upgradeCost = 500;
    } else if (oculusLevel == 4) {
        upgradeCost = '1.2k';
    } else if (oculusLevel == 5) {
        upgradeCost = '2k';
    } else if (oculusLevel == 6) {
        upgradeCost = '3.5k';
    } else if (oculusLevel == 7) {
        upgradeCost = '8k';
    } else if (oculusLevel == 8) {
        upgradeCost = '10k';
    } else if (oculusLevel == 9) {
        upgradeCost = '2.5k';
    }
    $(skyGlass).text(skyGlassQty + '/' + upgradeCost);
    $(skyOre).text(skyOreQty + '/' + upgradeCost);
    //Warden/Paragon Progress
    const allRemainingHunts = user.quests.QuestFloatingIslands.hunting_site_atts.enemy_encounter_hunts_remaining;
    let warGons = 'Paragon: ';
    if (user.quests.QuestFloatingIslands.hunting_site_atts.has_enemy == null) {
        warGons = 'Enemy: ';
    } else if (user.quests.QuestFloatingIslands.hunting_site_atts.is_high_altitude == null) {
        warGons = 'Warden: ';
    }
    $('.floatingIslandsHUD-enemy-state.enemyApproaching:not(.enemyActive)').text(warGons + allRemainingHunts);
    //wind on maybe
    const useWind = localStorage.getItem('ws.fi.useWind');
    const numWind = parseInt($('.floatingIslandsHUD-statItem-quantity.quantity').filter('[data-item-type=bottled_wind_stat_item]').text(),10);
    if (useWind == 'yes') {
        if (user.quests.QuestFloatingIslands.hunting_site_atts.is_fuel_enabled) {
            localStorage.setItem('ws.fi.useWind', 'no');
        } else {
            if (numWind > 0 ) {
                hg.views.HeadsUpDisplayFloatingIslandsView.toggleFuel();
            }
        }
    }
    //Hide retreat button if the warden/paragon is not caught already
    if (user.quests.QuestFloatingIslands.hunting_site_atts.has_encountered_enemy) {
        $('.floatingIslandsHUD-retreatButton').show();
    } else {
        $('.floatingIslandsHUD-retreatButton').hide();
    }
}

//Paragon Overlay
function watchThePopup() {
    const popupWatcher = new MutationObserver(callbackPopup);
    const popupWatcherOptons = {
        childList: false,
        attributes: true,
        subtree: false,
    };
    popupWatcher.observe($('#overlayPopup').get(0), popupWatcherOptons);
}

function callbackPopup(mutationList, observer) {
    const mutation = $(mutationList).get(0);
    if (mutation.type == 'attributes') {
        if ($('.floatingIslandsAdventureBoard-container').get(0)) {
            observer.disconnect();
            setTimeout(renderSkyMap, 100);
        }
    }
}

function renderSkyMap() {
    drawParagons()
    //cycleTracker()
    const body = $('.floatingIslandsAdventureBoard-trapLibrary');
    $(body).removeAttr("href").removeAttr("onclick");
    const trapLibrary = $('.floatingIslandsAdventureBoard-trapLibrary-text:not(.wind)');
    let useWindDiv = $('.floatingIslandsAdventureBoard-trapLibrary-text.wind');
    if ($(useWindDiv).length == 0) {
        useWindDiv = $(trapLibrary).clone().appendTo(body);
        $(useWindDiv).addClass('wind');
    }
    let useWindCb = $(useWindDiv).find('.floatingIslandsAdventureBoard-trapLibrary-checkbox');
    $(useWindCb).addClass('wind');
    $(useWindDiv).children().empty().append(useWindCb).append("Use Wind");
    forceWind()
}

function forceWind() {
    const windBox = $('.floatingIslandsAdventureBoard-trapLibrary-checkbox.wind');
    const useWind = localStorage.getItem('ws.fi.useWind');
    if (useWind == 'yes') {
        $(windBox).prop('checked',true)
    } else {
        $(windBox).prop('checked',false)
    }
}

$(document).on('click', '.floatingIslandsAdventureBoard-trapLibrary-text:not(.wind)', function() {
    if ($('.floatingIslandsAdventureBoard-trapLibrary').hasClass('disabled')){
    } else {
        hg.views.FloatingIslandsAdventureBoardView.toggleUseSavedSetup()
        setTimeout(forceWind, 500)
    }
})
$(document).on('click', '.floatingIslandsAdventureBoard-trapLibrary-text.wind', function() {
    const windBox = $('.floatingIslandsAdventureBoard-trapLibrary-checkbox.wind');
    const useWind = localStorage.getItem('ws.fi.useWind');
    if ($('.floatingIslandsAdventureBoard-trapLibrary').hasClass('disabled')){
    } else {
        if (useWind == 'yes') {
            $(windBox).prop('checked',false)
            localStorage.setItem('ws.fi.useWind', 'no')
        } else {
            $(windBox).prop('checked',true)
            localStorage.setItem('ws.fi.useWind', 'yes')
        }
    }
})

//to do
function cycleTracker() {
    $('.floatingIslandsAdventureBoard-rerollImage').text('1234').css({
        'font-size': '14x',
        'font-weight': 'bold',
        'color': 'red',
    });

}

function drawParagons() {
    const overlayCont = $('.floatingIslandsAdventureBoard-container');
    const physicalParagon = $('.floatingIslandsHUD-powerType.physical:not(.fipcmask)');
    const physicalCatch = hg.utils.MouseUtil.getMouse('physical_paragon', function(resp) {
        return resp.num_catches;
    });
    const tacticalParagon = $('.floatingIslandsHUD-powerType.tactical:not(.fipcmask)');
    const tacticalCatch = hg.utils.MouseUtil.getMouse('tactical_paragon', function(resp) {
        return resp.num_catches;
    });
    const lawParagon = $('.floatingIslandsHUD-powerType.law:not(.fipcmask)');
    const lawCatch = hg.utils.MouseUtil.getMouse('law_paragon', function(resp) {
        return resp.num_catches;
    });
    const draconicParagon = $('.floatingIslandsHUD-powerType.draconic:not(.fipcmask)');
    const draconicCatch = hg.utils.MouseUtil.getMouse('draconic_paragon', function(resp) {
        return resp.num_catches;
    });
    const arcaneParagon = $('.floatingIslandsHUD-powerType.arcane:not(.fipcmask)');
    const arcaneCatch = hg.utils.MouseUtil.getMouse('arcane_paragon', function(resp) {
        return resp.num_catches;
    });
    const forgottenParagon = $('.floatingIslandsHUD-powerType.forgotten:not(.fipcmask)');
    const forgottenCatch = hg.utils.MouseUtil.getMouse('forgotten_paragon', function(resp) {
        return resp.num_catches;
    });
    const hydroParagon = $('.floatingIslandsHUD-powerType.hydro:not(.fipcmask)');
    const hydroCatch = hg.utils.MouseUtil.getMouse('hydro_paragon', function(resp) {
        return resp.num_catches;
    });
    const shadowParagon = $('.floatingIslandsHUD-powerType.shadow:not(.fipcmask)');
    const shadowCatch = hg.utils.MouseUtil.getMouse('shadow_paragon', function(resp) {
        return resp.num_catches;
    });
    $(physicalParagon).text(physicalCatch);
    $(tacticalParagon).text(tacticalCatch);
    $(lawParagon).text(lawCatch);
    $(draconicParagon).text(draconicCatch);
    $(arcaneParagon).text(arcaneCatch);
    $(forgottenParagon).text(forgottenCatch);
    $(hydroParagon).text(hydroCatch);
    $(shadowParagon).text(shadowCatch);
    $('.floatingIslandsHUD-powerType').css({
        'font-size': '14x',
        'font-weight': 'bold',
        'color': 'blue',
    });
    watchThePopup();
}

$(document).ajaxStop(function(){
    if (user.environment_name == 'Floating Islands') {
        loadFunction()
    }
});