MH Region Quick Travel

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

스크립트 설치?
개발자의 추천 스크립트

MH: Profile+는 어떤가요?

스크립트 설치
질문, 리뷰하거나, 이 스크립트를 신고하세요.
// ==UserScript==
// @name         MH Region Quick Travel
// @author       Warden Slayer
// @namespace    https://greasyfork.org/en/users/227259-wardenslayer
// @version      1.6.8
// @description  Adds a travel toolbar to the HUD to make traveling between areas in the same region quicker and easier
// @icon         https://www.mousehuntgame.com/images/items/weapons/974151e440f297f1b6d55385310ac63c.jpg?cv=2
// @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) {
  //console.log(options.url);
  let properties = JSON.parse(localStorage.getItem('ws.mh.travel.props'));
  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();
  }
});

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

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('props', properties);
    }
  });
}

function buildTravelBar() {
  if ($('.travelBarContainer').length > 0) {
    $('.travelBarContainer').remove();
  }
  const mousehuntHud = $('#hudLocationContent');
  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: '4px',
      });
      $(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: '4px',
      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',
      'halloween_event_location',
    ];
  } 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',
      'slushy_shoreline',
      '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 == 'Folklore Forest') {
    tags = [
      'foreword_farm',
      'prologue_pond',
      'table_of_contents',
      'bountiful_beanstalk',
      'school_of_sorcery',
      'draconic_depths',
    ];
  } else if (currentRegion == 'Rift Plane') {
    tags = [
      'rift_gnawnia',
      'rift_burroughs',
      'rift_whisker_woods',
      'rift_furoma',
      'rift_bristle_woods',
      'rift_valour',
    ];
  } else if (currentRegion == 'Great Winter Taiga') {
    tags = [
      'winter_hunt_grove',
      'winter_hunt_workshop',
      'winter_hunt_fortress',
    ];
  }
  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: 'SSH IV',
    seasonal_garden: 'Seasonal Garden',
    zugzwang_tower: "Zugzwang's Tower",
    zugzwang_library: 'Crystal Library',
    slushy_shoreline: 'Slushy Shoreline',
    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',
    foreword_farm: 'Foreword Farm',
    prologue_pond: 'Prologue Pond',
    table_of_contents: 'Table of Contents',
    bountiful_beanstalk: 'Bountiful Beanstalk',
    school_of_sorcery: 'School of Sorcery',
    draconic_depths: 'Draconic Depths',
    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',
    winter_hunt_grove: 'Cinnamon Hill',
    winter_hunt_workshop: 'Golem Workshop',
    winter_hunt_fortress: 'Ice Fortress',
    halloween_event_location: 'Gloomy Greenwood',
  };
  return locNames[tag];
}