Greasy Fork

MH Region Quick Travel

Adds a travel toolbar to the HUD to make traveling between areas in the same region quicker and easier

目前为 2022-01-31 提交的版本。查看 最新版本

// ==UserScript==
// @name         MH Region Quick Travel
// @author       Warden Slayer - Warden Slayer#2010
// @namespace    https://greasyfork.org/en/users/227259-wardenslayer
// @version      1.2
// @description  Adds a travel toolbar to the HUD to make traveling between areas in the same region quicker and easier
// @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 (debug == true) {
        console.log('Region Quick Travel Started');
    }
    loadFunction();
});

$(document).ajaxComplete(function(event,xhr,options){
    let properties = JSON.parse(localStorage.getItem('ws.mh.travel.props'));
    if (options.url == 'https://www.mousehuntgame.com/managers/ajax/users/userData.php') {
        //
    } else if (options.url == 'https://www.mousehuntgame.com/managers/ajax/users/changeenvironment.php') {
        properties.previousLocation = properties.currentLocation;
        localStorage.setItem('ws.mh.travel.props',JSON.stringify(properties));
        loadFunction();
    } else {
        loadFunction();
    }
});

function loadFunction() {
    getData();
    setTimeout(buildTravelBar, 500);
}

function getData() {
    const debug = localStorage.getItem('ws.debug');
    let properties = JSON.parse(localStorage.getItem('ws.mh.travel.props'));
    if (properties) {
    } else {
        properties = {};
    }
    const userID = user.sn_user_id;
    const dataItemOfInterest = ['region_name','not_a_real_field'];
    hg.utils.User.getUserData([userID],dataItemOfInterest,function(data) {
        properties.currentRegion = data[0].region_name;
        properties.currentLocation = user.environment_type;
        localStorage.setItem('ws.mh.travel.props',JSON.stringify(properties));
        if (debug == true) {
            console.log(properties);
        }
    });
}

function buildTravelBar() {
    if ($('.travelBarContainer').length > 0) {
        $('.travelBarContainer').remove();
    }
    const mousehuntHud = $('#hudLocationContent');
    $(mousehuntHud).css({
        'margin': 0,
    });
    const travelBarContainer = document.createElement("div");
    travelBarContainer.classList.add('travelBarContainer');
    $(travelBarContainer).css({
        'float': 'left',
        'text-align': 'left',
        'width': '97%',
        'height': '25px',
        'margin': '5px',
        'padding': '2px',
        'background': 'linear-gradient(90deg, rgba(215,215,215,1) 2%, rgba(213,213,215,1) 71%, rgba(228,228,228,1) 100%)',
        'border': '2px solid black',
    });
    mousehuntHud.after(travelBarContainer);
    let properties = JSON.parse(localStorage.getItem('ws.mh.travel.props'));
    const regionAreas = getRegionLocations(properties.currentRegion,properties.previousLocation);
    regionAreas.forEach(function(array) {
        let thisTag = Object.keys(array)[0];
        let thisName = array[thisTag];
        if (thisTag == properties.currentLocation) {
        } else {
            const thisButton = document.createElement("button");
            thisButton.id = 'regionTravelButton';
            $(thisButton).attr('destination', thisTag);
            $(thisButton).addClass('mousehuntActionButton small');
            const title = 'Travel to '+thisName;
            $(thisButton).attr('title', title);
            const travelText = document.createElement('span');
            $(travelText).addClass('travelText').text(thisName).css({
                'font-size': '12px',
            });
            $(thisButton).css({
                'marginRight': "5px",
            });
            $(thisButton).append(travelText);
            travelBarContainer.append(thisButton);
        }
    });
    if (properties.previousLocation) {
        const returnButton = document.createElement("button");
        returnButton.id = 'returnButton';
        if (properties.previousLocation) {
            $(returnButton).attr('destination', properties.previousLocation);
        }
        $(returnButton).addClass('mousehuntActionButton small');
        const title = 'Return to previous location: '+getLocationNames(properties.previousLocation);
        $(returnButton).attr('title', title);
        const returnText = document.createElement('span');

        $(returnText).addClass('travelText').text('Go Back').css({
            'font-size': '12px',
        });
        $(returnButton).css({
            'marginRight': "5px",
            'float': 'right',
        });
        $(returnButton).append(returnText);
        travelBarContainer.append(returnButton);
    }

}
$(document).on('click', '#regionTravelButton, #returnButton', function() {
    const debug = localStorage.getItem('ws.debug');
    let properties = JSON.parse(localStorage.getItem('ws.mh.travel.props'));
    properties.previousLocation = user.environment_type;
    localStorage.setItem('ws.mh.travel.props',JSON.stringify(properties));
    if (debug == true) {
        console.log(properties);
    }
    app.pages.TravelPage.travel($(this).attr('destination'));
});


function getRegionLocations(currentRegion) {
    let regionAreas = [];
    let tags = [];
    if (currentRegion == 'Gnawnia') {
        tags = ['meadow','town_of_gnawnia','windmill','harbour','mountain'];
    } else if (currentRegion == 'Valour') {
        tags = ['kings_arms','tournament_hall','kings_gauntlet'];
    } else if (currentRegion == 'Whisker Woods') {
        tags = ['calm_clearing','great_gnarled_tree','lagoon'];
    } else if (currentRegion == 'Burroughs') {
        tags = ['laboratory','mousoleum','town_of_digby','bazaar','pollution_outbreak'];
    } else if (currentRegion == 'Furoma') {
        tags = ['training_grounds','dojo','meditation_room','pinnacle_chamber'];
    } else if (currentRegion == 'Bristle Woods') {
        tags = ['catacombs','forbidden_grove'];
    } else if (currentRegion == 'Tribal Isles') {
        tags = ['cape_clawed','elub_shore','nerg_plains','derr_dunes','jungle_of_dread','dracano','balacks_cove'];
    } else if (currentRegion == 'Varmint Valley') {
        tags = ['claw_shot_city','train_station','fort_rox'];
    } else if (currentRegion == 'Queso Canyon') {
        tags = ['queso_river','queso_plains','queso_quarry','queso_geyser'];
    } else if (currentRegion == 'Rodentia') {
        tags = ['ss_huntington_ii','seasonal_garden','zugzwang_tower','zugzwang_library','iceberg','sunken_city'];
    } else if (currentRegion == 'Sandtail Desert') {
        tags = ['desert_warpath','desert_city','desert_oasis','lost_city','sand_dunes'];
    } else if (currentRegion == 'Hollow Heights') {
        tags = ['fungal_cavern','labyrinth','ancient_city','moussu_picchu','floating_islands'];
    } else if (currentRegion == 'Rift Plane') {
        tags = ['rift_gnawnia','rift_burroughs','rift_whisker_woods','rift_furoma','rift_bristle_woods','rift_valour'];
    }
    tags.forEach(function(loc) {
        const thisLocation = {};
        thisLocation[loc] = getLocationNames(loc);
        regionAreas.push(thisLocation);
    });
    return regionAreas;
}

function getLocationNames(tag) {
    const locNames = {
        'meadow':'Meadow',
        'town_of_gnawnia':'Town of Gnawnia',
        'windmill':'Windmill',
        'harbour':'Harbour',
        'mountain':'Mountain',
        'kings_arms':"King's Arms",
        'tournament_hall':'Tournament Hall',
        'kings_gauntlet':"King's Gauntlet",
        'calm_clearing':'Calm Clearing',
        'great_gnarled_tree':'Great Gnarled Tree',
        'lagoon':'Lagoon',
        'laboratory':'Laboratory',
        'mousoleum':'Mousoleum',
        'town_of_digby':'Town of Digby',
        'bazaar':'Bazaar',
        'pollution_outbreak':'Toxic Spill',
        'training_grounds':'Training Grounds',
        'dojo':'Dojo',
        'meditation_room':'Meditation Room',
        'pinnacle_chamber':'Pinnacle Chamber',
        'catacombs':'Catacombs',
        'forbidden_grove':'Forbidden Grove',
        'cape_clawed':'Cape Clawed',
        'elub_shore':'Elub Shore',
        'nerg_plains':'Nerg Plains',
        'derr_dunes':'Derr Dunes',
        'jungle_of_dread':'Jungle of Dread',
        'dracano':'Dracano',
        'balacks_cove':"Balack's Cove",
        'claw_shot_city':'Claw Shot City',
        'train_station':'Gnawnian Express Station',
        'fort_rox':'Fort Rox',
        'queso_river':'Queso River',
        'queso_plains':'Prickly Plains',
        'queso_quarry':'Cantera Quarry',
        'queso_geyser':'Queso Geyser',
        'ss_huntington_ii':'S.S. Huntington IV',
        'seasonal_garden':'Seasonal Garden',
        'zugzwang_tower':"Zugzwang's Tower",
        'zugzwang_library':'Crystal Library',
        'iceberg':'Iceberg','sunken_city':'Sunken City',
        'desert_warpath':'Fiery Warpath',
        'desert_city':'Muridae Market',
        'desert_oasis':'Living Garden',
        'lost_city':'Lost City',
        'sand_dunes':'Sand Dunes',
        'fungal_cavern':'Fungal Cavern',
        'labyrinth':'Labyrinth',
        'ancient_city':'Zokor',
        'moussu_picchu':'Moussu Picchu',
        'floating_islands':'Floating Islands',
        'rift_gnawnia':'Gnawnia Rift',
        'rift_burroughs':'Burroughs Rift',
        'rift_whisker_woods':'Whisker Woods Rift',
        'rift_furoma':'Furoma Rift',
        'rift_bristle_woods':'Bristle Woods Rift',
        'rift_valour':'Valour Rift'
    };
    return locNames[tag];
}