UNPKG

mh3-data

Version:

Monster Hunter Tri data for monsters, quests, and weapons

148 lines 4.33 kB
import {} from '../monsters'; import { CityQuestData } from './city-quest-data'; import { VillageQuestData } from './village-quest-data'; /** * Type guard for a {@link HuntQuest} */ export function isHuntQuest(quest) { return quest.type === 'hunt'; } /** * Type guard for a {@link MultiHuntQuest} */ export function isMultiHuntQuest(quest) { return quest.type === 'multihunt'; } /** * Type guard for a {@link CaptureQuest} */ export function isCaptureQuest(quest) { return quest.type === 'capture'; } /** * Type guard for a {@link EscortQuest} */ export function isEscortQuest(quest) { return quest.type === 'escort'; } /** * Type guard for a {@link SlayQuest} */ export function isSlayQuest(quest) { return quest.type === 'slay'; } /** * Type guard for a {@link RepelQuest} */ export function isRepelQuest(quest) { return quest.type === 'repel'; } /** * Type guard for a {@link GatheringQuest} */ export function isGatheringQuest(quest) { return quest.type === 'gather'; } /** * Type guard for a {@link HarvestQuest} */ export function isHarvestQuest(quest) { return quest.type === 'harvest'; } /** * @param id Large Monster ID to search for * @param region quest regions to return * @returns a list of quests with a given large monster as the target */ export function getQuestsWithLargeMonster(id, region) { const cityQuests = Object.values(CityQuestData.starLevels) .flat() .concat(CityQuestData.events); const villageQuests = Object.values(VillageQuestData.starLevels).flat(); let quests = []; switch (region) { case 'Village': quests = villageQuests; break; case 'City': quests = cityQuests; break; case 'Both': quests = villageQuests.concat(cityQuests); break; default: throw new Error(`Invalid quest region ${region}`); } // Filter down quests that contain this large monster ID return quests.filter(quest => quest.bosses.some(bossInfo => bossInfo.monsterId === id)); } /** * @region Village or City * @starLevel 1 star, 4 star, etc * @returns all quests corresponding to the provided region and star level */ export function getQuestByStarLevel(region, starLevel) { switch (region) { case 'Village': return Object.values(VillageQuestData.starLevels[starLevel]); case 'City': return Object.values(CityQuestData.starLevels[starLevel]); default: throw new Error(`Invalid quest region ${region}`); } } /** * @returns all arena quests from a particular region */ export function getArenaQuests(region) { switch (region) { case 'Village': return Object.values(VillageQuestData.arena); case 'City': return Object.values(CityQuestData.arena); default: throw new Error(`Invalid quest region ${region}`); } } /** * @returns all event quests from a particular region */ export function getEventQuests(region) { switch (region) { case 'Village': return Object.values(VillageQuestData.events); case 'City': return Object.values(CityQuestData.events); default: throw new Error(`Invalid quest region ${region}`); } } /** * @returns Quest with a given ID * @throws error if quest cannot be found */ export function getQuestById(questId) { const villageQuests = Object.values(VillageQuestData.starLevels) .flat() .concat(VillageQuestData.arena); let quest = villageQuests.find(quest => quest.id === questId); if (quest) return quest; const cityQuests = Object.values(CityQuestData.starLevels) .flat() .concat(CityQuestData.events) .concat(CityQuestData.arena); quest = cityQuests.find(quest => quest.id === questId); if (!quest) throw new Error(`Could not find quest with ID ${questId}`); return quest; } /** * Verify if a monster is present in a particular quest * @returns true if monster is in quest, otherwise false */ export function isMonsterInQuest(monsterId, questId) { const quest = getQuestById(questId); return quest.bosses.some(boss => boss.monsterId === monsterId); } //# sourceMappingURL=quests-util.js.map